čtvrtek 10. října 2019

Gzip HTTP Request with Spring Boot and Jetty

It is quite easy to get HTTP response gzipped with Spring Boot, all you need is to enable a property:

server.compression.enabled=true # response compression

The gzip encoding of HTTP request is quite different beast and it needs completely different approach.

First of all it is web-container specific - here is Spring configuration for Jetty using its GzipHandler:

@Component
public class JettyCustomizer implements
     WebServerFactoryCustomizer<ConfigurableJettyWebServerFactory> { 

  @Override
  public void customize(ConfigurableJettyWebServerFactory factory) {
    factory.addServerCustomizers(server -> {
        GzipHandler handler = new GzipHandler();
        handler.setInflateBufferSize(2_048);
        handler.setHandler(server.getHandler());
        server.setHandler(handler);
    });
  }
}


The Inflate Buffer Size has to be set and the handler is able to gzip responses as well.

The configuration can be tested using curl:

echo '{"foo":"bar"}' | gzip | curl --http1.1 -i -X POST http://localhost:8080/test -H "Content-type: application/json" -H "Content-Encoding: gzip" --data-binary @-

pátek 9. listopadu 2018

Nest x Yale Lock - první dojmy

Nest x Yale Lock je chytrý zámek, který je společným počinem firem Google a Yale, což je americký výrobce zámků, nyní patřící do koncernu Assa Abloy.
Zámek samotný je koncipovaný jako přídavný zámek, nenahrazuje tedy vložku zámku, zevnitř má knoflík na mechanické zamykání, zvenku dveří má dotykový display na zadání kódu.

Jak se tedy dá zámek ovládat?
  • odemykat a zamykat aplikací Nest v mobilu (i na dálku, pokud je zámek online)
  • zvenku odemykat a zamykat unikátním kódem, který si každý uživatel nastaví v aplikaci (i když zámek je offline)
  • zvenku rychle zamykat jenom stisknutím tlačítka, třemi prsty nebo dlaní (dá se vypnout)
  • zamykat hlasovým pokynem přes Google Assistant / Google Home (odemykání není dostupné prý z bezpečnostních důvodů)
  • volitelné automatické zamykání buď po uplynutí určitého času (10s/1m/5m) nebo pokud systém Nest pozná, že uživatelé nejsou doma
  • zevnitř se dá zámek zamykat a odemykat klasickým knoflíkem
Velice zajímavou funkcí, a vlastně hlavním důvodem proč jsme zámek pořizovali, je možnost vytvoření "návštěvníků", kteří mají přidělený svůj kód kterým mohou zámek otevřít, a který navíc může být omezený časově - jak dobou začátku a konce platnosti, tak určitými dny v týdnu a dokonce i časovými úseky v rámci jednoho dne.

Dočasně jde přístup návštěvníkům zakázat zapnutím privátního módu - tlačítkem na vnitřní straně zámku nebo pomocí aplikace.

Nastavování uživatelských a návštěvnických účtů probíhá prostřednictvím aplikace a ta také umožňuje zobrazit historii - kdy který uživatel nebo návštěvník zámek odemkl nebo zamkl (pokud nebylo použité rychlé zamknutí nebo knoflík). Aplikace taky umí zobrazit notifikace když dojde k odemknutí nebo zamknutí zámku.

Zámek je napájený klasickými tužkovými bateriemi a není připojený přímo na Wi-Fi, ale připojení mu bezdrátově zprostředkovává buď Nest Connect (krabička, co se připojí do zásuvky) nebo Nest Guard (krabička, cose stará o zabezpečení domu). Pro případ že zámku dojdou baterky, jsou z vnější spodní strany přístupné konektory, ke kterým se dá připojit 9V baterka a zámek otevřít pomocí kódu.

Zámek jsme o víkendu nainstalovali a první dojmy jsou skvělé. Po pár dnech používání se zdá, že zámek plní naše očekávání a navíc opravdu dobře vypadá. Z venkovní strany bych se vizáž nebál označit za až futuristickou, vnitřní strana je trošku hmotnější než jsem čekal, ale nic, za co bychom se museli stydět. Před montáží působí zámek velice robustně - hlavně venkovní část, která je v podstatě odlitek z jednoho kusu s displayem, připevněná skrz dveře šrouby k vnitřnímu dílu.

