martedì 24 marzo 2015

Senti la saggezza dei vostri anziani di programmazione, o subire le conseguenze di codice fondamentalmente errata

In un episodio 1.06 della serie HBO "Silicon Valley", Richard, il fondatore di una startup, entra in un vicolo cieco e si rivolge per aiuto a un ragazzo che sembra 13 o 14.

Il ragazzo genio prende uno sguardo a Richard e dice: "Ho pensato che saresti più giovane. Cosa sei, 25? "

Tutti gli occhi sul API
Una volta che un umile cornice per lo sviluppo di software real, progettazione API sta affermando la propria identità, con una pletora
LEGGI ORA
"26," Richard risponde.

"Yikes".

L'industria del software venera il giovane. Se avete una famiglia, sei troppo vecchio per il codice. Se si sta spingendo il 30 o anche 25, si è già oltre la collina.

Ahimè, i whippersnappers non sono sempre la soluzione migliore. Mentre i loro cervelli sono pieni di dettagli circa i più recenti, architetture trendy, quadri, e pile, non hanno l'esperienza fondamentale di come il software funziona davvero e non. Queste esperienze vengono solo dopo molte settimane perdute di frustrazione a carico di insetti strani e inspiegabili.

Come gli spettatori di "Silicon Valley", che entro la fine dell'episodio 1.06 avere la soddisfazione di vedere il crollo ragazzo genio e bruciano, molti di noi graybeards programmazione godono un pochino di schadenfraude quando coloro che ci hanno ignorato per essere "passato il nostro prime "finire con un mucchio fiammeggiante di codice semplicemente perché non hanno ascoltato i loro anziani di programmazione.


Nello spirito di condivisione o di agitare semplicemente un dito saggio ai giovani ragazzi, ancora una volta, qui ci sono diverse lezioni che non possono essere imparate saltando sulle ultime treno hype per un paio di settimane. Essi sono noti solo ai tizi che hanno bisogno di due cifre esadecimali a scrivere la loro età.

Questioni di memoria

Non è stato molto tempo fa che RAM del computer è stata misurata in non megabyte gigabyte. Quando ho costruito il mio primo computer (a Sol-20), è stata misurata in kilobyte. C'erano circa 64 chip di RAM su quel bordo e ognuno aveva circa 18 pin. Non ricordo il numero esatto, ma ricordo saldare ogni ultimo uno di loro me stesso. Quando ho incasinato, ho dovuto risaldare fino al test della memoria passata.

Quando si passa attraverso i cerchi del genere per la RAM, si impara a trattarla come l'oro. I bambini di oggi allocare RAM a destra ea sinistra. Lasciano puntatori penzoloni e non puliscono le loro strutture di dati, poiché la memoria sembra a buon mercato. Sanno fanno clic su un pulsante e l'hypervisor aggiunge un altro 16 GB all'istanza cloud. Perché qualcuno dovrebbe programmare cura oggi di RAM quando Amazon affitteranno un'istanza con 244GB?

Ma c'è sempre un limite a quello che farà il garbage collector, esattamente come c'è un limite a quante volte un genitore ripulire la vostra stanza. È possibile assegnare un grosso mucchio, ma alla fine è necessario ripulire la memoria. Se sei uno spreco e correre attraverso RAM come i tessuti di stagione influenzale, il garbage collector potrebbe cogliere fino macinazione attraverso quella 244GB.

Poi c'è il pericolo di memoria virtuale. Il software verrà eseguito da 100 a 1000 volte più lento se il computer esegue di RAM e comincia lo swapping su disco. La memoria virtuale è grande, in teoria, ma più lento di fanghi in pratica. I programmatori di oggi devono riconoscere che la RAM è ancora prezioso. Se non lo fanno, il software che viene eseguito rapidamente durante lo sviluppo rallenta a passo d'uomo, quando la folla si presentano. Il tuo lavoro semplicemente non scala. In questi giorni, tutto è di essere in grado di scalare. Gestisci la tua memoria prima il software o il servizio cade a pezzi.

RECENTI JAVA HOW-TO s
grandi di dati grafici grafici user analisi donna
Imparare a macinare grandi dati con R
vacanza luci flusso di rete neuroni
Programmazione socket per sistemi scalabili
WebTools
Responsive web design con Google Web Toolkit
Le reti di computer sono lenti

