Visualizzazione post con etichetta programmazione. Mostra tutti i post
Visualizzazione post con etichetta programmazione. Mostra tutti i post

martedì 17 maggio 2011

PHP stampa diretta senza dialog scelta stampante

Inviare documenti direttamente alla stampante senza il dialog di stampa con php


Per applicazioni web intranet / locali potrebbe essere utile eliminare la conferma della stampa (dialog). Per fare ciò occorre abilitare php_printer.dll nelle ext.

sabato 31 ottobre 2009

Ripristinare un DB SQLServer da file .bak

Ecco come riavere in un attimo .mdf e .ldf ripristinati a partire dal file di backup .bak:


Comodissimo in SQLScheduler su db MSSQL Server!

Backup DB SQLServer 2000 / 2005 Free Automatico

Anche se siamo alle "sogliole" del 2010 è il caso di proporvi questo how-to free sulla copia di backup di database sql server 2000 e/o 2005. Ovviamente esistono soluzioni commerciali quali Uranium Backup che già fa tutto ciò che sto per scrivere, ma a pagamento.

Scopo

Creare (schedulare) una procedura automatica di backup di database sql server (.mdf e .ldf) a caldo, quindi senza detach e attach (o meglio senza fermare servizi!!!) ed inviare il tutto su un server remoto (tipo ftp). Predisporre, inoltre, una procedura di ripristino dei backup.

Software
HOW-to

Installate (sul sito la procedura è abbondantemente descritta) ed eseguito SQLScheduler:
  • aggiungete il server sul quale è installato SQLServer (localhost se sulla stessa macchina);
  • create un "New Job" e alla voce "Details" inserite il codice di seguito riportato e correttamente editato secondo le vostre esigenze:




  • alla voce "Schedule" impostare la frequenza di backup;

  • installare ed eseguire Comodo BackUp;

  • progammate il backup dei file .bak in maniera da farlo partire solo dopo che SQLScheduler ne abbia terminato la creazione!!;


Nella mia implemantazione ho preferito creare un batch che viene eseguito al termine della copia (funzione di Comodo BackUp in External Task) che elimina i vecchi file di backup:


StayUp...

mercoledì 28 ottobre 2009

Centralizzare ed automatizzare la stampa html PHP e OFFICE

Welcome in the rotten world! Avariati ben ritrovati!

Scenario


Un'applicazione web in intranet aziendale ha la necessità di centralizzare ed automatizzare le stampe in questo senso: File A -> Stampante A; File B -> Stampante B; ecc...

Pre-messa


- Windows, IIS/Apache, PHP, Office Word, qualche stampante;
- con PHP possiamo eseguire comandi utilizzando l'operatore backticks (``);
- in Microsoft Office Word esistono delle robe chiamate MACRO;
- in particolare FilePrintDefault binda direttamente la stampa immediata;
- in fine un file batch per gradire.

Implementazione





Nel codice sopra si imposta una stampante predefinita pima e si lancia un file bat poi.

"C:\Program Files\Microsoft Office\Office12\WINWORD.EXE" %1 /q /n /mFilePrintDefault /mFileExit

è il contenuto del file print.bat; ovviamente occorre aggiornarlo con il percorso corretto del file WINWORD.EXE a seconda della versione utilizzata.


dopo l'implementazione largo all'immaginazione...

domenica 26 luglio 2009

PHP Determinare giorni del mese

Se mai vi servisse sapere quanti giorni ci sono in un determinato mese in PHP esiste una pratica funzione che si occupa proprio di questo.

cal_days_in_month ( int $calendar , int $month , int $year )

