domenica 27 maggio 2012

OO-GC Language for standalone executables

Recently I have looked toward an object oriented-garbage collected programming language, able to build a standalone executable. The reason is simple, I'm in need to deploy applications on Linux servers by minimizing installation requirements.
Performance and portability are highly appreciated features

JAVA

Great language, high performance, big user base and lot of resources but there is no way to bundle a minimal VM and dependencies in a single executable, so ,you are in need to move the full framework around with your tiny console application.
There is also the GCJ which provides a java compiler but it looks unmaintained and there are no updates since 2009. Using GCJ looks more like an hack to me but further inspection is needed.
UPDATE: This project, Avian is a "lightweight Java VM and class library designed to provide a useful subset of Java's features, suitable for building self-contained applications"[Wikipedia]. This looks like the way to build a standalone executable from current Java code. Java + Avian looks like a second (au pair) winner.
I hope to try out this soon.


OCAML (Objective CAML)

It looks promising.
Tricky language which merges functional and imperative paradigms and has the garbage collection; Ocaml builds native binaries or creates an executable which bundles together a minimal Ocaml's VM and application bytecode; Ocaml single thread performance is quite good both with native and bytecode applications.
Base Ocaml and 3th-party developers provides a fair amount of libraries.
The Ocaml cons are that it doesn't support real multithreading (you have to use 3-party libraries, but it looks just an hack).
Another issue is about being a bit unusual (functional style programming is not the first choice) language with a little user base.

C# (MONO)

It looks more promising.
Mono works with well-known OO languages (I like C#), large user base, garbage collector, very large standard library and lots of 3th-party libraries and there are lot of resources around.
Good single thread performance as well as support for real multithreading.
About having a standalone executable, you can make it by using mkbundle.(I have to check it out)
It looks like the winner. updated in Part2

GO

Last but not least, this language is an interesting new entry and the reason behind this post; One year ago I have thought about this new language being useless, I was wrong.
At the moment I think I have understood two reasons behind the Google Go project:
  • provide an (about) OO, garbage collected, language which compiles to a native executable
  • provide a new approach to OO programming, Go doesn't provide inheritance or method overloading  but enforces interfaces as unique alternative.

Go developers state that inheritance is a dangerous feature; you know, inheritance is not about code reuse but is about abstraction, about sharing functionalities between conceptually similar objects and about taking advantage of polymorphism but inheritance is sometimes... misused.
Code reuse is still important and it is possible with Go by using composition and interfaces  (instead of inheritance). This is intriguing.
I think that the GO language deserves further inspection.

There are also big cons, it is a young language with a little library base and very tiny user base. But I have added "Go" as one of my Schemer Tasks for a Brighter Future!

It doesn't fit with the topic but I also suggest my readers to have a look at this interesting article programming language trends.
This post is a start point, I think I'll go deeper into Mono,GO and have a look at gcj but at the moment I'm highly oriented toward Mono. 
I'll let you updated on the topic.

Further details in Part 2

martedì 17 aprile 2012

SafeNet Authentication Client , how to solve installation issues



Recently I have had problems with a SafeNet Authentication Client v.8.0.0 installation  on Windows7 SP1, the SafeNet installation was simply broken and I wasn't able to repair or uninstall ( failed with a generic error ) and  the installer don't permit to do a fresh install over an existing one.
 I tried CCleaner in order to remove the application entry but the CCleaner failed with an error : "Impossible to delete MSI.."
I was sticked.

The solution is
  1. Use  http://en.wikipedia.org/wiki/Windows_Installer_CleanUp_Utility in order to delete the installation information from your system. Please, pay attention, let's select and delete ONLY the SafeNet Authentication Client entry!! No rollback exists for this operation. Alternate download link.
  2. You are able to do do a fresh SafeNet install, but the installation still fails with an "error: 1402". The error contains details about registry keys which the installer is not able to read/write.. yes it is a permission issue. The solution is here: http://www.okino.com/conv/changing_windows_registry_permissions.htm , abstract: you have to edit execute regedit as adminsitrator, find out the root of the problematic keys and change the permissions as pointed in the linked article.
  3. You have to iterate the installation procedure 2) as far as you have fixed permissions an all the keys.

Hope useful,
Good luck




sabato 31 marzo 2012

Recupero dati con TestDisk





Storia di un recupero dati..

Problema

MI è stato chiesto di recente di recuperare dei dati da un disco rigido sata da 500G; per windnows il disco risultava vuoto e chiedeva, come prevedibile di formattarlo.




Prima analisi

Da linux ho cercato di ricavare qualche info con il comando "fdisk -l", scoprendo che il disco conteneva una partizione estesa al cui interno si trovava una FAT16 da 500G!!

Alla fonte