Ovládání kódem a tlačítkem je naprosto bezproblémové - při ovládání z aplikace je nejdřív nutné přidržet tlačítko, až po kratší prodlevě se zámek otočí.

Největší komplikací zůstává instalace. Zámek je určený na bezfalcové dveře šířky 3,5 - 4,5 cm, a díl zámku se závorou (věc, co vyjede, pokud se otočí v zámku klíčem) má šířku 21mm a plech kolem závory dokonce 22 mm. Jenomže klasické české dveře mají falc šířky 2 cm, takže je při instalaci potřeba projevit notnou dávku kreativity. Mimo to je potřeba myslet na to, že zámek je určený jako přídavný, a tím pádem neovládá střelku (věc, co zajede, když se zmáčkne klika). Z toho důvodu je možné jej instalovat pouze na dveře, které mají zvenku kliku nebo jsou osazeny střelkou s válečkem, jinak by nešly zvenku otevřít.

Pokud se s tímto člověk popere, tak vzhledem k funkcím vychází Nest x Yale Lock za cenu v přepočtu 6.600 Kč jako výborná koupě


čtvrtek 15. února 2018

Jak Raspberry PI s dynamickou IP adresou přiřadit doménové jméno

Ať je důvodem to, že se někteří členové domácnosti nekamarádí s IP adresami a jejich zjišťováním z ARP tabulek, obyčená pohodlnost, nebo něco úplně jiného, hodí se mít Raspberry PI nebo jiné zařízení (třebaže umístěné v privátní síti) dostupné prostřednictvím doménového jména.

Použít se dá třeba DuckDNS, což je zdarma dostupná dynamická DNS služba, která vybranému doménovému jménu prostřednictvím jednoduchého API přiřazuje IP adresy.

Po přihlášení do DuckDNS si zvolíme doménové jméno, které bude přístupné jako JMENO.duckdns.org a získáme API token.

Návod na DuckDNS webu vybízí k aktualizaci IP adresy z cronu, ale na operačních systémech používajících Systemd (např. Raspbian a jeho klony) existuje elegantnější řešení, které prostřednictvím Systemd zajistí update IP adresy pokaždé, když se zařízení připojí do sítě.

Vytvoříme Systemd unit v souboru /etc/systemd/system/duckdns.service například příkazem systemctl edit --full --force duckdns.service:

[Service]
Type=oneshot
ExecStart=/bin/bash -c "curl --silent https://www.duckdns.org/update?domains=JMENO\\&token=TOKEN\\&verbose=true\\&ip=$(hostname -I)"
RemainAfterExit=yes

[Unit]
Wants=network-online.target
After=network-online.target

[Install]
WantedBy=multi-user.target

Funkčnost ověříme pomocí:
systemctl restart duckdns && systemctl status duckdns
Pokud výstup obsahuje OK, je vše v pořádku, KO značí problém.

Povolíme spouštění:
systemctl enable duckdns

Na závěr zajistíme spouštění network-online.target po té, co je k dispozici síť, podle správce připojení.
Raspbian a spol:
systemctl enable connman-wait-for-network.service
Ubuntu a spol:
systemctl enable NetworkManager-wait-online.service
Jinak:
systemctl enable systemd-networkd-wait-online.service

Pokud náhodou nepoužijeme k editaci unitu systemctl edit, je nutné změny aplikovat pomocí příkazu systemctl daemon-reload

Pro umocnění efektu můžeme ještě DNS záznam z vlastní domény JMENO.example.com nasměrovat jako CNAME na JMENO.duckdns.org.

úterý 7. listopadu 2017

How to change ThinkPad's key binding

My ThinkPad has two keys originally intended as Back/Forward actions e.g. in web browser.

As I find them not very usable for browsing, I was searching for a way how to give them much useful role: eg. Page Down/Page Up.

My Ubuntu uses XKB, so here is the receipe:

  1. open /usr/share/X11/xkb/symbols/inet
  2. change lines
    key <I166> { [ XF86Back ] };
    key <I167> { [ XF86Forward ] };
    to
    key <I166> { [ Prior ] };
    key <I167> { [ Next ] };
  3. restart the computer 

čtvrtek 3. srpna 2017

