venerdì 28 agosto 2009

Comportamento anomalo nella Bash di Debian Testing

Oggi sono rimasto molto perplesso da un problema nella bash. Per fortuna mi ha fatto perdere poco tempo..
Ho la tendenza ad usare diversi shell script per le operazioni ripetitive, quindi stamattina lancio uno script per rigenerare le classi java di Apache Torque attraverso ant, farne un .jar e spostarlo dove mi serve.

E va in errore.

Pensando in un errore di configurazione inizio a dare un'occhiata ai log.. poi mi viene un dubbio e decido di fare girare l'applicazione java, per vedere quali modifiche sono state apportate ultimamente.
Lancio lo script che prepara l'ambiente per l'applicazione java:

shatsar@erakis:~/develop$ sh prepare-deploy.sh
prepare-deploy.sh: 2: pushd: not found
[.. altri errori]
shatsar@erakis:~/develop$ cat prepare-deploy.sh
#!/bin/bash
pushd /tmp
[.. altre operazioni]
shatsar@erakis:~/develop$ pushd /tmp
/tmp ~/develop
shatsar@erakis:/tmp$ cd
shatsar@erakis:~$ cd develop/
shatsar@erakis:~/develop$ chmod +x prepare-deploy.sh
shatsar@erakis:~/develop$ ./prepare-deploy.sh
/tmp ~/develop
[.. funziona tutto]


In definitiva credo sia un problema di inizializzazione della console figlia (creata lanciando sh ), tanto più che anche senza settare il flag x, basta fare


shatsar@erakis:~/develop$ source prepare-deploy.sh


Che esegue il file sh in questione nella shell corrente..
mah


UPDATE:
Il problema (verificatosi su debian testing) era dovuto ad un aggiornamento di settimana scorsa che aveva fatto puntare /bin/sh a /bin/dash invece che a /bin/bash. L'aggiornamento di oggi ripristina il tutto. Problema analizzato grazie all'intervento di Federico (nei commenti)

martedì 21 luglio 2009

Disabilitare il lookup degli host in resolv.conf

Mi è capitato spesso di vedere dei server che rispondono alla richiesta di una connessione dopo alcuni secondi. Questo delay è dovuto alla risoluzione da parte del server del nome dell'host che ha richiesto la connessione. Raramente il pc client ha un nome associato (per esempio in reti interne in dhcp) per cui ci sono volte in cui questo delay fa davvero incazzare..

Normalmente basta associare all'ip corrente del client un nome in /etc/hosts, ma spesso non vale la pena riempire questo file con varie entry in caso di dhcp selvaggio.

Ultimamente avevo affrontato il problema per ssh, impostando a No il flag "UseDns" in /etc/ssh/sshd_config. Questo snelliva le connessioni ssh, lasciando però il delay, per esempio, nelle connessioni postgreSQL.

Quindi ho scoperto che questo si può migliorare agendo sul file resolv.conf.

In /etc/resolv.conf si possono mettere un sacco di impostazioni avanzate (vedere la sezione options del man), in particolare il flag che mi sta facendo risparmiare un sacco di tempo è no-check-names

martedì 14 luglio 2009

Explorer e gli input type="image"

Oggi ho risolto una piccola cazzata che voglio condividere con la moltitudine dei miei lettori:
in caso di

<:input type="image" onclick="form.submit()" />

Firefox e safari faranno un solo submit, explorer 2, uno via javascript e l'altro dovuto all'input.
Avendo lavorato parecchio in Ajax, mi è nota la pericolosità dell'onclick sui bottoni che normalmente fanno il submit.

Infatti in questo caso l'effetto dell'operazione è il medesimo, ma spesso capita di fare questo "trucco": sull'onclick cerco di fare tutto via javascript e ajax. Se per qualche motivo il browser non supporta js, seguirà il corso normale effettuando il submit del form in stile classico "web 1.0", permettendo comunque la fruizione del sito web. Finezza che troppo poche volte vedo implementata.
Ma tornando al discorso, il trucco funziona solo se l'onclick termina con un "return false".. come per l'onsubmit dell'elemento form.. se la validazione js fallisce bisogna forzare un return false, altrimenti il browser pensa di poter andare avanti tranquillamente.. quindi la riga che ho messo sopra è diventata:

<:input type="image" onclick="form.submit();return false;" />

Il fatto è che si trattava di un sito di e-commerce e rappresentava il form in cui si mette il numero che si vuole acquistare di un determinato prodotto.. il risultato è che inserire 1 e cliccare sul tasto su firefox e safari faceva mettere 1 elemento nel carrello, mentre con IE ci finivano 2 prodotti, derivanti dal doppio submit.. io l'avrei lasciato così, d'altra parte se usi Explorer.. :)

