Jun
27
2009
0

Cuanto puedes hacer con 1 Kb de RAM en un ZX81 Home computer

ZX 81
Creative Commons License photo credit: fdecomite

Sólo un rápido post para rememorar mi primer computador: un ZX81 –en rigor era un comodato. Ah! ingenua juventud.
Así es gente del siglo XXI, con esto nos lo teníamos que arreglar en la prehistoria.
En todo caso no podrán negar que tenía estilo. Presionar esas teclas que bajaban apenas un milimetro es algo que –sorpresa– aún puedo sentir!

Podrás creer que este fascinante artilugio sólo poseía 1024 bytes en su memoria –útil de trabajo– RAM? Yo sabía muy bien que un byte, a lo más, puede representar un caracter, es decir, una letra, un número o un signo. Así que siempre me encontraba resumiendo al máximo la codificación de lo que quería lograr. Lamento, de veras, decir que no fueron suficientes bytes.

Entrabas directamente a un editor en el que podías escribir unas cuantas lineas en BASIC para luego apretar [RUN] y a ponerse a mirar si pasaba algo –con las pepitas como platillos. Que bueno recordarlo. Pero basta, que se me… Por la cresta, ya me le estoy atragantando.

ZX81

ZX81

Fuente imágenes: http://www.1000bit.it

Escrito por NomikOS en: Computación, Personal |
Hoy 3 lectores.
Jun
17
2009
0

Función PHP para reinvertir BBCode

ls -l
Creative Commons License photo credit: madmaxx

Muy bien. Este blog se está cargando mucho a linux. Asi que aqui va una función bastante útil.

Le pedí y le pedí ayuda al taitita google pa’ que me encontrara una función que me permitiera volver a meter posts escritos en vBulletin de vuelta a la base de datos. Es decir reinvertir el proceso resultante de pasar el texto del post por bbcode. Nadie sabía nada! Hasta me registré en un sitio macanudamente llamado vBulletin Hackers. Todo para que me dijeran: just “re-post” the posts?

8O Qué? sorprendente! –pensaba agarrado del techo con las uñas.

Además que quedé bien picado con mi respetable cliente. Me demoré tanto haciendo un trabajo que al principio parecia re-fácil que se terminó choreando él –me dió un 10 como es obvio pero $0 bonus –clientes, uno no sabe si amarlos o.

Bueno, al final lo hice no más –y te aseguro papá que quedé perito en vBulletin.

Parte de ese trabajo, fué convencerme a mi mismo de que era posible obtener una función de reinversión, que en el ámbito de vBulletin arrojara siempre un resultado correcto.

Asi es, esta función funcionará muy bien en vBulletin 3.7.4 y sólo en ella lo puedo asegurar. Pero seguro que te servirá un montón para empezar la tuya propia acomodándola a un problema específico.

Aquí va. Se usan expresiones regulares y el orden es importante. Y si vas a usarla con un cliente mejor cámbiale nombre. Yo la llamaba coolText()

