giovedì 27 dicembre 2012

Esempio di più operazioni in una store procedure


Il codice seguente è stato testato su di un database Oracle e mostra come si possono eseguire più operazioni in una store procedure puntando su diverse tabelle.
Ci sono esempi di select, update, delete, condizioni e loop.
Si possono portare le seguenti istruzioni anche su di un altro database modificando opportunatamente la sintassi.
(Non sempre vengono utilizzate le stesse istruzioni su db diversi).

CREATE OR REPLACE PROCEDURE TSP.procedure_example(
 typeMarket  IN varchar2,
 inDayMarket   IN varchar2
)

is

selectCursor    sys_refcursor;
rowToUpdate     TSP.tbl_market_1%ROWTYPE;

begin

-- example of condition and select on first table

 IF procedure_example.typeMarket='CONSUMER' THEN
 open selectCursor for
 SELECT TSP.tbl_market_1.*
 FROM TSP.tbl_market_1
 WHERE ((tbl_market_1.field_example_1 = 1);

-- loop example: update for all records of 'select' on second table

LOOP
 fetch selectCursor into rowToUpdate;
 exit when selectCursor%NOTFOUND;

 update  TSP.tbl_market_2 set
 field_example_3=10,
 where   TSP.tbl_market_2.id = rowToUpdate.id;

END LOOP;

close selectCursor;

END IF;

-- example update on first table

update   TSP.tbl_market_1 set field_example_2 = 0
where   day_market = procedure_example.inDayMarket
and     market_ref = procedure_example.typeMarket;

-- example delete on second table

delete   from TSP.tbl_market_2
where   day_market = procedure_example.inDayMarket;

end;

domenica 23 dicembre 2012

Vibrazione telefono in Android

Queste poche righe associate ad un evento in java permettono di far vibrare il telefono per un periodo di tempo.
Non si deve però dimenticare di aggiornare l' AndroidManifest con la uses-permission.

Button btnExample = (Button) findViewById(R.id.btn_example);
btnExample.setOnClickListener(new View.OnClickListener() {
 public void onClick(View v) {
 Vibrator vi = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); 
 vi.vibrate(600); //600 milliseconds
 }
});

Istruzione da implementare nel AndroidManifest
...
 </application>
 <uses-permission android:name="android.permission.VIBRATE"/>
</manifest>

martedì 18 dicembre 2012

Apertura di una nuova Activity in Android

Con poche istruzioni è possibile aprire una nuova Activity in Android; in questo caso il nome è 'NewActivity'.
Prima di effettuare la chiamata, configurare l'activity nell AndroidManifest.xml e creare un layout.
Più in basso alcune righe per eseguire una nuova activity da un pulsante di "Menu".
Intent intentStat = new Intent();
intentStat.setClassName(getPackageName(), getPackageName()+".NewActivity"); 
startActivity(intentStat);

Nuova Activity in un pulsante Menu.
public boolean onCreateOptionsMenu(Menu menu){  
 MenuInflater inflater = getMenuInflater();   
 inflater.inflate(R.menu.menu_newactivity, menu);
 return super.onCreateOptionsMenu(menu);
}

blic boolean onOptionsItemSelected(MenuItem item)
{
 switch (item.getItemId()){
  case R.id.button_example:
   Intent intentSolution = new Intent();
   intentSolution.setClassName(getPackageName(), getPackageName()+".NewActivity"); 
   startActivity(intentSolution);
   return true;
  default:
   return super.onOptionsItemSelected(item);
 }
}

venerdì 14 dicembre 2012

Auricolare bluetooth Nokia BH-104 e Samsung Galaxy S3

Uuuuhh mamma mia alla fine sono riuscito a far connettere il buon vecchio auricolare bluetooth Nokia BH-104 con il Samsung S3.
Credo non solo con l'S3 abbia avuto dei problemini, ma anche con altri device non Samsung. Niente zero la ricerca non trovava il dispositivo.
Sembra proprio che l'auricolare abbia una memoria limitata con il numero delle connessioni dei device (forse non più di due).
La soluzione è la seguente: ho eseguito un reset sull'auricolare premendo, da spento, contemporaneamente il pulsantone grosso per le chiamate e il tasto di accensione per un po' di secondi.
Il led ha cominciato a lampeggiare con il rosso e il verde; eseguo una ricerca con l'S3 et voilà...Nokia BH-104, clicco sul BH-104 e quindi "associazione eseguita".

domenica 9 dicembre 2012

Diverse tipologie di Radio Button e CheckBox

Nel disegno di un nuovo file pdf è possibile modificare alcune proprietà degli oggetti Radio Button e CheckBox per cambiare i loro simboli di selezione.
Ecco un esempio.

Proprietà da modificare:


Output:


mercoledì 5 dicembre 2012

Creazione e popolamento dati di una TreeView in una .aspx

In questo esempio è rappresentata la creazione di una TreeView e di un suo popolamento statico (ossia non da db o da file) in c#.
Nella prima parte viene indicato l'oggetto nella pagina, nella seconda il codice da integrare per il caricamento di esempio.

Parte da integrare nella pagina .aspx
<asp:TreeView ID="treeview_example" runat="server" Width="220" ShowCheckBoxes="Leaf">
 <DataBindings>
  <asp:TreeNodeBinding DataMember="siteMapNode" TextField="title" ValueField="resourceKey"
   SelectAction="None" />
 </DataBindings>
</asp:TreeView>
Codice da integrare nel file .aspx.cs
public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
        PopulateTreeView();
    }

    protected void PopulateTreeView()
    {
        DataTable dataTable = null;
        try
        {
            dataTable = new DataTable("dt");
            dataTable.Columns.Add(new DataColumn("value", typeof(int)));
            dataTable.Columns.Add(new DataColumn("area", typeof(string)));
            dataTable.Columns.Add(new DataColumn("type", typeof(string)));
            DataRow dataRow = dataTable.NewRow();
            dataRow = dataTable.NewRow();
            dataRow["value"] = "1";
            dataRow["area"] = "Example root";
            dataRow["type"] = "Check 1";
            dataTable.Rows.Add(dataRow);

            dataRow = dataTable.NewRow();
            dataRow["value"] = "2";
            dataRow["area"] = "";
            dataRow["type"] = "Check 2";
            dataTable.Rows.Add(dataRow);

            dataRow = dataTable.NewRow();
            dataRow["value"] = "3";
            dataRow["area"] = "";
            dataRow["type"] = "Check 3";
            dataTable.Rows.Add(dataRow);

            /*...*/

            TreeNode rootNode = new TreeNode();
            if ((dataTable != null) && (dataTable.Rows.Count != 0))
            {
                DataView dataView = new DataView(dataTable);
                foreach (DataRowView r in dataView)
                {
                    if ("" != (string)r["area"])
                        rootNode = AddNode("", (string)r[1].ToString(), "Folder", treeview_example.Nodes);

                    AddNode(r[0].ToString(), (string)r[2].ToString(), "Page", rootNode.ChildNodes);
                }
            }
            else
            {
                //...do something
            }
        }
        catch (Exception ex)
        {
            //log.Error(ex);
        }
        if (dataTable != null)
            dataTable.Dispose();
    }

    private TreeNode AddNode(string id, string text, string type, TreeNodeCollection nodeCollection)
    {
        TreeNode node = new TreeNode(id);
        node.Value = id;
        node.Text = text;
        nodeCollection.Add(node);
        return node;
    }
}
Output:


sabato 1 dicembre 2012

Calendario in Visual Basic 6 con il DtPicker

Tramite il controllo DtPicker in visual Basic è possibile scegliere una data e riportarla in un altro oggetto presente su di una form o su di una variabile.
Prima di utilizzare questo controllo e inserire del codice, ad esempio sull'evento "_Change", è bene selezionare il componente nel progetto come rappresentato nella figura successiva.

Scelta del componente:


Un esempio che riporta in output la data formattata con giorno/mese/anno:

Function dateFormat(valore As Variant) As Variant
    If IsNull(valore) Then
        dateFormat = "Null"
    Else
        dateFormat = Format(valore, "dd/mm/yyyy")
    End If
End Function

Private Sub DTPicker1_Change()
    Label1.Caption = dateFormat(DTPicker1.Value)
End Sub

Output:




giovedì 29 novembre 2012

Messaggio "ok cancel" in Android

In un app android si vuole far comparire un messaggio di testo e i due classici pulsanti "ok" e "cancel" per eseguire operazioni diverse.
L'esempio seguente puo' essere integrato e modificato nel progetto:
AlertDialog.Builder alertbox = new AlertDialog.Builder(Question.this);
alertbox.setMessage(getString(R.string.lbl_msg_sure)); //read next
alertbox.setPositiveButton("Ok", new DialogInterface.OnClickListener() {   
 public void onClick(DialogInterface arg0, int arg1) {
  /* ...call something for Ok click */
 }
});  
alertbox.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {   
 public void onClick(DialogInterface arg0, int arg1) {
  /* ...call something for Cancel click */
  }             
 });      
alertbox.show(); 
Variabile "lbl_msg_sure" definita nel file xml sotto la directory "values"
<string name="lbl_msg_sure">Are you sure?</string>

lunedì 26 novembre 2012

Rendere oggetti visibili o non visibili su di un pdf

Su di un pdf è possibile rendere degli oggetti visibili o non visibili allo scatenarsi di un evento di un oggetto.
In questo esempio a seconda dell'item selezionato su di una DropDownList è possibile rendere invisibili o visibili degli oggetti come un rettangolo, un cerchio e una textfield contenuti su di un pdf.
Il suggerimento quindi è nel creare una "subform" per l'oggetto sui cui si vuole eseguire l'operazione e una "subform" che contenga gli altri oggetti
Di seguito il codice da inserire all'evento "exit" del "DropDownList":
if (xfa.form.form1.sub1.DropDownList1.rawValue == "Hidden objects"){
 xfa.form.form1.sub2.presence = "hidden";
}
if (xfa.form.form1.sub1.DropDownList1.rawValue == "View objects"){
 xfa.form.form1.sub2.presence = "visible";
}
Creazione form:


Oggetti visibili:


Oggetti invisibili:


giovedì 22 novembre 2012

Colorare un rettangolo con RadioButton

Un semplice esempio javascript di come colorare un rettangolo su di un pdf all'evento click di un RadioButton (in questo caso il sorgente del pdf è l'xdp).
Ad esclusione se viene premuto il primo pulsante il rettangolo si colorerà di verde, se verrà premuto il secondo il colore sarà arancione e per il terzo sarà rosso.

Tool utilizzato in questo esempio: Adobe LiveCycle Designer ES3, ma codice utilizzabile anche in altre versioni antecedenti al ES3

/* form1.sub1.RadioButtonList.#field[0]::click - (JavaScript, client) */
this.resolveNode("Rectangle1").value.rectangle.fill.color.value  = "0, 209, 0"; //green

/* form1.sub1.RadioButtonList.#field[1]::click - (JavaScript, client) */
this.resolveNode("Rectangle1").value.rectangle.fill.color.value  = "255, 106, 0"; //orange

/* form1.sub1.RadioButtonList.#field[2]::click - (JavaScript, client) */
this.resolveNode("Rectangle1").value.rectangle.fill.color.value  = "255, 0, 0"; //red



