Poznámky (de)kodéra

Nesouvislé fragmenty kódu

Issue tracker pomocí Trello

18.8.2013

U své malé android aplikace Kdo volal používám pro správu úkolů Trello. Časem jsem začal potřebovat i triviální Issue tracking system s možností integrace do stránky aplikace. Stránka aplikace je v Python-u a běží na appengine.google.com

Napadlo mě proč k tomu vlastně nepoužít stávající systém?

Celé to bylo překvapivě jednoduché. Potřebova jsem k tomu jen následující:

Nastavení boardu v Trello

Ze všeho nejdříve je dobré si rozmyslet jak karty evidovat, formátovat a taggovat. Já použil možnost označovat karty barevnými tagy (labels).  Nerozlišuji jednotlivé záznamy (cards) podle seznamu (list) ve kterém se nachází ale právě podle barevných tagů. Výhodou je, že mám ukončené karty v různých seznamech, tak aby to zapadalo do mého systému.

trello03trello01

Dalším krokem je vygenerování API klíče a získání identifikátoru správného board-u. Celý postup je sepsán na stránce Getting Started.

Zobrazení na webu

Samotné čtení a zobrazení na webu je pak triviální záležitost. Ukázka byla ořezána o mezikrok s cache a některé další nepodstatné části kódu.

# *-* coding: UTF-8 *-*
import webapp2
import trollop
from trollop import TrelloConnection

TRELLO_KEY = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
TRELLO_SECRET = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'

PNORMAL = '1'
PHIGH   = '2'
SOPENED = '3'
SCLOSED = '4'

class WebHandler(webapp2.RequestHandler):
    """
    Handler to show the home page
    """

    def get(self):
        """ Returns a simple HTML form for home """
        params = {}
        issues = self.trello()
        return self.render_template('home.html', issues=issues, **params)

    def trello(self):
        def isIn(self, haystack, needle):
            for l in haystack:
                if l['name'].lower() == needle.lower():
                    return True
            return False

        issues = []
        self.conn = TrelloConnection(TRELLO_KEY, TRELLO_SECRET)
        board  = self.conn.get_board('xxxxxxxxxxxxxxxxxxxxxxxx')
        for card in board.cards:
            if card.name.startswith("[#"):
                closed = isIn(card.labels, 'issue completed')
                issues.append(dict(
                    id=card.name[1:card.name.find(']')],
                    name=card.name[card.name.find(']') + 1:],
                    state=SCLOSED if closed else SOPENED,
                    closed=closed,
                    type=PNORMAL if isIn(card.labels, 'issue normal') else PHIGH
            ))
        return issues

Výsledek je k nahlédnutí na webu aplikace – https://kdovolal.appspot.com/

trello02

IntelliJ IDEA 13 Early Preview je venku

24.5.2013

Nová verze mého oblíbeného vývojového prostředí je uvolněna k nahlédnutí. Obsahuje mnoho novinek a vylepšení.

Z mého pohledu jsou nejzajímavější asi tyto body:

  • Import projektů ve formátu Gradle (Výchozí formát pro nově představené Android Studio)
  • Externí anotace pro Android API
  • Integrovaný 9-patch editor
  • Podpora filtrování hlášek v logcat-u (To mi chybělo asi nejvíce)

Github spustil nové hledání .. teď už je jasné že je plný kravin!

24.1.2013

Github spustil nové hledání využívající ElasticSearch a je to vážně povedená věc takové hledání. Například v situaci kdy používám špatně zdokumentovanou funkci a nevím přesně co s ní. Použiji hledání a zkusím najít její použití v jiných repozitářích.

Také jsem díky ní zjistil, že je Github plný kravin.

ListView widget pro Gideros

13.1.2013

Pro své potřeby jsem vytvořil komponentu ListView. Napsaná je v LUA a frameworku Gideros Mobile. To znamená, že ji lze použít na všech platformách které framework podporuje. Aktuálně se jedná o Android a iPhone.

Zdrojové kódy včetně ukázkových příkladů jsou k dispozici na GitHub-u.

 

