nl

Mattepuffo's logo
Mac OS X single-user mode

Mac OS X single-user mode

Chi usa Linux avrà sicuramente usato almeno una volta il runlevel 3 o la single-user mode che in pratica avvia il sistema senza GUI.

Sul Mac invece la gestione dei runlevel è completamente diversa; non basta aggiungere un 3 alla riga del kernel (anche perchè non saprei neanche dove andarla a rintracciare).

Mattepuffo's logo
Gestione dei servizi in Debian

Gestione dei servizi in Debian

Sinceramente non mi piace molto la gestione dei servizi in Debian.

Su Archlinux basta andare in /etc/rc.conf alla riga DAEMONS.

Su Debian invece la gestione è un pò diversa, e all'inizio non ci sono strumenti per gestirli.

L'unico modo sarebbe spulciare nelle varie directory /etc/rcX.d, dove X sta per il runlevel.

I runlevel in Debian sono questi:

  • 0 (halt the system)
  • 1 (single-user / minimal mode)
  • 2 through 5 (multiuser modes)
  • 6 (reboot the system)

In genere si usa il 2; per scoprirlo basta digitare nel terminale il comando runlevel.

Quindi per gestire un servizio:

# ls -l /etc/rc2.d
totale 4
lrwxrwxrwx 1 root root  19 27 mag 15.07 K01bluetooth -> ../init.d/bluetooth
lrwxrwxrwx 1 root root  14 27 mag 15.07 K01cups -> ../init.d/cups
lrwxrwxrwx 1 root root  15  6 lug 22.49 K01exim4 -> ../init.d/exim4
lrwxrwxrwx 1 root root  15 27 mag 15.07 K01saned -> ../init.d/saned
lrwxrwxrwx 1 root root  20  6 lug 22.49 K06nfs-common -> ../init.d/nfs-common
lrwxrwxrwx 1 root root  17  6 lug 22.51 K06rpcbind -> ../init.d/rpcbind
-rw-r--r-- 1 root root 677  9 giu 21.35 README
lrwxrwxrwx 1 root root  17 21 mag 14.05 S14portmap -> ../init.d/portmap
lrwxrwxrwx 1 root root  22  6 lug 22.49 S16acpi-fakekey -> ../init.d/acpi-fakekey
lrwxrwxrwx 1 root root  24  6 lug 22.49 S16binfmt-support -> ../init.d/binfmt-support
lrwxrwxrwx 1 root root  20  6 lug 22.49 S16fancontrol -> ../init.d/fancontrol
lrwxrwxrwx 1 root root  17  6 lug 22.49 S16rsyslog -> ../init.d/rsyslog
lrwxrwxrwx 1 root root  14  6 lug 22.49 S16sudo -> ../init.d/sudo
lrwxrwxrwx 1 root root  15  6 lug 22.49 S17acpid -> ../init.d/acpid
lrwxrwxrwx 1 root root  22  6 lug 22.49 S17acpi-support -> ../init.d/acpi-support
lrwxrwxrwx 1 root root  17  6 lug 22.49 S17anacron -> ../init.d/anacron
lrwxrwxrwx 1 root root  14  6 lug 22.49 S17apmd -> ../init.d/apmd
lrwxrwxrwx 1 root root  13  6 lug 22.49 S17atd -> ../init.d/atd
lrwxrwxrwx 1 root root  14  6 lug 22.49 S17cron -> ../init.d/cron
lrwxrwxrwx 1 root root  14  6 lug 22.49 S17dbus -> ../init.d/dbus
lrwxrwxrwx 1 root root  20  6 lug 22.49 S17kerneloops -> ../init.d/kerneloops
lrwxrwxrwx 1 root root  21  6 lug 22.49 S17loadcpufreq -> ../init.d/loadcpufreq
lrwxrwxrwx 1 root root  20  7 lug 12.55 S17postgresql -> ../init.d/postgresql
lrwxrwxrwx 1 root root  13  7 lug 10.43 S17ssh -> ../init.d/ssh
lrwxrwxrwx 1 root root  22  6 lug 22.49 S18avahi-daemon -> ../init.d/avahi-daemon
lrwxrwxrwx 1 root root  22  6 lug 22.49 S18cpufrequtils -> ../init.d/cpufrequtils
lrwxrwxrwx 1 root root  25  6 lug 22.49 S18network-manager -> ../init.d/network-manager
lrwxrwxrwx 1 root root  14  6 lug 22.49 S19gdm3 -> ../init.d/gdm3
lrwxrwxrwx 1 root root  18  6 lug 22.49 S20bootlogs -> ../init.d/bootlogs
lrwxrwxrwx 1 root root  18  6 lug 22.49 S21rc.local -> ../init.d/rc.local
lrwxrwxrwx 1 root root  19  6 lug 22.49 S21rmnologin -> ../init.d/rmnologin
lrwxrwxrwx 1 root root  23  6 lug 22.49 S21stop-bootlogd -> ../init.d/stop-bootlogd

Se ad esempio vogliamo avviare cups:

# /etc/init.d/cups start
Starting Common Unix Printing System: cupsd.

Per stopparlo o riavviarlo basta sostituire start con stop o restart.

Sennò possiamo usare la sintassi:

# service cups start / stop / restart

Capite che però non è il massimo della comodità; vi propongo allora tre stumenti per gestire i servizi tutti insieme.

