Dev Web
Programmazione
venerdì, febbraio 15, 2019
Non mi ricordavo di avere un blog..
Non che qualcuno lo legga.. e così dal nulla ho deciso di metterci un tema nuovo..
Comunque ho 20 post in bozza ma prima o poi li passerò sul nuovo sito della mia web agency
A presto..
venerdì, febbraio 04, 2011
Mai più dischi hitachi
è durato meno di 9 mesi.. (sopra c'era installato linux che notoriamente non schianta i dischi e conteneva solo il sistema niente dati)
Vabbè direte è in garanzia..te lo cambiano
Bene ora vi racconto come funziona il sistema RMA della HITACHI
premetto che il disco è costato 68 euro Iva esclusa
oggi appena rotto ho contattato il posto dove l'ho comprato
mi hanno detto che per la roba hitaci devo fare l'RMA è direttamente dal produttore
mi hanno dato un numero di telefono di milano chiamo
e naturalmente figuratevi se non mi risponde un call center da chissà dove nel mondo
che naturalmente parla solo inglese,francese e tedesco..
in pratica mi dice che posso solo fare l'RMA dal sito (dal momento in cui si è rotto il disco ho già perso 1 ora di lavoro e due telefonate)
vado sul sito è c'è scritto che devo fare prima il fitness test.
faccio il test (devo usare un DVD per il loro programma costo 1.20€)
naturalmente il programma di test non vede il disco... (se è rotto è rotto)
quindi faccio tutta la procedura per RMA da loro sito e via mail mi arriva l'indirizzo a cui spedire il disco ed una serie di regole per il packaging che se non eseguite penalizzano la garanzia.
riporto i link:
http://www.hitachigst.com/hdd/support/packaging2.htm
http://www.hitachigst.com/hdd/support/packaging3.htm
naturalmente sul sito ti consigliano di comprare questo packaging:
http://www.wic-store.com/IBM-Hitachi_c_7.html (15$)
dunque faccio un riepilogo
1h per avere l'indirizzo di RMA - mettiamo 15€/h che non ho guadagnato lavorando
1 dvd x 1.20€
15 min per fare i test mettiamo 15€/h
15$ per comprare il materiale per fare il pacco da spedire
25€ per la spedizione di andata (che deve essere tracciabile altrimenti non gli va bene)
Totale: 59.7€
secondo voi conviene per poi avere indietro un disco rigenerato che poi non credo abbia più alcuna garanzia?
giovedì, dicembre 30, 2010
Linux il migliore amico di tutti anche se sbagli..
perchè su linux se sei loggato come root
e per errore dai "rm -rf /" (non provatelo) (e occhio che nel tastierino la / è accanto all' *)
cancelli tutto il sistema per fortuna mi sono accordo di quel che avevo fatto
prima che il comando completasse la sua opera distruttiva
ed ho tempestivamente premuto CTRL+C
Ma ormai alcune cartelle erano andate.. nel paradiso dei file..
in quella frazione di secondo ho pensato un bel moccolo per la mia stupideria..
e fortunatamente non ho chiuso il putty.
la prima cosa che ho fatto è stata di:
cd /
e poi
ls
putroppo il comando "ls" non esisteva più
ho pensato:
- porca miseria.. ho fatto un bel danno
fortunatamento non mi è passato per la testa di chiudere il putty..
[come prima cosa ho provato ad aprire un'altro putty e non riuscivo a loggarmi in nessun modo] giustamente i file che fanno il login erano stati fiammati..
poi lampo di genio!!!
provo a fare cd /bin
e non c'è la directory
altro lampo di genio provo con tree > albero.txt
miracolo questo funziona..
in tempo zero apro il putty su un'altra macchina
e copio la cartella bin in una dir condivisa..
già ma come la rimetto sulla macchina dove per sbaglio l'ho eliminata?
fortunatamente riesco ad eseguire il comando cp direttamente dalla cartella condivisa..
miracolo crash scampato..
dopo un paio di giorni mi accorgo che tutto sembra funzionare a dovere solo
apparentemente.. infatti un sacco di file della dir bin hanno i permessi messi
a caso.. me ne accorgo confrontando gli output di ls -l
per un po' ho provato a rimetterli a mano.. ma è una palla
quindi gogoolando mi sono imbattuto in questi comandi (come ho fatto a non pensarci da solo?) me li segno qui almeno se ricapita..
#reimposta i permessi di tutti i pacchetti installati
for p in $(rpm -qa); do rpm --setperms $p; done
#reimposta i padroni dei file
for p in $(rpm -qa); do rpm --setugids $p; done
morale della favola e lo scrivo maiuscolo per ricordarlo meglio
NON LOGGATEVI MAI COME ROOT SE NON E' STRETTAMENTE NECESSARIO
martedì, ottobre 12, 2010
Duplicare riga con chiave primaria con mysql
e non sono riuscito a trovare un sistema navigando
mi sono dovuto spremere le meningi...
L'obbiettivo era questo:
volevo duplicare una riga presente in una tabella di mysql assegnando una nuova chiave primaria e volevo (per pigrizia) fare tutto in una volta con meno comandi possibili e senza dover riscrivere tutte le colonne della tabella..
ecco il codice:
create temporary table temp_prodotti
as
select * from prodotti2 WHERE codice='7';
-- CREO UNA TABELLA TEMPORANEA A PARTIRE DALLA TABELLA PRODOTTI
-- NELLA NUOVA TABELLA TABELLA TEMPORANEA VIENE COPIATA LA RIGA CON CODICE 7
-- CODICE E' LA CHIAVE PRIMARIA
update temp_prodotti set codice='7b' where codice='7';
-- CAMBIO IL CODICE DA '7' A '7b'
insert into prodotti2 select * from temp_prodotti;
-- RICOPIO LA NUOVA RIGA (CON IL NUOVO CODICE)
-- NELLA TABELLA DA CUI PROVIENTE
drop temporary table temp_prodotti;
-- ELIMINO LA TABELLA TEMPORANEA
giovedì, ottobre 07, 2010
Artisteer
Però devo dire che nonostante il mio essere totalmente anti-WYSIWYG
questo artisteer tira fuori del codice per ora da una rapida occhiata mi sembra ben scritto e ben formattato e funzionante..
così non mi devo sbattere più di tanto a fare i layout e posso concentrarmi sulle altre funzionalità dei siti..
Anche se ho già trovato un paio di bug..
che ho prontamente segnalato a loro... speriamo li risolvano presto
Avete visto ho anche cambiato il layout del blog!! Che bello!! ci ho messo 5 minuti
e non ho scritto una riga di codice!!
mercoledì, ottobre 06, 2010
la Ribellione delle Macchine!!
Oggi è la ribellione dei sistemi elettronici!!!
Ore 5.30AM
Il mio telefono (spento) ha iniziato a squillare come un pazzo nonostante la sveglia fosse impostata alle 8.30 sembravano dei promemoria ma giuro non ne avevo messo nessuno.
Ore 9.15AM
Mentre vengo in ufficio in auto e parlo al telefono con il vivavoce Blutooth
parte da sola una chiamata e mentre parlo con il mio interlocutore sento lo squillo di libero come se stessi chiamando qualcuno..e nel frattempo inizia anche a squillare il cellulare guardo il display sul cruscotto.. mi stavo chiamando da solo..
ho dovuto spegnere e riaccendere la macchina...
Ore 9.45AM
Pensando ad un virus sul telefonino lo resetto mentre faccio queste operazioni
sposto la sim su un'altro telefono per poter comunque lavorare..
Appena avvio il nuovo telefono comincia a squillare da solo una miriade di promemoria partono non appena acceso il nuovo telefono..
Ore 10.00AM
Mi chiama un cliente che dice di avere problemi di posta elettronica
fino a ieri tutto funzionava correttamente penso che abbia armeggiato con
la configurazione.. entro in teleassitenza e mi sembra tutto ok..
mentre anch'io scarico la posta vedo il mio outlook che dà degli errori!!
Subito apro telnet e provo una sessione per vedere che cavolo fà il server Imap
panico!!!! il server di posta è down!! dico al cliente che controllo e lo richiamo.
Ore 10.30AM
Il server è una VPS presso aruba..
prima di contattare aruba provo un'altro VPS e faccio tutte le verifiche del caso per vedere se non sia solo mio il problema..ma anche altri VPS sono down!!
Il panico cresce! ora mi chiamerranno decine di persone perchè i server sono giù.
provo ad aprire un ticket sul loro sistema.
è giù anche quello!!!
provo a chiamarli per sapere cosa succede!
li chiamo al solito numero in rubrica (dal fisso)
mi risponde una signora di bologna che mi dice che non sono il primo che la chiama
ma che ho sbagliato numero!!
Impossibile è salvato nella rubrica del fisso basta tenere premuto il 5 e parte la chiamata a loro.
Provo facendo il numero a mano finalmente (penso mentre squilla) dopo tre secondi mi dà come se il loro telefono fosse staccato!!
Riprovo varie volte ma è sempre staccato.
non resta che apettare che si degnino di far qualcosa.. nel frattempo ho tutti i VPS giù.
Ore 13.45
Fortunatamente i servizi vengono ripristinanti e tutto torna alla normalità.
Ore 16.00
Mi chiama un cliente dicendomi che nel suo applicativo si presenta un bug
il bug lo avevo risolto mesi fà e funzionava correttamente dopo vari controlli
mi accorgo che il cliente aveva autonomamente recuperato un backup di due mesi fà
e tutt'ora non sono riuscito a capire come abbia fatto visto che i backup sono su una macchina con protetta da password
Pardon per lo sfogo...
di solito non parlo di fatti miei.. ma oggi è stata una giornata da pazzi..
sabato, ottobre 02, 2010
Wake On LAN su CentOS
Dopo un po' di tribolazioni con il wake on lan (che serve per avviare una macchina da remoto) ho trovato il modo più semplice (almeno per me) per far funzionare tutto:
Operazioni da effettuare sulla macchina che deve essere accesa da remoto:
Abilitare dal bios (se lo supporta) la funzione Wake on su PCI o Wake On Lan
nelle schede asrock si abilita dalla voce ACPI -> Ring on PCI o qualcosa di simile
Poi bisogna editare lo script di shutdown
vim /etc/rc.d/init.d/halt
prima dell'ultima linea
exec $command $HALTARGS
aggiungere:
Abilita la scheda di rete sostituite eth1 con il nome della vostra scheda
/sbin/ifconfig eth1 up
Imposta il tipo di wake up per la scheda sostituite eth1 con il nome della vostra scheda
/usr/sbin/ethtool -s eth1 wol g
Alla fine le ultime tre linee del file devono presentarsi così:
/sbin/ifconfig eth1 up
/usr/sbin/ethtool -s eth1 wol g
exec $command $HALTARGS
Recuperate il MAC address della scheda di rete interessata
ifconfig eth1 grep HWaddr
Il sistema restituirà la seguente linea contenente il MAC address
eth1 Link encap:Ethernet HWaddr 00:13:8F:CE:D1:F5
Spegnere la macchina interessata
shutdown -h now
Operazioni da effettuare sulla macchina che deve accendere da remoto
Recuperare l'utilità wake on lan
wget http://gsd.di.uminho.pt/jpo/software/wakeonlan/downloads/wakeonlan-0.41-0.fdr.1.noarch.rpm
Installare l'utlità per il wake on lan
rpm -Uvh wakeonlan-0.41-0.fdr.1.noarch.rpm
una volta effettuate queste operazioni lanciare il seguente comando
dove al posto del mio scrivere il MAC address recuperato precedentemente
wakeonlan 00:13:8F:CE:D1:F5
Se tutto è andato a buon fine la macchina spenta nei passi precedentemente
inizierà la fase di startup
giovedì, marzo 04, 2010
Riassemblaggio raid5
Me lo scrivo qui, giusto come promemoria visto che mi ci è voluto un po' per trovare la strada giusta per rimettere in piedi un raid5 dopo la reinstallazione di CentOS
Recupero l'uuid del disco
mdadm -E /deb/sdb
Lo riassemblo nell'array ed infine risalvo mdadm.conf
mdadm --assemble --uuid=/dev/md0
cd /etc/
echo "DEVICE partitions" > mdadm.conf
mdadm --detail --scan >> mdadm.conf
mount /dev/md0 /dati
Et voilà in dati ritrovate tutto quel che c'era (ovviamente poi basta rimettere tutto in fstab in modo che al riavvio si rmonti da solo)
mercoledì, marzo 03, 2010
Metodo per comporre query sql
Ho trovato un sistema eccellente per scrivere le query di insert ed update che a volte possono dare origine a codice molto disordinato e difficile da rileggere
Per esempio per formattare questa query come questa con vb script (ASP)
INSERT INTO TABELLA (campo1,campo2) VALUES ('campo1','campo1')
nel metodo tradizionale avrei fatto più o meno così: (magari spezzando la query in più variabili)
sSQL = "INSERT INTO TABELLA (campo1,campo2) VALUES ("'& CheckString(Request("campo2")) &'","'"& CheckString(Request("campo1")) &"'")"
questa sintassi spesso causa vari problemi di rilettura del codice, soprattuto con query molto lunghe.
Con il nuovo sistema suddivido il tutto in due variabili che poi vado concatenare
sSQl = "INSERT INTO tabella (" : sValues = " ) VALUES ("
sSQl = sSQL & " campo1 " : sValues = sValues & "'" & CheckString(Request("campo1")) & "'"
sSQl = sSQL & ",campo2 " : sValues = sValues & ",'" & CheckString(Request("campo2")) & "'"
sSQL = sSQL & sValues & ")"
Così il codice risulta molto più leggibile e grazie al divisorio ":" in vbscript ho la possibilità di mantenere sulla stessa linea di codice sia il nome della colonna che il valore che ci andrà salvato
lunedì, marzo 01, 2010
Inviare un report di stato del raid 5 via e-mail
Ho creato questo script che serve per generare un report ed inviarlo per e-mail
in modo da poter verificare automaticamente lo stato dei dischi del mio fake array
spero possa essere utile a qualcuno di seuguito lo script:
#!/bin/bash
cd /dati
echo 'mdadm --detail /dev/md0' > 'raid.txt'
echo '' >> raid.txt
mdadm --detail /dev/md0 >> raid.txt
echo '#################################################################' >> raid.txt
echo '' >> raid.txt
echo 'cat /proc/mdstat' >> raid.txt
echo '' >> raid.txt
echo '#################################################################' >> raid.txt
cat /proc/mdstat >> raid.txt
echo '#################################################################' >> raid.txt
echo '' >> raid.txt
echo 'smartctl -H /dev/sda' >> raid.txt
echo '' >> raid.txt
echo '#################################################################' >> raid.txt
echo '' >> raid.txt
smartctl -H /dev/sda >> raid.txt
echo '' >> raid.txt
echo '#################################################################' >> raid.txt
echo '' >> raid.txt
echo 'smartctl -H /dev/sdb' >> raid.txt
echo '' >> raid.txt
echo '#################################################################' >> raid.txt
echo '' >> raid.txt
smartctl -H /dev/sdb >> raid.txt
echo '' >> raid.txt
echo '#################################################################' >> raid.txt
echo '' >> raid.txt
echo 'smartctl -H /dev/sdc' >> raid.txt
echo '' >> raid.txt
echo '#################################################################' >> raid.txt
echo '' >> raid.txt
smartctl -H /dev/sdc >> raid.txt
echo '' >> raid.txt
echo '#################################################################' >> raid.txt
echo '' >> raid.txt
echo 'smartctl -H /dev/sdd' >> raid.txt
echo '' >> raid.txt
echo '#################################################################' >> raid.txt
echo '' >> raid.txt
smartctl -H /dev/sdd >> raid.txt
echo '#################################################################' >> raid.txt
hddtemp /dev/sda >> raid.txt
hddtemp /dev/sdb >> raid.txt
hddtemp /dev/sdc >> raid.txt
hddtemp /dev/sdd >> raid.txt
echo '#################################################################' >> raid.txt
OGGETTO="Controllo Disco"
EMAIL="il tuo indirizzo @ email"
MESSAGGIO="/dati/raid.txt"
# send an email using /bin/mail
/bin/mail -s "$OGGETTO" "$EMAIL" < $MESSAGGIO
Ovviamente se qualcuno ha consigli sono ben accetti..
lunedì, settembre 08, 2008
Metodo per avere avviare una singola istanza di un programma su Windows CE
Il codice che segue permette di avviare una singola istanza di un programma su windows CE
scritto in c# funziona correttamente su Compact Framework 2
La fonte è:
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=726497&SiteID=1
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Text;
namespace DevWEB
{
static class Program
{
[DllImport("coredll.dll", SetLastError = true)]
private static extern IntPtr CreateEvent(IntPtr lpEventAttributes, bool bManualReset, bool bInitialState, string lpName);
[DllImport("coredll.dll", SetLastError = true)]
private static extern bool CloseHandle(IntPtr hObject);
private const int ERROR_ALREADY_EXISTS = 183;
[DllImport("coredll.dll", SetLastError = true)]
private static extern IntPtr FindWindow(string className, string wndName);
[MTAThread]
static void Main()
{
string path = System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase;
IntPtr handle = CreateEvent(IntPtr.Zero, false, false, path);
int error = System.Runtime.InteropServices.Marshal.GetLastWin32Error();
if (handle != null && (error != ERROR_ALREADY_EXISTS))
{
Application.Run(new Memor.GUI.MainForm());
}
else
{
// Upon startup CF implementation of mscoree looks for a window with a class #NETCF_AGL_PARK
// and title set to the current process executable full path (\Program Files\MyApp\MyApp.exe).
// If found, the runtime presumes that the current application is already running. In this case
// it will be reactivated. To do this the abovementioned window is sent a message 0x8001,
// and then the new instance quits.
// The CF 2.0 is almost identical: This is only when you start the app multiple times before the Form has
// been appeared.
IntPtr hWnd = FindWindow("#NETCF_AGL_PARK_" + path, string.Empty);
if (hWnd != IntPtr.Zero)
{
Microsoft.WindowsCE.Forms.Message msg = Microsoft.WindowsCE.Forms.Message.Create(hWnd, (int)0x8001, (IntPtr)0, (IntPtr)0);
Microsoft.WindowsCE.Forms.MessageWindow.SendMessage(ref msg);
}
}
CloseHandle(handle);
}
}
}
Non mi ricordavo di avere un blog..
Erano anni che non scrivevo in questo blog... Non che qualcuno lo legga.. e così dal nulla ho deciso di metterci un tema nuovo.. Comunque...
-
Non stò parlando di terminator, nè di skynet.. Oggi è la ribellione dei sistemi elettronici!!! Ore 5.30AM Il mio telefono (spento) ha inizia...
-
Me lo scrivo qui, giusto come promemoria visto che mi ci è voluto un po' per trovare la strada giusta per rimettere in piedi un raid5 do...