Showing posts with label linux. Show all posts
Showing posts with label linux. Show all posts

30 July 2009

Asterisk: The Future of Telephony

First they ignore you, then theylaugh at you, then they fight you, then you win.
— MahatmaGandhi
Prima ti ignorano, poi ridono di te, poi ti combattono, poi vinci.
MahatmaGandhi —
 
Although Alexander Graham Bell is most famously remembered as the father of the telephone, the reality is that during the latter half of the 1800s, dozens of minds were at work on the project of carrying voice over telegraph lines. These people were mostly business-minded folks, looking to create a product through which they might make their fortunes. We have come to think of traditional telephone companies as monopolies, but this was not true in their early days. The early history of telephone service took place in a very competitive environment, with new companies springing up all over the world, often with little or no respect for the patents they might be violating. Some of the monopolies got their start through the waging (and winning) of patent wars.Alexander Graham Bell è famoso soprattutto per essere il padre del telefono, ma la realtà è che nell'ultima metà del 1800 furono dozzine le menti al lavoro sull'idea di trasmettere la voce lungo le linee del telegrafo. Tutta gente votata al business, che cercava di creare un prodotto con cui fare fortuna. Ormai siamo portati a pensare alle compagnie telefoniche tradizionali come monopòli, ma all'inizio non era così. La storia del telefono è partita in un ambiente molto competitivo, con compagnie che fiorivano in tutto il mondo, spesso con poco o punto rispetto per eventuali violazioni di brevetti. Alcuni monopoli sono partiti proprio tra dichiarazioni di guerra sui brevetti.
It’s interesting to contrast the history of the telephone with the history of Linux and the Internet. While the telephone was created as a commercial exercise, and the telecom industry was forged through lawsuits and corporate takeovers, Linux and the Internet arose out of the academic community, which has always valued the sharing of knowledge over profit. The cultural differences are obvious. Telecommunications technologies tend to be closed, confusing, and expensive, while networking technologies are generally open, well documented, and competitive. E' interessante contrapporre la storia del telefono con la storia di Linux e di Internet. Mentre il telefono fu creato come prodotto commerciale e l'industria telefonica fu forgiata da cause legali e acquisizioni di aziende, Linux e Internet sorsero dalla comunità accademica, che ha sempre considerato più importante la diffusione della conoscenza rispetto al profitto. Le differenze culturali sono ovvie: le tecnologie di telecomunicazioni tendono ad essere chiuse, confuse e costose, mentre le tecnologie di rete sono generalmente aperte, ben documentate e competitive.


Closed Thinking


Pensiero Chiuso
If one compares the culture of the telecommunications industry to that of the Internet, it is sometimes difficult to believe the two are related. The Internet was designed by enthusiasts, whereas contributing to the development of the PSTN is impossible for any individual to contemplate. This is an exclusive club; membership is not open to just anyone. Se si paragona la cultura dell'industria delle telecomunicazioni con quella di Internet, a volte è difficile credere che siano correlate. Internet fu progettato da entusiasti, mentre è impossibile pensare al contributo di un singolo individuo allo sviluppo delle reti PSTN: è un club esclusivo, l'appartenenza non è aperta a chiunque.
The International Telecommunication Union (ITU) clearly exhibits this type of closed thinking. If you want access to their knowledge, you have to be prepared to pay for it. Membership requires proof of your qualifications, and you will be expected to pay tens of thousands of dollars in annual dues. Although the ITU is the United Nations’s sanctioned body responsible for international telecommunications, many of the VoIP protocols (SIP, MGCP, RTP, STUN) come not from the hallowed halls of the ITU, but rather from the IETF (which publishes all of its standards free to all, and allows anyone to submit an Internet Draft for consideration).L'Unione per le Telecomunicazioni Internazioni (ITU) è un chiaro esempio di questo tipo di pensiero chiuso. Se vuoi avere accesso alla loro conoscenza, devi essere pronto a pagare. L'appartenenza richiede un'abilitazione e bisogna mettere in conto abbonamenti da decine di migliaia di dollari all'anno. Nonostante l'ITU sia l'organo delle Nazioni Unite resposabile per le telecomunicazioni internazionali, molti dei protocolli VoIP (SIP, MGCP, RTP, STUN) non vengono dalle sale consacrate dell'ITU, ma piuttosto dall'IETF (che dà a tutti libero accesso a tutti i suoi standard e permette a chiunque di inviare un Internet Draft perché sia preso in considerazione).
Open protocols such as SIP may have a tactical advantage over ITU protocols such as H.323 due to the ease with which one can obtain them. Although H.323 is widely deployed by carriers as a VoIP protocol in the backbone, it is much more difficult to find H.323-based endpoints; newer products are far more likely to support SIP. The success of the IETF’s open approach has not gone unnoticed by the mighty ITU. It has recently become possible to download up to three documents free of charge from the ITU web site.† Openness is clearly on their minds. Recent statements by the ITU suggest that there is a desire to achieve "Greater participation in ITU by civil society and the academic world." Mr. Houlin Zhao, the ITU’s Director of the Telecommunication Standardization Bureau (TSB), believes that "ITU should take some steps to encourage this."Protocolli aperti come il SIP possono avere vantaggi strategici sui protocolli ITU come l'H.323 proprio per la facilità con cui si possono ottenere. Nonostante l'H.323 sia usato diffusamente da carriers come protocollo VoIP nelle dorsali, è molto più difficile trovare terminali H.323; è molto più probabile che i prodotti più recenti supportino il SIP. Il successo dell'approccio aperto dell'IETF non è passato inosservato alla potente ITU: recentemente è diventato possibile scaricare gratuitamente dal sito dell'ITU fino a tre documenti. Hanno chiaramente in mente il mondo open. Dichiarazioni recenti dell'ITU indicano un desiderio di raggiungere "maggiore partecipazione nell'ITU da parte della società civile e del mondo accademico". Houlin Zhao, direttore dell'Ufficio per le Standardizzazioni nelle Telecomunicazioni (TSB) pensa che "sia necessario fare alcuni passi per incoraggiarla".
The roadmap to achieving this openness is unclear, but they are beginning to realize the inevitable. [...] Non è chiaro quale sarà la strada per raggiungere questa apertura, ma si stanno accorgendo dell'inevitabile. [...]