La gente di marketing che vendono la nube piace fingere cloud è una sorta di calcolo cielo, dove gli angeli si muovono i dati con un lampeggio. Se si desidera memorizzare i dati, che sono pronti a vendere un semplice servizio Web che fornirà permanente, di storage back-up e non sarà necessario preoccuparsi mai su di esso.

Essi possono essere di destra in quanto potrebbe non essere necessario preoccuparsi, ma avrete sicuramente bisogno di aspettare per questo. Tutto il traffico in e fuori del computer richiede tempo. Le reti di computer sono drasticamente più lento del traffico tra la CPU e il disco rigido locale.

Graybeards Programmazione cresciuto in un'epoca in cui Internet non esisteva. FidoNet avrebbe percorso il messaggio chiamando un altro computer che potrebbe essere più vicino alla destinazione. I Suoi dati prenderebbero giorni a farsi strada in tutto il paese, starnazzare e fischi attraverso modem lungo la strada. Questa dolorosa esperienza ha insegnato loro che la soluzione giusta per funzionare come tanto di calcolo, come si può a livello locale e scrivere a un servizio Web remoto solo quando tutto è più piccolo e finale possibile. I programmatori di oggi possono prendere una punta da queste lezioni sudati del passato conoscendo, come i graybeards programmazione, che le promesse di cloud storage sono pericolosi e devono essere evitati fino all'ultimo millisecondo.

Compilatori hanno bug

Quando le cose vanno in tilt, il problema più spesso di quanto non si trova nel nostro codice. Abbiamo dimenticato di inizializzare qualcosa, o ci siamo dimenticati di controllare un puntatore nullo. Qualunque sia il motivo specifico, ogni programmatore sa, quando il nostro software cade, è il nostro errore stupido - periodo.

Come si è visto, gli errori più folli non sono colpa nostra. A volte la colpa è esattamente sul compilatore o l'interprete. Mentre compilatori e interpreti sono relativamente stabili, non sono perfetti. La stabilità di compilatori e interpreti di oggi è stata duramente guadagnati. Purtroppo, prendendo questa stabilità per scontato è diventata la norma.

POPOLARE SUL JAVAWORLD
Giava
Recensione: Il grande 4 Java IDE rispetto
sul bersaglio
Modelli di stabilità applicate in un'architettura RESTful
Diagramma di flusso Thinkstock
Java ME 8 e l'Internet delle cose
E 'importante ricordare anche loro possono sbagliare e considerare questo quando il debug del codice. Se non conoscete potrebbe essere colpa del compilatore, è possibile trascorrere giorni o settimane tirando fuori i capelli. I vecchi programmatori hanno imparato da tempo che a volte la strada migliore per il debug di un problema comporta il test non è il nostro codice, ma i nostri strumenti. Se si mette la fiducia implicita nel compilatore e non pensate ai calcoli che sta compiendo per rendere il codice, è possibile trascorrere giorni o settimane tirando fuori i capelli in cerca di un bug nel tuo lavoro che non esiste. I giovani ragazzi, ahimè, impareranno questo abbastanza presto.

La velocità conta per gli utenti

Molto tempo fa, ho sentito che IBM ha fatto uno studio su usabilità e ha scoperto che le menti delle persone inizieranno a vagare dopo 100 millisecondi. E 'vero? Ho chiesto a un motore di ricerca, ma Internet appeso e ho dimenticato di riprovare.

Chiunque mai usato vecchie applicazioni green-schermo di IBM collegato a un mainframe IBM sa che IBM costruito le sue macchine, come se questo 100 millisecondi soglia-mente errante era un fatto hard-wired nel nostro cervello. Essi corrosi sulla circuiteria I / O. Quando hanno venduto i mainframe, hanno rilasciato schede tecniche che contano il numero di canali I / O erano in scatola, nello stesso modo i produttori di automobili contano cilindri nei motori. Certo, le macchine si è schiantato, esattamente come quelli moderni, ma quando è andato bene, i dati volarono fuori dei canali direttamente agli utenti.