lunedì 19 novembre 2012

News per i download di QUIZ

Quiz arriva oggi a 50.007 download in quasi 6 mesi senza campagne a pagamento con una media di 200 al giorno!
Il flip per switchare tra le due classifiche lo aggiornerò tra qualche tempo permettendo di flippare anche con il dito sulle liste dei giocatori (piccola miglioria).
Per ora va bene così flippando in alto e in basso e per il resto sembra proprio che vada bene.

domenica 18 novembre 2012

Aggiornamento Word Scramble Lite

Aggiornata Word Scramble Lite sul market di Android.

Di seguito gli aggiornamenti:
- inserite le classifiche online TOP OF THE WEEK (i migliori 20 giocatori della settimana) e TOP 20 WORLD (classifiche valide solo nella versione lite); punteggio massimo 10.000;
- aggiornata la versione android con possibilità di installare l'app su memory card oppure sul telefono.

venerdì 16 novembre 2012

Android e un "alter table" su database SQLite

Ci sono diversi modi di eseguire un "alter table" su SQLite di Android nel caso manchi o si voglia aggiornare un campo su di una tabella.
Eccone un esempio dove prima viene effettuato un test di esistenza del campo e in caso negativo si procede alla sua creazione:

SQLiteDatabase db;
OpenHelper openHelper = new OpenHelper(this.context); 
this.db = openHelper.getWritableDatabase(); 

try{
 /* check if field exists */
 String sql ="select sql from sqlite_master where " + 
  "tbl_name = 'tbl_example' and sql like '%field_price INTEGER%'";    
 
 long lngResult = DatabaseUtils.longForQuery(arg0,sql, null);
 
}catch(SQLException e){
 upgradeToVersion(this.db);
}
 
private void upgradeToVersion(SQLiteDatabase db) {
 try{
  /* add an integer field */
  db.execSQL("ALTER TABLE tbl_example " ADD " + 
   "field_price INTEGER");
 }catch(SQLException e){}
}

martedì 13 novembre 2012

Disabilitare tutti gli oggetti in un pdf con un click

Con questo esempio è possibile disabilitare tutti gli oggetti posizionati su di una form con un "solo colpo".
Provare ad inserire queste righe di codice nell'evento onclick di un pulsante Button.
for (var nPageCount = 0; nPageCount < xfa.host.numPages; nPageCount++) {
 var oFields = xfa.layout.pageContent(nPageCount, "field");
 var nNodesLength = oFields.length;
 for (var nNodeCount = 0; nNodeCount < nNodesLength; nNodeCount++) {
  oFields.item(nNodeCount).access = "readOnly";
 }
}
Designer:

Output:

domenica 11 novembre 2012

Creazione e popolamento dati in una DropDownList in una .aspx

In questo esempio è rappresentata la creazione di una DropDownList e di un suo popolamento statico (ossia non da db o da file) di 10 numeri in un ciclo for in c#.
Nella prima parte viene indicato l'oggetto nella pagina, nella seconda il codice da integrare per il caricamento di esempio.

Parte da integrare nella pagina .aspx
<asp:DropDownList ID="DropDownList1" runat="server"
 DataValueField="example_value" DataTextField="example_value" 
 AutoPostBack="False">
</asp:DropDownList>
Codice da integrare nel file .aspx.cs
public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
        PopulateDropDownList();
    }

    protected void PopulateDropDownList()
    {
        DataTable dataTable = null;
        try
        {
            dataTable = new DataTable("dt");
            dataTable.Columns.Add(new DataColumn("example_value", typeof(string)));
            DataRow dataRow = dataTable.NewRow();

            DateTime date;
            date = DateTime.Now;

            dataRow = dataTable.NewRow();
            dataRow["example_value"] = "";
            dataTable.Rows.Add(dataRow);
            for (int i = 1; i < 11; i++)
            {
                dataRow = dataTable.NewRow();
                dataRow["example_value"] = i.ToString();
                dataTable.Rows.Add(dataRow);
            }

            DropDownList1.DataSource = dataTable;
            DropDownList1.DataBind();
        }
        catch (Exception ex)
        {
            //log.Error(ex);
        }
        if (dataTable != null)
            dataTable.Dispose();
    }
}
Output:


venerdì 9 novembre 2012

Cambio focus tra campi testo in un pdf

L'esempio seguente permette di far passare il focus da un campo testo ad un altro in un pdf, come il giorno mese anno per un data.
Non appena inserite due cifre per il giorno il cursore automaticamente passa all'altro campo per inserire il mese e successivamente l'anno.
Inserire tre campi testo su di un pdf, inserire il codice nell'evento onchange dei primi due campi testo.
/* evento onchange del primo campo testo */
var focusText =  xfa.event.fullText ;
if (focusText.length>1)
 xfa.host.setFocus("xfa.form.form1.subform1.TextField2");
 
/* evento onchange del secondo campo testo */
var focusText =  xfa.event.fullText ;
if (focusText.length>1)
 xfa.host.setFocus("xfa.form.form1.subform1.TextField3");
Output:


mercoledì 7 novembre 2012

Tabella dinamica nel pdf: aggiunta ed eliminazione righe

L'esempio mostra come creare una tabella dinamica su di un pdf con due pulsanti e due campi testo.
Si possono quindi aggiungere o togliere righe dalla tabella e inserire del testo nei campi predisposti.
Prima di creare il pdf (fatto da una tabella con inclusi un pulsante e due campi testo) e scrivere del codice, ricordarsi di settare alcune impostazioni come rappresentato nelle figure successive.
Tool utilizzato: Adobe LiveCycle Designer e file xdp sorgente del pdf.

Script per aggiunta di una riga:
Table1._Row1.addInstance(true);
Script per eliminazione di una riga:
Table1._Row1.removeInstance(this.parent.index);
Figure:




Output:


lunedì 5 novembre 2012

Binding xml con un pdf in c#

L'esempio seguente permette di fare un binding tra un file xml e un pdf in ambiente .Net con linguaggio c#.
Immaginiamo un file .aspx con due soli campi: una listbox e un pulsante.
All'evento click del pulsante alcuni "campi testo" di un documento pdf "example.pdf" verranno popolati con dei valori presenti in un file xml "example.xml" e verrà creato su di un path (ad esempio c:\).
La listbox è per il tracciamento delle operazioni.
Tool/ambienti utilizzati: .Net 2005, Acrobat Professional e SDK 9 di Adobe.
Sorgente e immagini:

protected void btnExample_Click(object sender, EventArgs e)
{
 Object newDoc = new Object();

 string sourceDocument = @"" + Server.HtmlEncode(Request.PhysicalApplicationPath) +
  "example.pdf"; //where is pdf
 string outputString = @"c:\\";  //path output pdf
 string pathXmlToMerge = @"C:\example.xml";//is file temp

 //create a file xml to merge
 CreateXmlFileNamePdf(pathXmlToMerge, ddlist.Text);

 bool booleOpenDocument;

 AcroAVDoc avDoc = new AcroAVDoc();
 CAcroApp acroApp = new AcroAppClass();

 booleOpenDocument = avDoc.Open(sourceDocument, "");
 if (!booleOpenDocument)
  listOperation.Items.Add("Failed to open source document.");

 CAcroPDDoc pdDoc = (CAcroPDDoc)avDoc.GetPDDoc();

 Object jsObj = pdDoc.GetJSObject();

 object[] getTemplateParam = { "Templates:1" };
 Object template = new Object();

 Type T = jsObj.GetType();
 template = T.InvokeMember(
  "getTemplate",
  BindingFlags.InvokeMethod |
  BindingFlags.Public |
  BindingFlags.Instance,
  null, jsObj, getTemplateParam);

 if (template == null)
 {
  template = T.InvokeMember(
   "createTemplate",
   BindingFlags.InvokeMethod |
   BindingFlags.Public |
   BindingFlags.Instance,
   null, jsObj, getTemplateParam);
 }

 if (template == null)
 {
  listOperation.Items.Add("Failed to acquire form template.");
  avDoc.Close(1);
  acroApp.CloseAllDocs();
  acroApp.Exit();
 }
 object[] spawnParam = { 1, false, false };

 try
 {
  for (int i = 0; i < 1; i++)
  {
   Type templateType = template.GetType();
   templateType.InvokeMember(
    "spawn",
    BindingFlags.InvokeMethod |
    BindingFlags.Public |
    BindingFlags.Instance,
    null, template, spawnParam);

   object[] extractPagesParam = { 1 };
   newDoc = T.InvokeMember(
    "extractPages",
    BindingFlags.InvokeMethod |
    BindingFlags.Public |
    BindingFlags.Instance,
    null, jsObj, extractPagesParam);

   //merge xml to pdf
   object[] importTextDataParam = { pathXmlToMerge, 0 };
   T.InvokeMember(
    "importXFAData",
    BindingFlags.InvokeMethod |
    BindingFlags.Public |
    BindingFlags.Instance,
    null, newDoc, importTextDataParam);

   //save pdf
   object[] saveAsParam = { outputString + "example_" + nameFilePdf +
    ".pdf" };
   T.InvokeMember(
    "saveAs",
    BindingFlags.InvokeMethod |
    BindingFlags.Public |
    BindingFlags.Instance,
    null, newDoc, saveAsParam);

   bool formDataExists = true;

   object[] closeDocParam = { !formDataExists };
   T.InvokeMember(
    "closeDoc",
    BindingFlags.InvokeMethod |
    BindingFlags.Public |
    BindingFlags.Instance,
    null, newDoc, closeDocParam);
  }
  avDoc.Close(1);
  acroApp.CloseAllDocs();
  acroApp.Exit();
  listOperation.Items.Add("File PDF created.");
 }
 catch (Exception ex)
 {
  listOperation.Items.Add("Error: " + ex.Message);
 }
}

Configurazione progetto:


Operazioni:


Output su pdf:


sabato 3 novembre 2012

Campo testo a pettine su pdf

Ecco come creare un campo testo con un numero di celle tante quanti sono i caratteri da inserire.
Supponiamo ad esempio di aver bisogno di un codice di 5 caratteri (oppure un codice fiscale) e farlo apparire in un campo testo come se fossero 5 celle distinte.
Con LiveCycle Designer, nel momento della creazione del pdf, esiste la proprietà "comb" che permette di splittare il testo in n celle.
Nelle figure successive:

La proprietà comb


L'output

giovedì 1 novembre 2012

Inserimento dei banner AdMob in Android

Nella speranza di poter dare un aiuto a chi si cimenterà ad inserire i banner AdMob in un app Android, scrivo una piccola guida suddivisa in step di operazioni da effettuare:

- scaricare l'sdk da Google qui
- inserire il pacchetto jar nella directory "libs" e referenziarlo (con Eclipse tasto destro sul progetto - properties - java build path - add JARs)
- modificare l' AndroidManifest.xml
- creare il file attrs.xml sotto la directory "values"
- inserire nel layout dove comparirà il banner la proprietà xmlns:app="http://schemas.android.com/apk/lib/com.google.ads"
- integrare e modificare nel layout dove comparirà il banner il codice successivamente riportato
- modificare la classe dove verrà attivato il banner (l' onCreate in questo caso)
- modificare il metodo "onDestroy"

AndroidManifest.xml di esempio (modificare il codice ADMOB_PUBLISHER_ID)
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.mypackage.myapp"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".Main" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.google.ads.AdActivity"
android:configChanges="keyboard|keyboardHidden|orientation"/> 
<meta-data android:name="ADMOB_PUBLISHER_ID" android:value="123456789012345"/>
<meta-data android:name="ADMOB_ALLOW_LOCATION_FOR_ADS" android:value="false"/>
</application>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
</manifest> 
Classe di esempio:
public class Main implements AdListener{
private AdView mAdView;

public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.main);

 AdRequest ar = new AdRequest();
 mAdView = (AdView) findViewById(R.id.ad);
 
 mAdView.setAdListener(this); 
 mAdView.loadAd(ar);
}

@Override
protected void onDestroy() {
 if (mAdView != null) 
  mAdView.destroy();
 super.onDestroy();
}

}
File attrs.xml
<?xml version="1.0" encoding="utf-8"?> 
<resources>
<declare-styleable name="com.google.ads.AdView">
<attr name="backgroundColor" format="color" />
<attr name="primaryTextColor" format="color" />
<attr name="secondaryTextColor" format="color" />
<attr name="adSize">
<enum name="BANNER" value="1" />
<enum name="IAB_MRECT" value="2" />
<enum name="IAB_BANNER" value="3" />
<enum name="IAB_LEADERBOARD" value="4" />
</attr> 
<attr name="adUnitId" format="string"/>       
</declare-styleable>
</resources>
Integrare ed eventualmente modificare il layout dove comparirà il banner con (aggiornare adUnitId) :
<com.google.ads.AdView android:id="@+id/ad" 
android:layout_gravity="bottom"  
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
app:backgroundColor="#000000"
app:primaryTextColor="#FFFFFF" 
app:secondaryTextColor="#CCCCCC"
app:adUnitId="123456789012345"
app:adSize="BANNER"/>

lunedì 29 ottobre 2012

MessageBox in un pdf

Piccolo esempio di come inserire un messaggio in un pdf all'evento click di un pulsante button.
Tool utilizzato Adobe LiveCycle Designer ES3 (ma è possibile farlo anche con versioni precedenti).
Di seguito il sorgente javascript da inserire all'evento click.
var name = "";
name = form1.subform1.TextName.rawValue;
xfa.host.messageBox("Hello " + name + " !", "Greetings", 3);

Screenshot dell'output:



domenica 28 ottobre 2012

Esempio di configurazione log4net

In una web application in ambiente .Net 2.5 la gestione della scrittura di log di tipo debug o di errore può essere affidata alla libreria log4net configurata nel seguente modo.
Il punto 4 rappresenta il tipo di output corrispondente a questa configurazione.

1)Fare riferimento alla libreria log4net.dll nel progetto (directory bin) e inserire il codice nel Global.asax
protected static log4net.ILog log;
private System.ComponentModel.IContainer components = null;
 
protected void Application_Start(object sender, EventArgs e) 
{
 InitializeComponent();
 log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile));
 log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
 log.Debug("Application_Start");
}

protected void InitializeComponent()
{    
 this.components = new System.ComponentModel.Container();
}

void Application_End(object sender, EventArgs e)
{
 log.Debug("Close Application");
}

void Session_Start(Object sender, EventArgs E)
{
 Application.Lock();
 Application.UnLock();
 log.Debug("Session start.");
}

2) Nel Web.Config
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>

...
  
 <log4net>
  <appender name="DebugAppender" type="log4net.Appender.DebugAppender" >
    <layout type="log4net.Layout.PatternLayout">
   <conversionPattern value="%d{dd MMM yyyy HH:mm:ss,fff} %-5p [%c] %m%n" />
    </layout>
  </appender>
  <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
    <layout type="log4net.Layout.PatternLayout">
   <conversionPattern value=" %m%n" />
    </layout>
  </appender>
  <appender name="FileAppender" type="log4net.Appender.RollingFileAppender">
    <file value="log/example.log"/>
    <appendToFile value="true"/>
    <rollingStyle value="Size"/>
    <maxSizeRollBackups value="10"/>
    <maximumFileSize value="12MB"/>
    <staticLogFileName value="false"/>
    <layout type="log4net.Layout.PatternLayout">
   <conversionPattern value="%d{dd MMM yyyy HH:mm:ss,fff} %-5p [%c] %m%n"/>
    </layout>
  </appender>
  <root>
    <level value="ALL"/>
    <appender-ref ref="ConsoleAppender"/>
    <appender-ref ref="FileAppender"/>
  </root>
 </log4net>
</configuration>
3) Nel codebehind
protected static ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);

//create method and put inside this code

try{
 //code here
 log.Debug("Debug description");
}
catch (Exception ex)
{
 log.Error(ex);
}
4) Esempio di output sul file "example.log"

06 Sep 2010 10:05:28,140 ERROR [Project.Classname] Error description
02 Oct 2010 16:10:12,267 DEBUG [Project.Classname] Debug description

sabato 27 ottobre 2012

Richiamare una funzione in un pdf

Con il seguente codice di esempio è possibile richiamare le funzioni javascript da un evento di un oggetto in un pdf.
Immaginiamo di richiamare la funzione "TestMessage":

Nell'evento mouseUp del button inserire:
form1.sub1.JSfunctions.TestMessage(sub1.TextField1.rawValue);
La funzione di esempio è:
function TestMessage(name)
{
 xfa.host.messageBox("Hello " + name + " !", "Greetings", 3);
}



Output:


venerdì 26 ottobre 2012

Eseguire un download da evento onclick di un button in c#

Il seguente codebehind può essere applicato all'evento onclick su di un pulsante button in ambiente .Net ed è utile per generare il download di un file.
L'utente, cliccando sul pulsante di una form, può eseguire il download del file example.txt

Esempio di pulsante su di una form.
<asp:button id="buttondownload" runat="server" text="Download" onclick="Download_Click"/>

Esempio codebehind:
 protected void Download_Click(object sender, EventArgs e)
 {
 string documentPath = "c:\\example.txt";
 try
 {
 if (!documentPath.Equals(""))
 {
  using (FileStream fs = File.OpenRead(documentPath))
  {
   int length = (int)fs.Length; byte[] buffer;
   using (BinaryReader br = new BinaryReader(fs)) { 
    buffer = br.ReadBytes(length); 
   } 
   Response.Clear();
   Response.Charset = "";
   Response.ClearContent();
   Response.ClearHeaders();
   Response.Buffer = true;
   Response.AddHeader("content-disposition", String.Format("attachment;filename={0}", Path.GetFileName(documentPath)));
   Response.ContentType = "text/plain"; //change for other format type: text/plain because it's a txt file
   Response.BinaryWrite(buffer);
   Response.Flush();
   Response.Close();
  }
 }
 }
 catch (Exception ex)
 {
 //code here
 }
}

mercoledì 24 ottobre 2012

Aggiornamento di Quiz versione 1.7

Da un paio di giorni è in linea la nuova versione di Quiz, la mia app Android, con più di 2800 quiz in lingua italiana, inglese e spagnolo.

Ecco gli aggiornamenti:
- inseriti 550 quiz in lingua spagnola;
- aggiunta della lingua spagnola per tutte le funzionalità
- ottimizzazioni varie su domande e risposte italiane e inglesi.

Alcuni numeri tra statistiche e download su questa app:
- Download totali dal 06-07-2012 al 22-10-2012: 44000+
- Max download dell'app in 1 giorno: 1720
- Max punteggio raggiunto nella classifica della settimana: 905 il 17-10-2012
- Max utenti simultanei nella classifica della settimana in 1 settimana: 8

martedì 23 ottobre 2012

Operazioni aritmetiche e sintassi FormCalc in un pdf

Altre funzioni sono disponibili con il FormCalc di Adobe; in questo esempio una serie di operazioni di aritmetica selezionabili da una DropDownList tra cui un mix di operazioni inserite in una condizione "if then endif".
if ($.boundItem(xfa.event.newText) == "Addition") then
 sub1.TextField3.rawValue = sub1.TextField1.rawValue + sub1.TextField2.rawValue
elseif ($.boundItem(xfa.event.newText) == "Multiplication") then
 sub1.TextField3.rawValue = sub1.TextField1.rawValue * sub1.TextField2.rawValue
elseif ($.boundItem(xfa.event.newText) == "Division") then
 sub1.TextField3.rawValue = sub1.TextField1.rawValue / sub1.TextField2.rawValue
elseif ($.boundItem(xfa.event.newText) == "Subtraction") then
 sub1.TextField3.rawValue = sub1.TextField1.rawValue - sub1.TextField2.rawValue
elseif ($.boundItem(xfa.event.newText) == "Mix") then
 var total = Round(Abs((sub1.TextField1.rawValue / sub1.TextField2.rawValue)),2)
 sub1.TextField3.rawValue = Concat("€ ", total)
 if(Abs(total)>4) then
  xfa.host.messageBox("Value too high", "Attention", 3, 0)
 endif
endif
Output:
FormCalc in un pdf



Link di riferimento per funzioni e sintassi FormCalc:
http://help.adobe.com/en_US/livecycle/es/FormCalc.pdf

domenica 21 ottobre 2012

Somma di due numeri in un pdf con FormCalc

L'esempio mostra come effettuare una somma di due numeri (inseriti in campi testo) con il linguaggio FormCalc di Adobe.
Prima di inserire il seguente codice nel pdf, in questo caso all'evento click del pulsante, ricordarsi di selezionare FormCalc come linguaggio di script.
var sumValues = sum(sub1.TextField1.rawValue + sub1.TextField2.rawValue)
xfa.host.messageBox(Concat("The sum is ", sumValues), "Attention", 3, 0)

Output:
FormCalc in un pdf

sabato 20 ottobre 2012

Riproduzione di un suono con un click in Android

E' possibile eseguire un suono in un'applicazione android inserendo inizialmente il file da riprodurre nella directory "raw" del progetto android e successivamente integrare queste righe di codice.
In questo esempio sono stati utilizzati due file in formato wav posizionati nei path "\res\raw\bip_1.wav" e "\res\raw\bip_2.wav" che verranno riprodotti rispettivamente al click dei pulsanti "btn_ok" e "btn_no"
public class Example extends Activity {

 private SoundManager soundManager = new SoundManager();

 public void onCreate(Bundle savedInstanceState) {  
  super.onCreate(savedInstanceState);  
  setContentView(R.layout.example); 

  soundManager.initSound(getBaseContext());
  soundManager.addSound(1, R.raw.bip_1);
  soundManager.addSound(2, R.raw.bip_2);
  
  /* ... */
  
  Button btnOk = (Button) findViewById(R.id.btn_ok);
  btnOk.setOnClickListener(new OnClickListener() {
   public void onClick(View arg0) {
     soundManager.playSound(1);
   }
  });
  
  Button btnNo = (Button) findViewById(R.id.btn_no);
  btnNo.setOnClickListener(new OnClickListener() {
   public void onClick(View arg0) {
     soundManager.playSound(2);
   }
  });
 }
}
Classe da istanziare:
public class SoundManager {
 private SoundPool soundPool;
 private HashMap hMap;
 private AudioManager audioManager;
 private Context context;