Limited Standards
Compliancy



Limitata compatibilità
agli standard

One of the oddest things about all the standards that exist in the world of legacy telecommunications is the various manufacturers’ seeming inability to implement them consistently. Each manufacturer desires a total monopoly, so the concept of interoperability tends to take a back seat to being first to market with a creative new idea. The ISDN protocols are a classic example of this. Deployment of ISDN was (and in many ways still is) a painful and expensive proposition, as each manufacturer decided to implement it in a slightly different way. ISDN could very well have helped to usher in a massive public data network, 10 years before the Internet. Unfortunately, due to its cost, complexity, and compatibility issues, ISDN never delivered much more than voice, with the occasional video or data connection for those willing to pay. ISDN is quite common (especially in Europe, and in North America in larger PBX implementations), but it is not delivering anywhere near the capabilities that were envisioned for it. As VoIP becomes more and more ubiquitous, the need for ISDN will disappear.Una delle cose più strane sugli standard del mondo delle telecomunicazioni è l'incapacità dei vari produttori di implementarli consistentemente. Ogni costruttore vorrebbe un monopolio totale, così che il concetto di interoperabilità cede il passo all'idea di arrivare per primi sul mercato con una nuova idea creativa. I protocolli ISDN sono un chiaro esempio: la distribuzione dell'ISDN era (e per molti versi lo è ancora) una cosa difficilissima e costosissima, dal momento che ogni produttore aveva deciso di implementarlo in una maniera sottilmente diversa. L'ISDN avebbe potuto benissimo portare gli utenti verso un uso massicio di una rete dati pubblica, 10 anni prima di Internet. Sfortunatamente, per costi, complessità e problemi di compatibilità, l'ISDN non ha mai trasportato molto più che traffico voce, raramente dati e video per chi intendeva pagare. L'ISDN è piuttosto comune (specialmente in Europa e nelle PBX più grandi del Nord America), ma da nessuna parte ha mai veicolato le potenzialità che avevano previsto. Man mano che il VoIP si diffonderà, il bisogno di linee ISDN scomparità.


Slow Release Cycles


Cicli di rilascio lenti
It can take months, or sometimes years, for the big guys to admit to a trend, let alone release a product that is compatible with it. It seems that before a new technology can be embraced, it must be analyzed to death, and then it must pass successfully through various layers of bureaucracy before it is even scheduled into the development cycle. Months or even years must pass before any useful product can be expected. When those products are finally released, they are often based on hardware that is obsolete; they also tend to be expensive and to offer no more than a minimal feature set. These slow release cycles simply don’t work in today’s world of business communications. On the Internet, new ideas can take root in a matter of weeks and become viable in extremely short periods of time. Since every other technology must adapt to these changes, so too must telecommunications. Open source development is inherently better able to adapt to rapid technological change, which gives it an enormous competitive advantage. The spectacular crash of the telecom industry may have been caused in large part by an inability to change. Perhaps that continued inability is why recovery has been so slow. Now, there is no choice: change, or cease to be. Community-driven technologies such as Asterisk will see to that.Possono volerci mesi, a volte anni, perché i grandi si accorgano di una tendenza e anche solo rilascino un prodotto che è compatibile con essa. Sembra che prima che una nuova tecnologia venga adottata debba essere analizzata fino alla morte e attraversare diversi strati di burocrazia prima che sia anche solo pianificato di inserirla nel ciclo produttivo. Mesi, o anche anni devono passare prima di poter vedere un prodotto utile. E, quando questi prodotti sono finalmente rilasciati, sono basati spesso su hardware obsoleto, tendono ad essere costosi e non offrono che un minimo insieme di funzionalità.Questo ciclo di rilascio lento semplifcemente non funziona nell'odierno mondo delle comunicazioni. Su Internet, nuove idee possono mettere radici in poche settimane e diventare operative in periodi di tempi brevissimi. E dato che tutte le altre tecnologie devono adattarsi a questi cambiamenti, anche le telecomunicazioni sono costrette a farlo. Lo sviluppo open source è intrinsecamente più capace di adattarsi a rapidi cambiamenti tecnologici, il che gli conferisce un enorme vantaggio competitivo.Il crollo clamoroso delle compagnie telefoniche può essere stato causato in gran parte proprio da questa incapacità di cambiare. Forse questa incapacità prolungata è anche il motivo per cui il recupero è così lento. Ora non c'è più scelta: cambiare, o smettere di esistere. Ne saranno testimoni tecnologie guidate dalla comunità, come Asterisk.