Ho assistito almeno una whippersnapper programmazione difendere un nuovo progetto AJAX-pesante che è stato impantanato da troppe librerie JavaScript e dati che fluiscono al browser. Non è giusto, spesso ribattono, di confrontare le loro innovazioni slow-as-fanghi con i vecchi terminali schermo verde che hanno sostituito. Il resto della società dovrebbe smettere di lamentarsi. Dopo tutto, abbiamo una grafica migliore e più colori nelle nostre applicazioni. E 'vero - il fresco, CSS-enabled tutto sembra grande, ma gli utenti odiano perché è lento.


Il vero Web non è mai veloce come la rete degli uffici

I siti web moderni possono essere maiali tempo. Spesso può richiedere diversi secondi per i megabyte di librerie JavaScript per arrivare. Poi il browser deve spingere questi megabyte multistrato attraverso un compilatore JIT. Se potessimo aggiungere tutto il tempo del mondo spende ricompilazione jQuery, potrebbe essere migliaia o addirittura milioni di anni.

Questo è un errore facile per i programmatori che sono innamorato di strumenti basati su browser che utilizzano AJAX ovunque. Tutto sembra grande in demo presso l'ufficio. Dopo tutto, il server è in genere sulla scrivania nel cubicolo. A volte il "server" è in esecuzione su localhost. Naturalmente, i file arrivano con lo scatto di un dito e tutto sembra grande, anche quando il capo verifica dal angolo ufficio.

Ma gli utenti su una linea DSL o alla fine di una connessione cellulare instradati attraverso una torre di sovraccarico? Stanno ancora aspettando le librerie per arrivare. Quando non arriva in pochi millisecondi, sono fuori di qualche articolo su TMZ.

Questioni complessità algoritmica

Su un progetto, mi sono imbattuto in problemi con un problema esattamente come Richard in "Silicon Valley" e mi sono girato verso qualcuno all'età bere sotto che sapeva Greasemonkey avanti e indietro. Ha riscritto il nostro codice e mandato indietro. Dopo la lettura attraverso i cambiamenti, mi sono reso conto di aver fatto sembrare più elegante, ma la complessità algoritmica è passato da O (n) a O (n ^ 2) . Fu attaccare dati in un elenco al fine di corrispondere le cose. Sembrava abbastanza, ma sarebbe ottenere molto lento come n ottenuto grandi.

Complessità algoritmo è una cosa che i corsi universitari in informatica fare bene. Ahimè, molti ragazzi delle scuole superiori non hanno scelto questo mentre l'insegnamento si Ruby o CoffeeScript in un week-end. Analisi della complessità può sembrare astruso e teorica, ma può fare una grande differenza come scala progetti. Tutto sembra grande quando n è piccolo. Esattamente come il codice può essere eseguito rapidamente quando c'è abbastanza memoria, algoritmi cattivi possono guardare scattante in fase di test. Ma quando gli utenti moltiplicano, è un incubo aspettare su un algoritmo che prende O (n ^ 2) o, peggio ancora, O (n ^ 3) .


Quando ho chiesto il nostro ragazzo genio se aveva intenzione di trasformare il processo di corrispondenza in un algoritmo quadratico, si grattò la testa. Non era sicuro di cosa stavamo parlando. Dopo aver sostituito la sua lista con una tabella hash, tutto andava bene di nuovo. Probabilmente abbastanza grande per capire ormai.

Le biblioteche possono succhiare

Le persone che scrivono le biblioteche non hanno sempre il vostro interesse a cuore. Stanno cercando di aiutare, ma sono spesso costruendo qualcosa per il mondo, non è il tuo piccolo problema fastidioso. Spesso finiscono per la costruzione di un coltellino svizzero in grado di gestire molte versioni diverse del problema, non qualcosa ottimizzato per il vostro problema. Questa è una buona tecnica e di grande codifica, ma può essere lento.

Se non si sta prestando attenzione, le biblioteche possono trascinare il codice in una palude lento e non sarà nemmeno saperlo. Una volta ho avuto un giovane programmatore deridere il mio codice perché ho scritto 10 righe di scegliere i caratteri di una stringa.

"Posso farlo con una espressione regolare e una riga di codice," si vantava. "Miglioramento Ten-to-one." Egli non ha considerato il modo in cui la sua una riga di codice dovrebbe analizzare e di analisi che espressione regolare ogni volta che è stato chiamato. Ha semplicemente pensato che stava scrivendo una riga di codice e stavo scrivendo 10.