martedì 7 luglio 2009

[HOWTO] mvn eclipse:eclipse su progetti j2ee

Torno attivo sul blog dopo un periodo offline (dovuto ad una grandissima mole di lavoro, soprattutto per la startup di cui ormai sono parte integrante) con un brevissimo post con un tip utile per chi vuole usare maven ed eclipse:

normalmente (per progetti Java) la plugin di maven per eclipse funziona splendidamente, anche in presenza di diversi moduli, per i quali crea le dipendenze tra progetti eclipse. Per risolvere il problema della configurazione dei progetti WTP, dopo aver impostato il packaging a war, il modo per far generare correttamente i file di progetto di eclipse è di aggiungere le seguenti righe al pom, nella sezione plugins


<plugin>
  <artifactId>maven-eclipse-plugin</artifactId>
  <version>2.7</version>
  <configuration>
    <wtpversion>2.0</wtpversion>
  </configuration>
</plugin>

giovedì 21 maggio 2009

Sourceforge e Trac

Sourceforge ha deciso di aggiungere Trac ai suoi servizi.
Grandioso.. a me piace un sacco Trac, perchè è uno strumento utile, semplice ed essenziale. Fa quello per cui è stato pensato senza perdersi in puttanate.

Ho subito richiesto di attivarlo su uno dei miei progetti opensource hostati là. Ho eliminato altri componenti inutili (tipo il sistema di ticket e il wiki) per passare tutto sotto trac.

Tra l'altro da un mesetto ho riniziato ad usarlo anche per lavoro.. quindi il fatto di aver allineato gli strumenti che uso nella mia attività lavorativa e nello sviluppo occasionale va sicuramente a mio vantaggio..

Tra l'altro al lavoro l'ho usato prima con il tracd (il sever http integrato) lanciato sull'interfaccia di rete locale, poi l'ho montato su un apache con mod_python, con login dipendente da un htpasswd a cui punta anche subversion, messo anche lui su http. Così una sola porta (la 80), una sola autenticazione (nome e pw del file .htpasswd in questione) ed un solo protocollo (http).. comodo, nè?

martedì 19 maggio 2009

[HOWTO] Immagini con testo dinamico in PHP con GD

Ormai i miei pochi lettori avranno capito che passo da un argomento all'altro senza alcuna logica, ma salto da una tematica all'altra in base ai vari progetti che seguo contemporaneamente (che senso avrebbe lavorare in partita iva per una sola azienda?) oppure in base a miei interessi o mie ricerche personali.

In questo caso si tratta di lavoro: fare un'immagine di sfondo con un testo configurabile che viene scritto in una certa area. In PHP

Pensavo fosse una cosa complessa.. invece l'ho preparato in 5 minuti:

<?php
// Imposto l'header http
header("Content-type: image/png");

// carico lo sfondo
$im = ImageCreateFromPng('sfondo1.png');

// trovo l'indice del bianco nella palette
// (il colore della scritta)
$white = imagecolorexact($im, 255, 255, 255);

// imposto il font (questo è il path dei font di magento,
// ma è possibile mettere un ttf a scelta)
$font_file='./lib/LinLibertineFont/LinLibertine_It-2.8.2.ttf';

// testo esemplificativo (poi sarà valorizzato in base a query
// o a input dell'utente)
$msg_text = "Hello World\nCome va?";

// posizione da cui parto a scrivere
$x=50;
$y=50;

// passo tutto alla funzione imagefttext con 12pt di grandezza font e
// angolo 0 (normale da sx a dx)
imagefttext($im,12,0, $x, $y, $white, $font_file, $msg_text);

// invio la png risultante
ImagePNG($im);

// libero la risorsa
ImageDestroy($im);
?>


That's all folks

giovedì 14 maggio 2009

Come non fare un sondaggio su internet

Se avete letto del sondaggio, indetto dal Times, sulle persone più influenti del 2009, sicuramente sapete già che il risultato è a dir poco curioso..

Ma ecco anche il retroscena: "Inside the precision hack".. da leggere!

martedì 12 maggio 2009

Mozilla Prism: prime impressioni (su fluxbox con fbdesk)

E' stata rilasciata la versione 1.0 beta1 di Mozilla prism. Questo è uno di quei progetti che mi entusiasmano pur essendo, in realtà, nulla di particolarmente innovativo o rivoluzionario.
Ma è un passo in avanti.
In pratica è un'interfaccia al browser (basata su xulrunner) che rende ancora più labile il confine tra applicazioni Desktop e applicazioni web.