Refusing to Let Go of the Past and Embrace the Future


Rifiutare di lasciar andare il passato eabbracciare il futuro
Traditional telecommunications companies have lost touch with their customers. While the concept of adding functionality beyond the basic telephone is well understood, the idea that the user should be the one defining this functionality is not. Nowadays, people have nearly limitless flexibility in every other form of communication. They simply cannot understand why telecommunications cannot be delivered as flexibly as the industry has been promising for so many years. The concept of flexibility is not familiar to the telecom industry, and very well might not be until open source products such as Asterisk begin to transform the fundamental nature of the industry.Le compagnie telefoniche tradizionali hanno perso il contatto con i loro clienti. Mentre il concetto di aggiungere funzionalità che vadano al di là del telefono di base è ben compresa, l'idea che debba essere l'utente a definire queste funzionalità non lo è affatto. Oggigiorno le persone hanno una flessibilità praticamente illimitata in tutte le altre forme di comunicazione. Semplicemente non capiscono perché le varie telecom non siano capaci di fornire la flessibilità che l'industria è andata promettendo per così tanti anni. Il concetto di flessibilità non è familiare alle industrie di telecomunicazioni e probabilmente non lo sarebbe stato finchè prodotti open source come Asterisk non avessero cominciato a trasformare la natura fondamentale di quest'industria.
This is a revolution similar to the one Linux and the Internet willingly started over 10 years ago (and IBM unwittingly started with the PC, 15 years before that). What is this revolution? The commoditization of telephony hardware and software, enabling a proliferation of tailor-made telecommunications systems.
[...]
E' una rivoluzione simile a quella che Linux e Internet volevano iniziare oltre 10 anni fa (e che IBM involontariamente iniziò con il PC, 15 anni prima). Che rivoluzione? La commercializzazione della telefonia, tanto hardware quanto software, che ha permesso la proliferazione di sistemi di telecomunicazioni su misura.
[...]


The Itch That Asterisk Scratches


Le soddisfazioni di Asterisk
In this era of custom database and web site development, people are not only tired of hearing that their telephone system “can’t do that,” they quite frankly just don’t believe it. The creative needs of the customers, coupled with the limitations of the technology, have spawned a type of creativity born of necessity [...]. The development methodology of a proprietary telephone system dictates that it will have a huge number of features, and that the number of features will in large part determine the price. Manufacturers will tell you that their products give you hundreds of features, but if you only need five of them, who cares? Worse, if there’s one missing feature you really can’t do without, the value of that system will be diluted by the fact that it can’t completely address your needs. The fact that a customer might only need five out of five hundred features is ignored, and that customer’s desire to have five unavailable features that address the needs of his business is dismissed as unreasonable. Until flexibility becomes standard, telecom will remain stuck in the last century—all the VoIP in the world notwithstanding. Asterisk addresses that problem directly, and solves it in a way that few other telecom systems can. This is extremely disruptive technology, in large part because it is based on concepts that have been proven time and time again: “the closed-source world cannot win an evolutionary arms race with open-source communities that can put orders of magnitude more skilled time into a problem.”†In quest'era di database personalizzati e sviluppo di siti web, la gente non solo è stanca di sentire che il proprio sistema telefonico "questa cosa non la può fare", semplicemente non ci credono. Le esigenze creative del cliente, assieme alle limitazioni della tecnologia, hanno generato un tipo di creatività nata dalla necessità [...].La metodologia di sviluppo di un sistema telefonico proprietario impone che debba avere un enorme numero di caratteristiche e che il numero di caratteristiche determinerà in gran parte il prezzo. I produttori vi diranno che il loro prodotto vi offre centinaia di caratteristiche, ma se avete bisogno soltanto di cinque di quelle caratteristiche, che importa? Peggio, se c'è una sola caratteristica che manca di cui non potete davvero fare a meno, il valore di quel sistema sarà sminuito dal fatto che non risponderà appieno alle vostre esigenze. Il fatto che il cliente potrebbe aver bisogno solo di 5 caratteristiche fra 500 è semplicemente ignorato e i 5 desiderata del cliente non disponibili saranno considerati come irragionevoli.Finchè la flessibilità non diventerà standard, le telecom rimarranno bloccate al secolo scorso — nonostante il mondo intero sia passato al VoIP.Asterisk affronta il problema in maniera diretta, e lo risolve in un modo che pochi altri sistemi di telecomunicazione possono. E' una tecnologia estremamente dirompente, in gran parte perché è basata su concetti che sono stati dimostrati più e più volte: "il mondo closed-source non può vincere una battaglia evolutiva con le comunità open-source, che possono mettere sul campo ordini di grandezza in più di tempo qualificato su un problema."


Open Architecture