How to erase Thinkpad's SSD

As SSD can't be reliably erased using ordinary commands like rm nor shred, Lenovo provides a special Drive Erase Utility which is able to erase drive using USB stick.
  1. Create VFAT partition on a USB Drive
  2. On USB create a directory EFI with BOOT subdirectory
  3. Download ZIP file with Drive Erase Utility
  4. Extract ZIP file and place .EFI file into BOOT directory
  5. Check the computer boots from "UEFI first" (combined mode with "Legacy first" mode may not work)
  6. Place the USB into port, boot and follow on-screen instructions
Read more about FDE - Full Disk Encryption.

pátek 26. září 2014

Výhledy ze Syslíkovic nory

Jelikož nová Syslíkovic nora je spíš povahou orlí hnízdo nabízející nepřeberné množství výhledů a panoramat, množí se dotazy, co že je to, co je vidět.

V prostoru, který dřív částečně patřil k parku Lužánky a kde park přecházel do soukromých zahrad, byla v roce 1860 založena první vilová kolonie v Brně. První vily v této lokalitě navrhl brněnský stavitel Josef Arnold. Nejstarší Kaiserova vila byla postavena v roce 1860, v roce 1862 Arnoldova vila, Giskrova vila a dnes již zbořená Adamčikova vila.

Vila Tugendhat (1930)
Klenot brněnské funkcionalistické archtektury pozná většina návštěvníků a není ji potřeba asi moc představovat.
Navrhl ji Ludwig Mies van der Rohe pro manžele Fritze a Gretu Tugendhatovy na pozemku, který jim daroval Gretin otec. Tugendhatovi žili ve vile do května 1938 kdy před hrozbou války odjeli do Švýcarska. V roce 1939 vilu zabavilo Gestapo, v letech 1945-1950 zde byla soukromá taneční škola, od roku 1950 byla ve vlastnictví československého státu a do konce sedmdesátých lete zde bylo rehabilitační středisko pro děti jako součást nedaleké dětské nemocnice. V roce 1992 zde po proběhlých jednáních byla podepsána smlouva o rozdělení státu.
Od roku 1980 je vila ve vlastnictví města Brna a od roku 2012 je vila otevřena veřejnosti.

Arnoldova vila (1862)
Vila stavitele Josefa Arnolda patřila od roku 1909 Cecílii Hože, sestře Alfreda Löw-Beera, která ji v letech 1909-1915 dala upravit ve stylu art deco s prvky secese. V roce 1939 vilu zabavilo Gestapo, po válce ji vlastnil stát, po té město Brno a v letech 1952-2012 v ní byla mateřská školka.
Vila je ve špatném stavu a v roce  2012 byla zapsána na seznam nejohroženějších kulturních nemovitých památek.

Löw-Beerova vila (1903-1904)
Secesní vilu nechal postavit brněnský textilní průmyslník Moritz Fuhrmann. Tři roky po jeho smrti v roce 1910 prodali jeho synové továrníkovi Alfredu Löw-Beerovi, otci Grety Tugendhatové.
V roce 1940 vilu zabavilo Gestapo, od roku 1954 je majetkem státu a od roku 1962 zde sídlil Domov mládeže.
Vila se v současné době opravuje.

Zahradní domek Samuela Berana (1919-1920)
Letní dřevěný zahradní domek postavil pro továrníka a prvního poválečného předsedu brněnské židovské obce Samuela Berana a jeho ženu Hermine na zahradě jejich vily Ernst Wiesner.
Domek využívá Ústav geoniky Akademie věd.

středa 13. srpna 2014

Vertica a historické dotazy

Sloupcová databáze Vertica má zajímavou vlastnost, která umožňuje dělat dotazy i na již neexistující data (smazaná nebo změněná).
Syntaxe vypadá tak, že se před běžný dotaz SELECT předřadí čas, ve kterém nás zajímá stav dat:

at time '2014-08-13 00:30:00' select * from moje;

Celé to funguje tak, že Vertica po operaci DELETE nemaže smazané řádky přímo, ale jenom je jako smazané označí. Operaci UPDATE Vertica implementuje jako smazání řádku a vložení nového (DELETE+INSERT).

Metadatům o smazaných řádcích Vertica říká delete vektory a jejich stav můžeme zjistit ze systémové tabulky delete_vectors:

select projection_name,sum(deleted_row_count) as deleted_row_count,floor(sum(used_bytes)/1024) as used_kb from delete_vectors group by projection_name order by projection_name;
 projection_name | deleted_row_count | used_kb 
-----------------+-------------------+---------
 moje_super      |                 5 |      16

To, jak daleko do historie Vertica "vidí", se konfiguruje pomocí parametrů HistoryRetentionTime (počet sekund) nebo HistoryRetentionEpochs (počet zpětně uchovávaných epoch). Pokud oba parametry nastavíme na -1, Vertica si bude smazaná data pamatovat navždy.

Seznam aktuálních epoch můžeme zjistit ze systémové tabulky epochs:

select * from epochs;
       epoch_close_time        | epoch_number 
-------------------------------+--------------
 2014-08-13 12:05:52.71345+02  |        16259
 2014-08-13 14:49:47.034859+02 |        16260
 2014-08-13 14:49:47.04223+02  |        16261

Pro zjištění údajů o aktuální epoše můžeme využít funkce:

select GET_AHM_TIME() as time, GET_AHM_EPOCH() as epoch;
                      time                      | epoch
------------------------------------------------+-------
 Current AHM Time: 2014-08-13 14:49:47.04223+02 | 16261

AHM znamená Ancient History Mark a je to značka, označující nejstarší uchovávanou epochu -- starší epochy je možné smazat.

AHM je možné nastavit i ručně, funkcemi SET_AHM_TIME (nastaví AHM na daný čas),
SET_AHM_EPOCH (nastaví AHM na danou epochu), MAKE_AHM_NOW (nastaví AHM na aktuální čas).

Skutečné mazání dat (PURGE) z epoch starších než AHM řídí Vertica automaticky nebo je můžeme vyvolat ručně.
O automatiku se stará komponenta Tuple mover při provádění operace mergeout -- neplést s operací moveout, která přesouvá data z Write Optimized Storage (WOS) do Read Optimized Storage (ROS).
Ruční purge můžeme provést funkcemi PURGE_TABLE (provede purge dat v dané tabulce a všech jejích projekcích), PURGE_PROJECTION (provede purge dat v dané projekci) a PURGE (provede purge v celém databázovém schématu).

sobota 8. února 2014

QR Platby v Javě

QR Platba je způsob jak do QR kódu zakódovat informace pro provedení bankovního příkazu k úhradě. Anglicky se prý QR Platba řekne SPAYD - Short Payment Descriptor. Pro generování QR Plateb v Javě existuje knihovna spayd-java, která oplývá velice nepříjemným rozhranním a není publikována do centrálního repa Mavenu.
Knihovna je pod opensource licencí Apache, takže jsem na jejím základě vyrobil knihovnu Geek SPAYD, která je orientovaná na vývojářův prožitek. Zdrojáky jsou na GitHubu a binárky v centrálním Mavenu.

neděle 14. dubna 2013

Odpustil jsem OpenJDK (a opustil Sun JDK)

Oracle se snaží seč může, aby zařízl Sun JDK ve prospěch OpenJDK, ale OpenJDK má v komunitě java vývojářů dost špatnou pověst. Přestože se mě odpor k OpenJDK také týkal, neumím přesně vysvětlit, co za ním stojí. Udělal jsem na toto téma letmou nereprezantativní anketu, a odpovědi měly společný jmenovatel: "zkoušel jsem, nefungovalo", s tím, že většina problému se týkala desktopu a SWINGu.
Shodou okolností jsem ale před časem právě na desktopu začal OpenJDK používat, a protože jsem nenarazil na žádný problém, chystám se ho vyzkoušet i na serveru. Klíčem ke štěstí je odpuštění, říká Gerald Jampolsky, ale v mém případě to bude hlavně o tom, že si instalační balíčky nebudu muset vyrábět sám, ale použiju OpenJDK, které je součástí distribuce.
Jaký je ale rozdíl mezi Sun JDK a OpenJDK? Nejmenovaný zdroj z Oracle říká, že více jak 99% zdrojových kódů je shodných, kromě částí které obsahují kód třetích stran, a které nemohly být opensourcovány (např. font resterizer).
OpenJDK také neobsahuje doplňky prohlížečů Java Plugin a Java Web Start, instalátory pro Windows nebo MacOS (podporován je zatím jenom Linux), servisní podporu (SNMP agent nebo Fligth Recorder) a speciální platformově závislá rozšíření (ucrypto security provider pro Solaris nebo Windows accessibility bridge).

