tag:blogger.com,1999:blog-32787878325184245902024-03-09T18:46:06.302-08:00The Good Code InnFabiano Tarlaohttp://www.blogger.com/profile/09033250755803345003noreply@blogger.comBlogger41125tag:blogger.com,1999:blog-3278787832518424590.post-32160144220065632062020-06-16T00:48:00.000-07:002020-06-16T00:48:03.470-07:00[Reloaded] Automatic check of media files integrity (Python3 Project)Thanks to<span class="p-nickname vcard-username d-block" itemprop="additionalName"> garygan89 pull request, and few changes of mine, my <a href="https://thegoodcodeinn.blogspot.com/2018/11/automatic-check-of-media-files.html" target="_blank">check-media-integrity</a> Python2 script is now a Python3 script.</span><br />
<br />
<span class="p-nickname vcard-username d-block" itemprop="additionalName">It comes also with a bugfix (quite mysterious one.. indeed) that in few cases causes the Config obj to be seen as NoneType. </span><br />
<span class="p-nickname vcard-username d-block" itemprop="additionalName"><br /></span>
<span class="p-nickname vcard-username d-block" itemprop="additionalName">GitHub page here:</span><br />
<a href="https://github.com/ftarlao/check-media-integrity"><span class="p-nickname vcard-username d-block" itemprop="additionalName">https://github.com/ftarlao/check-media-integrity</span></a><br />
<span class="p-nickname vcard-username d-block" itemprop="additionalName"><br /></span>
<br />
<br />
<div style="text-align: center;">
<img alt="Typical damaged Jpeg (Public domain)" class="irc_mi" height="150" src="https://upload.wikimedia.org/wikipedia/commons/thumb/9/9a/JPEG_Corruption.jpg/800px-JPEG_Corruption.jpg" style="margin-top: 0px;" title="Typical damaged Jpeg" width="200" /> </div>
<span class="p-nickname vcard-username d-block" itemprop="additionalName"></span>Fabiano Tarlaohttp://www.blogger.com/profile/09033250755803345003noreply@blogger.com0tag:blogger.com,1999:blog-3278787832518424590.post-13035666139426442902019-08-18T02:30:00.001-07:002019-08-18T02:30:15.351-07:00Trying to index Google Sites in Google Search.. overcomplicated nightmare I'm trying to submit my new Google Sites URL to the google search crawler, with their tools is overcomplicated, I'll try adding a link here:<br />
<br />
<a href="https://sites.google.com/view/fabianotarlao/home" target="_blank"><br /></a>
<a href="https://sites.google.com/view/fabianotarlao/home" target="_blank">The Best Temporary Google Sites Homepage Ever</a><br />
<br />
I'm sorry for this noise...<br />
RegardsFabiano Tarlaohttp://www.blogger.com/profile/09033250755803345003noreply@blogger.com2tag:blogger.com,1999:blog-3278787832518424590.post-20023590858595227842018-11-28T02:57:00.000-08:002019-02-06T14:28:40.445-08:00Automatic check of media files integrity (Project)<b>check-media-integrity</b> is an open-source Python script that decodes media files in order to check integrity. You can also check all the media files in a folder recursively.<br />
I released the sources on GitGub, <a href="https://github.com/ftarlao/check-media-integrity" target="_blank">here</a><br />
<b>Any feedback or suggestion is appreciated</b>, I look for ways to force stricter checks for Pillow, Wand and FFmpeg.<br />
<br />
<div style="text-align: center;">
<img alt="Typical damaged Jpeg (Public domain)" class="irc_mi" height="150" src="https://upload.wikimedia.org/wikipedia/commons/thumb/9/9a/JPEG_Corruption.jpg/800px-JPEG_Corruption.jpg" style="margin-top: 0px;" title="Typical damaged Jpeg" width="200" /> </div>
<br />
check-mi help:<br />
<br />
<span style="font-size: xx-small;"><span style="font-family: "courier new" , "courier" , monospace;">Checks integrity of Media files (Images, Video, Audio).<br /><br />positional arguments:<br /> P path to the file or folder<br /><br />optional arguments:<br /> -h, --help show this help message and exit<br /> -c X, --csv X Save bad files details on csv file X<br /> -v, --version show program's version number and exit<br /> -r, --recurse Recurse subdirs<br /> -i, --disable-images Ignore image files<br /> -m, --enable-media Enable check for audio/video files<br /> -p, --disable-pdf Ignore pdf files<br /> -e, --disable-extra Ignore extra image extensions (psd, xcf,. and rare<br /> ones)<br /> -x E, --err-detect E Execute ffmpeg decoding with a specific err_detect<br /> flag E, 'strict' is shortcut for<br /> +crccheck+bitstream+buffer+explode<br /><br />- Single file check ignores options -i,-m,-p,-e,-c<br /><br />- With 'err_detect' option you can provide the 'strict' shortcut or the flags<br />supported by ffmpeg, e.g.: crccheck, bitstream, buffer, explode, or their<br />combination, e.g., +buffer+bitstream<br /><br />- Supported image formats/extensions: ['jpg', 'jpeg', 'jpe', 'png', 'bmp',<br />'gif', 'pcd', 'tif', 'tiff', 'j2k', 'j2p', 'j2x', 'webp']<br /><br />- Supported image EXTRA formats/extensions:['eps', 'ico', 'im', 'pcx', 'ppm',<br />'sgi', 'spider', 'xbm', 'tga', 'psd', 'xcf']<br /><br />- Supported audio/video extensions: ['avi', 'mp4', 'mov', 'mpeg', 'mpg',<br />'m2p', 'mkv', '3gp', 'ogg', 'flv', 'f4v', 'f4p', 'f4a', 'f4b', 'mp3', 'mp2']<br /><br />- Output CSV file, has the header raw, and one line for each bad file,<br />providing: file name, error message, file size<br /><br /><br />check-media-integrity is an open-source Python script that decodes<br /> media files in order to check integrity. You can also check all the <br />media files in a folder recursively.</span></span> <br />
<br />
<h4>
Warning</h4>
<i>check-mi</i> is not the definitive crystal ball. Thanks to my tool I performed an experimental campaign<br />
For images, file truncation and damage on vital parts (headers) are always detected. <br />
<i>check-mi</i> is not always able to detect minor damages--e.g. small portion of file overwritten with a different value--in fact media files (and codec) are resilient to this type of damage. <br />
From my (few) experiments, with "zero fill" you need an extended damage to get a chance to see the problem, while with random noise you always get 85% chance of detection.<br />
<br />
A movie or audio needs severe damage for the <i>check-mi</i> to detect the problem. <br />
<br />
<code></code>Fabiano Tarlaohttp://www.blogger.com/profile/09033250755803345003noreply@blogger.com0tag:blogger.com,1999:blog-3278787832518424590.post-14162547155933951202018-11-19T02:27:00.001-08:002020-10-26T12:33:24.760-07:00TWRP Installation on Asus Nexus 7 3g (2012), tilapia.The following applies to the Asus Nexus 7 3g 2012, "tilapia" model, but I suppose that the procedure is the same for the "grouper"--WiFi only--model.<br />
My Nexus 7 had only official Asus updates (Asus Lollipop Android), non-rooted.<br />
<div style="text-align: center;"><img alt="Front view of Nexus 7 (cropped).png" data-file-height="439" data-file-width="276" height="439" src="https://upload.wikimedia.org/wikipedia/commons/8/83/Front_view_of_Nexus_7_%28cropped%29.png" width="276" /> </div>
<br />
The "recovery" is a boot-time utility useful for OS installation, and performing OS backups. <br />
<br />
I used my Linux PC but I think that this procedure applies also to Windows and iOS, only with minor changes.<br />
<br />
<span style="color: red;"><b>If you broke your Nexus 7</b> <b>following this guide it's your fault</b>, not mine.. <b>I'm not responsible</b> in any way. This procedure worked for me but software is too much complex for 100% confidence.</span> <br />
<br />
<h3>
Installing TWRP recovery</h3>
You need Android-SDK installed on your PC, and for Windows you need also Andorid USB drivers. <br />
<br />
In case your Nexus fastboot is locked (normal situation) the following operation is <b>going to delete the user data</b> on your Nexus 7.. <b>backup, backup, backup</b>.<br />
<br />
Download TWRP (for "tilapia") image on your PC from <a href="https://twrp.me/asus/asusnexus720123g.html">https://twrp.me/asus/asusnexus720123g.html</a> (TWRP for WiFi only "grouper" is here <a href="https://twrp.me/asus/asusnexus72012wifi.html">https://twrp.me/asus/asusnexus72012wifi.html</a>), let's download the <span style="font-family: "courier new" , "courier" , monospace;">twrp-3.x.x.x-tilapia.img</span> file on your PC-- there are also <span style="font-family: "courier new" , "courier" , monospace;">apk</span> packages, let's ignore them.<br />
<br />
<br />
With your Nexus 7 Tablet on, enable USB Debugging: <span style="font-family: "courier new" , "courier" , monospace;">Settings > Developer Options > USB Debugging</span>.<br />
Sometimes, you have to enable Developer Options first:<br />
<ol>
<li>Go to "Settings".</li>
<li>tap on "About phone" or "About tablet" entry,</li>
<li>Scroll down to the bottom of the "About pho☺ne" and locate the "Build Number" field</li>
<li>tap 7 times on "Build Number" </li>
</ol>
Connect the tablet to your PC with USB cable, reboot to the bootloader using this command from your PC (adb and fastboot are commands installed with Android-SDK):<br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;">adb reboot bootloader</span><br />
<br />
Please note that you need to authorize debugging from your PC when performing the previous command.<br />
(Optional: you can also perform this operation manually, the procedure is described later)<br />
<br />
Then, unlock the fastboot (this operation invalidates the Nexus guarantee. :-) ):<br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;">fastboot oem unlock</span><br />
<br />
A <b>confirmation screen appears</b> on the Nexus 7 screen, you have to select Yes and click "Enter" that is the Power button :-)<br />
<br />
Then install the TWRP recovery:<br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;">fastboot flash recovery twrp-3.x.x.x-tilapia.img</span><br />
<br />
Now, you have to reboot into recovery immediately in order to persist the change, you can reboot the device from the bootloader menu or with the command <span style="font-family: "courier new" , "courier" , monospace;">fastboot reboot</span>.<br />
During the reboot, you have to be <b>very quick</b> in order to access the bootloader again and perform immediately (manual way to enter the bootloader):<br />
<ul>
<li>press and hold the Power key, and the Volume Down key. </li>
<li>You are again in the bootloader, scroll down twice to select Recovery</li>
<li>Select with the power key.</li>
<li>you are in TWRP: </li>
</ul>
<div style="text-align: center;">
<a href="https://upload.wikimedia.org/wikipedia/commons/thumb/f/fe/TWRP_2.7.0.0.png/240px-TWRP_2.7.0.0.png"><img alt="Image result for twrp" border="0" class="irc_mi" height="320" src="https://upload.wikimedia.org/wikipedia/commons/thumb/f/fe/TWRP_2.7.0.0.png/240px-TWRP_2.7.0.0.png" style="margin-top: 60px;" width="179" /></a> </div>
<b>Begin "Please Note"</b><br />
there are lot of ways to perform the same operations. For example you can reboot in the bootloader with the command: <span style="font-family: "courier new" , "courier" , monospace;">fastboot reboot bootloader.</span> <br />
Perhaps you can also try: <span style="font-family: "courier new" , "courier" , monospace;">fastboot reboot recovery</span><span face=""arial" , "helvetica" , sans-serif"><br />But I simply described the operations I performed.</span><br />
<b>End "Please Note"</b><br />
<br />
Now you are running TWRP, I suggest to use TWRP to perform these operations:<br />
<ul>
<li>backup the original Asus Android OS (I put buckups into the Nexus <span style="font-family: "courier new" , "courier" , monospace;">/data/media/0/Download/</span> folder)</li>
<li>use the <span style="font-family: "courier new" , "courier" , monospace;">adp pull</span> (google is your friend) command to transfer the backup from <span style="font-family: "courier new" , "courier" , monospace;">/data/media/0/Download/ </span>to your (USB connected) PC</li>
<li>Perform a factory reset (TWRP Wipe) </li>
<li>..and finally install (Install button) a new preferred Andorid release for <i>tilapia</i> devices </li>
</ul><p>
In order to install a new Android version you have to copy the Android OS image, optional: gapps zip package, optional fix packages and rooting packages in the Nexus SD or
internal storage (I usually use <span style="font-family: "courier new" , "courier" , monospace;">/data/media/0/Download/ </span>folder<span style="font-family: "courier new" , "courier" , monospace;">)</span>. When running TWRP, the Nexus (connected with USB) is accessible by PC with the <span style="font-family: "courier new" , "courier" , monospace;">adb</span> command or,hopefully ,like USB storage (or MTP). <br />
<br />
In detail, I suggest to install the Android AOSP 7.x.x AndDiSa release (xda thread with instructions):<br />
<br />
<a href="https://forum.xda-developers.com/nexus-7/development/rom-android-7-aosp-grouper-t3467514">https://forum.xda-developers.com/nexus-7/development/rom-android-7-aosp-grouper-t3467514</a><br />
<br />Please note: for the proposed <span style="font-family: "courier new";">SetupWizardFixCrDroidNexus7.zip</span> fix was mandatory, I think you need to use it too.<br /></p><p>Have fun, <br />
<br />
Quoting my "success post":<br />
</p><blockquote class="tr_bq">
I have successfully installed the<span style="font-family: "courier new";"> aosp_tilapia-7.1.2-ota-eng-20181112.ds.zip</span> on my Asus Nexus 3g 2012 (tilapia), I also installed <span style="font-family: "courier new";">open_gapps-arm-7.1-pico</span> and <span style="font-family: "courier new";">Magisk v17.3</span>.<br />
I installed your Android release, by using TWRP-3.2.3-0-tilapia, over
the Asus original fully updated Lollipop. In fact the most tricky part
was installing TWRP <img alt="" border="0" class="inlineimg" src="https://forum.xda-cdn.com/images/smilies/smile.gif" title="Smile" /><br />
<br />
During installation the initial OS configuration failed, multiple times
(I tried with reboots), just during the user account selection. Using
the suggested <span style="font-family: "courier new";">SetupWizardFixCrDroidNexus7.zip</span> fix, fixed the problem, and I was able to complete the device configuration.<br />
<br />
Finally: <br />
<b>My Nexus is back to life</b>, is <b>very responsive</b>, browsing and playing movies are <b>very fast</b>... <br />
I have not tried all the functions (not tried camera yet). <br />
<br />
With official Lollipop my Nexus was simply unusable, u-n-u-s-a-b-l-e, I
used to think that my beloved Nexus was simply too old for the new
applications. I think now that Asus(or Google, it is a Nexus device) released defective OS versions for <b>manufacturer-planned-obsolescence</b> </blockquote>
Fabiano Tarlaohttp://www.blogger.com/profile/09033250755803345003noreply@blogger.com3tag:blogger.com,1999:blog-3278787832518424590.post-85157206283640651372018-08-11T04:21:00.001-07:002019-08-13T15:00:52.006-07:00Il modem Fastweb Technicolor MediaAccess DGA4131FWB è una ciofeca pazzesca<div style="text-align: justify;">
Con il passaggio a fibra vi cambieranno il vecchio modem, nel mio caso il TG789 e vi daranno forse lo 'splendido' MediaAccess DGA4131FWB (<label class="col-sm-3 text-right ng-scope">Versione software</label>
</div>
<div class="row">
<div class="col-sm-7">
<span class="ng-binding">1.0.1b</span>)</div>
</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
È decisamente <b>il peggior modem che abbia mai usato</b>, e io sono vecchio. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Pure i <i>TP-Link</i> antichi, degli anni ruggenti, risultavano più affidabili e meno frustranti.</div>
<div style="text-align: justify;">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://www.fastweb.it/myfastweb/gfx/assistenza/kb-sf/Manuali%20modem%20Fastweb/FASTGate/Fastgate.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="Image result for DGA4131FWB" border="0" class="irc_mi" height="222" src="https://www.fastweb.it/myfastweb/gfx/assistenza/kb-sf/Manuali%20modem%20Fastweb/FASTGate/Fastgate.jpg" width="400" /></a></div>
</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Il software sembra scritto da dei ragazzini della seconda superiore, ubriachi.. ma andiamo con ordine.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Si nota subito la modernità della nuova interfaccia web rispetto al vecchio modem Fastweb TG789, l'interfaccia è molto più <i>post-Boost</i>, insomma di gente che "ci sta dentro", figosa.. mica matusa.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: center;">
<i>Peccato non funzioni una minchia</i></div>
<h3>
Subnet </h3>
Se cambiate la subnet di default da 192.168.1.0/24 a non so.. 192.168.2.0/24 o 192.168.3.0/24, sembrerà funzionare, ma il NAT o il firewall non verranno configurati correttamente... e non navigherete mai in internet. Riavviare non cura.<br />
<br />
Quindi, potrete usare solo la subnet preconfigurata!! Questo pannello per la configurazione LAN è inutile.<br />
<br />
<h3>
Riavviate! </h3>
<div style="text-align: justify;">
Se non riavviate il modem, <b>anche se non richiesto dal modem stesso</b>, al cambiamento dei settaggi potreste avere molti problemi con il salvataggio e modifica di altri settaggi; solitamente riceverete "errori di sbaglio" al tentativo di salvataggio</div>
Riavviate!Riavviate!Riavviate!<br />
<br />
<h3>
Fantasmi di configurazione</h3>
<div style="text-align: justify;">
<b>Primo</b>: Le opzioni modificate <b>e salvate</b> possono riapparire nello stato precedente.</div>
<br />
<div style="text-align: justify;">
<b>Secondo</b>: Consideriamo i dispositivi configurati per una rete, se cambiate subnet, ragionevolmente spariscono <b>ma</b> non vengono eliminati... vengono parcheggiati da qualche parte nella configurazione. Riappariranno magicamente se rimettete la subnet precedente.</div>
<div style="text-align: justify;">
Ora, può anche sembrare un bene ma a volte riappaiono danneggiate. Questo fa molto pensare, è chiaro che come sviluppatori bisogna essere molto bravi e impegnarsi molto per garantire una configurazione consistente se si vogliono realizzare magie simili.. molto bravi. <i>E questi non sono bravi</i>.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Questo stesso giochetto viene fatto con le regole di port-forward. Le regole spariscono se cambiate subnet e riappaiono se rimettete la subnet precedente, <b>ma</b> quando riappaiono l'indirizzo IP è danneggiato e al suo posto compare un bel Unknown.</div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<i>Consistente ed utilissimo! </i></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Quindi, non c'è il minimo tentativo di questi sciagurati di tenere la configurazione del modem in uno stato consistente. Uno sviluppatore software assennato cercherebbe di eliminare le configurazioni non compatibili o di permettere, non rendendole invisibili, di rimuoverle manualmente. </div>
<div style="text-align: justify;">
Ma il buon senso lasciamolo ai druidi.</div>
<h3>
Interfaccia web di moda</h3>
L'interfaccia web, che bella, che beeellaaa.<br />
Se riavvii il modem da interfaccia dopo un poco la pagina da errore, prevedibile. Anche se si aggiorna o si ricarica l'URL su cui si era, a modem riavviato, si riceve naturalmente un errore, come giusto.<br />
<br />
<b>Ma</b> non otterrente un errore del tipo: "riloggati cretino" magari con redirezione al form login, sarebbe chiedere troppo.<br />
No... otterrete una sequenza di dialog "Errore Questo Quello" su interfaccia figosa che spuppa. Per uscire da questa situazione, o si chiude il tab del browser, inserendo poi a mano l'URL della pagina principale o si usa il tasto logout, che stranamente ancora funziona.<br />
<br />
Ora, niente di drammatico, ma fa trasparire una cura per i dettagli che rasenta il nulla.<br />
<div style="text-align: center;">
<img alt="Image result for fastweb" class="irc_mi" height="223" src="https://www.mobileworld.it/wp-content/uploads/2016/12/Fastweb-final-800x559.jpg" style="margin-top: 0px;" width="320" /> </div>
<h3>
La linea di difesa </h3>
Personalmente mi sono sempre trovato bene con Fastweb, qualità assistenza e linea, ma questo modem è una schifezza. <br />
<br />
Il modem è anche la più importante linea di difesa informatica della casa. <b>Un giocattolo del genere buttato su alla meno peggio con colla e puntine, che senso di sicurezza vi da?</b><br />
<br />
Ho evitato di fare test sulla interfaccia web per vulnerabilità XSS o simili, ero già troppo triste. <br />
<br />
<br />
<br />
<b></b><br />
<b><br /></b>
<b><br /></b>Fabiano Tarlaohttp://www.blogger.com/profile/09033250755803345003noreply@blogger.com21tag:blogger.com,1999:blog-3278787832518424590.post-7910922110196651842018-06-01T15:59:00.001-07:002018-06-03T08:14:03.372-07:00quia homo numquam discit (because man never learns)I like a lot Latin sentences because they sound like ancient wisdom that will last forever. Latin sounds cool.<br />
Being a <b><span class="highlightNode">Machine Learning</span></b>
researcher I thought one Latin-like-<b>maxim</b> for my beloved science. If
you like this joke, you can put this sentence on the stone door of your
laboratory.<br />
<div style="text-align: justify;">
The idea is a bit romantic and dramatic: we must teach machines <i>because humanity is not able to learn from its mistakes</i>.</div>
<div style="text-align: center;">
<i><span style="font-family: inherit;"><span style="font-family: "times" , "times new roman" , serif;"><span style="font-size: large;">quia homo numquam discit</span></span></span></i></div>
<br />
My maxim translates in:<br />
<br />
<div style="text-align: center;">
<span style="font-size: large;"><span style="font-family: "times" , "times new roman" , serif;"><i>because man never learns</i></span></span></div>
<br />
<div style="text-align: justify;">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggLaC39Gcg3aBnyVJcbh3QHzX2X3TTMD9WjTM2_s9c5yzcJPPZa5V7xihmqG4szfCVS_z0VthH3naPYbzkdFqTQ6Bq9Gb0Z9hcGHaq8cU7-bIXi4turvoRInteoPYrkt9ehTNjvC-0nas/s1600/Census-Frieze.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="285" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggLaC39Gcg3aBnyVJcbh3QHzX2X3TTMD9WjTM2_s9c5yzcJPPZa5V7xihmqG4szfCVS_z0VthH3naPYbzkdFqTQ6Bq9Gb0Z9hcGHaq8cU7-bIXi4turvoRInteoPYrkt9ehTNjvC-0nas/s400/Census-Frieze.jpg" width="400" /></a></div>
</div>
<div style="text-align: justify;">
<br />
I asked for a Latin translation because it sounds like <i>an ancient wisdom,</i> I thank the user <i>Pacifica</i> in <a href="http://latindiscussion.com/forum/latin/because-man-never-learns.30576/" target="_blank">this Latin forum</a> for his help, I hope the translation is right, it sounds very nice.<br />
<br />
<span class="" id="result_box" lang="en"><span class="">Later, I found out
that it is <b>a reworking of a George Bernard Shaw quote</b> "We learn
from experience that men never learn anything from experience"</span></span> </div>
<br />
You know, I'm a ML researcher so I'm a bit biased Fabiano Tarlaohttp://www.blogger.com/profile/09033250755803345003noreply@blogger.com0tag:blogger.com,1999:blog-3278787832518424590.post-16941013258510053202018-01-15T14:41:00.001-08:002018-01-16T00:13:47.270-08:00How to install TWRP (and LineageOS) with Samsung S5 (G900F) <div class="separator" style="clear: both; text-align: center;">
</div>
<div style="margin-left: 1em; margin-right: 1em;">
</div>
<br />
<br />
I tried following the official LineageOS installation guide <a href="https://wiki.lineageos.org/devices/klte/install">here</a>, for <b>klte (G900F)</b> model, but the described procedure doesn't work (always).<br />
<br />
<span style="color: red;"><b>If you broke your phone</b> following my tips, <b>it's your fault</b>, not mine.. <b>I'm not responsible</b> in any way. Read all the linked resources first.</span><br />
<br />
I'm not going to copy&paste here the official LineageOS installation guide, please refer to the LineageOS site for the complete procedure, I'll only fix the wrong parts. I have verified these steps with my Samsung S5 (G900F) phone, with a fully updated Android Marshmallow from Samsung.<br />
Let's fix the wrong part, the TWRP installation:<br />
<br />
<br />
<h3>
The TWRP installation - the right way</h3>
<br />
The official guide tells you to use the <b>heimdall</b> opensource tool in order to flash the new recovery, TWRP. <b>Forgot it and let's use the</b> <b>Odin</b> software for Windows instead of heimdall. Odin is the official Samsung tool for flashing/managing the firmwares.<br />
You can find it <a href="https://forum.xda-developers.com/showthread.php?t=2711451">here</a> on the <a href="https://forum.xda-developers.com/showthread.php?t=2711451">xda</a> forums.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFzoz3NSmFkjnXTHJ6IKJhIwuiS_SDcJCbfJgpzNtx9mahCYvE7Bs6lk-j1d3lImEf7cR2NYELfaKggpGs9CM1dziUd8BACzHQr7VdVBGcVQMC7Iq8ugOqQvns6saOPdXIHfLJ-CvfJH8/s1600/odin.jpg" imageanchor="1"><img border="0" height="286" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFzoz3NSmFkjnXTHJ6IKJhIwuiS_SDcJCbfJgpzNtx9mahCYvE7Bs6lk-j1d3lImEf7cR2NYELfaKggpGs9CM1dziUd8BACzHQr7VdVBGcVQMC7Iq8ugOqQvns6saOPdXIHfLJ-CvfJH8/s400/odin.jpg" width="400" /></a></div>
<br />
<br />
If you have already installed Windows Samsung software.. like <b>Smart-Switch</b> you should have all the needed drivers for the Samsung phone. You can also use the Smart-Switch software to <b>do a full backup... that is not a bad idea...</b><br />
<br />
<div style="text-align: center;">
<b><span style="color: red;">DO BACKUPS, DO BACKUPS.. Cloud or Local </span></b></div>
<div style="text-align: center;">
<b><span style="color: red;">Google for it </span> </b></div>
<br />
Then:<br />
<ol>
<li>Download the <a href="https://dl.twrp.me/klte/">TWRP</a> tar image for S5 klte into your Windows PC</li>
<li>Activate the Android phone USB debugging mode (please Google about it)</li>
<li>Connect the phone with a USB cable to your Windows PC</li>
<li>Press the <b>Volume Down</b>+<b>Home</b>+<b>Power</b> buttons altogether, then confirm in order to enter the<b> Download Mode</b>.</li>
<li>Open the ODIN application</li>
<li>The phone may be detected and a confirmation brief message appears in the log tab (<span style="font-family: "courier new" , "courier" , monospace;">OK+something</span>)</li>
<li>In the AP field select the downloaded TWRP .tar file</li>
<li>Select <b>only</b> the <span style="font-family: "courier new" , "courier" , monospace;">'Reset Time</span>' checkbox in the Odin Options tab (<b>Re-partition is DANGEROUS</b> and should be unchecked! And also the other checkboxes should be unchecked) </li>
<li>Press the <span style="font-family: "courier new" , "courier" , monospace;">START</span> button and the recovery will be flashed </li>
<li>Reboot into TWRP recovery by pressing at the same time the phone buttons <b>Volume UP</b>+<b>Home</b>+<b>Power</b></li>
</ol>
Full instructions: <a href="http://www.droidviews.com/install-twrp-recovery-samsung-galaxy-s5/">http://www.droidviews.com/install-twrp-recovery-samsung-galaxy-s5/</a><br />
<br />
After TWRP installation you can follow the official instructions in order to install LineageOS.<br />
Have fun <br />
<br />
P.S: <br />
<b>With S5 you need to uncheck Odin "Automatic Reboot"</b> checkbox.<br />
This is needed because the automatic reboot replaces the TWRP with the
original Samsung recovery.. you need to manually boot in TWRP at least
once in order preserve it right.<br />
<br />Fabiano Tarlaohttp://www.blogger.com/profile/09033250755803345003noreply@blogger.com0tag:blogger.com,1999:blog-3278787832518424590.post-50155496941244814542017-12-03T02:45:00.000-08:002018-03-27T02:09:52.194-07:00WYSIFU vs WYSIWYG - What You See Is Fucking Useless<div style="text-align: justify;">
I'm pleased to introduce a brand new acronym: <b>WYSIFU</b> </div>
<div style="text-align: justify;">
Self coined by me during my pleasant LaTeX sessions.</div>
<br />
<div style="text-align: center;">
<b>W</b>hat <b>Y</b>ou <b>S</b>ee <b>I</b>s <b>F</b>ucking <b>U</b>seless</div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: justify;">
LaTeX is a pain in the ass, is anachronistic and the syntax sucks.. and is one of the best expressions of <b>WYSIFU</b>. </div>
<div style="text-align: justify;">
But LaTeX is mandatory in a lot of fields, people is totally insane, damn!</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
When using LaTeX <span class="short_text" id="result_box" lang="en" tabindex="-1"><span class="">I feel like an ancient scribe on a stone tablet</span></span>.<br />
<br />
<img alt="Image result for ancient tablet cuneiform" class="irc_mi" height="272" src="https://cdn.zmescience.com/wp-content/uploads/2016/10/etana_2_lg.jpg" style="margin-top: 0px;" width="400" /> </div>
<br />Fabiano Tarlaohttp://www.blogger.com/profile/09033250755803345003noreply@blogger.com0tag:blogger.com,1999:blog-3278787832518424590.post-31335981066534946962016-04-18T13:52:00.000-07:002016-04-20T00:41:34.808-07:00WIND disabilita l'eurotariffa.. che manco il gioco delle tre carte<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgC1x1EeH2-qmGJIMeLsdOchHvF1fmHM7I3opZ0YhFCBLczQeg5B_Fzv-69ZGiunPGzNmH9c9QEug0aOlWS36dEbzabCNZIwFFDFDwknBj17SyysAtJyBlLYQqn25xHByOjfwZcaOLgXq0/s1600/wind.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="187" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgC1x1EeH2-qmGJIMeLsdOchHvF1fmHM7I3opZ0YhFCBLczQeg5B_Fzv-69ZGiunPGzNmH9c9QEug0aOlWS36dEbzabCNZIwFFDFDwknBj17SyysAtJyBlLYQqn25xHByOjfwZcaOLgXq0/s320/wind.jpg" width="320" /></a></div>
<br />
Premetto che con WIND mi sono trovato sempre abbastanza bene ma IMHO, stavolta, l'ha combinata grossa.<br />
<br />
Premessa:<br />
<ul>
<li>L'europa impone delle <b>tariffe massime</b> agli operatori per il traffico all'estero, tale tariffa si chiama "<b>eurotariffa</b>"</li>
<li>tale tariffa è <b>aggirabile dall'operatore</b> solo se il cliente richiede all'operatore <b>l'abilitazione di una tariffa</b> che impone <b>condizioni diverse</b> (anche peggiori)</li>
</ul>
<br />
Soluzione WIND, abilitare a tutti, di default e senza avvisare, una opzione "<b>Offerta Regolamentata UE</b>", che badaben<br />
<b><br /></b>
<br />
<div style="text-align: center;">
<span style="font-size: large;"><b>NON È L'EUROTARIFFA</b></span></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: justify;">
"<b>Offerta Regolamentata UE</b>" (<b>ORU</b> per gli amici) permette all'operatore WIND di <b>applicare tariffe peggiori</b> della eurotariffa, 2 euro al giorno per 15 minuti di telefonate, 15 sms e 50MB di traffico. </div>
<div style="text-align: justify;">
Ovvero, con ORU, se uno deve mandare solo 1 sms dall'estero, WIND si prende sempre i 2 euro.</div>
<div style="text-align: justify;">
O in altre parole: con ORU, se andate all'estero e mandate <b>1</b> sms, non pagherete la esigua eurotariffa per un sms ma, <b>SBANG!</b>, pagherete<b> 2€</b>.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Potreste contestare che usando tutti e 15 i minuti e tutti e 15 gli sms e il traffico dati, forse, ORU convenga rispetto alla eurotariffa, ma vi prego di verificare che al superamento di tali limiti le condizioni diventano peggiori della eurotariffa.</div>
<div style="text-align: justify;">
E ancora più gradita sarà questa opzione agli utenti che vivono a ridosso dei confini e che a volte prendono la cella telefonica straniera. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Potete verificare l'abilitazione della nefandissima opzione ORU accedendo al vostro account wind e controllando sulla pagina "La tua offerta".<br />
<h3>
</h3>
<h3 style="text-align: center;">
Come abilitare l'eurotariffa e disabilitare ORU </h3>
</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Potete disabilitare <b>l'opzione truffaldina</b> solo abilitando esplicitamente l'eurotariffa:</div>
<div style="text-align: justify;">
<br /></div>
<blockquote class="tr_bq">
<div style="text-align: justify;">
<b>via web:</b> loggate con vostro utente wind e cliccate nell'ordine su "la tua offerta" -> "estero" -> "dall'estero" -> "Eurotariffa" -> "abilita"</div>
<div style="text-align: justify;">
<b>via sms:</b> inviare al 4033 un sms con il testo "EUROTARIFFA PRE SI"</div>
</blockquote>
<div style="text-align: justify;">
<br /></div>
<h3 style="text-align: center;">
Riflessioni etiche</h3>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Prima di tutto l'abilitazione silenziosa di una opzione che serve ad imporre una condizione peggiore al proprio cliente è proprio una carognata.</div>
<div style="text-align: justify;">
Nascondere la natura della opzione truffaldina con un nome fuorviante <b>Offerta Regolamentata UE </b>che le persone assennate interpreterebbero come "Ah mi hanno attivato la eurotariffa, che bravi..", è proprio una carognata.</div>
<div style="text-align: justify;">
Rifletteteci, è un vergognoso gioco di parole perché in verità "Regolamentata UE" significa che la UE prevede per regolamento che l'opzione, richiesta dal cliente, permetta l'uso di tariffe diverse dall'eurotariffa.</div>
<div style="text-align: justify;">
Una cavillo Euro-Regolamentato.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Per questi motivi non si può interpretare questa scelta di Wind come una sbagliata progettazione, un errore di comunicazione o simili, <b>è un lucido e pianificato tentativo di ingannare e spillare soldi al proprio cliente</b></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: center;">
<span style="font-size: large;">Vi è malizia e di quella brutta</span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
A mio avviso qualche associazione dei consumatori dovrebbe svegliarsi e <b>fare il culo alla Wind</b>. Questa è veramente grossa.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
P.S: una volta disabilitata la ORU abilitando la eurotariffa, <b>controllate tra un mese lo stato della eurotariffa</b>. L'eurotariffa dovrebbe tra poco essere modificata e non sia mai che WIND decida di proteggervi "Regolamentarvi" in automatico.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: center;">
</div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<br /></div>
<br />Fabiano Tarlaohttp://www.blogger.com/profile/09033250755803345003noreply@blogger.com5tag:blogger.com,1999:blog-3278787832518424590.post-39606066102371476972015-10-11T23:16:00.002-07:002015-10-11T23:23:01.923-07:00HOWTO: Moving a Windows (XP) installation from a broken PC to a new one... using Virtualbox.Move one hard disk from a broken PC to a new one, usually, does not suffice in order to get back our OS installation; the problem is the lacking of pre-installed drivers for chipset and peripherals (the new PC ones) that prevents the system boot.<br />
<br />
Few days ago my father's motherboard broke. I had no time to: install a new operating system and reconfigure tons of programs,I decided to try a desperate recover of the old installation.<br />
<br />
<b>And.. I had an idea.</b><br />
<br />
Using <b>virtualbox</b> in order to boot up my father's OS and prepare the old installation to the migration to the new hardware; I hoped that the old OS already had the drivers for the old emulated hardware.<br />
In order to boot the old installation, Virtualbox can use a physical device like virtual device for a virtual machine, this is not a well known feature.<br />
<h3>
<b>The Performed Task</b></h3>
I recovered the old windows XP SP3 installation, moving it from a
broken Asus k8n motherboard, equipped with Athlon x2 4200+, to an Asus p5n-d with
Core2Duo Q9300.<br />
The system hard disk was a 1TB WD green model.<br />
The Virtualbox system host was my mighty laptop, equipped with the Intel 4720HQ CPU, and Linux Mint operating system.<br />
<h3>
<b>The Procedure</b></h3>
I'll refer to my laptop as <i>PC-host</i>.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitnC7txQdCCmWGBxeCyoMagVf5hhW95Ht16IFYOXi6yzstTaluKMiVRkiSJ1SvHlg_A8kpG869MUC-qu4pGfIdof4JdxD-B_6W0vCf28zYok7PvrckbRMNbLN9V4BmpCKfD4x6voAifv0/s1600/5819c50085.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="213" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitnC7txQdCCmWGBxeCyoMagVf5hhW95Ht16IFYOXi6yzstTaluKMiVRkiSJ1SvHlg_A8kpG869MUC-qu4pGfIdof4JdxD-B_6W0vCf28zYok7PvrckbRMNbLN9V4BmpCKfD4x6voAifv0/s320/5819c50085.jpg" width="320" /></a></div>
<h4>
Preparation</h4>
<ul>
<li>Take out the system hard disk (HD) from the broken PC</li>
<li>Connect HD to PC-host (for example via an <a href="http://www.ebay.com/bhp/external-hard-drive-adapter">external USB adapter</a>)</li>
<li>Find out the assigned HD device name: <span style="font-family: "Courier New",Courier,monospace;">dmesg</span> or <span style="font-family: "Courier New",Courier,monospace;">fdisk -l</span> linux commands (in my case it is <span style="font-family: "Courier New",Courier,monospace;">/dev/sdb</span>)</li>
<li>Mount the HD partitions and <b>backup the data</b></li>
<li>Unmount the HD partitions (<b>mandatory</b>)</li>
<li>give device access to the virtualbox user (for example via <span style="font-family: "Courier New",Courier,monospace;">chmod 777 /dev/sdb</span>)</li>
</ul>
<h4>
Virtual machine setup<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgn6EP-vKzMT8v1mMW090itJ2eX5zuCh3_BhhvCFYIfXJkDs-3112AvKOo_mUHT3H1V-yp_HigO9zJmDH0YrHOSjdSG8Bs2qZpD_wPs0ZOROvaqjH5wszTH07ZbIrD9BRnJyk9_cjVj76Y/s1600/vbox_logo2_gradient.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgn6EP-vKzMT8v1mMW090itJ2eX5zuCh3_BhhvCFYIfXJkDs-3112AvKOo_mUHT3H1V-yp_HigO9zJmDH0YrHOSjdSG8Bs2qZpD_wPs0ZOROvaqjH5wszTH07ZbIrD9BRnJyk9_cjVj76Y/s1600/vbox_logo2_gradient.png" /></a></div>
</h4>
Create a new Windows XP (32bit) virtual machine(VM), but <b>do not create ANY virtual disk</b>, configuration details: <br />
<ul>
<li>Chipset PIIX3</li>
<li>2GB RAM </li>
<li>I have forgotten I/O APIC On, but I think this has no effect with winXP</li>
<li>Network NAT, PCnet-FAST III (Am79C973)</li>
<li>Pointing device: PS/2 Mouse </li>
</ul>
<a href="http://www.serverwatch.com/server-tutorials/using-a-physical-hard-drive-with-a-virtualbox-vm.html">Create a virtual disk that connects to the block device</a>:<br />
<br />
This example is for my use case, Linux operating system and HD device <span style="font-family: "Courier New",Courier,monospace;">/dev/sdb</span> <br />
<br />
<span style="font-family: "Courier New",Courier,monospace;">VBoxManage internalcommands createrawvmdk -filename "myFatherDisk.vmdk" -rawdisk /dev/sdb</span><br />
<br />
Add <span style="font-family: "Courier New",Courier,monospace;">myFatherDisk.vmdk </span>virtual device to the VM (you do it in the Virtualbox storage panel)<br />
<h4>
Recover and prepare OS </h4>
<ul>
<li>Boot the VM</li>
<li>Press F8 during boot in order to enter Safe Mode</li>
<li>Wait device driver installation to complete</li>
<li>Reboot</li>
<li>The VM might work fine, let's skip windows genuine registration</li>
<li>let's download the new motherboard/device drivers (in my case from ASUS page)</li>
<li>install the new drivers into VM</li>
<li>Disconnect HD from PC-host</li>
<b>
</b></ul>
<b>Untested: </b>you can also try disabling the WPA to avoid problems during migration, I think you can re-enable later. Or you can find a solution by your own (please read the next section about).<br />
<br />
At this point you have the old OS already working as VM inside a new hardware (PC-host).<br />
<h4>
</h4>
<h4>
Move the HD to the new hardware </h4>
<ul>
<li>Connect HD to the new motherboard</li>
<li>Boot from HD</li>
<li>Press F8 during boot in order to enter Safe Mode</li>
<li><b>My case</b>: Windows genuine activation request prevent you from proceeding and installing drivers; usb devices are not working yet, you need a connected ps2 keyboard in order to skip activation(*)</li>
<li>Wait device driver installation to complete</li>
<li>reboot</li>
<li>Clean installation, reinstall broken software (I reinstall video driver, just in case), install secondary lacking drivers, clean registry (for example via CCleaner)</li>
<li>Reboot few times :-D</li>
<li>Activate your windows</li>
</ul>
My father's new PC is ready! <br />
<h3>
Notes(*) </h3>
I was unable to skip the windows genuine activation when booting with the new hardware, this prevents the driver installation.<br />
In order to skip it you need a working keyboard or mouse, but the new USB hub device is not initialized, yet.<br />
Luckily I had an old ps2 keyboard and the motherboard connector.<br />
<br />
There may be alternative (untested) solutions:<br />
<ul>
<li>you can force the hardware device initialization first, by using the <i>sysprep</i> windows utility. A possibile solution, may be using <i>sysprep</i> before disconnecting HD from PC-host and connecting to the new hardware. <span class="" id="result_box" lang="en" tabindex="-1"><span class="hps">I have not</span> <span class="hps">deepened</span> <span class="hps">this road</span>. Please <span class="hps">refer</span> <span class="hps">to the instructions</span> <span class="hps">of the </span> <a href="https://technet.microsoft.com/en-us/library/cc721940%28v=ws.10%29.aspx"><span class="hps">syprep utilty.</span></a></span></li>
<li><span class="" id="result_box" lang="en" tabindex="-1"><span class="hps">Disable windows genuine activation service, and re-enable it later.</span></span></li>
</ul>
<br />
<span class="" id="result_box" lang="en" tabindex="-1"><span class="hps">In the event that you have a smarter solution to this problem, please share it with me</span></span><span class="" id="result_box" lang="en" tabindex="-1"><span class="hps">.</span></span><br />
<br />
<span class="" id="result_box" lang="en" tabindex="-1"></span><span class="" id="result_box" lang="en" tabindex="-1"><span class="hps">Have fun</span></span> <br />
<br />
<br />
<br />
<b> </b><br />
<br />
<b> </b> Fabiano Tarlaohttp://www.blogger.com/profile/09033250755803345003noreply@blogger.com3tag:blogger.com,1999:blog-3278787832518424590.post-40868060731353149772015-08-06T06:52:00.001-07:002015-08-07T11:23:06.961-07:00Alita - Gally - Gunnm Motorball wallpaper (16:9)Alita-Gunnm- is one of the best manga characters ever.<br />
I was not able to find out a decent 16:9 Alita wallpaper, so I forged a very nice 4:3 wallpaper to 16:9.<br />
I hope you'll like this extended version.<br />
Note:<br />
I have modified a wallpaper that was floating around for a while,I have found the original artist with an image search: the Benlo original paint is on <a href="http://benlo.deviantart.com/art/Gally2-204829435">devianart</a>. <br />
<br />
Download the wallpaper here:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmkKATKnxSNbM7-5j4V9NYZPsTzXcF6duEtgdLbw6-yKUf8ZnKjJX7Kwy8niuQQDlnn9xMWNngp5zseJUR3Mh59CKii8CKg_Y23INkcGj9b94SxgIH_lzdJQres_uSCUqtAtT4e4fHazQ/s1600/alita+gunnm+widescreen+wallpaper.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="223" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmkKATKnxSNbM7-5j4V9NYZPsTzXcF6duEtgdLbw6-yKUf8ZnKjJX7Kwy8niuQQDlnn9xMWNngp5zseJUR3Mh59CKii8CKg_Y23INkcGj9b94SxgIH_lzdJQres_uSCUqtAtT4e4fHazQ/s400/alita+gunnm+widescreen+wallpaper.png" width="400" /></a></div>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />Fabiano Tarlaohttp://www.blogger.com/profile/09033250755803345003noreply@blogger.com0tag:blogger.com,1999:blog-3278787832518424590.post-71692286619203219842015-06-06T02:41:00.000-07:002015-06-09T05:56:30.914-07:00NFS over OpenVPN over ADSL(or slow connection), best settings<br />
<a href="data:image/jpeg;base64,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" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" class="irc_mut" height="200" src="data:image/jpeg;base64,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" style="margin-top: 0px;" width="200" /></a><br />
In recent years I have often used NFS shares through OpenVPN, with a 7Mbit ADSL connection, and I have always faced a great slowness in directory listing (takes a lot of seconds to do<i> ls</i> or update the file manager view) and file transfers.<br />
For the sake of completeness, I'm using Linux Mint 17.. it's a Debian like distro. <br />
<br />
I have read lot of posts and I have tried the <i>reasonable subset</i> of suggested solutions, I'm going to provide a configuration walkthru; this is the summary of the best tips:<br />
<ul>
<li>use a NFS packet size smaller than littler <i>MTU</i> size (default is 8Kbytes, new values should be littler than 1500bytes, few guys suggest 1024bytes)</li>
<li>use NFS TCP connection type; do not use UDP on ADSL/WANs</li>
<li>use the NFS <i>async</i> option </li>
<li>do not set very small timeouts, left the default 60 secs (timeo=600) or.. I have tried with success 10secs (timeo=100) too</li>
<li>with the hard mount option, let's add the <i>intr</i> option</li>
</ul>
<br />
For linux users, here is a little fstab configuration example for soft mounts: <br />
<br />
<blockquote class="tr_bq">
<span style="font-family: "Courier New",Courier,monospace;">servername:/shared/ /mnt/foldername/ nfs rw,suid,dev,<b>soft</b>,exec,nouser,<b>async</b>,noauto,<b>timeo=100</b>,user,<b>rsize=1024,wsize=</b></span><span style="font-family: "Courier New",Courier,monospace;"><b><span style="font-family: "Courier New",Courier,monospace;"><b>1024</b></span></b>,<b>tcp</b> 0 0 </span></blockquote>
<br />
and here, for hard mounts:<br />
<blockquote class="tr_bq">
<span style="font-family: "Courier New",Courier,monospace;">rw,suid,dev,<b>intr</b>,exec,nouser,<b>async</b>,noauto,<b>timeo=100</b>,user,<b>rsize=1024,wsize=</b></span><span style="font-family: "Courier New",Courier,monospace;"><b><span style="font-family: "Courier New",Courier,monospace;"><b>1024</b></span></b>,<b>tcp</b> 0 0 </span></blockquote>
<br />
I have also used rsize/wsize = 1350. <br />
These findings have been obtained with the typical <i>mambo-jambo</i>, <i>fire&forget</i>, <i>try&see</i> experimental procedure.<br />
<ul>
<li>Yes, I have read the manuals (they suck)</li>
<li>yes, I have chosen only the reasonable subset of internet tips</li>
<li>yes, I have tried lots of permutations </li>
</ul>
<div style="text-align: center;">
<b>BUT</b> </div>
I am far from a statistically significant sample :-).<br />
<br />
These changes have improved my NFS usability, doubling the download speed for a single file and raising a lot the browsing responsiveness.<br />
NFS over vpn+adsl is still dramatically slow (at the moment I am transferring files at about 150 KB/sec, and this is far better than without the proposed changes).<br />
Please consider that my 7Mbit ADSL has a download bandwidth of 800KB/sec. <br />
<br />
I hope that these tips are going to work in your case too..<br />
<br />
Have you find out a better solution? Other magical NFS options? Please share, tips are welcome. <br />
Have fun<br />
<br />Fabiano Tarlaohttp://www.blogger.com/profile/09033250755803345003noreply@blogger.com2tag:blogger.com,1999:blog-3278787832518424590.post-46413421159298172402014-12-29T07:35:00.000-08:002014-12-29T09:17:05.665-08:00TD-W8960N V5, a very good ADSL routerI recently installed a <a href="http://www.tp-link.it/products/details/?model=td-w8960n">TD-W8960N V5</a> WiFi-router at my father home.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlWWNWfkQUuh48lr0dvAGAiIV_a400xTJx0XidshRSfPs5YzI5FrtRO7gbzPHGTNAK1PP8RR9CqjDkPQnYpVwN-jermhauuJ86Qh9B5COwO9lJWn8CcpgOYYUx0CjG5RZeeHv44fUjrL8/s1600/TD-W8960N-1.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlWWNWfkQUuh48lr0dvAGAiIV_a400xTJx0XidshRSfPs5YzI5FrtRO7gbzPHGTNAK1PP8RR9CqjDkPQnYpVwN-jermhauuJ86Qh9B5COwO9lJWn8CcpgOYYUx0CjG5RZeeHv44fUjrL8/s1600/TD-W8960N-1.jpg" height="320" width="320" /></a></div>
<br />
I am very impressed by its features and performance.<br />
<br />
Please note, previously I installed and used the W8960N V2 and W8961N routers.<br />
They worked well; W8960N V2 is superior than W8961N, it has a fair amount of features and available settings.<br />
<br />
Both W8960N V2 and W8961N have the usual Tp-link like "rough" web interface, providing lots of low level settings with no clear explanations or guide.<br />
<br />
TD-W8960N V5 improves the web interface, respect the older models, the interface is better organized, and adds plenty of <b>very useful</b> features.<br />
<br />
The preferred features are:<br />
<ul>
<li>Per-user <b>bandwith throttling</b>-- Yes you can sharp the bandwidth!</li>
<li><b>Guest network</b>-- you can create a separate wireless network for guests (your main wifi network is a totally separated network, if you like)</li>
<li>Bandwith throttle the Guest Network</li>
</ul>
These are features I have long waited for, in the low-price router segment.<br />
<br />
I have also noted that the wifi connection, at my father home, is far more stable now (less wifi disconnections or hiccups) respect with the older W8961N.<br />
<br />
I hope you find these informations useful.<br />
<br />
TD-W8960N V5 Respekt<br />
<br />
<br />Fabiano Tarlaohttp://www.blogger.com/profile/09033250755803345003noreply@blogger.com0tag:blogger.com,1999:blog-3278787832518424590.post-81093226905182304462014-01-09T09:20:00.000-08:002014-01-09T13:17:53.318-08:00Trenitalia, no, Cammellitalia<div style="text-align: justify;">
Oggi sono tornato da Vienna inaugurando la nuova fantasmagorica tratta Vienna->Venezia (io dovevo arrivare fino ad Udine, partenza da Vienna circa 6:45 e arrivo a Udine 12:16).<br />
Il tratto Austriaco è andato da favola, tutte le fermate in orario, figurarsi. <br />
Appena arrivati a Tarvisio (si, in Italia) e al "cambio consenga" tra OBB e Trenitalia, la fermata si prolunga.</div>
<br />
<div style="text-align: center;">
<b>SOSPETTO</b></div>
<br />
<div style="text-align: justify;">
Ci informano dopo una diecina di minuti che a causa di un guasto al locomotore ci sarà <b>forse</b> un autobus sostitutivo <b>non si sa ne come ne quando</b>; io già da qualche minuto avevo visto comparire gli autobus sostitutivi sugli orari online, naturalmente con orario fasullo 12:53.</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0ZFQB9mtAI6OL6qMlj9sdMYoFk9MYfQYTYDWst6EyHswHk-lWcsk_5St05KD8yFG791pHXmDFwS3lJTgB7WVU674sqGlA_jZrvgZk4EaownOnzXRGl0s19vxGmkXaKv8F-a5scj9gItk/s1600/trenitalia.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0ZFQB9mtAI6OL6qMlj9sdMYoFk9MYfQYTYDWst6EyHswHk-lWcsk_5St05KD8yFG791pHXmDFwS3lJTgB7WVU674sqGlA_jZrvgZk4EaownOnzXRGl0s19vxGmkXaKv8F-a5scj9gItk/s1600/trenitalia.jpeg" height="200" width="400" /></a></div>
<div style="text-align: justify;">
<br />
<br />
L'autobus arriva o forse sarebbe più giusto dire, viene partorito, alle 14:10; nel fratttempo un gruppo ti turisti Austriaci/tedeschi incavolati come bestie avevano già preso un taxi (330 euro) per non perdere un volo a Venezia.<br />
<br />
L'autobus arriva a Udine verso le 15:30, stanco e incavolato non voglio lasciaglierla passare liscia e memore del fatto che esiste una indennità di ritardo mi reco allo sportello per chiedere il mio 50% sul costo dei tre biglietti.<br />
L'impiegata è cortese mi spiega come si fa e mi fa compilare i moduli; </div>
<div style="text-align: justify;">
apro parentesi, ora la richiesta di una indennità mi pare una operazione che dovrebbe essere un tantino integrata nel sistema informativo di trenitalia, invece la povera impiegata ha dovuto compilare a mano moduli, fare fotocopie, timabrare, mancava la ceralacca e la cartacarbone.<br />
Detto questo l'impiegata dispiaciuta mi fa notare che <b>questa pratica ci metterà MOLTO tempo</b>.</div>
<div style="text-align: justify;">
Un appello a voi viaggiatori: <b>non fategliela passare liscia</b>, per ritardi superiori alle 2 ore avete diritto ad una indennità del 50% del valore del biglietto, lo so che è una rottura di scatole, ma chiedetelo! Questi maledetti ci campano sulla stanchezza della gente e sulla difficoltà e lentezza delle pratiche. <b>Fatevi risarcire</b><br />
<br />
Maledetti maledetti maledetti, non posso scusare la cronicità del ritardo, la mancanza di organizzazione e il coraggio con il quale sdoganano i disagi alla stregua di "un così va il mondo" ; sta gente pensa forse di giocare con i trenini Lima? cavoli, io volevo lavorare questo pomeriggio e non ho potuto, per colpa loro <b>ho perso un pomeriggio di lavoro</b>.<br />
<br />
<b>Cammellitalia</b> la dovrebbero chiamare dato che di un compagnia di trasporti africana trattasi.<br />
<br />
<div style="text-align: center;">
<b>VERGOGNA</b></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: left;">
P.s: se dovete andare a Vienna e potete scegliete, prendete sempre le tratte italiane su Autobus OBB + Treno OBB da Villach, siccome il povero treno OBB quando diventa Italiano di tutte le piaghe paga. Alla larga dalla penisola Africana.</div>
</div>
Fabiano Tarlaohttp://www.blogger.com/profile/09033250755803345003noreply@blogger.com0tag:blogger.com,1999:blog-3278787832518424590.post-3107204445793924552013-11-05T10:13:00.002-08:002013-11-05T10:40:00.301-08:00Making one photo album with two cameras, how to merge the photo sets in a smart way<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Coming back from my New York holiday I have had to merge toghether two photo sets, taken with two cameras, into a single photo album.</div>
<div style="text-align: justify;">
I 'll provide here a quick walkthru by using the Linux OS and the <a href="http://www.sentex.net/%7Emwandel/jhead/">jhead</a> console command.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
About the jhead command installation please use/refer your Linux distro package manager. </div>
<br />
<br />
When merging photo sets from two (or more) cameras, you face these problems:<br />
<ul>
<li>different filename conventions for image files</li>
<li>different progressive numbers in image filenames</li>
<li>camera clocks are not synched</li>
</ul>
<div style="text-align: justify;">
Let's assume you have moved the two photo sets in two folders,<i> /frank </i>and <i>/ann</i> ;</div>
<div style="text-align: justify;">
The first step is <b>to fix the clocks delta</b>; you have to find out two shots taken at the same time by frank and ann, let's look for something similar to:</div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpuMGIz-KaDWjetQWy1SXBvbhI38RpklBn5Z51a9kfiHctAIAjDZl9JIjPtGp_cHHCTO6CdYHTDfkMeEPt8PKmWLQLk1WhllB7jTKgaKqtJZQqY2X5Dt9hNPY23ASIyxHdwb35Kn97mJo/s1600/shot-contemporaneo.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="160" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpuMGIz-KaDWjetQWy1SXBvbhI38RpklBn5Z51a9kfiHctAIAjDZl9JIjPtGp_cHHCTO6CdYHTDfkMeEPt8PKmWLQLk1WhllB7jTKgaKqtJZQqY2X5Dt9hNPY23ASIyxHdwb35Kn97mJo/s1600/shot-contemporaneo.jpg" width="400" /></a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
You can use photo A and B in order to calculate the time delta between camera clocks. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Let's open these images with an image viewer and let's read the time/date EXIF informations (usually you have to look at the image "properties").</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: center;">
<b>OR</b></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: justify;">
you can obtain the time/date info by using the <i>jhead</i> command from shell, e.g.</div>
<br />
<span style="color: #38761d;"><span style="font-family: "Courier New",Courier,monospace;">>jhead IMG_2337.JPG </span></span><br />
<br />
<span style="color: #38761d;"><span style="font-family: "Courier New",Courier,monospace;">File name : IMG_2337.JPG</span></span><br />
<span style="color: #38761d;"><span style="font-family: "Courier New",Courier,monospace;">File size : 3184059 bytes</span></span><br />
<span style="color: #38761d;"><span style="font-family: "Courier New",Courier,monospace;">File date : 2013:10:10 16:06:04</span></span><br />
<span style="color: #38761d;"><span style="font-family: "Courier New",Courier,monospace;">Camera make : Canon</span></span><br />
<span style="color: #38761d;"><span style="font-family: "Courier New",Courier,monospace;">Camera model : Canon DIGITAL IXUS 75</span></span><br />
<b><span style="color: #38761d;"><span style="font-family: "Courier New",Courier,monospace;">Date/Time : 2013:10:10 16:06:05</span></span></b><br />
<span style="color: #38761d;"><span style="font-family: "Courier New",Courier,monospace;">Resolution : 3072 x 2304</span></span><br />
<span style="color: #38761d;"><span style="font-family: "Courier New",Courier,monospace;">Flash used : No (auto)</span></span><br />
<span style="color: #38761d;"><span style="font-family: "Courier New",Courier,monospace;">Focal length : 5.8mm (35mm equivalent: 37mm)</span></span><br />
<span style="color: #38761d;"><span style="font-family: "Courier New",Courier,monospace;">CCD width : 5.72mm</span></span><br />
<span style="color: #38761d;"><span style="font-family: "Courier New",Courier,monospace;">Exposure time: 0.017 s (1/60)</span></span><br />
<span style="color: #38761d;"><span style="font-family: "Courier New",Courier,monospace;">Aperture : f/2.8</span></span><br />
<span style="color: #38761d;"><span style="font-family: "Courier New",Courier,monospace;">Focus dist. : 3.84m</span></span><br />
<span style="color: #38761d;"><span style="font-family: "Courier New",Courier,monospace;">ISO equiv. : 160</span></span><br />
<span style="font-family: "Courier New",Courier,monospace;"><span style="color: #38761d;">Whitebalance : Auto</span></span><br />
<span style="font-family: "Courier New",Courier,monospace;"><span style="color: #38761d;">Metering Mode: matrix</span> </span><br />
<br />
Consider this situation:<br />
<ol>
<li>Ann's photo, foto B, <b><span style="color: #38761d;"><span style="font-family: "Courier New",Courier,monospace;">Date/Time : 2013:10:10 16:06:05</span></span></b></li>
<li>Frank's photo, foto A, <b><span style="color: #38761d;"><span style="font-family: "Courier New",Courier,monospace;">Date/Time : 2013:10:10 16:16:25</span></span></b><b><span style="color: #38761d;"><span style="font-family: "Courier New",Courier,monospace;"> </span></span></b></li>
</ol>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Frank's clock is 10 minutes and 20 seconds fast, you are going to fix this:</div>
<br />
<span style="color: #38761d;"><span style="font-family: "Courier New",Courier,monospace;">>cd frank </span></span><br />
<span style="color: #38761d;"><span style="font-family: "Courier New",Courier,monospace;">>jhead -ta-0:10:20 *.JPG</span></span><br />
<br />
<div style="text-align: justify;">
This command has fixed the exif time information by decreasing the photos time/date (-0:10:20). The two photo sets are now time-synced. </div>
<div style="text-align: justify;">
Jhead command provides other options to easily manage a very big clock delta (days, months or years), please refer to man pages.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
The next step is <b>photo renaming</b>, you are going to change the photos filenames with new ones based on their EXIF time/date;</div>
<div style="text-align: justify;">
let's use <i>jhead</i> again:</div>
<span style="color: #6aa84f;"><span style="font-family: "Courier New",Courier,monospace;"><br /></span></span>
<span style="color: #38761d;"><span style="font-family: "Courier New",Courier,monospace;">>cd frank</span></span><br />
<span style="color: #38761d;"><span style="font-family: "Courier New",Courier,monospace;">>jhead -n%Y%m%d-%H%M%S-frank *.JPG</span></span><br />
<span style="color: #38761d;"><span style="font-family: "Courier New",Courier,monospace;">>cd ../ann</span></span><br />
<span style="color: #38761d;"><span style="font-family: "Courier New",Courier,monospace;">>jhead -n%Y%m%d-%H%M%S-ann *.JPG</span></span><br />
<br />
<div style="text-align: justify;">
e.g. this is going to rename the ann photo <i>IMG_2337.JPG</i> to <i>20131010-160605-ann.jpg</i></div>
<div style="text-align: justify;">
Please note the postfix <i>-ann</i> (and <i>-frank)</i>, it helps mixing photos with the same time attribute. </div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Now you can simply move (or copy) the photos into the fresh new <i>/happyholidays</i> folder.</div>
<span style="color: #38761d;"><span style="font-family: "Courier New",Courier,monospace;"><br /></span></span>
<span style="color: #38761d;"><span style="font-family: "Courier New",Courier,monospace;">mv /ann/*.* /happyholydays</span></span><br />
<span style="color: #38761d;"><span style="font-family: "Courier New",Courier,monospace;">mv /frank/*.* /happyholydays</span></span><br />
<br />
I hope this is useful, have fun. :-)<br />
<br />Fabiano Tarlaohttp://www.blogger.com/profile/09033250755803345003noreply@blogger.com0tag:blogger.com,1999:blog-3278787832518424590.post-3783624590233041052013-10-01T09:25:00.000-07:002013-10-01T09:33:43.470-07:00PS4 vs Xbox, proiezioni provinciali<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQcAssvNk1IvCvT-wkzFgWXLN5nTBmk-MKUTdhMqkXFPb1FOEkHl-X1WzQySvFbMCLPifSm9GK2XLGpTttXtw9qE5kZ3voyIT2MFhgF8jn0MepcLIFwY3oZgs5XVXcF6cTUJnjCUqC1Xo/s1600/ps4.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQcAssvNk1IvCvT-wkzFgWXLN5nTBmk-MKUTdhMqkXFPb1FOEkHl-X1WzQySvFbMCLPifSm9GK2XLGpTttXtw9qE5kZ3voyIT2MFhgF8jn0MepcLIFwY3oZgs5XVXcF6cTUJnjCUqC1Xo/s1600/ps4.jpeg" height="223" width="400" /></a></div>
<br />
<br />
Qualche giorno fa sono passato per un negozio di videogiochi a
Portogruaro e ho chiesto ad una commessa varie info sulle console; siccome era molto
disponibile ho approffitato per chiedere impressioni dietro le quinte, tipo
andamento delle vendite etc.. ho scoperto cose interessanti.<br />
<br />
<ul>
<li>Entrambe vendono bene</li>
<li>Le
<b>prenotazioni per la prima ondata sono quasi esaurite</b>, ai ritardatari
toccherà aspettare il prossimo anno e anche qualche mese di più</li>
<li>A Portogruaro la<b> PS4 vende MOLTO di piu</b> della Xbox</li>
<li>La commessa ha una teoria secondo cui le preferenze per una console hanno carattere territoriale locale (*)</li>
</ul>
<br />
(*) Mi spiego, l'idea è questa: i ragazzi tendono a comprare ciò che ha l'amico quindi se una zona è tradizionalmente pro Sony essa tenderà a restarlo, lo stesso vale per le zone Xbox;<br />
<div style="text-align: justify;">
secondo il modello proposto le situazioni di equilibrio risulterebbero instabili.</div>
<br />
<div style="text-align: justify;">
La teoria della commessa prevede che si formino delle città PS4 e delle città Xbox, Portogruaro è decisamente una roccaforte PS4.</div>
<br />
Sarebbe interessante verificare..Fabiano Tarlaohttp://www.blogger.com/profile/09033250755803345003noreply@blogger.com0tag:blogger.com,1999:blog-3278787832518424590.post-48469416803910558302013-03-03T02:40:00.001-08:002013-03-12T02:53:24.796-07:00Eclipse CDT Linux Howto <div style="text-align: justify;">
<br />
<span style="background-color: #ea9999;"><b>UPDATE
5 March 2013</b>: I confirm, Juno CDT has done few improvement.. but when doing a
real job, restarting eclipse once every hour isn't handful.. and it is
<b>still too much slow </b>(this is my opinion after few days of real use). My
opinion is that Eclipse CDT <b>Juno</b> is not the best solution for working with C/C++ and being productive.</span><br />
<br />
<span style="background-color: #9fc5e8;"><b>UPDATE 3 March 2013</b>: Eclipse CDT performance looks better after the last IDE update. After 3 hours Xorg still raises cpu usage and things slow down but it is far far better.</span><br />
<br />
<br />
Eclipse CDT looks a great c/c++ IDE but, with default settings,<strike> is unusable</strike> is very slow in Linux; The main issues about default configuration, are:</div>
<ul>
<li>memory consumption, gc <b>slowness</b></li>
<li>Xorg (linux) cpu usage, more <b>slowness</b> </li>
<li>very very <b>slow</b></li>
<li><b>slowness</b> </li>
<li>bugs which causes crashes </li>
</ul>
<div style="text-align: justify;">
Using Eclipse CDT is a pain <strike>and it looks </strike><b><strike>unusable</strike> </b>(Intel Q9300@2500 Core2Quad, 8GB and SSD);I have fine-tuned the default configuration accordingly to this <a href="https://developer.mozilla.org/en-US/docs/Eclipse_CDT">guide</a> and other stackoverflow answers in order to solve these issues.</div>
<div style="text-align: justify;">
<br /></div>
<h3 style="text-align: center;">
Let's fix it! </h3>
<div style="text-align: justify;">
<a href="http://www.eclipse.org/cdt/images/snapshots.gif" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="320" src="http://www.eclipse.org/cdt/images/snapshots.gif" width="234" /></a>Edit <i>eclipse.ini</i> and raise the VM memory settings, these are mine (I have 8GB of ram so these values are a bit exaggerated, by default I am allocating 2 Gbytes for eclipse):</div>
<span style="font-family: "Courier New",Courier,monospace;"><br /></span>
<span style="font-family: "Courier New",Courier,monospace;">-Xss2m</span><br />
<span style="font-family: "Courier New",Courier,monospace;">-Xms1024m</span><br />
<span style="font-family: "Courier New",Courier,monospace;">-Xmx4096m </span><br />
<span style="font-family: "Courier New",Courier,monospace;">-XX:MaxPermSize=1024m</span><br />
<span style="font-family: "Courier New",Courier,monospace;">-XX:PermSize=1024m</span><br />
<br />
<div style="text-align: justify;">
Raising these values may help GC (Garbage collector). Perhaps, I have noted less ide assertions and errors. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Eclipse linux <b>Theme support is a useless mess</b>, GTK+-Qt is buggy and has lots of leaks which causes Xorg to eat up all your cpu, disable the GTK-Qt theme support.</div>
<div style="text-align: justify;">
Execute eclipse, go into <i>Windows->Preferences->General->Appearance</i> and set the Theme to Classic (If you know a better way please give me feedback) </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
There is an old bug which causes Eclipse CDT to crash suddenly, add this line (vm configuration) in eclipse.ini :<br />
<br />
<span style="font-family: "Courier New",Courier,monospace;">-XX:-UseCompressedOops </span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Tune the CDT settings in order to be less aggressive (CDT has to self parse the sources), I have adopted only few changes, let's quote form guide (I suggest to read ALL the <a href="https://developer.mozilla.org/en-US/docs/Eclipse_CDT">guide</a>, it is useful when working on big projects):</div>
<blockquote class="tr_bq">
Whenever you create a new workspace for a Mozilla source tree, you
should be sure to turn off the following two settings in the workspace
preferences (<code>Window > Preferences</code>, or <code>Eclipse > Preferences</code>) before creating a project in that workspace:<br />
<ul>
<li>in "General > Workspace", disable "Build automatically"</li>
<li>in "C/C++ > Indexer", disable "Automatically update the index"</li>
</ul>
Turning off automatic indexing prevents the CPU intensive indexer
from running at various stages during the steps below before we're
ready.</blockquote>
<div style="text-align: justify;">
<b>Warning</b>, thanks to this change, while developing, you need sometime<b> to trigger indexing manually </b>(right click on the project, Index->Rebuild).</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
You can also configure your project properties in order to enable multicore compilation:<i> Project Properties_> C/C++ Build -> Behavior -> Enable Parallel builds</i></div>
<h3 style="text-align: center;">
Conclusion</h3>
<div style="text-align: justify;">
The fine tuned Eclipse CDT looks usable, there are no hangs; The IDE still slow down during the programming sessions and became very slow in 1 or 2 hour.<br />
<br />
<br />
<b>UPDATE:</b> I feel like my how-to is a workaround, in fact it seems there are issues with Eclipse UI performance in Juno, let's look <a href="http://wiki.eclipse.org/Platform_UI/Juno_Performance_Investigation">here</a></div>
Fabiano Tarlaohttp://www.blogger.com/profile/09033250755803345003noreply@blogger.com0tag:blogger.com,1999:blog-3278787832518424590.post-48084353222758331982013-02-07T14:52:00.002-08:002013-02-10T07:55:09.131-08:00gwt-java-benchmarks releasedHi,<br />
<div style="text-align: justify;">
I've just released <a href="http://code.google.com/p/gwt-java-benchmark/">gwt-java-benchmarks</a> code under GPLv2 license.</div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhz1My8jn_PE21YE948HrOiRV6S4iaLXTgMUEDRmygIVGMzhkCapMeoacIift-efP38BSgCGDzRfWyqPo6_uvBmy6g1VxgW8RAkWtL914Uub4abjCq2fwSXIb3Rh56fVvFKE2uKT-ciHC4/s1600/benchmark.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="46" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhz1My8jn_PE21YE948HrOiRV6S4iaLXTgMUEDRmygIVGMzhkCapMeoacIift-efP38BSgCGDzRfWyqPo6_uvBmy6g1VxgW8RAkWtL914Uub4abjCq2fwSXIb3Rh56fVvFKE2uKT-ciHC4/s320/benchmark.png" width="320" /></a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
I think this is a fair quality code, not Enterprise grade ;-) but it's done and just works.</div>
<div style="text-align: justify;">
<strike>I am going to tune the sieve benchmark with high mem configuration in the future but it is better to remove at the moment those values from your csv output.</strike></div>
<div style="text-align: justify;">
Hope useful.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
P.s: I'm looking for suggestions about SVN repository structure.</div>
<div style="text-align: justify;">
At the moment the library code is simply cut&pasted in 2 sub projects.. it is the same code, so I hope there si a better way to share code between NetBeans projects; at the moment this is the most viable solution.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Have fun<br />
<br />
EDIT: I have tuned the sieve benchmark, problem fixed.</div>
<br />
<br />Fabiano Tarlaohttp://www.blogger.com/profile/09033250755803345003noreply@blogger.com0tag:blogger.com,1999:blog-3278787832518424590.post-90949868979693609232013-02-02T16:24:00.001-08:002018-01-15T13:22:03.526-08:00GWT Benchmarks: GWT+JsVM vs JavaVM<h3 style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgl7Js1ydiQ8INWp78bKfzD_GOYavVmGiNSyV49wGV8tgtnTL_O-26iVAXN8TRjoNDw3amBe2uiHIh21pUvRwBwwMxqRJiUMx1f0aJcYsJi8gswTEU4pYB9FQ3_OJNp8ZToHHdyFZk2clk/s1600/gwt.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="400" data-original-width="400" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgl7Js1ydiQ8INWp78bKfzD_GOYavVmGiNSyV49wGV8tgtnTL_O-26iVAXN8TRjoNDw3amBe2uiHIh21pUvRwBwwMxqRJiUMx1f0aJcYsJi8gswTEU4pYB9FQ3_OJNp8ZToHHdyFZk2clk/s200/gwt.png" width="200" /></a>
<span style="font-size: small;">What is GWT? </span></h3>
<div style="text-align: justify;">
<a href="https://developers.google.com/web-toolkit/">GWT (Google Web Toolkit)</a> is a tool for compiling Java into JavaScript code; with GWT you can write both your web application and your server side code using the Java language. </div>
<h3 style="text-align: center;">
</h3>
<h3 style="text-align: center;">
<span style="font-size: small;">What about GWT performance?</span></h3>
<h3 style="text-align: center;">
</h3>
<div style="text-align: justify;">
<br />
I have worked with GWT in the recent years and a simple question has arisen:</div>
<div style="text-align: justify;">
<br /></div>
<i>"How does the same Java code perform when running inside the Java virtual machine VS running inside the browser?"</i><br />
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
I have decided to do a bunch experiment<span style="font-size: small;">s</span> and write this article after taking in account these facts:</div>
<ul>
<li style="text-align: justify;">GWT developers state that the generated JavaScript code may be better than the handwritten one</li>
<li style="text-align: justify;">V8 JavaScript Engine and the other JavaScript engines have been highly improved in the recent years</li>
</ul>
<div style="text-align: justify;">
<span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;">It also <span style="font-size: small;">makes sense to measure the</span> <span style="font-size: small;">per<span style="font-size: small;">ormance</span> <span style="font-size: small;">of GWT applications running </span>on different browsers</span>, Firefox, Opera, Chrome, <span style="font-size: small;">Explore<span style="font-size: small;">r in order to see <span style="font-size: small;">who sucks<span style="font-size: small;"><span style="font-size: small;"> and </span>who rules. </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><br />
<br />
<span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;">I think that th<span style="font-size: small;">e</span>se <span style="font-size: small;">results</span> may be useful <span style="font-size: small;">f<span style="font-size: small;">rom</span> <span style="font-size: small;">a d<span style="font-size: small;">istribui<span style="font-size: small;">ted High <span style="font-size: small;">Perfom<span style="font-size: small;">ance Comput<span style="font-size: small;">ing perspective (via web client).</span></span></span></span></span></span></span> </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></div>
<h3 style="text-align: center;">
<span style="font-size: small;"> </span></h3>
<h3 style="text-align: center;">
<span style="font-size: small;"> ..but what is performance?</span></h3>
<div style="text-align: justify;">
<br />
<span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;">I'm looking <span style="font-size: small;">to numeric and data crunching performance<span style="font-size: small;">; <b>input/output, graphics<span style="font-size: small;"><span style="font-size: small;"> and</span> multimedia <span style="font-size: small;">performace are out of topic.</span></span></b></span></span></span> </span></span></span></span></span></span></span></span></div>
<div style="text-align: justify;">
<span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;">I <span style="font-size: small;">have measured execution time of the same code <span style="font-size: small;">compiled with GWT<span style="font-size: small;">,</span> running inside the browser Java<span style="font-size: small;">Script VM<span style="font-size: small;">(JsVM), and running <span style="font-size: small;">"natively" <span style="font-size: small;">inside the <span style="font-size: small;">Java SE7 Virtual Machine (JavaVM<span style="font-size: small;">).</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></div>
<div style="text-align: justify;">
<span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;">Little execution time mea<span style="font-size: small;">ns high perfo<span style="font-size: small;">rmace</span>, <span style="font-size: small;">it's </span>quite simple<span style="font-size: small;"><span style="font-size: small;">. </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></div>
<span style="font-size: small;"></span><br />
<h3 style="text-align: center;">
<span style="font-size: small;"> </span></h3>
<h3 style="text-align: center;">
<span style="font-size: small;">The <span style="font-size: small;">Benchmark suite</span> (Interna<span style="font-size: small;">ls)</span></span></h3>
<div style="text-align: justify;">
<br />
I have developed a little suite (EDIT: <a href="http://code.google.com/p/gwt-java-benchmark/">sources released</a>) in order to run a bunch of deterministic <b>single threaded</b> benchmarks covering<span style="font-size: small;">:</span> strings crunching, numerical crunching and data manipulation; The suite performs these benchmarks after a<b> warm up</b>.</div>
<div style="text-align: justify;">
The warm up has been configured in order to make sure that all the benchmark code is JITted first<span style="font-size: small;">.</span></div>
<div style="text-align: justify;">
To be clear, the JsVM compiles the JavaScript after a lot of execution cycles (e.g: 11000) but JavaVM is going to compile the bytecode to native code in few cycles.</div>
<div style="text-align: justify;">
After the warm up, the benchmark is executed lot of times and the overall execution time is recorded, it's the same approach than taking an average execution time. </div>
<div style="text-align: justify;">
<span style="font-size: small;">The<span style="font-size: small;"> </span>GWT<span style="font-size: small;"> and native benchmark suites share the same Java code<span style="font-size: small;"> and benchmark<span style="font-size: small;"> configurations</span></span>, only the Main class<span style="font-size: small;">es are different.</span></span></span></div>
<div style="text-align: justify;">
<span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;">Here is the list and description of the performed benchmarks:</span></span></span></div>
<ul>
<li style="text-align: justify;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><b>CollectionSortBenchmark</b><span style="font-size: small;">, </span>Test Java collection sort and shuffle<span style="font-size: small;">, manipulation.</span></span></span></span></li>
<li style="text-align: justify;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><b>FFTBenc</b><span style="font-size: small;"><b>hmaark</b>, Computes FFT's of complex, double precision data, GSL code taken from scimark</span></span></span></span></li>
<li style="text-align: justify;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><b>RegexBenchMark</b>, apply <span style="font-size: small;"><span style="font-size: small;">a</span> </span>Regex (J<span style="font-size: small;">avascript compatible)</span> to a<span style="font-size: small;"> <span style="font-size: small;">text</span></span></span></span></span></span></li>
<li style="text-align: justify;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><b>SieveBenchmark</b>, Computes prime numbers <span style="font-size: small;">into</span> <span style="font-size: small;">a given numeric range</span></span></span></span></span></span></span></li>
<li style="text-align: justify;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><b>StringCrunchBench</b><span style="font-size: small;"><b>mark</b>, String and StringBuilder man<span style="font-size: small;">ip<span style="font-size: small;">ula<span style="font-size: small;">tion, append<span style="font-size: small;">, <span style="font-size: small;">delete</span></span></span></span></span></span></span> </span></span></span></span> </span></span></span></li>
</ul>
<span style="font-weight: normal;"><b><span style="font-size: small;"></span></b></span><br />
<div style="text-align: justify;">
<span style="font-weight: normal;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;">These</span> benchmarks <span style="font-size: small;">have been performed </span></span></span></span><span style="font-weight: normal;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-weight: normal;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;">twice with different configurations<span style="font-size: small;">, one time <span style="font-size: small;">using </span></span>little data s<span style="font-size: small;">ets</span></span></span></span></span></span></span></span></span></span></span>, and<span style="font-size: small;"><span style="font-size: small;"> <span style="font-size: small;">a </span>second time <span style="font-size: small;">on a huge data set<span style="font-size: small;">s</span> (big arrays, big lists and so on).</span></span></span></div>
<div style="text-align: justify;">
<span style="font-weight: normal;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;">This is intended to track the JsVM<span style="font-size: small;"><span style="font-size: small;"> and </span>JavaVM <span style="font-size: small;">behavior</span> when <span style="font-size: small;">pl<span style="font-size: small;">aying with memory demanding application<span style="font-size: small;">s, yes, this looks l<span style="font-size: small;">ike</span> an Good&Old Garbage Collector <span style="font-size: small;">stress test</span>. <span style="font-size: small;">;</span>-)</span></span></span></span></span></span></span></span><br />
<span style="font-weight: normal;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"> </span></span></span></span></span></span></span></span><b><span style="font-size: small;"><br /></span></b></div>
<h3 style="text-align: center;">
<span style="font-size: small; font-weight: normal;"><b>The Benchmark Setup</b></span></h3>
<div style="text-align: justify;">
<br />
The suite has been executed on an asus K51 notebook equipped with:</div>
<ul>
<li>Intel Core2Duo T6600@2.2Ghz</li>
<li>4Gbyte RAM</li>
<li>Windows7 Home (x64)</li>
</ul>
<div style="text-align: justify;">
The web benchmark suite is loaded from a glassfish AP running on another server, the last <b>GWT 2.5 SDK</b> has been used to compile the benchmarks into Javascript code (Obfuscated javascript).</div>
<div style="text-align: justify;">
<br /></div>
<h3 style="text-align: center;">
<span style="font-size: small;">Let's see the Results</span></h3>
<div style="text-align: justify;">
<br />
Here you have a bar graph (Figure.1) generated with (The Great) R; the bar heights represents the benchmark execution time, normalized towards the JavaVM 1.7.0 execution time. One little bar means little execution time and high performance, please note that the y-axis has a logaritmic scale. </div>
<div style="text-align: justify;">
The experiment name (x-axis) have a number appended on it, bigger the number, bigger is the data size used: FFTBenchmark<b>5</b> is less memory demanding than FFTBenchmark<b>6</b>. </div>
<div style="text-align: justify;">
Take a look at the graph, the first<b> </b><span style="font-size: small;">benchmark </span>on the left is the <i>CollectionSortBenchMark3,<span style="font-size: small;"><b> </b></span></i><span style="font-size: small;"><span style="font-size: small;">the red bar represents the JavaV<span style="font-size: small;">M <span style="font-size: small;">(ver.1.7.0<span style="font-size: small;">_05) execution time,</span></span></span></span></span><i> </i>the yellow bar is about the Chrome browser (V8 engine) and is about 2 times slower than native javaVM; the other browsers looks about 10 times slower than java code running "native".<br />
The blue bar refers to <b>Microsoft Internet Explorer version 9</b> (MSIE). </div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div style="text-align: justify;">
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2aNvX7TacLbCv6kAbeijWYJf6KUbEC7LDhdwBctKBWOHKmSuNH5xajNwyHDXudUiF-qB-3mAlG4GBMbHbOkQ97sDf-untuvsxmLuHgkE7jDCfllU55o_OtRGh5wdSg6Vyp67gmkXDYGo/s1600/Rplot_final-wat.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="372" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2aNvX7TacLbCv6kAbeijWYJf6KUbEC7LDhdwBctKBWOHKmSuNH5xajNwyHDXudUiF-qB-3mAlG4GBMbHbOkQ97sDf-untuvsxmLuHgkE7jDCfllU55o_OtRGh5wdSg6Vyp67gmkXDYGo/s640/Rplot_final-wat.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Figure.1<br />
Littler execution times (tiny bars) means higher performance </td></tr>
</tbody></table>
<br /></div>
<div style="text-align: justify;">
<br /></div>
<br />
<div style="text-align: justify;">
Last note about these results, I have had to remove a Sieve benchmark on a greater numeric range (big numeric arrays), it's my fault, I have not tuned right the number of iterations and the javaVM has completed the task in ZERO ms!! Quite strange and annoying but I have had not the time to grasp inside this.</div>
<div style="text-align: justify;">
Another note, there are few limitations on the browser <a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=7651">about the array size</a>, Firefox has an higher limit but the problem applies too. So, sometimes all the JsVMs suck.<br />
<br /></div>
<h3>
</h3>
<h3 style="text-align: center;">
<span style="font-size: small;">Conclusions</span></h3>
<div style="text-align: justify;">
<br />
Results in Figure.1 are quite self-explanatory. <br />
<br />
From a <b>GWT application standpoint</b> Chrome rules, aka V8 rules.<br />
A java program running inside the Chrome browser is going to perform about 2 times slower, but it's so near to JavaVM, so near. </div>
<div style="text-align: justify;">
Another interesting point is Chrome regular expression execution time: Java Regex bechmarks performs far better in Chrome than in JavaVM; You know, the GWT Regex classes are backed directly <span style="font-size: small;">by</span> low level JsVM functions and they look terrific.</div>
<div style="text-align: justify;">
Kudos to Chrome regex implementation.</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
The Java GWT performance in Opera,Firefox and MSIE sucks a bit, running the code on those browsers is 5 or 10 times slower than running on JavaVM.</div>
<div style="text-align: justify;">
Firefox <b>sucks a lot</b> with numeric workloads or crunching big arrays of numeric data, running 40 (or 50) times slower than the JavaVM .</div>
<div style="text-align: justify;">
I hardly suspect that the GWT developers devote themselves to Chrome optimization, and for this reason GWT compilation for the other browsers sucks. I have no clue, do you have? :-)</div>
<div style="text-align: justify;">
<br />
From an HPC standpoint, GWT apps on Chrome performs very well compared to native Java Virtual Machine apps, so, GWT looks like a good tool for writing distributed High Performance Computing web clients.<br />
<br /></div>
<div style="text-align: justify;">
PS:</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
Comments and criticisms are welcome</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
Fabiano Tarlaohttp://www.blogger.com/profile/09033250755803345003noreply@blogger.com16tag:blogger.com,1999:blog-3278787832518424590.post-53107773943906093902012-10-20T03:13:00.001-07:002012-10-20T03:16:46.469-07:00Linux ReadyBoost alternative aka "how to cache a slow big drive on another quick drive"I have looked forward a way to cache a big slow drive on another quick drive (in a similar way as Windows7 <a href="http://en.wikipedia.org/wiki/ReadyBoost">ReadyBoost</a> already do with flash usb drives).<br />
I have found out this interesting project, <a href="https://github.com/facebook/flashcache" target="_blank">flashcache</a> (GitHub) which is a facebook released code;<br />
Flashcache works at the block device level and take advantege of quick SSD drives.<br />
Microsoft ReadBoost caches little files by taking advantage of slower flash device (access time of slower flash device is still lower than hard disk one).<br />
So, ReadyBosst and flashcache are similar but different.<br />
I'll surely try flashcache in the future but it's a shame it doesn't come bundled with vanilla kernels.<br />
<br />
More infos here: <a href="http://www.facebook.com/note.php?note_id=388112370932">Facebook FlashCache Post</a>Fabiano Tarlaohttp://www.blogger.com/profile/09033250755803345003noreply@blogger.com0tag:blogger.com,1999:blog-3278787832518424590.post-90440271674910465232012-09-19T06:35:00.002-07:002012-09-19T08:39:21.337-07:00Self compile Tesseract 3.0.1 on Debian Squeeze, libleptonica problemIn my case, ./configure fails with an error :<br />
<br />
<br />
<span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;">checking for asin... yes<br />checking for leptonica... yes<br />checking for pixCreate in -llept... no<br />configure: error: leptonica library missing</span></span><br />
<br />
Libleptonica package was correctly installed but something is broken; there are tons of workarounds around about setting paths or other magic options, they are useless.<br />
In order to solve the issue you have to uninstall (by apt-get) the debian libleptonica package and self compile libleptonica by source; After libleptonica self installation (make install), tesseract compilation 'll work as expected.<br />
Get leptonica <a href="http://www.leptonica.org/download.html" target="_blank">source</a>.<br />
Get Tesseract compialtion <a href="http://code.google.com/p/tesseract-ocr/wiki/ReadMe" target="_blank">instructions</a>.Fabiano Tarlaohttp://www.blogger.com/profile/09033250755803345003noreply@blogger.com0tag:blogger.com,1999:blog-3278787832518424590.post-27812926556222645142012-09-15T14:30:00.000-07:002012-09-19T00:02:27.529-07:00Openvpn server with Qnap TS-409 Pro, you can<div style="text-align: justify;">
<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg33yOCImJdKN3avf0TVZXpXSnEQyp3JOj1fcSDfbg9Gz4-l24seNKWhLDVRcLlAbqZ3C9iREKiVFaFKETEMam1M4JgENjToOWRuN7Vv_MdRFueeoeooUbWLu88J7LT1THSziBq-EMxQdc/s1600/OpenVPN.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg33yOCImJdKN3avf0TVZXpXSnEQyp3JOj1fcSDfbg9Gz4-l24seNKWhLDVRcLlAbqZ3C9iREKiVFaFKETEMam1M4JgENjToOWRuN7Vv_MdRFueeoeooUbWLu88J7LT1THSziBq-EMxQdc/s1600/OpenVPN.jpeg" /></a></div>
<br />
<a href="http://web.qnap.com/pro_detail_feature.asp?p_id=85" target="_blank">Qnap ts-409 Pro</a> is an old but powerful 4-bay NAS box (linux ARM) and comes with a nice proprietary webinterface and lot of functionalities.</div>
<br />
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9AMqCN_lGKzZKe4c3nEZxrO-J8d4y9HS1VqauOPF9RJpWt6yr4L6WZmres1S08UXGo-yVpeee3a8DR6ccLvA3jeB2Nldb8fRgDfKY81XfgHkkn80SvvIZSXabPsdmSlkHCt-qsFF_NyM/s1600/QNAP+409.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9AMqCN_lGKzZKe4c3nEZxrO-J8d4y9HS1VqauOPF9RJpWt6yr4L6WZmres1S08UXGo-yVpeee3a8DR6ccLvA3jeB2Nldb8fRgDfKY81XfgHkkn80SvvIZSXabPsdmSlkHCt-qsFF_NyM/s1600/QNAP+409.jpg" /></a><b>The Mission</b></div>
<br />
<div style="text-align: center;">
<i>Add an OpenVPN access to my home network.</i></div>
<div style="text-align: justify;">
I like to have full access to all my home machines (bonus target: grant the home machines access to the VPN subnet as well).</div>
<br />
<div style="text-align: center;">
<b>The Plan</b></div>
<br />
<div style="text-align: justify;">
Installing openvpn on the main router/firewall is usually a good way to go but my home network has, as usual, a low-end TP-Link ADSL router and there is no way to install openvpn into that device.</div>
<div style="text-align: justify;">
The plan is to install the openvpn server instance into my only 24h/24h server, the Qnap TS-409 Pro. </div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<b>Warning </b></div>
<br />
Installing a new software, changing configuration files and writing into flash are, for inexperienced users, always dangerous operations.<br />
<div style="text-align: justify;">
This guide may apply to other similar Qnap NAS models as well but you have to check for correctenss and applicability of this procedure by your own. </div>
I'm not responsible of any damage,<span style="color: #cc0000;"> if you brick your box it's your fault, not mine.</span><br />
<br />
<br />
<div style="text-align: center;">
<b>The Solution</b></div>
<br />
<div style="text-align: justify;">
The Qnap community is very active and the box comes with a lot of QPKG packages, e.g. installing OpenWRT/ipkg support is straightforward.</div>
<div style="text-align: justify;">
This is the <a href="http://wiki.nas-portal.org/index.php/Install_OpenVPN_on_QNAP" target="_blank">step by step guide</a> I have used; here is the summary:</div>
<br />
<ol>
<li>QPKG Optware installion</li>
<li>ipkg update</li>
<li>ipkg install of openvpn package</li>
<li>manual installation of tun.ko module</li>
<li>create CA and certificates (EasyRSA, you can do this your pc)</li>
<li>create server configuration files</li>
<li>create client configuration files</li>
<li>set port forward on router</li>
<li>configure new static route on the router</li>
<li>enable network forwarding on the TS-409 </li>
<li>test configuration</li>
<li>change autostart.sh in order to persist changes thru reboot </li>
</ol>
<div style="text-align: justify;">
It is <b>mandatory to apply</b> these <a href="http://wiki.nas-portal.org/index.php/OpenVPN_Extras" target="_blank">OpenVPN_Extras instructions</a> (9,10) in order VPN to communicate properly with LAN; The tun device works only by routing properly the traffic.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
In next paragraphs I'm not going to rewrite the linked wiki but I'll focus only on the tricky and interesting parts.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: center;">
<b>Details</b> </div>
<br />
<b>Assuptions and network topolgy</b><br />
<br />
Details about my network topology and choices about openvpn service ports.<br />
<br />
Local network IP range: 192.168.55.0/24 (Subnet 255.255.255.0)<br />
Qnap NAS server, home LAN IP: 192.168.55.77<br />
<br />
OpenVPN service listens to 192.168.55.77:22111<br />
ADSL Router forwards (Virtual Server) incoming UDP WAN traffic to port 7788 to the home host 192.168.55.77:22111 (yes, different port)<br />
<br />
<blockquote class="tr_bq" style="background-color: #cfe2f3;">
<br />
Clients will connect to Openvpn thru an external port which looks different from 22111, my choice</blockquote>
<br />
<b>Server configuration</b><br />
<br />
Mount the flash device in order to edit <i>autorun.sh</i>, with command:<br />
<i>mount -t ext2 /dev/mtdblock5 /tmp/createThisDirectoy/</i><br />
<br />
mtdblock5 is the right device name for Qnap TS-409 Pro, check your box guide or wiki in order to find out your own.<br />
<blockquote class="tr_bq" style="background-color: #cfe2f3;">
... pay attention, after hacking the flash please umount in order to save changes properly:<br />
<i>umount /tmp/createThisDirectoy/</i></blockquote>
<br />
My <i>autorun.sh</i> looks like this, this chages are needed in order to restart openvpn automatically after a system shutdown<br />
<div style="font-family: "Courier New",Courier,monospace;">
<span style="font-size: x-small;"><br /></span></div>
<span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;">mkdir /dev/net;</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">mknod /dev/net/tun c 10 200;</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">(sleep 10;insmod /opt/etc/openvpn/modules/tun.ko)&</span></span><br />
<pre><span style="background-color: #b6d7a8;">echo "1" > /proc/sys/net/ipv4/ip_forward</span>
</pre>
<span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;"></span><span style="font-family: "Courier New",Courier,monospace;">(sleep 15; /opt/sbin/openvpn /opt/etc/openvpn/easy.conf)&</span></span><br />
<br />
The green row enables ip forwarding inside TS-409, this will route the VPN traffic from the tun interface towards the home lan interfaces, and the box will forward the packets to the destination machines.<br />
<br />
my current <i>easy.conf</i> looks like this:<br />
<div style="font-family: "Courier New",Courier,monospace;">
<span style="font-size: x-small;"><br /></span> </div>
<span style="font-family: "Courier New",Courier,monospace; font-size: xx-small;"># OpenVPN server configuration QNAP NAS<br /># basic settings </span><br />
<span style="font-family: "Courier New",Courier,monospace; font-size: xx-small;"># you have to choose your port (the listen port of openvpn service)<br />port 22111<br />proto udp<br />dev tun<br />#<br /># detect mtu if the connection is slow.<br />; mtu-test<br />#<br /># define mtu, if necessary<br />; tun-mtu xyz<br />#<br /># define the ip-addresses of the underlying tunnel<br />server 10.8.5.0 255.255.255.0<br />#<br /># Route<br />push "route 192.168.55.0 255.255.255.0" # <--- Enter the ip-address of your home network here!<br />#<br /># certificates & keys<br />dh /opt/etc/openvpn/keys/dh2048.pem<br />ca /opt/etc/openvpn/keys/ca.crt<br />cert /opt/etc/openvpn/keys/server.crt<br />key /opt/etc/openvpn/keys/server.key<br />#<br /># data compression<br />comp-lzo<br />#<br /># allow, that several clients with the same common name log on<br />; duplicate-cn<br />#<br /># different clients can "see" each other through the tunnel.<br />; client-to-client<br />#<br /># Keepalive<br />keepalive 15 120<br />#<br /># verbosity of status messages in the console. Activate for debugging (1-9) possible)<br />; verb 5<br />#<br /># Log files<br /><span style="background-color: #ffe599;">status /share/HDA_DATA/.qpkg/Optware/etc/openvpn/log/status.log</span><br style="background-color: #ffe599;" /><span style="background-color: #ffe599;">log-append /share/HDA_DATA/.qpkg/Optware/etc/openvpn/log/openvpn.log</span></span><br />
<span style="font-family: "Courier New",Courier,monospace; font-size: xx-small;"><span style="background-color: white;">#</span><br /># Run as daemon (activate, after everything is set up properly)<br />; daemon<br />#<br /># Management Interface. Access with "telnet localhost 7505"<br />management localhost 7505</span><span style="font-size: xx-small;"><br /></span> <br />
<br />
<br />
<blockquote class="tr_bq">
<blockquote class="tr_bq" style="background-color: #d0e0e3;">
<b>Notes:</b><br />
The TS-409 Pro Optware folder is located (by QPKG installer) in a path which differs from the wiki guide, in my case my path is:<span style="font-family: "Courier New",Courier,monospace; font-size: xx-small;"> /share/HDA_DATA/.qpkg/Optware/</span>
<br />
Let's check optware path and files location on your box and change the script accordingly.</blockquote>
</blockquote>
<br />
<br />
<b>Client configuration</b><br />
<br />
The clients, with the proper private keys and certificates, connect to the OpenVPN server using this configuration file:<br />
<div style="font-family: "Courier New",Courier,monospace;">
<span style="font-size: xx-small;"><br /></span></div>
<span style="font-family: "Courier New",Courier,monospace; font-size: xx-small;"># connect to QNAP OpenVPN Server<br /># </span><br />
<span style="font-family: "Courier New",Courier,monospace; font-size: xx-small;">port 7788<br />proto udp<br />dev tun<br />tls-client<br />remote youraccountname.dynds.net 7788 # <--- enter your dyndns-account here!<br />pull<br /># set mtu, if necessary<br />; tun-mtu xyz<br />#<br />resolv-retry infinite<br />nobind<br />persist-key<br />persist-tun<br /># certificates and keys<br /># Note the double \\ in the path for a windows config<br />ca ca.crt<br />cert your.crt<br />key your.key</span><br />
<span style="font-family: "Courier New",Courier,monospace; font-size: xx-small;"><br /></span>
<span style="font-family: "Courier New",Courier,monospace; font-size: xx-small;">ns-cert-type server</span><br />
<span style="font-family: "Courier New",Courier,monospace; font-size: xx-small;">verb 4</span><br />
<span style="font-family: "Courier New",Courier,monospace; font-size: xx-small;">comp-lzo</span><br />
<span style="font-family: "Courier New",Courier,monospace; font-size: xx-small;"></span><br />
<span style="font-family: "Courier New",Courier,monospace; font-size: xx-small;"></span><br />
There are redundant settings and useless options too but, you know, this configuration file works :-)<br />
<br />
<br />
<b>Router configuration</b><br />
<br />
The router has to do two operations:<br />
<ul>
<li>forwards (Virtual Server) incoming UDP traffic to port 7788 to 192.168.55.77:22111 </li>
<li>Routes all the packets with destination 10.8.5.0/24 to the gateway 192.168.55.77</li>
</ul>
The first one is a basic router configuration, usually named "virtual server", the second one is a bit difficult and you net to set a static route into your router.<br />
The rule is this:<br />
<br />
<table border="1" cellpadding="4" cellspacing="0" style="width: 100%;"><tbody>
<tr>
<td class="hd">Destination</td>
<td class="hd">Subnet Mask</td>
<td class="hd">Gateway</td>
<td class="hd">Interface</td>
<td class="hd">x</td>
</tr>
<tr>
<td>10.8.5.0</td>
<td>255.255.255.0</td>
<td>192.168.55.77</td>
<td>br0</td></tr>
</tbody></table>
<br />
br0 is the internal LAN bridge.<br />
<br />
<i>Why this route? </i><br />
<br />
This static route is necessary for the LAN to send back packets to the VPN.. the LAN's machines are going to send all the VPN packets to the router (the destination is another subnet) and without this rule they are going to be lost o rejected.<br />
<br />
<b>Conclusions</b><br />
<br />
I have only changed few details from the original wiki and I have succefully achived my objective.<br />
Being able to connect to my home network thru VPN, being able to connect and communicate to all machines inside.<br />
<span style="font-family: "Courier New",Courier,monospace; font-size: xx-small;"><span style="background-color: #ffe599;"><br /></span></span>
<span style="font-family: "Courier New",Courier,monospace; font-size: xx-small;"><span style="background-color: #ffe599;"><br /></span></span>
<span style="font-family: "Courier New",Courier,monospace; font-size: xx-small;"><span style="background-color: #ffe599;"><br /></span></span>
<span style="font-family: "Courier New",Courier,monospace; font-size: xx-small;"><span style="background-color: #ffe599;"></span></span>Fabiano Tarlaohttp://www.blogger.com/profile/09033250755803345003noreply@blogger.com3tag:blogger.com,1999:blog-3278787832518424590.post-20870121352992631252012-07-07T00:25:00.001-07:002012-07-08T01:13:06.551-07:00OO-GC Language for standalone executables (Part 2)<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.file-extensions.org/imgs/company-logo/3353/mono.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="http://www.file-extensions.org/imgs/company-logo/3353/mono.png" width="167" /></a></div>
<br />
This is an update on the <a href="http://thegoodcodeinn.blogspot.it/2012/05/oo-gc-language-for-standalone.html" target="_blank">topic</a>.<br />
In the first part I have presented my findings about few languages and tools, hopefully I have inspired a talented friend of mine (I'll refer to him as <i>The Amazing Vlad</i>,or simply <i>The Amazing</i>)<br />
<i>The Amazing</i> works with C#/mono and has tested the Mono's mkbundle for real (in order to create a standalone executable); mkbundle isn't working well as expected, so <b>I have removed mono from the winners list</b>.<br />
Here I paste the translated friend's mail:<br />
<br />
<br />
Hi,<br />
<div style="text-align: justify;">
I am looking torward creating a <i>portable version</i> of KeePass for Linux.</div>
<div style="text-align: justify;">
I have installed <b>mono 2.1x</b> on CentOS5 and I have tried creating a bundle for KeePass by using <i>--deps --static</i>.</div>
<div style="text-align: justify;">
The first option might bundle all the needed managed assemblies, the sedcond one might statically link the native mono library. (lib_mono_something...)</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
It turns out that mkbundle doesn't link the other needed native libraries, e.g. libgdiplus which is called by WinForms applications.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
I have tried using the generated bundle on CentOS6, and I have faced these problems:</div>
<h4 style="font-weight: normal; text-align: center;">
<b> 1</b></h4>
<div style="text-align: justify;">
It is impossibile to have a priori knowledge (using <i>ldd</i> command) about dynamic library dependencies because <b>managed assemblies load them at runtime</b> .e.g.<i> libc</i>. </div>
<div style="text-align: justify;">
<i>Ldd</i> has stated libc as a dependency but something inside the bundle looked for <i>libc.so</i> which it doesn't exist. The error arises because the real name is <i>libc.so.6</i>.</div>
<div style="text-align: justify;">
But how does Mono know about the real name of libc library? Quite simple, <b>mono has a configuration file with a number of mapping <i>directives</i></b> <dllmap> for windows dll and dynamic linux libraries.</dllmap></div>
<div style="text-align: justify;">
I have fixed the issue by copying and renaming the config as NameExecutable.exe.config and I have forced mkbundle to add this file to the bundle.</div>
<br />
<h4 style="text-align: center;">
2 </h4>
<div style="text-align: justify;">
The program still has kept failing and ranting about lacking libgdiplus. As mentioned above, no native dynamic library is bundled with mono (by using --static). So, you are forced copying all the needed libraries with your application (plus their own dependencies).</div>
<div style="text-align: justify;">
I have copied libgdiplus.so.x and It still failed cause lacking <i>MonoFuckedLongName.dll</i> which doesn't exist in my system!!</div>
<div style="text-align: justify;">
<b>I gave up</b></div>
<br />
NOTE: A simple commandline Hello World application still works flawless, with --deps --static ; no tricks or workarounds are needed.<br />
<div style="text-align: justify;">
<b>Conclusion</b></div>
<br />
<div style="text-align: justify;">
<i>Mkbundle</i> <b>doesn't work well with complex applications</b> and lot of libraries depencies, but it <b>might work well for simple commandline applications</b>. Perhaps WinForms might work by copying libgdiplus with your application but I have not tested a graphical hello world application yet. </div>
<br />
<div style="text-align: right;">
The Amazing</div>Fabiano Tarlaohttp://www.blogger.com/profile/09033250755803345003noreply@blogger.com0tag:blogger.com,1999:blog-3278787832518424590.post-11445689345981261872012-07-06T10:35:00.001-07:002012-07-06T10:39:36.583-07:00Machine Learning Lab - IngInf@UniTS: Automatic generation of regular expressions<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPZXYIeP1NnmFKNvlQtqkmKKGmWgJK8xQe0WBmwhUeX9zl4-C1i1M3KKq6wgM7wXcX7F0wpthbfmgOuTcj9I7mbrj_jMMUhBPpvuvJlhkMXrxSEn88gKzlXp2ky7o3IZc1gOOuUbvk2Jw/s940/Immagine+189.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="123" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPZXYIeP1NnmFKNvlQtqkmKKGmWgJK8xQe0WBmwhUeX9zl4-C1i1M3KKq6wgM7wXcX7F0wpthbfmgOuTcj9I7mbrj_jMMUhBPpvuvJlhkMXrxSEn88gKzlXp2ky7o3IZc1gOOuUbvk2Jw/s320/Immagine+189.jpg" width="320" /></a></div>
My colleagues at the Machine Learning Laboratory (University in Trieste) have developed a demo of their great engine for the automatic generation of regular expressions based on genetic programming.<br />
Let's try this web application and have fun! (if you are Regex-addicted as I am)<br />
<br />
<a href="http://procone.blogspot.com/2012/07/automatic-generation-of-regular.html?spref=bl">Machine Learning Lab - IngInf@UniTS: Automatic generation of regular expressions</a>: Today we launched the online prototype of our automatic regular expressions generator! Take a look at regex.inginf.units.it , all comments ...<br />
<br />
Or click on the direct link <a href="http://regex.inginf.units.it/">http://regex.inginf.units.it/</a>Fabiano Tarlaohttp://www.blogger.com/profile/09033250755803345003noreply@blogger.com0tag:blogger.com,1999:blog-3278787832518424590.post-52343523325014317762012-05-27T04:13:00.000-07:002012-07-08T01:14:51.356-07:00OO-GC Language for standalone executables<div style="text-align: justify;">
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.</div>
<div style="text-align: justify;">
Performance and portability are highly appreciated features<br />
<br /></div>
<h4>
<a href="http://www.oracle.com/technetwork/java/index.html" target="_blank">JAVA</a></h4>
<div style="text-align: justify;">
Great language, high performance, big user base and lot of resources but there is <b>no way to bundle a minimal VM</b> and dependencies in a single executable, so ,you are in need to move the full framework around with your tiny console application.</div>
<div style="text-align: justify;">
There is also the <a href="http://gcc.gnu.org/java/" target="_blank">GCJ</a> 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.<br />
<b>UPDATE</b>: This project, <a href="http://oss.readytalk.com/avian/" target="_blank">Avian</a> is a "lightweight Java VM and <a href="http://en.wikipedia.org/wiki/Library_%28computing%29" title="Library (computing)">class library</a> designed to provide a useful subset of Java's features, suitable for building self-contained applications"[<a href="http://en.wikipedia.org/wiki/Avian_%28Java_virtual_machine%29" target="_blank">Wikipedia</a>]. This looks like <b>the way</b> to build a standalone executable from current Java code. Java + Avian looks like a second (au pair) <b>winner</b>.<br />
I hope to try out this soon.</div>
<br />
<br />
<h4>
<a href="http://caml.inria.fr/" target="_blank">OCAML (Objective CAML)</a></h4>
<div style="text-align: justify;">
It looks promising.</div>
<div style="text-align: justify;">
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.</div>
<div style="text-align: justify;">
Base Ocaml and 3th-party developers provides a fair amount of libraries. </div>
<div style="text-align: justify;">
The Ocaml cons are that it <b>doesn't support real multithreading</b> (you have to use 3-party libraries, but it looks just an hack).</div>
<div style="text-align: justify;">
Another issue is about being a bit unusual (<b>functional style</b> programming is not the first choice) language with a <b>little user base</b>.</div>
<br />
<h4>
<a href="http://www.mono-project.com/Main_Page" target="_blank">C# (MONO)</a></h4>
<div style="text-align: justify;">
It looks more promising.</div>
<div style="text-align: justify;">
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.</div>
<div style="text-align: justify;">
Good single thread performance as well as support for real multithreading.</div>
<div style="text-align: justify;">
About having a standalone executable, you can make it by using <a href="http://www.mono-project.com/Guide:Running_Mono_Applications" target="_blank">mkbundle</a>.(I have to check it out)</div>
<div style="text-align: justify;">
<strike>It looks like the <b>winner</b>. </strike>updated in <a href="http://thegoodcodeinn.blogspot.it/2012/07/oo-gc-language-for-standalone.html" target="_blank">Part2</a></div>
<br />
<h4>
<a href="http://golang.org/" target="_blank">GO</a></h4>
<div style="text-align: justify;">
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.</div>
<div style="text-align: justify;">
At the moment I think I have understood two reasons behind the Google Go project:</div>
<ul>
<li>provide an (about) OO, garbage collected, language which compiles to a native executable</li>
<li>provide a new approach to OO programming, Go doesn't provide inheritance or method overloading but enforces interfaces as unique alternative.</li>
</ul>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Go developers state that<b> inheritance is a dangerous feature</b>; you know, inheritance is <b>not</b> 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.</div>
<div style="text-align: justify;">
Code reuse is still important and it is possible with Go by using composition and <b>interfaces</b> (instead of inheritance). This is intriguing.</div>
<div style="text-align: justify;">
I think that the GO language deserves further inspection.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
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!</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
It doesn't fit with the topic but I also suggest my readers to have a look at this interesting article <a href="http://www.drdobbs.com/mobile/232400093%20%20%20" target="_blank">programming language trends</a>.</div>
<div style="text-align: justify;">
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. </div>
<div style="text-align: justify;">
I'll let you updated on the topic.</div>
<div style="text-align: justify;">
<br />
Further details in <a href="http://thegoodcodeinn.blogspot.it/2012/07/oo-gc-language-for-standalone.html" target="_blank">Part 2</a><br />
<br /></div>Fabiano Tarlaohttp://www.blogger.com/profile/09033250755803345003noreply@blogger.com0