Biblioteche e API possono essere grandi quando viene utilizzato in modo appropriato. Ma se sono utilizzati nei cicli interni, possono avere un effetto devastante sulla velocità e non si sa perché.

giovedì 5 marzo 2015

Come semplificare il temuto compito di Documentazione Pubblicazione con Pages GitHub

Non è necessario reinventare il sito Web di pubblicare alcuni documenti per il vostro progetto. Approfitta delle pagine GitHub per costruire quasi point-and-click siti doc.

Con Terrence Dorsey2015/03/04

Documentazione progetti software non deve essere difficile. La parte di scrittura è difficile da evitare (se avrò alcuni suggerimenti su che più tardi). Si può prendere cura della parte dell'editoria abbastanza facilmente, tuttavia, senza cadere nella tana del coniglio di scrivere il proprio framework CMS o Web - anche se questi continuano ad essere le strategie di procrastinazione popolari per gli sviluppatori che preferisce scrivere il codice che la documentazione.

Ecco il trucco: Se si sta utilizzando il tuo codice GitHub repository di origine, è possibile usufruire del servizio di built-in Pages GitHub dispongono di pubblicare, di accoglienza, e anche costruire e rendere la documentazione Web-based.

Basta che ospita il sito della documentazione di per sé non è una tale impresa incredibile. In questi giorni di solito è un processo semplice per far girare un server e spingere il tuo sito. Solitamente, ma non sempre. Ci sono i costi di tempo e denaro per impostare e gestire un server Web, anche se si sta lavorando da soli. E questa è la migliore delle ipotesi. Prova la navigazione del big-società la burocrazia per ottenere un server approvato ... e questo è prima di navigare il big-processi aziendali IT per ottenere installato e funzionante.

D'altra parte, se si dispone di un account di GitHub, GitHub pagine si presenta come parte del pacchetto. Se si dispone di depositi privati, come ad esempio attraverso un conto GitHub aziendale, è possibile anche sfruttare le funzioni di autenticazione e autorizzazione organizzazione built-in per limitare chi può vedere e contribuire alla documentazione pubblicata con GitHub Pages.

GitHub ha i wiki, ma sono fortemente limitato di funzionalità rispetto a GitHub Pages, che ha accesso a praticamente qualsiasi cosa si potrebbe impiegare per un sito Web normale compreso CSS personalizzato, JavaScript, framework Web, la compilazione automatica e più.

Così come funziona tutta questa magia? Prendiamo GitHub Pages per un giro con due semplici progetti che dimostrano le basi.

HTML statico
La versione più semplice di un progetto GitHub Pagine coinvolge tre elementi: un repository, un ramo GH-pagine per il progetto in file di progetto e HTML che di pronti contro termine nel ramo gh-pagine spinto al repo. Questo è tutto.



GitHub prende tutti i file HTML nel ramo GH-pagine e serve come un sito Web presso l'URL http: // [accountName] .github.io / [repoName]. Così, per esempio, ho creato un progetto di esempio che vive al http://tpdorsey.github.io/simple-docs/ . Ecco una breve passeggiata attraverso il processo per la creazione di un sito come questo.

In primo luogo, se non siete già lavorando con Git e GitHub, controllare il mio aprile 2014 articolo, " controllo del codice sorgente di Git e Mercurial , "per i collegamenti al software e tutorial. Per questo primo esempio, avrete solo bisogno Git e un account GitHub. Il Git sito ha un download per Windows che include Git Bash e Git Gui, e vi posso assicurare che sia il lavoro bene anche su Windows 10 Technical Preview.

Sulla macchina, creare una cartella per un nuovo progetto, quindi inizializzare il repository Git:

git init
Prima di fare qualsiasi altra cosa, creare e passare al ramo gh-pagine. Non c'è davvero alcun motivo per lavorare in master per questi file:

git checkout -b gh-pagine
Creare una pagine Web coppia. Ho creato un file index.html e una pagina secondaria, page1.html. Per questo progetto le pagine devono essere pagine Web reali, proprio come ci si crea per qualsiasi altro sito. La mia semplice file è in Listato 1 .