Architettura aperta
One of the stumbling blocks of the traditional telecommunications industry has been its apparent refusal to cooperate with itself. The big telecommunications giants have all been around for over a hundred years. The concept of closed, proprietary systems is so ingrained in their culture that even their attempts at standards compliancy are tainted by their desire to get the jump on the competition, by adding that one feature that no one else supports. For an example of this thinking, one simply has to look at the VoIP products being offered by the telecom industry today. While they claim standards compliance, the thought that you would actually expect to be able to connect a Cisco phone to a Nortel switch, or that an Avaya voicemail system could be integrated via IP to a Siemens PBX, is not one that bears discussing. Uno degli scogli dell'industria delle telecomunicazioni tradizionale è stata il suo apparente rifiuto di cooperare con se stessa. I grandi giganti delle telecomunicazioni sono stati operativi per oltre cento anni. Il concetto di sistemi chiusi e proprietari è così incastonato nella loro cultura che anche i loro tentativi di compatibilità agli standard sono viziati dal loro desiderio di passare alla competitività, aggiungendo quell'unica caratteristica che nessun altro supporta. Basta guardare ai prodotti VoIP offerti oggi dalle industrie di telecomunicazioni. Mentre dichiarano compatibilità agli standard, il pensiero che tu possa davvero aspettarti di connettere un telefono Cisco con uno switch Nortel, o che un sistema voicemail Avaya possa essere integrato via IP con un PBX Siemes, non è cosa su cui perdere tempo a pensarci.
In the computer industry, things are different. Twenty years ago, if you bought an IBM server, you needed an IBM network and IBM terminals to talk to it. Now, that IBM server is likely to interconnect to Dell terminals though a Cisco network (and run Linux, of all things). Anyone can easily think of thousands of variations on this theme. If any one of these companies were to suggest that we could only use their products with whatever they told us, they would be laughed out of business. Nell'industria dei computer le cose sono diverse. Vent'anni fa, se compravi un server IBM, avevi bisogno di una rete IBM e di terminali IBM per poterci parlare. Oggi un server IBM è probabilmente connesso a terminali Dell tramite una rete Cisco (e, di più, ci gira su Linux). E si possono facilmente fare migliaia di variazioni sul tema. Se una di queste compagnie dovesse farci intendere che potremmo usare soltanto i loro prodotti con qualsiasi cosa ci raccontino, gli rideremmo semplicemente in faccia.
The telecommunications industry is facing the same changes, but it’s in no hurry to accept them.
[...]
L'industria delle telecomunicazioni sta affrontando gli stessi cambiamenti, ma non ha alcuna fretta di accettarli.
[...]

17 May 2009

Konsole 2.2 e KDE 4.2

