tag:blogger.com,1999:blog-258279192024-03-16T02:09:05.176+01:00El mundo de SuDUn sitio donde cuento mis anécdotas, mis ideas y donde pongo a parir a quien me vien en gana.LatinSuDhttp://www.blogger.com/profile/07686760296161354134noreply@blogger.comBlogger91125tag:blogger.com,1999:blog-25827919.post-78767840109411932592023-05-03T22:29:00.013+02:002023-05-03T22:42:02.915+02:00Pseudocode for an Ethernet switch<p>How does an Ethernet switch work? I'll explain it as far as I can understand, using the clearest way I can imagine (code). Hopefully I got it right.</p><p><br /></p><h1 style="text-align: left;">Prerrequisites</h1><p>The switch has a number of <b>interfaces</b> or ports. There are cables connected to some of them, that come from computers or other switches or network equipment.</p><p>The switch receives and sends ethernet <b>packets</b> (or frames) through its ports.</p><p>Each packets typically includes a couple <b>mac addresses</b>. A mac address is a 12 digit hexadecimal number (6 bytes) that is used to identify the sender or recipient of a packet. There several kind:</p><p></p><ul style="text-align: left;"><li>Unicast: Every network card has a unique own address. Eg: a laptop could have 2 of them (one for LAN card, another for Wi-Fi). The 8th bit of this type is always 0.</li><li>Non-Unicast: </li><ul><li>Broadcast: The mac ff:ff:ff:ff:ff:ff. Used to send packets to all the hosts in a LAN.</li><li>Multicast: All macs that have 8th bit set to 1, but are not the broadcast mac. Used for multicast communication.</li></ul></ul><p></p><p> Every packet has these <b>fields</b>.</p><p></p><ul style="text-align: left;"><li>Destination Mac Address: Identifies the recipient of the packet. It may be a host or a router, but it could also be multicast or broadcast.</li><li>Source Mac Address: Identifies who sent the packet. Typically a host/router in the LAN.</li><li>Ethernetype: Identifies the type of packet. Eg: An IP packet.</li><li>Payload: Other headers (like TCP) and finally data.</li></ul><p></p><p>The switch has an internal "bridge table" or "<b>mac table</b>". Which is used to tell on which interface is every mac address that it knows. It's fields are:</p><p></p><ul style="text-align: left;"><li>Mac address</li><li>Interface</li><li>Timeout (after not seeing a packet with that mac address the entry is removed to save resources).</li></ul><div><br /></div><div></div><p></p><h1>Pseudocode</h1><div><span style="font-family: courier;"># Start</span></div><div><span style="font-family: courier;"><br /></span></div><div><span style="font-family: courier;">p, i := Wait_for_packet()</span></div><div><span style="font-family: courier;">; p is the packet</span></div><div><span style="font-family: courier;">; i is the ingress interface</span></div><div><span style="font-family: courier;"><br /></span></div><div><span style="font-family: courier;">; get source and destination macs</span></div><div><span style="font-family: courier;">d := parse_destination_mac(p)</span></div><div><span style="font-family: courier;">s := parse_source_mac(p)</span></div><div><span style="font-family: courier;"><br /></span></div><div><span style="font-family: courier;"><br /></span></div><div><span style="font-family: courier;">; Handle lookup table for source mac</span></div><div><span style="font-family: courier;">ci := get_interface_from_lookup_table(s)</span></div><div><span style="font-family: courier;">if ci is null</span></div><div><span style="font-family: courier;"> add_to_lookup_table(s, i)</span></div><div><span style="font-family: courier;"> ; adds the entry and sets up the timer</span></div><div><span style="font-family: courier;">elif ci == i</span></div><div><span style="font-family: courier;"> refresh_lookup_table(s, ci)</span></div><div><span style="font-family: courier;">else</span></div><div><span style="font-family: courier;"> ; shouldn't happen unless a host changed interface</span></div><div><span style="font-family: courier;"> delete_lookup_entry(s, ci)</span></div><div><div><span style="font-family: courier;"> add_to_lookup_table(s, i)</span></div></div><div><span style="font-family: courier;">endif</span></div><div><span style="font-family: courier;"> </span></div><div><br /></div><div><span style="font-family: courier;">; Analyze recipient and finally send packet</span></div><div><span style="font-family: courier;">if mac_type(d) == unicast</span></div><div><span style="font-family: courier;"> co := </span><span style="font-family: courier;">get_interface_from_lookup_table(d)</span></div><div><span style="font-family: courier;"> if co is null</span></div><div><span style="font-family: courier;"> ; when destination is not cached we flood</span></div><div><span style="font-family: courier;"> </span><span style="font-family: courier;">send_packet_to_all_interfaces_except(p, i)</span></div><div><span style="font-family: courier;"> else</span></div><div><span style="font-family: courier;"> send_packet_to_interface(p, i)</span></div><div><span style="font-family: courier;"> endif</span></div><div><span style="font-family: courier;">else</span></div><div><span style="font-family: courier;"> send_packet_to_all_interfaces_except(p, i)</span></div><div><span style="font-family: courier;">endif</span></div><div><span style="font-family: courier;"><br /></span></div><div><span style="font-family: courier;">goto start</span></div><div><br /></div><div>Note: This example is suposed to model a basic switch and does not cover advanced functionality like: VLAN, multicast groups, spanning tree.</div>LatinSuDhttp://www.blogger.com/profile/07686760296161354134noreply@blogger.com0tag:blogger.com,1999:blog-25827919.post-26543680745680204202022-12-22T20:25:00.014+01:002022-12-22T21:21:59.118+01:00SOCAT cheat sheetRemember that socat usually has 2 legs. Both are connected bidirectionally.<div>
<table border="2" style="border-collapse: collapse;">
<tbody><tr>
<th></th>
<th>Listen/Passive</th>
<th>Connect/Active</th>
</tr><tr>
<td style="white-space: nowrap;">TCPv4</td>
<td>TCP4-LISTEN:<i><span style="color: #bf9000;">8800</span></i>,reuseaddr,fork</td>
<td>TCP4:<i><span style="color: #bf9000;">192.168.1.5</span>:<span style="color: #990000;">8000</span></i></td>
</tr><tr>
<td style="white-space: nowrap;">OpenSSL</td>
<td>OPENSSL-LISTEN:<i><span style="color: #bf9000;">443</span></i>,reuseaddr,pf=ip4,fork,cert=<i><span style="color: #990000;">server.pem</span></i>,cafile=<i><span style="color: #bf9000;">client.crt</span></i>,verify=0</td>
<td>OPENSSL:<i><span style="color: #bf9000;">192.168.1.5</span>:<span style="color: #990000;">4443</span></i>,pf=ip4,cert=<i><span style="color: #bf9000;">server.pem</span></i>,cafile=<i><span style="color: #990000;">client.crt</span></i>,verify=0,no-sni=0</td>
</tr><tr>
<td>Unix Socket</td>
<td>UNIX-LISTEN:<i><span style="color: #bf9000;">mysqld.sock</span></i>,mode=<i><span style="color: #990000;">777</span></i>,reuseaddr,fork</td>
<td>UNIX-CONNECT:<i><span style="color: #bf9000;">mysqld.sock.orig</span></i></td>
</tr><tr>
<td>SOCKSv4</td>
<td></td>
<td>SOCKS4:<i><span style="color: #bf9000; white-space: nowrap;">socks-server.local</span>:<span style="color: #990000;">10.1.2.3</span>:<span style="color: #bf9000;">22</span></i>,socksport=<i><span style="color: #990000;">1080</span></i><br /><br /><i>(First IP is socks server, Second IP is destination server).</i></td>
</tr><tr>
<td>HTTP Proxy</td>
<td></td>
<td>PROXY:<i><span style="color: #bf9000;">aproxy.local</span>:<span style="color: #990000;">example.com</span>:<span style="color: #bf9000;">80</span></i>,proxyport=<i><span style="color: #990000;">8080</span></i></td>
</tr><tr>
<td>STDIO</td>
<td>- / STDIN</td>
<td>- / STDOUT / STDERR</td>
</tr><tr>
<td>Misc</td>
<td></td>
<td>EXEC:<i><span style="color: #bf9000;">/bin/bash</span></i>
<br/><br/>
FILE:<i><span style="color: #bf9000;">/dev/null</span></i>
</td>
</tr></tbody></table><br /><div>
Full man page:<div><a href="https://manpages.debian.org/unstable/socat/socat.1.en.html">https://manpages.debian.org/unstable/socat/socat.1.en.html</a><br /></div></div></div>LatinSuDhttp://www.blogger.com/profile/07686760296161354134noreply@blogger.com0tag:blogger.com,1999:blog-25827919.post-22230321174336847662019-03-03T14:20:00.001+01:002019-03-03T14:40:12.577+01:00Navigate Google Earth like a Pro<div class="separator" style="clear: both; text-align: left;">
Here I made a quick cheat sheet for Google Earth Navigation</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzBfDDOAo_P1nlKBhi-ypMZOBB8_W7ecnYn7uOKWloHAIOXAeW4BrwJEcPE4vbryaDrWsikkDEnrDnEmvCwm-wq7V7jtoqF7ME2dyTqBGypYn929doyxIVZYn1o5_RvzHmCV2_wg/s1600/google-earth-controls.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="405" data-original-width="750" height="345" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzBfDDOAo_P1nlKBhi-ypMZOBB8_W7ecnYn7uOKWloHAIOXAeW4BrwJEcPE4vbryaDrWsikkDEnrDnEmvCwm-wq7V7jtoqF7ME2dyTqBGypYn929doyxIVZYn1o5_RvzHmCV2_wg/s640/google-earth-controls.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Note that vertical movement is not possible afaik. The way I suggest is an approximation.
</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
I'm, leaving the link to a doc with the same content <a href="https://docs.google.com/document/d/1C3AWt65NORevGxwlds0UrUtFeK7i97sYrvhVYwsUHtc/edit?usp=sharing">HERE</a>.
</div>
LatinSuDhttp://www.blogger.com/profile/07686760296161354134noreply@blogger.com1tag:blogger.com,1999:blog-25827919.post-11313292455110634732017-08-04T11:43:00.001+02:002017-08-04T11:56:46.151+02:00[Idea] ThunderMonkey: GreaseMonkey for Thunderbird<div class="separator" style="clear: both; text-align: left;">
I thought it would be nice to have an extension like Greasemonkey for Thunderbird.</div>
<div class="separator" style="clear: both; text-align: left;">
That is: allow to write and share little javascript snippets that make certain changes in the appearance of incoming email.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
You can already do that using proper extensions, but it is a little overkill, especially for beginners. So for the same reason that <i>user scripts</i> are popular despite having proper browser extensions.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
I'm preparing a mockup of the interface. It could be similar to Greasemonkey, have a script manager, and an embedded editor.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
The script manager:</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://i.imgur.com/Cye7ufU.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="343" data-original-width="700" height="195" src="https://i.imgur.com/Cye7ufU.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
The script editor window:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://i.imgur.com/m9PoQ8i.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="614" data-original-width="582" height="640" src="https://i.imgur.com/qBgpYLO.png" width="604" /></a></div>
<br />
The main difference with Greasemonkey is that now we cannot match against an URL, but instead we have to match against email headers.<br />
<br />
The scripts should also be able somehow to access all mail headers and body to do additional filtering.<br />
<br />
Btw, I'm already used to writing user scripts, but not extensions.<br />
Any thoughts or help is welcome :)LatinSuDhttp://www.blogger.com/profile/07686760296161354134noreply@blogger.com0tag:blogger.com,1999:blog-25827919.post-63480867491509019712012-08-12T00:08:00.000+02:002012-08-12T00:08:57.068+02:00Upgrade Parrot CK3000 Evolution with a Max232 chipIn order to make the CK3000 work well with Android phones you will need to upgrade it to version 5.25c. You could do get this done by a professional, or you could buy a rather expensive official cable. I'm making the cable myself with the help of other people who made a similar one first.<br />
<br />
First of all read the original post <a href="http://peter.holcroft.net/ck3000/">http://peter.holcroft.net/ck3000/</a><br />
<br />This is a simple application of the Max232 chip i have:<br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsfrTv6AHSwMR51DfPiEqGTmmEpvscn5ZsR445CE_NmRBTOn0qpN3bPPaZ5_12Vk6UC8m3XeJmX7aK94HQ-gjttyOrmiNp_Pt6ZkMp2NYJjHah9msWbEBD1ZjeUExBfuG0zPuFUQ/s1600/max232.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="173" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsfrTv6AHSwMR51DfPiEqGTmmEpvscn5ZsR445CE_NmRBTOn0qpN3bPPaZ5_12Vk6UC8m3XeJmX7aK94HQ-gjttyOrmiNp_Pt6ZkMp2NYJjHah9msWbEBD1ZjeUExBfuG0zPuFUQ/s320/max232.png" width="320" /></a></div>
I used the original data and power connectors for the upgrade. The data connector has a kind of appendix to which i connected the data wires (not very professional).<br /><br />I also connected the required wire between pin 9 & 10 (not showing in this pic):<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4zqDawAxoio91JTOIxtI5XN6ECH-ye-R2GaUdjB1hL314V9rHlzFKrE8MV8mXcKZAPBsFQcBD4ULWZGuTGeRJJi3REcHw9Vg1-ZIzknUq0l68GUxcDawDGzcHNwkjUSGoydEPTA/s1600/parrot.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4zqDawAxoio91JTOIxtI5XN6ECH-ye-R2GaUdjB1hL314V9rHlzFKrE8MV8mXcKZAPBsFQcBD4ULWZGuTGeRJJi3REcHw9Vg1-ZIzknUq0l68GUxcDawDGzcHNwkjUSGoydEPTA/s1600/parrot.jpg" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
The actual setup on the protoboard.</div>
<div class="separator" style="clear: both; text-align: left;">
I used a standard 5V AC/DC adapter.</div>
<div class="separator" style="clear: both; text-align: left;">
The capacitors are 1uF 50V (10 cents each):</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhT0BN941vcfH36lS-HP6dlcVzksLYn10YJbsQ7iGHOMoSLz2mXWdLn7YPF6C4I4qHQrfzhKxBeyZm0UkhLOpNbceAlmQ5zHDibCgJr-nZMAe9JY9shRE9Gb4uUzD-LmWTsxyLWjw/s1600/max232b.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhT0BN941vcfH36lS-HP6dlcVzksLYn10YJbsQ7iGHOMoSLz2mXWdLn7YPF6C4I4qHQrfzhKxBeyZm0UkhLOpNbceAlmQ5zHDibCgJr-nZMAe9JY9shRE9Gb4uUzD-LmWTsxyLWjw/s320/max232b.jpg" width="171" /></a></div>
<br />And now the software process. I used a laptop and a USB-to-serial adapter.<br /><br /><div>
I started using an inverter (DC-to-AC adapter) and it faild almost always. Later i switched to a wall socket and it went better.<div class="separator" style="clear: both; text-align: center;">
<a href="http://peter.holcroft.net/wp-content/uploads/2012/04/Parrot_Software_Update_Tool_XPRAM_downloading.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="251" src="http://peter.holcroft.net/wp-content/uploads/2012/04/Parrot_Software_Update_Tool_XPRAM_downloading.png" width="320" /></a></div>
<br /><br />* Update process and symptoms:<br />- Select CK3000 Evolution.<br />- Select Serial update.<br />- Select 115200 baud.<br />- Wait for "XPRAM downloading". Progress bar should not move yet.<br /> - If progress bar moves there may be something wrong.<br /> - If it says something like "Cannot set baud rate" probably the wire between pin 9&10 is not ok.<br /> - If it says something like "Cannot open port" disconnect the usb device, click back and next.<br />- Power on the parrot. After 1 to 5 seconds progress bar will start moving. It will take about 10 seconds to finish.<br /> - If you get an error like "Cannot send data" there may be a bad cable.<br /> - If the bar loops over and over something is wrong. Better try again.<br />The rest of the process is relatively fast except the "Flash programming" which takes more than one minute.<br />It can randomly stall or throw the "Cannot send data" error at any time. If it happens try again.<br /></div>
<div>
* Myths:</div>
<div>
- "If you put two CK3000 close to each other they update the firmware automatically". It didn't happen to me.</div>
<div>
- "You can do a wireless update with a bluetooth virtual serial port". I wasn't able to create a serial bluetooth connection. Parrot officially only supports cabled upgrades for the CK3000.</div>
LatinSuDhttp://www.blogger.com/profile/07686760296161354134noreply@blogger.com38tag:blogger.com,1999:blog-25827919.post-10359152544481833542011-07-26T19:38:00.002+02:002011-07-26T20:04:35.068+02:00The CRC32 of this string is 4A1C449BPues si, estaba aburrido y se me ocurrió si sería posible insertar el <i>hash</i> de un texto dentro del propio texto.<br />
<br />
<span class="Apple-style-span" style="font-size: large;">Viabilidad</span><br />
Como no estaba muy seguro primero analicé la viabilidad. Si asumimos un formato de texto fijo, en el que sólo varía la parte del <i>hash</i>, la probabilidad no es baja.<br />
<br />
Para un hash <i>n</i> bits, la probabilidad de acertar a la primera es:<br />
1/(2^n)<br />
<br />
Por tanto, la probabilidad que exista un resultado válido en todo el espacio es:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMpnkH_V6YwAmhMX9xkG5BOuRLF8KEgw0MdUEuUE5JDa5UenSHCBnDqRuxCDRzCphMNFjpZBqTRsLRk6van1hqZgGY5HzXX3eXj3SgA6ln45s3NxtHcIDDXw77EspAbpTLJiT-rQ/s1600/CodeCogsEqn.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMpnkH_V6YwAmhMX9xkG5BOuRLF8KEgw0MdUEuUE5JDa5UenSHCBnDqRuxCDRzCphMNFjpZBqTRsLRk6van1hqZgGY5HzXX3eXj3SgA6ln45s3NxtHcIDDXw77EspAbpTLJiT-rQ/s1600/CodeCogsEqn.gif" /></a></div>
<br />
Por tanto es probable encontrar algún <i>hash</i> con estas características, y si no apareciera probaríamos con otra cadena base distinta.<br />
<br />
<span class="Apple-style-span" style="font-size: large;">Optimización</span><br />
Lo siguiente que hice fue tomar un código de ejemplo de código de CRC32 basado en tabla de 8 bits, y precomputar una tabla de 24 bits (que debe ocupar unos 96MB en memoria).<br />
Este código es capaz de calcular las 2^32 posibilidades en unos pocos minutos.<br />
<br />
Habría estado bien hacer algún análisis que permitiera alguna optimización específica para este problema, pero no llego hasta ahí.<br />
<br />
<span class="Apple-style-span" style="font-size: large;">Resultado</span><br />
Tras 2 minutos obtenemos:<br />
<blockquote>
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">"The CRC32 of this string is 4A1C449B"</span></blockquote>
<br />
Y poco más que decir, se puede verificar (es importante no añadir saltos de línea ni espacios al final) <a href="http://www.crc-online.com.ar/index.php?d=The+CRC32+of+this+string+is+4A1C449B&en=Calcular+CRC32">aquí</a>:<br />
<br />
Con un poco más de trabajo podemos obtener:<br />
<blockquote>
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">"<a href="http://www.crc-online.com.ar/index.php?d=I+killed+56e9dee4+cows+and+all+I+got+was...&en=Calcular+CRC32">I killed 56e9dee4 cows and all I got was...</a>"</span></blockquote>
<br />LatinSuDhttp://www.blogger.com/profile/07686760296161354134noreply@blogger.com1tag:blogger.com,1999:blog-25827919.post-31878823395902682552010-06-25T20:36:00.000+02:002010-06-25T20:36:59.479+02:00No ajustes tu televisor, pero esto NO es 3D«No ajustes tu televisor, no intentes activar el 3D, porque esto no es 3D»<br />
<br />
El efecto que se ve en el anuncio consigue su objetivo, pero realmente no es 3D. Si fuera 3D habría un desfase horizontal en algunas de las imágenes, pero en ningún caso lo habría en vertical como se aprecia a lo largo de todo el anuncio.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgf8CAa2PCz5dYxOBBzVkOSkUBhusSWEUERW_EEPmkyDpaQWADgWQQ_cwv8eYxSRug32mk10hyphenhyphennVB4jVRReofJ0Ot7ptioagIJNsPor_M9572qvukOoY-TX6GLmP_vaXAkD-lcPiA/s1600/sony3d.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="408" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgf8CAa2PCz5dYxOBBzVkOSkUBhusSWEUERW_EEPmkyDpaQWADgWQQ_cwv8eYxSRug32mk10hyphenhyphennVB4jVRReofJ0Ot7ptioagIJNsPor_M9572qvukOoY-TX6GLmP_vaXAkD-lcPiA/s640/sony3d.jpg" width="640" /></a></div>LatinSuDhttp://www.blogger.com/profile/07686760296161354134noreply@blogger.com6tag:blogger.com,1999:blog-25827919.post-51849998598717608382010-04-03T19:26:00.000+02:002010-04-03T19:26:14.222+02:00Multicargador para moviles (Mobile multicharger)Uno de los últimos cacharros que me he comprado es un aparato muy versátil, un multicargador para teléfonos móviles.<br />
<br />
Algunas de las cosas que permite hacer son:<br />
<ul><li>Cargar pilas alimentandose desde el PC, y posteriormente cargar el movil con ellas.</li>
<li>Cargar el movil con el sol.</li>
<li>Comprar pilas alcalinas y cargar el movil con ellas.</li>
</ul>Las posibilidades son muchas, basta mirar el esquema: <br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8IkpQepcvskS4ckoodpPXBcIbDKjLzQQlAfUU9oOMuTTCDyG9j7d-vOlhUQ3EnPbP6VSAz_Ct_RM1YKP_Kb5A86-xHyraMpnJ_7GfNSbr6_f-LRi0Wn4hwOYOD-2biQkvm768zw/s1600-h/multicharger.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="233" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8IkpQepcvskS4ckoodpPXBcIbDKjLzQQlAfUU9oOMuTTCDyG9j7d-vOlhUQ3EnPbP6VSAz_Ct_RM1YKP_Kb5A86-xHyraMpnJ_7GfNSbr6_f-LRi0Wn4hwOYOD-2biQkvm768zw/s320/multicharger.png" width="312" /></a></div>Y lo mejor de todo es que hay aparatos de estos desde 15€.<br />
<br />
No es un <i>gadget</i> para llevar en el bolsillo, pero sí para ir de campo (si es que no queremos desconectarnos).LatinSuDhttp://www.blogger.com/profile/07686760296161354134noreply@blogger.com0tag:blogger.com,1999:blog-25827919.post-64015624709219236612010-01-12T21:36:00.000+01:002010-01-12T21:36:03.600+01:00La pila 802.11 para el sistema operativoComo estaba aburrido he decidido hacer un diagrama de la pila IEEE802.11 desde el punto de vista del sistema operativo (Linux).<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://www.latinsud.com/pub/80211stack/80211stack.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="640" src="http://www.latinsud.com/pub/80211stack/80211stack.png" width="377" /></a><br />
</div>Notas:<br />
<ul><li>En el caso de las tarjetas de tipo <i>Software MAC</i>, el driver se apoya en el la pila <i>mac80211 </i>del <i>kernel </i>para la conversión a 802.3 (ethernet) y las tramas de gestión.</li>
<li>El <i>modo monitor </i>o <i>rfmon </i>no es lo mismo que el modo promiscuo, si entendemos por modo promiscuo la recepción (e inyección) de tramas a nivel 802.3. El modo monitor exige recibir (e inyectar) tramas completas con la cabecera original 802.11 (y opcionalmente otras cabeceras auxiliares como <i>radiotap </i>o <i>prism</i>).<br />
</li>
</ul>LatinSuDhttp://www.blogger.com/profile/07686760296161354134noreply@blogger.com1tag:blogger.com,1999:blog-25827919.post-35575936408175991252009-08-11T23:21:00.005+02:002009-08-21T22:33:36.381+02:00SlideType Keyboard: deslizar para escribir en AndroidLos teclados virtuales en pantalla de los teléfonos tienen varios problemas:<br /><ul><li>Los teclados QWERTY tienen las teclas muy pequeñas.</li><li>Otros teclados requieren pulsar las teclas varias veces o dependen de diccionarios, que no van bien.</li></ul>Una solución (sin entrar en temas de <i>multitouch</i> o <i>Chord Typing</i>) es requerir algo más que pulsar las teclas, en este caso deslizar en una dirección (arriba, izquierda, etc).<br /><br />Por ejemplo, si apretamos el dedo sobre la tecla etiquetada "2ABC", lo movemos a la izquierda y lo soltamos escribiremos la letra A. Si hubieramos movido hacia arriba hubiera sido la letra B, y a la derecha la C.<br /><hr /><br />Demo en Javascript: <a href="http://www.latinsud.com/pub/slideType/">http://www.latinsud.com/pub/slideType/<br /><img src="http://www.latinsud.com/pub/slideType/slidetypedemo.gif" /></a><br /><hr /><br />Download con QR-Code:<br /><img src="http://chart.apis.google.com/chart?cht=qr&chs=135x135&chl=market://search?q=pname:com.latinsud.android.slidetypekeyboard" /><br /><b><a href="http://slidetype.blogspot.com">Visita el blog de SlideType Keyboard (inglés): </a></b>LatinSuDhttp://www.blogger.com/profile/07686760296161354134noreply@blogger.com2tag:blogger.com,1999:blog-25827919.post-12841915724039898532009-06-03T00:50:00.003+02:002009-06-03T03:07:59.159+02:00Plugin para Gimp para hacer escalas de mapasAnte la necesidad de hacer muchos mapas a medida y la curiosidad de aprender script-fu he decidido hacer este plugin. Con esta experiencia he aprendido varias cosas:<br /><ul><li>Script-fu es relativamente potente.</li><li>LISP/Schema/SCM es horroroso.</li></ul>La interfaz es muy configurable (quizás demasiado).<br />Los parámetros más importantes son <i>Step(px)</i> y <i>Step(unit)</i>, que definen cada cuantos pixeles hay un cuadro, y qué distancia representa cada cuadro.<br /><div style="text-align: left;"></div><div style="text-align: left;"></div><div style="text-align: left;"></div><div style="text-align: left;"></div><div style="text-align: left;"></div><div style="text-align: left;"></div><div style="text-align: left;"></div><div style="text-align: left;"></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZIKdms9HfuOpXqh-4HyyNzHI0WzFy580jW9UWfMr8YH3I70tgF_7Cz039a55Ki7Y5D7nhV945aI1LspNAvqtLWgu2gukc5ZQNvD9CzJZn2v-M6nw13QQk2wP6B5gS-iWSAPyH9w/s1600-h/mapscale.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZIKdms9HfuOpXqh-4HyyNzHI0WzFy580jW9UWfMr8YH3I70tgF_7Cz039a55Ki7Y5D7nhV945aI1LspNAvqtLWgu2gukc5ZQNvD9CzJZn2v-M6nw13QQk2wP6B5gS-iWSAPyH9w/s400/mapscale.png" border="0" /></a></div><div style="text-align: left;"><br />Algunos ejemplos:</div><div class="separator" style="clear: both; text-align: center;"></div><div style="text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOSUmomIfgM_mBG_ZiPigtJFWMfLWQc0LnDch1C9FQDUaGuiNfMvoabEYv08ZFvdPJUDBZWvLrlSug0wFCD-W1I_bteEhDv1_POTZvnfrYEfr3jKroqhuWLtjjpU1esepLZ5GRcg/s1600-h/escala1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOSUmomIfgM_mBG_ZiPigtJFWMfLWQc0LnDch1C9FQDUaGuiNfMvoabEYv08ZFvdPJUDBZWvLrlSug0wFCD-W1I_bteEhDv1_POTZvnfrYEfr3jKroqhuWLtjjpU1esepLZ5GRcg/s320/escala1.png" border="0" /></a></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3N6R5tt2mG8tQq6Ln49vWUWrgbQWge2o3QJb-YLvdpVqPXfTb_ZEXP_uIineth0bqriKiYbnSVfSBFI-soe7vweCOr0v3jr4nfqHgxfOKyLmoZlI2fX9MKIl9V49XmUi1XtbAJg/s1600-h/escala2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3N6R5tt2mG8tQq6Ln49vWUWrgbQWge2o3QJb-YLvdpVqPXfTb_ZEXP_uIineth0bqriKiYbnSVfSBFI-soe7vweCOr0v3jr4nfqHgxfOKyLmoZlI2fX9MKIl9V49XmUi1XtbAJg/s320/escala2.png" border="0" /></a></div><div style="text-align: left;">Para acceder ir a Filtros->Renderizado->Map Scale Legend. Disculpad que por ahora sólo lo haya sacado en inglés...</div><div style="text-align: center;"></div><div style="text-align: center;"></div><div style="text-align: center;"></div><div style="text-align: center;"></div><div style="text-align: center;"></div><div style="text-align: left;"></div><br /><a href="http://registry.gimp.org/node/16532">http://registry.gimp.org/node/16532</a><br /><a href="http://www.latinsud.com/pub/mapscale/">http://www.latinsud.com/pub/mapscale/</a>LatinSuDhttp://www.blogger.com/profile/07686760296161354134noreply@blogger.com1tag:blogger.com,1999:blog-25827919.post-88840583715967940742009-05-30T16:15:00.002+02:002010-04-10T12:37:54.000+02:00Inteligencia o DaltonismoMe encuentro uno de esos <i>banners</i> de publicidad que salen ahora de test de inteligencia. Hasta ahora me habían parecido incluso interesantes, pero esta vez la han cagado:<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidzEYQv8CBDQr6W-bFGA9Urd4lTSlG0brC80wFp6X88x8lD4jV8Gt0ZJUQLeizLp5nfkfpMzHiyScJKDudPWaGvgJKfQUk0QjBMI1dMMn7QkA_zuT86-pkKwk9itNXMYXc4IXMbg/s1600-h/daltonico1.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidzEYQv8CBDQr6W-bFGA9Urd4lTSlG0brC80wFp6X88x8lD4jV8Gt0ZJUQLeizLp5nfkfpMzHiyScJKDudPWaGvgJKfQUk0QjBMI1dMMn7QkA_zuT86-pkKwk9itNXMYXc4IXMbg/s320/daltonico1.gif" border="0" /></a></div>En primer lugar no es un test de inteligencia, sino de daltonismo.<br />En segundo lugar las respuestas posibles son: 74 o 21 si eres daltónico. No creo que nadie sea capaz de ver un 75 o un 94 con independencia de su nivel intelectual o daltonismo.<br /><br /><b><span style="font-size:large;">Análisis</span></b><br />Por último, vamos a analizar lo que vería un daltónico:<br /><ul><li> Las partes rojas se confunden con las verdes.</li><li>Las partes azules quedarían igual.</li></ul>Con el Gimp hacemos los siguientes pasos:<br /><ol><li> Convertir la imagen a RGB. (Imagen->Modo->RGB)<br /></li><li>Descomponer en los 3 colores. (Colores->Componentes->Descomponer).</li><li>Vamos al diálogo de capas (Ctrl+L) y ocultamos la capa azul.</li><li>Pinchamos en la capa de más arriba (rojo) y desplazamos la barra Opacidad al 50%.</li><li>Pinchamos con el botón derecho en la capa roja le damos a Combinar hacia abajo.</li><li>Componemos la imágen. (Colores->Componentes->Componer). Usamos la misma capa para rojo y verde, y la capa azul para el azul.</li></ol>¡Voi-là! Hemos mezclado rojo y verde al 50%.<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi31ELczowLEHU7ObQBEiq10d6Vt4gDDvNabgn1fXLyljEBYHYzj3dsmAKNBg21IDd3z5HClKqlB-1L0Z42rQ_rs4gphNNOH_AfHuHjYa6BNPL8B_q6_TlPHZ5YbW-FiaiAqKThVw/s1600-h/daltonico2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi31ELczowLEHU7ObQBEiq10d6Vt4gDDvNabgn1fXLyljEBYHYzj3dsmAKNBg21IDd3z5HClKqlB-1L0Z42rQ_rs4gphNNOH_AfHuHjYa6BNPL8B_q6_TlPHZ5YbW-FiaiAqKThVw/s320/daltonico2.jpg" border="0" /></a></div>LatinSuDhttp://www.blogger.com/profile/07686760296161354134noreply@blogger.com6tag:blogger.com,1999:blog-25827919.post-88967036167112228682009-05-18T00:49:00.000+02:002009-05-18T00:49:33.341+02:00Anuncio de Zona wifi<div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTN-XUzx1vba8scaiQcDBVCp1rcrDLEC2VUgnrbIh4BDza44C8ttqMzQggetQ5McyQE299a5J27ZS5B_dwt4HJKxrUp09jpM6xhRZ7lt7qU0bqsyy8r6rFJn3kxS-UQrZe_cctxQ/s1600-h/P16-05-09_13.15.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTN-XUzx1vba8scaiQcDBVCp1rcrDLEC2VUgnrbIh4BDza44C8ttqMzQggetQ5McyQE299a5J27ZS5B_dwt4HJKxrUp09jpM6xhRZ7lt7qU0bqsyy8r6rFJn3kxS-UQrZe_cctxQ/s320/P16-05-09_13.15.jpg" /></a></div>No sabía que el wifi servía para hacer deporte o para saltar, más bien sería todo lo contrario...LatinSuDhttp://www.blogger.com/profile/07686760296161354134noreply@blogger.com0tag:blogger.com,1999:blog-25827919.post-32671202869484503832009-03-29T21:00:00.006+02:002009-03-29T23:04:23.734+02:00Adaptador USB Telsey de Tele2 en LinuxHace tiempo que tengo dando vueltas un adaptador Telsey, que venía de regalo con un router de Tele2:<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQ4G85tPrpMrNQvh99WVeCpI-Yf1W-kTvMDJusiXKTxyS3Dn1S1fSHYPkxXdDhQ3ioegKaMhWZLCigShUyISdMwbqbKUeRu4FMgm24spUeDqwXL5cu7TDFoUSBmD0ztc6JVRaGPw/s1600-h/P29-03-09_20.34.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQ4G85tPrpMrNQvh99WVeCpI-Yf1W-kTvMDJusiXKTxyS3Dn1S1fSHYPkxXdDhQ3ioegKaMhWZLCigShUyISdMwbqbKUeRu4FMgm24spUeDqwXL5cu7TDFoUSBmD0ztc6JVRaGPw/s200/P29-03-09_20.34.jpg" border="0" /></a>Telsey 802.11g Wireless USB2.0 Adapter</div><br />Datos técnicos:<br /><div style="font-family: "Courier New",Courier,monospace;">Usb id= 1413:5400</div><div style="font-family: "Courier New",Courier,monospace;">Manufacturer= Conexant</div><div style="font-family: "Courier New",Courier,monospace;">Product= Telsey 802.11g Wireless USB2.0 Adapter</div><div style="font-family: "Courier New",Courier,monospace;"></div><div class="separator" style="clear: both; text-align: center;"></div><br /><pre style="font-family: inherit;" wrap="">Tras abrirlo y buscar información veo que es compatible con el driver <a href="http://wireless.kernel.org/en/users/Drivers/p54">P54</a>.</pre><pre wrap=""></pre>El interior viene a ser algo parecido a esto:<br /><div class="separator" style="clear: both; text-align: center;"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirC07BWxZUbPCN1RINR4jCyHj6cdbbMLTWRCnVIjpru90y3rY8adYUeIzVMNLyt6_cgPcMAq76WrGZg3wQSOfm_g-RCddi5_k2ibaPN7x1vBHPeBpN4UMerJ9b-YgPl60-SiOVnw/s320/telsey1.jpg" border="0" /> En mi caso el chip pone: GW3887AIKZ</div><div class="separator" style="clear: both; text-align: center;"></div><br />Finalmente creo un parche para el driver p54usb. (En concreto para 2.6.29-wl [git]):<br /><br /><div style="border: 1px solid blue; padding: 1em; background: rgb(208, 208, 255) none repeat scroll 0% 50%; overflow: auto; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><pre>diff --git a/drivers/net/wireless/p54/p54usb.c<br />b/drivers/net/wireless/p54/p54usb.c<br />index da6640a..ef0fc55 100644<br />--- a/drivers/net/wireless/p54/p54usb.c<br />+++ b/drivers/net/wireless/p54/p54usb.c<br />@@ -75,6 +75,7 @@ static struct usb_device_id p54u_table[] __devinitdata = {<br /> {USB_DEVICE(0x2001, 0x3704)}, /* DLink DWL-G122 rev A2 */<br /> {USB_DEVICE(0x413c, 0x8102)}, /* Spinnaker DUT */<br /> {USB_DEVICE(0x413c, 0x8104)}, /* Cohiba Proto board */<br />+ {USB_DEVICE(0x1413, 0x5400)}, /* Telsey 802.11g USB2.0 Adapter */<br /> {}<br />};<br /></pre></div><br />Confirmo que con ese parche funciona, aunque solo la he probado 2 minutos con un AP en abierto.LatinSuDhttp://www.blogger.com/profile/07686760296161354134noreply@blogger.com4tag:blogger.com,1999:blog-25827919.post-61382608743454714092008-11-22T01:35:00.005+01:002008-11-22T02:27:13.137+01:00Teclado MIDI en LinuxHace unos años compré este teclado MIDI (MK-3701) en ebay. Es un teclado puramente MIDI, no tiene altavoz ni genera sonido alguno. Para utilizarlo es imprescindible conectarlo a un puerto MIDI como el que tenían las tarjetas de sonido antiguas.<br />Por otro lado tengo un PC viejo con una tarjeta de sonido Avance Logic ALS120 (semi-compatible con Sound Blaster 16).<br /><div class="separator" style="clear: both; text-align: center;"></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKYiUaZZ0Tvl_2qwIdLY1EI8pCg7npdmeP0D-3xJ0eQfcqgfiuW_hW7OyzDBjrN9WyFGe1mbQhKzbspSWpUsQdZi6cSzUqFgEuYtf2a1MpmqjdZSr-lf_khTxTyezRyObPJAPXzg/s1600-h/P22-11-08_01.40.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKYiUaZZ0Tvl_2qwIdLY1EI8pCg7npdmeP0D-3xJ0eQfcqgfiuW_hW7OyzDBjrN9WyFGe1mbQhKzbspSWpUsQdZi6cSzUqFgEuYtf2a1MpmqjdZSr-lf_khTxTyezRyObPJAPXzg/s320/P22-11-08_01.40.jpg" border="0" /></a></div><ul><li>La primera opción era conectar directamente el teclado al sintetizador OPL3 de la tarjeta (mediante <i>rosegarden</i>). Pero por alguna razón no me funciona.</li><li>La segunda opción era usar un sintetizador software (<i>timidity</i>) y utilizar la salida PCM. El problema es el uso de CPU (es un PC que tiene bus ISA...) y la calidad de sonido (esta tarjeta parece funcionar en 8 bits).</li><li>La opción que me da mejor resultado es usar mi flamante portátil para sintetizar el sonido. Para ello tengo que enviar el protocolo MIDI por la red (al principio probé con <i>rosegarden</i> y <i>multimidicast</i>).<br /></li></ul>La forma más sencilla y eficiente de enviar los eventos MIDI por la red es usar las herramientas de ALSA:<br /><br />Primero ejecuto esto en el PC antiguo que tiene el teclado:<br /><div style="background-color: black; color: white; font-family: monospace;"><pre>aseqnet & # Lanzar el servidor MIDI en red<br />aseqdump -l # Listar los dispositivos disponibles (16:0 Avance Logic, 128:0 Net Client)<br />aconnect 16:0 128:0 # Conectar la entrada del teclado al servidor MIDI.</pre></div><br />A continuación ejecuto esto en el portátil:<br /><div style="background-color: black; color: white; font-family: monospace;"><pre>aseqnet 192.168.1.10 & # Conectar a la IP del servidor MIDI<br />timidity -iA -Os1 -B 2,3 & # Lanzar el sintetizador software (Fijarse que le asigna el nº 128:0)<br />aseqdump -l # Listar los dispositivos disponibles (129:0 Net Client)<br />aconnect 128:0 129:0 # Conectar el cliente MIDI con el sintetizador</pre></div><br />Tras esto ya puedo tocar el piano con baja latencia y alta calidad de sonido.<br /><br />Si algo falla lo primero es comprobar que el sonido se esté enviando por la red: ejecutar ambos comandos <i>aseqnet</i> y medir el tráfico en la red al pusar las teclas (debe subir a ~1 KB/s).LatinSuDhttp://www.blogger.com/profile/07686760296161354134noreply@blogger.com0tag:blogger.com,1999:blog-25827919.post-5642050895487872282008-10-20T01:09:00.005+02:002008-10-20T01:11:59.490+02:00Tira #13: Manifestación<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjb0rgmHlSQisjyK8FLCjaa9U4fsAUxuGsAz3v0QLUMDRCT2P1dpriaK3joas9KIHfCjwEhMDBZPL35VrzOPx1Q1FVXFlxjDrsHUm-PzeOk2FlgGNrUVCwa2lnovn2IFc-Eqh3TCw/s1600-h/tira13.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjb0rgmHlSQisjyK8FLCjaa9U4fsAUxuGsAz3v0QLUMDRCT2P1dpriaK3joas9KIHfCjwEhMDBZPL35VrzOPx1Q1FVXFlxjDrsHUm-PzeOk2FlgGNrUVCwa2lnovn2IFc-Eqh3TCw/s400/tira13.png" alt="" id="BLOGGER_PHOTO_ID_5259006244565584258" border="0" /></a>Vale, es un juego de palabras muy tonto.<br /><br /><a href="http://latinsud.blogspot.com/search/label/tira">Todas las tiras</a>. <a href="http://beta.blogger.com/feeds/25827919/posts/full/-/tira">Feed RSS de todas las tiras</a>LatinSuDhttp://www.blogger.com/profile/07686760296161354134noreply@blogger.com0tag:blogger.com,1999:blog-25827919.post-40654844814094949762008-10-20T00:10:00.002+02:002008-10-20T00:18:10.032+02:00Spam de nueva generaciónSi el spam fuera en 3D sería así (no doy más pistas). <br />
<img src="http://farm4.static.flickr.com/3246/2956352460_46acb02820_o.png" />LatinSuDhttp://www.blogger.com/profile/07686760296161354134noreply@blogger.com0tag:blogger.com,1999:blog-25827919.post-82611442108952735712008-10-19T23:38:00.007+02:002008-10-19T23:58:10.659+02:00Tecla de inicio sin logotipo de windows¿Por qué los teclados tienen que traer el logotipo de un sistema operativo, si además en muchos casos el ordenador no tiene ese sistema? Afortunadamente existe el <span style="font-weight: bold;">disolvente universal</span> para remediar esta incongruencia.<br />Basta empapar un bastoncillo de los oídos en disolvente y frotar la tecla. Luego secar con un pañuelo de papel. Hay que tener cuidado, la propia tecla se puede llegar a disolver, aplicar el disolvente en pequeñas cantidades y secar enseguida.<br /><br /><div style="border: 1px solid blue; padding: 1em; background: rgb(208, 208, 255) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_af4aLPZCKcP4AD-aLP1-8EIzpNCBkFySGw5v7q2DfUT9r-g2sI6Sdh5bXIk-4iPsTlXrSJIzYucUOQr9Cvz0qcSd1TQFTLjzDZCKnqitO0M8MNcFgX6AgiITW_OL8sstIwDVUA/s1600-h/teclado.jpeg"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_af4aLPZCKcP4AD-aLP1-8EIzpNCBkFySGw5v7q2DfUT9r-g2sI6Sdh5bXIk-4iPsTlXrSJIzYucUOQr9Cvz0qcSd1TQFTLjzDZCKnqitO0M8MNcFgX6AgiITW_OL8sstIwDVUA/s200/teclado.jpeg" alt="" id="BLOGGER_PHOTO_ID_5258984476438650754" border="0" /></a> <a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6fZBPq_VcCekWga9rVd5EiugDkdBg8j4071fncWDVLnHfVu3x4cbje7dq2Bh6m5eqvVfgGMfMWvEIYs8g_llzCnVB_p3Pix5t9XqxZ6NgXEzC-FSMZpkZu36ss9sbHEGJVMot9Q/s1600-h/teclado601_1.jpeg"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6fZBPq_VcCekWga9rVd5EiugDkdBg8j4071fncWDVLnHfVu3x4cbje7dq2Bh6m5eqvVfgGMfMWvEIYs8g_llzCnVB_p3Pix5t9XqxZ6NgXEzC-FSMZpkZu36ss9sbHEGJVMot9Q/s200/teclado601_1.jpeg" alt="" id="BLOGGER_PHOTO_ID_5258984483193758290" border="0" /></a> <a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4i_GugfSrxVTpwhmi8LlWMCLYkniPpzUijU2J_0YvcBKTR-3fFgs5O20q9li_qcZ9TENVnB0rd5UKEL8csRXwTtjmIKpxvX23rOT1jSA7d1yDbPByD7YuOkF8le4K4rdYEUwo4A/s1600-h/teclado628_1.jpeg"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4i_GugfSrxVTpwhmi8LlWMCLYkniPpzUijU2J_0YvcBKTR-3fFgs5O20q9li_qcZ9TENVnB0rd5UKEL8csRXwTtjmIKpxvX23rOT1jSA7d1yDbPByD7YuOkF8le4K4rdYEUwo4A/s200/teclado628_1.jpeg" alt="" id="BLOGGER_PHOTO_ID_5258984484686982562" border="0" /></a> <a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmMmowuhmuPlvcso_C8zaVdR9PwPVNB_aLd3OkNCrW7gugYxRGf1sHZNTeXRGhCkCTB4F8PaQSthiKkviKXE04FqJKsaP4LBOp-OLNbtNWt-lX4yfMzkwPuPbNdBRi8AdNkYAH3Q/s1600-h/teclado656_1.jpeg"><br /></a><br />Teclado modificado en 2005</div><br /><br /><div style="border: 1px solid blue; padding: 1em; background: rgb(208, 208, 255) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIHE5CF8TOA1h0VTOzLyDwXW9TTA_Oh7GUsH2FpOsDAIfKzBvzVRpAlBwUoF9TSZsNXNNtD9pMsc0SKJ16GEGLNQEJsRfPk8kYH1m8LwkHNdtlH0yrN4tmkeHliG8yGDgLYkiOeQ/s1600-h/P14-10-08_21.02.jpg"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIHE5CF8TOA1h0VTOzLyDwXW9TTA_Oh7GUsH2FpOsDAIfKzBvzVRpAlBwUoF9TSZsNXNNtD9pMsc0SKJ16GEGLNQEJsRfPk8kYH1m8LwkHNdtlH0yrN4tmkeHliG8yGDgLYkiOeQ/s200/P14-10-08_21.02.jpg" alt="" id="BLOGGER_PHOTO_ID_5258984497994414562" border="0" /></a> <a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVb-dW-j9zE3BQZ6efFEwQ9vhabK_1ozthYm5tI4T_J0NjFtyR3D4XKhQCQ6Q2RfowQh0kzYGqnJNjfrncpXDZUQ3LW0hlFbgxEaR2rmzZ8GFTU9QwploWRkLsnyNCjxZMwFglaQ/s1600-h/P14-10-08_21.02%5B1%5D.jpg"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVb-dW-j9zE3BQZ6efFEwQ9vhabK_1ozthYm5tI4T_J0NjFtyR3D4XKhQCQ6Q2RfowQh0kzYGqnJNjfrncpXDZUQ3LW0hlFbgxEaR2rmzZ8GFTU9QwploWRkLsnyNCjxZMwFglaQ/s200/P14-10-08_21.02%5B1%5D.jpg" alt="" id="BLOGGER_PHOTO_ID_5258984675528439890" border="0" /></a><br />Teclado HP modificado en 2008 (comparado con un teclado original)</div>LatinSuDhttp://www.blogger.com/profile/07686760296161354134noreply@blogger.com0tag:blogger.com,1999:blog-25827919.post-53561149616707564072008-10-19T22:44:00.000+02:002008-10-19T22:46:27.164+02:00Publicidad original: Regreso a los precios del pasado IIPues nada, que iba por la calle y me encuentro esta obra de arte tirada en el suelo:<br />
<a href="http://www.flickr.com/photos/69149038@N00/2905779088/" title="Regreso a los precios del pasado by LatinSuD, on Flickr"><img alt="Regreso a los precios del pasado" height="240" src="http://farm4.static.flickr.com/3113/2905779088_526cd3927a_m.jpg" width="180" /></a>LatinSuDhttp://www.blogger.com/profile/07686760296161354134noreply@blogger.com0tag:blogger.com,1999:blog-25827919.post-25695434754657269872008-07-24T22:04:00.001+02:002008-07-24T22:08:09.669+02:00Ascensor a punto de explotar¿Qué pasa cuando un ascensor se moja por una gotera en el techo?<br /><br />¡Pues que se vuelve loco!<br /><br /><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/zchR3iWwsFY&hl=es&fs=1&rel=0&color1=0x2b405b&color2=0x6b8ab6"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/zchR3iWwsFY&hl=es&fs=1&rel=0&color1=0x2b405b&color2=0x6b8ab6" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object>LatinSuDhttp://www.blogger.com/profile/07686760296161354134noreply@blogger.com0tag:blogger.com,1999:blog-25827919.post-45086450544054188912008-07-12T19:56:00.003+02:002008-07-12T20:18:03.776+02:00Zoom en el applet java de camaras Axis.Las cámaras Axis soportan distintos métodos de visualización:<br />- Stream MJPG. Soportado nativamente en Firefox, pero no en IE.<br />- Control ActiveX. Por defecto sólo soportado en IE.<br />- Shockwave Flash (SWF).<br />- JPG/Javascript.<br />- Applet Java.<br /><br />Desde el menú de configuración de algunos modelos podemos encontrar ejemplos de código HTML/Javascript para incrustar el video en una web externa, que incluyen el código para detectar el navegador.<br /><br />Una de las formas más universal de incrustar el video es mediante un applet Java. El problema es que el applet no ofrece, en principio, opciones para ajustar la imagen a un tamaño no estándar. Sin embargo, mediante ingeniería inversa (<a href="http://jode.sourceforge.net/">JODE</a>) encontramos que existen varios parámetros no documentados, entre ellos uno para hacer zoom.<br /><br /><div style="border: 1px solid blue; padding: 1em; background: rgb(208, 208, 255)"><pre>String string_16_ = getParameter("ama_zoom");<br />if ( string_16_ == null ) <br />...<br />if ( string_16_.equals("auto") ) <br />...<br />if ( string_16_.equals("free") )<br />...<br />else<br />...</pre></div><br /><br />Así que a nuestro applet añadimos esto para que el contenido se ajuste a la ventana:<br /><div style="border: 1px solid blue; background: rgb(208, 208, 255)"><pre><PARAM NAME="ama_zoom" VALUE="free"></pre></div><br /><br />Aquí una forma sencilla de obtener todos los parámetros del applet:<br /><div style="border: 1px solid blue; background: rgb(208, 208, 255)"><pre>strings MediaApplet.class | grep ama_</pre></div>LatinSuDhttp://www.blogger.com/profile/07686760296161354134noreply@blogger.com0tag:blogger.com,1999:blog-25827919.post-20605353772665747702008-06-04T01:42:00.007+02:002008-06-04T02:05:14.008+02:00Tender la ropa con lluviaLa idea es muy sencilla: usar una funda de plástico impermeable sobre la ropa tendida. Sin embargo, en la práctica no es tan sencillo lograr un resultado aceptable por dos razones:<br /><ul><li>Un plástico mal colocado puede provocar bolsas de agua y hacer que se acabe cayendo.</li><li>Un plástico demasiado pegado a la ropa puede provocar condensación de agua y que tarde una semana en secar (y huela mal).</li></ul>Por eso, lo mejor que se me ha ocurrido es hacer una estructura con perchas sobre la cuerda de tender.<br />En mi caso me viene especialmente bien porque tengo 2 cuerdas paralelas, una encima de la otra.<br /><hr style="display: block"/><br />Este es el modelo de percha ideal, cuanto más grande mejor. Es necesario partirla por debajo para colocarla en la cuerda.<br /><span style="font-weight: bold;"><br /></span><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7SZo2ydw68SXJGaD-6yMTpApDNQbMjDuh6bAjkZSQMEP5GwC2ezavPG4_Qz0BOu6XQFJhd2Jx3VtNXFvjUmDbg6O32nCwLCovcOBtQ9HBAoNSSlsRwFX1VRHCmDrDdeLwUChe3Q/s1600-h/P24-05-08_12.29.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7SZo2ydw68SXJGaD-6yMTpApDNQbMjDuh6bAjkZSQMEP5GwC2ezavPG4_Qz0BOu6XQFJhd2Jx3VtNXFvjUmDbg6O32nCwLCovcOBtQ9HBAoNSSlsRwFX1VRHCmDrDdeLwUChe3Q/s320/P24-05-08_12.29.jpg" alt="" id="BLOGGER_PHOTO_ID_5207806001295796802" border="0" /></a><br /><hr style="display: block"/><br />A continuación colocamos pinzas para sujetarla. Recomiendo colocar 4 en este orden:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_z6sg0munDV5hQGk0Q7DU9h6tXOpVebjgVtQ9tpMcssEXb18eJWJesrLf_qMhNTA87AtFjdG5T9xgmxXbqMOlk7sc98zJKKRBP67cL9GzR4ZejfAlASIkthwND0KH4wtd3yIKRA/s1600-h/P24-05-08_12.29%5B2%5D.jpg"><img style="margin: 0px auto 10px; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_z6sg0munDV5hQGk0Q7DU9h6tXOpVebjgVtQ9tpMcssEXb18eJWJesrLf_qMhNTA87AtFjdG5T9xgmxXbqMOlk7sc98zJKKRBP67cL9GzR4ZejfAlASIkthwND0KH4wtd3yIKRA/s320/P24-05-08_12.29%5B2%5D.jpg" alt="" id="BLOGGER_PHOTO_ID_5207806001295796818" border="0" /></a> <a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgB0KxDXy-8dhoep3BZOA0W-lUM5_KncnL-r0sdI5lLR8VjTE5MNFUq1Uc2q727mDGXeJa7DLJLUDsJj2P42yEEi8nA6o6HqYgPag5S9AcC3Lca-ip5D2D76jwcgTwX_1AqHscQGg/s1600-h/P24-05-08_12.31.jpg"><img style="margin: 0px auto 10px; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgB0KxDXy-8dhoep3BZOA0W-lUM5_KncnL-r0sdI5lLR8VjTE5MNFUq1Uc2q727mDGXeJa7DLJLUDsJj2P42yEEi8nA6o6HqYgPag5S9AcC3Lca-ip5D2D76jwcgTwX_1AqHscQGg/s320/P24-05-08_12.31.jpg" alt="" id="BLOGGER_PHOTO_ID_5207806005590764130" border="0" /></a><br /><hr style="display: block"/><br />Luego colocamos el plástico encima:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqzjOYl2qQhnjM8Rc02SHXteAYQIBDuFb2XMQ_rlwZsxvAieIec9vRwbg1ib5OaS776ffit0rnu9BHQV-KPEaySz62Un9ebHw0GW4fBqjF7FlP0BW0TSjTH6jRkTWs2piFLLeVdw/s1600-h/P24-05-08_12.45.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqzjOYl2qQhnjM8Rc02SHXteAYQIBDuFb2XMQ_rlwZsxvAieIec9vRwbg1ib5OaS776ffit0rnu9BHQV-KPEaySz62Un9ebHw0GW4fBqjF7FlP0BW0TSjTH6jRkTWs2piFLLeVdw/s320/P24-05-08_12.45.jpg" alt="" id="BLOGGER_PHOTO_ID_5207806005590764146" border="0" /></a><br /><hr style="display: block"/><br />Y finalmente nos aseguramos de que todo está bien sujeto y sin puntos de entrada de agua. Ponemos más pinzas en las uniones de los extremos:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpCX8hLszkpr1YSUXExLfQ7-tqOb34lCLQRWv5p_ntsn2QbRi1FUn_3Y9W30qoEvYf1l-a2P6Px-joKxIHIG3my6C8dSGSnA2W8Qf-RmPDHBYnjGqQY6VSPuXl2iHmoWM8dSkzwQ/s1600-h/P24-05-08_12.28.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpCX8hLszkpr1YSUXExLfQ7-tqOb34lCLQRWv5p_ntsn2QbRi1FUn_3Y9W30qoEvYf1l-a2P6Px-joKxIHIG3my6C8dSGSnA2W8Qf-RmPDHBYnjGqQY6VSPuXl2iHmoWM8dSkzwQ/s320/P24-05-08_12.28.jpg" alt="" id="BLOGGER_PHOTO_ID_5207805284036258354" border="0" /></a><br /><hr style="display: block"/><br />Para aprovechar mejor el espacio podemos tender la ropa en perchas. No recomiendo poner las perchas perpendiculares a la cuerda, sino más bien oblicuas, y así no sobresalen de la vertical del plástico.<br />Usamos más pinzas para fijar la posición y orientación de las perchas: <a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNgL7zZ6A4eLFhgNkJ3jrEgyWoyKVBeW0IMn2sSvXvufDBGaB8EeEEoxOWGpAjPWpVkxe8scix-be6hPurHJCc3Bt_bNrKRF8X4nM-vmGBZbloiqh9v-u__hFfRKACtzfsJKVzlQ/s1600-h/P24-05-08_13.34.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNgL7zZ6A4eLFhgNkJ3jrEgyWoyKVBeW0IMn2sSvXvufDBGaB8EeEEoxOWGpAjPWpVkxe8scix-be6hPurHJCc3Bt_bNrKRF8X4nM-vmGBZbloiqh9v-u__hFfRKACtzfsJKVzlQ/s320/P24-05-08_13.34.jpg" alt="" id="BLOGGER_PHOTO_ID_5207806009885731458" border="0" /></a><br />El resultado es bastante aceptable, muy recomendable para pisos de 30m<sup>2</sup> donde no caben tendederos de interior.LatinSuDhttp://www.blogger.com/profile/07686760296161354134noreply@blogger.com0tag:blogger.com,1999:blog-25827919.post-15705869215071477012007-12-31T02:09:00.001+01:002007-12-31T02:23:47.776+01:00REC: Estado del cine españolEl otro día vi REC en el cine. Está bien, reconozco que cada 20 minutos me pasaba por la cabeza: «y pensar que esto es cine español, qué bueno».<br />La idea me pareció bastante novedosa a mi juicio (no he visto La Bruja de Blair), bastante realista la forma de comportarse los personajes en su mayoría, aunque alguno roza la caricatura aportando unas pinceladas de humor.<br />Me gusta el hecho de que no hay el típico «monstruo rugiendo en primer plano durante 5 segundos para asustar y demostrar lo bien hecho que está», sino que todo sucede como ya he dicho de forma realista.<br />Por último destacar que resulta muy fácil meterse en la película porque por una vez los protagonistas son españoles (casi todos), al principio parece que sólo estamos viendo cómo se hizo un aburrido documental para una televisión española...<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://farm3.static.flickr.com/2287/2149179865_1ae3b4f37e_m.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 170px;" src="http://farm3.static.flickr.com/2287/2149179865_1ae3b4f37e_m.jpg" alt="" border="0" /></a><br />¿Cómo dice que se llama? ¿Shrek? Ah, no, REC.LatinSuDhttp://www.blogger.com/profile/07686760296161354134noreply@blogger.com1tag:blogger.com,1999:blog-25827919.post-46835814596013900992007-09-01T11:22:00.000+02:002007-09-01T11:30:20.870+02:00Tira #12: Televisiones de plasma<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxge3empDm8ytl9Qn3V0kwprKpdxDYveixPxROVZ-WY29piX5JuF89_FW-NcxdZD-obvrF5e-kz3HZEXhfwV6MtFGYtUN0-W6DtK3cFr2_OZMeV0g2Xkmm9vuN45PArGrazq7WiQ/s1600-h/tira12.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxge3empDm8ytl9Qn3V0kwprKpdxDYveixPxROVZ-WY29piX5JuF89_FW-NcxdZD-obvrF5e-kz3HZEXhfwV6MtFGYtUN0-W6DtK3cFr2_OZMeV0g2Xkmm9vuN45PArGrazq7WiQ/s400/tira12.png" alt="" id="BLOGGER_PHOTO_ID_5105164454481666690" border="0" /></a>¡Que alguien se atreva a decirme que no! Antes una TV buena valía 10 mil duros, hoy día se oyen frases como: «hay que aprovechar que los plasma están baratos, ahora <span style="font-style: italic;">sólo</span> valen 1000 euros». Resumiendo, aunque puede ser muy barato para ser una TV plana, sigue siendo muy caro para ser una TV.<br /><br /><a href="http://latinsud.blogspot.com/search/label/tira">Todas las tiras</a>. <a href="http://beta.blogger.com/feeds/25827919/posts/full/-/tira">Feed RSS de todas las tiras</a>LatinSuDhttp://www.blogger.com/profile/07686760296161354134noreply@blogger.com1tag:blogger.com,1999:blog-25827919.post-71632526598468568522007-08-17T15:29:00.000+02:002017-07-22T11:39:17.145+02:00Crash al cargar hostap_cs (shared IRQ)<a href="http://hostap.epitest.fi/">Hostap_cs</a> es un driver de Linux para las tarjetas Wifi pcmcia Prism2/2.5/3. Es bastante potente, permite modo <span style="font-style: italic;">Master</span> (emular un punto de acceso) además de modo monitor e inyección. El problema que tiene es que a veces se me colgaba el portatil al cargarlo.<br />
<br />
El origen del problema es que en mi portátil el sistema le asigna una IRQ compartida con otro dispositivo y el <span style="font-style: italic;">driver</span> no está preparado para ello, por lo que a veces se invoca la función ISR antes de estar debidamente inicializado.<br />
<br />
La solución más sencilla es insertar un semáforo que controle si el <span style="font-style: italic;">driver</span> se ha inicializado y abortar la ISR mientras no esté preparado.<br />
Quizás no sea la solución más elegante y puede que falle al insertar varias tarjetas prism a la vez, pero a mi me funciona.<br />
<br />
Parche: <a href="http://latinsud.com/pub/hostap/">http://latinsud.com/pub/hostap/</a><br />
<br />
[Update 2017]: Creo que este bug ya esta corregido en la version oficial desde hace años (suponiendo que hoy día alguien siga usando tarjetas PCMCIA)LatinSuDhttp://www.blogger.com/profile/07686760296161354134noreply@blogger.com0