Inquisendo il proprietario si è scoperto che un amico dell'amico aveva messo questo disco su un pc di provenienza XYZ e che il PC lo aveva accettato solo configurando il controller RAID in modo da tenere il disco come unico componente di un volume jbod. JBOD!
Naturalmente il PC in questione è sparito in una voragine, nulla si sa di lui e non esiste più.

Il manufatto atlantideo svelato

Avevo quindi a che fare con un "hardware jbod" di un pool costituito da un solo disco, ma ero ottimista; il raid1 hardware spesso non crea problemi e il singolo disco inserito in un PC anche in configurazione non raid risulta generalmente accessibile ed usabile, essendo il JBOD una mera concatenazione di dischi speravo che la partizione NTFS fosse li, integra, liscia, intonsa, al massimo preceduta da immondizia lasciata dal controller.

Fase 0

Essendo un malfidente e un pessimista cronico ho prima effettuato da Linux una copia dell'MBR e quanto di vitale, quotando http://www.partimage.org/Partimage-manual_Backup-partition-table (riporto esempio, differisce dal mio caso dove il discpositivo è /dev/sdc):

dd if=/dev/hda of=backup-hda.mbr count=1 bs=512
It will produce a very small, but very important file: 512 bytes of data. Now, we will save entries of the extended partitions:
sfdisk -d /dev/hda > backup-hda.sf

questi files sono necessari per ripristinare la struttura delle partizioni in caso di errori

Tentativo 1, montare il JBOD su Linux

Il primo tentativo era verificare (più per curiosità) se il formato in qualche modo coincideva con il --linear del mdadm di Linux (che da quanto sapevo dovrebbe corrispondere al jbod).
Naturalmente Mdadm (mdadm -Q /dev/sdc) dice che non c'è nulla, ma ero pessimista pure io.

Tentativo 2

Vari tentativi con utility Windows(falliti)

Tentativo 3 (che invero sapevo che doveva essere il primo) l'utility TestDisk

Questa prodigiosa utility, sommo taumaturgo, ineguagliabile panacea, è sicuramente l'implementazione informatica di sciamanici riti di guarigione.
Dopo aver scaricato da http://www.cgsecurity.org/wiki/TestDisk_Download la versione 6.13 sulla mia fedele OpenSuse 11.2 e eseguito testdisk come root, mi è bastato selezionare il device (nel mio caso /dev/sdc) e lanciare la "Quick Analisys".

Figura di esempio, non legata al caso specifico

