Codice

You are currently browsing the archive for the Codice category.

n95_8gb
Per Natale mi è arrivato un giocattolo nuovo, un N95 8Gb, quale occasione migliore per divertirsi un po’ con python?

Installare pys60 sull’N95.

Al momento in cui scrivo su sourceforge della versione 1.9 di trova solo l’announcement.txt ma non i pacchetti che invece si trovano qua.
Ci servono:

  • Python_1.9.0_3rdEd.sis
  • PythonScriptShell_1.9.0_3rdEd.sis

Una volta saricati i pacchetti li inviamo al cellulare via bluetooth e li installiamo.
Prima i runtime (Python_1.9.0_3rdEd.sis) e poi PythonScriptShell.

Nel mio caso è stato necessario installarli sulla memoria del telefono, dato che PythonScriptShell sulla memoria di massa non voleva saperne di partire.

Sul cellulare, all’interno del menu applicazioni troveremo l’icona dell’interprete Python.
Lanciamolo e proviamo gli script di esempio installati col pacchetto.

Configurare la seriale blutooth su OSX Leopard

Apriamo Preferenze di sistema -> Bluetooth e clicchiamo su Avanzate .

Si aprirà  la finestra di dialogo seguente:

aggiungi-seriale-bluetooth

Clicchiamo sul + (Aggiungi seriale) e impostiamo i parametri come segue:

parametri-seriale.

Stabiliamo la connessione

Sull’N95 lanciamo l’interprete Python.

Sul Mac, apriamo il Terminale e lanciamo:
screen /dev/tty.BT-SerialPort

Sull’N95, dall’interprete Python selezioniamo:
Options -> Bluetooth console
e indichiamo il nostro Mac come dispositivo da utilizzare.

E’ possibile che sul Mac venga richiesta una password per l’accoppiamento, digitiamo 1234 (o ciò che vi pare) e reinseriamola sul telefono quando richiesto

A questo punto dovremmo trovarci di fronte all’interprete Python in esecuzione sull’N95.

python251-on-symbian_s60

Come primo test, vi propongo una ricerca sui contatti.


>>> import contacts
>>> db = contacts.open()
>>> db.find('rist')
[<Contact #42: "Piccolissimo Ristorante">, <Contact #53: "Cinese Fortuna Ristorante">, <Contact #65: "Ristorante LaBuca">, <Contact #75: "Ristorante Il Castello">])

Un buon punto di partenza per PyS60 è mobilenin.com.

Tags: , , , ,

Il nano sconcio Nonostante gli unici commenti in questo blog siano stati di spam, ho deciso di eliminarli ugualmente.

Gli ip di provenienza degli spammer non erano, nel mio caso, più di quattro o cinque, così ho deciso di utilizzare la tecnica delle blacklist.

Malgrado assolva al proprio compito, non è sicuramente la tecnica migliore da utilizzare, visto che rischia di bloccare persone che con lo spam nulla hanno a che fare.
Ad esempio si rischia di bloccare ip dinamici, ip di proxy ecc. ecc.

Ad ogni modo se si vuole bloccare un insieme limitato di ip credo sia una tecnica che possa tornare utile.

Si può procedere in diversi modi, ad esempio utilizzando l’.htaccess, negando, o ridirezionando le connessioni al webserver da certi ip, come descritto qui, oppure più radicalmente, utilizzando iptables.

Nel mio caso ho preferito utilizzare iptables.

Il funzionamento è molto semplice, leggo dalla mia blacklist,
/etc/blacklister/blacklist.dat
e imposto per ogni ip due regole di iptables, la prima per loggare il tentativo di accesso, la seconda per bloccare.

Semplice ed efficace.

[c]
#!/bin/bash

# Blacklister
# ===============
#
# ATTENZIONE!
# Questo script non e’ pensato per essere
# usato su un firewall, ma solo su un webserver.
#
# A cosa serve
# ————
# Si prefigge di limitare lo spam in ingresso
# bloccando le connessioni degli
# IP acquisiti come spammer.
#
# Cosa fa
# ——-
# Legge il file blacklist.dat contenente un elenco di ip da
# bloccare uno per riga, e, tramite **iptables** logga
# come SPAM i tentativi di accesso e li blocca.

LOCALFILE=/etc/blacklister/blacklist.dat

IFACE=eth0

# IpTables
IPT=”/sbin/iptables”

# Chain
CHAIN=INPUT

start_firewall()
{
# Blacklist
blacklist=$(cat $LOCALFILE)

# Solo per debug
# set -x

# Carico i moduli necessari
/sbin/modprobe ip_conntrack
/sbin/modprobe ip_conntrack_ftp

# Azzero le iptable prima di cominciare
stop_firewall

echo -n “Starting firewall:”
block_spam
echo ” done.”
}

block_spam()
{
# Per ogni IP LOG e DROP
for ip in $blacklist
do
$IPT -A $CHAIN -i $IFACE -s $ip -j LOG –log-prefix “SPAM ”
$IPT -A $CHAIN -i $IFACE -s $ip -j DROP
done

}

stop_firewall()
{
echo -n “Stopping firewall:”

$IPT –flush
$IPT -t nat –flush
$IPT -t mangle –flush

$IPT –policy INPUT ACCEPT
$IPT –policy OUTPUT ACCEPT

echo ” done.”
}

case $1 in
start)
start_firewall
;;
stop)
stop_firewall
;;
restart)
start_firewall
;;
*)
echo “Usage: $0 {start|stop|restart}”
exit 1
;;
esac
[/c]

