(es|en)
Como hacer un metrónomo sencillo
[ add comment ] | [ 0 trackbacks ] | permalink | related link
Modem Router
Me prestaron un modem/router!!!Asi que cambié el script que usaba para consultar la ip actual. Ahora directamente me comunico vía telnet con el modem y le pregunto que ip pública tiene asignada. Es algo como:
#!/usr/bin/expect -f
set force_conservative 1 ;# set to 1 to force conservative mode even if
;# script wasn't run conservatively originally
if {$force_conservative} {
set send_slow {1 .001}
proc send {ignore arg} {
sleep .1
exp_send -s -- $arg
}
}
spawn telnet IPDELROUTER
expect -exact "login: "
send -- "USARIOADMINISTRADOR\n"
expect "password: "
send -- "PASSWORD\n"
expect -exact "Login Successful"
expect -exact "$"
send -- "get ppp ipinfo ifname ppp-0\n"
expect -exact "$"
send -- "exit"
El script usa expect como intérprete, cuya principal característica es que sirve "para dialogar" con programas interactivos y es muy útil para este tipo de cosas :-).
Después parseo el resultado con algo como:
nuevaip=`$SCRIPTS_PATH/get_ip.sh | fgrep "Self Ip Address" | cut -d':' \Donde "get_ip.sh" es el script anterior.
-f2 | cut -d' ' -f2`
[ add comment ] | [ 0 trackbacks ] | permalink | related link
Plugin para Kate: Snipplr
Al final me la jugué ¿? e hice un plugin como la gente[1] para usar comodamente los snippets que tengo en Snipplr[2] desde Kate.Creo que quedó bastante lindo...
Un screenshot:

Me basé en el plugin para snippets locales que viene en Kate, que fue hecho por Stephan Möres, y en un tutorial que no explica demasiado.
Características:
* Es un plugin aparte, por lo tanto se puede habilitar y deshabilitar en las opciones del editor.
* Actualiza todos los snippets en un thread aparte, por lo tanto no se bloquea el editor durante la bajada (botón "Update from Snipplr") y se va viendo como se agregan de a uno.
* Se puede postear un nuevo snippet en Snipplr al crear uno nuevo y guardarlo (botón de guardar).
* Guarda los snippets en un archivo diferente al del otro plugin. Por lo tanto, se pueden usar ambos simultáneamente.
* Se maneja con un archivo de configuración (~/.Snipplr) donde se coloca la api key de la cuenta. Si no se pone el nombre de usuario, además de bajar los snippets de código del usuario en cuestión, también baja los recortes de otros usuarios que se tienen marcados como "favoritos".
La publicación de este plugin esta aquí (paquete Debian, código fuente, instrucciones, etc)
[1] ¿Cómo será "la gente"?
[2] Tener snippets en Snipplr es casi un trabalenguas.
[ add comment ] | [ 0 trackbacks ] | permalink | related link
Hacer un widget para Wordpress
Estoy hablando de un widget para el plugin de Automattic para Wordpress.Por ejemplo, una vez instalado el plugin, se puede agregar en "widgets.php" algo como esto:
function widget_cc_license($args) {(el ejemplo es lo que hice para mostrar una imágen y link a la licencia del blog)
extract($args); ?>
<?php echo $before_widget; ?>
<?php echo $before_title
//. 'CC License'
. $after_title; ?>
<a rel="license" href =\
"http://creativecommons.org/licenses/by/2.5/ar/">
<img alt="Creative Commons License"
src="http://creativecommons.org/images/public/somerights20.png"
border="0"></a>
<?php echo $after_widget; ?>
<?php
}
y luego en la función "widgets_init()", poner algo como:
register_sidebar_widget('CC License','widget_cc_license');
De esta forma es un widget más para el plugin y se puede acomodar a gusto junto con el resto de los widgets en la parte de administración.
[ add comment ] | [ 0 trackbacks ] | permalink | related link
Cliente XML-RPC en C++ para generar un archivo de snippets de Kate a partir de un usuario de Snipplr
Al final no pude resistirme ni esperar e implementé el cliente en C++, porque tenia más sentido para una aplicación de escritorio que en PHP. Básicamente lo que hace es generar un archivo de snippets compatible con el de Kate (se guarda en ~/.kde/share/config/katesnippetspluginrc) a partir de los snippets de un usuario de Snipplr. Lo que usé fue: XML-RPC for C/C++
Esta disponible para descargar desde aquí.
Lo más importante es:
static void get_list_and_make_file( std::string &key,
std::string &output_file_name ) {
unsigned int i;
string title;
string source;
XmlRpcValue snippet;
XmlRpcValue::int32 id;
// Build our parameter array.
XmlRpcValue param_array = XmlRpcValue::makeArray();
param_array.arrayAppendItem(XmlRpcValue::makeString(key));
// Create an object to resprent the server, and make our call.
XmlRpcClient server (SERVER_URL);
XmlRpcValue result = server.call( "snippet.list", param_array );
// Open the file
ofstream output_file;
output_file.open( output_file_name.c_str(), ios::out );
output_file << "[Snippets]\n";
for( i=0 ; i<result.arraySize() ; i++ ) {
snippet = result.arrayGetItem(i);
id = snippet.structGetValue("id").getInt();
cout << id << ": ";
get_snippet(id,title,source);
cout << title << endl;
output_file << i << "=" << title << ","
<< source << "\n";
}
output_file << "NumberOfSnippets=" << i << "\n";
output_file.close();
}
y
static void get_snippet( int &s_number, string &title, string &source ) {
// Build our parameter array.
XmlRpcValue param_array = XmlRpcValue::makeArray();
param_array.arrayAppendItem( XmlRpcValue::makeInt(s_number) );
// Create an object to resprent the server, and make our call.
XmlRpcClient server (SERVER_URL);
XmlRpcValue result = server.call("snippet.get", param_array);
// Extract de snippet properties
title = fix_string( result.structGetValue("title").getString() );
// For further development features
// username = result.structGetValue("username").getString();
// language = result.structGetValue("language").getString();
// comment = result.structGetValue("comment").getString();
source = fix_string( result.structGetValue("source").getString() );
// Necesary to Kate snippets file format
find_and_replace_especial( title, ",", "\\," );
find_and_replace( source, "\n", "\\n" );
find_and_replace_especial( source, ",", "\\," );
}
Recibe 2 parámentros por entrada estandar, la "key" del usuario y el archivo de salida.
snipplr2kate 1111111111111111111 ~/.kde/share/config/katesnippetspluginrcDe más esta decir que se puede modificar facilmente para hacer un backup de la cuenta como en este otro post.
[ add comment ] ( 547 views ) | [ 0 trackbacks ] | permalink | related link

Search









