Maiuscolo|minuscolo – ultima puntata

tmm-finOggi concludo la telenovela serie sulla conversione maiuscolo|minuscolo all’interno della clipboard. Le puntate precedenti sono qui e qui.
Avevo pensato di poter utilizzare il comando echo con l’opzione dell’here document ma non ci sono riuscito. Non so se è una mia carenza o il metodo non è praticabile. Sono ricorso a cat, soluzione meno bella perché ho dovuto creare un file temporaneo in /tmp.

Il codice è commentato e semplicissimo (non cambia granché dalla puntata precedente) per cui eccolo, senza preamboli:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/usr/bin/newlisp

;; get state of CapsLock
(set 'clON (% (int (slice (string 
        (exec "xset q | grep LED")) -4 2)) 2))

;; get clipboard content
(set 'txt (join (exec "xsel -ob") "\n"))
;;  case translate
(if (= clON 1) 
    (set 'txt (upper-case txt))
    (set 'txt (lower-case txt)))

;; park in a temp file
(set 'tmpf "/tmp/Mm")
(write-file tmpf txt)

;; put the temp file it in the clipboard
(set 'cmd (join (list "cat " tmpf " | xsel -ib")))
(exec cmd)
(delete-file tmpf)

(exit)

Si potrebbe ancora modificarlo rendendolo più lispico ma poi si perderebbe la possibilità di confronto con la versione del passo successivo, questo che segue immediatamente.

Se a questo punto qualcuno ponesse la domanda “ma si deve fare con newLISP?” risponderei “certo che no! ecco la versione con Python”.

#!/usr/bin/python
# -*- coding: utf-8 -*-

import subprocess, os

# stato di capslock
cmd = "xset q | grep LED"
ps = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE,
                      stderr=subprocess.STDOUT)
output = (ps.communicate()[0]).strip()
clON = int(output[-2:]) % 2

# contenuto della clipboard
cmd = "xsel -ob"
ps = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
txt = (ps.communicate()[0])

# converto
if clON:
    txt = txt.upper()
else:
    txt = txt.lower()

# lo parcheggio in un file temporaneo
tmpf = "/tmp/Mm"
f = open(tmpf, 'w')
f.write(txt)
f.close()

# copio il file nella clipboard
#cmd = "cat"
cmd = "cat {0} | xsel -ib".format(tmpf)
os.system(cmd) #, "", shell = True)
os.remove(tmpf)

Sono quasi equivalenti. Ecco un dump del test effettuato.

MMSì newLISP converte anche le lettere non ASCII :-D
Ma siccome è un’inutility il discorso, per me, si chiude qua ;-)

Ruby – leggere da terminale e commenti

r5OK, c’è stata una lunga pausa nell’esame di Ruby. L’ultima puntata è stata questa, tanto tempo fa: Ruby – iniziamo con gli script.
Ora ripaprto. E continuiamo a fare pratica con gli script. Dopo “Hello World!” sarebbe bello che lo script salutasse proprio te. Così:

#!/usr/bin/ruby
puts "Ciao sono il 'puter"
print "come ti chiami:"
name = gets()
puts "Ciao #{name}Buona giornata!"

c1

gets fa l’opposto di puts: invece di scrivere la stringa sul terminale legge quella che scriviamo.

Naturalmente la quinta riga potevamo scriverla anche come: puts "Hello " + name + " Buona giornata!"

Due cose:

  • notare l’a-capo anomalo prima di "Buona giornata", sarà da indagare in futuro;
  • solo per chi usa Linux la prima riga è speciale, permette di rendere lo script eseguibile in questo modo:

c1-1

In Windows non esiste l’equivalente e la riga viene considerata come un commento, come in realtà è.

Già, i commenti. Tranne dentro le stringhe “” come nel caso precedente Ruby considera il carattere # e tutto quello che segue fino alla fine della riga come un commento, serve a noi ed è ignorato dall’interprete, come in questo caso:

#!/usr/bin/ruby

# esempio (scemo) di commenti
v1 = 5 # primo dato
v2 = 7 # secondo
res = v1 + v2 # somma
print "la somma di #{v1} + #{v2} vale #{res} #sapevatelo\n"

c2

Qui vediamo diversi tipi di commenti:

  • la prima riga, speciale di cui abbiamo già detto (è talmente speciale che ha un nome, shebang);
  • la terza riga, tutta di commento;
  • le righe 4, 5 e 6 con un’istruzione e poi un commento;

Notare che il carattere # nell’ultima riga non è un commento. Anche le righe vuote, come la seconda vengono ignorate dall’interprete, proprio come i commenti.

Alle volte il commento che vogliamo scrivere è troppo lungo per una riga sola. In questo caso possiamo fare così:

#!/usr/bin/ruby

=begin
    esempio (scemo) di commento multilinea
    è tutto un commento fino a quando lo
    chiudiamo con la keyword che segue
=end
v1 = 5 # primo dato
v2 = 7 # secondo
res = v1 * v2 # prodotto
print "il prodotto di #{v1} * #{v2} vale #{res} #sapevatelo\n"

c3

Quando la lunghezza dello script supera poche righe questo tipo di commenti diventano molto utili, non immaginate quanto. Notare che le keyword =begin e =end devono cominciare in prima colonna, niente spazi.

Compito a casa: cosa succede se metto un commento multilinea dentro a un commento multilinea? ;-)

Visto nel Web – 78

Vi confesso un segreto: sono in ritardo terribile su (quasi) tutto. Forse da questo scaturiranno post nei prossimi mesi ma adesso panico. Per intanto ecco cosa ho visto nel Web.

mamma

Programmez votre Raspberry Pi depuis le confort de votre navigateur Web – et en JavaScript!
::: FinuxFr

Bruce Schneier: Why Collecting More Data Doesn’t Increase Safety
::: Slashdot

Know Thy Complexities!
::: Big-O

fiamma

La nuova sfida: educare chi va sul web
::: la Stampa ::: OLMR ::: Luca De Biase ::: Nicola D’Angelo ::: manteblog ::: manteblog

Terms of Service; Didn’t Read
::: Term of Service

391097_302006316597481_611106932_n

Making UEFI Secure Boot Work With Open Platforms
::: The Linux Foundation

BitTorrent Sync, prova su strada
::: ReefBits

Ramanujan approximation for circumference of an ellipse
::: The Endeavour

linux_search

Casa domotica controllata da Android, anche con i comandi vocali di Google Now
::: Tutto Android

Big Data: la mia rubrica su Europa – L’illusione del potere della rete
::: Vincos

Signs that you’re a bad programmer
::: Software Engineering Tips

parcheggio

elementary OS Luna Beta 2 Rilasciata, le novità e download
::: lffl

Iniziative per domani. Da conoscere oggi. Innovazione, impresa, startup, informazione, diritti
::: Luca De Biase

How to be effective at open source: by programmers, for programmers
::: Daniel Lemire

BIzG6M4CYAEIXkX

Prenda hammered: Judge sends porn-trolling lawyers to criminal investigators
::: Ars Technica

U.S. Directly Blames China’s Military for Cyberattacks
::: The New York Times ::: Slashdot

Full Circle Magazine: script per scaricare facilmente tutti i numeri della rivista
::: lffl

nature

Microsoft prepares U-turn on Windows 8
::: Financial Times

LibreCAD lavora ad un proprio DWG importer
::: LinuxBird

La Nasa fait migrer les ordinateurs de la Station spatiale internationale vers Linux
::: ZDNet ::: ZDNet ::: tom’s

brooms

How the Syrian Electronic Army Hacked The Onion
::: The Onion

Minesweeper in Matplotlib
::: Pythonic Perambulations

Debian Will Serve As The Default OS For Google Compute Engine
::: TechCrunch

532947_564836803538615_733865036_n

New Zealand Set To Prohibit Software Patents
::: Slashdot

Israeli Singer Publishes a Song In Hebrew — and Perl
::: Slashdot

Obama Announces Open Data Policy With Executive Order
::: Slashdot

musper

World of Warcraft Loses 1.3 Million Players in First Quarter of 2013
::: Slashdot

Una pagina web per ogni libro pubblicato
::: LinuxBird

La più grande biblioteca del mondo
::: Nicola D’Angelo

aw060ZB_700b_v1

Turista fai-da-te? Niente paura c’è openMarkers
::: LinuxBird

Mentana e le autostrade percepite
::: manteblog

What’s New in Scratch 2.0?
::: Scratch

Schermata-2013-05-03-alle-23

Primers
se ho capito bene un corso di matematica con Python dentro
::: Math ∩ Programming

Facebook Home, quando 1mln di dowload è poco
::: LinuxBird

Boston Replacing Microsoft Exchange With Google Apps
::: Slashdot

troglofeed

Return of the Borg: How Twitter Rebuilt Google’s Secret Weapon
::: wired

Facebook Is Getting Serious About Original Programming With “Facebook Live”
adesso la TV!
::: TechCrunch

How Should the Law Think About Robots?
::: Slashdot

Nicolargo. Livraison de socca. Pizza hut n'a inventé rien

Nicolargo. Livraison de socca. Pizza hut n’a inventé rien

Appeals court ruling could be ‘death’ of software patents
::: Network World

Elon Musk quits Zuckerberg’s immigration advocacy group
::: Reuters

miracles_vs_time

;-)

Gedit per Windows

sito di gedit

sito di gedit

Io lo uso solo quando devo, ma capita più spesso di quanto vorrei ;-)
No non sto parlando di gedit, si tratta di Windows.

OK, tutto ciò premesso c’è una bella novità. Una cosa che magari tutti conoscono già (tutti tranne me e i miei amici). E poi forse si tratta di una notizia che non interessa, chi è che usa ancora documenti di testo, i .txt; o crea script con Python, Ruby o roba simile?
Comunque qualcuno c’è, un paio li conosco personalmente. E allora la bella notizia è che gedit c’è anche per Windows, qui: gedit win32 binary.

Trovate il solito setup.exe che s’installa in un attimo, senza problemi.

g5

Resta solo da configurare, aprire Preferenze dal menu Modifica. Ci sono diversi tab, tutti da controllare.
E non dimenticate quello dei Plugin come ho fatto io recentemente ;-)