Lavoro nuovo, ufficio nuovo, computer nuovo, kubuntu nuova: Jaunty Jackalope. Sono passati sei mesi, KDE4 è cresciuto, senza dubbio (nel senso che all'inizio era davvero inutilizzabile!), ma ci sono ancora molte cose da sistemare. E non si tratta solo di aspetti marginali: qui c'è Konsole che manca di funzionalità basilari che minano pesantemente l'usabilità.
Una per tutte, l'impossibilità di poter configurare in alcun modo le dimensioni della finestra all'avvio di ogni sessione. C'era, semplicissima, l'opzione --geometry, ma viene semplicemente ignorata. Invece ogni nuova Konsole si apre con le dimensioni che (h)a(veva) la finestra di Konsole che per ultima è stata ridimensionata. Un disastro.
Ho sperato che compiz (ebbene sì, uso ancora compiz come compositing window manager) potesse venirmi in aiuto col suo Size rules in Window Rules, ma è possibile solo fissare le dimensioni di certe finestre in maniera "permanente", non solo all'avvio, col risultato che se si prova poi, durante l'utilizzo di Konsole, a ridimensionare la finestra, questa ritornerà ineluttabilmente, di lì a poco, in un tempo apparentemente casuale, alle dimensioni fissate con compiz.
Un'altra grave pecca, di cui però — attenzione, segue spoiler! — sono riuscito a venire a capo, è quella per cui non è possibile disattivare le impostazioni sul flow control via Ctrl+S/Ctr+Q (cfr. screenshot qui di lato). Il risultato è che ogni volta che siete corsi troppo in fretta nella backward history search con Ctrl+R e volete invertire la direzione con Ctrl+S (forward history search), vi ritrovate con la shell bloccata. Per non parlare di emacs -nw, in cui sarete costretti a digitare esplicitamente nel minibuffer tutti quei comandi che hanno un Ctrl+S nella sequenza di shortcut (non solo il forward history search, dunque, ma anche l'altrettanto usato save-buffer...!)
Per fortuna almeno per questo problema del flow control sono riuscito a trovare una soluzione. Nonostante la cosa possa apparire strana (e infatti non ho capito bene come possa un'opzione di shell modificare un comportamento di Konsole, dal momento che mi figuro il secondo come un semplice wrapper della prima) è sufficiente disattivare l'attributo ixon di xterm con stty. Che tradotto significa che basta aggiungere nel .bashrc la riga
stty -ixon
Ad ogni modo, a parte questi disagi comunque abbastanza gravi, KDE4 comincia ad essere usabile. Sul laptop continuo a mantenere la vecchia e gloriosa Hardy Heron con KDE3.5, ma in ufficio sto appunto usando la 9.04. Continuo a trovare completamente inutile tutto l'ambaradan della widget dashboard (sono affezionato al mio conky che per fortuna, in un modo comunque abbastanza rattoppato — una per tutte, le finestre di conky non restano appiccicate sul desktop quando eseguo uno show desktop per ridurre tutte le finestre ad icona... e la cosa è particolarmente seccante! — riesco ad usare anche con KDE4) e mi capita spesso di non trovare l'opzione per settare qualcosa.
Ma insomma, in qualche modo, mi arrangio.

03 May 2009

/tmp in RAM

Usate spesso lo stand-by (suspend-to-ram) e/o l'ibernazione (suspend-to-disk)? E in particolare l'usate lasciando il vostro firefox aperto, con le sue due o tre finestre, ciascuna con una ventina o più di tab attivi? E avete notato che spesso, nel resume dopo il suspend, un'intensa attività di I/O del disco rende la macchina completamente inutilizzabile per un tempo piuttosto lungo? Tanto più lungo quanto più lungo è stato il tempo in cui il computer è rimasto sospeso?
Be', allora andate pure a ripescare quel post di pollycoke in cui vi spiegava come montare la directory /tmp in RAM: forse sarà inutile per tutto il resto, ma scoprirete che quelle lunghe attese diventeranno un ricordo del passato, e potrete finalmente davvero "accendere" e usare il vostro laptop in tempi rapidissimi!

14 November 2008

CBCR

Cresci Bene Che Ripasso.
Ma il dramma è che, per aspettare te, mi tocca rinucniare pure allo stambecco!
 
Ok, partiamo dall'inizio.
 
Come sapete, a fine ottobre è stata rilasciata la nuova versione di Ubuntu, lo Stambecco Intrepido. Per Kubuntu questo significa l'adozione ufficiale di KDE4(.1), la nuovissima versione de Il Miglior Desktop Environment™, che già aveva fatto venire l'acquolina in bocca.
Ma un'ombra sinistra comincia ad incombere sin dall'inizio, quando leggo che l'adozione di KDE4 sarà consustanziale ad un abbandono definitivo di KDE3(.5). E allora io comncio a farmi delle domande, tipo se davvero KDE4 fa per me.
Sì, ma, più che pensarti e pensarti, eventualmente incontrarti vorrei, e allora, prima di piallare davvero tutto, installo KDE4 su Kubuntu8.4, giusto per farci un giro.
 
Ed è subito una gran delusione.
 
Non so proprio da dove cominciare.
Potrei partire con il composite manager e dire che anche attivando gli effetti speciali siamo ancora anni luce distanti da compiz-fuison, e come sapete per me non è solo una questione estetica. Ma questo sarebbe il meno, perchè scopro subito che posso far partire compiz+emerald senza che KDE4 si offenda troppo.
Scopro poi che KDE4 ha sostituito DCOP con D-Bus, che non so bene nemmeno cosa sia un inter-process communication system, ma so solo che improvvisamente non funzionano più le mie bellissime shortcut per modificare al volo il colore dello sfondo di Konsole (di gran lunga l'applicazione che uso maggiormente) a seconda della macchina remota su cui sono loggato, in modo da poterne riconoscere al volo una fra le decine e decine che popolano i miei desktop. Ma anche qui uno potrebbe soprassedere: mi toccherebbe imparare un po' di D-Bus per far fare a KDE4 la stessa cosa che faceva KDE3. Mi ci vorrebbe un po' di tempo, ma era nei patti, altrimenti sarei passato già da tempo alla Mela Morsicata™.
Insomma, tutto questo è ancora niente rispetto al resto.
E non è nemmeno questione che anche il mio amato Conky bisognerà smanettare a lungo per non farlo litigare con plasma... e non è nemmeno questione che al momento il panel in basso di plasma non si può nascondere come si faceva con Kicker... e non è nemmeno questione che sono praticamente scomparse tutte le opzioni di personalizzazione (avete presente la differenza fra KDE e GNOME?)... e non è neppure questione che e io che me ne faccio dei widgets?!?
No, la questione è: non c'è più una modalità list-view della task-bar accessibile via shortcut.
Cioè, secondo loro, con decine e decine di shell aperte, diverse finestre di Firefox, Pidgin, Thunderbird e di chissà quante e quali altre applicazioni, io, per cambiare finestra, dovrei... staccare le mani dalla tastiera per impugnare il mouse?!?
 
Ho letto che con un po' di smanettamento sarebbe anche possibile installare Interpid mantenendo KDE3, ma bisognerebbe appoggiarsi a repository esterni e poi chissà se/quanto bisogna smanettare per far funzionare le cose...
Per fortuna Hardy Heron è una versione con supporto a lungo termine, per ora non procedo ad alcun aggiornamento.
Chissà se dovrò davvero restare con Hardy fino ad aprile 2011.

15 September 2008

compiz-fusion color filter for hue inversion

The negative plug-in for compiz fusion can be used to reduce eye straining while reading from screen: it switches black-text-on-white-background to white-text-on-black-background. But such inversion involves also color channels: red appears cyan, green appears magenta, blue appears yellow and so on. Therefore if you want that in your application, for example, your green buttons (which mean "good", "on", "ok"...) will remain green, and for example your red buttons (which mean "alert", "off", "cancel"...) will remain red, you have to resort to an additional hue switching transformation.
The Color Filter plug-in could be used for such a color transformation, but the already available filters do not include such option. Moreover, I couldn't find a similar trasformation through google, so I write it for you. You can find it just below here, it is merely a dozen of lines of OpenGL fragment program: simply copy those lines in a file (to be placed, for example, among the other filters in /usr/share/compiz/filters/) and then select as filter files both the negative filter and my filter (the order is irrelevant).
Enjoy! :)

!!ARBfp1.0
TEMP output, tmp, YPbPr;
TEX output, fragment.texcoord[0], texture[0], RECT;

MOV tmp, output;

DP3 YPbPr.x, tmp, {0.333, 0.333, 0.333, 1};
SUB YPbPr.y, YPbPr.x, tmp.b;
SUB YPbPr.z, YPbPr.x, tmp.r;

ADD tmp.r, YPbPr.x, YPbPr.z; 
ADD tmp.b, YPbPr.x, YPbPr.y;
SUB tmp.g, YPbPr.x, YPbPr.z; 
SUB tmp.g, tmp.g, YPbPr.y;

MOV result.color, tmp;
END

30 July 2008

Don't look back

E' uscito KDE 4.1, e davvero c'è di che avere l'acquolina in bocca! Da più parti si dice che ancora non è completamente stabile e affidabile, ma chissà, magari quest'estate troverò il tempo di farci un giro, senza piallare ancora niente della mia attuale 3.5.9, giusto per provare l'ebrezza... ma ho paura che davvero, una volta provato, non si avrà più voglia di guardare indietro! :)

13 March 2008

get absolute path from relative path

I think this is a quite common issue, but googling for it doesn't (easily) get the very useful solution I finally found. So I put it here.
The solution is really easy and it's called readlink.
Given a relative path like../symLink/myDir, simply type
readlink -f ../symLink/myDir
and you will get something similar to
/root/path/to/symLinkTarget/myDir
Of course you can also get the full path for a file instead of a directory (myDir → myFile.ext still works). The only point, as it is understood in my example, is that symbolic links are followed, so you cannot get the "symbolic" path to your dir/file. But this could be view as a feature. Suppose you want to know the full real path of your sym-link-reached working directory, you can define a very simple modified pwd command alias like this
alias Pwd='readlink -f .'
and compare its output with the usual pwd output.
Enjoy!

15 October 2007

root on kubuntu

Even if root sucks, I got to install it on several machine (laptop, office desktop, home deskop...). So here it is the recipe for a Kubuntu box.
  • install X11 pixmap library and its development headers:
  • sudo apt-get install libxpm4 libxpm-dev 
  • download source tarball, e.g root_v5.17.02.source.tar.gz from http://root.cern.ch/root/Version517.html
  • actual install it:
  • sudo mkdir /root++
    mv root_v5.17.02.source.tar.gz /root++
    cd /root++
    tar -xzvf root_v5.17.02.source.tar.gz
    export ROOTSYS=/root++/root
    cd root
    ./configure
    make
    where /root++ is the directory where you want to install root into.
Hope this can help someone else.

25 September 2007

root sucks

You know, root sucks.
Awfully.
Coming from Matlab, I'm just trying Octave. Maybe you want more than the default gnuplot, in order to play around interactively with your graphs (rescaling, zooming, labeling...). Being in a hurry, I was not able to get OctPlot to work (I found X related problem...), but grace works very fine for me. You simply have to type toggle_grace_use at the octave prompt − notice that for me it doesn't work this toggle_grace_use inside kOctave, nor toggle_octplot; both of them works only from the octave terminal prompt. But if you have a frequently used alias for emacs -nw, this is fine :)
Let me play with this mix for more than a few hours in order to see if it could really replace Matlab, at least for not-so-high performance demanding tasks in everyday work...