středa 22. srpna 2012

Zeroturnaround: Continous Delivery webinář

Na webináři byla ukázána jednoduchá javová webová aplikace, kde ke continous delivery používali:
Zaznameníhodné záležitosti:
  • build number propagovali do maven verze artefaktů
  • všechny buildy kromě prvního byly parametrizované build číslem prvního buildu v pipeline, čímž toto číslo procházelo přes všechny fáze pipeline
  • v Nexusu měli pro každou fázi pipeline vlastní repozitář a pokud artefakt úspěšně prošel fází, do následujícího repozitáře artefakt prostě překopírovali (tj.v posledním "ready for production" bylo relativně málo artefaktů)
  • deployovali do repa nejenom war archivy, ale i další artefakty (txt soubory) a v následující fázi je z repozitáře vybírali pomocí dependency:get
Zajímavým způsobem bylo řešené zařazení manuálního testování do pipeline: mail plugin poslal QA oddělení mail, že build je možné manuálně testovat a po otestování mají kliknout na link, čímž se spustila další fáze v pipeline (pomocí buildWithParameters?xxx=yyy).

Škaredé bylo, že build příkazy pro jednotlivé fáze byly zapsané jen v konfiguraci jenkins jobů a nebyly součástí version control.

Ve výsledku to bylo opravdové continous delivery, ale celé řešení v Jenkinsu to na mě působilo strašně na koleně spíchnutým a nerobustním dojmem. Možná to bylo tím, že to celé mělo být promo na LiveRebel a ne Jenkins, i když s Jenkinsem se na webináři strávilo zdaleka nejvíc času.

středa 7. března 2012

Java tipy

Debianovský balíček java-package, který slouží k vytváření debianovských balíčků z distribučních archivů Javy, se po ukončení licence DLJ probral k životu a podporuje Sun Java 7. Musím vyzkoušet.

Eclipse ani Subversion už dlouho nepoužívám, ale co kdyby se někdy hodilo nastavení pluginu Subclipse
  • nastaveni svn+ssh
  • Linux: apt-get install libsvn-java eclipse.ini: -Djava.library.path=/usr/lib/jni
Chyba při spouštění Jetty: No suitable Log constructor - problém je v knihovně commons-logging, vyřeší překopírování webapp/WEB-INF/lib/log4j-*.jar do adresáře Jetty ext/.

pondělí 28. listopadu 2011

Oracle zakázal distribuci Sun JVM/JDK

Oracle prosazuje OpenJDK a jako způsob zvolil zrušení licence "Operating System Distributor License for Java" (DLJ), která linuxový distribucím dovolovala vzít Sun JVM/JDK a poskytovat ji uživatelům prostřednictvím distribučních balíčků. Jediným způsobem jak získat Sun JVM/JDK je jejich stažení z Oracle webu. Laxně to na svém blogu oznámil Dalibor Topic (můžete si ho pamatovat z Oracle Java Developer Conference 2011) s tím, že tím pádem končí i distribuční web http://jdk-distros.java.net/

Žádná linuxová distribuce (Debian, Ubuntu, CentOS,...) tak nesmí distribuovat balíčky s Javou 7 a možná bude nutné balíčky odebrat i z vydaných distribucí, ale především také bezpečnostní aktualizace Javy 6. Uživatelé, kteří mají nainstalované balíčky se Sun Javou, tak už neobdrží žádnou bezpečnostní aktualizaci a jejich systémy jsou tak zranitelné vůči bezpečnostním chybám.
Z unstable verze Debianu už byla odebraná Sun Java 6 a podrobně o situaci na svém blogu informuje správce debianovských balíčků. Ubuntu 11.10 (Oneiric Ocelot) už Sun Javu také neobsahuje.

Jediným způsobem jak provozovat Javu v Linuxu tak zůstává OpenJDK (i se všemi jeho nedostatky) nebo instalace po stažení z webu Oracle -- naštěstí Oracle alespoň pro Javu 7 už nepoužívá instalátor a tar.gz balíček stačí stáhnout a rozbalit do /usr/lib/jvm podle návodu.

