Skip to content

[PL/SQL] Get UNIXTIME from TIMESTAMP – Oracle function

CREATE OR REPLACE
FUNCTION F_GET_UNIXTIME (ts IN TIMESTAMP)
RETURN NUMBER IS unixTime NUMBER;

diffFromEpoch interval day(9) to second(6);
sessionTZ VARCHAR(6);

BEGIN

--get the current timezone
SELECT SESSIONTIMEZONE INTO sessionTZ FROM dual;

diffFromEpoch := ts - TO_TIMESTAMP_TZ('1970-01-01 00:00:00 ' || sessionTZ, 'YYYY-MM-DD HH24:MI:SS TZH:TZM');

unixTime := FLOOR(
ABS(
EXTRACT( SECOND FROM diffFromEpoch )
+
EXTRACT( MINUTE FROM diffFromEpoch ) * 60
+
EXTRACT( HOUR FROM diffFromEpoch ) * 60 * 60
+
EXTRACT( DAY FROM diffFromEpoch ) * 24 * 60 * 60
)
);

RETURN unixTime;
END F_GET_UNIXTIME;

Poi sistemo l’articolo, enjoy

Share

Scaricare video da youtube con Safari, eccezziunale veramente!

Girando per la rete… Alle volte mi stupisco sempre più!

Con safari aprite il video su youtube, poi premete command+option+a (mela+alt+a).

Vi si apre una finestra “Attività”.

Tra le varie attività ne noterete una con dimensioni elevate (se il video è lungo!). Comunque la riconoscete perchè nell’url c’è “youtube.com/videoplayback?params…”.

Doppiocliccateci!

Niente altro da aggiungere apparte uno screen!

how-to-download-youtube-video-safari

Bye

Share

Gitarella a Bergamo, Val Brembana

Lo scorso fine settimana è saltata su una bella gitarella a Bergamo.

Ne ho approfittato per passare da Foppolo e San Simone.

Prima di tutto consiglio a chiunque cerchi un B&B a Bergamo: http://www.cecesimo.com/ ASSOLUTAMENTE PERFETTO, provate anche il ristorante tedesco adiacente, ottimo!

Ecco qua Foppolo e San Simone:

Amica fresca Foppolo 2 from Alessandro Aglietti on Vimeo.

Easy Jump Foppolo from Alessandro Aglietti on Vimeo.

Amica fresca Foppolo 1 from Alessandro Aglietti on Vimeo.

Share

JEE AJAX Dispatcher with reflection on Google App Engine

Sorgenti – https://github.com/alessandro-aglietti/Simple-JEE-Ajax-Dispatcher

Screencast on Vimeo!

jee ajax dispatcher from Alessandro Aglietti on Vimeo.

JEE AJAX Dispatcher with reflection on Google App Engine

Mi sono ritrovato davanti il seguente problema.

Avevo bisogno di gestire molte richieste AJAX, non volendo creare mille servlet e mille mappature sul web.xml mi sono spremuto.

Option one: unica servlet con if in cascata… X_X – non se ne parla

Option two: montare un framework MVC, tipo struts, grovvy, gayelk… etc.. Purtroppo per le mie app ancora sono troppo macchinosi, non convengono.

Option three: una servlet per ogni richiesta, ognuna da mappare nel file web.xml… Na!

Pensa che ti ripensa, cerca che ti ricerca… Sun ti aiuta! http://java.sun.com/developer/technicalArticles/ALT/Reflection/

Giusto, prechè non ci ho pensato prima, reflection! (Unico dubbio le prestazioni!)

Cosa mi serve…

Una servlet che in base ad un parametro, nel mio caso “action”, crea un oggetto adatto alla risposta e richiama un metodo per servire la risposta JSON.

Gli oggetti che elaborano la risposta devono avere un parente in comune altrimenti addio interfaccia comune.

Partiamo dal padre.

https://github.com/alessandro-aglietti/Simple-JEE-Ajax-Dispatcher/blob/master/src/it/aqquadro/AjaxRequest.java

Il costruttore ha un unico parametro, la request, in questo modo gli si può passare qualsiasi dato custom oltre a quelli della richiesta in atto utilizzando semplicemente:

req.setAttribute(“user”, “user@domain.ext”);

Per poi recuperarlo così:

Enumeration attributes = this.req.getAttributeNames();

while (attributes.hasMoreElements()) {

String object = (String) attributes.nextElement();

msg = object + ” – ” + this.req.getAttribute(object).toString();

printMessage(msg);

}

Ogni nostro oggetto che useremo per risolvere le chiamate dovrà estendere AjaxRequest.java.

