Entity Framework Core: è sicuro eliminare Migration.Designer.cs se non ripristineremo mai una migrazione?




 Abbiamo uno schema di database con ~ 200 tabelle. L'istantanea del modello (Migration.Designer.cs) creata per ogni migrazione è di ~ 20K linee. Quindi, avere un numero piuttosto elevato di migrazioni rallenta la nostra build su CI (con circa 30 migrazioni che creano una soluzione impiega 6 minuti con le migrazioni o 4 minuti senza di esse). 

 Quindi, alla domanda: è sicuro eliminare le istantanee del modello per le vecchie migrazioni (che sappiamo che non potremo mai tornare indietro)? Le istantanee del modello sono utilizzate per qualsiasi altra cosa tranne Revert-Migration?
>  Le istantanee del modello sono utilizzate per qualsiasi altra cosa tranne Revert-Migration? 
> 
> 

 Sì. Ci sono alcuni casi limite in cui è necessario. Su SQL Server, questi casi sono: 

* AlterColumn quando la colonna viene ridotta o l'espressione calcolata viene modificata e gli indici devono essere ricostruiti
* CreateIndex su una tabella ottimizzata per la memoria quando l'indice è univoco e fa riferimento a colonne nullable

 Quindi la maggior parte delle volte è probabilmente sicuro da eliminare, ma per favore verifica che le tue migrazioni funzionino ancora dopo averlo fatto.
