Tuesday, December 15, 2015

Wordpress Download Monitor - File di 0Kb

Dopo l'ultimo aggiornamento del plugin Wordpress Download Monitor sul sito, tutti i downloads apparivano con dimensioni 0Kb e il file scaricato era effettivamente "vuoto".

Ho provato ad applicare tutte le soluzioni trovate in giro: dal cambiare i permessi a fare delle modifiche manuali al plugin. Nessuna delle soluzioni trovate in giro funzionava.

Mi sono accorto che nel pannello di controllo dopo aver premuto "edit" su un download e quindi averlo salvato (senza effettivamente fare nessuna modifica!), il download come per magia tornava a funzionare su quel singolo file! Fare questa operazione su tutti i file era una cosa davvero assurda. Così la prima cosa che ho fatto è stata controllare cosa cambiava al file dopo aver premuto "salva": ho controllato il file via FTP: i permessi rimanevano gli stessi. Rimaneva da controllare cosa accadeva nel database MySQL e ho trovato proprio li la soluzione: nella tabella wp_download_monitor_file_meta venivano tolti tutti i meta-tag associati al file (c'erano soltanto meta tag "filesize" che riportavano la dimensione del file) e veniva aggiunto per il file in questione un metatag "force" con valore "0". Dal momento che avrei dovuto eseguire questa operazione per ogni download_id, e dato che i download_id già c'erano (ma con meta-tag inutilizzati) ho eseguito semplicemente una query di aggiornamento:

UPDATE `wp_download_monitor_file_meta` SET `meta_name`="force",`meta_value`="0"

Dopo aver eseguito questa query tutti i download hanno ripreso a funzionare correttamente.





Friday, June 15, 2012

La sindrome di GUNDAM


In tanti fanno questa domanda: Cos'è la sindrome di Gundam? Perchè spesso in molti forum di robotica amatoriale si fa uso di questo termine. Questo articolo ovviamente non ha assolutamente nulla di tecnico, anzi sarebbe proprio da cancellare... ma ne approfitto per farci 4 risate e per tirare fuori un capitolo di storia della robotica, scritto anni fa da persone che ammiro e che seguo da una vita.

La definizione del termine ovviamente non è la mia e mi permetto di riportarla qui solo per il semplice motivo che periodicamente la pagina originale scompare e mi ritrovo con alcune richieste di informazioni. L'ideatore della definizione purtroppo mi è sconosciuto, e riporto qui pari pari la definizione data tempo fa dal sito di Officinerobotiche (che attualmente mi risulta offline):

Viene definita Sindrome di Gundam quella sensazione di poter realizzare un qualcosa di reale e funzionante (tipicamente un robot) senza averne le competenze specifiche ma approfittando di alcune dritte che ti possono dare in rete. Questa è la definizione data dal suo inventore:
E' lo stato mentale in cui si trova il soggetto che vorrebbe realizzare qualcosa di superiore alle prorie capacita' di almeno due ordini di grandezza. Normalmente questo stato porta il soggetto a porre domande particolarmente insensate. Esempio:
Non ho esperienza di elettronica/informatica/meccanica e vorrei costruire un robot che faccia i salti mortali recitando le tabelline. Quanti led devo comprare? Ma sopratutto di che diametro?
Non rientra nella SdG invece la normale aspirazione a migliorarsi apprendendo nuove tecniche, esempio:
Non ho mai realizzato un PID ma vorrei provarci, quali libri/tutorial leggere?
I portatori di SdG raramente sono portatori sani, spesso invece contagiano altri soggetti potenzialmente "infettabili". Curiosamente in questo caso i due soggetti non collaborano in un progetto comune, ma litigano immediatamente "forkando" il progetto in due progetti completamente differenti ed ovviamente incompatibili.
Altri esempi:
Vorrei costruire un robot bipede che gira per casa, mi prende gli oggetti, corre, e posso controllarlo con il telecomando della mia playstation. Premetto che non so quasi niente di elettronica e di programmazione
Scusate vorrei che qualcuno mi aiutasse a partire da zero e costruire un robot please!!aiuto urgente grazie!!
vorrei un robot che vada in giro con i cingoli o ruote e ke lo possa radiocomandare e con un arma un po tipo robot arena. Io non so niente di come si costruisce un robot e vorrei imparare vi supplico rispondetemi o bisogno grazzie
I Nerd come me ben sanno chi sia "il signor" Gundam (anche se personalmente non sono appassionato di questa roba), in ogni caso se non lo sapete c'è sempre il buon caro vecchio Google.
In aggiunta alla definizione di officinerobotiche, ci tengo ad aggiungere alcuni "sintomi" che spesso si accompagnano agli individui affetti da tale malattia:
  • La richiesta di "dritte". "Dritta" è uno dei termini più cari ai malati in fase primordiale. Si chiedono semplicemente delle "dritte": cosa c'è di più lecito da chiedere? Quale termine più adatto? Voglio dire... Esiste google, esiste wikipedia, esistono tanti forum specializzati nei quali le risposte alle domande spesso ci sono già... Quindi che male c'è a chiedere una "dritta" ? Giusto così per tenere su il morale.
  • L'utilizzo di un linguaggio normalmente atipico ma tipico di questo ceto sociale di persone: sovrabbondanza di lettere K, assenza pressochè totale di lettere H, raddoppio delle lettere Z soprattutto sui "grazie" come per dare enfasi al fatto di essere persone educate, che sanno ringraZZiare.

Friday, December 16, 2011

Sold Out

ORbit16 board are finished. New boards will be manufactured after christimas holidays. In the meanwhile we're waiting your comments.

Friday, December 9, 2011

Tuesday, November 23, 2010

Using Joysticks from VB.NET

There are several ways for using joystick on VB.NET: APIs and DirectX. Here I'll show you the DirectX Method.

First, download DirectX SDK from Microsoft:
http://msdn.microsoft.com/en-us/directx/aa937788.aspx
and then install it.

Starts a new project on VB.NET and add a reference to DirectX:
Project -> Add reference.
Select Microsoft.DirectX.DirectInput from list in ".NET" tab:


First thing to do is obtain a device list, but VB.NET will throw an exception (Loader Lock). Deactivate Loader Lock exception from menu Debud -> Exceptions. Explode "Managed Debugging Assistant", find "Loader Lock" and uncheck the box "Generated":



Imports DirectInput name space at top of your program:


Add a timer (timer1) on your form and set "Enabled" property on true (we'll use it for joystick polling).

Add a textbox named txtDir
Add a textbox named txtButtons

The code is the following:

Imports Microsoft.DirectX.DirectInput

Public Class Form1

    Dim joystickDevice As Device

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        ' List of attached joysticks
        Dim gameControllerList As DeviceList = Manager.GetDevices(DeviceClass.GameControl, EnumDevicesFlags.AttachedOnly)

        ' There is one controller at least?
        If (gameControllerList.Count > 0) Then

            ' Select first joystick
            gameControllerList.MoveNext()
            ' Create an object instance
            Dim deviceInstance As DeviceInstance = gameControllerList.Current

            joystickDevice = New Device(deviceInstance.InstanceGuid)
            joystickDevice.SetCooperativeLevel(Me, CooperativeLevelFlags.Background Or CooperativeLevelFlags.NonExclusive)

        End If

        joystickDevice.SetDataFormat(DeviceDataFormat.Joystick)
        joystickDevice.Acquire()

        Timer1.Start()
        

    End Sub

    Private Sub joystickPolling()

        Try
            joystickDevice.Poll()
            Dim state As JoystickState = joystickDevice.CurrentJoystickState

            txtDir.Text = "X=" & state.X & " Y=" & state.Y & " Z=" & state.Z

            txtbuttons.Text = state.GetButtons(0) & " " & state.GetButtons(1)

        Catch ex As Exception

        End Try
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        joystickPolling()

    End Sub
End Class

state object will contain all informations you need. State.X is the X position of joystick (type state followed by dot and see the entire list of controls).

the GetButtons property of state object will give you the state of buttons. GetButtons give an array. 
Example: 

dim button1 as byte = state.GetButtons(0) ' retrieve first button state

if the value is 128, the button is pressed, if the value is 0 the button isn't pressed or doesn't exists 

Monday, November 8, 2010

Modem Siemens TC35 - Ignition

The modems Siemens TC35, TC35i, TC37 are mainly used for deliver/receive sms in embedded systems. Those modems requires a start sequence to power up. Let's take a look to datasheet:


VBatt+ is the main voltage on TC35 (on TC35i this is called only Batt+), located on pins 1-5 of the module. VDDLP is a secondary power source used for RTCC backup, located on pin 30. IGT is the ignition line, used to turn on the module, pin 15.

As you see from the diagrams, the module will no power up with only with VBatt+, but it needs a signal on IGT pin for at least 100mS at low level when you power up the main line. After the 100mS at low level, IGT line must go to High Impedance, but I've tried with a circuit that goes to high level instead High impedance without any damage (please try it at your own risk!).

The schematic is the following (thanks to P. Seminara of robotics-net.com):


WARNING! This schematic is only usable with a TC35 mounted on an adapter board that translates logic levels (5V <-> 3V)

When you power up the circuit (+5V), C1 will let pass some current (until it's fully charged). This current, through R1 will take T1 to saturation, closing collector with emitter and then on IGT line there is 0V. When C1 is fully charged (after about 150mS, RC constant of this circuit is of 147mS), T1 will be interdicted because C1 will stop the current flow and then the base of T1 will tied down by R2. 

Actually, T1 will be interdicted when Vbe falls under 0.7V

In this condition the circuit betwewn collector and emitter will open and the IGT goes to high level thanks R3 (pullup resistor).

On the oscilloscope we'll observe this behaviour:


The Cyan line is the main power, yellow is the IGniTion line. After power-up, the IGT line goes to low level for about 130mS (time for C1 charging) and then goes to high level. 

Downloads
(only for www.settorezero.com subscribers)

Thursday, November 4, 2010

How to control 16 leds with only 3 I/O

The idea is quite simple: using a shift register to drive a led matrix using only few I/O of a microcontroller. Here I'll show you a my idea on how to drive 16 leds using only 3 I/Os with a Latched Shift Register 74HC595:




The microcotroller is connected to this circuit using the lines I've named as CLOCK, DATA and LATCH. 

The 74HC595 has a shift register and a latch. Incoming data are sent into shift register  using pin 14 (DS, serial data in) and pin 11 (SH_CP, Shift register clock). When we've  finished to sent serial data, we must  transfer data from shift register to the latch pulling high the pin 12 (ST_CP, Storage clock). If pin 13 (OE, output enable) is pulled down, the output pins (Q0-Q7) will reflect the latch status. Pin 10 is the Master Reset, pulling it down will cause the reset of the shift register. Pin 9 is serial data out and is used to drive more 74HC595.

We must feed data on DATA line using CLOCK and keeping LATCH down. When we have finished to send data, LATCH line must be pulled high and data are transferred from shift register to latch and value is displayed on leds.  We must pull LATCH down before start a new transfer but leds will remain in actual state. This is possible because pin 13 (OE = output enabled) is always low and then outputs are always enabled.

In order to display a value on 16 leds, data must be multiplexed. Entire first row will be lighted from serial value 0001 1111 : remember that high nibble drives the columns, low nibble drives the rowss. Entire second row will be lighted sending value  0010 1111 . Second led of third row (row=3 column=2) will be lighted sending value 0010 0010 and so on. Using a latched shift register will prevent the ghosting effect on leds.

Here there is an article in italian language I've written about using a shift register 74LS164 with a picmicro microcontroller. The informations and some code are about the same for 74HC595. The only two difference are:


- on 74HC595 data are sent from MSB to LSB, then the first bit you send on data line will be the bit n°8
- after you've send data, you must enable and then disable latch.

I have successfully tested this circuit. I've written a very long article on how to use this circuit witch a picmicro microcontroller. Article is in italian language, you can find it  clicking here

There are some examples here on how to use one or more 74HC595 with Arduino.

Downloads

74HC595 datasheet