Per ora ha diversi limiti: prima di tutto non c'è la versione a 64 bit.. e visto che non voglio installare 80MB di librerie di compatibilità con ia32, sui miei pc principali non posso ancora usarlo.

Allora la cavia è automaticamente diventata il solito portatile scassato di cui ho parlato altre volte.

Dunque, la plugin di firefox sembra funzionare bene, ma ho preferito scaricare e scompattare la versione standalone anche se, appena installata, non sapevo bene cosa farmene del file .desktop che genera.. in quanto sto usando fluxbox.

Allora ho risolto così: ho installato fbdesk, l'ho configurato (in realtà credo che la configurazione di default di debian vada benissimo) poi ho generato con prism un .desktop.

Ora, il formato che utilizza fbdesk è lievemente diverso da quello generato da prism, probabilmente per il fatto che fbdesk si aspetta tutte le informazioni per le icone da mettere sul desktop dentro un unico file (~/.fluxbox/fbdesk.icons) quindi, per fare funzionare il tutto ho fatto delle modifica, partendo da quello generato da prism:


[Desktop Entry]
Name=YT
Type=Application
Comment=Web Application
Exec="/home/shatsar/Downloads/prism/prism" -override "/home/shatsar/.webapps/yt@prism.app/override.ini" -webapp yt@prism.app
Icon=/home/shatsar/.webapps/yt@prism.app/icons/default/webapp.png


Ho tagliato un po' di cose inutili ed aggiunto le coordinate (20 110 perchè è la prima icona della seconda riga) e l'end finale:


[Desktop Entry]
Name=YT
Exec="/home/shatsar/Downloads/prism/prism" -override "/home/shatsar/.webapps/yt@prism.app/override.ini" -webapp yt@prism.app
Icon=/home/shatsar/.webapps/yt@prism.app/icons/default/webapp.png
Pos= 20 110
[end]


Ora con doppio click sull'icona mi apre l'applicazione web in modo molto più rapido che non con firefox, data l'assenza di una serie di plugin, dei vari buttoni, della barra degli indirizzi, dei segnalibri etc etc.. davvero niente male.. ora quello che mi interessa approfondire è capire se e come si può includere prism dentro la distribuzione di una web application e quali vantaggi ciò porterebbe..

intanto complimenti a mozilla!

giovedì 7 maggio 2009

Magento e la personalizzazione della pagina dei prodotti

Continuano le mie avventure su magento.. Per modificare la pagina dei prodotti, quello che è necessario fare è, più o meno, questo:
* cambiare layout (dal default di 2 colonne con barra laterale a destra) modificando il file catalog.xml dentro la cartella template (che si trova nella cartella del tema): quello che va ritoccato è il nodo catalog_product_view
* modificare il file view.phtml (dentro template/catalog/product/ ) che è il componente principale della pagina dei prodotti, che include diversi componenti presenti nella cartella template/catalog/product/view
* cambiare l'html dei vari componenti modificando i file in template/catalog/product/view .. per esempio addtocart.phtml per cambiare l'html del tasto di "add to cart" oppure "addto.phtml" per la parte di wishlist/compare

Alcune cose mi sfuggono ancora dell'architettura di magento, ma mi ci sto avvicinando e, tra un po', dovrò anche scrivere dei componenti specifici per l'e-shop su cui sto lavorando, quindi vedrò anche la struttura proprio delle API php.. e lì si che ci sarà da divertirsi..

martedì 5 maggio 2009

Primo contatto con Magento

Da circa una settimana sto lavorando su un progetto basato su magento. E' una applicazione PHP per e-shop di rara potenza.

Per ora sto lavorando sulla grafica. Sto modificando il template di default: quindi lavoro prevalentemente dentro la cartella app/design/frontend/default/default (poi rinominerò tutto per avere un layout separato). Per cambiare l'impostazione della pagina vado a modificare page.xml, da cui posso, per esempio, aggiungere e togliere blocchi dalla pagina. Per modificare le impostazioni dei vari componenti (per esempio footer) bisogna andare a modificare i relativi file .phtml dentro template/ (sempre dentro app/design...). Ora, per esempio, sto modificando template/catalog/product/list.phtml per cambiare la visualizzazione dei prodotti.

Come prima impressione direi che è un sistema potentissimo perchè mette a disposizione un sacco di funzionalità (dalla gestione dei prodotti alle impostazioni dell'e-shop stesso), ma è molto complesso da modificare e, visto che la documentazione ufficiale mi pare assolutamente inadeguata, l'unica risorsa è cercare sul forum..

Finito il discorso della grafica dovrò anche sviluppare dei moduli aggiuntivi.. e lì si che ci sarà da bestemmiare..