Entró por la puerta principal al lobby inmenso del hotel. Subiendo las escaleras automáticas se abrían sobre él todos los niveles de habitaciones, que se desplegaban como balcones concéntricos sobre el nivel principal. Se acercó rápidamente al mostrador, y, finjiendo compresión y manteniendo la compostura a la vez, le dijo a la recepcionista:
- Vengo a entregar algo a alguien que trabaja aquí. Su nombre viene escrito en el sobre.
- Su departamento se encuentra al final del pasillo a mano derecha, puede dejárselo ud. mismo.
Se había prometido antes de salir de casa que no iría a dejárselo él mismo. Si ya todo esto era una pérdida de tiempo, mirarlo al rostro, en fin, estar ahí con él lo haría algo mucho peor. Algo capaz de despertar sus más inconvenientes emociones. No.
Pero tampoco insistiría a la recepcionista a este respecto. Debía confesar también que se había vestido antes de salir para estar listo para este caso.
Caminó, entonces, por un pasillo en el cual se situaban todos los nuevos restaurantes del hotel. Les pasó en frente, uno a uno, mientras se acercaba al final, que era en realidad otra entrada al hotel. Cuando llegó ahí, dobló a la derecha como le habían indicado.
Vió una recepción al poco tiempo; se preguntó si ese era el lugar, si tal vez tendría que dejarlo con otra recepcionista, con un encargado, y luego solo largarse... Pero no, no era ese el lugar.
Sigió caminando, al tiempo que se percató de que, al final de ese otro largo pasillo, todo en línea recta, se encontraba el departamento que buscaba. Y recordó, entonces, que él probablemente estaría en la recepción. No habría marcha atrás: tendría que verlo.
Caminó determinado y con su mejor cara de poker. Conforme se acercaba notaba, cada vez más inequivocamente, que la única persona en recepción era él, a quien buscaba. Vestido como empleado del hotel.
Continuó su camino, con unos pasos fuertes que, le sorprendía ya estando tan cerca, no lo hicieran a él vovlerse para verlo llegar, a ese recóndito y aún así conocido rincón del hotel. Pensó que tal vez todavía se encontraba él en su dominio.
Entonces se acercó tanto que tuvo que volver su mirada del mostrador de recepción y tuvo que notarlo. Su sorpresa fue casi instantánea.
Caminó igual que como venía, sin modificar nada, excepto una ligera sonrisa, entre cortés e irónica.
Lo vió a los ojos. Literalmente tenía la boca abierta. Volvía a ver para todos lados y no atinaba a decir nada. Lo miró sólamente el tiempo suficiente para disfrutar de su sorpresa, entonces sacó el sobre y lo tiró sobre el mostrador. El sobre cayó de forma tal, que tenía hacia arriba la cara donde había escrito el nombre de él.
El otro no salía de su asombro. Se dejó un segundo para contemplar la estocada que había propinado, y entonces, con una determinación que ignoraba que tenía, le dijo:
- Cuidate! :-)
Dió media vuelta y se fue, resistiendo, hasta el final, la curiosidad de volver a ver atrás.
Tuesday, October 5, 2010
Monday, August 30, 2010
Crédito terminológico
Si el objeto señanalo por un término, en el presente tiene menos valor en la realidad de ese objeto que lo que el término hubiera designado, hay que pagar por esa diferencia. La diferencia entre el valor real del hecho, y el valor que el término transmite, se paga con crédito... a futuras referencias a ese término. De entrada serán comprendidas, con base en la nueva experiencia, como menores, como devaluadas respecto de aquello que el término designaba. Entonces el término se devalúa a futuro, dejando dos opciones: devaluar el siguiente término superior en la escala de valor, usándolo para referirse a una realidad en este caso también menor que lo que este otro término indicaría. La segunda opción es aguantarse, y, por esa vez, crear expectativas menores y luego demostrar superar con creces tales expectativas, probablemente revalorizando el término, o al menos contribuyendo a lograrlo.
¿Por qué la segunda es tan difícil?
¿Por qué la segunda es tan difícil?
Tuesday, July 27, 2010
Sunday, May 23, 2010
los sueños veinte años despues
la vida está tan lleno de tantas cosas (todas!) que no controlamos. Nos hostinan, nos ahuevan, nos vuelven neuróticos. Y sobre todo lo hacen cuando aún no han ocurrido. Una estupidez. q.e.d.
He cumplido uno de los más grandes sueños de mi vida. Y en cierta forma, lo digo por justicia, estoy seguro ya lo había cumplido antes. Pero ahora lo sé claro, lo vivo claro, y por más inseguridad que tenga, porque siento una enorme inseguridad, no puedo sino sentirme pleno por ello.
Mi mejor amigo me llama su mejor amigo. Mi mejor amiga me llama su mejor amigo. Si soy justo con la vida, ya no puedo pedir más.
He cumplido uno de los más grandes sueños de mi vida. Y en cierta forma, lo digo por justicia, estoy seguro ya lo había cumplido antes. Pero ahora lo sé claro, lo vivo claro, y por más inseguridad que tenga, porque siento una enorme inseguridad, no puedo sino sentirme pleno por ello.
Mi mejor amigo me llama su mejor amigo. Mi mejor amiga me llama su mejor amigo. Si soy justo con la vida, ya no puedo pedir más.
Tuesday, March 30, 2010
No podría expresarme con más desprecio frente a una sociedad que se organizara de forma que alguien, contribuyendo únicamente al afán privado de lucro, consiguiendo con ello únicamente sus propios intereses y despreciando las desdichas de la mayoría, le recompensara con la posibilidad de actuar con tanta indiferencia frente a su propia vida y seducir a una muerte (que se ve bastante segura) con sus actos estúpidos, sin siquiera renunciar a una posición moralista (a su favor).
Wednesday, March 17, 2010
Monday, March 1, 2010
Uploading a file using FTP in C#
Uploading a file to an FTP server from a program written in C# can be a tricky task. Even though there are plenty of examples in the Web about how to achieve this, those examples were not working for me, despite careful verification of both, the code and the FTP server settings.
My problem was that I was getting the following error:
The remote server returned an error: (550) File unavailable (e.g., file not found, no access).
Of course I verified that the remote location was there on the server and that the location was writable by my user. Finally, my code was basically copied from an MSDN example, so not much of a chance that anything could go wrong there. After a while I noticed that the problem only happened when I was trying to write to a location different that root, like:
ftp://myserver.com/location/NewFileName.txt
didn't work. On the other hand:
ftp://myserver.com/NewFileName.txt
would work as expected.
So if I were to remove location from the URL, it would work perfectly. After quite a while of looking for the answer, I found a post which described the following solution: you should prepend an escaped slash character (%2F) to the location portion of the URL to make it work. Much to my surprise did this not only work, but it also works for multi-level directory structures, having to prepend this prefix only once.
Your remote location would then look as follows:
Here is a rough scrap (not compilable as is!) of the code that I'm using that is finally working as expected:ftp://myserver.com/%2Flocation/NewFileName.txt
// obtains the file name in a fully qualified
// file path,
// file path,
// e.g. for path=C:\Public\test.txt
// file name=test.txt
private string GetFileName(string path) { }
// the base URL for the FTP sever,
// e.g. ftp://myserver.com/
// e.g. ftp://myserver.com/
private string _baseUrl;
// credentials
private string _userId;
private string _password;
public void UploadFile(string localFilePath,
string remoteLocation)
{
// create a request URL, with the URL pointing
// to the new file's location
// to the new file's location
string requestUrl;
if (remoteLocation != null
&& remoteLocation.Length > 0)
&& remoteLocation.Length > 0)
requestUrl = _baseUrl + "%2F"
+ remoteLocation + "/"
+ remoteLocation + "/"
+ GetFileName(localFilePath);
else
requestUrl = _baseUrl
+ GetFileName(localFilePath);
+ GetFileName(localFilePath);
// create a web request using that URL
FtpWebRequest request =
(FtpWebRequest)WebRequest.Create(requestUrl);
(FtpWebRequest)WebRequest.Create(requestUrl);
request.Method =
WebRequestMethods.Ftp.UploadFile;
WebRequestMethods.Ftp.UploadFile;
request.Credentials =
new NetworkCredential(_userId, _password);
new NetworkCredential(_userId, _password);
// read the local file as a byte array
StreamReader src =
new StreamReader(localFilePath);
new StreamReader(localFilePath);
byte[] fileContents =
Encoding.UTF8.GetBytes(src.ReadToEnd());
Encoding.UTF8.GetBytes(src.ReadToEnd());
src.Close();
request.ContentLength = fileContents.Length;
// write those bytes out to the request
Stream requestStream =
request.GetRequestStream();
request.GetRequestStream();
requestStream.Write(fileContents,
0,
fileContents.Length);
0,
fileContents.Length);
requestStream.Close();
// check the server response
FtpWebResponse response =
(FtpWebResponse)request.GetResponse();
(FtpWebResponse)request.GetResponse();
response.Close();
}
I hope this helps somebody! :-)
BTW I'm using the .NET framework version 2, and a Windows FTP server.
Subscribe to:
Posts (Atom)