Mattepuffo's logo
Filtri GridView in Asp.NET e C#

Filtri GridView in Asp.NET e C#

GridView è uno controllo server molto comodo e molto utlizzato per rappresentare in maniera strutturata i dati presi da un database.

Hanno parecchie proprietà, ma gli manca la possibilità di filtrare i dati.

Oggi vi spiegao come ho fatto io per filtrare i dati attarverso una DropDownList.

In sostanza ho due DDL che fanno da filtro su una GV.

Tutti e tre prendono i dati da un ObjectDataSource e da metodi personalizzati.

Prima di tutto io ho aggiunto un nuovo progetto alla mia soluzione in modo da crare le varie classi/metodi personalizzati per interfacciarli al db, l'ho chiamato TNWB.

Qua dentro ho creato questa classe:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;

namespace TNWDB
{
public class Connection
{
private static SqlConnection conn = new SqlConnection("Data Source=10.0.5.131;Initial Catalog=TNW;Persist Security Info=True;User ID=user;Password=pass");

public static SqlConnection getConnection()
{
return conn;
}
}
}

Questa classe si occupa solo di istanziare la connessione.

Mattepuffo's logo
Cancellare file con PHP

Cancellare file con PHP

Per cancellare dei file con PHP basterebbe la funzione unlink().

Facciamo allora dierttamente un passo e vediamo come sia possibile cancellare più insieme.

Supponiamo di avere una pagina che carica tutte le immagini di una determinata cartella.

Nel link postato possiamo vedere come fare a caricare automaticamente le immagini.

Partendo da quello. e apportando qualche modifica, arriviamo a una cosa del genere:

<table>
    <form action="" method="post" enctype="multipart/form-data" name="form_elimina">
        <tr>
            <td>
            </td>
            <td>
                <input type="submit" value="Elimina" name="elimina_img" />
            </td>
        </tr>
        <?php
        $dirname = "../gallery";
        $images = scandir($dirname);
        sort($images);
        foreach ($images as $file) {
            if ((substr($file, -5) == ".jpeg") || (substr($file, -4) == ".jpg") || (substr($file, -5) == ".JPEG") || (substr($file, -4) == ".JPG") || (substr($file, -4) == ".png")) {
                echo <<<HTML
<tr>
<td>
<input type="checkbox" name="check[]" value="$file" />
</td>
<td>
<img src="../gallery/$file" alt="" oncontextmenu="return false;" style="border: 1px solid black;" />
</td>
</tr>
HTML;
            }
        }
        ?>
    </form>
</table>

Abbiamo intabellato la pagina e aggiunto un form e una checkbox.

Mattepuffo's logo
Riempire DropDownList da SQL

Riempire DropDownList da SQL

Sulla scia dell'articolo di questo, in cui spiego come riempire una JComboBox cone dati presi da db, ho deciso di scrivere una guida per la "gemella" DropDownList di Asp.NET.

Tenendo in considerazione che qua come db uso SQL Server e come linguaggio il C#.

Lo scenario però è lo stesso, quindi dategli una letta.

Riassumendo voglio rimepire la DDL con dati presi dalla tabella autori che ha solo due campi:

  • author_id (int)
  • author_name (string)

DropDownList è uno dei controll Web più utilizzati.

Da Visual Studio è facile riempirli, ma preferisco usare il code-behind.

La procedura però è molto più veloce in quanto il framework mette a disposizione i metodi per scegliere il valore della DDL e cosa viene rappresentato.

Prima di tutto aggiungiamo una DDL alla pagina:

<asp:DropDownList ID="ddlAuthor" runat="server">
</asp:DropDownList>

Sulla pagina non faremo nient'altro, quindi spostiamoci nel code-behind.

Mattepuffo's logo
Sostituire valori GridView e DropDownList con voci Web.config

Sostituire valori GridView e DropDownList con voci Web.config

Lo scenario è questo: ho una GridView e una DropDownList che prendo dei valori da una tabella che ha solo valori numerici (2, 4, 6, ecc), dove ogni valore corrisponde a uno stato (pausa, da trasferire, ecc).

Gli stati non salvati da nessuna parte e io devo rappresentare gli stati al posto del valore perchè ovviamente più leggibili.

Ovviamente non posso modificare il database (sarebbe stato troppo facile).

I modi sono:

  • usare una query che ogni volta trasforma il numero in stato
  • cambiare i valori prendendoli da quelli impostati a mano nel Web.config

La prima strada è più facile ma ha degli svantaggi: se vengono cambiati gli stati devi cambiare la query; inoltre la query è anche più lenta.

Quindi ho proceduto col secondo metodo, e vi spigherò come ho fatto.

Prima di tutto dobbiamo aggiungere i nostri valori nel Web.config (il file di configurazione dei siti Asp.NET):

<appSettings>
<add key="0" value="DA PROCESSARE"/>
<add key="1" value="1 NON LO SO"/>
<add key="2" value="TRASFERITO"/>
<add key="3" value="ERRORE"/>
<add key="4" value="TRASFERITO"/>
<add key="6" value="6 NON LO SO"/>
<add key="7" value="7 NON LO SO"/>
<add key="30" value="PAUSA"/>
</appSettings>

Qui decidiamo ogni numero a che stato corrisponde.