(Y que te aproveche mi amig@, en algún momento de desespero estuve a punto de pagar hasta US$100 para que me hicieran esta función.)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
function fuckBBcode($str)
{
    # basic html
   $str = str_ireplace('<br />', '', $str);
    $str = str_ireplace('<b>', '[b]', $str);
    $str = str_ireplace('<i>', '[i]', $str);
    $str = str_ireplace('<u>', '[u]', $str);
    $str = str_ireplace('</b>', '[/b]', $str);
    $str = str_ireplace('</i>', '[/i]', $str);
    $str = str_ireplace('</u>', '[/u]', $str);

    $str = str_ireplace('<ul>', '[list]', $str);
    $str = preg_replace("/<ol type=\"(\w{1})\">/si", "[list=\\1]", $str);
    $str = str_ireplace('<li>', '[*]', $str);
    $str = str_ireplace('</ul>', '[/list]', $str);
    $str = str_ireplace('</ol>', '[/list]', $str);

    # smilies
   $str = str_ireplace('<img src="images/smilies/redface.gif" border="0" alt="" title="Embarrassment" class="inlineimg" />', ':o', $str);
    $str = str_ireplace('<img src="images/smilies/smile.gif" border="0" alt="" title="Smile" class="inlineimg" />', ':)', $str);
    $str = str_ireplace('<img src="images/smilies/frown.gif" border="0" alt="" title="Frown" class="inlineimg" />', ':(', $str);
    $str = str_ireplace('<img src="images/smilies/confused.gif" border="0" alt="" title="Confused" class="inlineimg" />', ':confused:', $str);
    $str = str_ireplace('<img src="images/smilies/mad.gif" border="0" alt="" title="Mad" class="inlineimg" />', ':mad:', $str);
    $str = str_ireplace('<img src="images/smilies/tongue.gif" border="0" alt="" title="Stick Out Tongue" class="inlineimg" />', ':p', $str);
    $str = str_ireplace('<img src="images/smilies/wink.gif" border="0" alt="" title="Wink" class="inlineimg" />', ';)', $str);
    $str = str_ireplace('<img src="images/smilies/biggrin.gif" border="0" alt="" title="Big Grin" class="inlineimg" />', ':D', $str);
    $str = str_ireplace('<img src="images/smilies/rolleyes.gif" border="0" alt="" title="Roll Eyes (Sarcastic)" class="inlineimg" />', ':rolleyes:', $str);
    $str = str_ireplace('<img src="images/smilies/cool.gif" border="0" alt="" title="Cool" class="inlineimg" />', ':cool:', $str);
    $str = str_ireplace('<img src="images/smilies/eek.gif" border="0" alt="" title="EEK!" class="inlineimg" />', ':eek:', $str);

    # colors
   $str = preg_replace("/<font color=\"([^\"]*)\">(.*?)<\/font>/si", "[color=\\1]\\2[/color]", $str);
    $str = preg_replace("/<span class=\"highlight\">(.*?)<\/span>/si", "[highlight]\\1[/highlight]", $str);

    # html code && code
   $str = preg_replace("/<div style=\"margin:20px; margin-top:5px\">\s*<div class=\"smallfont\" style=\"margin-bottom:2px\">HTML Code:<\/div>\s*<pre class=\"alt2\" dir=\"ltr\" style=\"[^\"]*\">/si", '[code]', $str);
    $str = preg_replace("/<div style=\"margin:20px; margin-top:5px\">\s*<div class=\"smallfont\" style=\"margin-bottom:2px\">Code:<\/div>\s*<pre class=\"alt2\" dir=\"ltr\" style=\"[^\"]*\">/si", '[code]', $str);
    $str = preg_replace("/<\/pre>\s*<\/div>/", '[/code]', $str);

    # php code
   $str = preg_replace("/<div style=\"margin:20px; margin-top:5px\">\s*<div class=\"smallfont\" style=\"margin-bottom:2px\">PHP Code:<\/div>\s*<div class=\"alt2\" dir=\"ltr\" style=\"[^\"]*\">\s*<code style=\"white-space:nowrap\">\s*<!-- php buffer start -->/si", '[php]', $str);
    $str = preg_replace("/<!-- php buffer end -->\s*<\/code>\s*<\/div>\s*<\/div>/", '[/php]', $str);

    # quotes
   $str = preg_replace("/<div style=\"margin:20px; margin-top:5px; \">\s*<div class=\"smallfont\" style=\"margin-bottom:2px\">Quote:<\/div>\s*<table cellpadding=\"6\" cellspacing=\"0\" border=\"0\" width=\"100%\">\s*<tr>\s*<td class=\"alt2\" style=\"border:1px inset\">\s*<div>\s*Originally Posted by <strong>([^<]*)<\/strong>\s*<a href=\"showthread\.php\?[^>]*p=(\d+)#post\d+\" rel=\"nofollow\"><img class=\"inlineimg\" src=\"images\/buttons\/viewpost\.gif\" border=\"0\" alt=\"View Post\" \/><\/a>\s*<\/div>\s*<div style=\"font-style:italic\">/si", "[quote=\\1;\\2]", $str);
    $str = preg_replace("/<div style=\"margin:20px; margin-top:5px; \">\s*<div class=\"smallfont\" style=\"margin-bottom:2px\">Quote:<\/div>\s*<table cellpadding=\"6\" cellspacing=\"0\" border=\"0\" width=\"100%\">\s*<tr>\s*<td class=\"alt2\" style=\"border:1px inset\">\s*<div>\s*Originally Posted by <strong>([^<]*)<\/strong>\s*<\/div>\s*<div style=\"font-style:italic\">\s*/si", "[quote=\\1]", $str);
    $str = preg_replace("/<div style=\"margin:20px; margin-top:5px; \">\s*<div class=\"smallfont\" style=\"margin-bottom:2px\">Quote:<\/div>\s*<table cellpadding=\"6\" cellspacing=\"0\" border=\"0\" width=\"100%\">\s*<tr>\s*<td class=\"alt2\" style=\"border:1px inset\">\s*/si", "[quote]", $str);
    $str = preg_replace("/(<\/div>\s*)?<\/td>\s*<\/tr>\s*<\/table>\s*<\/div>/", '[/quote]', $str);

    # urls && threads/posts internal linking
   $str = preg_replace("/<a[^>]*href=\"([^\"]*)\"[^>]*>([^<]*)<\/a>/si", "[url=\\1]\\2[/url]", $str);

    # mailto
   $str = preg_replace("/<a[^>]*href=\"mailto:([^\"]*)\"[^>]*>([^<]*)<\/a>/si", "[email=\\1]\\2[/email]", $str);

    # images (after quotes/smileys and others containig images: images/buttons/viewpost.gif)
   $str = preg_replace("/<img[^>]*src=\"([^\"]*)\"[^>]*>/si", "[img]\\1[/img]", $str);

    # screencast
   $str = preg_replace("/<iframe width=\"\d+\" height=\"\d+\" frameborder=\"0\" scrolling=\"no\" src=\"http:\/\/www\.screencast-o-matic\.com\/embed\?sc=(\w+)&amp;[^>]*\"><\/iframe>/si", "[screencast]\\1[/screencast]", $str);

    # clear sig
   $str = preg_replace("/<!-- sig -->.*?<!-- \/ sig -->/si", '', $str);

    # clear attachment
   $str = preg_replace("/<!-- attachments -->.*?<!-- \/ attachments -->/si", '', $str);

    # html comments
   $str = preg_replace("/<!-- \w+ -->/", '', $str);
    $str = preg_replace("/<!-- \/ \w+ -->/", '', $str);

    # clean all unmatched tags for clarity
   $str = strip_tags($str);

    # html characteres
   $str = str_replace('&quot;', '"', $str);
    $str = str_replace('&#039;', "'", $str);
    $str = str_replace('&amp;', "&", $str);

    return trim($str);
}