sobota 18. června 2011

Social overdose

Mám účty na různých sociálních sítích a webech (Facebook, Twitter, Picasa, Youtube,...) a poslední dobou mě čím dál míň baví pravidelně obrážet skvadru serverů a zjišťovat, co je kde nového, kdo dal komu palec, pěst nebo kopačky. Když k tomu přidám konkrétní specifika těch sítí jako nepochopitelné řazení zpráv Facebooku nebo Twitter klienty, kteří mi na různých zařízeních (počítač/notebook/mobil/tablet) pořád do kolečka cpou jako novinky zprávy, které už jsem četl, moje frustrace dosahuje vrcholu.

Před lety byl podobný problém s blogy, a aby těchto důvodů člověk nemusel dokolečka mezi svými oblíbenými blogy pendlovat, vznikl formát RSS. Prostřednictvím něho blogy upozorňují na nové články, a uživatel upozornění nebo přímo plný článek dostane do své RSS čtečky (např. Google Reader). Samozřejmě pro web, které vlastní RSS nemají je tady RssGeek :) Nedělám si ale iluze, že by bylo možné, aby vznikl nějaký univerzální formát pro výměnu zpráv ze sociálních sítí.

Úplně by mi stačila aplikace, která by na jednom místě zobrazila novinky, fotky, linky a další obsah, co mí 'kamarádi' do těchto sítí zadají. Také by měla zobrazovat, jestli můj obsah dostal palec, hvězdičku, retweet nebo podobně. Aplikace by odlišila už přečtené zprávy a decentně by zobrazila různé notifikace nebo zprávy méně důležité (např. odkaz dostal další palec nahoru). Měla by umět kvalitně filtrovat (např. žádná videa od uživatele X, nebo žádné twíty z tagem #xyz) a měla by se umět rozumně se vypořádávat s duplicitami (video poslané na Facebook a zároveň YouTube nebo zpráva poslaná na Twitter a zároveň na Facebook) ať už od uživatele stejného nebo více různých. Aplikace by asi měla být webová a vhodná by byla mobilní verze nebo alespoň rozhraní uzpůsobené pro mobil nebo tablet.

Velké naděje jsem vkládal do Google Buzz - ten zobrazuje zprávy z různých sítí jenomže jen od lidí, se kterými na Buzzu kamarádím a dělá tak přesný opak toho co potřebuji: místo aby objem informací redukoval je násobí. Ten stejný případ je FriendFeed. Nejblíže mým představám je Friend Stream od HTC, ale kromě jiného je jenom pro mobil.

Znáte takovou aplikaci? Pokud ne, chybí Vám? Chtěli byste takovou používat?

pondělí 16. května 2011

Proč jsou informace v informačním věku téměř bezcenné

Marek Prokop, 29.4.2010, video, textový přepis

  • Dříve: informací málo, drahé
  • Google prodává pozornost uživatelů
    • Attention Economy
  • Free - Chris Anderson
    • Náklady na zpracování informací klesají, ale cena pozornosti roste
  • Too cheap to meter

pátek 28. ledna 2011

Jokery with Linode

Linode: We have received a report of a spamvertised website being hosted on an IP address assigned to you. Please investigate this issue and update this ticket within 24 hours to avoid a disruption in service.


Me: Hi, the whole forum is deleted now as it is not used anymore. The only thing which makes me sad is your lack of understanding for single women from Russia.

Linode: Thank you for letting us know that you removed the forum. In general our staff prefers single Ukranian women, guess it's a matter of taste. We appreciate your cooperation.

Besides Linode is really good VPS provider, good to know they even have a sense of humor. You may use my Linode referral code :)

čtvrtek 20. ledna 2011

Odstranění Byte Order Mark

Byte Order Mark (BOM) je znak kódování Unicode, který označuje endianitu (pořadí bajtů ve vícebajtových znacích) použitou v souboru. Pro data v kódování UTF-8 nemá vůbec žádný význam a pokud se jednou na začátku souboru objeví, je potíž se ho zbavit.

