Nedávno se mi podařilo dokončit novou aplikaci pro iOS – Photo Widget Studio. Je určena všem kdo chtějí na svoji home obrazovku umístit widget s fotografií. Aplikace nabízí široké možnosti přizpůsobení a hlavně, možnost nadefinovat k widgetu akci po tapnutí. Lze tak jednoduše vytvořit rychlou volbu pro vytáčení častých čísel, např. rodiny.
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í:
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.
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
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.
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.
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ě.
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í:
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í.
RGBLED – libovolná vyhovující zapojení a rozměrům, já ji odpájel z čínského RGB pásku co mi ležel v šuplíku. Je nutné ji proměřit a případně upravit hodnoty R2,R3,R4.
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.
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",
"<": "<",
">": ">",
"\.": "[dot]",
"\?": "[what]"
};
var result = replace("text<strong>tecka=.?</strong>", map);
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.
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:
Terminal – nejen na otevření terminálového okna v adresáři aktuálního souboru
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.