Proudly debugging the system since 1981

Categoria: programmazione (Pagina 4 di 6)

Anti IF Campaign

Prima di tutto il link

ANTI IF CAMPAIGN

Poi discutiamo del fatto che l’if, come molti costrutti della programmazione imperativa, si presta all’abuso. Il software deve essere pensato per essere mantenibile e non una collezione ingestibile di pezze. Questo, come molte altre cose in informatica, si raggiunge col buon senso. Non è che sostengo, come la persona nel link qua sopra, che gli IF non vadano mai usati. Ma quando ce n’è uno lungo 780 caratteri, vuol dire che la progettazione di quel pezzo di software ha fallito. O non c’è mai stata.

L’ If è una delle strutture base, insieme al ciclo senza contatore e al GOTO ( si il dannato GOTO ). La programmazione alla fine si basa su questo. O se vogliamo ricondurla al’assembler JE o JNE … chi ha usato un disassemblatore X86 sà a cosa mi riferisco. Non si dimenticano i salti condizionati. Ma non si può esprimere concetti complessi in modo immediatamente comprensibile tramite di essi. Se ci metti 2 – 3 condizioni va bene. E’ chiaro e leggibile. Se ne metti 30 immischiate in un casino di parentesi e OR / AND  ci metto 3 ore a campire cosa significano e 5 minuti a fargli-fare-cio-che devo fare. E generalmente quest’ultimo scenario deriva da pezze attaccante di volta in volta da programmatori che per voglia o per obbligo hanno applicato la filosofia del minimo-sforzo (e risultato appena sufficiente)

HTML 5

… ovvero ci toglieremo gli oggetti embedded di torno ?

Speriamo. Intanto per farsi una rapida idea delle novità, tra le tante cose scritte (e che non intendo riscrivere pure io) consiglierei questo : HTML 5 and CSS 3

Tra l’altro mi ha fatto scoprire un nuovo verbo inglese: To Zebra-stripe (something).

Italianizzato è ancora più bello. “Che te la zebrastrippo quella tabella o te la lascio piatta?”

Google App Engine for Java!

Mi hanno appena abilitato l’account per il suddetto application server. Magari provo a far qualcosa.

Considerazione numero 1 : Molti hoster di livello medio alto avranno qualche grattacapo. Difficile offrire una scalabilità migliore.

Considerazione numero 2 : Un linguaggio in cui l’indentatura è parte della sintassi non ha il mio rispetto. E’ come confondere la bellezza con la praticità. Ne uscirà comunque una porcata.

Form dinamiche ed elementi indicizzati

Uno dei problemi più noiosi da gestire nello sviluppo di una web-application è il caso in cui non si conosce a priori il numero di elementi che saranno postati attraverso una form. Questo capita quando c’è di mezzo una tabella con dati provenienti da database e bisogna eseguire su questi piu operazioni con un solo submit della form stessa.
Un esempio classico è il carrello. Un carrello contiene da 1 a infiniti elementi e per ognuno di essi è definita una quantità. Questo viene mostrato all’utente sottoforma di una tabella e l’utente può modificare più quantità contemporaneamente ed eseguire, quando tutto è a posto, un singolo “aggiorna totali” o “check-out”.
Continua a leggere

0.6 Linee di codice all'ora. In media…

No, non io. Ma qualcuno si.

All’università qualcuno sosteneva che 11 righe di codice all’ora sono la media. Considerando analisi, sviluppo, incontri, test, tempi morti … tutto insomma.

Dalla mia esperienza sò che si possono superare tranquillamente le 100 righe all’ora usando gli strumenti giusti e avendo le richieste ben chiare. Voi su che media vi attestate ? Siete delle code monkeys o dei maniaci dell’analisi e dell’ottimizzazione ?

Hibernate e la generazione di query…