 public void initSound(Context theContext) {
  context = theContext;
  soundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 0);
  hMap = new HashMap();
  audioManager = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
 }

 public void addSound(int index, int SoundID)
 {
  hMap.put(index, soundPool.load(context, SoundID, 1));
 }
 public void playSound(int index)
 {
  float streamVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
  soundPool.play((Integer) hMap.get(index), streamVolume, streamVolume, 1, 0, 1f);
 }
}

venerdì 19 ottobre 2012

Richiamo di una stored procedure in c#

In questo esempio viene richiamata con c# una stored procedure contenente un campo in input.
Il db utilizzato è Oracle e viene restituita una lista di record che puo' essere integrata in una lista di oggetti tipizzata (in questo caso di Employee).

public List<Employee> LoadData()
 {
 List<Employee> listEmployee = new List<Employee>();
 Employee employee = new Employee();
  
 using (OracleCommand cmd = con.CreateCommand())
 {
  /* write name of stored procedure */
  cmd.CommandText = "SCHEMA_DB.test_store_procedure";
  cmd.CommandType = CommandType.StoredProcedure;
     
  /* input for stored procedure, for example NVarChar */
  cmd.Parameters.Add("IN_NAME_FIELD1", OracleType.NVarChar).Value = "test";
  cmd.Parameters["IN_NAME_FIELD1"].Direction = ParameterDirection.Input;
     
  /* return from store procedure */
  cmd.Parameters.Add("OUTPUT", OracleType.Cursor).Direction = ParameterDirection.Output;
  
  DataTable dt = new DataTable();
     
  /* call stored procedure */
  using (OracleDataReader oracleDataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection))
  {
   dt.Load(oracleDataReader);
  }
     
  /* read values */
  foreach (DataRow dr in dt.Rows) 
  {
   employee = new Employee();
   
   if (dr["NAME"] != DBNull.Value)
   employee.name = (string)dr["NAME"];
   else
   employee.name = "";
   
   listEmployee.Add(employee);
  }
  }
  return listEmployee;
  }
}

giovedì 18 ottobre 2012

Aprire una form con c# una sola volta

L'apertura di una form da una applicazione in .net c# è semplice utilizzando ad esempio
FrmAudio form = new FrmAudio();
form.Show();
Ma per controllare che venga aperta una sola volta senza ricorrere a strategie varie, tipo disabilitare un pulsante dopo averla lanciata, si può utilizzare il seguente esempio (in questo caso applicato all'evento di un pulsante button):
private void BtnTest_Click(object sender, EventArgs e){
 if (CnsUtilMisc.IsNumeric(txtScript.SelectedText)){
  FrmAudio form = new FrmAudio();
  //check existing form
  foreach (Form frmTest in System.Windows.Forms.Application.OpenForms)
 if (frmTest is FrmAudio)
  return;
  form.Show();
 }
}

domenica 14 ottobre 2012

Grafico a torta con MSChart in vb6

Supponiamo di avere dei valori e degli elementi in una tabella di un database (in questo esempio un db MSAccess) e portare in un grafico a torta le percentuali di ciascun elemento.
L'oggetto utilizzato è il MSChart di Visual Basic aggiunto al progetto dal componente Microsoft Chart Control 6.0
Di seguito l'esempio:

Private Sub CmdLoad_Click()
 Dim adodbRec As ADODB.Recordset
 Dim adodbConn As ADODB.Connection
 Dim sql As String
 Dim dbTest As String
 Dim intRows
  
 dbTest = "Provider = Microsoft.Jet.OleDB.4.0;Data source =
 C:\test\dbtest.mdb;Persist Security Info=False"
    
    Set adodbConn = New ADODB.Connection
    adodbConn.Open (pathConnection)
    adodbConn.CursorLocation = adUseClient 'tipo di cursore
    On Error GoTo 0 'Resume normal error processing
    Set adodbRec = New ADODB.Recordset
    sql = "select valore, descr_costo from tab_costi"
    
    adodbRec.Open sql, adodbConn, adOpenDynamic, adLockOptimistic
    intRows = adodbRec.RecordCount

    MSChart1.ColumnCount = intRows

    With MSChart1
             .chartType = VtChChartType2dPie
               
         For i = 1 To adodbRec.RecordCount
             .Row = 1
             .Column = i
             .Data = adodbRec.Fields.Item(0).Value
             adodbRec.MoveNext
         Next
        
         With .DataGrid
           adodbRec.MoveFirst
             .RowLabelCount = 1
             .ColumnCount = intRows
             .RowCount = 1
             For i = 1 To .ColumnCount
                 If IsNull(adodbRec.Fields.Item(1).Value) Then
                    .ColumnLabel(i, 1) = "---"
                 Else
                    .ColumnLabel(i, 1) = adodbRec.Fields.Item(1).Value
                 End If
                 adodbRec.MoveNext
             Next i
         End With
        
         For i = 1 To .Plot.SeriesCollection.Count
             With .Plot.SeriesCollection(i).DataPoints(-1).DataPointLabel
                .LocationType = VtChLabelLocationTypeOutside
                .Component = VtChLabelComponentPercent
                .PercentFormat = "0%"
                .VtFont.Size = 10
             End With
         Next i
    
     End With
     adodbRec.Close
End Sub

Queste le figure del grafico a torta e della tabella:





venerdì 12 ottobre 2012

Macro per copiare valori tra due file MS Excel

L'esempio seguente permette di copiare tre valori presi da celle di un file Excel in un altro file Excel.
In questo caso da file "example.xlsx" a "new_file_yyyy-mm-dd_hh-mm_ss.xlsx"
Il codice è stato inserito su di un pulsante presente in un file "example.xlsm" (file di tipo MS Excel 2007 che permette di editare ed eseguire macro).


File example.xlsm
Option Explicit

Sub cmdCreateOuput_Click()
    Dim currentPath As String
    Dim strId, strName, nameFileOut, nameFileIn As String
    Dim extNameFileOut As String
    Dim myArrayId() As String
    Dim FileFormatNum As Integer
    Dim i As Integer
    Dim Sourcewb
    Dim Destwb
    Dim myArrayName() As String
    ReDim myArrayId(3)
    ReDim myArrayName(3)
    
    currentPath = ThisWorkbook.Path
    nameFileIn = "example.xlsx"
    
    '----- start file input -----
    
    Set Sourcewb = Workbooks
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    
    Sourcewb.Open currentPath & "\" & nameFileIn, ReadOnly:=True

    With Sourcewb(2)
        .Activate
        .Sheets(1).Protect UserInterfaceOnly:=True
        strId = .Sheets(1).[A14]
        strName = .Sheets(1).[B14]
        
        For i = 1 To 3
                myArrayId(i) = .Sheets(1).Cells(i + 14, "A").Value
                myArrayName(i) = .Sheets(1).Cells(i + 14, "B").Value
        Next i

        .Close SaveChanges:=False
    End With
    
    '----- end file input -----
    
    '----- start file output -----
    
    Set Destwb = Workbooks.Add
    extNameFileOut = ".xlsx": FileFormatNum = 51
    nameFileOut = "new_file_" & Format(Now, "yyyy-mm-dd_hh-mm_ss")

    With Destwb
        .Sheets(1).[A1] = strId
        .Sheets(1).[B1] = strName
        For i = 1 To UBound(myArrayId)
            .Sheets(1).Cells(i + 1, "A") = myArrayId(i)
            .Sheets(1).Cells(i + 1, "B") = myArrayName(i)
        Next
        
        .SaveAs currentPath & "\" & nameFileOut & extNameFileOut, FileFormat:=FileFormatNum
        .Close SaveChanges:=True
    End With

    '----- end file output -----

    MsgBox "File created."
End Sub


giovedì 11 ottobre 2012

Film in lingua russa (alcuni con sottotitoli)

Tra i tanti link che ci sono in giro per il web vorrei segnalare un punto su youtube dove si possono vedere vecchi film gratuiti in lingua russa e alcuni anche con sottotitoli.
I sottotitoli, se presenti, possono essere selezionati in basso a destra del video di youtube.
Ecco il link: youtube.com/mosfilm

mercoledì 10 ottobre 2012

Una macro in WinCvs per la copia di uno o più file in Python

L'esempio seguente è la creazione di una macro in WinCvs 2.0 e permette di selezionare uno o più file da una directory e copiarli in un' altra mantenendo il path iniziale.
Potrebbe essere utile per creare un pacchetto di file.
Ecco come fare:
- chiudere eventualmente WinCvs se aperto;
- creare il file AddFileToDirTest.py nella directory ".../wincvs/Macros";
- copiare il codice qui sotto;
- modificare eventualmente i path o parametri all'interno della macro;
- riavviare WinCvs (ricordarsi di avere python installato sul pc e aver fatto riferimento nelle impostazioni sulla dll di python);
- selezionare i file da copiare;
- selezionare la macro AddFileToDirTest.

# start copy here
from cvsgui.Macro import *
from cvsgui.CvsEntry import *
from cvsgui.ColorConsole import *
import cvsgui.App, os.path, os
import string
import copy
import shutil

class AddFileToDirTest(Macro):
 def __init__(self):
  Macro.__init__(self, "AddFileToDirTest", MACRO_SELECTION, 0, "Add File To Dir Test")

 def CreaDirectory(self,dirFile):
  if not os.path.isdir(dirFile):
   os.makedirs(dirFile)
   print "- directory created: " + dirFile
 
 def OnCmdUI(self, cmdui):
  sel = cvsgui.App.GetSelection()
  isOnlyExistingFiles = len(sel) > 0
  for s in sel:
   if not s.IsFile() or s.IsMissing():
    isOnlyExistingFiles = 0
    break

  cmdui.Enable(isOnlyExistingFiles)
  if isOnlyExistingFiles:
   cmdui.SetText("Add File selected to Directory")
  else:
   cmdui.SetText("Click on file to select")

 def Run(self):
  print "* Add file in progress... *"
  
  #+--------- start set here--------+
  #example directory root: c:\temp\test
  pathComuneDoveCopiareIFile ="c:\\" + "temp" + "\\" 
  nomeDirectoryComuneATuttiIProgetti="test" #insert the name into common directory
  #+--------- stop set here --------+
  
  sel = cvsgui.App.GetSelection()
  paths = []
  for s in sel:
   paths.append(s.GetFullName())
   nomeFile=os.path.split(s.GetFullName())
  
  dir = os.path.dirname(os.path.commonprefix(paths))
  print "- directory selected: ", dir
  where = dir.find(nomeDirectoryComuneATuttiIProgetti)      
  dirReplace = dir[(where):]
  dirDaCreare= pathComuneDoveCopiareIFile + dirReplace
  self.CreaDirectory(dirDaCreare)
 
  for s in sel:
   paths.append(s.GetFullName())
   nomeFile=os.path.split(s.GetFullName())
   pathDoveCopiare = dirDaCreare + "\\" + nomeFile[1]
   print "- copy file in:" + pathDoveCopiare
   shutil.copyfile(s.GetFullName(), pathDoveCopiare)
   print "-- filename copied: " + nomeFile[1]
   
  print "* End elaboration *"


AddFileToDirTest()
# end copy here
Un esempio in questa figura:




martedì 9 ottobre 2012

Esempio di formattazione data in c#

Piccolo esempio utile per la formattazione della data in ambiente .Net c#.
Di seguito codice e screenshot:
class Program
{
static void Main(string[] args)
{
 DateTime dateToday = DateTime.Today;
 DateTime dateYesterday = DateTime.Today.AddDays(-1);

 string strDateToday = string.Format("{0:dd-MM-yyyy}", dateToday);
 string strDateYesterday = string.Format("{0:dd-MM-yyyy}", dateYesterday);

 Console.Write("Today: " + strDateToday);
 Console.Write("\n");
 Console.Write("Yesterday: " + strDateYesterday);
 Console.Read();
}
}

Output a video:



domenica 7 ottobre 2012

Finestra tavolozza colori in c#

Nell'esempio di seguito viene illustrato come richiamare la finestra dei colori e utilizzarli per customizzare un oggetto (ad esempio un oggetto label).
In questo caso il codice è inserito nell'evento click di un button e permette di colorare lo sfondo di una label.
private void button1_Click(object sender, EventArgs e)
{
 ColorDialog colorDlg = new ColorDialog();
 colorDlg.ShowDialog();
 lblcolor.BackColor = colorDlg.Color;
}
L'output nella figura:


sabato 6 ottobre 2012

Esempio di un trigger su tabella

L'esempio, creato e testato su db Oracle, permette di creare un trigger su di una tabella di un database.
In questo caso ogni volta che viene inserito un nuovo record, con la prima istruzione verranno copiati i dati dalla tabella "mytable" alla "mytable2", mentre con la seconda
istruzione saranno eliminati alcuni record presenti sulla prima tabella.
Eventualmente si possono inserire altre istruzioni all'interno del BEGIN/END
CREATE OR REPLACE TRIGGER myschema.MYTRIGGER
AFTER INSERT
ON myschema.mytable 
REFERENCING NEW AS New OLD AS Old
BEGIN

 insert into myschema.mytable2 (
     id,day_market,type_market) 
     select 
        id,day_market,type_market   
     from myschema.mytable where 
  to_date(myschema.mytable.day_market, 
  'yyyy/mm/dd')<sysdate-2;
     
 delete myschema.mytable where 
 to_date(myschema.mytable.day_market, 
 'yyyy/mm/dd')<sysdate-2;  

 -- ... other operations  
 
END ;

giovedì 4 ottobre 2012

Caricamento dati da una tabella per una combobox in c#

Il seguente codice illustra come connettersi ad un database (MS Access in questo caso) e prendere dei valori da una tabella per popolare una combobox presente in una Form.
La prima parte è il codice da inserire nel app.config di una windows application; la seconda parte è il caricamento dati.
Ho utilizzato Visual Studio 2008 su Win7 64bit, per lo stesso ambiente ricordarsi di eseguire la compilazione per una platform x86.


Il file app.config
<configuration>
  <configSections/>
  <appSettings>
    <add key="ConnectionString" value="Provider=Microsoft.Jet.OLEDB.4.0;
Data source=C:\db_employee.mdb"/>
  </appSettings>
  <system.web/>
</configuration>
Codice per il popolamento della combobox: ad esempio si può inserire nel "Load" della pagina.
private void Form1_Load(object sender, EventArgs e)
{
 GetDataFromEmployees();
}

private void GetDataFromEmployees()
{
 try
 {
 string connectionString = ConfigurationSettings.AppSettings[
"ConnectionString"];
 using (System.Data.OleDb.OleDbConnection connection = new
 System.Data.OleDb.OleDbConnection(connectionString))
 {
  string sql = "SELECT name, lastname FROM tbl_employees where
 lastname=@rlname";

  System.Data.OleDb.OleDbCommand command = new 
System.Data.OleDb.OleDbCommand(sql, connection);
  command.Parameters.AddWithValue("@rlname", "brown");
  connection.Open();
  System.Data.OleDb.OleDbDataReader reader = command.ExecuteReader();
  ArrayList al = new ArrayList();
  while (reader.Read())
  {
   comboBox1.Items.Add(reader["name"] + " " + reader["lastname"]);
  }
  reader.Close();
  connection.Close();
 }
 }
 catch(Exception e){
 //code here
 }
}
L'output nella figura:


martedì 2 ottobre 2012

Lettura file e conversione in una lista di stringhe

L'esempio di seguito riportato in c# mostra come caricare dei dati da file e far ritornare una List<String> piena e ordinata.
Nome del file "example.txt"

Esempio del contenuto del file:
words:Austria|words:Germania|words:Italia|words:Spagna|
private List<String> listKeywords()
{
 string pathDoc="c:";
 List<String> listWords = new List<String>();
 
 if (File.Exists(pathDoc + "\\example.txt"))
 {
 string[] lines = System.IO.File.ReadAllLines(pathDoc + "\\example.txt");
  
 foreach (string line in lines)
 {
  if (line.IndexOf("words") != -1)
  {
   string[] arrayWords = line.Replace("words:", "").Trim().Split('|');
   listWords.AddRange(arrayWords);
  }
 }
 }
 
 listWords.Sort();
 return listWords;
}

lunedì 1 ottobre 2012

Inserimento dati su db con php

Si può prendere spunto da questo esempio per inserire dei dati su di un database (ad esempio MySQL).
Il primo file include della variabili utili alla connessione e il secondo inserisce i dati nel database (includendo il primo file nella prima riga). Se l'operazione non va a buon fine viene intercettato l'errore e mostrato a video.

File connectionvar.php
<?php
# Type="MYSQL"
# HTTP="true"
$hostname_localhost = "localhost";
$database_localhost = "dbname";
$username_localhost = "root";
$password_localhost = "password";
$con_localhost = mysql_pconnect($hostname_localhost, 
 $username_localhost, $password_localhost) or 
 trigger_error(mysql_error(),E_USER_ERROR); 
?>
File insertdata.php
<?php require_once('Connections/connectionvar.php'); ?>
<html>
... <!-- html here-->
<?php
$lastname     = $_POST['lastname'];
$name        = $_POST['name'];

mysql_select_db($database_localhost, $con_localhost);

$sql = "insert into tbl_employee (name, lastname) values(
 '".trim($name)."','".trim($lastname)."')";
