QRMania — потрясающее обновление

Ноябрь 18, 2011, 08:34

На QR­Ma­nia по­тря­са­ю­щее, неве­ро­ят­ное, вос­хи­ти­тель­ное, чу­дес­ное, сног­сши­ба­тель­ное об­нов­ле­ние! От­ныне со­зда­ние QR-ко­дов про­ис­хо­дит пря­мо у вас в бра­у­зе­ре! Ни­ка­ких об­ра­ще­ний к сер­ве­ру и пе­ре­да­чи дан­ных по Ин­тер­не­ту. Сер­вер те­перь ну­жен толь­ко для ге­не­ра­ции EPS и пред­ме­тов. В со­зда­ние обыч­но­го кода и со­хра­не­нии его в PNG-фор­ма­те сер­вер ни­как не участ­ву­ет и ваши дан­ные от вас ни­ку­да не пе­ре­да­ют­ся, ни­кем не чи­та­ют­ся и ни­ку­да не за­пи­сы­ва­ют­ся. По-мо­е­му, это за­ме­ча­тель­но.

Примеры использования Hastache

Ноябрь 14, 2011, 11:30

Вы­ло­жил при­ме­ров для has­tache: README.md (этот файл, кста­ти, хаста­шем же и со­би­ра­ет­ся — mkReadme.hs). Эти же при­ме­ры рос­сы­пью фай­лов: ex­am­ples.

Libqrencode-js: генерация QR-кодов на JavaScript

Ноябрь 14, 2011, 11:00

А вот ка­кую офи­ген­скую шту­ку я вы­ло­жил!

Это ге­не­ра­тор QR-ко­дов на чи­стом как хру­сталь JavaScript, ни­ка­ких сер­вер­ных ком­по­нен­тов, всё пря­мо в бра­у­зе­ре. Вот сра­зу де­мон­страш­ка для по­ба­ло­вать­ся.

При­чем это не абы что, это порт про­дви­ну­той C-шной биб­лио­те­ки libqren­code, ко­то­рая ра­бо­та­ет в сер­вер­ной ча­сти на по­дав­ля­ю­щем боль­шин­стве сай­тов для ге­не­ра­ции QR-ко­дов, и име­ет бин­дин­ги ко все­му на све­те. Для JavaScript уже есть ге­не­ра­то­ры QR-ко­дов, но все очень сы­рые, в от­ли­чии от libqren­code ко­то­рый уже несколь­ко лет пи­шет­ся и, как я уже го­во­рил, мно­го где ис­поль­зу­ет­ся.

Про­цесс пор­ти­ро­ва­ния C-шной биб­лио­те­ки на JavaScript, это, ска­жу я вам, про­сто пес­ня. Есть со­вер­шен­но за­ме­ча­тель­ный про­ект em­scripten — ком­пи­ля­тор LLVM в JavaScript. Вот с по­мо­щью него вол­шеб­ство и про­изо­шло. Я на­пи­сал неболь­шую C-шную оберт­ку над libqren­code, ском­пи­ли­ро­вал всё вме­сте в LLVM-код с по­мо­щью Clang, пе­ре­дал в em­scripten и на­пи­сал JavaScript оберт­ку над ре­зуль­та­том его ра­бо­ты. По­лу­чи­лось хо­ро­шо.

Ли­цен­зия LGPL (ви­ру­сом от libqren­code). Поль­зуй­тесь!

Hastache растёт и развивается

Ноябрь 08, 2011, 11:20

Но­во­сти хаста­ше­стро­е­ния:

Во-пер­вых, Akaspin при­слал по­лез­ный патч, поз­во­ля­ю­щий с по­мо­щью mk­Gener­ic­Con­text со­зда­вать кон­тек­сты для ти­пов с по­ля­ми Mona­dIO m => (Byte)String -> m (Byte)String, за что ему вы­да­ёт­ся оче­ред­ной плюс в кар­му. Сам я о та­кой воз­мож­но­сти ду­мал, но не оси­лил, ура опен­сор­су. При­мер ис­поль­зо­ва­ния тут.

Во-вто­рых, я обоб­щил кон­струк­тор Mu­Lamb­da до Mu­Var a => Mu­Lamb­da (ByteString -> a), рань­ше мож­но было толь­ко ByteString воз­вра­щать, а те­перь лю­бой тип, для ко­то­ро­го есть ин­станс клас­са Mu­Var. Удоб­но, как-то я рань­ше не со­об­ра­зил так сде­лать.

В-тре­тьих, Сам Bryan O'Sul­li­van (один из ав­то­ров кни­ги Real World Haskell), при­слал неболь­шой патч для has­tache и по­со­ве­то­вал ис­поль­зо­вать blaze-builder для за­пи­си ре­зуль­та­та ра­бо­ты шаб­ло­ни­за­то­ра. Blaze-builder пред­на­зна­чен для ге­не­ра­ции Lazy ByteString с кон­тро­лем ми­ни­маль­но­го раз­ме­ра фраг­мен­тов этой стро­ки. За счет это­го до­сти­га­ет­ся су­ще­ствен­ное уве­ли­че­ние ско­ро­сти даль­ней­шей ра­бо­ты с этой стро­кой. Вме­сто кучи мел­ких бло­ков (а имен­но так и по­лу­ча­ет­ся при ра­бо­те has­tache), име­ем несколь­ко круп­ных, ко­то­рые, к при­ме­ру, по сети уедут быст­рее (за счет ми­ни­ми­за­ции ко­ли­че­ства си­стем­ных вы­зо­вов). Так что те­перь и обыч­ный ре­зуль­тат has­tache со­сто­ит из удоб­ных круп­ных бло­ков внут­ри Lazy ByteString, и, та­к­же, мож­но по­лу­чить непо­сред­ствен­но объ­ект Builder биб­лио­те­ки blaze-builder и даль­ше уже ра­бо­тать пря­мо с ним.

Сергей Лымарь © 2005-2014, Все права защищены.