SELECT * FROM (SELECT THIS_.CC120_PG AS T1_1_5_,
THIS_.CC120_PG_OWN AS T2_1_5_, THIS_.CC120_UNI_AMM AS T3_1_5_,
THIS_.ID1 AS T4_1_5_, THIS_.CC120_TP_GES AS T5_1_5_,
THIS_.CC120_DESC AS T6_1_5_, THIS_.CC120_QTA AS T7_1_5_,
THIS_.CC120_NUM AS T8_1_5_, THIS_.CC120_VAL AS T9_1_5_,
THIS_.CC120_ASS AS TT110_1_5_, THIS_.CC120_NOTE AS T11_1_5_,
THIS_.CC120_VAL_EURO AS CC120_1_5_, THIS_.CC120_ASS_EURO AS T13_1_5_,
T1_.TT110_PG AS T1_6_0_, T1_.MOVI AS T2_6_0_,
T1_.TCAT AS T3_6_0_, T1_.CDC AS T4_6_0_,
T1_.TT110_BEN AS T5_6_0_, T1_.TT110_FLG_PRO AS T6_6_0_,
T1_.TT110_UNI_AMM AS T7_6_0_, T1_.ANNO AS T8_6_0_,
T1_.TT110_CDC AS T9_6_0_, T1_.TT110_NUM AS TT110_6_0_,
T1_.DATA AS T11_6_0_, T1_.TT110_IMP AS CC120_6_0_,
T1_.ANNO_IMP AS T13_6_0_, T1_.TCAT_CAP AS T14_6_0_,
T1_.TT110_FONDO AS T15_6_0_, T1_.TT110_NUMERO AS T16_6_0_,
T1_.ANN AS T17_6_0_, T1_.TT110_NOTE AS T18_6_0_,

Continua a leggere

Cosa cambiare se finisce l'heap space di Tomcat?

Capita, specie se si fa reload di webapp ogni 5 minuti, che tomcat mandi un errore riferito al PerGen Space.

Ora, premesso che non è bene reloadare a nastro, se proprio è necessario farlo per ragioni di test, si può risolvere aumentando la dimensione massima del permanent generation heap. La configurazione si trova in genere nel file di profile dell’utente che esegue tomcat e si chiama -Xmx . La configurazione di default è 64mb, ma se avete ampie disponibilità di memoria ci si puo azzardare anche in un -Xmx1024m equivalente quindi a 1 gigabyte. L’importante è NON settare un valore superiore a quello della memoria fisica a disposizione, pena continue swappate.

Litigando con le comboBox

csharp Un paio di cose da sapere sulle comboBox in C# / WindowsForms:

  • La generazione automatica del codice produce un controllo che non serve a nulla
  • Nell’ipotesi piu classica, ovvero di avere una form che mostra il contenuto di una tabella con collegamenti ad atre tabelle mediante id, la soluzione piu comoda per permettere l’editing è la comboBox
  • Per "caricare" i dati da un altra tabella bisogna associare a ComboBox.DataSource una bindingSource avendo cura di specificare in ComboBox.DisplayMember il nome del campo da visualizzare, e in ComboBox.ValueMember il nome del campo contenente la chiave su cui è basato il collegamento tra le due tabelle (in genere Id)
  • Il dataBinding va eseguito sulla proprietà "SelectedValue"

 

Esempio:

this.MycomboBox.DataBindings.Add(new System.Windows.Forms.Binding("SelectedValue", this.PrimaryBindingSource, "nomecampo_contenente_id", true));
this.MycomboBox.DataSource = this.SecBindingSource;
this.MycomboBox.DisplayMember = "Nome";
this.MycomboBox.ValueMember = "Id";

Appunti .net

net.jpgInauguro un post di appunti vari in ambiente .net/c#. Chissà … magari può tornare utile …

ConfigurationManager

Utilizzare la stringa di connessione memorizzata nel file di config è una buona pratica e questa stringa è accessibile tramite questa semplice riga di codice :

string constr = System.Configuration.ConfigurationManager.ConnectionStrings[“nome connessione”].ConnectionString;

Ma bisogna ricordarsi di aggiungere tra i riferimenti System.configuration

Date Format

La tecnica detta “Date formatting” è quella tecnica che permette di effettuare un controllo sulla formattazione di una data in formato stringa. Il framework rappresenta le date con il tipo di dato DateTime; questo tipo di dato implementa l’interfaccia IFormattable che gli permette di essere appunto formattato in una stringa, attraverso uno degli overload del metodo ToString(), potendo scegliere tra vari tipi di formati.
Il formato scelto va definito passando al metodo ToString() una stringa di testo contenente il pattern corrispondente.
Ecco l’elenco di tutti i pattern disponibili (prendendo come data il 18/09/2005 15:00):

Via AspCode.it

Esempio usando un DataReader :

((DateTime)MyReader[2]).ToString(“dd/MM/yyyy”);

Settare il livello di sicurezza di Access avviato tramite PIA

(Access.ApplicationClass).AutomationSecurity = Microsoft.Office.Core.MsoAutomationSecurity.msoAutomationSecurityLow;

E si può dire addio alle fastidiose richieste di conferma…

« Articoli meno recenti Articoli più recenti »

© 2024 b0sh.net

Tema di Anders NorenSu ↑