Použití je triviální a přímočaré:

myList = ListView.new({
width = 280,
height = 390,
bgTexture = Texture.new("texture.png"),
rowSnap = true, experimental feature
friction = 0.92
data = data
})
myList:setPosition(x, y)

Ukázky:

Vysloužilá součástka jako stylová bluetooth RGB lampička

6.1.2013

Když jsem kdysi dávno rozebíral historický videopřehrávač z NDR, asistovala mi zvědavá přítelkyně a strašně se jí líbil kus sklíčka, tehdy používaný jako zpožďovací obvod.  Prý je krásný a měl bych z něj něco vyrobit. Nedlouho po tom vznikl nápad jak tuto součástku označovanou jako „ultrasonic delay line“ využít. Nápad na bluetooth lampičku/notifikátor/svíčku s pracovním označením „lampiónek“ byl na světě.

Zájemci o bližší informace o tomto „krásném sklíčku“ najdou více třeba tady: http://www.eevblog.com/2012/11/19/eevblog-386-glass-delay-lines-part-2/

Konstrukci a výsledný tvar jsem měl vymyšlený, začal jsem tedy s elektronickou částí.  Schéma je triviální a výsledkem návrhu desky je miniaturní dvoustranný plošný spoj s využitím šuplíkových a lehce dostupných SMD součástek.

Schéma zapojení:

schéma zapojení

Plošný spoj (top/bottom):

Plošné spoje už doma delší dobu nevyrábím ale nechávám si je kusově vyrobit na zakázku. Cena je přiměřená, výsledek precizní a navíc ušetřím čas a nepořádek při výrobě. Minimální účtovaný rozměr dodavatele je 1dm2, takže jsem nechal vyrobit desek více aby se pokryla tato plocha. Pokud máte o DPS zájem, napiště mi.

Vyrobené DPS:

Součástky:

Použité součástky jsou lehce sehnatelné. Všechny jsou v SMD provedení.

Další vybavení:
  • ISP programátor, pro Attiny i bluetooth modul

Osazení:

Všechny součástky jsem pájel klasickou mikropájkou a nebylo potřeba žádné speciální zařízení. Krabičku jsem potřeboval hezkou a miniaturní takže jsem po chvíli hledání přistoupil k vlastnoruční výrobě. Celá krabička jsou dva čtverce z 5mm tlustého plexi které jsem uvnitř vyfrézoval (ručně – a už nikdy více) podle potřeby.  Povrchová úprava je černý lak kterému pomáhá několik vrstev bezbarvého laku. Spojená je miniaturními vruty vytaženými ze stařičkého mobilu Alcatel One Touch Easy.

Finální podoba:

Zařízení může sloužit k různým účelů. Díky použití Bluetooth je možné jej ovládat jak z mobilu, tak třeba z notebooku. Naprogramovaný mikrokontrolér zvládá několik módů:

  • svícení
  • blikání v barvě
  • prolínání barev
  • svíčka

Software:

Mikroprocesor Atmel 2313  je nutné naprogramovat pomocí ISP programátoru. Bluetooth modul je nutné nakonfigurovat  ještě před osazením. Po osazení se mnou již nekomunikoval a musel jsem jej odpájet a naprogramovat samostatně. Rychlost komunikace je nutné nastavit na hodnotu 38400. Více o konfiguraci modulu najdete například na http://mbed.org/users/edodm85/notebook/HC-05-bluetooth/

Android:

Přítelkyni jsem k ovládání napsal také aplikaci pro Android. Její nejčastější použití lampiónku je režim elektronické svíčky.

Lampiónek - aplikace pro android

Lampiónek – aplikace pro android

Video ukázka:

Točeno mobilem, barvy jsou ujeté do červena :/

Ke stažení:

Javascript – rychlý replace

26.11.2012

Při optimalizaci slabých míst v jedné starší komponentě jsem narazil na místo kde se celkem nešikovně a pomalu nahrazovaly znaky. Pro inspiraci zveřejňuji kód který nahrazovačny nad objemnými řetězci výrazně zrychlil.