20 August 2007

redirect file list to grep, ls, less, more and such...

Quite soon I understood that the problem is that grep, ls, less, more and other commands like that, do not take input from STDIN. They possibly take the file list as a command line argument. So you can not redirect a file list (made, for example, by some other command chain) to such commands:
find . -name "*.foo" | grep bar #IT DOESN'T WORK!
A short solution is to make use of the backtick command-output substitution:
grep bar `find . -name "*.foo"`
If you have a keyboard layout that doesn't have the backtick, this may be quite cumbersome. Ok, I set a keyboard shortcut to change on-the-fly the keyboard layout, but still in this way I have to repeatedly switch back and forth...
The next solution is to make use of the other syntax for command-output substitution:
grep bar $(find . -name "*.foo")
but finally I discovered the right solution, which preserves the piping redirection order of the commands, namely xargs:
find . -name "*.foo" | xargs grep bar
Enjoy.

13 August 2007

afs on ubuntu

I tried to install the afs client for my kubuntu following the recipe found at the ubuntu forum, but I got in trouble with the make-kpkg stuff. Just within the comments on that post there is the hint for the solution, which relies on what is suggested in /usr/share/doc/openafs-client/README.modules.
I put here the plain recipe that worked for me, for anyone which would be interested, but also for my future reference: in fact, unfortunately, you must compile the module for the particular kernel you are using, i.e. you have to recompile the module each time you upgrade your kernel...
   —   ∴   —   
