En un foro me encontré un post referente al dichoso Redondeo que hacen a nivel nacional y que recaudan las tiendas comerciales, ¿alguien sabe si esto es cierto?
Ayer en un centro comercial, Soriana para ser exactos, mi padre redondeó su cuenta, algo un tanto insignificante y una práctica muy común en todos y cada uno de los centros comerciales del país, en el ticket de compra aparecía "redondeo 85 centavos"; mas lo que despertó mi instinto, "mi instinto legal" fué que, en la pantalla de la cajera aparecía el siguiente concepto: "Donación Cáritas A.C.". Al ver lo anterior escrito, le pregunté a la cajera que si ellos (es decir "Soriana") lo manejaban como una donación, a lo cual me respondió que sí, pues bueno ahora litigando fiscal entiendo que todas y cada una de la donaciones son deducibles de impuestos para cada contribuyente siempre y cuando se expida el dicho comprobante fiscal. Basado en lo anterior, le pedí a la cajera que me diera mi comprobante de donación, claramente la respuesta fue una negativa ya que ellos solo lo manejan como redondeo. Pedí hablar con el gerente ya que evidentemente bajo mi razonamiento había una evasión fiscal escondida tras un redondeo, llego el gerente y le dije que si podía expedirme un recibo de donación a cargo de Cáritas a.c. por todas mis compras realizadas en dicha tienda ya que, ese era el concepto y quería deducirlas (evidentemente le dije que traía conmigo mis tickets de compra, falso pero buenoooo, esa era la onda ) el gerente me negó mi comprobante (que ojo! es mi derecho), y trató de explicarme que bueno, ellos solamente son captadores del efectivo, es decir juntan la suma de capital del redondeo y lo entregan a Cáritas A.C. Terminé pidiéndole que me regresara mis 80 centavitos porque no iba a participar en una defraudación fiscal y accedió. ¿¿¿Porqué defraudación fiscal???
Pues es simple, ellos ( oséase, todas las tiendas de súper mercado) recaudan una cantidad específica de dinero a lo largo del mes, calculemos que de cada compra recaudan 50 centavos, es claro que en un mes recaudan una muy alta cantidad de pesos. Esa cantidad es recolectada en este caso por Soriana S.A. de C.V. y entregada a Cáritas A.C . ojo, el dinero que es de un montón de ciudadanos y cooperación de los mismos no es entregado (suponiendo que en efecto los centros comerciales donen ese dinero colectado) en nombre de todos y cada uno de los contribuyentes REALES, sino en nombre de "Soriana" por lo que el recibo de donación es a nombre de "Soriana"... más claro?? Lo que tú donaste se lo adjudica otra persona, y ella lo deduce es decir hace uso de TU dinero para ahorrarse impuestos, es decir defrauda a el fisco y paga con tu dinero impuestos que el debería de pagar con el suyo.
Así que la próxima vez que te pidan el redondeo piénsalo. No digo que no dones, sino que hazlo directamente ante las instituciones y no ante una empresa "intermediaria" Si calculamos que en un día de quincena, por una caja pasan 30 clientes por hora, y si lo multiplicamos por 25 cajas, por 15 horas en que está abierta la Soriana, con un supuesto de 50 centavos de redondeo por cada compra, nos da un total de 5,625 pesos por tienda. Existen 220 tiendas de Soriana en la república, se metieron $1,237,500 pesos.
Si gana y ese es un milloncito diario, calcula mensualmente que es la forma en que se deduce y nada más chécate la gran cantidad de $$$ impuestos que NO no pagan...
EFE El Universal Nueva Delhi, India Miércoles 07 de marzo de 2007
12:11 El asombro se apoderó hoy de la familia Bhatacharya cuando, al preparar la ceremonia de cremación del cuerpo de Deepak, éste apareció por la puerta de su casa, en el estado indio de Chatisgarh.
El error se produjo tras la identificación equivocada del cadáver de un hombre ahogado en el mayor lago de Raipur, capital de ese estado del centro oriente de la India, que el cuñado de Deepak, Kalyan, tomó por el de su pariente, según la agencia india UNI.
La familia recibió la noticia del supuesto deceso y el cuerpo fue enviado a la casa, donde comenzó una procesión funeraria sin que los compañeros de trabajo de Deepak, enterados de la situación, pudieran avisarle porque se había marchado a pagar la factura del teléfono.
Una vez enterado de la confusión, Deepak Bhatacharya corrió hacia su domicilio y entró en el preciso momento en que el cuerpo del finado estaba a punto de ser comido por las llamas.
"Admito que cometí un error, pero el cadáver que identifiqué se parecía a mi cuñado", dijo Kalyan.
Está muy bueno, te muestra muchas cosas acerca de los procesos que están corriendo en tu equipo, te da detalle de los DLLs que utilizan dichos proceso y otras cosillas, es como un Task Manager ++.
Denle un vistazo y mandan sus mentarios.
Ah, se me olvidaba comentar es una herramienta de MS. Creo que vale la pena revisarlo
SQL Server 2000 offers some capabilities for returning XML output via HTTP using SQLXML—and, of course, SQLXML supports Web services creation. Although not rocket science, setting up, configuring, and using Web services in SQL Server 2000 does require a little effort (see the SQLXML documentation about Web services in SQL Server 2000).
When .NET came about, people began writing Web services in C# or VB.NET. They simply connected into SQL Server (or any data store, for that matter) to retrieve the data. .NET made creating Web services as simple as 1-2-3:
Create some stored procedures.
Write some WebMethods to return the data from said stored procedures.
Presto! You have a Web service.
But now, the next generation of Web services is hitting the streets. SQL Server 2005 supports native HTTP SOAP via a feature known as HTTP Endpoints. For those who don't know, Simple Object Access Protocol (affectionately known as SOAP) is a lightweight messaging protocol that Webopedia defines as follows:
"Short for Simple Object Access Protocol, a lightweight XML-based messaging protocol used to encode the information in Web service request and response messages before sending them over a network. SOAP messages are independent of any operating system or protocol and may be transported using a variety of Internet protocols, including SMTP, MIME, and HTTP ."
This new HTTP Endpoints feature in SQL Server 2005 is the subject of this article.
HTTP Endpoints
So what is an HTTP Endpoint? You may have heard that it is SQL Server 2005's means for creating Web services, but it actually is much more. An HTTP Endpoint also is a means of creating interfaces via HTTP or TCP for SOAP, T?SQL, Service Broker, and even database mirroring. Although these other functions are very intriguing, this discussion concerns only the ability to create Web services in SQL Server—Web services that can return rowset data, scalar values, messages, and even errors, all of which are serialized into XML automatically. And, an HTTP Endpoint does all of this without requiring you to install IIS (it uses the Windows 2003 kernel module http.sys).
Because I like to learn from examples, I am going to teach by example. I demonstrate how to use HTTP Endpoints by walking through an example from start to finish. Before starting, here are a few notes to consider:
This demonstration uses the new demo database called AdventureWorks.
Native HTTP SOAP in SQL Server 2005 is not supported on Windows XP. If you want to try the examples, you need Windows Server 2003.
SQL Server 2005 Express Edition (the new MSDE) does not support HTTP Endpoints, so be sure to install the Developer Edition.
I do not explain how to use SQL Server Management Studio to execute SQL scripts. I trust you know how to do this.
Security
Because HTTP Endpoints are a server-level feature, security of endpoints is also on the server level. Of course, the serveradmin system role can create, alter, and drop endpoints from the SQL Server instance, but how do you allow developers to manage these endpoints without giving them the excessive permissions of this system role?
The answer lies in SQL Server 2005's new ability to assign server-level permissions to logins, as shown here:
GRANT ALTER ANY HTTP ENDPOINT TO peter
With this command, you can allow the peter login to manage HTTP Endpoints without giving other unnecessary permissions. The following is a list of permissions that you can modify via GRANT, DENY, or REVOKE:
{GRANT|DENY|REVOKE} ALTER ANY ENDPOINT TO Login
Controls the ability to alter any HTTP Endpoint; also allows permission to transfer ownership and connect to any endpoint
{GRANT|DENY|REVOKE} ALTER ON ENDPOINT:: EndPointName TO Login
Controls whether a login can alter a specific HTTP Endpoint; also allows permission to transfer ownership and connect to the specified endpoint
{GRANT|DENY|REVOKE} CONTROL ON ENDPOINT:: EndPointName TO Login
Controls whether a login can alter or drop a specific HTTP Endpoint; also allows permission to transfer ownership and connect to the specified endpoint
{GRANT|DENY|REVOKE} CONNECT ON ENDPOINT:: EndPointName TO Login
Controls whether or not a login can connect to (execute requests against) an HTTP Endpoint
{GRANT|DENY|REVOKE} TAKE OWNERSHIP ON ENDPOINT:: EndPointName TO Login
Controls whether a login can take ownership of the HTTP Endpoint
{GRANT|DENY|REVOKE} VIEW DEFINITION ON ENDPOINT:: EndPointName TO Login
Controls the ability for a login to see the metadata (definition) of the HTTP Endpoint
Consider one last example. If I want to deny the peter login the ability to use an HTTP Endpoint named SQLEP_Financial, I would execute the following statement:
DENY CONNECT ON ENDPOINT::SQLEP_Financial TO peter
Providing a Source for Data
The first order of business is to create the code components that will be the source of information for the endpoint. I create two stored procedures and one user-defined function (UDF), as shown in Listing 1:
Listing 1
USE AdventureWorks GO CREATE PROCEDURE prProductList AS SELECT Product.ProductID, Product.ProductNumber, Product.Name FROM Production.Product AS Product INNER JOIN Production.ProductInventory AS Inventory ON Product.ProductID = Inventory.ProductID INNER JOIN Production.Location AS Location ON Inventory.LocationID = Location.LocationID WHERE Product.ListPrice > 0 AND Location.LocationID = 6 --Products from Misc Storage only ORDER BY Product.Name GO CREATE PROCEDURE prProductStockInfo @ProductID int AS IF (SELECT ListPrice FROM Production.Product WHERE ProductID = @ProductID) = 0 BEGIN RAISERROR ('Product not available for retail sale', 11, 1) END ELSE BEGIN SELECT Product.ProductID , Product.ProductNumber, Product.Name, Product.Weight, Product.WeightUnitMeasureCode, Product.ListPrice, Inventory.Quantity FROM Production.Product AS Product INNER JOIN Production.ProductInventory AS Inventory ON Product.ProductID = Inventory.ProductID INNER JOIN Production.Location AS Location ON Inventory.LocationID = Location.LocationID WHERE Product.ProductID = @ProductID AND Location.LocationID = 6 --Misc Storage END GO CREATE FUNCTION dbo.fnProductPhoto (@ProductID int) RETURNS varbinary(MAX) AS BEGIN DECLARE @largePhoto varbinary(max)
SELECT @largePhoto = ProdPhoto.LargePhoto FROM Production.ProductPhoto AS ProdPhoto INNER JOIN Production.ProductProductPhoto ProdProdPhoto ON ProdPhoto.ProductPhotoID = ProdProdPhoto.ProductPhotoID WHERE ProdProdPhoto.ProductID = @ProductID
RETURN (@largePhoto) END
The first procedure returns a list of products (product ID, name, and number) from the AdventureWorks database. The second procedure returns more details about a product, including inventory levels. The UDF returns a single varbinary value containing the product photo.
Creating the Endpoint
Once you have your procedures and functions set up, you can create the endpoint (Web service). The following code creates the endpoint on my server:
CREATE ENDPOINT SQLEP_AWProducts STATE = STARTED AS HTTP ( PATH = '/AWproducts', AUTHENTICATION = (INTEGRATED), PORTS = (CLEAR), SITE = 'win2k301' ) FOR SOAP ( WEBMETHOD 'ProductList' (NAME='AdventureWorks.dbo.prProductList'), WEBMETHOD 'ProductStockInfo' (NAME=' AdventureWorks.dbo.prProductStockInfo'), WEBMETHOD 'ProductPhoto' (NAME='AdventureWorks.dbo.fnProductPhoto'), BATCHES = DISABLED, WSDL = DEFAULT, DATABASE = 'AdventureWorks', NAMESPACE = 'http://Adventure-Works/Products' )
Believe it or not, you are now ready to consume this Web service. Before doing that, though, examine the CREATE ENDPOINT statement. Starting from the top, the first thing you will notice is the name of the endpoint, SQLEP_AWProducts, which is how you refer to the Web service within your client code (see Figure 1). PATH is the virtual path on the server for the Web service. So, for this example, you would access the Web service at http://win2k301/AWproducts, but it would be called SQLEP_AWProducts in your .NET application code. Table 1 provides explanations for this and other arguments used in the AS HTTP clause.
Figure 1: Object Browsing the Web Service in Visual Studio.NET 2005
Table 1: Arguments Used in the AS HTTP Clause
Argument
Description
PATH
The virtual URL path on the server where the Web service will reside
AUTHENTICATION
The method of authentication; can be BASIC, DIGEST, or INTEGRATED
You should try to use INTEGRATED when possible, since it is the most secure. It will try to use Kerberos-based authentication if possible (otherwise, NTLM).
DIGEST is not as secure as INTEGRATED. You should use it only if INTEGRATED authentication is not possible.
BASIC authentication is the least secure. You should use it only if you can't implement either INTEGRATED or DIGEST authentication methods. BASIC requires SSL (see PORTS below).
PORTS
CLEAR (HTTP - port 80 by default) SSL (HTTPS - port 443 by default)
SITE
The name of the server on which the Web service is running
The STATE argument can have one of three values:
STARTED—listening and responding
DISABLED—neither listening nor responding
STOPPED—listening, but returns errors to client requests
You can change the state of an existing Web service using the ALTER ENDPOINT statement. For example, to disable the endpoint, you can execute:
ALTER ENDPOINT SQLEP_AWProducts STATE = DISABLED
The FOR SOAP clause determines which methods the Web service will expose, which other features are exposed (dynamic SQL, for example), and other characteristics of the Web service. In this example, three methods are exposed: the two stored procedures and the UDF shown in Listing 1. WEBMETHOD requires the name of the exposed method as its first argument. As you can see in the code, it does not have to match the name of the actual stored procedure or UDF that it is exposing. The next argument of WEBMETHOD is the fully qualified NAME of the object you are exposing.
The BATCHES argument specifies whether or not the Web service supports ad hoc queries. WSDL indicates how the WSDL document generation will occur; DEFAULT indicates that the WSDL document will be created automatically. SQL Server 2005 allows you to implement custom WSDL generators using the CLR-based abilities of SQL Server 2005 (see Books Online for more details). DATABASE is the name of the database that will be accessed from the endpoint (endpoints are defined at the server level). And finally, NAMESPACE is, well, the namespace for the endpoint.
You have now officially created a Web service using SQL Server 2005. Congratulations.
The Client to Consume Your Web Service
Consuming a Web service created in SQL Server 2005 as an HTTP Endpoint is similar to consuming a Web service created in C#. That's the beauty of Web services and SOAP. Begin a new Windows application in Visual Studio.NET and add the following controls to the form (ControlType: name):
Button: btnExecSP
DataGridView: dgvProduct
ListBox: lstProducts
PictureBox: picProduct
You will need to add the Web reference before writing any code. Again, you can browse to http://server/awproducts?wsdl to create the Web reference. Keep in mind that your Web reference object will be named server_AWProducts (my machine is named win2k301 so I browse to http://win2k301/awproducts?wsdl, and my Web reference object is win2k301_AWProducts). You will have to tweak the code to the Web reference name that you create.
Once the Web reference is in place, you can double-click the Button control and add the code in Listing 2.
The first thing you will notice is that the Web method returns an object array. Because SQL Server can actually send back not only result sets, but also messages, errors, and other types (see Table 2 for more details), you should validate that you received what you expected. Listing 2 does a check by using the ToString method on the first element in the returned object array and comparing it to "System.Data.DataSet". If true, you know you can safely cast the object to a DataSet type and work with it from there.
Table 2: Object Return Types
Item from SQL Server
Corresponding .NET Object
Results of SELECT statement
System.Data.DataSet
Results of a SELECT statement with FOR XML
System.Xml.XmlElement
Raised error
SqlMessage (from WSDL)
Message
SqlMessage (from WSDL)
Output parameter
SqlParameter (from WSDL)
Rows affected
SqlRowCount (from WSDL)
RETURN statement value
System.Int32
Now double-click the ListBox control and add the following code:
You should pay attention to a couple of details here. First, this code snippet checks for another type of returned object: SqlMessage. Notice the type name (from the ToString method) is Yukon_Http_v1.server_virtualDirectory.SqlMessage. This type is defined in the WSDL document and is unique to each Web service. The following listing shows a snippet from the WSDL of the SqlMessage complexType:
The last tidbit for this discussion is the Byte array that is returned from the UDF. Because this UDF returned varbinary data, its XSD type is xsd:base64Binary. Thus, it is a Byte array in .NET. SQL Server's int data type is the XSD type xsd:int and Int32 in .NET. Books Online has more information about the mapping of types.
Easy Web Service Creation
HTTP Endpoints provide a way to create various interfaces into SQL Server, including features such as Service Broker, database mirroring, and of course, Web services. It makes the creation of a Web service (that exposes SQL Server data) a snap for experienced programmers and database administrators alike. Enjoy!
About the Author
Peter DeBetta is an independent software consultant who trains exclusively for Wintellect. Peter regularly publishes on the topic of SQL Server and recently wrote Introducing SQL Server 2005 for Developers for Microsoft Press. He also speaks at conferences such as VSLive!, WinSummit, WinDev, and Devscovery.
Bueno esta vez les comparto una divertida situación que deberíamos hacer realidad, para que sepan las empresas y mercadologos lo latoso que suelen ser las llamadas a atención a clientes...
Espero se rían un rato....
"La venganza" de los usuarios contra las empresas...
RIIIIING!!...RIIIIING!!... - ¿Hola? - Buenos días, ¿Usted es el titular de la línea? - Sí, soy yo mismo. - ¿Me puede decir su nombre por favor? - José Luis - Señor José Luis, le llamo de Telmex para ofrecerle una promoción consistente en la instalación de una línea adicional en su casa, en donde usted tendrá derecho a... - Disculpe la interrupción Señorita, pero, exactamente ¿quien es usted? - Mi nombre es Silvina Maciel, de Telmex y estamos llamando... - Silvina, discúlpeme, pero para nuestra seguridad me gustaría comprobar algunos datos antes de continuar la conversación, ¿le importa? - No tengo problemas señor - ¿Desde que teléfono me llama? En la pantallita del mío solo pone "NUMERO PRIVADO" - El interno mío es el 1004 - ¿Para qué departamento de Telmex trabaja? - Telemarketing Activo - ¿Me podría dar el número de trabajadora de Telmex? - Señor, disculpe, pero creo que toda esa información no es necesaria... - Entonces lamentablemente tendré que colgar, porque no tengo la seguridad de hablar con una trabajadora de Telmex - Pero yo le puedo garantizar... - Vea Silvina, cada vez que yo llamo a Telmex, antes de poder comenzar cualquier trámite, estoy obligado a dar mis datos a toda una legión de empleados...! - Está bien Señor, mi numero es el 34591212 - Un momento mientras lo verifico, no se retire Silvina...(dos minutos) - Un momento por favor, toda la gente en casa se encuentra ocupada....(cinco minutos) - ¿Señor? - Un momento por favor, toda la gente en casa se encuentra ocupada.... - Pero... Hola Señor...! - Sí Silvina, gracias por la espera, nuestros sistemas están un poco lentos hoy... ¿Cual era el asunto de su llamada? - Lo llamo de Telmex, estamos llamando para ofrecerle nuestra promoción "Línea Adicional", en la que usted tiene derecho al uso de otra línea a muy bajo costo. ¿Usted estaría interesado José Luis? - Silvina, le voy a comunicar con mi mujer, que es la encargada de la sección de adquisición de productos técnicos de la casa; por favor, no se retire. (Coloco el auricular del teléfono delante de una grabadora y pongo el CD de Lambada Mix 1998 con el Repeat activado. Sabía que algún día, esa porquería de música me sería útil. Después de sonar el CD entero, mi mujer atiende el teléfono): - Disculpe por la espera, me puede decir su teléfono pues en la pantallita del mío solo aparece "NUMERO PRIVADO". - 1004 - Gracias, ¿Con quien estoy hablando? - Con Silvina - ¿Silvina que? - Silvina Maciel (ya demostrando cierta irritación en la voz) - ¿Cual es su número de trabajadora de Telmex? - 34591212 (mas irritada todavía) - Gracias por la información Silvina, ¿en que puedo ayudarla? - La llamo de Telmex, estamos llamando para ofrecerle nuestra promoción "Línea Adicional", en la que usted tiene derecho a otra línea. ¿Estaría interesada? - Voy a ingresar su solicitud en nuestro programa de Nuevas Adquisiciones y dentro de algunos días nos contactamos con usted. ¿Puede tomar nota del numero de ingreso al programa por favor?... ¿hola?, ¿hola? TUT...TUT...TUT....TUT...TUT...
Create Dedicated Service Handlers Creating your own HTTP handler in ASP.NET 1.1 or 2.0 gives you a flexible and fast way to move data to clients, browsers, and other Web pages. by Peter Vogel
Web Services provide a consistent, standards-based way to provide Web-based access to server resources.
ADVERTISEMENT
That said, you might be better off creating an ASP.NET HTTP handler when performance is paramount and access is restricted to internal clients. And an ASP.NET handler outperforms every other option in ASP.NET when it comes to delivering data to the client over the Web.
In addition to providing high-efficiency access to server-side resources, an ASP.NET handler provides you with more flexibility in integrating those resources into Web, client-server, and desktop applications. You can call a handler from a page's HTML, server-side code, or client-side code. You can even call a handler from a Windows Forms client. The best part: They are easy to write.
An ASP.NET handler outperforms all of your alternatives in each of the scenarios described (see Table 1).
A handler gains efficiency through what it lacks. Think of an ASP.NET handler as an ASPX file, one that fires no events and has no HTML to render. These missing elements reduce a handler's overhead and give it a performance advantage over an ASP.NET Web Form.
The first step in creating your handler is to add a new file with the extension ASHX to your ASP.NET Web site (see Figure 1). This file must contain a WebHandler processing directive and, if you are going to put your code in the ASHX file itself, include the Language and Class attributes. This example defines a handler that you write in Visual Basic, defining a class named EmployeeInfo:
ASP.NET creates no code file for an ASHX file by default. Many programmers prefer to place their code in a separate file, especially in Visual Studio 2003 where code in an ASHX file doesn't have IntelliSense, code highlighting, or debugging support. To use a code file with your ASHX file, you must add a CodeBehind attribute to the ASHX file's WebHandler directive and set the attribute to the name of your code file. You then add a Class file with that name to your Web site (Visual Studio 2005 will place the file in your project's App_Code folder). You no longer place the code in the ASHX file, so you can remove the Language attribute from the WebHandler directive:
The code for your handler must implement the IHttpHandler interface. Implementing this interface requires you to add code for one method (ProcessRequest) and one property (IsReusable).
Improve Scalability You can improve your application's scalability by having the IsReusable property return True. This causes ASP.NET to cache your handler after the first user requests it. If your handler will tie up some limited resource or be used infrequently, you should return False from this property.
You must also specify the content type your handler returns by using the ContentType property of the Context object that ASP.NET passes to the ProcessRequest method. You can test your handler just by making your ASHX file your start page and pressing the F5 key if you set the ContentType property to "text/HTML." Your handler's starting point should like this after you make these changes:
Imports System Imports System.Web
Public Class EmployeeInfo Implements IHttpHandler Public Sub ProcessRequest(ByVal context _ As HttpContext) Implements _ IHttpHandler.ProcessRequest Context.Response.ContentType = "text/HTML" End Sub Public ReadOnly Property IsReusable() As Boolean _ Implements IHttpHandler.IsReusable Get Return True End Get End Property End Class
Create Dedicated Service Handlers (Continued)
So far, you've created the skeleton for your handler, and put your business logic in the ProcessRequest method of your handler (ASP.NET calls this method automatically whenever a client requests your handler). You also have access to a number of existing ASP.NET objects through the Context object passed to the ProcessRequest method, including the Request, Response, and User objects.
The simplest possible ProcessRequest returns a string by using the Response object's Write method:
Public Sub ProcessRequest(ByVal context _ As HttpContext) Implements _ IHttpHandler.ProcessRequest
context.Response.ContentType = _ "text/HTML" context.Response.Write ("Hello World") End Sub
You can also use the Request object to access any of the information sent up to the server by the client as part of the request. This code in the ProcessRequest routine pulls the value of a parameter called "name" from the querystring and incorporates it into the string you write back to the browser:
You can request the handler using only an URL, which enables you to embed the URL into any Web page. Using an URL for your handler, along with any querystring parameters, makes it an attribute of a tag that normally holds a URL. This causes a browser to incorporate the text returned by the handler into the page. This code puts the URL in the src attribute of an iframe tag:
Taking advantage of the Response object's methods for transferring the contents of files and streams to the client enables you to build a handler that lets a client request a file from the server. For example, you can use the WriteFile method to transfer a file's contents directly to the output stream without buffering. This code uses the name in the QueryString to build the name of a graphic file to send to the client:
Integrate Your Handler You can also integrate your handler into the surrounding application by accessing user data in the Session object from your handler's code. Unfortunately, by default, you get an "Object reference not set to an instance of an object" message if you attempt to use the Session property on the Context object. Implementing the IRequiresSessionState interface enables you to gain access to the Session object. This interface doesn't require you to implement any methods or properties—its presence signals to ASP.NET that it needs to instantiate the Session object:
Public Class EmployeeInfo Implements IHttpHandler Implements IRequiresSessionState
ADVERTISEMENT
This more complex example reads data from the Northwind database to build an HTML table of employee information. Note that you don't pull information from the querystring. Instead, use a value in the Session object to determine which employee's information to display. The code builds an img tag to display the employee photo pointed to by the PhotoPath field (see Listing 1 and Figure 2).
These examples discussed so far play with text at a basic level. However, you can also use a handler to send binary data to the client, assuming that the client can deal with the data. In the Northwind database's Employee's table, the Photo column is a BLOB field containing the employee's photo. Fortunately, in a browser, the <img> tag expects to receive a string of binary data. All your handler must do is extract the binary data from the field and send it to the client.
Create Dedicated Service Handlers (Continued)
You need to read a binary field twice using the DataReader's GetBytes method in order to retrieve its contents. First, you call the GetBytes method with Nothing as its third parameter to determine the number of bytes in the field. You then use that value to dimension a buffer that to hold the binary data. With the buffer dimensioned, you call GetBytes again, passing the buffer as the third parameter to load the buffer with data from the field.
Begin by retrieving the record for the employee in the Session object:
Dim Photo() As Byte Dim lngLength As Long Dim sbOutPut As New StringBuilder Dim con As New SqlConnection( _ ConfigurationManager.ConnectionStrings( _ "NwindConnection").ConnectionString) Dim cmd As SqlCommand = con.createcommand cmd.CommandText = _ "Select Photo " & _ " Where LastName ='" & _ context.Session("EmployeeName") & "';"
Next, extract the Photo field's data:
con.Open() Dim rdr As SqlDataReader = cmd.ExecuteReader If rdr.Read() Then lngLength = rdr.GetBytes(0, 0, Nothing, 0, _ Integer.MaxValue) - 1 ReDim Photo(lngLength) rdr.GetBytes (0, 0, Photo, 0, lngLength) con.Close
The Response object's OutputStream provides a mechanism to stream data to the client. You use the Write method of the OutputStream to transfer data from the buffer to the client. Note that you must skip the first 78 bytes of the Photo field in order to get valid output for the <img> tag (for reasons unknown to me):
context.Response.OutputStream.Write( _ Photo, 78, lngLength - 78) End If
Use this tag to call your handler and display the contents of the Photo field in a Web page:
Beyond HTML You're not limited to calling your handler from HTML tags. You can use the XMLHTTP object to call your handler if you need to process the result returned from your handler with client-side code. This IE-specific code uses the XMLHTTP object to call a handler and catch the result:
var xmlhttp = new ActiveXObject( "Microsoft.XMLHTTP"); xmlhttp.open("GET", "http://MyServer/ MyHandlerSite/ EmployeeInfo.ashx ?name=Davolio", false); xmlhttp.Send(null); var result = xmlhttp.responseText;
This version of the code works in recent versions of FireFox, Mozilla, Safari, and Netscape:
var xmlhttp = new XMLHttpRequest(); xmlhttp.open("GET", "http://MyServer/ MyHandlerSite/EmployeeInfo.ashx?name= Davolio", false); xmlhttp.send(null); var result = xmlhttp.responseText;
You can also call a handler from server-side code in a WebForm by using the WebClient object. The DownloadString method of the WebClient object accepts the URL for the handler and returns the handler's result as a string:
Dim wc As New System.Net.WebClient Me.TextBox1.Text = wc.DownloadString( _ "http://MyServer/MyHandlerSite/" & _ "EmployeeInfo.ashx ?name=Peter")
Note that you shouldn't call your handler from a page on the same site because doing so is less efficient. Instead, you should create an object with the necessary functionality and then add a handler to act as a façade for that object. This design enables you to access the object directly from the server-side code of WebForms on the same site.
The WebClient object is still useful. You can use the WebClient-based code from other sites or in a Windows Form client to retrieve data from your ASP.NET handler. The WebClient and XMLHTTP objects effectively provide any client with a highly efficient way of retrieving data from your Web application. Clients don't need to create a proxy with a handler, in contrast to using clients with a Web Service. Clients also give you more ways to integrate calls into their code.
Nothing is free, however. If you move away from Web Services, you also have to give up the standards provided by the Web Services specification. You won't be able to count on a Web Service's WSDL file to define your message formats, but instead create and process a set of custom formats. Handlers are efficient, but you should use them only to transfer data when you are also creating the clients that access the handlers.
You now have everything that you need to implement a synchronous ASP.NET handler. But you can also create asynchronous handlers that will provide better scalability than the synchronous handler discussed in this column previously. One warning: Asynchronous handlers are more complex to write than a synchronous handler. In order to take advantage of asynchronous processing, you will need to launch a new thread and create a new class that returns a custom IAsyncResult object.
About the Author Peter Vogel (MBA, MCSD) is a principal at PH&V Information Services. Peter teaches for Learning Tree International and wrote its ASP.NET and Technical Writing courses. Peter wrote Visual Basic Object & Component Handbook (Prentice Hall) and is currently working on the second edition of Professional Custom Controls, Web Parts, and User Controls with ASP.NET 2.0 for Wrox.
Escrito por Ivy Nevares conceptos de Keith Raniere
Desde el momento que los invasores arribaron, respiraron nuestro aire, comieron y bebieron, estaban condenados. Fueron aniquilados, destruidos, después de que todas las armas y dispositivos del hombre habían fallado, por las más diminutas criaturas que Dios, en su sabiduría, puso en esta tierra. Por el precio de mil millones de muertes, el hombre se había ganado esta inmunidad, este derecho a sobrevivir entre los infinitos organismos de este planeta. Y ese derecho es nuestro contra todo reto. Porque los hombres ni viven ni mueren en vano.
–del filme "La guerra de los mundos" (2005) (guión cinematográfico de Josh Friedman y David Koepp)
Hay algo extrañamente perturbador acerca de la última adaptación al cine de la novela de H.G. Wells La guerra de los mundos (1898). Quizás tenga que ver con un sentido de impotencia, una pérdida total de control: imagine la Tierra de pronto devastada por extraterrestres. La invasión es imprevista sin causa o razón aparente, los ataques son desastrosos e impredecibles, y la respuesta y medios de defensa humanos inadecuados en yuxtaposición a los del agresor. Aún cuando se acerca el tiempo de la resolución, la humanidad es un observador al igual que durante el ataque inicial: el medio para nuestra salvación no es de manera alguna producto directo del ingenio humano... ¿o sí?
Viendo la película o leyendo la novela, puede Ud. también llegar a una conclusión similar: el medio para finalmente vencer a la invasión está más allá de los confines humanos. Sin embargo, ¿podría el diminuto organismo vencer al ejército invasor sin la existencia de la humanidad? Si los humanos jamás hubieran habitado este planeta, ¿existiría de la misma forma ese organismo? ¿O existiría del todo?
Para examinar más este punto, reflexione simplemente sobre las siguientes cuestiones: si uno de sus padres jamás hubiera existido, ¿se vería Ud. igual, sería igual y tendría las mismas experiencias? Y si Ud. jamás hubiera existido, ¿sus padres se verían iguales, serían iguales y tendrían las mismas experiencias? Si examinamos a la Tierra como un sistema, eventualmente encontramos que todos los elementos en ella se interconectan y afectan mutuamente. Dado este principio de interconexión, ¿es posible para cualquier elemento existir exactamente como lo hace ahora si otro elemento del sistema cambiara o fuera eliminado? Similarmente, ¿pudiera cualquiera de los otros elementos existir exactamente como lo hace ahora si el elemento en cuestión fuera diferente o ya no existiera? Por ejemplo, si toda el agua de la Tierra fuera reemplazada por otra sustancia o retirada por completo, ¿habría algún sistema en el planeta que no se viera afectado?
Considere a la penicilina, el antibiótico más utilizado hasta hoy. Inicialmente, la penicilina fue aclamada una droga milagrosa, ya que permitía el tratamiento de infecciones antes incurables. Tan sólo cuatro años después de que la penicilina tuviera amplia disponibilidad, fueron observados casos de resistencia a los antibióticos. Conforme los microbios empezaron a resistir la penicilina, los investigadores médicos respondieron introduciendo variaciones naturales y sintéticas del antibiótico, al igual que otros substitutos químicos. En consecuencia, más y más microbios empezaron a resistir los nuevos tratamientos. Hace algunos meses, el Instituto Nacional de Alergias y Enfermedades Infecciosas de los Estados Unidos reportó que más del 70% de las bacterias que causan infecciones en los hospitales son resistentes a por lo menos uno de los antibióticos más comúnmente usados para tratarlas. Aunque hoy algunas dosis de antibióticos pueden ser hasta 100 veces más fuertes, muchas personas temen que ya casi hemos agotado la mayoría de nuestras opciones.
Los efectos de la penicilina no sólo se limitan a organismos directamente expuestos al antibiótico. Al contrario, los organismos resistentes a la penicilina afectan naturalmente a otros organismos, aparentemente sin relación alguna, con los que interactúan. Por lo tanto, en La guerra de los mundos es posible pensar que el organismo responsable de salvar a la humanidad fue afectado directa o indirectamente por una intervención o descubrimiento humano como la penicilina.
Entre la violencia y la inminente amenaza de aniquilación humana, la obra de ciencia ficción de H.G. Wells presenta un punto de vista optimista de la relación entre los humanos, nuestros avances tecnológicos y el ambiente en el que existimos. Como Wells destaca, hemos coexistido con una multitud de organismos por muchos, muchos años; ganándonos cada uno, mediante nuestra supervivencia, el derecho a existir. Hemos crecido y evolucionado con todos los demás elementos en nuestro sistema y, a su vez, esos elementos han crecido y evolucionado con nosotros. Vistos así, nuestro crecimiento y evolución han sido mutuamente inspiradores.
Pero quizás en esta coexistencia podemos también ganarnos nuestro derecho a morir. Imagine que sí a gotamos todas las posibilidades de tratamiento antibiótico y, en el proceso, damos lugar a bacterias multiresistentes. ¿Están nuestro crecimiento y evolución ultimadamente permitiendo que estos organismos se conviertan en nuestros sucesores evolutivos? ¿O estos organismos nos están simplemente enseñando a ser pensadores orientados a sistemas, y al serlo, nos estamos de hecho ganando nuestro derecho a sobrevivir? ¿Hacia dónde vamos? Ya sea que vivamos o muramos, el resultado dependerá de nuestro aprendizaje.
Cada avance tecnológico trae consigo la posibilidad de grandeza o catástrofe. Por ejemplo, examine el uso de la energía nuclear: en las manos de un líder responsable y humanitario, es una fuente de energía progresista capaz de mejorar la calidad de vida de muchas personas. Sin embargo, la misma tecnología en manos de un misántropo es la más peligrosa de todas las armas. La tecnología es una herramienta y nosotros la portamos. Por lo tanto, nuestras decisiones respecto a la creación, uso y manejo de la tecnología ultimadamente determinan si la posibilidad de grandeza o la de catástrofe será actualizada.
Keith Raniere ha creado un proceso sencillo pero completo de toma de decisiones orientado a sistemas. El proceso utiliza un análisis consciente de los siguientes tres componentes interactivos: la naturaleza y estructura del sistema en sí (lo que es y cómo funciona), las fuerzas impulsoras del sistema (lo que hace y por qué), y el ambiente en el que el sistema existe (lo que el sistema afecta y lo que afecta al sistema). Por ejemplo, si estudio al corazón humano, debo aprender acerca de su anatomía y fisiología (su naturaleza y estructura), su función (lo que hace y lo que lo motiva), y cómo se relaciona con, afecta y es afectado por todos los demás sistemas del cuerpo (ambiente).
El proceso desarrollado por el Sr. Raniere puede ser aplicado al estudio y utilización de cualquier tipo de tecnología, incluyendo la biotecnología. Más específicamente, cualquier decisión que involucre biotecnología debe considerar a la tecnología en sí (naturaleza y estructura), la industria de la cual proviene (lo que hace o su motivación), y el ambiente en el que existe. Una vez que cultivamos un entendimiento más profundo de estos tres componentes y cómo se relacionan, estamos en una posición más ventajosa para tomar decisiones ecológicas con respecto a la biotecnología.
A continuación tenemos una aplicación práctica del proceso de toma de decisiones orientado a sistemas del Sr. Raniere. (Es importante notar que el proceso no se desarrolla de manera lineal donde A es seguido por B, que es seguido por C, y así sucesivamente. Cada componente individual puede requerir atención especial y, conforme aprendemos de él, el aprendizaje transformará la manera en que vemos a los demás componentes.) Para los fines de este estudio, utilizaremos una aplicación hipotética de un agente biotecnológico ambiental, "atopina".
Como científico, Ud. está llevando a cabo un estudio sobre la atopina. ¿Por dónde empezar? Quizás lo más adecuado es definir y entender lo que es la atopina y cómo funciona. Esta parte del proceso, definir el sistema y cómo funciona, es algo físico y mensurable que puede literalmente llevarse a cabo en un laboratorio. En este caso, supongamos que Ud. determina que la atopina es una bacteria que ha sido modificada genéticamente para acelerar los ciclos de carbón y nitrógeno de la tierra, haciendo a las plantas circundantes inusualmente resistentes a diferentes formas de contaminación ambiental.
Conforme empieza usted a entender la estructura y funcionamiento de la ato-pina, naturalmente empieza a determinar lo que la atopina hace. Mientras que la estructura de una cosa o acción es fácilmente mensurable, determinar la motivación detrás de la acción puede requerir mayor consideración. Esta dis-tinción puede compararse con determi-nar la estructura de una acción "colérica" versus determinar la motivación detrás de la acción. Para determinar lo que se hace en un acto se requiere de tiempo, reflexión e hipótesis; es como determinar la intención subyacente de la acción. (Ultimadamente, puede haber diferentes motivaciones posibles detrás de una acción colérica; con el paso del tiempo y la observación podemos más claramente determinar cuál de esas motivaciones es la más acertada).
La estructura y la motivación llegan a conformar un sistema en el cual la estructura determina a la motivación y la motivación determina a la estructura. En este ejemplo, la tecnología determina a la industria y la industria determina a la tecnología. Usted, el científico, puede inicialmente autorizar el uso de la atopina para pruebas en cultivos comerciales. Conforme prueba el agente, puede descubrir que todavía es posible hacer modificaciones para mejorar su desempeño. Una vez que hace los ajustes iniciales (supongamos que compensó excesivamente y ahora la atopina está retrasando el crecimiento de los cultivos), la industria le provee de invaluable retroalimentación para modificar la estructura de la tecnología.
La tercera parte de este proceso de toma de decisiones no es la última; por el contrario, está presente a través de todo el proceso. Aquí Ud. evalúa qué efectos ha tenido la atopina en el ambiente (ya sea que "el ambiente" se refiera a la madre naturaleza o cualquier otro tipo de entorno), y qué efectos ha tenido el ambiente en la atopina. Esta evaluación es importante para reconocer las tendencias naturales de producción y consumo (el vaivén) del ambiente. Puede ser más "holístico" utilizar los elementos ya existentes en un sistema en vez de tratar de imponer esos mismos elementos en otro sistema. Por ejemplo, supongamos que la atopina está ahora autorizada para su uso comercial y Ud. ha determinado que la bacteria prospera mejor en tierra altamente orgánica. Si un colega suyo está por iniciar un negocio agrícola usando atopina y tiene la opción de trabajar con tierra altamente orgánica o de otro tipo, ¿cuál le recomendaría? Es probablemente más ecológico para su colega adquirir la propiedad donde la tierra óptima ya existe, ya que modificar el otro tipo de tierra puede más fácilmente crear desequilibrio en el sistema.
A veces los vaivenes naturales del ambiente no podrán ser usados de la manera más ventajosa; a veces será necesario imponerse a un sistema. Cuando ha determinado claramente que debe imponerse a un sistema, su siguiente pregunta se vuelve, "dada la imposición, ¿cuáles son las ramificaciones?" Idealmente, una industria (aquello que produce) no se impone sobre su ambiente; es óptimo que una industria se desarrolle a partir de tendencias ya existentes en el ambiente, similar a la labor de un buen jardinero.
Con nuestro intelecto, podemos guiar a la biotecnología a través de un proceso teórico en el que nos convertimos en el árbitro último, cultivando y diseñando a la medida la herramienta para cumplir nuestro objetivo. Esta habilidad, aunque común para nosotros, parece ser única de nuestra especia (p. ej. un castor no pasa las tardes desarrollando planos ingenieriles para construir el dique más durable posible para las generaciones de castores por venir). Para nosotros, el ambiente es la tierra, la industria es arar la tierra, la biotecnología es la palanca, la herramienta que nos permite arar, para bien o para mal.
Conforme manifestamos ideas en acciones, cultivamos a esta Tierra. Vemos lo que es posible y buscamos darle forma. De manera similar a la penicilina o la atopina, moldeamos nuestra biotecnología, nuestros propios utensilios del diseñador. La Tierra y sus organismos se desarrollan bajo nuestra mano, adaptándose, diversificándose, muriendo y volviendo a crecer. Pero conforme cultivamos a la Tierra, la Tierra nos cultiva; conforme la Tierra se adapta a nosotros, nosotros también nos adaptamos a la Tierra. Como todo organismo, también buscamos sobrevivir, adaptándonos, diversificándonos, muriendo y volviendo a crecer. Como los más diminutos seres, nosotros también somos la biotecnología de la Tierra.
Y en nuestro papel de jardineros, siendo quienes manejamos la biotecnología, podemos inspirar crecimiento y nutrirnos de él. Pero para hacer esto debemos de ser verdaderos jardineros. Un verdadero jardinero no es un objeto reactivo e inanimado; no planta cosas simplemente porque caen al suelo. Un verdadero jardinero utiliza una visión; planta para el futuro, visualizando un jardín construido en su mente. Ningún animal planea como nosotros. Por ejemplo, un abejorro viaja de una flor a la siguiente recolectando polen para producir miel y otros productos. Aunque el abejorro desempeña un papel crucial en la polinización cruzada de las plantas, el pequeño ser no se detiene en su camino para ponderar las formas en las que puede ayudar a todos los abejorros a ser mejores o a desarrollar métodos para multiplicar su producción por diez. El abejorro, impulsado por el instinto, simplemente se mueve de un momento al siguiente de la misma forma reactiva.
Nosotros somos jardineros a un nivel diferente: vemos jardines donde antes no había jardines. Vemos jardines para un propósito que no es inmediato o aparente; vemos jardines impalpables, magníficos en esplendor y posibilidades sin realizar, sólo esperando su máxima expresión a través de la buena labor de las manos humanas.
Traducido del inglés por Farouk Rojas
Acerca de Executive Success Programs, Inc.
Executive Success Programs, Inc.MR (ESP) ofrece programas de entrenamiento enfocados en crear consistencia en todas las áreas y ayudar a desarrollar las habilidades prácticas, emocionales e intelectuales que la gente necesita para alcanzar su máximo potencial. Todos los programas de ESP utilizan una tecnología punta con patente en trámite llamada Cuestionamiento Racional MR, una ciencia basada en la creencia que entre más consistentes sean las creencias y patrones de conducta de un individuo, más exitoso será en todo lo que haga. El Cuestionamiento RacionalMR permite a las personas volver a examinar e incorporar percepciones que pueden ser la base de limitaciones autoimpuestas.
Leyendo por ahi una artículo en la pagina de MS, encontre un video que no muestra el manejo de los nuevos documentos de Office 2007 en VS 2005.
Por default, los documentos creados en la nueva versión de MS Office estarán basados en el nuevo formato XML para archivos. A diferencia de los documentos binarios de las anteriores versiones de Office, los nuevos formatos XML de Office son compactos, robustos y facilitan una mejor integración entre los documentos y los sistemas back-end. Esta especificación abrierta y libre maximiza la interoperatividad en ambientes eterogeneos, y facilita la integración de los documentos office con las tecnologías de terceros.
Los nuevos formatos XML de Office introduce un nuemero de beneficios no solo para los desarrolladores y las soluciones que estos construyen, sino también para los usuarios individuales y para las organizaciones.
Aquí les dejo un video que muestra el manejo de los documentos de Office 2007 en VS 2005. Les rescomiendo que lo vena en el tamaño original, se aprecia mucho mejor, aqui esta el link directo al video
Espero nos sirva de algo.
Si no puedes ver el video.. usa Firefox :P, o da click aqui
Estrategias de disminución de deudas Por Ana Rosa Ramírez
En artículos anteriores revisamos cuánto y cómo gastamos los mexicanos, definimos la capacidad de pago como el ingreso menos el gasto en un período de tiempo, te mostramos cómo obtener fácilmente el nivel de endeudamiento de una persona en un mes (pago total a deudas dividido entre ingreso total) y te proporcionamos el Planificador de gastos y endeudamiento para optimizar tus ingresos y gastos y conocer si tu nivel de endeudamiento se encuentra menor o igual a 30% del ingreso total, un nivel sano pues permite continuar con los pagos de tus deudas.
También te aconsejamos revisar tus finanzas. Si lo hiciste yte encontraste con la desagradable sorpresa de que tienes un nivel de endeudamiento superior a 30% y lo deseas reducir, ¡No te preocupes!, en esta entrega te brindamos estrategias para disminuir tus deudas.
¿Cómo saber si necesito disminuir mis deudas? De acuerdo con Marco Carrera, Director de Estudios de Mercado de la Condusef, una persona o familia está en quiebra cuando para pagar las deudas se pide prestado por otro lado y se hace una espiral de deudas.
Considera además las siguientes señales como puntos de atención:
1. Sólo te alcanza para realizar el pago mínimo de tus tarjetas de crédito. 2. Tienes que usar tu tarjeta de crédito para financiar gastos que antes hacías en efectivo. 3. Te quedas sin dinero a mitad de quincena y el resto la financias con tu tarjeta de crédito. 4. Estás cerca de tu límite de crédito en tus tarjetas. 5. Te rebotan los cheques.
Cuando estas señales han aparecido es bueno comenzar un plan de acción para reducirlas, pero es imperante hacerlo si te encuentras en alguna de las siguientes situaciones:
1. Perdiste tu fuente regular de ingresos. 2. Cuando el hacer frente a una emergencia, como un gasto médico mayor o un accidente, tiene un impacto financiero. 3. Te atrasas sistemáticamente en tus deudas, de tal manera que están a punto de embargarte el auto u otros bienes. 4. Pides un préstamo para pagar otro. 5. Sólo puedes hacer el pago mínimo de tus tarjetas de crédito o de otras deudas.
Acción es el plan Para diseñar una buena estrategia de reducción de deudas es preciso identificarlas, pero sobre todo, reconocer que existe el problema. Es común que nuestra primera reacción sea evitar la realidad y posponer el asunto, por eso te recomendamos hacerte de voluntad y enfrentar la situación de una vez por todas. Así que manos a la obra, a continuación te ofrecemos cinco pasos para iniciar el camino del desendeudamiento.
Paso 1.Identifica y reduce gastos superfluos Si este 2006 iniciaste con el pie izquierdo y te has dado cuenta que tu capacidad de pago se ha deteriorado a lo largo de los meses al punto de que en mayo fue negativa, lo que implica que tal vez dejaste de pagar una deuda ese mes o no cubriste alguno de tus gastos, es preciso que disminuyas tus gastos superfluos y aumentes tu capacidad de pago.
Utiliza el Planificador de gastos y endeudamiento para identificar y reducir los gastos superfluos, es decir, aquellos que no son absolutamente necesarios para vivir y que incluso aumentan en ocasiones. Tal es el caso en el cuadro 1 al mes de mayo con los gastos en cine, teatro, viajes, fiestas, artículos y servicios para cuidado personal, vestido y calzado.
El objetivo de la reducción de gastos suntuarios es generar un incremento en la capacidad de pago. ¿Cuánto puedes reducirlos? Eso depende de la importancia que cada uno otorgue a los rubros, es decir, para alguien puede ser más importante vestir bien que ir a fiestas, entonces reducirá en menor medida el gasto en ropa.
En el ejemplo del cuadro 1 se redujeron estos rubros en junio hasta el nivel más bajo registrado en el año, lo que inmediatamente generó una capacidad de pago de 500 pesos, es decir, cuentas con 500 pesos para asignarlos en julio a pagar alguna de tus deudas.
Ojo, no caigas en la tentación de reducir gastos mayores pero que implican una inversión como la vivienda, la salud y la educación. Ahora la pregunta es ¿a cuál de mis deudas destino mis 500 pesos?
Paso 2. Identifica y prioriza deudas De acuerdo con Xavier Serbia, especialista en finanzas personales en Estados Unidos, los créditos de cuenta abierta (tarjetas de crédito), los préstamos personales (auto, educación, personales) y los préstamos hipotecarios son los tipos básicos de crédito de los cuáles pueden provenir tus mayores deudas. ¡Identifica cuál pagarás primero!
Quizá lo primero que pienses es concentrar los recursos para pagar los adeudos con el interés más elevado, sin embargo esta estrategia no es la más adecuada, de acuerdo con la Condusef, lo recomendable es asignar los recursos al adeudo con el vencimiento más corto y el costo más alto.
Tampoco sería factible pensar en reducir la hipoteca en el corto plazo, que por lo general son créditos pactados a más de 10 años. Los créditos del auto y otros personales, aunque de menor plazo que las hipotecas, también son pactados a determinado tiempo.
Así que la tarjeta de crédito es la deuda susceptible de reducción en el corto plazo. Además, te conviene reducir esta deuda porque a diferencia de la hipoteca y los préstamos personales, con la tarjeta de crédito es difícil tener en mente cuánto pagarás por intereses finales, cuánto pagarás el siguiente período, ya que esto se calcula en función de tu saldo de cada mes, y cuándo terminarás de pagar.
Como ejemplo, supondremos que tienes una deuda en tarjeta de crédito de 10 mil pesos y cuyos pagos has mantenido en 500 pesos mensuales como se observa en el cuadro 1. Para reducir esta deuda debes aumentar sus pagos.
Paso 3. Aumenta tus pagos Para reducir la deuda en tarjeta de crédito es preciso recordar por qué debes aumentar tus pagos.
Por lo general, el pago mínimo se ubica alrededor de 5% del saldo de tu cuenta y este porcentaje se reparte entre pago a intereses (del 2 al 4%) y el resto va a capital, de tal forma que tu deuda se reduce muy poco y pueden pasar hasta un par de años o más para que la logres pagar si aplicas siempre este mínimo, claro, ello sin volver a usarla y sin dejar de pagar.
Para consultar el costo de las diferentes opciones en tarjeta de crédito visita el sitio de la Condusef.
En cambio si aumentas tu pago mínimo, por ejemplo, de 5% a 10% de tu saldo, el plazo de la deuda se acortará bastante como se observa en la siguiente gráfica:
En nuestro ejemplo, si aumentas tu pago mensual utilizando los 500 pesos de capacidad de pago generados por la disminución de gastos superfluos en junio, de 500 a 1,000 pesos a partir de julio, tu deuda se reducirá en tiempo de 26 a 12 meses (ver gráfica 1).
Paso 4. Honra toda deuda Algo que no debes olvidar es que siempre debes honrar todas tus deudas cumpliendo con sus pagos oportunamente. Recuerda que si te atrasas en tus pagos, por ejemplo de tarjeta de crédito, te pueden cobrar el interés moratorio o alguna comisión y ello aumentaría tu deuda.
Mucho menos pienses en dejar de pagar, ya que te pueden reportar al Buró de Crédito y ello afectaría tu historial crediticio e incluso comprometería la posibilidad de que obtuvieras nuevos créditos.
También procura, como en nuestro ejemplo, no asumir nuevas deudas, ni de tarjetas de crédito, ni en el resto de tus créditos.
Paso 5. Fomenta el ahorro Una vez que liquidaste tu deuda en tarjeta de crédito, puedes sentirte holgado y tal vez estés tentado a aumentar los gastos superfluos o realizar una compra con tu tarjeta de crédito, lo mejor es que continúes con la disciplina adquirida y el dinero que tengas disponible lo destines al ahorro. Los expertos en finanzas personales sugieren que ahorres sistemáticamente al menos 10% de tu ingreso mensual.
Otra opción es aprovechar tus ingresos por concepto de aguinaldo, prima vacacional, fondo de ahorro, etcétera y destinar lo más que puedas de ellos al ahorro, con el que también podrás liquidar deudas o mantener como respaldo financiero.
Consolidación de deudas Hasta el momento te hemos dado un ejemplo de cómo reducir tu deuda en tarjeta de crédito, manteniendo los supuestos de un ingreso fijo, de no adquisición de nuevas deudas y de que sólo se cuenta con una tarjeta de crédito.
Pero qué pasa cuando se mantienen dos o tal vez tres tarjetas de crédito, o incluso debes varios pagos de la tanda o las compras por catálogo que realizaste. Estas deudas pueden considerarse de vencimiento inmediato, por lo que es urgente atenderlas. Una estrategia utilizada en estos casos es la "consolidación de deudas" que consiste en agrupar todas las deudas posibles en una sola.
Una estrategia es transferir los saldos de tus tarjetas de crédito a otra de menor costo financiero. Con esa misma hasta podrías realizar una disposición de efectivo para pagar otras deudas.
Además de la menor tasa, esta estrategia ofrece la ventaja de que sólo te preocuparás por un pago cada mes, con un mayor tiempo de duración.
Lo recomendable es no pagar sólo el mínimo, que por lo general es menor en tarjeta de crédito. Mejor aplica los pasos 1 a 5 y verás cómo pronto disminuirás también esta deuda.
Además, no olvides comparar otras tarjetas de crédito con esta característica, céntrate en el costo financiero o Costo Anual Total (CAT), que incluye todos los costos que se repercuten en la línea de crédito. Condusef publica comparativos como el siguiente, en cuyo caso la mejor alternativa es la que presenta el menor CAT (ver cuadro 2).
Bueno ahora les presento un software que me encontre en la red, que sirve para crear presentaciones en flash. Lo interesante es que te va capturando screenshots de pantalla segun lo que vayas haciendo y te crea un swf que puedes incrustar en una pagina o un .exe para transportarlo a donde sea.
Description: un film de George Miller, avec les voix en VO de Robin Williams, Nicole Kidman, Elijah Wood. Happy Feet raconte l'histoire d'un jeune pingouin, Mumble, né au sein d'une colonie de Pingouins Empereur qui trouvent l'âme sœur à travers le chant. Malheureusement, Mumble chante comme une casserole…En revanche, c'est un virtuose des claquettes ! Incapable de trouver le chant qui lui permettra de rencontrer l'amour, Mumble ne peut appartenir réellement à la colonie, et ne peut pas gagner l'affection de sa bien aimée, Gloria, diva la plus courtisée du royaume. Adolescent, Mumble cherche à se faire accepter de ses semblables. Mais il refuse d'arrêter de danser pour devenir quelqu'un qu'il n'est pas. Accusé d'être à l'origine de la famine qui sévit dans la colonie, il s'exile.
If you're having trouble watching the video, try copying the following URL into your browser: http://video.google.com/videoplay?docid=-3029445587080080325&q=genre%3Acomedy&pr=goog-sl
Si bien respeto a todos los partidos, aqui les dejo información que debemos leer no por estar en contra de tal o cual sino de estar informados para podre tomar la mejor desición este 2 de Julio.
López Obrador, Fidel Castro y Chávez estaban en el infierno y se enteraron que había un teléfono y rápidamente Fidel fué y se lo pidió al diablo para hacer una llamada a Cuba para saber cómo iba el país después de su partida.
El diablo le concedió la llamada y habló durante 2 minutos, al colgar, el diablo le dijo que la llamada era de 3 millones de dólares americanos; Castro le hizo un cheque y le pagó.
Al enterarse de ésto Chávez quiso hacer lo mismo y llamó a Venezuela durante 5 minutos y el diablo le pasó la cuenta de 10 millones de euros y también le pagó.
Andrés Manuel también sintió ganas de llamar a la Ciudad de Méxicopara ver cómo la estaban pasando y habló por 3 horas (ya ven que es lento).
Cuando colgó, el diablo le dijo que eran 35 pesos mexicanos y le preguntó al diablo por qué era tan barato llamar a México. Y el diablo le respondió: "Mira cabrón, con tus segundos pisos, las marchas, tu pinche desafuero, las pendejadas de Ebrard, Ponce,Bejarano y demás ratas y animales de tu equipo, dejaste a la Ciudad de México convertida en un verdadero Infierno, y de infierno a infierno la llamada es local".
Esta es la segunda parte de la creación de un archivo de Excel. En esta entrega veremos todo el código necesario para crear la forma en donde visualizaremos los datos de la tabla, y posteriormente llenar una hoja de un archivo de excel con esa información
El ultimo paso es el guardar el archivo con un nombre.
En esta entrega estamos haciendo un barrido de filas y columnas para llenar el archivo de excel, en la siguiente parte daremos una explicación de un método distinto de llenado, presentando así sus pros y contras.
Imports System.Data.SqlClient Imports Excel
Public Class frmCreateExcelfile Inherits System.Windows.Forms.Form
Private ds As DataSet Private objExcel As Excel.Application Private objWBook As Excel._Workbook Private objWSheet As Excel._Worksheet Private objRange As Excel.Range
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click DisposeExcelObjects() Me.Close() End Sub
Private Sub DisposeExcelObjects() Try objWBook.Close() objExcel.Workbooks.Close() Catch ex As Exception
End Try
objExcel.Quit() If Not objRange Is Nothing Then System.Runtime.InteropServices.Marshal.ReleaseComObject(objRange) End If If Not objExcel Is Nothing Then System.Runtime.InteropServices.Marshal.ReleaseComObject(objExcel) End If If Not objWBook Is Nothing Then System.Runtime.InteropServices.Marshal.ReleaseComObject(objWBook) End If If Not objWSheet Is Nothing Then System.Runtime.InteropServices.Marshal.ReleaseComObject(objWSheet) End If
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim cnx As System.Data.SqlClient.SqlConnection Dim da As System.Data.SqlClient.SqlDataAdapter Dim cm As System.Data.SqlClient.SqlCommand
Try cnx = New System.Data.SqlClient.SqlConnection("Data Source=XXX.XXX.XXX.XXX;User Id=XXX;Password=XXX;Initial Catalog=Northwind")
cm = New System.Data.SqlClient.SqlCommand cm.CommandType = CommandType.Text cm.CommandText = "SELECT * FROM Employees ORDER BY LastName" cm.Connection = cnx
da = New System.Data.SqlClient.SqlDataAdapter(cm)
ds = New DataSet da.Fill(ds)
DataGrid1.DataSource = ds.Tables(0)
Catch ex As Exception MsgBox(ex.ToString) Finally cnx.Close() cm.Dispose() cnx.Dispose() cnx = Nothing End Try End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click System.Threading.Thread.CurrentThread.CurrentCulture = New System.Globalization.CultureInfo("en-US") objExcel = New Excel.Application objExcel.ScreenUpdating = False objExcel.Visible = False
En esta ocación crearemos un archivo de Excel a través de .Net. El alcance de este post es la creación en si del archivo y el llenado simple con la información de una tabla.
Private ds As DataSet Private objExcel As Excel.Application Private objWBook As Excel._Workbook Private objWSheet As Excel._Worksheet Private objRange As Excel.Range
objExcel = New Excel.Application objExcel.ScreenUpdating = False objExcel.Visible = False