venerdì, febbraio 15, 2019

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 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

Comprato un disco da 1TB della 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..

L'altro giorno ci sono stati momenti di panico..

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

Considerato che oggi volevo fare questa operazione
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

Che bello oggi mi sono comprato artisteer programmino niente male (costicchia)

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!!

Non stò parlando di terminator, nè di skynet..

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...