Fixing Arduino Uno serial performance

Some of you might have noticed that Arduino becomes unresponsive or really slow to respond when it sends information using serial interface.

This can also lead to messages like “Serial port ‘/dev/ttyACM0’ not found.” when trying to upload new sketches to Arduino.

I noticed this years ago but never found a solution because I always somehow managed to get it working after many upload retries and I could not find any information regarding the problem.

So, yes, it was a firmware problem and you can fix it by flashing more recent firmware that can be found here.

And instructions on flashing it are here.

LED controller (with Arduino, RaspberryPi and WebSockets)

I haven’t posted here for a while so I figured I’d write about this little project I made some time ago.

I’ve had an aquarium for some time but it had no lights so it didn’t look that cool during the dark time of the day.

I had an old Arduino Uno lying around from times before RaspberryPi and it just so happens that Arduino has 5 PWM output pins and I only needed 3.

rjb_all

I connected a single RGB LED and a couple of white LED’s (which is enough to light a small aquarium properly) to the Arduino and made the program use serial connection to send and receive JSON formatted data.

276dbbe0a49111e280cd22000a9f18de_7

Then I connected Arduino (using USB) to my RaspberryPi that I use as a home server and wrote a Perl script that connects to Arduino’s serial port (using IO::Async::Stream).

IMG_20140118_214635

The Perl script creates a WebSocket server (using Net::Async::WebSocket::Server) that allows realtime control of LED’s and color modes from a web browser.

2014-01-19-111507_456x524_scrot

In the future I could tweak it a bit more and bring back the scripts that I used to switch on LED’s based on events from IM clients (Pidgin/Skype) or E-mail but at the moment I’m happy with it as it is.

Telefona kontaktu migrēšana ar Gammu

Pēc diviem ar pusi gadiem beidzot nobeidzās mans Nexus S viedtelefons.

Man ļoti patīk Nexus telefoni, tāpēc nākamais noteikti būs Nexus 5, kas vēl šobrīd nav pieejams. Kamēr gaidu, nācās tikt pie pagaidu aparāta. Savu veco telefonu jau sen atdevu māsai, tāpēc pirmo reizi nācās apmeklēt lombardu. Biju cerējis tikt pie kāda no tiem nekrāsainajiem tālruņiem, bet šķiet, ka tādi vairs nav pieejami. Izvēle krita par labu kaut kādam Samsung, kam cena zem 10 latiem. Var zvanīt, sūtīt SMS, lietot kā modinātāju.

Nexus lietoja Android operētājsistēmu, un kontaktus sinhronizēja ar Gmail. No turienes tos var eksportēt csv formātā. CSV failu atvēru ar LibreOffice, kontaktus ar vairākiem numuriem sadalīju atsevišķos kontaktos, nodzēsu liekos laukus, un uzrakstīju Perl skriptu, kas ar Text::Undiacritic noņem garumzīmes un mīkstinājuma zīmes (lai varētu lietot garākus vārdus), sakārto telefonu numuru formatējumu (noņem atstarpes, sakārto valsts kodus), un uzģenerē derīgu Gammu backup failu.

Visbeidzot izmantojot iepriekš pieminēto GPRS modemu, ar Gammu kontaktus ieimportēju SIM kartē. 2013-10-27-184937_1440x900_scrot

Ja vēl neesi pārgājis uz viedtelefonu, bet plāno to drīzumā darīt, iesaku iepazīties ar Gammu. Tas ir lielisks rīks telefona datu rezerves kopiju veidošanai (kontaktiem, SMS). Pārkopējot kontaktus uz SIM karti visdrīzāk tiks pazaudēta daļa datu, bet Gammu tos saglabās. 🙂

Building static binaries on Linux

Windows experience

Most people using Windows knows nothing about dependency hell.

It is because Windows comes with a lot of standard dynamic link libraries (dll files) out of the box. It also seems that they don’t change as much from version to version so there are less (just a guess) compatibility issues on different Windows versions. Or maybe they all are outdated and full of bugs. In any case, it is usually easy to move binaries around from computer to computer without any problems.