$result = mysql_query($sql,$con_localhost);

if (!$result){
 echo mysql_errno() . ": " . mysql_error() . "\n";
}
else
{
?>
... <!-- html here-->
<?php
mysql_close($con_localhost);
?>
</html>

sabato 29 settembre 2012

Commenti in c#

In un progetto c# possiamo inserire dei commenti in diversi modi:
con il region: possiamo includere molto codice non rendendolo in commento, ossia si avrà una descrizione di ciò che è presente all'interno della region;
// si commenta su di una riga;
/* */ si commenta il codice su più righe;
/// <summary> posto poco prima dell'inizio del metodo o funzione si descrive la parte interessata.
Eccone un esempio. Ambiente M. Visual Studio 2005
#region createChart: example of a chart

/// <summary>
/// Creation chart
/// </summary>
/// <param name="id"></param>
/// <param name="strName"></param>
protected void createChart(int id, string strName)
{
 try{
 // comment on single line
 }
 catch (Exception ex)
 {
 /*
 comment on more lines
 */
 }
}

#endregion

venerdì 28 settembre 2012

Caricamento dati da db con php

Supponendo di avere un database con una tabella popolata da nomi e cognomi di impiegati, vorremmo visualizzare a video la lista di tutte le persone presenti.
Questo piccolo esempio permette di accedere al database (ad esempio MySQL) ed effettuare un caricamento dati.
Il primo file "connectionvar.php" include della variabili utili alla connessione e il secondo "selectdata.php" (includendo il primo file nella prima riga) esegue la connessione al database, effettua il caricamento e visualizza i dati.


connectionvar.php
<?php
# Type="MYSQL"
# HTTP="true"
$hostname_localhost = "localhost";
$database_localhost = "dbname";
$username_localhost = "root";
$password_localhost = "password";
$con_localhost = mysql_pconnect($hostname_localhost, 
 $username_localhost, $password_localhost) 
 or trigger_error(mysql_error(),E_USER_ERROR); 
?>
selectdata.php
<?php require_once('Connections/connectionvar.php'); ?>
<html>
... <!-- html here-->
<?php
mysql_select_db($database_localhost, $con_localhost);
$sql = "select name, lastname from tbl_employee";
$rec_set = mysql_query($sql, $con_localhost) or die(mysql_error());
$row_recordset = mysql_fetch_assoc($rec_set);

do {
?>
... <!-- html here-->
<?php echo $row_recordset['name']." ".$row_recordset['lastname']?>
... <!-- html here-->
<?php
} while ($row_recordset = mysql_fetch_assoc($rec_set));
?>

... <!-- html here-->
<?php
mysql_close($con_localhost);
?>
</html>

giovedì 27 settembre 2012

Link utili per la certificazione LPI

Altri appunti per quanto concerne un libro e siti internet utilizzati per la certificazione LPI Linux e non solo.
Eccoli qua:

Libro:
 "Linux. Bible." Editore Hoepli, 2008 ISBN 8820336790

Link:
 www.lpi.org/ sito ufficiale LPI
 www.tldp.org/
 www.distromania.com/
 www.linux-praxis.de/lpisim/lpi.html  per qualche esercizio

Volendo se ne possono aggiungere degli altri (ufficiali o comunque ben fatti) inviando un commento qui di seguito.

mercoledì 26 settembre 2012

Xml con validazione xsd

Supponiamo di creare una richiesta di un articolo di guanti da moto con un file xml e validarlo secondo delle regole xsd.
La richiesta come esempio avrà una data, l'articolo fatto da codice nome descrizione e costo, una descrizione, e due file in allegato.
In una directory (ad esempio C:\xsd) creiamo un file xsd di richiesta "request.xsd" e un file dell'articolo "article.xsd" impostando alcune regole.
Da notare come nel file "request.xsd" è incluso il file "article.xsd": l'oggetto "request" incorpora l'elemento di riferimento "article" da cui si possono referenziare gli elementi.
Nella stessa directory inseriamo il file xml risultante (o creato da vari tool disponibili su internet) includendo l'unico file di validazione "request.xsd".
Se si dispone di un tool di validazione, provando a modificare alcuni valori sul file xml diversi da quelli che si sono impostati, verrà generato un errore.
Si seguito i sorgenti dei due file "request.xsd" e "article.xsd" e il file "gloves.xml".

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns="request" xmlns:xs="http://www.w3.org/2001/XMLSchema"
 xmlns:ar="ARTICLE" targetNamespace="request" 
 elementFormDefault="qualified" attributeFormDefault="unqualified">
 <xs:import namespace="ARTICLE" 
 schemaLocation="C:\xsd\article.xsd"/>
 <xs:element name="ATTACHMENTS">
  <xs:complexType>
   <xs:sequence>
    <xs:element ref="ATTACHMENTS_OK"/>
   </xs:sequence>
  </xs:complexType>
 </xs:element>
 <xs:element name="ATTACHMENTS_OK">
  <xs:complexType>
   <xs:sequence>
    <xs:element ref="ATTACHMENT_1"/>
    <xs:element ref="ATTACHMENT_2"/>
   </xs:sequence>
  </xs:complexType>
 </xs:element>
 <xs:element name="ATTACHMENT_1" type="xs:string"/>
 <xs:element name="ATTACHMENT_2" type="xs:string"/>
 <xs:element name="COD_ART">
  <xs:simpleType>
   <xs:restriction base="xs:string">
    <xs:maxLength value="25"/>
   </xs:restriction>
  </xs:simpleType>
 </xs:element>
 <xs:element name="DATE_REQ" type="xs:string"/>
 <xs:element name="DESCRIPTION" type="xs:string"/>
 <xs:simpleType name="ID">
  <xs:restriction base="xs:int"/>
 </xs:simpleType>
 <xs:element name="REQUEST">
  <xs:complexType>
   <xs:sequence>
    <xs:element name="ID" type="ID"/>
    <xs:element ref="DATE_REQ"/>
    <xs:element ref="ar:ARTICLE"/>
    <xs:element ref="DESCRIPTION"/>
    <xs:element ref="ATTACHMENTS"/>
   </xs:sequence>
  </xs:complexType>
 </xs:element>
</xs:schema>

<pre class="code_style" name="code">
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns="ARTICLE" xmlns:xs="http://www.w3.org/2001/XMLSchema"
 targetNamespace="ARTICLE"
 elementFormDefault="qualified" attributeFormDefault="unqualified">
 <xs:element name="COST" type="xs:float"/>
 <xs:element name="DESCRIPTION" type="xs:string"/>
 <xs:simpleType name="ID">
  <xs:restriction base="xs:int"/>
 </xs:simpleType>
 <xs:element name="NAME">
  <xs:simpleType>
   <xs:restriction base="xs:string">
    <xs:maxLength value="25"/>
   </xs:restriction>
  </xs:simpleType>
 </xs:element>
 <xs:element name="ARTICLE">
  <xs:complexType>
   <xs:sequence>
    <xs:element name="ID" type="ID"/>
    <xs:element ref="NAME"/>
    <xs:element ref="DESCRIPTION"/>
    <xs:element ref="COST"/>
   </xs:sequence>
  </xs:complexType>
 </xs:element>
</xs:schema>

<?xml version="1.0" encoding="UTF-8"?>
<REQUEST xmlns="request" xmlns:ar="ARTICLE" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="request
C:\xsd\request.xsd">
 <ID>1</ID>
 <DATE_REQ>10/11/2010</DATE_REQ>
 <ar:ARTICLE>
  <ar:ID>10</ar:ID>
  <ar:NAME>Gloves</ar:NAME>
  <ar:DESCRIPTION>Motorcycle gloves</ar:DESCRIPTION>
  <ar:COST>50</ar:COST>
 </ar:ARTICLE>
 <DESCRIPTION/>
 <ATTACHMENTS>
  <ATTACHMENTS_OK>
   <ATTACHMENT_1>img_gloves.png</ATTACHMENT_1>
   <ATTACHMENT_2>notes.txt</ATTACHMENT_2>
  </ATTACHMENTS_OK>
 </ATTACHMENTS>
</REQUEST>

domenica 23 settembre 2012

Diverse concatenazioni di stringhe

Spesso capita di concatenare delle stringhe in un caricamento dati, ma non sempre è buona la stessa sintassi nei diversi database.
Riporto alcuni esempi che ho utilizzato su diversi db (omettendo la versione precisa del database).

MySQL
SELECT CONCAT(first_name, ' ', last_name, ';') AS full_name
 FROM tbl_employee WHERE last_name = 'Brown'
SQL Server
SELECT first_name + ' ' + last_name + ';'
 FROM tbl_employee WHERE last_name = 'Brown'
Oracle
SELECT first_name || ' ' || last_name || chr(59)
 FROM tbl_employee WHERE last_name = 'Brown' 
Immaginando una tabella "tbl_employee" e due campi "first_name" e "last_name" l'output sarà:

John Brown;
Peter Brown;

sabato 22 settembre 2012

Aggiornamento app Quiz versione 1.6

"Più categorie, più domande...e più risposte disponibili!" Era lo slogan della scorsa volta.
Beh questa volta posso andare oltre e scrivere: non solo più domande e più risposte, ma misuriamoci online con gli altri giocatori!

Di seguito gli aggiornamenti visibili anche su market android:
  - aggiunti 50 quiz per ciascuna categoria di cultura generale logica e sport
  - aggiornate alcune domande e risposte (meglio dire ottimizzate)
  - classifica online delle 20 posizioni migliori durante la settimana
  - aggiunti 660 quiz in lingua inglese

La "TOP OF THE WEEK" o meglio "TOP DELLA SETTIMANA" è la classifica che prevede le 20 migliori posizioni dei giocatori che vogliono inviare il proprio punteggio online.
Ogni settimana ci sarà la nuova classifica aggiornata, vale a dire che le posizioni online saranno valide dal lunedì alla domenica.
Nulla di importante su violazione della privacy e varie, come scritto nella descrizione dell'app, i dati vengono inviati manualmente se l'utente vuole oppure no.

La classifica è in versione beta, forse ci saranno dei rallentamenti o forse no, ma comunque vediamo se sarà buona l'idea per dar vita a nuovi aggiornamenti.

Da oggi si può spaziare tra 1200+ quiz in italiano e 1100 quiz in lingua inglese.

BUON DIVERTIMENTO!

venerdì 21 settembre 2012

MySQL event

Con questa sintassi è possibile creare un evento programmato su di uno schema MySQL (dalla versione 5.1 di MySQL).
In questo caso creo un evento eseguito giornalmente che richiama una funzione.
Il nome evento può avere al massimo 64 caratteri.
Per altre proprietà rimando al link http://dev.mysql.com/
CREATE EVENT my_schema.my_event 
 ON SCHEDULE EVERY 1 DAY 
 DO 
 SELECT my_schema.my_func();
Da console MySQL visualizzo le proprietà degli eventi su my_schema con:
SHOW EVENTS FROM my_schema;

venerdì 7 settembre 2012

Comandi vi usati in Linux

Questo è un elenco di comandi frequentemente usati nel visual editor vi di Linux:

COMANDODESCRIZIONE
ZZsalva ed esce
:wsalva
:wqsalva ed esce
:quscita senza salvare
:q!uscita incondizionata
yycopia la riga corrente
15yycopia 15 righe in memoria
pincolla il testo nel punto dove si trova il cursore
xcancella il carattere in cui si trova il cursore
Xcancella il carattere alla sinistra del cursore
Dcancella tutto quello che si trova alla sinistra del cursore fino alla fine della riga
ddcancella la riga in cui si trova il cursore
3ddcancella 3 righe partendo dalla quella in cui si trova il cursore
dGcancella dalla posizione in cui si trova il cursore fino alla fine del file
d1Gcancella dalla posizione in cui si trova il cursore fino all'inizio del file
^inizio della riga corrente
$fine della riga corrente
Gfine del file
1Ginizio del file
/testocerca il testo dalla posizione corrente verso il basso
?testocerca il testo dalla posizione corrente verso l'alto
uannulla l'ultima modifica effettuata
Uannulla l'ultimo annullamento
.ripete l'ultimo comando

giovedì 6 settembre 2012

Aggiornamento app Quiz versione 1.5

Più categorie, più domande...e più risposte disponibili!
Sul market android ecco la nuova versione di Quiz con i seguenti aggiornamenti:
  • aggiunte le due nuove categorie bandiere e sport con 100 domande ciascuna, sia in lingua italiana che in lingua inglese per un totale di 1100 quiz in italiano e 440 quiz in lingua inglese
  • aggiunte più risposte disponibili per una domanda, ci sarà sempre una risposta esatta sulle quattro disponibili ma l'algoritmo avrà più scelte tra quelle inserite nel sistema
  • migliorati alcuni suggerimenti
  • nuovo layout per il messaggio di fine gioco al raggiungimento di 1.000.000 di punti
Bandiere, calcio, motociclismo, pallavolo, nuoto, automobilismo etc etc etc...che altro???
BUONI QUIZ A TUTTI!!!

Alcuni comandi Linux utili

Di seguito riporto una lista di comandi che possono sempre essere utili.
In alcuni di essi riporto varie opzioni.
Per i comandi utilizzati nel vi rimando al post dedicato.

COMANDODESCRIZIONE
alias oo='other'definisce un alias di comandi
aproposricerca una parola chiave in database contenenti brevi descrizioni dei comandi di sistema
apt-cache search package_namecerca la lista dei pacchetti
apt-cdrom install package_nameinstalla/aggiorna un pacchetto deb da cdrom
apt-get check controlla la corretta risoluzione delle dipendenze
apt-get cleanripulisce la cache dai pacchetti scaricati
apt-get install package_nameinstalla/aggiorna un pacchetto deb
apt-get remove package_namerimuove un pacchetto deb dal sistema
apt-get updateaggiorna la lista dei pacchetti
apt-get upgradeaggiorna tutti pacchetti deb installati
archmostra l'architettura della macchina
badblocks -v /dev/hda1verifica bad blocks sul disco hda1
bunzip2 file_name.bz2decomprime il file denominato 'file_name.bz2'
bzip2 file_namecomprime il file denominato 'file_name'
cal 2012visualizza il calendario 2012
cat /proc/meminfoverifica la memoria in uso
cat /proc/mountsvisualizza i filesystem montati
cat /proc/versionvisualizza la versione del kernel
cat file_namevisualizza il contenuto di un file partendo dalla prima riga
cat -n file_namenumera le righe di un file
cd -vai alla directory precedente
cdvai alla home directory
cd ..risali di un livello
cd ../..risali di due livelli
cd /homeentra nella directory '/home'
cd ~user1vai alla home directory
cdrecord --scanbusscansiona il bus per identificare il canale scsi
cdrecord -v dev=/dev/cdrom cd.isomasterizza un immagine iso
chage -E 2005-12-31 user_nameimposta la scadenza password per un utente
chattr +a file_nameapertura file in scrittura solo in modalità append
chattr +c file_nameil file viene compresso/decompresso dal kernel automaticamente
chattr +d file_namefa in modo che il programma Dump ignori il file durante un backup
chattr +i file_namerende un file immutabile
chattr +s file_nameconsente ad un file di essere cancellato in maniera sicura
chattr +S file_namefa in modo che se un file viene modificato i cambiamenti vengono scritti in maniera sincrona sul disco come con sync
chattr +u file_namerecupera il contenuto di un file anche se questo viene cancellato
chgrp group_name file_namemodifica il gruppo di appartenenza di un file
chmod g+s /home/publicimposta il bit SGID su una directory
chmod go-rwx directory1rimuove i permessi di lettura(r) scrittura(w) ed accesso(x) per gli utenti gruppo(g) e altri(o)
chmod g-s /home/publicdisattiva il bit SGID su una directory
chmod o+t /home/publicimposta il bit STIKY su una directory - consente la cancellazione dei file solo ai legittimi proprietari
chmod o-t /home/publicdisattiva il bit STIKY su una directory
chmod u+s /bin/file_namel'utente che esegue quel file ottiene gli stessi privilegi del proprietario
chmod ugo+rwx directory1imposta i permessi di lettura(r) scrittura(w) ed accesso(x) per gli utenti proprietario(u) gruppo(g) e altri(o)
chmod ug-xtoglie il permesso di esecuzione al proprietario e ai gruppi
chmod 666 file.txtscrittura e lettura a tutti
chmod 777 file.txtscrittura lettura ed esecuzione a tutti
chown -R user1 directory1modificare l'utente proprietario di una directory e tutti i file e directory contenuti al suo interno
chown user1 file_namemodificare il proprietario di un file
chown user1:group1 file_namemodificare utente e gruppo proprietario di un file
chsh user1 /usr/bin/cshcambia shell di lavoro
chsh --list-shellsmostra eventuali utenti remoti loggati sul sistema
comm -1 file_name file2compara i contenuti di due file eliminando le righe univoche del 'file_name'
comm -2 file_name file2compara i contenuti di due file eliminando le righe univoche del 'file2'
comm -3 file_name file2compara i contenuti di due file eliminando le righe che appaiono su entrambi i file
cp -a /tmp/dir1 .copia una directory dentro la directory di lavoro corrente
cp -a dir1 dir2copia la directory dir1 in dir2
cp dir/* .copia tutti i file di una directory dentro la directory di lavoro corrente
cp file file_namedetermina il mime type di un file
cp file_name1 file_name2copia un file_name1 in file_name2
datevisualizza la data di sistema
dd bs=1M if=/dev/hda | gzip | ssh user@ip_addr 'dd of=hda.gz'esegue il backup del contentuo di un hardisk locale su un host remoto via ssh
dd if=/dev/fd0 of=/dev/hda bs=512 count=1ripristina l'MBR dalla copia di backup salvata su floppy
dd if=/dev/hda of=/dev/fd0 bs=512 count=1crea una copia dell'MBR(Master Boot Record) su floppy
dd if=/dev/hdc | md5sumesegue un md5sum su un device, simile ad un CD
dd if=/dev/sda of=/tmp/file_nameesegue il backup del contenuto di un hardisk su un file locale
df -hvisualizza l'elenco delle partizioni montate
dhclient eth0attiva 'eth0' in dhcp mode
diff file_name1 file_name2trova le differenze tra due file
dos2unix filedos.txt fileunix.txtconverte un file di testo MSDOS in formato UNIX
dosfsck /dev/hda1ripara / verifica l'integrità del filesystem dos sul disco hda1
dpkg --contents [package.deb]visualizza la lista dei file forniti da un pacchetto non installato
dpkg -i [package.deb]installa un pacchetto deb
dpkg -lvisualizza tutti i pacchetti deb installati sul sistema
dpkg -L package_namevisualizza la lista dei file forniti da un pacchetto installato
dpkg -l | grep abcdvisualizza tutti i pacchetti rpm col nome "abcd"
dpkg -r package_namerimuove un pacchetto deb dal sistema
dpkg -S /bin/pingverifica a quale pacchetto appartiene un dato file
dpkg -s package_nameottiene informazioni su un determinato pacchetto installato
du -sh dir1permette di conoscere lo spazio su disco occupato dalla directory 'dir1'
du -sk * | sort -rnvisualizza la dimensione dei file e delle directory ordinati per dimensione
dump -0aj -f /tmp/home0.bak /homebackup full della directory '/home'
dump -1aj -f /tmp/home0.bak /homebackup incrementale della directory '/home'
e2fsck /dev/hda1verifica l'integrità del filesystem ext2 sul disco hda1
e2fsck -j /dev/hda1 verifica l'integrità del filesystem ext3 sul disco hda1
echo $PATHvisualizza il contenuto della variabile PATH
echo a b c | awk '{print $1,$3}'stampa la prima e la terza colonna di una riga
echo a b c | awk '{print $1}'stampa la prima colonna di una riga
echo 'wget -c www.example.com/files.iso' | at 08:00inizia il download alle 8
echo 'example' | tr '[:lower:]' '[:upper:]'converte example da lower case in upper case
ethtool eth0mostra le statistiche scheda di rete 'eth0'
fdformat -n /dev/fd0formatta un floppy disk
fdisk [device]gestisce la partizione di un disco
find / -name *.rpm -exec chmod 755 '{}' \cerca tutti i file con estensione 'rpm' e modificarne i permessi
find / -name file_namecerca un file o directory all'interno del filesystem partendo dalla radice '/'
find / -perm -u+svisualizza tutti i file presenti sul sistema con SUID impostato
find / -user user1cerca tutti i file e le directory appartenenti all'utente 'user1'
find / -xdev -name \*.rpmcerca tutti i file con estensione rpm ignorando partizioni rimovibili come cdrom, pen-drive, ecc…
find /home/user1 -name \*.bincerca all'interno della directory '/home/user1' tutti file con estensione '.bin'
find /usr/bin -type f -atime +10cerca tutti i file(binari) non utilizzati negli ultimi 10 giorni
find /usr/bin -type f -mtime -15cerca tutti i file creati o modificati entro 15 giorni
find /var/log -name '*.log' | tar cv --files-from=- | bzip2 > log.tar.bz2trova tutti i file con estensione '.log' e crea un archivio in formato bzip
free -mvisualizza lo status della ram in megabyte
fsck /dev/hda1verifica l'integrità del filesystem linux sul disco hda1
fsck.ext2 /dev/hda1verifica l'integrità del filesystem ext2 sul disco hda1
fsck.ext3 /dev/hda1verifica l'integrità del filesystem ext3 sul disco hda1
fsck.msdos /dev/hda1verifica l'integrità del filesystem dos sul disco hda1
fsck.vfat /dev/hda1verifica l'integrità del filesystem fat sul disco hda1
fuser -km /mnt/hda2forzare umount quando il device è occupato
gpg -c file_namecrypta un file con GNU Privacy Guard
gpg file_name.gpgdecrypta un file con GNU Privacy Guard
grep [0-9] /var/log/messagescerca all'interno del file 'messages' tutte le righe che contengono numeri
grep ^Abc /var/log/messagescerca le parole che cominciano con "Abc" all'interno del file 'messages'
grep Abc /var/log/messagescerca la parola "Abc" all'interno del file 'messages'
grep Abc -R /var/log/*cerca della stringa "Abc" dentro la directory '/var/log' e sottodirectory
groupadd group_namecrea un nuovo gruppo
groupdel group_nameelimina un gruppo
groupmod -n moon sunrinomina un gruppo
grpckcontrolla la sintassi e la correttezza formale del file '/etc/group' e l'effettiva esistenza dei gruppi
gunzip file_name.gzdecomprime il file denominato 'file_name.gz'
gzip -9 file_namecomprime con la massima compressione
gzip file_namecomprime il file denominato 'file_name'
haltchiude il sistema
head -2 file_namevisualizza le prime due righe di un file
host www.example.comrisolve hostname in ip address
hostnamemostra l'hostname del sistema
iconv -f fromEncoding -t toEncoding inputFile > outputFileconverte la codifica dei caratteri da un formato ad un'altro
iconv -lmostra tutti i set di caratteri conosciuti
ifconfigvisualizza ip macchina
ifconfig eth0visualizza la configurazione di una scheda di rete ethernet
ifconfig eth0 192.168.1.1 netmask 255.255.255.0configura ip address
ifconfig eth0 promiscconfigura 'eth0' in modalità promiscua
ifdown eth0disattiva l'interfaccia 'eth0'
ifup eth0attiva l'interfaccia 'eth0'
init 0shutdown del sistema
init 1modalità singolo utente e servizio di rete disabilitato
init 2stato multiutente e servizio di rete attivo ma disabilitato il file sharing
init 3modalità testuale, tutti i servizi attivi
init 4inutilizzato
init 5modalità grfica di linux, runlevel predefinito
init 6reboot del sistema
ip link showmostra status link di tutte le interfaccie
iptables -t filter -A FORWARD -p tcp --dport pop3 -j ACCEPTpermetti connessioni pop3 sulla chain di forward
iptables -t filter -A INPUT -j LOG --log-prefixlogging sulla chain di input
iptables -t filter -A INPUT -p tcp --dport telnet -j ACCEPTpermetti connessioni telnet in ingresso
iptables -t filter -A OUTPUT -p tcp --dport http -j DROPblocca connessioni http in uscita
iptables -t filter -Fazzera tutte le regole dalla tabella di filtraggio
iptables -t filter -Lmostra tutte le chains della tabella di filtering
iptables -t filter -Xcancella eventuali chains create dall'utente
iptables -t nat -Fazzera tutte le regole dalla tabella nat
iptables -t nat -Lmostra tutte le chains della tabella di nat
iwconfig eth1visualizza la configurazione di una scheda rete wireless
iwlist scanesegue una scansione delle reti wireless disponibili
kill -1 process_idforza il processo a ricaricare la configurazione
kill -9 process_idforza la chiusura del processo
last rebootmostra lo storico dei reboot
ldd /usr/bin/sshmostra le librerie richieste per esempio dal programma ssh
less file_namesimile al comando 'more' ma che consente di scorrere il file sia in avanti che indietro
ln file_name lnk1crea un link fisico al file(o directory) 'file_name' chiamato lnk1
ln -s file_name lnk1crea un link simbolico al file(o directory) 'file_name' chiamato lnk1
locate \*.pscerca tutti i file con estensione .ps - prima eseguire il comando 'updatedb'
logoutabbondona la sessione
lsvisualizza file directory
ls *[0-9]*visualizza file e cartelle che contengono numeri
ls /tmp | pr -T5 -W$COLUMNSdivide il terminale in 5 colonne
ls -avisualizza file nascosti
ls -Fdistingue file e directory
ls -lvisualizza i dettagli di file e directory
ls -lhvisualizza i permessi
ls -lSr |morevisualizza la dimensione dei file e delle directory ordinandoli per dimensione
lsattrvisualizza gli attributi speciali
lsmodvisualizza i mooduli del kernel caricati
lsof /home/user1visualizza la lista dei file aperti in una determinato path di sistema
lsof -p process_idvisualizza la lista dei file aperti dai processi
lspci -tvvisualizza le periferiche pci
lstreevisualizza file e directory in un albero a partire da root
lsusb -tvvisualizza le periferiche usb
mkbootdisk --device /dev/fd0 `uname -r`crea un dischetto di boot
mkdir dir1crea la directory 'dir1'
mkdir dir1 dir2crea due directory contemporaneamente
mke2fs /dev/hda1crea il filesystem di tipo linux ext2 sulla partizione hda1
mke2fs -j /dev/hda1crea il filesystem di tipo linux ext3(Journal) sulla partizione hda1
mkfs /dev/hda1crea un filesystem di tipo linux sulla partizione hda1
mkfs -t vfat 32 -F /dev/hda1crea un filesystem di tipo FAT32
mkisofs /dev/cdrom | gzip > cd_iso.gzcrea l'immagine iso compressa di un cdrom sull'hard-disk
mkisofs /dev/cdrom > cd.isocrea l'immagine iso di un cdrom sull'hard-disk
mkisofs -J -allow-leading-dots -R -Vcrea l'immagine iso di una directory da masterizzare
mkswap /dev/hda3crea una filesystem di tipo swap
more file_namevisualizza il contenuto di un file lungo
mount /dev/cdrom /mnt/cdrommonta un cdrom/dvdrom
mount /dev/hdc /mnt/cdrecordermonta un cdrw/dvdrom
mount /dev/sda1 /mnt/usbdiskmonta una pendrive usb o flash
mount -o loop cd.iso /mnt/isomontarun'immagine iso
mount -o loop file.iso /mnt/cdrommonta un file ISO9660 o Immagine iso
mount -t vfat /dev/hda5 /mnt/hda5monta un filesystem windows FAT32
mv dir1 new_dirrinomina una directory o file
nl [options] [files]permette di conoscere il numero di linee del file
nbtscan ip_addrrisoluzione nome netbios
netstat -rnmostra la tabella di routing similmente come "route -n"
netstat -tupmostra tutte le connessioni di rete attive e rispettivi PID
netstat -tuplmostra tutti i servizi di rete in ascolto sul sistema e rispettivi PID
nmblookup -A ip_addrrisolve nome netbios
nslookup www.example.comrisolve hostname in ip address e viceversa
pacman -R namerimuove un pacchetto e tutti i file associati
pacman -S nameinstalla un pacchetto risolvendo le dipendenze
passwdmodifica la password
passwd user1modifica la password di un utente(solo da root)
paste -d '+' file1 file2unisce il contenuto di due file per colonne con il delimitatore '+' tra apici
paste file1 file2unisce il contenuto di due file per colonne
ps [options]visualizza il processi correnti
ps -e -o pid,args --forestvisualizza i processi sistema in maniera gerarchica
ps -eafwvisualizza i processi di sistema
pstreemostra un albero dei processi sistema
pwckverifica la correttezza sintattica e formale del file '/etc/passwd' e l'effettiva esistenza degli utenti
pwdvisualizza il path della directory di lavoro
rar a file1.rar file1 file2 dir1comprime in rar simultaneamente 'file1', 'file2' e 'dir1'
rar a file1.rar test_filecrea un archivio rar chiamato 'file1.rar'
rar x file_name.rardecomprime un archivio rar
rebootriavvio del sistema
recode -l | morevisualizza tutti i formati di conversione disponibili
restore -if /tmp/home0.bakripristino di un backup in maniera interattiva
rm -f file_nameelimina il file 'file_name'
rm -rf dir1elimina ricorsivamente la directory 'dir1' e sul contenuto
rm -rf dir1 dir2elimina ricorsivamente due directory ed il loro contenuto con un solo comando
rmdir dir1elimina la directory 'dir1'
route add -net 0/0 gw IP_Gatewayconfigura default gateway
route add -net 192.168.0.0 netmask 255.255.0.0 gw 192.168.1.1configura route statica per raggiungere le rete '192.168.0.0/16'
route -nvisualizza la tabella di routing
rpm --checksig [package.rpm]verifica l'integrità di un pacchetto rpm
rpm -e package_namerimuove un pacchetto rpm
rpm -F [package.rpm]aggiorna un pacchetto rpm solo se quest'ultimo risulta già installato
rpm --import /media/cdrom/RPM-GPG-KEYimporta la public-key della digital signature
rpm -ivh /usr/src/redhat/RPMS/`arch`/[package.rpm]installa un pacchetto costruito da un rpm sorgente
rpm -ivh [package.rpm]installa un pacchetto rpm
rpm -ivh --nodeeps [package.rpm]installa un pacchetto rpm ignorando le dipendenze richieste
rpm -q package_name --changelogvisualizza lo storico delle revisioni di un pacchetto rpm
rpm -q package_name --scriptsvisualizza gli script avviati in fase di installazione/rimozione
rpm -q package_name --whatrequiresvisualizza la lista delle dipendenze richieste da un pacchetto rpm
rpm -q -a --qf '%10{SIZE}t%{NAME}n' | sort -k1,1nvisualizza la dimensione dei pacchetti rpm installati ordinanti per dimensione(fedora, redhat e derivate)
rpm -qavisualizza tutti i pacchetti rpm installati sul sistema
rpm -qa gpg-pubkeyverifica l'integrità di tutti pacchetti rpm installati
rpm -qc package_namevisualizza la lista dei file di configurazione forniti da un pacchetto rpm installato
rpm -qf /etc/httpd/conf/httpd.confverifica a quale pacchetto rpm appartiene un dato file
rpm -qi package_namesi ottengono informazioni su un determinato pacchetto installato
rpm -ql package_namevisualizza la lista dei file forniti da un pacchetto rpm installato
rpm -qp [package.rpm] -lvisualizza la lista dei file forniti da un pacchetto non ancora installato
rpm -U [package.rpm]aggiorna un pacchetto rpm senza modificarne i file di configurazione
rpm -V package_nameverifica file size, permessi, tipo, owner, group, MD5 checksum e ultima modifica
rpm -Vaverifica tutti i pacchetti rpm installati sul sistema - usare con cautela
rpm -Vp [package.rpm]verifica un pacchetto rpm non ancora installato
rpm2cpio [package.rpm] | cpio --extract --make-directories *bin*estrae gli eseguibili da un pacchetto rpm
rpmbuild --rebuild [package.src.rpm]costruisce un pacchetto da un rpm sorgente
rsync -az -e ssh --delete /home/local ip_addr:/home/publicsincronizza una directory remota con una directory locale via ssh e compressione
rsync -rogpav --delete /home /tmpsincronizzazione tra directory
rsync -rogpav -e ssh --delete /home ip_address:/tmprsync via ssh tunnel
sdiff file1 file2trova le difierenze tra due files e li fonde interrattivamente simile a "diff"
sed '/ */d; /^$/d' example.txtrimuove i commenti e le righe vuote da example.txt
sed '/^$/d' example.txtrimuove tutte le righe vuote da example.txt
sed -e '1d' exampe.txtelimina la prima riga dal file example.txt
sed -e 's/ *$//' example.txtrimuove i caratteri vuoti alla fine di ogni riga
sed -e 's/00*/0/g' example.txtsostituisce più zeri con un solo zero
sed -e 's/string1//g' example.txtcancella solo la parola "stringa1" da tutte le righe lasciando inalterato il resto
sed -n '/string1/p'visualizza solo righe che contengono la parola "stringa1"
sed -n '1,5p' example.txtstampa dalla riga 1 alla 5 di example.txt
sed -n '5p;5q' example.txtstampa la riga 5 di un file
sed 's/string1/string2/g'example.txt rimpiazza la "stringa1" con la "stringa2" da example.txt
shutdown -ccancella un arresto programmato del sistema
shutdown -h nowarresto del sistema
shutdown -r nowriavvio del sistema
smartctl -A /dev/hdamonitora l'affidabilità di un hard-disk mediante SMART
smartctl -i /dev/hdaverifica se SMART è attivo su un hard-disk
smbclient -L ip_addr/hostnamevisualizza le condivisioni remote di un host windows
sort file1 file2ordinare i contenuti di due file
sort file1 file2 | uniqordina i contenuti di due file omettendo le linee ripetute
sort file1 file2 | uniq -dordina i contenuti di due file stampando solo le line duplicate
sort file1 file2 | uniq -uordina i contenuti di due file stampando solo le line univoche
startxavvia l'ambiente grafico (X Window System)
strace -c ls >/dev/nullmostra le chiamate di sistema fatte e ricevute da un processo
strace -f -e open ls >/dev/nullvisualizza le chiamate alle librerie
sudoconsente di eseguire un comando con privilegi root
swapon /dev/hda2 /dev/hdb3attiva due partizioni di swap
swapon /dev/hda3attiva una nuova partizione di swap
tac file1visualizza il contenuto di un file partendo dall'ultima riga
tail /var/log/dmesgvisualizza gli eventi inerenti al processo di boot del kernel
tail /var/log/messagesvisualizza gli eventi di sistema
tail -2 file1visualizza le ultime due righe di un file
tail -f /var/log/messagesvisualizza in tempo reale ciò che viene aggiunto ad un file
tar -cvf archive.tar file_namecrea un archivio tar non compresso
tar -cvf archive.tar file1 file2 dir1creare un archivio contenente 'file1', 'file2' e 'dir1'
tar -cvfj archive.tar.bz2 dir1crea un archivio tar compresso in bzip2
tar -cvfz archive.tar.gz dir1crea un archivio tar compresso in gzip
tar -Puf backup.tar /home/userbackup incrementale della directory '/home/user'
tar -tf archive.tarvisualizza il contenuto di un archivio
tar -xvf archive.tarestrae un archivio tar
tar -xvf archive.tar -C /tmpestrarre un archivio tar dentro /tmp
tar -xvfj archive.tar.bz2decomprime un archivio tar compresso in bzip2
tar -xvfz archive.tar.gzdecomprime un archivio tar compresso in gzip
tcpdump tcp port 80visualizza tutto il traffico http
telinit 0arresta il sistema
topvisualizza i processi di sistema
touch -t 0712250000 file_namemodifica il timestamp di un file o directory - (YYMMDDhhmm)
treevisualizza file e directory in un albero a partire da root
umount /dev/hda2smonta il disco hda2 - uscire dal mount point '/mnt/hda2' prima di smontare
umount -n /mnt/hda2esegue umount senza scrivere sul file /etc/mtab - utile quando il filesystem è in read-only o il disco è saturo
uname -rmostra la versione del kernel in uso
unix2dos fileunix.txt filedos.txtconverte un file di testo UNIX in formato MSDOS
unrar x file_name.rardecomprime un archivio rar
unzip file_name.zipdecomprime un archivio zip
useradd -c "User Linux" -g admin -d /home/user1 -s /bin/bash user1crea un nuovo utente appartente al gruppo "admin"
useradd user1crea un nuovo utente
userdel -r user1elimina un utente ('-r' elimina la home directory)
usermod -c "User FTP" -g system -d /ftp/user1 -s /bin/nologin user1modifica gli attributi utente
viesegue il visual editor linux (vedere post Comandi vi linux)
vimesegue il clone di vi
watch -n1 'cat /proc/interrupts'mostra gli interrupts in tempo reale
wc [options] [files]mostra a video il numero di caratteri, parole e linee del file
wget -c www.example.com/file.isoscarica un file con la possibilità di arrestare il download e riprenderlo successivamente
wget -r www.example.comscarica un sito intero
whatis ...keywordmostra le informazioni su quello che un dato programma fa
whereis haltvisualizza la locazione di un file binario,sorgente o man
which haltvisualizza il path completo di un file binario/eseguibile
who -amostra gli utenti loggati in maniera dettagliata
whoamivisualizza il nostro nome-utente
whois www.example.comsi ottengono informazioni sul dominio/hosts
yum clean package_nameripulisce la cache dai pacchetti rpm scaricati
yum clean allrimuove dalla cache i pacchetti e gli headers
yum clean headersrimuove tutti i file headers che il sistema usa per la risoluzione delle dipendenze
yum listelenca tutti i pacchetti rpm installati sul sistema
yum localinstall [package.rpm]installa un pacchetto locale cercando di risolvere le dipendenze via yum
yum remove package_namerimuove un pacchetto rpm dal sistema
yum search package_namecerca un pacchetto rpm sul repository
yum update package_nameaggiorna un pacchetto rpm
yum -y install package_namescarica ed installa un pacchetto rpm
yum -y updateaggiorna tutti i pacchetti rpm installati sul sistema
zip file_name.zip file_namecrea un archivio compresso in zip