Tag Archive | ruby

Google Api Drive V3 internal server error 500 on export

Google API is a good swissknife on our hands. It works very well but sometimes it’s behavior maybe strange too. Today I was coding ruby and using the google-api-client gem. Initially I managed my app to work very well. Using an instance of Google::Apis::DriveV3::DriveService my app copies a template (Google Docs) document to a new document, replaces placeholders and then gets the document pdf data by the “export_file” method (aka files.export). After approximately one hour and hundred documents processed my app started to hang on the export_file method reporting about a Server Error.

Exception Occurred Server error. Message: Server error.
Status code 500.
Header #.
Body {
"error": {
"errors": [
{
"domain": "global",
"reason": "internalError",
"message": "Internal Error"
}
],
"code": 500,
"message": "Internal Error"
}
}
.
/home/someone/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/google-apis-core-0.4.2/lib/google/apis/core/http_command.rb:232:in check_status' /home/someone/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/google-apis-core-0.4.2/lib/google/apis/core/api_command.rb:136:incheck_status'
/home/someone/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/google-apis-core-0.4.2/lib/google/apis/core/http_command.rb:195:in process_response' /home/someone/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/google-apis-core-0.4.2/lib/google/apis/core/http_command.rb:311:inexecute_once'
/home/someone/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/google-apis-core-0.4.2/lib/google/apis/core/http_command.rb:114:in block (2 levels) in execute' /home/someone/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/retriable-3.1.2/lib/retriable.rb:61:inblock in retriable'
/home/someone/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/retriable-3.1.2/lib/retriable.rb:56:in times' /home/someone/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/retriable-3.1.2/lib/retriable.rb:56:inretriable'
/home/someone/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/google-apis-core-0.4.2/lib/google/apis/core/http_command.rb:111:in block in execute' /home/someone/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/retriable-3.1.2/lib/retriable.rb:61:inblock in retriable'
/home/someone/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/retriable-3.1.2/lib/retriable.rb:56:in times' /home/someone/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/retriable-3.1.2/lib/retriable.rb:56:inretriable'
/home/someone/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/google-apis-core-0.4.2/lib/google/apis/core/http_command.rb:102:in execute' /home/someone/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/google-apis-core-0.4.2/lib/google/apis/core/base_service.rb:377:inexecute_or_queue_command'
/home/someone/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/google-api-client-0.53.0/generated/google/apis/drive_v3/service.rb:1036:in `export_file'

I was sure that nothing changed on my code so I started to search about something similar: people seem to have encountered my same problem but no one can provide a solution and btw suspects concentrate on quotas, access tokens and acls. Someone suggest to retry. So I checked my quotas (Google Cloud Console), I managed to reset my token and prepared a loop cycle to retry with a sleep period of 900 seconds. Nothing changed and problem remains.
After sometime spent on looking at similar issues on internet I started to think that some kind of DDoS/IPS technology on Google is causing my problem. That kind of technology may act at any level on Google platform and return a proper error code maybe not always possible (different subsystems interaction) or desired (risk to reveal trigger events).
Initially I changed my ip address by using a different internet connection: problem remained.
Then I changed my template document (simply copied it to another folder) and everything starts to work again.

I hope my experience can help you. Google is a complex system (an ecosystem) and think at it like a software (same input – same output) maybe the right way to waste your time (like i did!).

ruby on rails on nokia N900

Yes, we can! ruby on rails works well on nokia n900.
Install ruby from maemo repository (dev).
Download and install rubygems (use –no-rdoc and –no-ri).

Rubygems creates only /usr/bin/gem1.8 so you should create a soft link like this: ln -s /usr/bin/gem1.8 /usr/bin/gem

Type gem install rails -V and wait.

Now you are ready to start your rails app on nokia n900!
Just run ruby script/server in your project folder. To create a project folder use rails my_app as usual.

Your server may not start if you miss libopenssl-ruby. In this case you get an error about net/https: apt-get install libopenssl-ruby.

Validazione Codice fiscale Partita IVA con Ruby / Ruby On Rails

Cercando di validare codice fiscale e partita iva con Ruby, sono capitato nel sito di Umberto Salsi, dove si parla della validazione di Partita Iva e Codice Fiscale.

Visto che l’implementazione in Ruby non era disponibile ne ho realizzata una che ho già inoltrato all’autore della pagina perchè possa aggiungerla all’elenco.

Nel frattempo comunque, le due classi che ho preparato sono disponibili per il download.

Il codice Ruby che ho realizzato per eseguire i check di validità su codice fiscale e partita iva non è corredato da alcuna garanzia, potrebbe causare la morte di migliaia di persone, l’incendio del vostro PC, il mutamento del vostro orientamento sessuale, ma in nessun caso potrete ritenermi responsabile. Usatelo a vostro rischio e pericolo! 🙂

Scarica la validazione Ruby di codice fiscale e partita iva

updated (16/11/2009) – nuova versione con licenza GPL inclusa, descrizione, eccezioni e qualche miglioria

L’utilizzo è molto banale e potete riutilizzare, modificare e redistribuire il codice a vostro piacimento per qualsiasi utilizzo.

Un banale esempio di utilizzo per il codice fiscale:

require 'codice_fiscale'
if CodiceFiscale.valid?('ILTU0C0D1C3FISCAL3')
puts 'il codice fiscale è valido!'
else
puts 'il codice fiscale non è valido!'
end

Un banale esempio di utilizzo per la partita iva:

require 'partita_iva'
if PartitaIva.valid?('02030405060')
puts 'la partita iva è valida!'
else
puts '
la partita iva non è valida!'
end

Sull’opportunità o meno di utilizzare la validazione, vi consiglio di leggere il capitolo “Miti, superstizioni e falsità” sul sito di Umberto Salsi a proposito della validazione del codice fiscale. A tal proposito riporto riassumendo il concetto: usate la validazione ma non sempre è attendibile, potrebbe dare dei falsi negativi, bloccando per esempio la registrazione di utenti legittimi. Viceversa gli utenti malintenzionati potrebbero fabbricarsi in pochi secondi un codice fiscale falso (ma corretto) attraverso uno dei tanti servizi online. La validazione del codice fiscale risulta quindi utile solamente se si vuole eseguire un controllo formale per evitare errori di battitura, ma è solamente controproducente se si cerca con questo mezzo di tener lontano qualcosa e/o qualcuno.

Per quanto riguarda la partita iva vale quanto detto a proposito del codice fiscale.
Tuttavia ho individuato un bel webservice per la validazione delle partita iva messo a disposizione dell’Unione Europea e denominato VIES VAT number validation. Il wsdl e maggiori informazioni sul servizio potete trovarle nelle Faq. Il servizio peraltro funziona, l’ho provato oggi, ed è pure gratuito e discretamente veloce. Interroga i database dei paesi dell’Unione quindi è in grado di fornire validazione anche per le altre partite iva europee. Va sottolineato che non si limita a fare la validazione formale, ma da quanto si apprende attraverso le Faq è anche in grado di verificare se la partita iva esiste realmente ed è attiva. Per alcuni paesi inoltre, fornendo la partita iva, oltre a verificare se esiste ed è disponibile, vengono forniti anche alcuni dati utili sull’azienda tra cui nome ed indirizzo (l’italia è ovviamente esclusa da questa chicca).

Se qualcuno è interessato può scaricare la ruby class for VIES VAT number validation che ho realizzato per un applicativo su base Rails. Per altri usi dovete chiaramente adattarla, ma fa il suo dovere. Ricordate di copiare i wsdl in locale, è una scelta preferibile.

Buona giornata!

Estendere Ruby con C

Capita a volte di aver bisogno di estendere Ruby con codice C.
I motivi principali riguardano le performance dell’applicativo e la comodità garantita da un linguaggio di basso livello come C.
Altre motivazioni possono riguardare la necessità di utilizzare con Ruby una libreria C non disponibile in Ruby.

Nel mio caso ho trovato estremamente utile, se non del tutto necessario, utilizzare C per eseguire operazioni di compressione/decompressione con l’algoritmo di Huffman, in special modo sentivo particolarmente la mancanza dei comodi puntatori C.

Dopo una breve ricerca ho trovato un buon tutorial in lingua inglese su rubyinside.com.
Seguendo il tutorial potrete compilare la vostra libreria in C e creare un modulo da utilizzare per estendere una classe Ruby.

Per completezza, ho trovato anche altri metodi per ottenere risultati similari, tra i quali Ruby Inline, Swig e DL. A mio parere però, nessuno di questi metodi ha la linearità e la semplicità del metodo offerto da `How to create a Ruby extension in C in under 5 minutes` di Peter Cooper.

A breve creerò un tutorial per questa utile funzionalità.

Ruby on Rails & Compressed Prototype

Hello! Today I’m wandering about a compressed version of prototype to use in my brand new ruby on rails application.
Initialy I didn’t understand why rails doesn’t provide a compressed version of prototype but after some googling I’ve found some usefull answers.

Concept is simply clear.

Why use a compressed/packed version of prototype if we can provide it to clients throught gzip compression with best results? There isn’t a valid reason.
So we need to provide a gzip compressed version of prototype.

Read More…

Rails è veloce, comodo, ma sarà anche sicuro?

Rails è sicuro? In quanti se lo saranno chiesto fino ad ora. Sicuramente la risposta è sì, ma come in ogni programma tutto dipende dallo sviluppatore. Php ad esempio di per se non implementa alcuna misura di sicurezza, ogni implementazione, dalla più piccola alla più complessa è richiesta direttamente all’utente.
Questo aspetto può comportare gravi rischi per chi non sa quello che fa, ma aiuta il professionista a concentrarsi a fondo sui dettagli, senza trascurare nulla.

Rails invece permette di creare sistemi di autenticazione e gestione dei permessi in tempi rapidissimi, con una velocità degna di una formula 1. Ma qual è lo scotto?

Read More…