Listing 1: Il mio file index.html semplice
<! DOCTYPE html>
<Html>
  <Head>
    <Title> gh-pagine semplice esempio </ title>
  </ Head>
  <Body>
    <H1> Questa è la documentazione
</ H1>
<P> Basta una semplice pagina HTML, dove si potrebbe mettere un po 'di documentazione. </ P>
<P> Ecco un sommario per sotto-pagine. </ P>
    <Ul>
      <Li> <a href="page1.html"> page1.html </a> </ li>
      <Li> <a href="page2.html"> page2.html </a> </ li>
      <Li> <a href="page3.html"> page3.html </a> </ li>
    </ Ul>
  </ Body>
</ Html>
Può essere semplice o complicato come volete, ma devono essere file HTML statici.

Commit i file:

add git.
git commit -m "Guardate ma! Documentation"
Ora vai a GitHub e creare un repository per la documentazione. GitHub vi mostrerà un esempio del comando per impostare questo nuovo repo come il telecomando, che farete per il vostro repo doc locale:

GIT aggiungere remota origine [posizione repo]
Ora è possibile spingere i file dal repo documentazione locale di un ramo gh-pagine su GitHub:

git origine spinta gh-pagine
E questo è tutto! GitHub elabora automaticamente file validi nel ramo gh-pagine. Con pagine statiche come quello in figura 1 , le modifiche dovrebbero essere disponibili immediatamente sul sito GitHub Pages. Come ho detto prima, l'URL del sito segue un modello comune, utilizzando il nome dell'account e il nome repo. È inoltre possibile trovare l'URL nella pagina Impostazioni per il repo GitHub.


