giovedì 6 ottobre 2011
iSad
venerdì 3 giugno 2011
Selezionare un elemento a caso da un enum
public enum Semi {
cuori, quadri, fiori, picche
}public class RandomEnum<E extends Enum<?>> {
private static final Random RANDOM = new Random();
private final E[] values;
public RandomEnum(Class<E> e) {
values = e.getEnumConstants();
}
public E random() {
return values[RANDOM.nextInt(values.length)];
}
}RandomEnum<Semi> r = new RandomEnum<Semi>(Semi.class);
System.out.println(r.random());
martedì 19 aprile 2011
Il tramonto degli smanettoni
Quando DVD Jon fu arrestato dopo aver scardinato l'algoritmo di cifratura CSS, fu incriminato per "violazione di computer non autorizzata", il che portò i suoi legali a porre l'ovvia domanda: "quale computer avrebbe violato senza autorizzazione?". Risposta del procuratore: "il suo".
Se quanto sopra non vi ha fatto fermare il cuore per un attimo, potete smettere di leggere adesso.
Quando stavo diventando grande, "violare" era qualcosa che potevi fare solo ai computer degli altri. Ma mettiamolo un attimo da parte per tornarci dopo.
Mio padre è stato un professore universitario per gran parte della sua vita adulta. Una volta decise di prendersi un anno sabbatico per scrivere un libro. Aveva da parte abbastanza soldi per prendersi un computer e una cosa moderna chiamata word processor. Scrisse, modificò e scrisse di nuovo. Era talmente ovvio che fosse meglio di una macchina da scrivere che il fatto che fossero soldi ben spesi era fuori questione.
Si dà il caso che questo computer veniva venduto con pre-installato il linguaggio di programmazione BASIC. Non c'era neanche bisogno di avviare un dischetto col sistema operativo. Bastava accendere il computer e premere Ctrl-Reset per avere un prompt. A questo prompt, si poteva scrivere un intero programma e poi scrivere RUN, e quello, cazzo, sarebbe andato.
Avevo 10 anni. Era 27 anni fa ma mi ricordo ancora come mi sono sentito quando ho realizzato che tu - cioè io - avresti potuto far fare a quel computer tutto quello che volevi scrivendo le parole giuste nell'ordine giusto e dando il comando RUN e quello, cazzo, sarebbe andato.
Quel computer era un Apple ][e.
All'età di 12 anni, scrivevo programmi BASIC così complessi che il computer andava in out of memory per contenerli. A 13 anni scrivevo programmi in Pascal. A 14, programmavo in assembler. A 17 competevo (e vincevo) nelle gare di Programmazione alle olimpiadi nazionali della scienza. A 22, ho iniziato a lavorare come programmatore.
Oggi sono un programmatore, uno scrittore tecnico, un hacker nel senso Hackers and Painters del termine. Ma non si diventa hacker programmando; si diventa hacker smanettando. E' lo smanettare che fornisce quel senso di magnificenza. Bisogna uscire dal sistema, tirar giù le grate di sicurezza, strappare i livelli di astrazione che il computer fornisce per la stragrande maggiornaza delle persone che non vogliono sapere come tutto ciò funzioni. E' ad esempio usare l'editor di settori Copy ][+ per capire come il sistema operativo fa il boot, poi modificarloin modo che il computer faccia un suono ogni volta che legge un settore dal disco. O visualizzare uno splash screen all'avvio prima di listare il catalogo del disco e visualizzare il prompt del BASIC. O copiare una miriade di comadi figosi dal "Beagle Bros. Peeks & Pokes Chart" e provare a capire che cazzo abbiamo appena fatto. Solo per farlo. Perché era figo. Perché spaventava i miei genitori. Perché dovevo assolutamente sapere come funzionava tutto.
Più tardi, ci fu l'apple IIgs. A ancora dopo, il Mac IIci. MacsBug. ResEdit. Norton Disk Editor. Fermatemi se qualcuno di questi vi suona familiare.
Apple ha fatto le macchine che hanno fatto di me quello che sono. Sono diventato chi sono smanettando.
Il titolo del post è rubato da "On the iPad" di Alex Payne, che quoto per un bel pezzo:
L'iPad è una cosa attraente, progettata con cura e profondamente cinica. E' una macchina di consumo digitale. Come sottolineano Tim Bray e Peter Kirn, è un dispositivo che fa poco per attivare la creatività...Ora, so bene che saremo in grado di sviluppare i nostri programmi per iPad allo stesso modo in cui lo siamo oggi per l'iPhone. Tutti possono sviluppare! Tutto quello che serve è un Mac, XCode, un "simulatore" iPhone e 99$ per un certificato di sviluppatore a scadenza. Il "certificato di sviluppatore" è in realtà una chiave crittografica che permette (temporaneamente) di ottenere un livello di accesso (leggermente) più alto a... al tuo stesso computer. E questo va bene - o almeno è accettabile - per gli sviluppatori di oggi, perché loro sanno già di essere sviluppatori. Ma gli sviluppatori di domani non lo sanno ancora. E senza la libertà di smanettare, alcuni di loro non lo sapranno mai.
La tragedia dell'iPad è che sembra davvero fornire un modello di computer migliore per molte persone - probabilmente la maggioranza delle persone. Al bando i concetti e le confuse metafore degli ultimi trent'anni di informatica. Al bando l'abilità di modificare e smanettare all'infinito senza un particolare guadagno. L'iPad è semplice, diretto, privo di manutenzione...
Ciò che mi disturba maggiormente dell'iPad è questo: se avessi avuto un iPad anziché un computer vero quando ero piccolo, non sarei mai diventato un programmatore oggi. Non avrei mai avuto l'abilità di eseguire qualsiasi stupido, potenzialmente pericoloso, enormemente educativo programma potessi scaricare o scrivere. Non avrei mai avuto la possibilità di usare ResEdit e modificare il suono di avvio del MAc in modo da poterci smanettare a tutte le ore senza disturbare i miei genitori.
(Come nota a margine, io mi sbagliavo e Fredrik aveva ragione, Chrome OS avrà uno switch perché gli sviluppatori eseguano il loro proprio codice. Non conosco le specifiche di come funzionerà, se sarà un bottone o uno switch o che altro. Ma ci sarà una modalità ufficialmente supportata per gli sviluppatori di oggi e, cosa molto più importante, per quelli di domani.)
E lo so, lo so, lo so, si può scardinare l'iPhone (ri)guadagnare l'accesso di root, ed eseguire tutto quello che cazzo si vuole. E non dubito che qualcuno troverà anche il modo di scardinare l'iPad. Ma non voglio vivere in un mondo dove uno deve violare il suo proprio computer prima di iniziare a smanettare. E certamente non voglio vivere in un mondo in cui smanettare è illegale (DVD Jon è stato assolto, a proposito. Il procuratore è ricorso in appello, e lui è stato assolto di nuovo. Ma chi ha bisogno di leggi quando hai la crittografia a chiave pubblica dalla tua parte?).
Una volta, Apple faceva macchine che hanno fatto di me quello che sono. Sono diventato chi sono smanettando. Adesso sembra che stiano facendo tutto quanto in loro potere per impedire ai miei figli di scoprire quel senso di meraviglia. Apple ha dichiarato guerra a tutti gli smanettoni del mondo. A ogni aggiornamento del software, la generazione precedente dei "jailbreak" smette di funzionare e la gente deve trovare nuove strade per entrare dento i propri computer. Non ci sarà mai un MacsBug per iPad. Non ci sarà un ResEdit, o un Copy ][+ sector editor, o un iPad Peeks & Pokes Chart. E questa è una vera perdita. Magari non per te, ma per qualcuno che ancora non lo sa.
giovedì 7 aprile 2011
SQL Server: query cross-server
- Innanzi tutto, bisogna abilitare questa funzione su SQL Server, perché di default è disattivata (motivi di sicurezza). Per fare ciò si utilizza la SP sp_configure.
exec sp_configure 'show advanced options', 1
reconfigure
exec sp_configure 'Ad Hoc Distributed Queries', 1
reconfigure - Collegarsi alla macchina di destinazione (quella dove andrà fatta la INSERT, per intenderci)
- Eseguire la seguente query:
INSERT INTO
[target_db].[target_schema].[target_table]
([column_1],...,[column_N])
SELECT
[column_1],...,[column_N]
FROM OPENDATASOURCE(
'SQLOLEDB',
'Data Source=server[,port];User ID=user_id;Password=password'
).[source_db].[source_schema].[source_table]
martedì 11 gennaio 2011
Di tecnici e manager
martedì 24 novembre 2009
Let's Go! No, un momento, fermi tutti. E' già polemica
"Go", un'espressione che dà tutta l'idea di una partenza sprint, pronti... via! E invece è già polemica.
Leggendo nell'issue tracker di go, si scopre una cosa interessante: un altro programmatore sostiene di aver sviluppato un linguaggio di programmazione e di averlo chiamato "Go!". Ha anche scritto un libro, intitolato "Let's Go!" dedicato a chi vuole avvicinarsi a questo linguaggio. Questa persona, tale Francis G. McCabe, ha chiramente chiesto al gigante di Mountain View di cambiare nome al suo linguaggio di programmazione, troppo simile a quello da lui inventato.
I have been working on a programming language, also called Go, for the last 10 years. There have been papers published on this and I have a book.
I would appreciate it if google changed the name of this language; as I do not want to have to
change my language!
La replica di big G per il momento si fa attendere ma intanto il post ha già scatenato quasi 1000 commenti. Ta di essi c'è chi ironizza:
reidellis: is right! its "Lets Go!" or "Go!". This is google "go", "The Go
Programming Language" Bigg Difference.. :)
chi dubita:
What is peculiar is that on Mr. McCabe's blog
(http://frankmccabe.wordpress.com/category/computer-languages/) he mentions (in a 2008 post, the year after his go! book) he's developing a language, and does not
mention this languages name (I am guessing it _might_ be go!, but who knows?);
chi offre... suggerimenti:
Google should totally change the name, fmccabe you should find a (cheap) lawyer just in case...
Google has deep pockets.
Come andrà a finire? Chi lo sa, per adesso aspettiamo. Stay tuned!
domenica 22 novembre 2009
"Il Fatto Quotidiano" gratis per tutti. Generosità? No, incompetenza.
Cosa succede quando la professionalità nell'informatica viene sacrificata in favore dei costi? Chiunque abbia lavorato nell'informatica sa che oggi, spesso, il panorama è questo. Le aziende che investono in professionalità sono poche e, guarda caso, le migliori. Un esempio? Google, ma anche molte altre.
Per il resto ormai la maggior parte del software viene sviluppato a basso costo da persone che, spesso, imparano le tecnologie coinvolte nel progetto utilizzandole. Peccato che, quando la tenologia, nell'ottica di facilitare il compito a chi le cose LE SA, viene utilizzata come strumento per abbattere i costi, succedono cose bizzarre. Come questa per esempio:
Ieri sera, quasi per caso, mi trovo a scoprire una falla nel sito della testata "Il Fatto Quotidiano", falla che permette a chiunque, anche non abbonato, di scaricare copia del giornale, in maniera non solo gratiuta ma anche molto meno macchinosa rispetto a quella "naturale", ossia collegandosi con la propria utenza.
Ovviamente non si tratta di generosità, ma solo di incompetenza. Come da polemica sopra, risulta evidente che per realizzare il sito della nota testata giornalistica,
Il sito è stato realizzato in tecnologia ASP.NET 2.0 (tecnologia che già di per se mi fa venire i brividi) e gira su sistemi windows della famiglia NT (no comment). Per svilupparlo, molto probabilmente è stato utilizzato un ambiente integrato che maschera molte delle problematiche della programmazione WEB, consentendo anche a chi non ne sa molto di provare a fare qualche sito.
Ora, finché ti diverti a casa tua a fare un sito in ASP non ti dice niente nessuno, ma se ti rivendi come professionista e fai certe ca**ate come la mettiamo? Per fortuna è un giornale. Se fosse stato un documento bancario? Una cartella clinica?
Eppure, il buon Bill Gates aveva anche cercato di avvertirvi ma voi non l'avete ascoltato!!!
This error page might contain sensitive information because ASP.NET is configured to show verbose error messages using <customErrors mode="Off"/>. Consider using <customErrors mode="On"/> or <customErrors mode="RemoteOnly"/> in production environments.
Vabbè, diciamo, per ora, polemic mode: OFF.
Solo altre due cose per concludere:
- Messaggio alla testata: ragazzi, cercate di scegliere meglio i professionisti che lavorano per la vostra immagine, l'immagine è una cosa seria, non permette che certe realtà (che io considero la rovina dell'informatica) possano comprometterla così.
- Per tutti:
$ giorno=`date +%d`; mese=`date +%m`; anno=`date +%Y`
$ wget "http://www.antefatto.it/antefattopdf/${anno}/ilfatto${anno}${mese}${giorno}.pdf"
e avrete la vostra copia odierna del giornale! Mi raccomando, però, se non siete abbonati non fatelo. Probabilmente è legale, ma di certo non è etico!
venerdì 13 novembre 2009
Qualche shortcut per windows
A volte capita, spesso per esigenza di dover fare le cose con una certa fretta, di utilizzarli alla presenza di altre persone (spesso per mettere a posto problemi sui LORO PC). Quando, per aprire il prompt, ad esempio, non faccio tutta la strada ma scrivo semplicemente "cmd" nella finestra di esegui, loro mi guardano sempre con quell'aria a cavallo tra lo stupito e il sottomesso, come per dire: "questo è veramente un hacker, non raggiungerò mai il suo livello...". Insomma, ti fanno sentire un po' come Son Goku al quarto livello di super sayan, basta solo l'aura a impaurire l'avversario.
Ecco una lista di shotcut per windows, da digitare accedendo a Start -> Esegui. Così tutti potranno fare i fighi e io mi dovrò inventare qualcos'altro ;)
Buon divertimento!
| Controlli Accessibilità | access.cpl |
| Wizard Accessibilità | accwiz |
| Aggiungi Hardware | hdwwiz.cpl |
| Installazione applicazioni | appwiz.cpl |
| Strumenti Amministrazione | control admintools |
| Aggiornamenti Automatici | wuaucpl.cpl |
| Trasferimento Guidato Bluetooth | fsquirt |
| Calcolatrice | calc |
| Certificati | certmgr.msc |
| Mappa Caratteri | charmap |
| Esegui Check Disk | chkdsk |
| Visualizza Clipboard | clipbrd |
| Finestra DOS | cmd |
| Servizi Componenti | dcomcnfg |
| Gestione Computer | compmgmt.msc |
| Pannello di Controllo | control |
| Proprietà Data/Ora | timedate.cpl |
| Condivisioni DDE | ddeshare |
| Gestione Periferiche | devmgmt.msc |
| Diagnostica Direct X | dxdiag |
| Pulizia Disco | cleanmgr |
| Deframmentazione Disco | dfrg.msc |
| Gestione Disco | diskmgmt.msc |
| Gestione Partizione Disco | diskpart |
| Proprietà Schermo | control desktop |
| Proprietà Schermo | desk.cpl |
| Dr. Watson | drwtsn32 |
| Driver Verifier Manager | verifier |
| Visualizzatore Eventi | eventvwr.msc |
| Trasferimento Guidato File e Impostazioni | migwiz |
| Verifica Firma File | sigverif |
| Trova Velocemente | findfast.cpl |
| Firefox | firefox |
| Opzioni Cartella | control folders |
| Font | control fonts |
| Cartella Font | fonts |
| Gioco Free Cell | freecell |
| Controlli Gioco | joy.cpl |
| Criterio Gruppo | gpedit.msc |
| Gioco Hearts | mshearts |
| Aiuto e Supporto | helpctr |
| HyperTerminal | hypertrm |
| Iexpress Wizard | iexpress |
| Servizio Indicizzazione | ciadv.msc |
| Connessione Guidata a Internet | icwconn1 |
| Internet Explorer | iexplore |
| Proprietà Internet | inetcpl.cpl |
| Proprietà Tastiera | control keyboard |
| Impostazioin Protezione Locale | secpol.msc |
| Utenti e Gruppi Locali | lusrmgr.msc |
| Uscire da Windows | logoff |
| Strumento di Rimozione Malware | mrt |
| Microsoft Chat | winchat |
| Microsoft Movie Maker | moviemk |
| Microsoft Paint | mspaint |
| Microsoft Syncronization Tool | mobsync |
| Gioco Campo Minato | winmine |
| Proprietà Mouse | control mouse |
| Proprietà Mouse | main.cpl |
| Netmeeting | conf |
| Connessioni di Rete | control netconnections |
| Connessioni di Rete | ncpa.cpl |
| Connessioni Guidata Rete | netsetup.cpl |
| Notepad | notepad |
| Object Packager | packager |
| Amministrazione Origine Dati ODBC | odbccp32.cpl |
| Tastiera su Schermo | osk |
| Outlook Express | msimn |
| Paint | pbrush |
| Proprietà Password | password.cpl |
| Monitor Performance | perfmon.msc |
| Monitor Performance | perfmon |
| Opzioni Telefono e Modem | telephon.cpl |
| Connessione Telefonica | dialer |
| Gioco Pinball | pinball |
| Opzioni Risparmio Energia | powercfg.cpl |
| Stampanti e Fax | control printers |
| Cartella Stampanti | printers |
| Impostazioni Regionali | intl.cpl |
| Editor del Registro di Sistema | regedit |
| Editor del Registro di Sistema | regedit32 |
| Rubrica per la Connessione Remota | rasphone |
| Desktop Remoto | mstsc |
| Archivi Removibili | ntmsmgr.msc |
| Richieste Operatore per Archivi Removibili | ntmsoprq.msc |
| Griuppo di Criteri Risultante | rsop.msc |
| Scanner e Macchine Fotografiche | sticpl.cpl |
| perazioni Pianificate | control schedtasks |
| Centro Sicurezza | wscui.cpl |
| Servizi | services.msc |
| Cartelle Condivise | fsmgmt.msc |
| Chiusura Windows | shutdown |
| Souni e Periferiche Audio | mmsys.cpl |
| Gioco Spider | spider |
| Utilità di rete Configurazione SQL | cliconfg |
| Editor di Configurazione di Sistema | sysedit |
| Utilità di Configurazione di Sistema | msconfig |
| Informazioni di Sitema | msinfo32 |
| Proprietà di Sistema | sysdm.cpl |
| Task Manager | taskmgr |
| TCP Tester | tcptest |
| Telnet Client | telnet |
| Gestione Account Utente | nusrmgr.cpl |
| Utility Manager | utilman |
| Rubrica Windows | wab |
| Utilità Importazione Rubrica Windows | wabmig |
| Windows Explorer | explorer |
| Windows Firewall | firewall.cpl |
| Windows Magnifier | magnify |
| Windows Management Infrastructure | wmimgmt.msc |
| Windows Media Player | wmplayer |
| Windows Messenger | msmsgs |
| Protezione del Database Account Windows | syskey |
| Windows Update | wupdmgr |
| Versione di Windows | winver |
| Tour Guidato Windows XP | tourstart |
| Wordpad | write |