So, here is the recipe. The first part is the one you have to redo for each kernel upgrade.

# Installing linux-headers for the running kernel and kernel-package:
sudo apt-get install linux-headers-`uname -r` kernel-package
# Installing openafs-modules-source:
sudo apt-get install openafs-modules-source
# building openafs kernel module (this is where my recipe is different from the ubuntu-forum one):
cd /usr/src
sudo tar xzvf openafs.tar.gz
cd /usr/src/linux-headers-`uname -r`
sudo apt-get install module-assistant
sudo module-assistant prepare openafs-modules
sudo module-assistant auto-build openafs-modules
# Installing the just created openafs-modules package:
sudo dpkg -i /usr/src/openafs-modules-`uname -r`*.deb
The next part is needed only the first time you install the openafs client (so, if you are updating the module due to kernel upgrade, you can stop here).
# Installing kerberos 5 packages:
sudo apt-get install openafs-client openafs-krb5 krb5-user krb5-config
For me, the file /etc/openafs/afs.conf.client turns out to be already set with the AFS_CLIENT=true option (which make the AFS client to start at boot). To insert the just made module into the kernel, do:
sudo insmod /lib/modules/`uname -r`/fs/openafs.ko
To manually start the client, do:
sudo /etc/init.d/openafs-client start
To get an AFS token using kerberos, do:
klog -principal <your_afs_username> -cell <name_of_the_AFS_server>
and that's all.
As you can see, I put some tricky `uname -r`'s into the recipe, to get the version of the running kernel. In this way it can be used "as is" for each new kernel module. In fact, i put such a recipe into a small script you can download and launch for each upgrade (or even at the first installation, since it also contains the una tantum kerberos installation, which still can be skipped by the user after an interactive question from the script).
Enjoy!

25 July 2007

dcop

Che figata DCOP!
Avevo bisogno di fare un logout "soft" (ovvero senza killare tutto) da remoto, e ho scoperto un mondo.
Un'altra cosa da aggiungere alla lista "da-approfondire"...

23 July 2007

sottili differenze