TestDisk ha subito identificato un unica partizione NTFS da 500G!!
Certo di lavorare in sicurezza, grazie al backup già fatto nella Fase0 dell'MBR, ho fatto scrivere la nuova tabella a TestDisk sul disco con il comando "Write" (Oh dolce Semplicità, a volte uno dimentica quanto sei bella!)
Finito bisogna dire a linux di caricare la nuova tabella delle partizioni, con il seguente comando (/dev/sdc nel mio caso è il nome del device che stavo recuperando):
partprobe /dev/sdc
A questo punto resta da verificare il successo!
Il resto è discesa, riavviare in windows ed effettuare un chkdsk (readonly, ovvero senza l'opzione /F) per verificare che tutto sia a posto.
Anche il comando smartctl utilizzato da linux conferma che il disco è vetusto ma non imploso.
Windows è in grado di montare la nuova partizione e di accedere ai files, perfettamente integri.
Finito in 10 minuti.

Conclusioni

TestDisk è una grande applicazione per il recupero delle partizioni e fa molto, molto di più di quanto vi ho raccontato. Tenetevela sempre a portata di mano(e mi pare sia anche inclusa in systemrescuecd).


Note per i posteri

Il recupero dati non si fa così , non ci si accontenta mai del semplice backup dell'MBR e poi lavorando direttamente sul disco originale ma si deve sempre fare una copia raw con ddrescue e creare un file immagine del disco.
Tutte le operazioni successive dovrebbero essere fatte su questa copia perché le operazioni di recupero sono operazioni di lettura/seek/scrittura molto intense ed è possibile che il disco decida di mollarvi durante l'operazione; ddrescue in questo caso è un tool grandioso e gestisce in modo intelligente i bad sector.
Nel mio caso ho deciso di lavorare a cuore aperto per più motivi:
  1. non avevo un posto dove mettere 500G di immagine
  2. sapevo dalle info Smart e dal racconto che il disco non era fisicamente danneggiato(la causa del malfunzionamento era l'estrazione dal PC atlantideo)
  3. non avevo molto tempo a disposizione
  4. c'erano foto ma il valore dei dati non era altissimo (alias non erano dati miei :-) )

mercoledì 7 dicembre 2011

How to Zero-fill a drive with Windows

Little howto,
 are you a linux user ?Do you like to find a windows native "dd" alternative for zero-fill a drive?
In order to delete both used and free disk space I have used commandline SDelete sysinternals utility, here are the steps:

  1. Download Sysinternals SDelete , and unzip the archive
  2. If your drive is unformatted and has not a drive letter, do a quick ntfs format of all drive (and mount it as drive X: , for example)
  3. open from command prompt, cd into download folder use this command: Sdelete –s -z X:\*.*

And then you have simply to wait for the wiping to complete.


Explanation: -s, recurse  subdirs; -z, zero fill free disk space;
default is -p 1 which means only one pass


WARNING: Deleted data in unrecoverable, PAY ATTENTION to the drive letter!

venerdì 25 novembre 2011

Un server SVN facile per Linux - CollabNet Subversion Edge

Prologo

Per il controllo versione dei miei progetti uso SVN, per semplici motivi, lo conosco già abbastanza bene e basta per quello che devo fare.
Anche a casa, tempo fa avevo installato un server SVN (su Linux Opensuse) per i miei progetti personali, per backup e sincronizzazione dei progetti sui miei diversi pc.
Recentemente ho sperimentato un server SVN per windows chiamato VisualSVN e sono restato colpito dalla semplicità con cui permette di creare e gestire i repository e i permessi utente in un modo no-brain.
Diciamocelo, queste operazioni devono e possono essere gestibili in modo immediato e visuale.
Proprio oggi sono stato costretto a creare un nuovo repository casalingo per un nuovo progetto divertente e ... "freezeeee" .... mi sono ritrovato a rimembrare la sequenza di comandi utili alla creazione del repository e sopratutto alla corretta configurazione del server-subversion di apache.
Mi son detto:  "BASTA! questo è un attentato alla mia creatività"


Missione

Trovare un equivalente di VisualSVN per Linux OpenSuse che sia:
  1. veloce da installare
  2. altrettanto semplice da usare
  3. simili funzionalità
Primo tentativo Webmin+Virtualmin+plugin SVN 

Webmin funziona egregiamente ma Virtualmin non si installava su OpenSuse (almeno non in mezzora di tentativi e quindi violando il primo requisito), non ho quindi potuto valutare il livello di cura di questo modulo WebMin. 
FALLITO

Secondo tentativo  CollabNet Subversion Edge

Prima di incappare in questo prodotto le ricerche mi hanno portato ad altri analoghi non free.
CSE è free, ha il vantaggio di includere tutto, anche il server apache locale e quindi richiede pochissime dipendenze (una installazione Java con le variabili d'ambiente a posto, e una isntallazione Python). La politica suggerita è la seguente, crearsi un utente locale sulla macchian Linux, ad esempio io l'ho chiamato "svnguy", registrarsi sul sito CollabNet e scaricare l'archivio gz contenente i binari per linux, scompattare il .gz (comando unzip) dei binari nella home dell'utente creato.
Verrà creata una cartella csvn, entrate nella cartella ./csvn/bin
Basta usare da utente "svnguy" il comando csvn start ed è fatta, un istanza di apache sarà eseguita con un console di amministrazione su una porta non standard. (per averlo come servizio al boot  sudo csvn install)
Altre spiegazioni sono futili perché dalla console di amministrazione tutto risulta immediato ed autoesplicativo come dovrebbe essere.
VITTORIA

Concludendo

Consiglio CollabNet Subversion Edge server a tutti coloro che debbano installare e gestire un server SVN in ambiente Linux.


Note di installazione

Ho eseguito un unica modifica rispetto al README di CollabNet, sudo csvn install invece di sudo -E csvn install a causa di un comando che altrimenti no trovava in path e consiglio di abilitare nella console di amministrazione l'opzione "Start Subversion server when the management console is started" per far partire il servizio al boot.

mercoledì 27 luglio 2011

Internet running slow with windows7 32bit (x86) - Avira related

Intro
I have had network problems with 2 computers running windows7 x86 and Avira AntiVir Professional, Internet browsing stops after a while (webpage's load sticks for minutes).  I have tracked down  the problem and found out the cause.

Solution
The Avira Webguard is not working well on Windows7 32bit (x86), the solution is right click on Avira's tray icon and disable Avira WebGuard.

Notes
We have a lot of windows XP PC/VMs and a bunch of windows7 64bit and WebGuard is running just fine on those machines.

Hope useful & have fun!

mercoledì 20 aprile 2011

Utilizzare più utenti Google contemporaneamente con Google Talk

Piccolo post pillola..
Siccome possiedo due account Google, uno per lavoro e uno per uso privato, mi sono ritrovato nella situazione di voler effettuare il login di Google Talk su due account google contemporaneamente.

Soluzione
Basta modificare (o creare) un link all'eseguibile Google Talk aggiungendo il parametro nomutex. Es:
"C:\Program Files (x86)\Google\Google Talk\googletalk.exe" /nomutex

A questo punto eseguendo Google Talk da questo nuovo link potrete avere n-istanze di GoogleTalk, una per ogni vostro utente.

Gioia&Tripudio