sabato 29 novembre 2014

Creazione del device (DirectX): si inizia brancolando nel buio...

Dichiariamo un device.

    class MioForm:Form
    {
        private Device dispositivo=null;

        static void Main()
        {
            MioForm frm = new MioForm();
            Application.Run(frm);

        }
        private void InitializeComponent()
        {
            this.SuspendLayout();
            // 
            // MioForm
            // 
            this.ClientSize = new System.Drawing.Size(284, 261);
            this.Name = "MioForm";
            this.Load += new System.EventHandler(this.MioForm_Load);
            this.ResumeLayout(false);

        }

        private void MioForm_Load(object sender, EventArgs e)
        {

        }
    }
}
Ora dovrei creare un metodo InitGraphics.
        void initGraphics()
        {
            PresentParameters pp = new PresentParameters();
            pp.Windowed = true;
            pp.SwapEffect = SwapEffect.Discard;

            dispositivo = new Device(0,DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing, pp);
        }
In questo metodo viene creato il dispositivo. Per la creazione del dispositivo, è necessario inserire alcuni parametri, fra i quali PresentParameters, che viene quindi modificato prima della creazione.

Non so ancora niente sul significato di queste cose, che approfondirò successivamente.

Obiettivo: studiare i parametri della creazione del device.
Cosa rappresentano i parametri del costruttore del device?
Dunque... Inizio a parlare per tentativi, mettendo a punto quel poco che ho capito in attesa di chiarificazione (in omaggio al principio che quando i bambini iniziano a parlare non studiano l'analisi logica e grammaticale).
Il primo parametro è un numero che fa riferimento al device fisico. E' uno in meno del numero dei devices.
Il secondo parametro è il tipo di device, che può essere hardware o software (arabo puro... almeno per il momento)
Il terzo parametro identifica la finestra da collegare al device, che in questo caso è this nel senso che è il qui presente form
Il quarto parametro è il tipo di comportamento delle Flags (per me al momento è arabo antico purissimo... ma non disperiamo)
Il quinto parametro sono i parametri di presentazione che abbiamo definito poco fa.


Bene.
Dunque mi pare di intravvedere una qualche logica pur nella nebulosità della situazione.
Prima si identifica questo fantomatico dispositivo fisico, quindi si specifica il tipo di dispositivo (non fisico? Virtuale?...) che si vuole e si fa il collegamento del dispositivo alla finestra.
Successivamente si definiscono le flags (?) e i parametri di presentazione (?).

Ho detto sicuramente un sacco di scemenze, ma ogni cultura inizia dalla scemenza, in fondo...

venerdì 28 novembre 2014

Visualizzazione di percentuali sugli istogrammi in pila 100% in Excel.

Per far figurare le percentuali in un istogramma in pila su Excel.

Età > 65 641 727 636 694 635 483  
Età <=65 99 109 104 109 151 54  
Queste sono le righe di Excel, riga 3 e riga 4, per le quali ho costruito, prendendone i dati, due istogrammi in pila, uno con valori assoluti e uno in percentuale.
Voglio che le etichette dati facciano figurare non i valori assoluti ma i valori in percentuale.
Dunque costruisco l'istogramma in pila partendo da valori in percentuale, e non da questi qui che invece sono i valori assoluti.

Predispongo due righe, e le chiamo Età > 65 percentuale e Età <=65 percentuale.

Nella cella corrispondente alla prima della riga con Età > 65 metto la formula: =B3/(B3+B4)*100

Nella cella corrispondente alla prima della riga con Età <=65 metto la formula: =B4/(B3+B4)*100

Trascino le formule su tutte le righe e ottengo:
Età > 65 percentuale 86,62162162 86,96172249 85,89951378 86,42590286 80,78880407 89,94413408  
Età <=65 percentuale 13,37837838 13,03827751 14,10048622 13,57409714 19,21119593 10,05586592  
Mostrando le etichette dati come "Valore" ottengo la rappresentazione, ovviamente, di queste percentuali.

giovedì 27 novembre 2014

Grafici di Excel: problemi di etichette.

L'altezza dei valori di un istogramma in Excel è troppo differente, perché ho valori di 30.000 accanto a valori di 100, per cui la visualizzazione dei valori più bassi è scarsissima.
Che fare?

Fare grafici separati, è l'unica cosa.
O dividere opportunamente i valori in modo da farli venire più vicini ai valori meno grandi.

Adesso studiamo del grafico come far apparire e sparire le etichette sugli assi dei grafici.

Cliccando lontano dal grafico, sull'area stessa del grafico, ottengo un menu "lungo", nel quale appare "Opzioni grafico".
Apro questo menu e apro la seconda scheda "Assi".
Ora, al posto dei numeri progressivi, voglio far apparire l'anno.
Come faccio?

Torno a quel menu "lungo", e vado su "Dati di origine", quindi su "Etichette asse categorie" si seleziona la parte del grafico che contiene i nomi da far apparire nelle ascisse.

lunedì 24 novembre 2014

Funzioni che scompongono un numero con gli slash e lettera finale

Convertire la lettera dopo lo slash in numero.
Ecco due funzioni:
Function sinistra(s As String) As Integer
    Dim numero As Integer
    If InStr(s, "/") <> 0 Then
        numero = InStr(s, "/") - 1
    Else
        numero = Len(s)
    End If
    sinistra = CInt(Left(s, numero))
End Function
Isola il numero precedente lo slash.

Per l'altra ci devo ragionare.
Se non c'è slash, InStr è pari a zero, e quindi il valore della funzione destra deve essere zero.
Eccola:
Function destra(s As String) As Integer
    If InStr(s, "/") <> 0 Then
        destra = Asc(Right(s, Len(s) - InStr(s, "/")))
    Else
        destra = 0
    End If
End Function

Funzione Asc(String) per ricavare il codice ascii di un carattere.

Adesso troviamo il modo di ricavare il codice ASCII di un carattere...

Facile:
Sub ascii()
    MsgBox Asc("A")
End Sub
che restituisce 65.
Ricordo che il codice ASCII esadecimale di A era 41H, che appunto corrisponde a 65 decimale.

domenica 23 novembre 2014

Codice per individuare il numero di protocollo più alto fra le varie occorrenze di una singola persona nel database.

...e ho buttato giù il codice per selezionare il numero di protocollo più alto fra le varie occorrenze di una stessa persona.
Ecco il foglio con un ipotetico numero di protocollo sulla colonna A:



Ed ecco il codice:
Sub main()
    Dim indirizzo As String
    Dim numero As Long
    Set c = Cells.Find("antonio cacchioni")
    If c Is Nothing = False Then
        indirizzo = c.Address
        Do
        Set c = Cells.FindNext(c)
        
        If Cells(c.Row, c.Column + 1).Formula = "56" And Cells(c.Row, c.Column - 1).Formula > numero _
            Then numero = Cells(c.Row, c.Column - 1).Formula
        Loop While c.Address <> indirizzo
    End If
    MsgBox numero
End Sub
Risultato:



Okay! Funziona!

Ripasso metodi Find e FindNext di un oggetto Range in Excel

Ecco... riprendo confidenza con i metodi Find e FindNext dell'oggetto Range.

Mi creo un foglio di lavoro con dei nomi di fantasia e delle età...



Ed ecco il codice:
Sub main()
    Dim indirizzo As String
    Set c = Cells.Find("antonio cacchioni")
    If c Is Nothing = False Then
        indirizzo = c.Address
        Do
        Set c = Cells.FindNext(c)
        c.Interior.Color = vbCyan
        Loop While c.Address <> indirizzo
    End If
End Sub
Il FindNext, una volta trovato l'ultimo indirizzo, ricomincia daccapo.
Per questo è importante interrompere il Loop quando l'indirizzo del range trovato coincide con l'indirizzo iniziale.

Ed ecco il codice eseguito, con la colorazione in celeste di tutte le occorrenze del nome prescelto:

martedì 18 novembre 2014

Risolto problema dell'amministrativo della ASL per i compensi orari, con il formato delle celle tipo "ora".

La formula che ho inserito nella cella "Compenso orario" è =F5*60, ossia moltiplica per 60 il valore contenuto nella cella F5.
Così, se in F5 ho 1.5 il risultato nella cella "Compenso orario" è 90.
Se in F5 ho 2, il risultato della cella "Compenso orario" è 120.

Lapalissiano!

Il problema è se il formato di F5 è formato ora e non generico

Ho conferito a F5 il formato "ora", e se inserisco 1:00, nella casella Compenso Orario ottengo adesso 2,50.
Perché?

Proviamo ancora con altri valori...

Con 2:00 ottengo 5,00.
Con 3:00 ottengo 7,50 (me l'aspettavo!)

Perché? Mi sembra ovvio che la cella Compenso Orario non moltiplichi 60 per 1, 2 o 3, ma per altri numeri.
Riconvertendo il formato di F5 con il numero scritto dentro, vediamo a cosa corrisponde quel numero in formato generico...

1:00 ---> 0,0416666666666667
2:00 ---> 0,0833333333333333
3:00 ---> 0,125
Googliamo con questi valori.


Nella cella in formato Ora è rappresentato il numero di ore, ma in realtà il valore della cella è pari al numero di giorni che entrano in quel numero di ore, ossia numero di ore / 24.
Quando si moltiplica dunque, nella cella Compenso Orario 60 per il valore della cella, non lo si moltiplica per il numero di ore rappresentato, ma per il numero di giorni compreso in quelle ore.
Per ottenere il valore reale, bisogna moltiplicare per 24 il prodotto di 60 per il valore della cella.

sabato 15 novembre 2014

OpenGL, cmake, primi passi.

Che accidenti è CMake?
L'ho scaricato e ora lo sto decomprimendo.

Per intanto mi vado a fumare una sigaretta...
Non so come manipolarlo avendo scaricato la versione compressa... Fammi un po' scaricare l'exe...

Bene. Adesso si sta installando, pare...

PATH too long???

Boh? Semmai ce lo installo io poi...

Ecco, installato col collegamento al desktop.
Ecco quello che mi appare, adesso:



...e vediamo come accidenti si usa!

venerdì 7 novembre 2014

Il programma di mio figlio Daniele

Daniele sta costruendo un programma in Java.
Ecco il codice:
package supercraftdemo;

import java.applet.*;

public class Component extends Applet implements runnable{
    private static final long serialVersionUID = 1L;
    private static int pixelSize = 2;
    public static Dimension size = new Dimension(700,560);
    public static Dimension pixel = new Dimension(size.width / pixelSize, size.height / pixelSize);
    
    public static String name = "supercraft";
    
    public static boolean isRunning = false;
    
    private image screen;
    
    public static Level level;
    
 public Component(){
     setPreferedSize(size);
     

 }

 public void start(){
  //definire oggetti
  level = new Level();
  
  //inizio loop del gioco
  isrunning = true;
  new trhead(this).start();
 }
 
 public void stop (){
  isRunning = false;
 }
 
 public static void main(String args []) {
               Component  component = new Component();
               
               JFrame = new JFrame();
}

giovedì 6 novembre 2014

Esercizio sui nomi dei campi in Excel con VBA

Codice per definire i nomi dei campi in Excel con VBA(esercizio):
Sub main()
Cells.Select
Selection.Interior.Color = vbWhite
On Error Resume Next
ActiveWorkbook.Names("mioCampo").Delete
num = 1 + Int(Rnd() * 10)
num2 = 1 + Int(Rnd() * 10)
ActiveWorkbook.Names.Add Name:="mioCampo", RefersTo:=Range(Cells(1, 1), Cells(num2, num))
Range("miocampo").Interior.Color = vbRed
Range("A1").Select
End Sub