<p>un esempio di tale applicazione è <a href="http://www.jetbrains.com/idea/">intellij idea</a> (e alcuni altri ambienti di programmazione). oltre al solito controllo di revisione esterno <a href="http://en.wikipedia.org/wiki/revision\_control">specifico del progetto</a> , idea ha un utente specifico <a href="http://www.jetbrains.com/idea/features/local\_history.html">cronologia locale</a> che salva una revisione di ogni file ad ogni salvataggio (la cronologia viene archiviata nella home directory dell'utente). le vecchie revisioni vengono archiviate per impostazione predefinita per 3 giorni lavorativi attivi, dopo di che vengono rimosse le vecchie revisioni. insieme alla funzione di salvare automaticamente tutti i file ogni pochi secondi (la mia preferenza è dopo essere stato inattivo per 5 secondi), questo significa che non dovrai mai pensare al salvataggio dei file e puoi sempre ottenere indietro i vecchi dati. è un vero salvavita durante la programmazione. (a volte lo uso anche per scoprire quante ore ho lavorato su un progetto, per registrare le mie ore di lavoro, perché la cronologia locale mostra la data e l'ora di ogni modifica .)</p><p>è ancora necessario un controllo di revisione esterno, ma per altre esigenze: lì si eseguiranno le modifiche in genere quando si esegue un lavoro coerente, almeno una volta ogni 1-2 ore, ed è anche un modo per distribuire le modifiche ad altri team membri e fare backup. la storia locale d'altra parte è per recuperare da incidenti pochi secondi o minuti dopo che è accaduto.</p><p>penso che molti altri programmi trarrebbero beneficio da una storia locale simile. mi piacerebbe se la mia office suite l'avesse, perché uno stack di annullamento/ripetizione e il salvataggio manuale dei file sono modi molto primitivi per recuperare i dati persi (non consentono il recupero selettivo e non sopravvivono al riavvio del programma). ricordo anche di aver visto un'applicazione di modifica delle immagini (non ricordo il nome - penso che fosse solo per mac), in cui tutte le modifiche sono state fatte come trasformazioni dell'immagine originale, e in qualsiasi momento puoi tornare indietro per cambiare qualsiasi le modifiche precedenti. quindi una tale storia è possibile anche con l'editing delle immagini.</p><p>non penso che vorrei che la cronologia fosse archiviata all'interno del file in fase di modifica, altrimenti sarebbe molto grande (una revisione ogni paio di secondi; la mia cronologia locale per i progetti di programmazione su cui ho lavorato in un anno è 370 mb) e potrebbe causare un problema di sicurezza perdendo dati che pensavi di aver rimosso, ma una cronologia per utente sarebbe ottima.</p> <p>non posso rispondere alla domanda, ma spero che questo possa far luce sul tuo problema.</p><ul> <li> <p>le regole di sicurezza aziendale dovrebbero vietare l'uso di alcune estensioni del browser?</p> <p>imho la risposta è sì qui. le estensioni del browser possono praticamente fare praticamente qualsiasi cosa per conto del normale browser. ciò significa che un firewall locale non li rileverà.</p> </li> <li> <p>ci sono <strong>obiettivi</strong> motivi per fidarsi di più xxx (inserire qui qualsiasi browser dell'estensione del browser) rispetto a yyy (un altro browser o estensione del browser).</p> <p>bene nella sicurezza it la fiducia si basa su 2 elementi principali: audit del codice e reputazione. il primo è oggettivo, mentre il secondo no, ma devo ammettere che uso principalmente il secondo perché non ho né tempo a sufficienza né conoscenza sufficiente per rivedere tutto, quindi mi baso solo su consigli esterni da fonti di cui mi fido. quando faccio affidamento su https per proteggere un canale, devo fidarmi del proprietario del certificato di non fare cose cattive con i dati una volta ricevuti, e mi fido del firmatario del certificato. per farla breve, potrebbe essere possibile dire se un'estensione ha una reputazione migliore di un'altra, ma può essere solo per estensione e non a livello globale tramite browser.</p> </li> <li> <p>l'uso di un firefox portatile nel tuo caso d'uso è una soluzione accettabile?</p> <p>comunque la mia opinione, ma a meno che tu non sia in una posizione gerarchica che ti consenta di ignorare una regola del team di sicurezza, voglio dire un grande no qui. il mio consiglio è che dovresti prima fare un elenco delle estensioni che hai usato comunemente e delle possibili sostituzioni. quindi dovresti provare a raccogliere tutti gli elementi sulla loro sicurezza oggettiva e sulla loro <em> reputazione </em> (ancora dal punto di vista della sicurezza). quindi dovresti dire al tuo manager che la recente proibizione di chrome porta a una riduzione netta della produttività e chiedigli di proporre al team di sicurezza un elenco di estensioni necessarie con possibili sostituzioni (firefox per chrome con l'esempio). quindi o sono d'accordo con un elenco accettabile o la domanda dovrebbe salire più in alto nella gerarchia dell'organizzazione, fino a quando qualcuno che è responsabile sia della sicurezza globale che della produttività globale prenda un decisione: ignorare silenziosamente le regole aziendali è sempre una decisione sbagliata perché il ragazzo che ha l'autorità globale non ha modo di sapere che alcune regole non vengono seguite.</p> </li> </ul><p>e se il tuo capo sceglie che la sicurezza è più importante della produttività o del contrario, <strong>lui</strong> ha l'autorità per quella scelta mentre potresti non averne.</p> **Disclaimer** : sono il proprietario del progetto [Entity Framework Plus](http://entityframework-plus.net/) 

 Entity Framework Plus utilizza il MemoryCache per impostazione predefinita. Non escludiamo nulla. Vedi [EF + Memory Cache](https://github.com/zzzprojects/EntityFramework-Plus/blob/master/src/shared/Z.EF.Plus.QueryCache.Shared/QueryCacheManager.cs#L39-L45) 

 Quindi la domanda dovrebbe essere più `What is the default .NET Memory Cache duration?` 

 Guardando su [MSDN](https://msdn.microsoft.com/en-us/library/ff477235.aspx) , sembra che se non viene fornito nulla, il valore predefinito è `InfiniteAbsoluteExpiration` 


>  Se non vengono fornite informazioni sullo sfratto o sulla scadenza, il valore predefinito è InfiniteAbsoluteExpiration, il che significa che gli elementi nella cache non scadono in base a un tempo assoluto. Invece, gli elementi scadono solo quando c'è la pressione della memoria. Come best practice, dovresti sempre fornire esplicitamente una scadenza assoluta o di raccordo. In questa procedura dettagliata, si utilizza una scadenza assoluta di 10 secondi. 
> 
> **Una risposta più breve:**

Probabilmente hai una transazione in esecuzione da molto tempo (manutenzione degli indici? Big batch delete o update?) O sei nella modalità di ripristino "predefinita" (più in basso su cosa si intende per impostazione predefinita) di`Full`e non ho preso un*registro di backup*(o non li stanno prendendo abbastanza frequentemente).

Se si tratta di un problema relativo al modello di recupero, la risposta semplice potrebbe essere Passa a`Simple`modalità di ripristino se non è necessario il ripristino puntuale e i backup regolari del registro.Molte persone, tuttavia, fanno sì che la loro risposta non comprenda modelli di recupero.Continua a leggere per capire perché è importante e poi decidere cosa fai.Potresti anche iniziare a prendere i backup del log e rimanere dentro`Full`recupero.

Potrebbero esserci altri motivi, ma questi sono i più comuni.Questa risposta inizia a tuffarsi nei due motivi più comuni e ti dà alcune informazioni di base sul perché e come dietro i motivi, oltre a esplorare altre ragioni.





**Una risposta più lunga:**Quali scenari possono far sì che il registro continui a crescere?Ci sono molte ragioni, ma in genere questi motivi sono dei seguenti due modelli: C'è un equivoco sui modelli di recupero o ci sono transazioni a lungo termine.Continua a leggere per i dettagli.

Motivo principale 1/2: non comprendere i modelli di recupero


(**Essendo in*Modalità di recupero completo*e non prendere*Registra i backup*- Questa è la ragione più comune - la stragrande maggioranza di coloro che hanno riscontrato questo problema sono.**)

Anche se questa risposta non è una profonda immersione nei modelli di recupero di SQL Server, l'argomento dei modelli di recupero è fondamentale per questo problema.

In SQL Server ce ne sono tre[recovery models](https://msdn.microsoft.com/en-us/library/ms189275.aspx):

* `Full`,
* `Bulk-Logged`e
* `Simple`.

Ignoreremo`Bulk-Logged`per ora diremo che è un modello ibrido e la maggior parte delle persone che fanno parte di questo modello sono lì per un motivo e comprendono modelli di recupero.

I due a cui teniamo e la loro confusione sono la causa della maggior parte dei casi di persone che hanno questo problema`Simple`e`Full`.

Intermission: recupero in generale


Prima di parlare dei modelli di recupero: parliamo del recupero in generale.Se vuoi approfondire ulteriormente questo argomento, leggi[Paul Randal's blog](http://www.sqlskills.com/blogs/paul/category/transaction-log.aspx)e tanti messaggi su di esso che vuoi.Per questa domanda, però:

1. Crash/Restart Recovery  
Uno scopo del file di registro delle transazioni è per*arresto anomalo/riavvio recupero*.Per il rollforward e il rollback del lavoro che è stato fatto (rolling forward/redo) prima di un arresto anomalo o riavvio e il lavoro che è stato avviato ma non terminato dopo un arresto anomalo o riavvio (rollback/annullamento).È il lavoro del log delle transazioni per vedere che una transazione è iniziata ma non è mai stata completata (rollback o crash/restart prima della transazione).In quella situazione è il lavoro del tronco da dire*"Ehi .. questo non è mai veramente finito, torniamo indietro"*durante il recupero.È anche compito del registro vedere che hai finito qualcosa e che alla tua applicazione client è stato detto che è stata completata (anche se non si è ancora consolidata nel tuo file di dati) e dire*"Ehi .. è successo davvero, facciamolo andare avanti, facciamo in modo che le applicazioni pensino che fosse"*dopo un riavvio.Ora c'è di più ma questo è lo scopo principale.
2. Punto in tempo di recupero  
L'altro scopo per un file di registro delle transazioni è di essere in grado di darci la possibilità di ripristinare a*punto nel tempo*a causa di un "oops" in un database o per garantire un punto di ripristino in caso di un guasto hardware che coinvolge i dati e/o file di registro di un database.Se questo registro delle transazioni contiene i record delle transazioni che sono state avviate e completate per il ripristino, SQL Server può e quindi utilizza queste informazioni per ottenere un database nel punto in cui si trovava prima che si verificasse un problema.Ma non è sempre un'opzione disponibile per noi.Per farlo funzionare dobbiamo avere il nostro database nel giusto*modello di recupero*e dobbiamo prendere*registrare i backup*.

Modelli di recupero


Sui modelli di recupero:

* Modello di recupero semplice  
Quindi, con l'introduzione sopra, è più facile parlare`Simple Recovery`prima il modello.In questo modello, stai dicendo a SQL Server:*"Sto bene con te usando il tuo file di registro delle transazioni per crash e riavvio recupero ..."*(Non hai davvero scelta lì. Guarda in alto[ACID properties](https://stackoverflow.com/questions/6633808/sql-server-and-acid-property-of-database)e questo dovrebbe avere un senso rapidamente.)*"... ma una volta che non ne hai più bisogno per quel crash/riavvio scopo di recupero, vai avanti e riutilizzare il file di registro."*

SQL Server ascolta questa richiesta in Simple Recovery e conserva solo le informazioni di cui ha bisogno per eseguire il crash/riavvio del ripristino.Una volta che SQL Server è sicuro che può essere ripristinato perché i dati sono induriti nel file di dati (più o meno), i dati che sono stati rafforzati non sono più necessari nel log e sono contrassegnati per il troncamento, il che significa che vengono riutilizzati.
* Modello di recupero completo  
Con`Full Recovery`, si sta dicendo a SQL Server che si desidera essere in grado di eseguire il ripristino in un momento specifico, purché il file di registro sia disponibile o in un momento specifico coperto da un backup del registro.In questo caso, quando SQL Server raggiunge il punto in cui sarebbe sicuro troncare il file di registro in Simple Recovery Model, non lo farà.Anziché**Permette al file di registro di continuare a crescere**e gli permetterà di continuare a crescere,***finché non si esegue un backup del registro***(o esaurito lo spazio sull'unità del file di registro) in circostanze normali.

 Passare da semplice a pieno ha un Gotcha.

Ci sono regole ed eccezioni qui.Di seguito parleremo delle transazioni a lungo termine.

Ma un avvertimento da tenere a mente per la modalità di recupero completo è questo: se si passa a`Full Recovery`modalità, ma mai fare un backup completo iniziale, lo farà SQL Server**non**onora la tua richiesta di essere presente`Full Recovery`modello.Il registro delle transazioni continuerà a funzionare come nel`Simple`fino a quando non si passa al modello di recupero completo e si prende il primo`Full Backup`.

Il modello di recupero completo senza backup del log non è corretto.


Quindi, questa è la ragione più comune per la crescita incontrollata del registro?Risposta: Essere in modalità di recupero completo senza avere alcun backup di registro.

Questo succede**tutti**il tempo per le persone.

 Perché questo è un errore così comune?

Perché succede sempre?Poiché ogni nuovo database ottiene le impostazioni iniziali del modello di recupero esaminando il database del modello.

L'impostazione del modello di recupero iniziale del modello è sempre`Full Recovery Model`- fino a quando ea meno che qualcuno lo cambi.Quindi potresti dire che "il modello di recupero predefinito" è`Full`.Molte persone non ne sono a conoscenza e hanno i loro database in esecuzione`Full Recovery Model`senza backup di log e quindi un file di registro delle transazioni molto più grande del necessario.Questo è il motivo per cui è importante modificare i valori predefiniti quando non funzionano per la tua organizzazione e le sue esigenze)

Il modello di recupero completo con troppo pochi backup del log non è corretto.


Puoi anche metterti nei guai qui non tenendo abbastanza spesso i backup dei log.  
L'esecuzione di un backup del log al giorno può sembrare un problema, ma richiede un ripristino con meno comandi di ripristino, ma tenendo presente la discussione precedente, il file di registro continuerà a crescere e crescere fino a quando non si eseguono i backup del log.

 Come faccio a sapere di quale frequenza di backup del registro ho bisogno?

È necessario considerare la frequenza di backup del registro tenendo presenti due aspetti:

1. **Bisogni di recupero**- Si spera che questo sia il primo.Nel caso in cui l'unità contenente il registro delle transazioni non funzioni correttamente o si verifichi un danneggiamento grave che influisce sul backup del registro, quanti dati possono essere persi?Se il numero non supera i 10-15 minuti, è necessario eseguire il backup del registro ogni 10-15 minuti, fine della discussione.
2. **Registra la crescita**- Se la tua organizzazione sta andando bene a perdere più dati a causa della possibilità di ricreare facilmente quel giorno, potresti avere un backup del registro molto meno frequente di 15 minuti.Forse la tua organizzazione sta bene ogni 4 ore.Ma devi vedere quante transazioni generate in 4 ore.La possibilità che il registro continui a crescere in quelle quattro ore rende troppo grande un file di registro?Ciò significa che i backup del log richiedono troppo tempo?





Motivo principale 2/2: Transazioni lunghe


(**"Il mio modello di recupero va bene! Il registro sta ancora crescendo!**)

Questo può anche essere una causa di crescita del log incontrollata e sfrenata.Non importa il modello di recupero, ma spesso si presenta come*"Ma sono in Simple Recovery Model - perché il mio registro continua a crescere ?!"*

Il motivo è semplice: se SQL sta utilizzando questo log delle transazioni per scopi di recupero come descritto sopra, allora deve ricominciare dall'inizio di una transazione.

Se una transazione richiede molto tempo o esegue molte modifiche, il registro non può troncare sul checkpoint per nessuna delle modifiche ancora presenti nelle transazioni aperte o avviate da quella transazione.

Ciò significa che una grande eliminazione, l'eliminazione di milioni di righe in una istruzione di eliminazione è una transazione e il registro non può eseguire troncamenti finché non viene eseguita l'eliminazione completa.Nel`Full Recovery Model`, questa eliminazione viene registrata e potrebbero essere presenti molti record di registro.Stessa cosa con il lavoro di ottimizzazione dell'indice durante le finestre di manutenzione.Significa anche che una cattiva gestione delle transazioni e la mancata osservanza e chiusura di transazioni aperte possono davvero danneggiare te e il tuo file di registro.

Cosa posso fare per queste transazioni a lungo termine?


Puoi salvarti qui da:

* Dimensionamento corretto del file di registro per tenere conto dello scenario peggiore, ad esempio la manutenzione o le operazioni note più importanti.E quando cresci il tuo file di log dovresti guardare a questo[guidance](http://www.sqlskills.com/blogs/kimberly/post/8-steps-to-better-transaction-log-throughput.aspx)(e i due link che ti invia) di Kimberly Tripp.Il giusto dimensionamento è super critico qui.
* Guardando il tuo utilizzo delle transazioni.Non avviare una transazione nel server delle applicazioni e iniziare lunghe conversazioni con SQL Server e rischiare di lasciarne aperta una troppo lunga.
* Guardando il*transazioni implicite*nelle tue istruzioni DML.Per esempio:`UPDATE TableName Set Col1 = 'New Value'`è una transazione.Non ho messo un`BEGIN TRAN`lì e io non devo, è ancora una transazione che si impegna automaticamente quando fatto.Pertanto, se si eseguono operazioni su un numero elevato di righe, considerare la possibilità di raggruppare tali operazioni in blocchi più gestibili e fornire il tempo di registrazione per il ripristino.Oppure considera la giusta dimensione per affrontarlo.O forse esaminare i modelli di recupero che cambiano durante una finestra di caricamento di massa.





Queste due ragioni si applicano anche alla spedizione dei log?


Risposta breve: sì.Risposta più lunga di seguito.

Domanda:*"Sto utilizzando la distribuzione dei log, quindi i miei backup dei log sono automatizzati ... Perché continuo a vedere la crescita del log delle transazioni?"*

Risposta: continua a leggere.

Cos'è il log shipping?


La distribuzione dei log è proprio come sembra - stai spedendo i tuoi backup del log delle transazioni su un altro server per scopi di DR.C'è un po 'di inizializzazione, ma dopo questo il processo è abbastanza semplice:

* Un lavoro per il backup del log su un server,
* un lavoro per copiare quel backup del registro e
* un lavoro per ripristinarlo senza recupero (neanche`NORECOVERY`o`STANDBY`) sul server di destinazione.

Ci sono anche alcuni lavori da monitorare e avvisare se le cose non vanno come le hai pianificate.

In alcuni casi, è possibile eseguire il ripristino del log shipping solo una volta al giorno o ogni tre giorni o una volta alla settimana.Questo va bene.Ma se si apporta questa modifica a tutti i lavori (compresi i processi di backup e copia del registro), significa che si sta aspettando tutto il tempo necessario per eseguire un backup del registro.Ciò significa che avrai un sacco di crescita dei log, perché lo sei*in modalità di recupero completo senza backup del registro*- e probabilmente significa anche un grande file di log da copiare.È necessario modificare solo la pianificazione del processo di ripristino e lasciare che i backup e le copie del registro avvengano su una base più frequente, altrimenti si risentirebbe del primo problema descritto in questa risposta.





Risoluzione dei problemi generali tramite codici di stato


Ci sono ragioni diverse da queste due, ma queste sono le più comuni.Indipendentemente dalla causa: c'è un modo per analizzare la ragione di questa crescita del log inspiegabile/mancanza di troncamenti e vedere cosa sono.

Con l'interrogazione del[`sys.databases`](https://msdn.microsoft.com/en-us/library/ms178534.aspx)visualizzazione del catalogo è possibile visualizzare le informazioni che descrivono il motivo per cui il file di registro potrebbe essere in attesa di troncare/riutilizzare.

C'è una colonna chiamata`log_reuse_wait`con un ID di ricerca del codice motivo e a`log_reuse_wait_desc`colonna con una descrizione del motivo di attesa.Dall'articolo in linea dei libri di riferimento sono la maggior parte dei motivi (quelli che è probabile vedere e quelli che possiamo spiegare i motivi. I missing sono fuori uso o per uso interno) con alcune note sull'attesa in*corsivo*:

* 0 = Niente  
*Quello che sembra .. Non dovrebbe essere in attesa*
* 1 = Checkpoint  
*In attesa che si verifichi un checkpoint.Questo dovrebbe accadere e dovresti stare bene - ma ci sono alcuni casi da cercare qui per risposte successive o modifiche.*
* 2 = backup del registro  
*Stai aspettando che si verifichi un backup del log.O li hai programmati e succederà presto, o hai il primo problema descritto qui e ora sai come risolverlo*
* 3 = backup o ripristino attivo  
*Un'operazione di backup o ripristino è in esecuzione sul database*
* 4 = Transazione attiva  
C'è una transazione attiva che deve essere completata (in entrambi i casi -`ROLLBACK`o`COMMIT`) prima che il log possa essere sottoposto a backup.Questa è la seconda ragione descritta in questa risposta.
* 5 = mirroring del database  
*O uno specchio si trova dietro o sotto una certa latenza in una situazione di mirroring ad alte prestazioni o il mirroring viene messo in pausa per qualche motivo*
* 6 = Replica  
*Ci possono essere problemi con la replica che causerebbero questo - come un agente di log reader non in esecuzione, un database che pensa che sia contrassegnato per la replica che non è più e vari altri motivi.Puoi anche vedere questo motivo ed è perfettamente normale perché stai guardando al momento giusto, proprio come le transazioni vengono consumate dal log reader*
* 7 = Creazione di snapshot del database  
*Stai creando un'istantanea del database, lo vedrai se guardi al momento giusto mentre viene creata un'istantanea*
* 8 = Scansione registro  
*Devo ancora incontrare un problema con questo che corre da sempre.Se si guarda abbastanza a lungo e abbastanza frequentemente è possibile vedere che ciò accada, ma non dovrebbe essere una causa di una crescita eccessiva del registro delle transazioni, che ho visto.*
* 9 = Una replica secondaria di Gruppi di disponibilità AlwaysOn applica i record del registro delle transazioni di questo database a un database secondario corrispondente.*A proposito della descrizione più chiara ancora ..* >  esiste un modo per caricare la proprietà della chiave di navigazione come entity-framework (lazy-loading)? 
> 
> 

 No, Dapper è una libreria SQL diretta, ed è per questo che è così incredibilmente veloce. Non vi è alcun sovraccarico che circonda il carico automatizzato. È tuttavia possibile caricare più di un'entità alla volta. 


>  qual è la differenza tra serializzazione POCO e serializzazione dinamica? che è migliore? e come posso usare questa serializzazione? 
> 
> 

 La serializzazione POCO è più efficiente perché il tipo è ben noto in fase di compilazione, la serializzazione dinamica è un po 'più costosa perché deve essere valutata in fase di esecuzione. Oltre a questo non c'è davvero una differenza. 

 Tuttavia, consiglierei Dapper al di sopra di ***tutte le altre*** librerie ovunque. È semplice, veloce ed estremamente flessibile. E credetemi, ho usato molti framework e librerie per l'accesso ai dati. 

 [Documentazione Dapper](https://github.com/StackExchange/dapper-dot-net) 

 Dai un'occhiata a **Multi Mapping** e **Multiple Results** <p>per non dire che le altre risposte qui non hanno merito, fanno dei buoni punti. ma vado contro il consenso generale e sono d'accordo con te sul fatto che passare a siti web per qualcosa di più delle semplici funzionalità in tempo reale è molto interessante.</p><p>sto seriamente pensando di spostare la mia app da un'architettura restful a più di uno stile rpc tramite websocket. questa non è una "app giocattolo" e non sto parlando solo di funzionalità in tempo reale, quindi ho delle riserve. ma vedo molti vantaggi nel percorrere questa strada e sento che potrebbe rivelarsi una soluzione eccezionale.</p><p>il mio piano è di usare <a href="http://substack.net/posts/85e1bd/dnode-asynchronous-remote-method-invocation-for-node-js-and-the-browser">dnode</a> , <a href="http://socket.io/">socketio</a> e <a href="https://github.com/jashkenas/backbone">backbone</a> . con questi strumenti, i miei modelli e raccolte backbone possono essere passati da/a client e server semplicemente chiamando uno stile rpc di funzioni. niente più gestione rest endpoint, serializzazione/deserializzazione di oggetti e così via. non ho ancora lavorato con socketstream, ma vale la pena dare un'occhiata.</p><p>ho ancora molta strada da fare prima di poter affermare definitivamente che questa è una buona soluzione e sono sicuro che non sia la soluzione migliore per ogni applicazione, ma sono convinto che questa combinazione sarebbe eccezionalmente potente. ammetto che ci sono alcuni svantaggi, come la perdita della capacità di memorizzare nella cache le risorse. ma ho la sensazione che i vantaggi li supereranno.</p><p>sarei interessato a seguire i tuoi progressi esplorando questo tipo di soluzione. se hai qualche esperimento su github, ti prego di indicarmi. non ne ho ancora, ma spero presto.</p><p>di seguito è riportato un elenco di collegamenti da leggere in seguito che ho raccolto. non posso garantire che valgano tutti la pena, dato che ne ho solo scremati molti. ma spero che alcuni possano aiutare.</p><hr><p>ottimo tutorial sull'uso di socket.io con express. espone sessioni espresse a socket.io e discute come avere stanze diverse per ogni utente autenticato.</p><ul> <li> <a href="http://www.danielbaulig.de/socket-ioexpress/">http://www.danielbaulig.de/socket-ioexpress/</a> </li> </ul><p>tutorial su node.js/socket.io/backbone.js/express/connect/jade/redis con autenticazione, joyent hosting, ecc:</p><ul> <li> <a href="http://fzysqr.com/2011/02/28/nodechat-js-using-node-js-backbone-js-socket-io-and-redis-to-make-a-real-time-chat-app/">http://fzysqr.com/2011/02/28/nodechat-js-using-node-js-backbone-js-socket-io-and-redis-to-make-a-real-time- chat-app /</a> </li> <li> <a href="http://fzysqr.com/2011/03/27/nodechat-js-continued-authentication-profiles-ponies-and-a-meaner-socket-io/">http://fzysqr.com/2011/03/27/nodechat-js-continued-authentication-profiles-ponies-and-a-meaner-socket-io/</a> </li> </ul><p>tutorial sull'uso di pusher con backbone.js (usando rails):</p><ul> <li> <a href="http://blog.pusher.com/2011/6/21/backbone-js-now-realtime-with-pusher">http://blog.pusher.com/2011/6/21/backbone-js-now-realtime-with-pusher</a> </li> </ul><p>crea un'applicazione con backbone.js sul client e node.js con express, socket.io, dnode sul server.</p><ul> <li> <a href="http://andyet.net/blog/2011/feb/15/re-using-backbonejs-models-on-the-server-with-node/">http://andyet.net/blog/2011/feb/15/re-using-backbonejs-models-on-the-server-with-node/</a> </li> <li> <a href="http://addyosmani.com/blog/building-spas-jquerys-best-friends/">http://addyosmani.com/blog/building-spas-jquerys-best-friends/</a> </li> <li> <a href="http://fzysqr.com/2011/02/28/nodechat-js-using-node-js-backbone-js-socket-io-and-redis-to-make-a-real-time-chat-app/">http://fzysqr.com/2011/02/28/nodechat-js-using-node-js-backbone-js-socket-io-and-redis-to-make-a-real-time- chat-app /</a> </li> <li> <a href="http://fzysqr.com/2011/03/27/nodechat-js-continued-authentication-profiles-ponies-and-a-meaner-socket-io/">http://fzysqr.com/2011/03/27/nodechat-js-continued-authentication-profiles-ponies-and-a-meaner-socket-io/</a> </li> </ul><p>utilizzando backbone con dnode:</p><ul> <li> <a href="http://quickleft.com/blog/backbone-without-ajax-part-ii">http://quickleft.com/blog/backbone-without-ajax-part-ii</a> </li> <li> <a href="http://quickleft.com/blog/backbone-without-ajax-part-1">http://quickleft.com/blog/backbone-without-ajax-part-1</a> </li> <li> <a href="http://sorensen.posterous.com/introducing-backbone-redis">http://sorensen.posterous.com/introducing-backbone-redis</a> </li> <li> <a href="https://github.com/cowboyrushforth/minespotter">https://github.com/cowboyrushforth/minespotter</a> </li> <li> <a href="http://amir.unoc.net/how-to-share-backbonejs-models-with-nodejs">http://amir.unoc.net/how-to-share-backbonejs-models-with-nodejs</a> </li> <li> <a href="http://hackerne.ws/item?id=2222935">http://hackerne.ws/item?id=2222935</a> </li> <li> <a href="http://substack.net/posts/24ab8c">http://substack.net/posts/24ab8c</a> </li> </ul> Io, riguardo l'ultimo aggiornamento, non ho riscontrato problemi. Completo con facilità e velocità le lezioni, e anche quando non carica velocemente, aspetto qualche secondo, esco e rientro nell'App. Non so se tu ne sia a conoscenza, ma esiste anche il sito, per PC. Lì è molto più efficiente, veloce, e ci sono più funzioni. Spero di essere stata d'aiuto. Buono studio a tutti! <p>due cose che consiglierei:</p><ul> <li> <p>discuti con loro e scopri quanto sono appassionati di ciò che fanno. questo è un buon indicatore per stabilire se qualcuno è un buon assunto per qualsiasi settore, ma in particolare, vuoi valutare quanto sono coinvolti e in grado di tenere il passo con gli eventi. trovo le persone che sanno cosa sta succedendo, cosa c'è di nuovo, cosa sta tagliando edge e da tutte quelle cose che cosa usare e quando usarlo sono più utili delle persone che hanno imparato il modo teorico per costruire un'interfaccia utente nel 1995 ma non hanno tenuto il passo con il mondo reale.</p> </li> <li> <p>fagli riprogettare qualcosa che non ti piace molto. questo è importante perché una delle abilità principali di un designer dell'interazione è <em>refactoring</em>, che dovrebbe esserti familiare come programmatore. la riprogettazione non consiste nel buttare via tutto e ricominciare da zero, si tratta di sapere cosa cambiare, perché cambiarlo e comprendere l'impatto di tale cambiamento sulla base utenti, sul client e sul team di progettazione.</p> </li> </ul><p>quindi, per esempio, inizierei la prima parte con domande del tipo "cosa ti piace di hunch?" o "come ti senti sulla nuova ricerca di google immagini?". in questo modo puoi capire se sanno anche cosa sta succedendo nella progettazione dell'interfaccia utente. "sei entusiasta di progettare piattaforme mobili?", ecc. chiedi loro di parlarti della loro app o del loro gioco preferito e di spiegare cosa c'è di così straordinario dal punto di vista dell'interfaccia utente/ia. fai in modo che ti vendano qualcosa: il loro monologo/sfogo appassionato su qualcosa ti darà una buona idea se sanno di cosa stanno parlando o se stanno solo inventando qualcosa.</p><p>la seconda parte è più difficile dato che non sei tu stesso un designer, ma come per le domande di intervista di programmazione, non si tratta tanto del risultato finale quanto del processo. quindi assicurati che quando chiedi loro di ridisegnare qualcosa, sia abbastanza piccolo da poter passare attraverso quel processo con te. presta attenzione a come lo fanno: tirano fuori un blocco da disegno e iniziano a disegnare idee? dicono "bene, hai un computer con photoshop installato?". cominciano a fare domande? tutte queste cose ti diranno come comunicano, come imparano, quanto sono curiosi. se sono buoni, quindi prima di prendere decisioni avventate sul cambiamento di un'interfaccia utente, vorranno capirlo nel miglior modo possibile. ciò significa comprendere la logica aziendale, la visione/strategia e le decisioni ingegneristiche.</p><p>capisco che il mio consiglio non è convenzionale, ma ho sempre aderito all'idea che se qualcuno è una persona buona, appassionata e onesta, nel lungo periodo faranno di più per te che se potessero nominare 5 designer famosi e 10 i libri dell'interfaccia utente sono in cima alle loro teste. nell'intervista, è necessario non solo testarli per curiosità sull'interfaccia utente, ma anche su come svolgono il loro lavoro. questo metodo è davvero bravo a farlo.</p> il tuo provider ha la tua navigazione in memoria, ovvero:

associa all'indirizzo ip che ti rilascia alla connessione il mac address della tua scheda di rete. quindi sanno dove hai navigato ma serve solo per eventuali indagini delle forze dell'ordine altrimenti dopo 2 anni (mi pare) possono cancellare il tutto. nel caso specificato puoi muoverti in vari modi:

-se le risposte violano le linee guida (tipo chi risponde per due punti), puoi segnalarle tutte, poi visto che non ci saranno più risposte avrai i 5 punti indietro;
-puoi eliminare direttamente la domanda, cliccando sulla matita a fianco al numero delle stelle date, ma non avrai punti indetro;
-un piccolo trucco che ho scoperto; allunga la durata della domanda (sempre andando sulla matita), poi lasciala andare ai voti, infine vota "nessuna migliore risposta". così nessun altro voterà visto che la domanda sarà coperta dalle domande mandate in votazione da 4 giorni, mentre la tua è andata ai voti dopo una settimana. se non hai capito bene puoi contattarmi via mail.