Linux experience

It is a whole different picture on Linux.

Even though there are some libraries that will most likely be on most Linux systems, lots of applications require additional libraries that are probably not installed by default. And even if it seems that you have all the necessary libraries there is a big chance that they won’t be compatible with your binary because those libraries tend to change a lot between different versions.

Most of the time it won’t be a problem because maintainers of each distribution solve this by giving users tools to install necessary dependencies built for each specific program.

But what should you do when you don’t have that much time to compile hundreds of libraries for each distribution, version and architecture you are targeting? Or you simply don’t have the necessary permissions to install required packages using your distribution’s package manager and you don’t want to go through dependency hell on a limited user.

Build it statically!

It of course has it’s pros and cons but depending on what you are trying to achieve this could ease your life.

“Static hell”

Unless you have a trivial application it won’t be as easy as adding “-static” to your compiler’s argument list.

You will probably have to specify some libraries that it should statically link against at compile time. And those libraries probably also require other static libraries. You get a whole different dependency hell.

And when you finally track down every library needed you find out that glibc is huge and will not play nice. 🙂 Yay!

Bifrost uClibc build environment

One way of solving this would be using uClibc chroot environment for architecture that works on most desktops, server and laptops out there.

I did try some other light glibc  alternatives and build environments but came to conclusion that uClibc is great and works. I found that there is a Linux distribution named “Bifrost” that uses uClibc. The creators of it provide build scripts and instructions to set up your own bifrost build i586 and x86_64 environment. I also made a fork of it on Github and use it from time to time.

Building almost anything using this environment makes building static binaries a piece of cake. And building it for i586 makes those binaries quite portable.

I haven’t tried building any GUI tools (why would I?) but I’ve successfully built applications like git, tmux, lighttpd, php, rtorrent, perl, python, etc.

Also at the time of writing this post, Bifrost doesn’t support ARM (I guess it is not the purpose of it) but that shouldn’t be a problem because there are lots of articles and info on making uClibc build environments for ARM.

E-paraksta viedkaršu programmatūras uzstādīšana uz Linux

Iepriekš rakstīju par to cik slikti, par e-paraksta viedkaršu lietošanu, ir informēti Linux lietotāji.

Pievienoju pamācību loģiski domājošiem Linux lietotājiem, kuriem nav paniskas bailes no komandrindas.

Kas ir nepieciešams?

Viedkaršu lasīšanas iekārta

Saprotams, ka vajadzīga iekārta, kurā ievietot viedkarti. Iesaku izvēlēties iekārtas, kurām priekš Linux ir pieejami draiveri.

Kā jau minēju iepriekšējā rakstā – SCR3310 ir gana lēta un pārbaudīta iekārta.

IMG_20130829_145914

Pieslēdzam iekārtu datoram un lasām tālāk.

Viedkaršu lasītāja draiveris Linux kernelim

SCR3310 gadījumā nekādi papildus draiveri nebija jāinstalē, jo tie nāk komplektā ar pietiekoši jaunu kerneļa versiju. Kaut kur lasīju, ka senāk vajadzēja atjaunināt firmware, bet pašam ar to nav nācies saskarties.

Citām iekārtām varētu nākties uzinstalēt papildus draiverus un/vai firmware.

Programmatūra komunikācijai ar iekārtu

Pieļauju, ka šim mērķim pastāv dažādas aplikācijas, bet vispopulārākā ir “pcscd” (PC/SC Smart Card Daemon).

Uz Archlinux to var uzinstalēt palaižot:

Uz Debian bāzētām (Debian/Ubuntu/Mint/u.c.) sistēmām to var uzinstalēt palaižot:

Pēc instalācijas jāieslēdz pcscd serviss. Uz Archlinux jāpalaiž:

Uz Debian bāzētām sistēmām tam vajadzētu notikt automātiski, bet ja tā nenotiek, tad jāpalaiž:

 

Šobrīd ieliekot e-paraksta viedkarti iekārtā, un palaižot komandu

vajadzētu parādīties informācijai par ievietoto karti. Ja parādīts tikai sarkans uzraksts “waiting for the first reader”, vai “waiting for the card”, tad attiecīgi vai nu nestrādā iekārta, vai arī Tu nepareizi esi ievietojis viedkarti. 🙂

Middleware bibliotēka konkrētajam viedkaršu modelim

Ar to vien, ka spējam noteikt kāda viedkarte ievietota iekārtā – nepietiks. Pcscd nav informācija par to kā pilnvērtīgi komunicēt ar Latvijā izsniegto e-paraksta viedkarti, tāpēc nepieciešams uzstādīt viedkaršu ražotāja bibliotēku.

Latvijā lieto Luxtrust ražotās viedkartes, tāpēc jādodas uz viņu mājaslapu un lejupielāžu sadaļā jāmeklē Middleware programmatūra Linux sistēmām.

Brīdī, kad šo rakstu, Luxtrust lapā ir pieejamas “.deb” pakas Ubuntu distribūcijai, 32 bitu un 64 bitu versijām.

Piedāvātās pakas visdrīzāk būs derīgas arī citās, uz Debian bāzētās distribūcijās (Debian/Mint/u.c.).

Ubuntu/Debian lietotājiem jāaizvieto 64bit ar 32bit, ja tiek lietota 32 bitu sistēma, un jāizpilda:

Archlinux lietotājiem esmu izveidojis luxtrust-middleware PKGBUILD failu, kas ir pieejams AUR sistēmā. Ja lieto Archlinux un ir uzinstalēts yaourt palīgrīks, tad to var uzinstalēt izpildot:

Es gan neizpētīju vai Luxtrust bibliotēkas nav atkarīgas no citām bibliotēkām, tāpēc, ja kaut kas nestrādā, lūdzu paziņot komentāros.

Citu distribūciju lietotājiem vai nu jāizpēta iespējas konvertēt esošās .deb pakas uz jūsu distribūcijas paku formātu, vai arī pakas saturs manuāli jāizpako, un jāiekopē attiecīgajās sistēmas mapēs (ko es noteikti nerekomendēju darīt).

Kad middleware programmatūra uzinstalēta, vajadzētu varēt atvērt PIN koda mainīšanas aplikāciju, ko var atvērt izpildot:

Ja aplikācija atveras un viss strādā – lieliski, varam turpināt. Ja parādās kļūdu paziņojumi – lūdzu ziņot komentāros. 🙂

PMLP, vai LVRTC iepriekš piedāvātajās middleware pakās tika lietoti citi failu nosaukumi. Tā kā tie ir statiski ierakstīti e-paraksta Java aplikācijās, jāizveido symbolic link, savādāk saņemsim kļūdas paziņojumu.

Pārlūkprogrammas konfigurācija

Vēlāk izveidošu pamācību Chromium lietotājiem, bet šobrīd pieejama informācija par uzstādīšanu uz Firefox.

seciba

Atveram Firefox Preferences > Advanced > Certificates > Security devices > Load.

Nosaukumu ierakstam pēc izvēles, bet pie Module filename norādām:

Pēc OK pogas nospiešanas, sarakstā būtu jāparādās jaunajai iekārtai. To izvēloties, būtu jāaktivizējas Log in pogai. Uz tās uzspiežot vajadzētu parādīties PIN koda pieprasījuma logam. Ja tā ir, tad viss kārtībā.

Turpmāk lietojot e-parastu, var gadīties, ka pēc iekārtas, vai viedkartes atvienošanas un atkārtotas pieslēgšanas, var nākties pārstartēt interneta pārlūkprogrammu.

LVRTC un/vai Latvijas pasta sertifikāti