g4

Tra i vantaggi c’è anche la syntax hilighting per millemila tipi di documenti (stavo per scrivere file).

Ancora su maiuscolo|minuscolo

tmm2OK, lo so che non serve a niente ma voglio relazionarvi. Si continua dal post precedente: Convertire testo in maiuscolo|minuscolo.
Mentre preparavo quel post mi era venuto in mente che…
Non avevo considerato la Legge di Hofstadter. Cosa imperdonabile per chiunque abbia avuto accesso a uno o più ‘puters per più di qualche anno. Ma tant’è, sembrava facile. E poi la soluzione precedente non funziona con i caratteri con numero ASCII/ANSI maggiore a 127.
Eppure guarda qua:

nl-ulahemmm, sì, ma posso smettere quando voglio, dai ;-)

Allora sono riuscito a fare questo:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
#!/usr/bin/newlisp

;; get state of CapsLock
(set 'clON (% (int (slice (string 
        (exec "xset q | grep LED")) -4 2)) 2))

;; get clipboard content
(set 'txt (join (exec "xsel -ob") "§"))

;;  case translate
(if (= clON 1) 
    (set 'txt (upper-case txt))
    (set 'txt (lower-case txt)))

;; set it in the clipboard
(set 'cmd (join (list "echo " txt " | xsel -ib")))
(exec cmd)

(exit)

Che non è ancora perfetto, non gestisce correttamente la selezione multilinea. Il workaround attuale è di sostituire l’a-capo con il carattere § (galassia a spirale?). E c’è ancora da vedere quelli che la shell considera caratteri speciali, che pal :-(

Insomma ci sarebbe ancora da fare, chissà forse, anche perché sembra semplice. Per esempio per la selezione multilinea c’è l’here document.

E anche i caratteri speciali possono essere escapati. Noioso ma fattibile. E per questo lo script usa parecchie variabili, ridondanti ma utili per il debug. Poi quando sarà a posto sarà molto più elegante, forse.

Chissà… Comunque posso smettere quando voglio. E c’è Ruby che aspetta. Anche se sembra tutto davvero semplice.
Anche tenendo conto della Legge di Hofstadter ;-)

Convertire testo in maiuscolo|minuscolo

OK, una cosa completamente inutile. Ma siccome ci ho lavorato per qualche ora ve la voglio raccontare. Caso mai non leggetelo.

togc

Io sono diversamente smart –è risaputo anche se non mi va che si dica in giro– e con l’installazione di Ubuntu RR mi sono trovato parecchie cose che non funzionavano più come prima. Anche Gedit, colpa mia, certo, ma era sparita l’opzione Modifica maiuscole/minuscole dal menu Modifica. E prima di scoprire che dovevo attivare i plugin mi sono messo a googlare per Python + clipboard + capslock e allora ecco qui.

Allora c’è da dire che si trova tutto già fatto, solo da assemblare.
La prima cosa da fare è scaricare il modulo pyperclip, da qui: Pyperclip – A cross-platform clipboard module for Python.

Per determinale lo stato del tasto Bloc Maiusc è bastata un’altra googlata, qui: Python – How to get current keylock status?

È poi richiesta l’installazione di due utilities: xclip e xset.

OK, abbiamo tutto, ecco lo script Python (togc.py):

#!/usr/bin/python
# -*- coding: utf-8 -*-

import pyperclip, commands

t = pyperclip.paste()
capson = (int (commands.getoutput("xset q | grep LED")[65])) % 2
if capson:
    t = t.upper()
else:
    t = t.lower()
pyperclip.copy(t)

Basta renderlo eseguibile con chmod +x togc.py e funziona.

Il passo successivo è di creare un pulsante sul desktop o sulla barra dei lanciatori.

unity

Facilissimo, eccolo (togc.desktop):

[Desktop Entry]
Name=Lanciatore Semplice
GenericName=Lanciatore Semplice
Comment=Lanciatore Semplice
Exec=/home/juhan/lab/APPs/togc/togc.py
Icon=/home/juhan/lab/APPs/togc/togc.png
Terminal=false
Type=Application
NotShowIn=GNOME;
X-Ubuntu-Gettext-Domain=synaptic

Name[it_IT]=togc

La solita avvertenza: modificare come richiesto le righe 5 e 6, prima di renderlo eseguibile.
Come icona ho usato l’immagine messa in testa al post.

Poi si può provare, ma è OK, almeno per me:

adesso provo togc -- vediamo 123 Привет мир!
ADESSO PROVO TOGC -- VEDIAMO 123 Привет мир!
adesso provo togc -- vediamo 123 привет мир!
ADESSO PROVO TOGC -- VEDIAMO 123 привет мир!

I caratteri non latini non vengono convertiti, ma neanche Gedit lo fa.
E, sì, è completamente inutile.
E, sì, lo so, ci sarebbe Emacs o almeno vim; vi lo usavo prima che parecchi di voi nascessero, e prima ancora usavo ed e roba simile.

Però ho trovato un altro paio di cose che voglio condividere con voi, prossimamente… forse… ;-)

Tre!

happy-b'dayIeri c’è stato il compleanno di OK, panico.
A momenti me ne dimenticavo! Anzi a dirla tutta me ne sono completamente dimenticato.
Me l’ha ricordato WordPress:

anniversarioOrmai il blog ha un suo pubblico affezionato, ecco un riassunto:

okp-istoA me è servito parecchio: quando devi raccontare a altri delle cose te le devi chiarire per bene ;-) Non puoi barare, almeno non dovresti.

Nella blogosfera ho trovato amici, parecchi solo sul Web ma è OK. Ho trovato anche parecchi che non la pensano come me, quelli che vorrebbero finestre, pulsanti, menu e widgets fantabulosi e non capiscono perché io sono sempre sul terminale. E quelli che vorrebbero le cose sul Web, html, css, JavaScripts per fare di tutto e di più. E gli smartphones e i tablets e …
No, io sono vecchio. Poi ho anche trovato una piccola serie di linguaggi che mi soddisfano quasi completamente (Python, Gnuplot, newLISP (sì lo so che…), Go).
Ecco Go: a me piace, anche se probabilmente il suo campo è il Web; al mio amico Beppe non piace perché ci sono i puntatori. Uh! un’altra cosa che capiscosempre meno: Windows e come viene usato dai giovani. Sono vecchio (e ripetitivo).

buoncompleannoIl futuro? Chissà! Ma continuerò, anzi prossimamente cose nuove, probabilmente, forse ;-)

Visto nel Web – 77

Indaffarato a personalizzare Ubuntu RR in attesa dell’arrivo di Lubit. Intanto ecco cosa ho visto nel Web.

aZbGqEn_700b

Why a Facebook-Google Partnership Makes Sense
::: Social Media Forecast

Bel Ministro!
::: Pictures at an Exhibition

Compilamo Firefox 21b5 (Debian testing amd64)
::: OS)(SIDE

539712_583198938371165_147582480_n

Porting 6700 lines of C to Go
::: Labix

Il guru di Obama per Internet e nuovi media: “Rete ancora da conoscere, tempi duri nei prossimi 10 anni”
::: Tiscali

The Beauty of Concurrency in Go
::: The Pragmatic Bookshelf

Robin

Le performance dei giornali italiani su Facebook e Twitter
::: Vincos

The Algorithm X and the Dancing Links
::: Kunigami

Rolling dice for normal samples: Python version
::: The Endeavour

BHkgFgaCYAAVaDX.jpg:large

Is Apple Plunging Off a Cliff?
::: Slashdot

Inventor of OpenFlow SDN Admits Most SDN Today Is Hype
::: Slashdot

Cosa vorrei in OS X 10.9
::: ReefBits

New-Apple-Laptop-meme-lol-funny-pictures-pear-pc-bananna-pc

Restoring the first website
::: CERN

Gow an Awesome Alternative to Cygwin
::: Dragon Blogger

In Canada, a Government-Backed Electronic Currency
::: Slashdot

BHoZrKyCQAE82sF

BlackBerry CEO: Tablet Market Is Dying
::: Slashdot

Python 101 – Intro to XML Parsing with ElementTree
::: Mouse vs Python

Recognizing numbers
::: The Endeavour

383016_624165600944436_2076874257_n

Facebook Windows Phone app: la versione beta ci offre un’app finalmente funzionante
::: leo Hi tech

Who has your back?
::: Electronic Frontier Foundation

Facebook’s New Home on Android: Will it Help Google Kill iOS?
::: TechSource

1million-earths

Google Glass Is the Future — and the Future Has Awful Battery Life
::: Slashdot

Light Table 0.4
::: Chris Granger

Git Explained: For Beginners
::: Juri Strumpflohner

5f3de45771c354cf542430fd2bf9efd9

#OpenData: la rivoluzione degli hacker civici è alle porte
::: Intervistato

Apple Rushing to Overhaul iOS: Report
::: Slashdot

The Single Most Valuable Document In The History Of The World Wide Web
::: NPR

7a575c3ca74611e29df022000a1fb07c_7

Move Over Apple – Samsung Files For a Patent On Page Turn
i brevetti sono anche peggio della teologia
::: Slashdot

Marissa Mayer’s Potentially Revolutionary Paternity Leave Policy
::: The Atlantic

Growing a Language with Clojure and Instaparse
sembrerebbe fattibile; quasi-quasi provo
::: Carin Meier

Nature-Bear

Foursquare: visualizza i tuoi check-in
::: Vincos

The Clojure Philosophy
Simplicity, freedom to focus, empowerment, consistency, and clarity: Nearly every element of the Clojure programming language is designed to promote these goals.
::: Dr.Dobb’s

Droid@Screen visualizzare lo schermo, catturare immagini e registrare video di Android su Pc
::: lffl

alfano imu

A Functional Introduction to Lua
::: The Pragmatic Bookshelf

Download Google fonts to your desktop
::: Google Developers

Is the Linux desktop becoming extinct?
::: TechRadar

BIJ0AIyCYAE0WwC

Intel Could Buy AMD as x86 Microprocessors Lose Share to ARM – Analysts
::: X-bit labs

Mozilla: per internet come bene comune
::: Luca De Biase

Logistic Ordinal Regression
::: I say things

gandhi

Linux Distro Picker
io sarei pronto per Slackware, CentOS e Arch ;-) invece di ‘buntu
::: TuxRadar

Is Google Glass Too Nerdy For the Mainstream?
::: Slashdot

Il giorno perfetto
::: manteblog

peanut

Go and Rust — objects without class
::: LWN

Antivirus Firms “Won’t Co-operate” With PC-Hacking Dutch Police
::: Slashdot

Microsoft Exchange rival Icewarp says selling Linux to Windows customers is easy
::: the Inquirer

no-terror

UK Benefits Claimants Must Use Windows XP, IE6
::: Slashdot

Android version history
::: Tristit

youare

Interview: How Ray Kurzweil Plans To Revolutionize Search At Google
::: Forbes

Nuovi tentativi di controllare il Web?
::: LinuxBird

fish sculptures made from plastic bottles

fish sculptures made from plastic bottles

Oh! sta arrivando Lubit :-D :-D :-D

Ubuntu Raring Ringtail – personalizzazioni e lamentele

RR13.04
Ho installato la versione 13.04 di Ubuntu, funziona, quasi tutto OK. Quasi. Io ero rimasto alla 12.04, vecchia ormai di un anno.

Gimp pretende di salvare nel suo formato, bisogna esportare, non che sia una cosa grave, una noia piuttosto, almeno finché non mi abituo.
Riguardo a Python avevo installto pakki di roba, devo rifarlo, poco per volta. Come pure Go, Gnuplot e tutto il resto.
Io installo e personalizzo in modo quasi impulsivo (con giudizio però).

Quello che invece mi ha davvero mandato in bestia è stato Nautilus. La versione minimale potrebbe andare bene –secondo me– per chi usa il PC per navigare sul Web e poco altro. Insomma proprio no.
Per fortuna c’è Roberto FerramoscaInstallare Nautilus 3.4 con le patch SolusOS su Ubuntu 13.04 Raring.

Funziona, solo una piccola aggiunta: togliere l’icona del computer dal desktop, come raccontato dal post cui si è ispirato Roberto, questo: Get Nautilus 3.4 Features Back In Ubuntu 13.04 With SolusOS Patched Nautilus.

Resta invece disperso l’Apri nel terminale, chissà se riuscirò a trovarlo nascosto da qualche parte. Per adesso ho ripristinato la mia versione, there.

Mi accorgo adesso che su Gedit è sparita l’opzione per convertire testi in minuscolo|maiuscolo. Ma c’è qualcuno che ce l’ha con me?
O è il 13 che porta sfiga? Io non ci credo ma non si può mai sapere… ;-)