rm -rf ./
e' molto diverso da
rm -rf /
Soprattutto se sei root.
A quel punto ti accorgi che avere tutto su un'unica partizione e' una scelta pessima, scopri che le partizioni ext3 non possono essere riarrangiate (ma per fortuna possono essere facilmente ridotte a ext2 semplicemente rimuovendo il journal, e ti riproponi, per la prossima volta, di impostare quanto prima un sistema di backup automatico e un qualche meccanismo di "cestinazione"...

23 April 2007

remove first lines from a file

head shows the first N lines of a file
tail shows the last N lines of a file.
But what if you want to remove the first N lines of a file? Simply show the last lines of the file startin' from the N+1 line! Ok, the point is that tail has an option like this: simply give the line number to start from just after the plus sign. Exempli gratia:
tail +12 too_much_header_lines.out > just_lines_I_want.out

20 April 2007

primo tentativo

Come avrete capito, mi ero azzardato a provare ora un aggiornamento dalla salamandra al cerbiatto... ma evidentemente i repository di kubuntu sono ancora intasati... dovro' rassegnarmi a riprovare con piu' calma settimana prossima... :(

reconfigure Debian packages database

Your Adept Manager can't start regularly, prompting you an error message like this
You will not be able to change your system settings in any way (install, remove or upgrade software), because another process is using the packaging system database (probably some other Adept application or apt-get or aptitude). Please close the other application before using this one.
and you are pretty sure no application at all is using the pckg-db (you checked with ps and killed everything was even remotely speculated to be related with adept/apt; you even did this after a fresh reboot of the system...)?
Maybe your problem is due to an update/install crazing. For me this
sudo dpkg --configure -a
make everything back to normal. Hope this can help.
[›››]

19 April 2007

Kubuntu Feisty Fawn 7.04 e' arrivata!

E la rete e' semplicemente impazzita! Non posso neanche mettere qualche link perche' al momento tutto e' letteralmente inaccessibile (repository dei pacchetti, delle immagini iso, anche semplicemente le pagine degli annunci e le {,k,X,ed}ubuntu-homepage!).
Ma settimana prossima credo che non riusciro' a trattenermi dall'upgrade (e chissa' se finalmente riusciro' a godermi anch'io qualche effetto speciale...)

14 March 2007

get environment variables of a process with ps - 2: the win!

Yeah, I got it!
First the solution, some comment right afterwards:
#!/usr/bin/perl -w

$catch = shift @ARGV;
while (<>) {
/(.*?) ([A-Z|_]*?=.* )+$catch=(\S*?) /;
print $1." ".$catch."=".$3."\n";
}
Things was more confusing with sed due to the fact that it pretends to work with the /pattern/substitution/ pair. Now I simply parse my line capturing what I'm interested in, and then using only it to make the output.
The interpretation is now straight forward:
  • take the first part of the string until the first group of capital letters or underscore followed by an equal sign; this will be the normal output for each process, and this will be printed out;
  • not be greedy looking for the equal sign, and take the firs you encounter (the ? after the *) so that this will match a single pair VAR=value; but then let this pairs be more than one (the + just after the second parentheses group);
  • then you will find a particular pair, which starts with the first argument i gave you ($catch)
Let's say that this perl script is named select.pl, you can pipe it after you ps call just my previous alias... but now it's parametric:
ps -ely --forest | grep myscript.pl | select.pl PWD
ps -ely --forest | grep myscript.pl | select.pl PATH
ps -ely --forest | grep myscript.pl | select.pl LOGIN
And if you now can't live without the --color feature of grep, perl can emulate it for you using the Term::ANSIColor module:
#!/usr/bin/perl -w

use Term::ANSIColor;

$catch = shift @ARGV;
while (<>) {
/(.*?) ([A-Z|_]*?=.* )+$catch=(\S*?) /;
print $1." ";
print color("red bold"), $catch, color("reset");
print "=".$3."\n";
}
Please enjoy!

get environment variables of a process with ps

Have you ever heard of the e option of ps? As man says, it shows the environment after the command. Used in conjunction with the twice wide-output option, ww, it gets ps to swamp the screen with the whole information about the environment setup at the moment each process was launched. Try it yourself, for example:
ps eww | tail -1
As the tail -1 says, the huge mess you get is a single line of output, corresponding to a single process (most likely it is just the last tail process itself...). If you take a look at that mess, you can see that it is a long list of pairs VAR=value, and it actually represents, as said, a snapshot of the environment at the moment the process started. For example you can find SHELL=/bin/bash or USER=hronir, or HOME=/home/hronir and so on.
Yeah, all this information is too much, but there are situation where one or few of those info could be valuable. Imagine, for example, that you are launching the same script from different directories (for example in order to analyze different set of data, placed in those different directories). Then, maybe after some period, you poor find out that some of these scripts, for any reason, failed to get done. For example you check with top or ps, grepping for your script, an it turns out that there are less scripts running than you launched. The big question, now, is: which script is died, and which not? Which data are still under analysis and which need to be re-submitted? (Your analysis take a lot of time, and you hope to find a way not to resubmit all the scripts...!)
Well, the answer for all these questions is just in the eww options of ps. And in particular in the PWD=/full/path/ pair, which will tell you where was the still running script launched from.
The point, now, is to make it easy to read out the value of this pair among the many others, since a huge number of screen-lines for each ps-output line is very very cumbersome to handle.
Well, after a full afternoon struggling with sed, awk and regex, I came out with this very poor result. Take your ps call grepping your scripts
ps -ely --forest | grep myscript.pl
make sure to add the eww options:
ps -ely --forest eww | grep myscript.pl
and pipe its output to sed as follows:
ps -ely --forest | grep myscript.pl | sed -r 's/(.* )? ([A-Z|_]+)=.* (PWD=\S* ).*/\1 \3/ ' | grep --color=auto PWD
It would be too boring and pedantic to explain the full path to that regular expression pattern. Let me notice only a few things.
First of all, I still not understand the behavior of this regex pattern, in particular the (.* )? (which is supposed to be related to the greedy expressions, but I think to well understand this concept and not the particular behavior I find in this case) and and some fair variations I tried...
Moreover, most of the time I wasted was spent trying to get a parametric version of this solution. A way, I mean, of asking to take out any of the pairs ps eww streams out. Actually I tryed to make a (ba)sh script (function), a perl script... but I didn't find the way to make something very svelte to be used beside the ps command. The utmost I get is to define an alias like this:
alias selectPWD="sed -r 's/(.* )? ([A-Z|_]+)=.* (PWD=\S* ).*/\1 \3/ ' | grep --color=auto PWD"
to be used as follows:
ps -ely --forest | grep myscript.pl | selectPWD
From this, of course, I could easily get any selectXXX I would need, but... can you find a parametric solution?!?
 
PS
Have you ever heard of the --color option for grep? Long ago I set alias grep='grep --color=auto' in my .bashrc...

13 March 2007

gnuplot 4.2 on ubuntu: update

Edo pushes me to take a look at the several options one can select while compiling. The complete list is not so deep (you can find it through ./configure --help, or inside the INSTALL file). Moreover, as a matter of fact, most of them are selected by default (like the useful --enable-history-file and --enable-datastrings, which enables gnuplot to apply a label just near the coordinates of each point of the plot).
Anyway, the one I consider the most useful for the everyday life with gnuplot − namely enabling the GNU readline − is not selected by default. This option enables the gnuplot prompt to act just like a common shell one, provided with its powerful line-editing capabilities (which are taken, as Wikipedia says, from one of GNU's earliest and most popular projects, Emacs!). As usual, life is quite easy with Ubuntu. My previous recipe is still good with two small things.
First of all, make sure to have the libreadline5-dev package installed. If not, it is easy to use apt-get, Synaptic or Adept Manager to find and install it.
Finally, simply add the --with-readline=gnu option to the first ./configure command.
That's all Folks!