Pēdējais solis ir sertifikātu pievienošana. Kā to izdarīt uz Chromium – aprakstīšu vēlāk. Šobrīd pieejama pamācība Firefox pārlūkprogrammai.

Dodamies uz eparaksta mājas lapu, un ielādējam nepieciešamos sertifikātus.

Firefox vajadzētu automātiski piedāvāt uzinstalēt sertifikātus, bet ja tā nenotiek, saglabājam tos datorā un pievienojam manuāli, atverot  Firefox Preferences > Advanced > Certificates > View Certificates logu.

Nobeigumā

Tagad visam vajadzētu strādāt. Tikai jāatceras, ka pēc iekārtas pievienošanas, visdrīzāk, nāksies pārstartēt pārlūkprogrammu, kā arī labākais veids kā noskaidrot, vai viedkarte kārtīgi ievietota iekārtā, ir izpildot komandu pcsc_scan.

Gaidīšu jūsu komentārus un ieteikumus. 🙂

Labais un sliktais Latvijas e-paraksta sistēmā

Manuprāt, lielākā daļa piekritīs, ka e-paraksta ideja – iespēja elektroniski parakstīt dokumentus, iesniegt tos dažādām iestādēm nosūtot e-pastu , un parakstus pārbaudīt elektroniski –  ir ļoti laba. Vairs nekāda dirnēšana garās rindās, nav jāmaksā notāram par paraksta apstiprināšanu, kā arī dokumentus var iesniegt no jebkuras vietas, kur pieejams interneta pieslēgums.

Izklausās ļoti labi. Gandrīz pārāk labi.

Šobrīd reāli Latvijā darbojas 3 dažādi e-paraksti, no kuriem tikai 2 varētu būt gana droši, un tikai vienu var iegūt komplektā nesaņemot to nedrošo, turklāt tas nav pieejams kuram katram.

E-paraksta veidi

  • Latvijas pasta e-paraksts uzņēmumiem – EME (viedkarte)
  • ID kartes, kuras var lietot pases vietā, ceļojot pa ES – eID (viedkarte)
  • Virtuālais e-parasts (nāk komplektā ar eID, turklāt no tā nav iespējams atteikties)

EME

Sākumā tika ieviests EME. Šķiet, ka tas neguva pietiekoši lielu atsaucību, un pēc eID iznākšanas pie EME var pieteikties tikai uzņēmumi.

Neskatoties uz to, ka EME var pieteikt tikai caur uzņēmumu, tas vizuāli izskatās ļoti nenopietni.

IMG_20130828_121515

eID

ID kartes, kuras izsniedz PMLP, ir Latvijā oficiāli atzīts dokuments. To var lietot ceļošanai pa ES, un, ja nemaldos, to var izmantot kā atgriešanās atļauju, ja tiek pazaudēta pase (ārpus ES).

Tajās ir RFID čips (tāds pats kāds jaunajās pasēs), kā arī e-paraksta viedkarte.

20120401-personas-aplieciba-eid-paraugs

Virtuālais e-paraksts

Izstrādāts ķeksīša pēc?

eparaksts_preview

Virtuālais e-paraksts ļauj parakstīt dokumentus portālā eparaksts.lv un ir drošs tikai tāpēc, ka tā ir ierakstīts likumā. 🙂 Realitātē tas ir pakļauts MITM uzbrukuma riskiem un tieši šī iemesla dēļ ar virtuālo e-parakstu parakstītus dokumentus nepieņem praktiski neviena nopietnāka iestāde.

Varētu vaicāt – kāpēc tad tika izveidots virtuālais e-paraksts?

Es varu tikai minēt, ka tas tika izveidots tāpēc, ka eID un EME lietošana ir gana sarežģīta, un lietošanas instrukcijas ir tik ļoti nepilnīgas, ka gadījumā, ja nebūtu izveidots virtuālais e-paraksts, tiktu sacelta liela jezga par kārtējo, ne līdz galam novesto e-paraksta risinājumu.