/**
 * Fast Javasvript replace
 * @param {String} value Original string
 * @param {Object} charmap  The key-value object to replace the value with
 * @return {String} New string with replaced values
 */
function replace(value, charmap) {

	var patt = function() {
			var p = "";
			for(var k in charmap) {
				if(charmap.hasOwnProperty(k)) {
					p = p.concat(k);
				}
			}
			return "[" + p + "]";
		};

	return value.replace(new RegExp(patt(), "g"), function(chr) {
		return(chr in map) ? map[chr] : chr;
	});
}


// Příklad použití:

//mapa nahrazovaných znaků/částí
// klíč - co najít, zkak/regulární výraz
// hodnota - čím nahradit, řetězec
var map = {
	"a": "b",
	"<": "&lt;",
	">": "&gt;",
	"\.": "[dot]",
	"\?": "[what]"
};

var result = replace("text<strong>tecka=.?</strong>", map);

Příklad online na jsfiddle.net.

Zajímavá organizace práce s Trello.com

14.11.2012

Na nedávném #devfestu  mě Jiří Knesl inspiroval ke změně způsobu práce. Díky. Ke správě svých (nejen pracovních ) úkolů nyní zkouším použít Trello namísto stávajícího přebujelého systému.

Zdá se to být výborný pomocník. Chybělo mi jen, že úkoly nelze vytvářet odesláním e-mailu, jak už jsem zvyknutý. Možná umí a jsem jen slepý, já to vyřešil pomocí služby zapier.com. Ta umí automatizovat na co si vzpomenete a zdarma pro 5 zap-ů.  Malým mínusem není real-time zpracování ale 15-ti minutový interval plánovače.

Sublime Text 2 – sen jednoho programátora

1.10.2012

Jako každý programátor jsem věnoval nemálo času hledání (z mého pohledu) ideálního editoru. S výběrem excelentního editoru mi pomohl až Jindřich Šaršon, respektive jeho tip na Google+. Jeho tip na „úžasný programátorský editor“ byl Sublime Text 2. Po měsíci používání musím říct, že uspokojil všechny mé ujeté programátorské choutky.

Pokud bylo něco s čím si základní instalace neporadila, stačilo využít širokou základnu modulů.
Základem je nainstalovat Package Control

Pro svoje pohodlí při práci pak využívám následující moduly:

S tímto editorem se můžete v klidu věnovat klávesnici a na myš pomalu zapomenout. Klávesové zkratky a příkazy lze využít k libovolné operaci s editorem. Pokud by se našla specialita, která by někomu nevyhovovala, je možné libovolně si klávesové zkratky předefinovávat.

Krátké představení klávesové magie:

  • CTRL + P  – menu na cokoli. Pomocí této nabídky lze spustit libovolnou funkci
  • CTRL + R – jdi někam! .. tedy na definici funkce. Tuhle zkratku si zamilujete!
  • CTRL + D, CTRL + K – označí/přeskočí další výskyt aktuálního výběru. Až vyberete co potřebuje, stačí začít psát – editujete všechny výskyty a najednou.
  • CTRL + UP, CTRL + UP – přesun řádku
  • CTRL+ ALT + UP, CTRL+ ALT + DOWN – sloupcový výběr.
  • SHIFT + F11 - Distraction Free Mode, výborná věc pokud se potřebujete soustředit na práci a ignorovat všemožné notifikace systému.
  • CTRL + SHIFT + F – vyhledávání s podporou vyhledávání v souborech !!
Toto je pouze malé seznámení s užitečnými klávesovými zkratkami které mi nyní ulehčují práci.
Upozorňuji, že dlouhodobá práce s editorem Sublime Text 2  může způsobit averzi k sahání na myši. :-)
Pro sestavování a deploy projektů už dlouho využívám mravence a se Sublime na tom nemusím nic měnit. Stačí projektu nastavit správný builder – Ant – a pomocí CTRL+B  jej spustit.