[Clicca sull'immagine per ingrandirla.] Figura 1. GitHub Renders file HTML in un GH-Pages Branch come Pages GitHub sito
Vuoi includere CSS o JavaScript? Battere se stessi fuori.

Basta ricordarsi di spingere le modifiche al ramo gh-pagine del vostro repo remoto per averli visualizzati nelle pagine ospitate. Inoltre, le pagine sono visibili agli stessi utenti che hanno accesso al tuo repo: repos pubblici hanno siti pubblici, mentre i pronti contro termine privati ​​hanno siti visibili solo agli utenti a cui hai dato accesso repo.

Utilizzando Jekyll
Un'opzione più sofisticato per la creazione di siti per le pagine GitHub è usare Jekyll (vedi figura 2 ), un rubino , su modelli generatore sito web statico basato. Jekyll è stato scritto da Tom Preston-Werner, un co-fondatore di GitHub, ed è nativamente supportato da Pages GitHub.


[Clicca sull'immagine per ingrandirla.] Figura 2. predefinito Jekyll Site
Con Jekyll, il contenuto è scritto in Markdown file di testo formattato per, insieme ad alcuni YAML metadati e configurazione. Jekyll utilizza anche il Liquid motore di template.

Quando si crea un sito Jekyll, Jekyll prende i tuoi contenuti Markdown e modelli di liquidi, insieme a tutti i CSS, script, immagini o altri contenuti che hai specificato, e costruisce un sito HTML statico che è possibile ospitare ovunque. L'aspetto interessante della relazione GitHub-Jekyll, tuttavia, è che non spingere il vostro sito al repo GitHub. Invece, il contenuto di origine e la configurazione viene spinto al repo. GitHub gestisce la costruzione del HTML e spingendolo verso il sito di hosting.

Ottenere Ruby e Jekyll impostati su sistemi Linux o Mac è semplice. "Apt-get rubino," se necessario, poi "gem install Jekyll."

Su Windows, dell'installazione e della configurazione richiede un po 'più di sforzo. La migliore guida in questo momento è di Julian Thilo " Run Jekyll su Windows . " Ho seguito questo su una macchina con Windows 10 Technical Preview e, ancora una volta, assicuro che funziona.

Una volta che tutto è impostato, aprire un prompt dei comandi con Ruby, passare alla cartella in cui si desidera impostare il progetto, ed eseguire "Jekyll nuova" seguito da un nome di cartella per il sito:

Jekyll nuovi Jekyll-docs
cd Jekyll-docs
Quando il sito è stato creato, è già impostato come un repository Git locale. Aggiungere un progetto GitHub per esso, controlla un ramo gh pagine localmente, impostare il telecomando per il vostro repo GitHub, e si è pronti a spingere tutte le modifiche fino a GitHub:

git checkout -b gh-pagine
Avanti, _config.yml aperto in un editor di testo e personalizzare i dettagli di configurazione. La documentazione Jekyll copre tutte le opzioni qui. Un dettaglio importante per i siti ospitati su GitHub Pagine sta definendo la tua "baseurl" per il nome del repository. Ad esempio, se il progetto su GitHub si chiama "Jekyll-docs," l'impostazione URL di base in _config.yml è:

baseurl: "/ Jekyll-docs"
Questo e altri suggerimenti sono spiegati nel Jekyll GitHub pagine di documentazione.

GitHub riconosce il ramo gh-pagine del progetto come progetto Jekyll e ricostruisce automaticamente ogni volta che si preme modifiche. Questo processo richiede un po 'di più di un semplice spingendo verso l'alto HTML, in modo da dare qualche minuto per riflettere i cambiamenti nel vostro sito attuale.

Jekyll Docs Template
Jekyll è un passo in avanti, ma è in realtà concepito come un motore di blog. Si può certamente usare fuori dalla scatola, ma una serie doc bel sta andando a prendere un po 'Giochi per bambini con i modelli, e ho detto questo sarebbe stato facile e veloce.

Di Byron Ruth Jekyll Docs Template (vedi figura 3 ) è un modello di progetto Jekyll personalizzato ottimizzato per flessibilità, documenti multi-pagina. Ha un built-in, tavolo sidebar completamente personalizzabile di contenuti.


[Clicca sull'immagine per ingrandirla.] Figura 3. Jekyll Docs Template è ottimizzato per Documentation Project
Per utilizzare Jekyll Docs Modello, clonare il progetto in una cartella per il progetto:

git clone https://github.com/bruth/jekyll-docs-template.git mio progetto

lunedì 2 marzo 2015

Java EE 6 un anno dopo: Una Panoramica tecnica

Volete avere una buona visione di ciò che Java EE6 può portare ai vostri sviluppi?
Vuoi conoscere i vantaggi di integrazione delle nuove tecnologie come l'iniezione unificato con CDI (Context and Dependency Injection), BeanValidation e supporto REST di prima classe con JAX-RS?

Panoramica Webinar
E 'passato più di un anno che la piattaforma Java EE 6 è stato rilasciato in forma definitiva con un sacco in serbo per la costruzione più leggera, ancora più potenti applicazioni aziendali. Se non lo avete già fatto, ora è il momento di prendere in considerazione familiarizzare con la tecnologia. Questo webinar di un'ora fornisce una panoramica di Java EE 6 caratteristiche ed i vantaggi che può portare ai vostri progetti di sviluppo. "Facilità di sviluppo" rimane un tema importante in questa versione con la maggior parte dei file di configurazione XML reso facoltativo, imballaggi semplificata degli archivi, e altro ancora. API esistenti sono state notevolmente migliorate con semplice che mai EJB 3.1, JSF 2.0, Servlet 3.0 e JPA 2.0. Questa piattaforma è anche l'integrazione delle nuove tecnologie come l'iniezione unificato con CDI (Context and Dependency Injection), BeanValidation e supporto REST di prima classe con JAX-RS. Infine, il profilo Web si distingue come una nuova "feature" molto ben accolto, la definizione di un set di giuste dimensioni di API da un sottoinsieme della piattaforma completa Java EE. Concludiamo questa sessione con pragmatiche prossimi passi per il vostro ingresso nel mondo di Java EE 6, da strumenti di sviluppo open source e server di applicazione ad altri prodotti Oracle. Circa il Presenter : Alexis Moussine-Pouchkine . Alexis Moussine-Pouchkine è un Java EE Developer Advocate e GlassFish Community Manager lavora a Oracle e con sede a Parigi, Francia Alexis è relatore in diverse conferenze europee ed internazionali come JavaOne o Devoxx su architetture Java moderni e recenti sviluppi della piattaforma. Trascorre del tempo di qualità con i clienti, gli sviluppatori, architetti e gruppi di Java User (brocche) per guidare meglio l'evoluzione di Java EE e GlassFish. blogs Alexis a http://blogs.sun.com/alexismp .