Potenciālās un reālās problēmas

Informācija par e-paraksta lietošanu

Sākumā šķiet, ka eparaksts.lv mājas lapa ir ļoti pārskatāma un labi strukturēta, bet brīdī, kad mēģini sameklēt sev nepieciešamo informāciju, rodas sajūta, ka pie sistēmas strādājuši pirmklasnieki. Informācija daudzās lapās dublējas, bet dažas lietas vienkārši nav iespējams sameklēt. Daļu tehniskās informācijas man bija vieglāk sameklēt Igaunijas e-paraksta mājas lapā, jo tā ir labāk strukturēta un informācija ir pilnīgāka.

OSX un Linux lietotājiem

Ja OSX (Apple) lietotājiem ir pieejama vismaz kaut kāda nepilnīga un greiza informācija par e-paraksta viedkaršu lietošanu, tad Linux lietotājiem pasaka, ka eparaksts.lv neatbalsta Linux operētājsistēmu, un kaut arī ražotājs (kas gan nekur nav norādīts) apgalvo, ka Linux ir atbalstīts, viņi par to neko nezin un nevēlas zināt.

Vairāk informāciju izdevās sameklēt pēc tam, kad vienā no PDF dokumentiem atradu karšu ražotāja nosaukumu, un tālāk jau palīdzēja Google.

Eparaksts.lv foruma administratori

E-paraksta mājas lapā ir arī forums, kurā ikviens var uzdot  jautājumus.

Vecākos foruma ierakstos var novērot, ka foruma administratori uz sev nepatīkamiem jautājumiem cenšas atbildēt ar: “mēs par to neesam atbildīgi, ejiet pie PMLP”. Turklāt, palasot šīs tēmas, var secināt, ka pievienotās saites uz PMLP lapu vairākas reizes palikušas nederīgas. (Kāda velna pēc PMLP lapai tik bieži maina linku struktūru?) [123]

Ja sākumā eparaksts.lv foruma administrācija centās novelt vainu uz PMLP, tad ar jauno e-parakstu, kas būtībā ir identisks vecajam (+ virtuālais e-paraksts), tiek piekopta vilcināšanās stratēģija. [1]

Jaunākos ierakstos foruma administratori tēmās, kas saistītas ar OSX un Linux instalācijām, paprasa, kuru no e-paraksta veidiem jautājuma uzdevējs ir domājis, tādejādi vilcinot laiku, droši vien cerībā, ka jautājuma uzdevējs vairs neatgriezīsies. (Neviens lietotājs nepiesauktu operētājsistēmu, ja mēģinātu lietot virtuālo e-parakstu. Un pat ja piesauktu, priekš kam lieki tērēt cilvēku laiku? Uzreiz būtu uzrakstījuši, ka no Linux un OSX “ne bū, ne bē”, un lieta darīta.)

Mistiskie Latvija.lv paziņojumi

Mēģinot ar EME ielogoties portālā latvija.lv, parādās paziņojums, ka ar Firefox un Opera pārlūkiem nav iespējams ielogoties. [1] Kas tās par muļķībām?

2013-09-12-154407_852x255_scrot

Es vēlāk atšifrēju, ka tas paziņojums visdrīzāk ir domāts Windows lietotājiem, kuriem IE un Chrome pārlūki lieto Windows iebūvēto sertifikātu sistēmu, bet Firefox un Opera ir savas sistēmas, kas oficiāli netiek atbalstītas.

Tās tiešām izrādījās muļķības, jo beigu beigās man sanāca ielogoties no Firefox un Chrome gan uz Linux, gan uz OSX.

Es noteikti kādā no nākamajiem rakstiem pievienošu pamācību kā lietot e-parakstu OSX un Linux vidē.

E-paraksta standarts

E-paraksta dokumentiem ir savs standarts. Atvērts standarts. Atvērts standarts, kura dokumentācija hostējās Microsoft mājas lapā, bet saites uz tiem ir nomirušas.