Tags: , ,

logo-apple
Possiamo creare uno script per modificare l’aspetto del Dock, da 3D a 2D e viceversa sempre utilizzando defaults come avevamo spiegato qui.

Questa volta però sfruttiamo le preferenze del dock, memorizzate in com.apple.dock.
In particolare l’opzione no-glass.

Per verificare le impostazioni correnti lanciamo il seguente comando da terminale:
defaults read com.apple.dock no-glass

restituirà 0 se attualmente il dock è in 3D o 1 se è in 2D.

Di seguito il semplice script.

[c]
#!/bin/sh
CURRENT=`defaults read com.apple.dock no-glass`
case $CURRENT in
0)
OPTION=’YES’
;;
1)
OPTION=’NO’
;;
*)
OPTION=’YES’
;;
esac

defaults write com.apple.dock no-glass -boolean $OPTION
killall Dock
echo “Riavvio il dock…”
[/c]

Tags: , ,

logo-appleHo scritto un semplice script per mostrare e nascondere i file normalmente invisibili al Finder.

Si avvale del comando defaults che permette di leggere, scrivere ed eliminare le impostazioni utente di OSX.

Come riporta il manuale:

Le applicazioni di Mac OS X ed altri programmi usano il sistema dei defaults per memorizzare le preferenze utente ed altre informazioni che devo essere mantenute quando l’applicazione non è in esecuzione (ad esempio i caratteri di default per un nuovo documento o la posizione delle finestre ecc.).
Alcune impostazioni sono accessibili dalle Preferenze di sistema, ma altre no.

Il Finder non fa eccezione, ed una delle impostazioni accessibili solo attraverso defaults, è AppleShowAllFiles, che definisce appunto se mostrare o nascondere i file invisibili.

Per visualizzare l’impostazione corrente possiamo digitare da terminale:

defaults read com.apple.finder AppleShowAllFiles

Che ci restituirà rispettivamente 0 o 1 se è impostato per nascondere o per mostrare i file invisibili.

Detto questo lo script è banale.

[c]
#!/bin/sh

CURRENT=`defaults read com.apple.finder AppleShowAllFiles`
case $CURRENT in
0)
OPTION=’YES’
;;
1)
OPTION=’NO’
;;
*)
OPTION=’NO’
;;
esac

defaults write com.apple.finder AppleShowAllFiles -boolean $OPTION
killall Finder
echo “Riavvio il Finder…”
[/c]

Tags: , ,

Qualche tempo fa, ho avuto necessità di eseguire uno script esterno legato ad un trigger di PostgreSql.
All’epoca, l’unica soluzione che ho trovato è stata di creare una funzione in C che richiamasse lo script con i dovuti parametri.

Questo il codice:
[c]
#include
#include
#include “postgres.h”
#include
#include “fmgr.h”
#include “utils/builtins.h”

#define _textout(str) DatumGetPointer(DirectFunctionCall1(textout, PointerGetDatum(str)))

PG_FUNCTION_INFO_V1(esegui);
Datum esegui(PG_FUNCTION_ARGS);

Datum esegui(PG_FUNCTION_ARGS){
int pid;

char *path, *cmd, *host, *user, *pwd, *param; //Parametri della funzione

path = _textout(PG_GETARG_TEXT_P(0));
cmd = _textout(PG_GETARG_TEXT_P(1));
host = _textout(PG_GETARG_TEXT_P(2));
user = _textout(PG_GETARG_TEXT_P(3));
pwd = _textout(PG_GETARG_TEXT_P(4));
param = _textout(PG_GETARG_TEXT_P(5));

// Eseguo un fork per evitare di rallentare le operazioni sul database
switch(pid=fork()){
case -1: //Errore. Non posso eseguire il fork.
exit(-1);
case 0 : //Fork riuscita. Eseguo il codice “figlio”
execl(path, cmd, host, user, pwd, param,0); // Questo e’ il codice “figlio”
exit(1);
default:
return pid;
exit(1);
}
}
[/c]

Per utilizzare questa funzione con postgres, sono necessari pochi semplici passi:

Per prima cosa compiliamo la nostra funzione c (nel mio caso il file era: execcmdrouter.c).

gcc -I/usr/include/postgresql/server/ -shared execcmdrouter.c -o execcmdrouter.so

Copiamo l’oggetto ottenuto in “casa” di postgres e attribuiamogliene la proprietà 😉

cp execcmdrouter.so /var/lib/postgres/
chown postgres.postgres /var/lib/postgres/execcmdrouter.so

Quindi creiamo la funzione in postgres:


CREATE FUNCTION esegui(text,text,text,text,text,text) RETURNS INTEGER
AS '/var/lib/postgres/execcmdrouter.so' LANGUAGE C;

Fatto.

Spero possa a essere utile a qualcuno.

Tags: , , ,

« Older entries