Mě se zjevil v jednom souboru se styly, který byl s dalšími CSS soubory sloučen do jednoho, a protože YUI Compressor BOM ze souboru neodstranil a soubory sloučil i s ním, první CSS pravidlo z ono souboru pak nefungovalo.

BOM umí ze souboru odstranit utilita uconv z knihovny ICU (v Debianu v balíku libicu-dev což je btw pěkný bumbrlíček, i se závislostmi 53MB).
uconv --remove-signature file-with-bom.txt > file.txt

středa 24. listopadu 2010

SunSPOT - nová verze Rev8

Z výrobních linek právě sjíždí nová řada zařízení SunSPOT a před tím než se dostane k nedočkavým zákazníkům, můžeme se podívat jaké novinky nabídne oproti předchozí verzi Rev6

  • zvětšena RAM na 1MB
  • zvětšena flash paměť na 8MB
  • nový procesor AT91SAM9G20 400MHz (2,226x rychlejší)
  • vestavěný watchdog
  • senzorová deska už nemá teploměr (teploměr je přímo na základní desce)
  • 4 digitální IO (místo pěti)
  • 4 analogové IO (místo šesti)
  • místo obyčejného světelného senzoru je přítomen trojbarevný světelný senzor
  • nový akcelerometr s trojhodnotovou škálou (2/4/8G)
  • audio speaker
  • infračervený vysílač a přijímač

čtvrtek 23. září 2010

Můj nejdražší

From: jully jully4love50@yahoo.com
Subject: Můj nejdražší,

Můj nejdražší,
    Jak se dnes máte? S nadějí tento mail bude vám na vaše zdraví. Jsem rád, že napsat, že dobrý vztah s vámi.
Mé jméno je Miss Julian Joan, dobře vypadající, upřímný a poctivý mladá dívka. Musím upřímně a pravdivě přítel, který povede k dlouhotrvající vztah. Já jsem doufal, že pro druh vaši odpověď, pokud jsem zájem, takže můžeme sdílet obrázky a sami vědí víc. Pošlu moji fotku, když slyším od vás, chci mít tvoje taky.

Tvůj upřímný přítel,
Miss Juilan

neděle 2. května 2010

Gmail a problém s importem kontaktů

Importujete do Gmailu CSV soubor s kontakty a všechny telefonní čísla končí v poli poznámka?
Google bohužel moc neříká, jaký má být formát CSV souboru. Formát, v jakém Gmail kontakty exportuje je poněkud zvláštní, nicméně podle jedné ze stránek nápovědy se zdá, že telefonní číslo má být uložené ve sloupečku Phone.
To je ovšem zdroj problémů: telefonní číslo na mobil musí být ve sloupci Mobile Phone, číslo domů Home Phone a podobně.

pátek 5. února 2010

Mercurial

Mercurial je systém pro správu verzí, který je na rozdíl od Subversion distribuovaný a má plnou podporu pro větvení, a na rozdíl od Gitu není opruz.

Windows
Nainstalujeme rozšíření Průzkumníka TortoiseHg, které obsahuje i samotný Mercurial http://bitbucket.org/tortoisehg/stable/downloads/

Debian (Lenny)
Debian Lenny obsahuje jen starou verzi Mercurialu verze 1.0. Lenny backports obsahují naštěstí novější verzi 1.3. Přidání backports provedeme podle návodu a pak se Mercurial nainstaluje spuštěním:
aptitude -t lenny-backports install mercurial
Ubuntu (Karmic)
http://cz.archive.ubuntu.com/ubuntu/pool/universe/m/mercurial/mercurial_1.4.1-1_i386.deb
http://cz.archive.ubuntu.com/ubuntu/pool/universe/m/mercurial/mercurial-common_1.4.1-1_all.deb

Pro instalaci TortoiseHg (včetně rozšíření Nautilusu) si přidáme repozitář
ppa:tortoisehg-ppa/releases
a z něj je pak možné nainstalovat balíček tortoisehg

Eclipse
HgEclipse:
http://hge.javaforge.com/hgeclipse
Vzdálený přístup přes SSH
Nesmíme zapomenout, že Mercurial bere cesty relativně k domovským adresářům, takže pokud přistupujeme k repozitáři v rootu, musíme úvodní lomítko pro uvedení cesty zdvojit:
hg clone ssh://jmeno@server//hg/repo