Come ad esempio HelloWorld.java

https://github.com/alessandro-aglietti/Simple-JEE-Ajax-Dispatcher/blob/master/src/it/aqquadro/HelloWorld.java

Nella servlet che gestisce le richieste creiamo una mappa che lega un parametro a una classe:

https://github.com/alessandro-aglietti/Simple-JEE-Ajax-Dispatcher/blob/master/src/it/aqquadro/JEE_AJAX_DispatcherServlet.java

private static Map<String, Class> requestMapAction = setRequestMapAction();

private static Map<String, Class> setRequestMapAction() {

/*

* requestMapAction.put(“valoreParametroAction”, MyClass.class);

*/

if (requestMapAction == null) {

requestMapAction = new HashMap<String, Class>();

requestMapAction.put(“hw”, HelloWorld.class);

}

return requestMapAction;

}

Poi come dall’articolo su java.sun.com, possiamo recuperarci il costruttore, creare un istanza.

Poi possiamo fare un cast verso la classe padre e così richiamare il metodo di cui è stato fatto l’override, nel mio caso il metodo è “getJSON”, esso ritorna una stringa JSON che la mia servlet scrivere sulla risposta.

Fine!

Spero possa essere utile, anche se so di aver reinventato l’acqua calda. Ma putroppo mi serviva una cosa semplice ed elegante.

Share

Setting UP simple Debian gateway with NAT, thanks IPTABLES!

Configurazione schede di rete
Abilitare packet forwarding
Aggiungere regole di port forwarding
Getting IPTables to survive a reboot

Configurazione schede di rete
Editate il file /etc/network/interfaces configurando una scheda di rete connessa al router(eth0 nel mio caso) e una che fungerà da gateway per le altre macchine della LAN(eth1).

iface eth0 inet static
address 192.168.200.20
gateway 192.168.200.1
dns-nameservers 192.168.200.10
netmask 255.255.255.0

iface eth1 inet static
address 192.168.200.22
netmask 255.255.255.0
broadcast 192.168.200.255
network 192.168.200.0

Nel mio caso userò l’IP 192.168.200.22 come gateway per le altre macchine della LAN e 192.168.200.20 come indirizzo esterno rivolto verso internet.

Riavviate le schede di rete, ifdown/ifup eth0/eth1.

Abilitare packet forwarding
Backup del file di configurazione
cp /etc/sysctl.conf /etc/sysctl.conf.bak

Dopo serve scommentare la riga che abilita il packet forwarding, sul precedente file
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1

Aggiungere regole per il port forwarding
Esempio di regola che invia le richieste fatte sul l’ip della mia eth0, alla porta 7000, vengano inoltrate all’indirizzo 192.168.200.222, sulla porta 80.
Il comando può essere usato direttamente sulla shell, e immediatamente è possibile testarlo!
iptables -t nat -A PREROUTING -p tcp -d 192.168.200.20 --dport 22 -j DNAT --to 192.168.200.222:80

Getting IPTables to survive a reboot
Adesso serve rendere “persistenti” le modifiche fatte al firewall(netfilter) altrimenti al riavvio si perderebbero.
Per prima cosa con il comando iptables-save > /etc/firewall.conf salvate la vostra configurazione.
Poi aggiungete al file /etc/network/interfaces, nella zona dell’interfaccia di rete connessa a internet, la riga post-up iptables-restore < /etc/firewall.conf

iface eth0 inet static
address 192.168.200.20
gateway 192.168.200.1
dns-nameservers 192.168.200.10
netmask 255.255.255.0
post-up iptables-restore < /etc/firewall.conf

In questo modo tutte le volte che la scheda di rete sarà avviata verrano caricate le nostre regole di iptables.

Share

Setting up Oracle 10g on Debian

Scaricare l’immagine ISO di Debian GNU/Linux, personalmente consiglio di scaricare la versione netinst (circa 40MB!) – link

Create una macchina virtuale, con Virtual Box o VMware Player e installate Debian come “ambiente base”(standard system) senza niente, in questo modo vi verrà una leggerissima VM.


- Configurazione rete Debian
- Acesso SSH
- Configurazione swap
- Aggiunta della key apt di Orcale
- Aggiunta del repository apt di Oracle
- Installazione Oracle XE
- Configurazione variabili d’ambiente per SQL Plus & Oracle import/export
- Abilitare l’acesso remoto su Oracle

Configurazione rete Debian

Con il comando ifconfig segnatevi l’ip che avete
ifconfig

Lanciate nano /etc/network/interfaces e configurate un indirizzo statico
interfaces