Per i nuovi di Windows

win

Recentemente sono entrato in contatto con gente nuova, che vorrebbe provare un modo diverso da come ha finora usato il computer. Per esempio facendo cose di cui racconto qui sul blog.
Tutto è cominciato quando l’amico Bit3Lux Luigi mi ha convinto a fare un minicorso introduttivo su Python, questo.
Poi è arrivato Dario|Serpico che mi dice “ma se invece di Python uno volesse usare Ruby?” Come si fa a dire di no a Dario, amico che conosco da sempre? E poi sono arrivati anche altri, anche fuori dal mondo del Web, ragazzi di qui. A proposito: solo maschietti, chissà come si deve fare per attirare le ragazze?

Ho visto che c’è, a volte, qualche difficoltà a partire: ormai il computer si usa in modo molto diverso da come lo uso io (sapete che sono vecchio, vero?), anche per chi non lo identifica con Facebook.
Allora ho preparato un paio di documenti che raccontano tre cose:come accedere al terminale (OK, Windows lo chiama Prompt dei comandi);

  • come creare una directory (quella che Windows chiama cartella) e come accedervi;
  • come modificare la Path.

Il PDF è stato fatto in due versioni:

Ditemi cosa ne pensate; sono utili? serve la versione per Windows 8?
Ci sono altri argomenti che andrebbero trattati?
Aspetto i commenti, non siate timidi, è richiesta una mail ma non la controllo mai, se volete mettetela finta (o quella di un amico). OK?
Ringrazio Alberto per l’aiuto (il 7 è il suo).

:-o ;-) :-) :-D 8-)

Iscriviti

Ricevi al tuo indirizzo email tutti i nuovi post del sito.

Unisciti agli altri 37 follower