…pag, tad ir open source, vai nav?

Izmeklējoties pa Google, pie dokumentiem var tikt caur lietuviešu adresēm, jo izskatās, ka Latvija mēģina Lietuvai piedāvāt tādu pašu standartu.

E-paraksta programmatūra

Šobrīd pieejamā e-paraksta programmatūra ir rakstīta programmēšanas valodā Java.

sign

Labi, Java nav tā ātrākā, vai drošākā, bet vismaz būtu jādarbojas uz visām operētājsistēmām, vai ne?

Kind of…

Darbinot pārlūkprogrammu debug režīmā ievēroju, ka uz Linux eparaksta appleti meklē neeksistējošas bibliotēkas. Nezinu kāpēc tā, bet to izdevās atrisināt izveidojot symlinku uz ražotāja bibliotēku. Šķiet, ka tas tāpēc, ka PMLP piedāvātajās pakās bibliotēkām ir citi nosaukumi. Diez kāpēc tā? Vai tur ir kādi papildus pārsteigumi? 😀

Lejupielādei ir pieejama arī offline lietošanai paredzēta e-paraksta aplikācija (joprojām Java).euso

Tajā atverot jaunu dokumentu izlec dažādas izstrādātāja reklāmas. Es ceru, ka par to izstrādātājs valstij iedeva nelielu atlaidi. 🙂

spam1 spam2spam3

Fun fact: Ideja par vēlēšanām internetā

Manuprāt, ja šobrīd vēlēšanas notiktu internetā, tad vai nu tajās caur internetu nobalsotu labi ja 0.1% vēlētāju (ja viedkaršu lietošana būtu obligāta), vai arī ļoti ticams, ka vēlēšanu rezultāti būtu sagrozīti (virtuālā e-paraksta potenciālo ievainojamību dēļ).

Fun fact: E-paraksta time stamp serveri darbina IIS

Man nav nekādu iebildumu pret Microsoft (ir gan) un kompilētu kodu, bet pārāk bieži ir redzētas problēmas ar caurumainu, nepārskatāmu bināru blāķi, ko beigās nav iespējams izlabot, jo ražotājs, protams, nav iedevis izejas kodu. Protams, tā nav problēma, ja Tev ļoti patīk darboties asemblerī. 🙂

Es ļoti, ļoti ceru, ka tuvākajā laikā netiks atrasta kāda Windows vai IIS ievainojamība, kas ļautu bojāt time stamp servera darbību.

Fun fact: Caurums e-paraksta forumā?

Apskatot foruma arhīvu, pēdējā lapā atradu ko interesantu.

2013-09-12-182941_701x441_scrot

Vai esmu vienīgais, kurš to pamanījis? Un ja ir šāds caurums, cik liela iespējamība, ka pārējā sistēma ir droša? 🙂

Problēmu risinājumi un pozitīvais

Es ieteiktu LVRTC darbiniekiem pakonsultēties ar zinošākiem Linux un OSX lietotājiem/administratoriem, lai izveidotu jaunu, derīgu pamācību, kā uz Linux uzinstalēt nepieciešamās bibliotēkas un draiverus, kā arī nomainīt kļūdu paziņojumus, lai lietotāji netiktu maldināti. Tas nav tik sarežģīti, vai neiespējami.

Pozitīvais

Eparaksts.lv foruma lietotāji

Ar e-paraksta foruma lietotājiem nav tik traki kā ar administratoriem. Vairāki lietotāji ir ierakstījuši tīri labas pamācības. Ja vēl strādātu programmatūras lejupielādes saites, un tiktu norādīts, ka pastāv arī programmatūra, kas domāta 64 bitu sistēmām, būtu pavisam labi. 🙂

 

Offtopic: Viedkaršu lasītāju SCR3310 no ebay var pasūtīt pa ~10 latiem.

IMG_20130829_145914

Kad tomēr izdodas uzstādīt nepieciešamo programmatūru, lietot e-parakstu ir diezgan vienkārši un ērti.