En realidad este código amerita hartas explicaciones, pero créeme, funciona bien. Y recuerda… el orden de ejecución es de lo más importante. No cambies nada.

Escrito por NomikOS en: PHP | Tags: ,
Hoy 4 lectores.
Jun
15
2009
3

Modificación de particiones con GParted en Linux – Tutorial gráfico


Creative Commons License photo credit: egaistek

GParted es un frontend para Parted (GNU Parted). Parted es un particionador de disco para sistemas operativos tipo Unix. Con el podrás crearlas, borrarlas y redimensionarlas.

GParted está basado en las bibliotecas gráficas GTK+. Por lo que si usas KDE debieras usar QtParted. Hasta aquí todo GRATUITO incluído el S.O. Si usas MS-Windows entonces seguramente no te importará soltar unos cuantos dólares por una copia de Partition Magic.

Respalda tu info!

Particionar un disco es una tarea muy delicada como podrás imaginar y no debieras confiar en software, no diré ilegal porque no creo en eso, pero sí de origen incierto. Diga el nombre que diga es muy probable que infecte tu disco y justo en el momento más crucial.

Bueno, si estás leyendo esto es porque tienes la sana costumbre de usar software de fuente abierta. Así que vamos directamente a solucionar tu problema, el cual es…

      —Particionar mi disco!!!
    .oO ( se creerá gracioso este csm!? )
>:(

      —Ah! sí, el disco…
    .oO ( a ver si x lo – se deja un comentario este gl )
>:)