Commentate la riga col pallino verde e aggiungete quelle rosse, ovviamente impostando i vostri indirizzi, se usate VMware player gli indirizzi dovrebbero essere gli stessi dello screenshot.
Con CTRL + X, INVIO salvate e uscite.

Lanciate ifdown eth0, ifup eth0.

Debian reference – Configurare la rete

^ Top

Accesso SSH

Lanciate apt-get install ssh, fatto ciò se siete sotto *nix vi basterà digitare nel terminale ssh vostroutente@ip per accedervi. Altrimenti se siete sotto Windows scaricatevi un client SSH tipo putty.
ssh

A questo punto si lavora direttamente da remoto. Meglio …!

^ Top

Configurazione dell’area minima di swap

Importante: Oracle XE ha bisogno di minimo 1Gb di area di swap.
Con il comando top controllate quanta area di swap ha la vostra macchina, nel mio caso ne ho circa 150Mb.
top

Mancandomi circa 1Gb di swap con il comando seguente aggiungo n(count) blocchi da 1Mb di swap, nel mio caso ne devo aggiungere circa 1000 blocchi
dd if=/dev/zero of=/swap bs=1M count=1000
Attivate lo swap
mkswap /swap
swapon /swap

Di nuovo, con il comando top, controllate di aver superato il Gb di swap.

^ Top

Aggiunta della key apt di Oracle

Per non ricevere errori di convalida durante l’installazione bisogna aggiungere la loro chiave pubblica.
wget http://oss.oracle.com/el4/RPM-GPG-KEY-oracle
Se la chiave non è disponibile potete trovarla anche qui.
Aggiugnere la chiave: apt-key add ./RPM-GPG-KEY-oracle, poi aggiornate il repository apt-get update

^ Top

Aggiunta del repository apt di Oracle

Editare l’elenco dei repository
nano /etc/apt/sources.list
Aggiungere la riga deb http://oss.oracle.com/debian unstable main non-free, poi aggiornate apt-get update

^ Top

Installazione Oracle XE

Semplicemente apt-get install oracle-xe

^ Top

Configurazione variabili d’ambiente per SQL Plus & Oracle import/export

E’ comodo aggiungere alle variabili globali, nano ~/.profile, le seguenti:
export ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server
export PATH=${PATH}:${ORACLE_HOME}/bin

NB: non è detto che le path siano esattamente quelle su tutte le distribuzioni, una volta aggiunte chiudete la sessione utente e riapritela, o riavviate la macchina.

^ Top

Abilitare l’acesso remoto su Oracle

Entrate si SQL Plus sqlplus utenteOracle/psw@XE, e lanciate exec dbms_xdb.setlistenerlocalaccess(false);

Adesso andando all’indirizzo http://ipmacchina:8080/apex potete gestire l’Oracle da remoto.

Share

Path of appengine SDK on MacOS X for PyDev

When I can try a new project in PyDev for Eclipse, the IDE question me for te path of appengine SDK.

????? !

I installed from here the SDK but I don’t know the path of command for deploy or debug.

Reading the log I found the path:
/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/

Screen:
appengine sdk path pydev howto

Utils link:

http://pydev.org/download.html

http://code.google.com/intl/it-IT/appengine/docs/python/gettingstarted/

Share

Required attribute on HTML5 input element if the type is set to “image”

If you use input elements with type set to image, remember to set the “alt” attribute.

This is because the item is “transformed” into an image and thus requiring a attribute for images.

Share

Centrare un form dentro un div o qualsiasi altro elemento di blocco – HTML + CSS

Ieri mi sono trovato di fronte a questo pezzo di html:

[...]

<td style="width: 100%; text-align: center;">

<form style="width: auto;">[..]</form>

<td>

[...]

Sui siti del W3C dicono di usare text-align per centrare gli oggetti però non funziona con tutti, per esempio non funziona con i form.

Ho risolto così:

<form style="width: auto; margin: 0 auto;" />

Share

Cambiare porta di ascolto Apache2 – Debian GNU/Linux

Se volete cambiare la porta di ascolto, di default è la 80, di Apache2 vi basterà modificare questo file:

/etc/apache2/ports.conf

Ovviamente una volta cambiata dovete anche modificare il file:

/etc/apache2/sites-available/default

in base alla vostra configurazione.

Per esempio, di default, il file inizia con:

virtualhost *:80

questo dovrà cambiare con

virtualhost *:vostra_porta

Fatto questo riavviate il servizio:

/etc/init.d/apache2 restart

Share

Switch to our mobile site