Par tiem vecajiem draugiem.lv

Jau pāris nedēļas, atverot draugiem.lv, rādīja paziņojumu, ka jau 9 gadus esmu reģistrēts lietotājs.

Manā vecumā 9 gadi ir ilgs laiks. Tik ilgs, ka paliek pat nedaudz baisi.

draugiem-9

Apskatījis kas šajā laikā noticis manā profilā (pārlasīju vēstules, apskatīju foto galerijas), un sajutis kripatiņu nostaļģijas, beidzot izdzēsu profilu.

dzest

Laikā, kad reģistrējos draugiem.lv, tas bija kas jauns un nebijis. Neviens cits projekts nepiedāvāja tik vienkāršu veidu kā nepazaudēt kontaktus ar citiem cilvēkiem.

Šodien ir pieejami tik daudzi un dažādi sociālie portāli, tik daudzi un dažādi meklēšanas rīki, ka digitālā socializēšanās paliek apgrūtinoša.

Vēloties to atvieglot mēs atsakāmies no neērtākām, lēnāk progresējošām sistēmām, un manā gadījumā tā bija draugiem.lv.

Paldies draugiem.lv veidotājiem par sistēmas uzturēšanu visus šos gadus! 🙂

Making a bridge between Skype and XMPP chats

Some people tried to avoid Skype (and Facebook, Gmail, etc.) long before Snowden’s leaks, but most never cared and still don’t. And when you are the only fool abandoning Skype, you don’t really have anyone online to communicate with. Even if it’s only for chit chat and sharing your 9gag links.

So how do you make the move less painful?

You create a bridge between Skype and XMPP!

Relay in action
Relay in action

I made a small Python script that sends messages between XMPP and Skype chats.

At the moment it uses Skype4py and python’s XMPP library to act as a client. It would be cooler if Jabber’s part would get integrated in the XMPP server itself, thus allowing to simulate Skype users as real XMPP users. But I probably won’t do it because it takes too much effort and it already works the way it is.

Yes, it leaks stuff to Skype, so this should only be used for more or less public chats.

After I clean up the code a bit, I’ll put it on Github.

P.S. And making these bridges actually encourage more users to migrate to your XMPP server.

Auto-uploader v4

Uploader v4 is out and it is miles ahead of v3 in terms of stability, ease of setup and ease of use.

Even though I released it a few months ago, there were some things I wanted to add and test before I announce it to the public. It now performs better than I expected so I figured I should write about it here.

The new start/stop/status script.
The new start/stop/status script in action.

Setup

Statically compiled – no need for compiling

The time it takes to do the initial setup has been reduced a lot. There is no need to install any dependencies anymore because Uploader is now available as a statically compiled i686 binary that should run on most Linux servers.

I also made statically compiled rTorrent (with the headless patch), tmux, lighttpd and other tools that are used with the uploader. You can use these versions to save some time going through dependency hell and compiling, or you can use your own binaries if you wish to. (Since statically compiled binaries might be of interest to some of you, especially in case of rTorrent, I’ll talk about this in a separate post. Sources are on my Github page.)

This is good news because it is possible to run Uploader on  shared seedboxes. So far I have tested it only on some shared boxes with SSH access but it should be possible to use it without ssh as long as there is some way to execute the binary.

Better structured, completely portable

In previous versions it took some time to change paths in every configuration file to make it work after moving it to other location. The new version uses relative paths and some cool scripts to make sure it runs no matter where you move it.

Just move “tuper4/” folder to a new location/server and run it without doing any manual changes. Yes, it is that simple.

Easy to migrate

If you are still using the previous version it is easy to migrate to v4 using the new migrate script. Just run a single command and your’e all done.

Automatic updating

V4 will receive critical updates automatically by default. This means that when a download source or some API changes and breaks some functionality, it will fix itself as soon as update is available.

Update status messages on the server during testing.
Update status messages on the server during testing.

