jueves, 25 de diciembre de 2008

Io language, a consistent scripting language

Some days ago I discovered a new language called Io (that's capital 'i' and 'o'). It's inspired by smalltalk, but with few features of other languages like self, lisp or lua. FYI, I discovered it among other cool languages. There are even more esoteric languages here.

First thing to say about Io is it's minimalist. Really minimalist. Only look at it's site to see it. As a minimalist language, its doc is also minimalist, so you have to understand the little doc fully, and I mean *really* understand. Io is a Prototype-based language with a syntax similar to smalltalk, but more minimal (assignation is a message too). Its introspection is astonishing aswell, and it introduces a concept of context which I'm still not very confortable with.

Anyway, I've already written my first program (a typical guessing number game) for Io. Here's the code.

guesser := Object clone
guesser toGuess := Random value(100) ceil
file := File standardInput
guess := file readLine asNumber
while(guess != guesser toGuess,
   if(guess < guesser toGuess,
     "higher" println,
     "lower" println)
   guess = file readLine asNumber
)
"ok, el numero es " print
guesser toGuess println


Ah! comunity is very friendly and willing to help (you can find them at #io @freenode

jueves, 4 de diciembre de 2008

sbbuilder is out

Bien. He hecho mi primera aplicación oficial para vector linux ( http://www.vectorlinux.com )

Es un programa para generar SlackBuilds con la estructura correcta para añadirlo en los repos sin dificultad.

Link al anuncio.

Disfruten de la simplicidad de perl + Template Toolkit para hacer algo util en apenas 40 lineas

miércoles, 3 de diciembre de 2008

Popen en squeak. pipe entre el proceso externo y el caller

En un post anterior me preguntaba como capturar la info de un comando que tiramos al sistema. Pues bien, la solucion es sencilla.

Abrir el universe package browser e instalar 2 paquetes: OSProcess y commandShell (los 2 estan en Tools IIRC). Las ultimas versiones, por favor :)

Bien, pues una vez tenemos los paquetes instalados (con sus deps), solo tenemos que ejecutar

salida := (PipeableOSProcess command: 'ls') output .

Ahi lo tenemos. Sencillo, eh?

Saludos

En http://wiki.squeak.org/squeak/572 encontre la solucion.

lunes, 1 de diciembre de 2008

modifying constructors

En smalltalk es una práctica común (por lo que he visto) hacer muchas funciones para crear un objeto determinado, es decir, hacer una creadora enganchada a uno o varios setters.

De un objeto paquete, podriamos tener las siguientes creadoras:

new
createWithContent:
createWithContent:andDestination:

Bien, como bien sabemos, todo es un objeto y todo eso... y cuando decimos todo es TODO. las instancias son objetos, las funciones son objetos, las clases son objetos... y claro, si las clases son objetos, la particularidad que tienen es que son capaces de crear otros objetos (las simples instancias no pueden).

Para hacer nuevas constructoras de clase, debemos modificar la clase, o sea pinchar en 'Class', y definir la nueva funcion ahi.

createWithContent: aString
|temp|
temp := self new.
temp content: aString.
^temp.

De esta forma, hemos creado una nueva funcion constructora, que aprovecha el viaje para setear un valor.

Si analizamos lo que hace es bien sencillo. simplemente notar que self new se refiere a Paquete new , o sea, la creadora que hubieramos llamado si no tuvieramos el parametro extra. new es un metodo que implementan las Clases, no las instancias.

Log donde aprendí esto (en català) : http://raimonster.googlepages.com/smalltalk3_new_initialize.txt .

Gracias a Gerard por la ayuda.

miércoles, 26 de noviembre de 2008

Domingos

Hay domingos que molan muuuuuuuucho.
Aquellos de sofa y tele y esperar que pasen las horas, y mirar alrededor, y decir: "Joer, que bien que estoy, aunque mañana vuelva a ser un dia de mierda"

viernes, 21 de noviembre de 2008

Squeak interactuando con el exterior

Squeak funciona francamente bien cuando se refiere a cosas dentro de la imagen (depuracion, control de objetos, introspeccion....). pero para empezar a prototipar cosillas, encontré que necesitaba que pudirera comunicarme con el exterior (que siempre es el problema de las VM).

Bien, pues para hacerlo, he diferenciado 3 casos: Leer un fichero del exterior, ejecutar un comando tipo system, y finalmente ejecutar un comando y captar la salida.

Leer un fichero exterior


En entorno squeak, los ficheros no tienen mucho sentido ya que todo esta latente en la imagen, con lo que el mismo codigo es el sistema, que esta organizado en clases....blablabla....

Sin embargo, si necesitamos leer un fichero, como cojones lo hacemos? Pues bien facil:

a := CrLfFileStream fileNamed: '/tmp/a.pl'.
string := a contentsOfEntireFile .
Transcript show: string.
a close
Sin el CrLf, el objeto FileStream no interpreta los finales de linea, y printara el archvo con caracteres raros.

Ref: http://wiki.squeak.org/squeak/1583

Ejecutar un comando con 'system'

bien, ahora quiero ejecutar un programa del sistema host, no de la imagen de squeak (¿existe el concepto programa en squeak?)

Yo lo he conseguido metiendo lo siguiente en el workspace:

UnixProcess command: 'ratmen hola hola adeu adeu'.
Esto esta en el paquete OSProcess, si no lo tienes, instalalo usando el universe package browser o el SqueakMap.

Nota: Para GNU Smalltalk se puede usar
SystemDictionary system: aString
Ref: http://www.cs.utah.edu/dept/old/texinfo/mst/mst.html

Popen en squeak. pipe entre el proceso externo y el caller

No lo he conseguido :( . Seguiremos informando

Copy&Paste

Q: Eh tio, no puedo copiar y pegar el codigo de mi SO a squeak...
A: Edita tu ~/.Xresources y añade

*VT100.translations: #override\
<> : select-end(PRIMARY, CUT_BUFFER0, CLIPBOARD)\n\
<> : insert-selection(PRIMARY, CUT_BUFFER0, CLIPBOARD)\n\
<> : select-end(PRIMARY, CUT_BUFFER0, CLIPBOARD)
~

miércoles, 19 de noviembre de 2008

Problema:

Tengo un archivo con el formato siguiente:
-------------BOF

Matriu 0
1foo.map VS 0.A.map 0.565 0.382291 0.370989 0.298857 0.705638
....
1foo.map VS 0.e.map 0.257588 0.940875 0.872144 0.634201 0.844375
MITJA1_0= 0.574908 0.353649 0.339477 0.268343 0.691255
MITJA2_0= 0.55557 0.307795 0.296409 0.235522 0.517165
MITJA3_0= 0.492392 0.527022 0.484869 0.354612 0.536407
Estadisticas: 1, 2, 3 ,4,5

Matriu 1
1foo.map VS 1.A.map 0.521194 0.479164 0.464836 0.374049 0.753356
1foo.map VS 1.Br.map 0.521194 0.479164 0.464836 0.374049 0.759565
...
-----------EOF

Necesito agrupar los valores de la ultima columna (negrita), poniendolos en una fila, y en cada fila tiene que haber los valores del mismo 'map'. (cursiva). Como quedarse con las ultimas columnas y trasponer....

Ah, suponemos que tenemos unos 1500 maps distintos, y que cada map tiene 22 valores.

Bien, pues esto, nose como lo haríais, pero si encontrais algo que supere esto, me lo comentais ;)


:g:^[^1]:d
:%s:.*VS::
:%s:.* ::
qq22Jjq
1500@@


Efectivamente, solo eso

martes, 28 de octubre de 2008

Squeak y smalltalk

Ok, solo para hacer algo más de revoloteo del que se esta formando (solo en comunidades medio-alto frikis).

Despues de ver la entrevista que le hacen a Randal L. Schwartz en infoQ y con el blog que lleva él mismo acerca de squeak y smalltalk, he decidido publicar un pseudo tutorial sobre los primeros pasos en squeak/smalltalk. Que este crack perl se haya metido en smalltalk da ganas de meterle mano tb (al lenguaje)

Bueno, pues el link esta en http://raimonster.googlepages.com/smalltalk , bueno, ya sabes, aprovechando logs de charlas y tal, para decir que 'he hecho' un tuto.

Sincerely yours,

Coloschemes en screen y ubuntu

Pues resulta que screen nunca me ha funcionado bien en ubuntu (vectorlinux es mejor ;). Empezando por que si tienes EDITOR="vim" en tu zshrc, dentro de screen, la consola no aceptará ni c-a, ni c-e, ni c-w ..... Se quita y punto.

Los coloschemes de vim o emacs en screen tb se ven jodidos en ubuntu.

Parte relevante de .screenrc para funcionar en rxvt-unicode
-----------------------------8<---------------------------
#a escojer una de estas 3 lineas
term rxvt-unicode
term screen-256color-bce
term screen-256color

attrcolor b ".I"
# tell screen how to set colors. AB = background, AF=foreground
termcapinfo xterm 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm'
# erase background with current bg color
defbce "on"


termcapinfo rxvt-unicode 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'
terminfo rxvt-unicode 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm'
-----------------------------8<---------------------------

Aun asi, no funciona, pq ubuntu viene con los paquetes necesarios para un funcionamiento correcto de screen.... apt-get install ncurses-term y solucionao

domingo, 5 de octubre de 2008

comprobando versiones de paquetes en python y perl

Siguiendo con la 'nueva tematica'....

Cuando buscas info sobre programación, normalmente buscas aquellas 10 lineas de código que te permiten hacer XYZ. No un conocimiento solido sobre un lenguaje de programación (para eso estan los libros). Pues bien. ahi va una perla en python y perl sobre como partir los nombres de los paquetes linux del tipo nombre-version-arch-build.

empezamos con la version perl:

my %b = map {
my @x = split /-/;
my $clave = join '-', @x[0 .. @x-4];
{ $clave => $x[-3] }
} `ls /var/log/packages/`;

(gracias explorer por esta joya)

Ahora en python:

import os
import string

ls = os.listdir('/var/log/packages')

for i in ls:
parts = i.rsplit('-', 3)
build = parts[-1]
arch = parts[-2]
version = parts[-3]
name = parts[0]
print name, version, arch, build

Los códigos no hacen exactamente lo mismo, pero se ven 2 aproximaciones distintas, cada una con las ideas de cada lenguaje. Cabe decir que soy novato en los 2, pero intentamos hacerlo mejor cada dia

viernes, 3 de octubre de 2008

Edición remota, en vim y en emacs

Empezamos el frikismo:

Tanto desde vim como emacs puedes hacer 'remote edit' de manera transparenta. Sigue un pasteo de como hacerlo con los 2 editores

VIM
===

kidd@xxx [ ~ ] %vi scp://klander//var/www/proves/index.php

Atención, la notación es algo distinta de los paths en scp normal. Vaya, que no hay ':' entre el server y el path, sinó dos '/'.

Dentro de vim se usa el comando :e con la misma sintaxis

EMACS
=====

Desde dentro de emacs:
C-x C-f /klander:/var/www/proves/index.php


Mucho mejor tener claves ssh para no tener que meter el pass cada vez.




martes, 30 de septiembre de 2008

Asúmelo, se ha acabao


Bien, este blog ha estado parado dada mi gran actividad en Tenerife ;) Ahora que ya vuelvo a pisar la tierra, y se ha acabao la buena vida, reciclaré este blog. Verdad que es una mierda encontrar un blog con solo 4 posts? Parece chatarra internauta, una ruina cybernética. Pues convertiré este blog en un blog algo más técnico, casi como una libreta personal, relacionado con todos mis frikismos, pajas mentales y tal....

Si alguien no-virtual se merece salir, tb le haré un huequecillo, claro.

Termino con el 'paste' del último mail que mandé a la peñita canaria, con las colaboraciones añandidas:

2+
6 de diciembre
Abades
Agricolas
Aguacate
Agüita
Andamios
Bajamar
Bar de negros
Barrock
Benijo
Benjamin
Box
Cabra (dj)
Cal de pared
Cama
Campanadas
Carnaval
Charco del pobre
Cholas
Chuletada
Comic
Competición de marcha
Constancia
Contundencia
Coquita (perra infernal)
Cubana
Cuervo (dj)
Cáncer de mama
Efrain
Enfermeras
Esperanza
Facultad?ソ
Futgato
Galicia
Galletas de Maria
Gaviotas
Gracias por todo
Hachazo
Hay que forzar
Ho haveu vist!
Ikatz
Jeremys
Kinki house
La Punta...
Lanzarote rima con ...
Le compramos un amigo a P***o
MTRAX
Mais Caña
Maxmala
Mañaneo
Medano
Mental poweeeeeeer
Mesa del mar
Muchachada
Mus
Nuclearrr
O'clock
Palanca
Parque
Patos (playa y plaza)
Peluca de pensar
Piticli bonico
Plaisir
Plaisir
Puerta o ventana
Rajoy
San Juan
San Telmo
Sketch
Sofá-cama
Tecnocopla
Tejita
Tekken
Teresitas
Tiran palomas de la ventana
Tocuyo
Vascos
Viana
Vigorexia
Womad
Zapatilla
¿Exámenes?


Como no tengo una foto de todos, pongo una donde sale un trozo de mi (si has pillado el doble sentido tpc creas que mereces estar en el mensa, de momento). Los que estabais, ya lo sabeis que aquel día estabamos en el mensa, y en todas partes: Túnicas, Efraín, cuerno, gafas, gorros de pensar, :) , en fin... ....Como lo pasemos