OK. Lo primero que debes saber es que no puedes trabajar sobre una partición montada y menos en la que sustenta el directorio raiz (/). Para este último caso parte de inmediato a buscar tu copia de GParted Live. Con eĺ podrás iniciar linux desde un CD o pendrive y así trabajar sobre tu disco totalmente desmontado.

En mi caso, y para que sirva de ejemplo, quería darle caña a mi directorio /tmp. Verás, no tiene nada de malo tirarse una buena película online, mientras cenas, verdad? Bueno, por muy online que sea, igual se baja a tu disco duro. Con toda seguridad a tu directorio para archivos temporales (/tmp). Me di cuenta de esto cuando el bueno de mi reproductor de videos simplemente se congeló sin decir ni pío y nunca más pude hacer que funcionara.
Para un machote como yo no es problema desistir de algo tan banal y decirte que al fin tendrás tiempo para estudiar lo queda de esas fotocopias sobre Bash.
Nada mal hasta que cuando muy orgullosamente vas por la segunda página y no puedes dejar de preguntarte que cresta pasó con el final de la película.

Dar a /tmp su propia partición

Básicamente la razón de este post es que quedé tan contento con la facilidad con que GParted realizó sus tareas que rehice los pasos y tome unas buenas fotos.

gparted

Fig. 1 Desmontar una partición

Las siguientes fotos dan una idea de lo fácil que es usar GParted. Si has usado Partition Magic antes, encontrarás que es similar. Simplemente usas el botón segundario del mouse para ver las opciones disponibles para cada partición. La info que muestra la ventana principal no hace falta tampoco explicarla más.

En el caso que muestro, tenia una partición con una copia de zenwalk que ya definitivamente no volvería a usar. Esa sí que quedo destrozada. (more…)

Escrito por NomikOS en: Linux | Tags: ,
Hoy 4 lectores.
Jun
15
2009
0

Perro chacarrón

Creo que ya va siendo hora de ponerle algo de ritmo a este blog. Dedicado a mis cero lectores.

Escrito por NomikOS en: Personal |
Hoy 3 lectores.
Jun
10
2009
0

Redefinición de teclas en linux – Introducción a XKB

En un comienzo sólo quería contarles de un hack muy sencillo que encontré en un libro de trucos 100 Linux tips & Tricks que nos permite darle uso a esas teclas con el símbolo de MS-windows de nuestros teclados y que en linux generalmente no usamos.

También ya alguna vez habia intentado redefinir alguna tecla para acceder más rapidamente al slash (/) pero no entendí nada.

De algo vale la pena resistir la tentación de volver a la facilidad de uso de MS-windows. De tal manera que como en todo con lo que te vas familiarizando, las cosas aparecen más sencillas y claras con creciente celeridad.

Ahora no solo he podido redefinir varias teclas, sino que he aprendido bastante sobre XKB (X KeyBoard), la extensión para manejo de teclados en sistemas con X11 (Interfaz gráfica para Unix) como es el caso de linux.

Además descubrí una nueva (2005) distribución de teclado alternativa a QWERTY/Dvorak llamada Colemak que, si bien está diseñada para el inglés, sigue siendo muy superior a QWERTY y se aviene muy bien a las tareas de un programador, que esencialmente escribe en inglés, ya sean comandos o comentarios.

Me tiene bastante emocionado darme la opotunidad de aprender algo totalmente nuevo y desde cero que esté relacionado a mi pega/hobby. En cuanto lo haya practicado un poco me referiré más a él.

Volviendo a XKB, si tú también quieres acceder a información de primera mano:

  • The X Keyboard Extension: Library Specification (pdf)
  • The X Keyboard Extension: Protocol Specification (pdf)

    Redefinición de teclas en linux

    Los archivos involucrados son:

    1
    2
    3
    4
    5
    /etc/X11/xorg.conf
    /etc/X11/xkb/geometry/pc
    /etc/X11/xkb/symbols/es
    /etc/X11/xkb/rules/xorg.lst
    /etc/X11/xkb/rules/xorg.xml

    (more…)

  • Escrito por NomikOS en: Linux | Tags: , ,
    Hoy 2 lectores.

    Powered by WordPress. Theme: TheBuckmaker. Modifications by NomikOS