Usability and features

Now, when deploying and updating is made easy I have had more time to focus on new features and usability improvements.

Uploader is now easier to use by novice users and at the same time more advanced features have been added for the more experienced users who need more control over how things work.

Features

Multiple functions were fixed and new features were added to the core of the Uploader. Among them are:

  • Easier to view and understand debugging messages;
  • Better dupe detection;
  • Smart IMDB title search. This allows automatic IMDB info and poster retrieval;
  • Fixed TVRage info lookup for TV shows;
  • Updated GiantBomb game info retrieval functions;
  • Better BBCode converter and image uploading functions to include screenshots and other images in the description;
  • Fixed RAR and ZIP extraction functions that allow automatic creation of new unpacked releases.
  • Better handling of unicode, messed up encoding and ascii art.
Ascii art removal test
Ascii art removal test

 

Some of the non-core improvements:

  • Added new debugging tool called “logstream” that uses websockets to show realtime message output of the Uploader. It also shows process groups and allows to view output of each single task;
  • Modified browser plugin to use websockets to show realtime status of the task being run;
  • New version of web panel is being worked on;
  • New script to easily start, stop and see the status of the Uploader and all the related processes (rTorrents, lighttpd).
Logstream output showing task history.
Logstream output showing task history.

Better support

Making it easier to set up and update gives more time for supporting users and helping them find answers to their questions.

Also wiki and forum has improved and it is easier to find answers than it was before.

Music release info search results for Waffles upload form.
Music release info search results for Waffles upload form.

Existing users

And as it has always been, existing users still get the access to the latest version and it probably will stay this way in the future.

 

Summary

As years have passed, Uploader is still being developed and version 4 is a big step forward. It is completely different experience to how it was couple years ago. Making these changes makes it better for you, saves more time for me and it also means that it costs less. So, when you need the ultimate tool to automate it, you know where to look. 🙂

 

 

Solving spam problems without using captcha

Some of you know that automated spam bots for the web can be pain in the ass.

And while there are many ways to deal with this problem, most of them complicate things for the regular user and are not hacky enough to satisfy me. 🙂 For example captchas, math problem solving, etc. mostly work fine but they also scare away some of the users. There are also some paid tools (Akismet?) that helps dealing with spam but it doesn’t work on all spam.

I will share information on how I stop almost all of the automated spam messages to my WordPress blog without complicating things for the user.

 

Knowing limitations of HTTP protocol libraries and “exploiting” them

I have been writing a lot of scripts that automate GET’ing and POST’ing things to the web. There are many libraries that help doing it and one of the most popular ones (if not the most popular) is Curl.

While Curl is great, it still lacks some features, like building a zero length multipart POST data file upload part. Basically it can’t simulate file upload field, that has no file selected for uploading. And since many spam bots use Curl and similar libraries, this can be used to identify real browser and a script.

Example usage in PHP:

Not just Curl

I haven’t used Curl for a year now because I switched to Perl’s LWP. And it has the same problem. I solved it by making my own function for building the multipart form data and it can simulate the behavior but it doesn’t happen by default.

And while in case of LWP it was rather simple, doing it in Curl (used in PHP) would probably require recompiling the Curl library and then recompiling the module for the programming language that is using that library.

 

Changing field names

Another trick I use is changing field names and adding additional ones that are meant to be left empty.

This method also seems to catch part of spam messages.

 

From the user point of view

User obviously doesn’t see those extra fields because they get hidden using CSS. The comment form looks like any other standard comment form.

 2013-04-12-125208_1440x900_scrot

Conclusion

I have been using these techniques for about a year now and haven’t had any spam problems since then. Also I have a huge log file with spam that was caught using these methods. This really does work. 🙂

Of course it won’t help in case of directly targeted spam but in that case captchas won’t help either.

And I understand that writing about this will probably contribute to fixing Curl and other libraries and eventually making this protection method useless. Well, at least they will finally fix those libraries! 😀