Sotto un esempio pratico (commentati ci sono le istruzioni per avere l'anno ed il mese corrente)

<?php
$month = 2;
//date( "m",time());
echo "Mese: ".$month;
$year = 2004;
//date( "Y",time());
echo " - Anno: ".$year;
$num = cal_days_in_month(CAL_GREGORIAN, $month , $year);
echo " => Giorni: ".$num;
?>

martedì 17 marzo 2009

CSS background image

Quando si va ad impostare un'immagine di sfondo da css e tale immagine è collocata in un altra cartella si devono inserire due punti per indicare il persorso di root (la radice del nostro sito).
Ad esempio:

body{
background-image: url('../img/sfondo.gif');
}

Già che ci sono vorrei segnalare anche l'eventuale necessità di inserire un'immagine di sfondo e contemporaneamente dare un colore di sfondo.

body{
background: #000000 url('../img/sfondo.gif');
}

Per un esempio più completo e forse utile:

body{
/*immagine di sfondo*/
background-image: url('../img/sfondo.gif');
/*non ripetere l'immagine ne in verticale ne in orizzontale*/
background-repeat: no-repeat;
/*setta il nero come colore di sfondo*/
background-color: #000000;
/*centra l'immagine*/
background-position: center;
/*Il set dell'altezza e della larghezza servono per dare un riferimento alla position*/
/*Altezza*/
height: 600px;
/*Larghezza*/
width: 800px;
}

lunedì 23 febbraio 2009

php getimagesize empty array

Quando getimagesize restituisce un array vuoto prima di passare a complicati affari controllate la vostra php.ini alla voce:
; Maximum allowed size for uploaded files.
upload_max_filesize = 8M

Molto probabilmente avete impostato un valore troppo basso di upload. Per questo motivo la funzione getimagesize rilascia un array vuoto e non si riesce ad avere i valori di width ed height dell'immagine jpg o png...

f***ing lost time :P

martedì 3 giugno 2008

Confrontare IP con C#

In questo momento non ho tempo per approfondire l'argomento cmq se avete bisogno di confrontare due indirizzi ip o per controllare se un indirizzo ip appartiene ad un range di indirizzi ip ho scritto un pò di codice:

using System;
using System.Text;

namespace IPManager
{
class Program
{
static void Main(string[] args)
{
string cmd;
Console.WriteLine("^^^^^^^^^^^^PROG DI TEST PER IP^^^^^^^^^^^^");
Console.WriteLine("-> INSERISCI UN IP NEL FORMATO 192.168.1.1: ");
cmd = Console.ReadLine();
IPAddress ip = new IPAddress(cmd);
Console.WriteLine("-> HAI INSERITO: " + ip.ToString() + "");
Console.WriteLine("-> LO CONVERTO IN LONG: " + ip.Parse(ip.ToString()).ToString() + "");
Console.WriteLine("----------------------------------------");
Console.WriteLine("-> INSERISCI UN RANGE DI IP PER: " + ip.ToString() + "");
Console.WriteLine("-> DA: ");
cmd = Console.ReadLine();
IPAddress ipA = new IPAddress(cmd);
Console.WriteLine("-> A: ");
cmd = Console.ReadLine();
IPAddress ipB = new IPAddress(cmd);
if (ip.isInRange(ipA, ipB))
{
Console.WriteLine("-> " + ip.ToString() + " E' NEL RANGE!");
}
else
{
Console.WriteLine("-> " + ip.ToString() + ">NON< E' NEL RANGE!");
}
}
}
class IPAddress
{
private string ipStr;
public long NumericIPAddress
{
get { return ipNum; }
set { ipNum = value; }
}
private long ipNum;

public IPAddress(string ipAddress)
{
this.ipStr = ipAddress;
this.ipNum = this.Parse(ipAddress);
}

public long Parse(string ipAddress)
{
string[] arr;
arr = ipAddress.Split('.');
return (long.Parse(arr[0]) * 16777216) + (long.Parse(arr[1]) * 65536) + (long.Parse(arr[2]) * 256) + long.Parse(arr[3]);
}
public bool isInRange(IPAddress ipA, IPAddress ipB)
{
if ((ipA.ipNum <= this.ipNum) && (ipB.ipNum >= this.ipNum))
{
return true;
}
else
{
return false;
}
}
public override string ToString()
{
return ipStr;
}
}
}

lunedì 26 maggio 2008

Hero Hack Pack Inside ?

E' finalmente arrivato l' {Hero Hack Pack} di Microsoft che avrebbe dovuto contenere tutto il necessario per lavorare Open con le tecnologie MS.


apriamolo:

versione trial 90 gg di Visual Studio 2008 Professional Edition e versione trial "up to" 120 gg di Windows Server 2008:

Va bene! Bah! Ho preso un Pack!

PS: dimenticavo... è arrivata anche la maglietta della cisco... ma che figata! Avete letto dentro?

domenica 25 maggio 2008

Foto di repertorio - JAVA crunch mode

Oggi giornata di pulizie... e tra una cartella e l'altra ecco una foto da repertorio il primo crunch mode di java! Ahh che ricordi!


Sono le 4 e 30 del mattino del 6 febbraio 2004 e tra tre ore sottoporremo il prj! Andrà molto male... :P
Sembra ieri ed invece son passati più di quattro anni e tanti tanti capelli... ^^
Pizza, Cocacola e pandoro... e qualcuno si accontentava anche delle briciole!

Ora i crunch mode continuano e magari sono anche più frequenti ma da solo ,vi assicuro, non è la stessa cosa...

venerdì 23 maggio 2008

php mysql leggere campo bit

Ecco come fare per leggere i campi bit in php utilizzando mysql:

$result = mysql_query ("
SELECT users.user, (users.administrator = 1) as administrator
FROM users
WHERE users.user = '".$userName."'
") OR die ("

Errore

query CHECK ADMINISTRATOR USER
Dettagli:".mysql_error());
$admin = false;
if(mysql_num_rows($result) > 0)
{
while($row = mysql_fetch_assoc($result))
{
if($row["administrator"] == "1")
$admin = true;
}
}
mysql_free_result($result);
happy php!

giovedì 8 maggio 2008

PHP codice non interpretato

Vi è mai capitato di voler inserire codice php in una pagina?

Non state ad impazzire, esiste una semplice funzione php:

highlight_string

esempio di utilizzo:

<?php

highlight_string('<?php phpinfo(); ?>');


?>



venerdì 4 aprile 2008

query ldap con php

Active Directory e PHP con LDAP

Proviamo un'autenticazione easy easy:

$ldaphost = 'ldap://mioserver';
$ldapport = 389; //di solito 389
$login = 'dominio\username';
$password = 'password';
$ldapconn = ldap_connect($ldaphost, $ldapport);
$ds=$ldapconn;
echo "CONNESSIONE: ".$ds."\n\n";

$bd = ldap_bind($ldapconn, $login, $password);
if($bd) echo 'AUTENTICAZIONE RIUSCITA';
else echo 'AUTENTICAZIONE FALLITA!!!';
Occhio! Ricordatevi di editare il file di configurazione del php e di decommentare la linea con l' LDAP.

lunedì 31 marzo 2008

GDownloadUrl Accesso Negato

Errore: Accesso Negato con Google Maps Api

Con l'utlizzo della funzione GDownloadUrl capita spesso di trovarsi di fronte ad un errore javascript del tipo: riga tot carattere tot Accesso negato.

Bene questo capita in IE (Internet Explorer) in quanto si cerca di effettuare una chiamata fuori contesto e quindi potenzialmente pericolosa. La soluzione è abbastanza semplice:

occorre lavorare su un server anche locale del tipo http://localhost/sito
e NON su percorsi locali quali c:\cartella\file.htm
potete verificare il corretto funzionamento aggiungendo una variabile alla funzione function(data) come in esempio:
GEvent.addListener(marker, "click", function(){
var maxContentDiv = document.createElement('div');
maxContentDiv.innerHTML = 'Loading...';
marker.openInfoWindowHtml("
Ottieni maggiori info cliccando sul tasto in alto a destra.
",
{maxContent:maxContentDiv, maxTitle:"More info"});
var iw = map.getInfoWindow();
GEvent.addListener(iw, "maximizeclick", function(){GDownloadUrl("loadinfo.htm",function(data, responseCode){
if(responseCode != 200)
{
alert('O_o');
}
else
{
maxContentDiv.innerHTML = data;
}
});
});
});


Nel caso in cui il responseCode sia diverso da 200 si è verificato un errore.

Happy mappy! :P

venerdì 16 novembre 2007

java: elevamento a potenza con somma

Un piccolo esercizio per chi si sta avvicinando al mondo java o vuole semplicemente mantenere allenato il cervello:

Si realizzi un programma che calcoli l'elevamento a potenza di un intero utilizzando l'operatore somma + (quindi * non è consentito).

Tieni presente:
3^2 = 3 * 3 = 3+3+3 = 9

Fatto? Controlla: Soluzione.

domenica 7 ottobre 2007

Torna la Musica su Avariato!

Dopo la chiusura di PixPix.net eravamo rimasti a secco di musica; bene, oggi torniamo alla grande con della musica FREE protetta da Creative Commons (http://creativecommons.org/licenses/by-nc-nd/2.0/deed.it), una licenza che permette:
  • di riprodurre,
  • distribuire,
  • comunicare al pubblico,
  • esporre in pubblico,
  • rappresentare,
  • eseguire e recitare
un'opera.

Questa mattina ho installato un flash player per mp3 sul server di laclasse.org ed ho scritto quattro righe di php per automatizzare il processo di creazione delle playlist.



Da oggi potrete ascoltare un pò di musica da Avariato cliccando sul link "musicalMente " nella sezione "Menù del giorno ^^" del blog. Mi impegnerò ad aggiornare le PlayList! :P

giovedì 6 settembre 2007

ASP.NET Emulare il postback di un controllo in Ajax

Se siamo un updatepanel e vogliamo gestire via target ed argument il postback asincrono di un click : javascript:__doPostBack('" + idDelControllo+ "$" + idEsistenteChiamante + "','argument'); con le Ajax extension del .net rispettare quella sintassi è fondamentale. Dobbiamo quindi essere a conoscenza dell'id del controllo contenitore e subito dopo il $ occorre specificare l'id di un elemento esistente ed ovviamente renderizzato. Attenzione che se vogliamo crearne uno fittizio occorre che sia identificato in questa maniera: id=\"" + idDelControllo + "_" + idEsistenteChiamante + "\". Grazie a questi piccoli accorgimenti sarà possibile gestire postback asincroni nelle nostre applicazioni.

Happy coding
Mika

lunedì 3 settembre 2007

ASP.NET Cache dipendente da file

La Cache nel .net può essere appesa alla vita di un file, quindi se per esempio ci troviamo ad avere un controllo dipendente da un file xml in cui vi è la sua configurazione sarà possibile mettere in cache i dati di configurazione. In pratica si legge il file solo se ci sono stati dei cambiamenti e non ad ogni inizializzazione del controllo:

public Configuratore(string file)
{
if (HttpContext.Current.Cache[file] == null)
{
//se la cache è vuota allora la riempio:
string conf = "TI METTO IN CACHE";
HttpContext.Current.Cache.Insert(file, conf, new System.Web.Caching.CacheDependency(file));
}
else
{
string conf = (string) HttpContext.Current.Cache[file];
}


Happy coding

mercoledì 29 agosto 2007

Asp.net: XmlDocument VS XmlTextReader

Per accedere ad un file xml due possibilità sono quelle di utilizzare XmlDocument e/o XmlTextReader; due metodi differenti per il fatto che il primo ti dà accesso ai singoli nodi mentre il secondo ti costringe a scansionare tutto il file:

//XmlTextReader xmlReader = new XmlTextReader(MapPath("pippo.xml"));
//while (xmlReader.Read()) {
// topolino.Text += xmlReader.NodeType;
// topolino.Text += " -> ";
// topolino.Text += xmlReader.Name;
// topolino.Text += " -> ";
// topolino.Text += xmlReader.Value;
// topolino.Text += "
";
//}


martedì 7 agosto 2007

SQL copiare dati da una tabella ad un'altra

Capita spesso di perdere inutilmente del tempo dietro a piccole cose... ecco una piccola query sql per copiare al volo dati da una tabella ad un'altra tabella:
INSERT INTO nome_tabella_destinazione
(nome_campo_uno, nome_campo_due, nome_campo_tre)
SELECT nome_campo_sorgente_uno, nome_campo_sorgente_due, nome_campo_sorgente_tre
FROM nome_tabella_sorgente
WHERE nome_campo_sorgente_uno > 10;
Buona giornata :)