domingo, 20 de abril de 2008

Perdiendo la fe en la humanidad

Si, todo guay. no news == good news. Hasta que a uno se le hinchan los cojones...

Tal, cual, pascual..... porque la gente no se respeta su propia palabra, porque uno tiene que apartarse de la basura, porque para mantenerme sano tengo que ponerme hastatras, porque mataria al 80% de lo que me rodea, portque la teoria de juegos no me ayuda, porque mediocres te roban la chati, porque las chaties son pro-mediocres, porque la estupidez y la tonteria rigen el dia a dia.

Pour quoui no puedo ni emborracharme lo suficiente como para olvidarme de ello. Todo va bien, sí, ok. tranki, no te preocupes, no pasa nada.

'Tal dia farà un any', hoy por hoy, una bomba lapa al 95%. No me jodas, o estas con nosotros o estas contra ellos.

Una oda al no-topico, podemos ser amigos y meter en caliente también, no me jodas que ya no estamos en 4º, y te respeto, aunque no me entiendas.

No quieres repeto, no queres verdades anda por todas partes, anda por todas partes, victima de la circunstancias....ya te va bien, ya lo se, yo por 40$ tambien me va bien.

Y tu quien eres, ni me importa, seguramente, si quieres seras mi angel.
Eres ciega, no tanto como otras, eres tonta, a veces lo somos todos, me cagoen la puta que te parió, lo hago con todas.

Peléate por un ñordo, que un burdo y un burdo desliz te dejará con las sobras