zmila: (3kub)
у вольны час пазнаёміўся з node.js
за пару гадзінаў напісаў прасьцейшую кансольную бульгальтэрыю (rest-падобны інпут з каманднага радка ды CRUD у yaml-файл (праўда, D няма, усе дадзеныя толькі дадаюцца, ніколі нішто не выдаляецца :)) • тое самае на клажуры заняло ў мяне больш часу •

а тут даведаўся, што ёсьць яшчэ нейкае vert.x

дарэчы, для праграмаваньня на JavaScript мой выбар: Eclipse +Nodeclipse плагін, паспрабаваў SciTe, Sublime, Atom, LightTable і нешта ўсё ня так
zmila: (lunlumulo)
прайшло ўжо гады з два, як я забыўся на праект Эйлера і больш не займаюся галаваломкамі зь вялікімі лікамі •
але нядаўна патрапіў на сэрыю пастоў, дзе рашаецца задачка: "калі запісаць усе лікі ад 1 да 999,999,999 ангельскімі словамі (one, two, three, ..., ninehundredninetyninethousandninehundredninetynine, ...), пасартаваць па альфабету і склеіць, якая будзе літара нумар 51 мільярд?"
у першай частцы генеруецца такі сьпіс (на хаскелі)
ten1 = strings "one two three four five six seven eight nine"
ten2 = ten1
     + strings "ten eleven twelve"
     + (strings "thir four" + prefixes) * string "teen"
     + (strings "twen thir for" + prefixes) * string "ty" * (one + ten1)
    where prefixes = strings "fif six seven eigh nine"
ten3 = ten2 + ten1 * string "hundred" * (one + ten2)
ten6 = ten3 + ten3 * string "thousand" * (one + ten3)
ten9 = ten6 + ten3 * string "million" * (one + ten6)

я забацаў тое самае на клажуры:
(def ten1
  ["one" "two" "three" "four" "five" "six" "seven" "eight" "nine"])

(def ten2
  (let [prefixes ["fif" "six" "seven" "eigh" "nine"]]
    (concat
      ten1
      ["ten" "eleven" "twelve"]
      (for [x (concat ["thir" "four"] prefixes)] (str x "teen"))
      (for [x (concat ["twen" "thir" "for"] prefixes), y (concat [""] ten1)] (str x "ty" y)) )) )

(def ten3
  (concat ten2 (for [x ten1, y (concat [""] ten2)] (str x "hundred" y)) ) )

(def ten6
  (concat ten3 (for [x ten3, y (concat [""] ten3)] (str x "thousand" y)) ) )

(def ten9
  (concat ten6 (for [x ten3, y (concat [""] ten6)] (str x "million" y)) ) )


абодва варыянты - брутальная, і ня могуць вылічыць ten9
; ==> OutOfMemoryError: GC overhead limit exceeded
(у мяне стаіць -Xms2048m)

(())

Dec. 18th, 2012 04:10 pm
zmila: (Default)
int totalCount = aaa ? bbb ? 50 : 25 : 0;
if ( a.x < b.x && a.y < b.y || a.x > b.x && a.y > b.y ) even() else odd();

(if aaa (if bbb 50 25) 0)
(if (or (and (< (:x a) (:x b)) (< (:y a) (:y b))) (and (> (:x a) (:x b)) (< (:y a) (:y b)))) :even :odd)
zmila: (Default)
When writing my first Clojure application, I came across a very common problem, validating user input. Even though there are a few libraries out there that do this already (valip, validateur, corroborate), I needed something that could handle a broader range of use cases. So, I built a library called Metis (pronounced mee'-tis).
@ Data Validation in Clojure

4clojure

Aug. 13th, 2012 04:53 pm
zmila: (lunlumulo)
выкараскаўся на першую старонку: https://www.4clojure.com/users - трапіў у топ-100:

Rank: 96 out of 8258
Problems Solved: 134

4clojure

Aug. 9th, 2012 09:17 am
zmila: (bicikla neĝero)
Sequs Horribilis

Create a function which takes an integer and a nested collection of integers as arguments. Analyze the elements of the input collection and return a sequence which maintains the nested structure, and which includes all elements starting from the head whose sum is less than or equal to the input integer.

памудохаўся ўчора некалькі гадзінаў!
а калі зрабіў, іхні сайт адваліўся, таму запосьціў толькі сёньня •
але, сапраўды, жуць задачка! маё функ-кун-фу, выглядае, яшчэ не абсалютна дасканалае :) бо рашыў з дапамогай хака •
zmila: (lunlumulo)
Write an oscillating iterate: a function that takes an initial value and a variable number of functions.
It should return a lazy sequence of the functions applied to the value in order,
restarting from the first function after it hits the end.

спачатку напісаў монстра, які цягне з сабой і поўны сьпіс функцый і бягучы - частковы, а ўнунтры lazy-seq робіць разгалінаваньне адкуль браць функцыю і які будзе новы бягучы сьпіс •
а потым падумаў - divide & conquer! і разьдзяліў - генерацыю бясконцага сьпіса з паўтораў функцый і генерацыю прымяненьняў гэтага сьпісу •
(fn [v & fs]
  (letfn [(osci-iter [v fs]
               (lazy-seq
                 (let [v1 ((first fs) v)]
                   (cons v1
                         (osci-iter v1 (rest fs))))
                 ))]
         (cons v 
               (osci-iter v 
                    (apply concat (repeat fs))))
    )
  )

4clojure

Aug. 1st, 2012 04:11 pm
zmila: (lunlumulo)
вярнуўся да задачак на https://www.4clojure.com
перарашаў усе easy ды elementary • некаторыя нават ня з першага разу •

Rank: 249 out of 8119
Problems Solved: 108 (of 151)

cytaten

Jul. 31st, 2012 02:15 pm
zmila: (Default)
How Clojure is breaking my brain – Loops

So in summary, to take Steve McConnell’s quote in Code Complete:
…if you work for 10 years, do you get 10 years of experience or do you get 1 year of experience 10 times?
and ask:
…if you have been writing loops for 10 years, have you just been writing same loop all 10 years?
zmila: (Default)
паглядзеў і амаль да канца сьледаваў відэа Jim Weirich: Adventures in Functional Programming

спачатку ён распавёў вядомыя азы пра Цюрынга і Чорча, затым паказаў, як можна ўжываць лямбды ў ЖаваШкрыпце, увёў некалькі рэфактарынгаў (tennent correspondence principle, introduce binging, rebind & inlinening) і карыстаючыся гэтым перарыфактарыў невялікі код у адпаведны, але без прысвойваньня (толькі вызавы функцый) • а потым - яшчэ больш загорнуты прыклад: вылічэньне фактарыяла (рэкурсіўны вызаў ананімнай функцыі) •

 fx = function(gen) {
    return gen(gen)
 } (
      function (gen) {
        return function(n) {
          return function (partial) {
            return function (n) {
              return n == 0 ? 1 : n * partial(n-1)
            }
          }(gen(gen))(n)
        }
      }
  )

  fx(5)
fx = function(improver) {
    return function(gen) { return gen(gen) } (
        function (gen) { return function(n) { return improver(gen(gen))(n) } }
      )
 } (
    function (partial) {
      return function (n) {
        return n == 0 ? 1 : n * partial(n-1)
      }
    }
  )

  fx(5)

нафіга? - каб паразмяць моск/мозґ і каб прадэманстраваць, што такое нерухомы пункт (fixpoint) функцыі •

дарэчы, дэталі вучэньня Чорча падчас навучэньня ў БДУ неяк прайшлі паўз мяне, таму давялося трохі пагугліць матчасьць •
а тут - опа, і ў чарговым выпуску Clojure Gazette 1.17 чытаем пра ўсё гэта (плюс: у параўнаньні з Клажурай і Ліспам) •

учора

Jul. 26th, 2012 09:41 am
zmila: (lunlumulo)
збылася мячта ("я чакаў гэтага званка ўсё жыцьцё") - праязжаў паўз прыпынак, там стаяць кантралёры, я на хаду дастаў праязны (на аўтобус) і паказаў ім - тыя ржуць "маладзец!" •

калі ехаў дамой, сустрэў жывога [livejournal.com profile] lipkovichea :) затым на велабане сустрэў яшчэ аднаго Яўгена, а потым ледзь не сустрэў слуп - абярнуўся паглядзець не абярнулась лі ана • трэба забараніць некаторым паненкам хадзіць у такіх строях - аварыйна небясьпечных!

карыстаюся выпадкам, віншую Эспэранту з 125-годзьдзем і Эўгу з 111112-годзьдзем! з гэтай нагоды Рыч Хікі і ко выпусьцілі бясплатную версію сваёй новай БД - Datomic • я ўжо была спампаваў, усталяваў, але пакуль не павывучаў, што за яно і навошта •

такса сьпяшаецца павіншаваць насарога з юбілеем эспэранта:
zmila: (lunlumulo)
раблю першыя крокі ў плагіна-пісаньні для Экліпса: пачаў выконваць "згортваньне кода для клажуры ў ccw" •
folding in ccw

no no sql

May. 25th, 2012 02:14 pm
zmila: (lunlumulo)
трохі папісаў (у вольны ад farniento час) на клажуры код для спампоўваньня архіва сваіх допісаў з жж • жж дазваляе карыстаецца xml-rpc, для чаго я спачатку патыцкаўся ў necessary-evil, але "не понравилось", потым знайшоў lj api, якую напісаў нехта І.Каткоў (заадно ўшаную памяць [livejournal.com profile] rydel23, майго самага першага лж-сябра), дзе ёсьць адразу і хмл-рпс і абгорткі для лж-аб'ектаў • каменты выпампоўваюцца праз просты http запыт, а потым парсаньне атрыманых хмл-аў •

гэта быў уваход, а выхад я спачатку зрабіў на web-noir, з усякімі сьвісьцелкамі як rest, jquery і ajax • але потым выкінуў уэб-морду і пакінуў толькі команд-лайн •

у якасьці задняга канца (back-end) я адразу адкінуў mongo (з эстэтычных прычынаў), а зрабіў на redis, прычым перабраў 2 ці 3 клажурных кліенты (сёньня чытаю, зьявіўся яшчэ адзін - carmine, трэба глянуць, можа там масавае ўпіхваньне зробленае па-чалавечы, бо ў тых, што я юзаў раней, нерэгулярна зьяўляліся збоі) • пагуляўся з berkeleyDB і db4o, але не •
урэшце адмовіўся ад захоўваньня архіва ў якойсьці БД • усе носікўэль маюць нейкі свой бінарны фармат, і каб узяць архіў, прынесьці дахаты, а там адкрыць, пашукаць - дык трэба пісаць яшчэ адну праграмулю • таму вырашыў экспартаваць усё проста ў файлікі, раскіданыя па тэчкам:
год/месяц/дзень/, а пасты пісаць у yaml • аднак, бяда, clj-yaml працуе праз org.yaml.snakeyaml, а тая неяк дзіўна (дакладней: пачварна) піша кірыліцу •

таму я выкінуў і гэта таксама, і застаўся проста з сэрыялізацыяй у клажурныя с-эспрэшн (на стэк-аверфлоў рэкамендуюць (binding [*print-dup* true] (prn ...)), але мне хапіла і проста pprint

засталося зрабіць
- пошук па тэкстам пастоў-каментаў - хаця і зараз можна карыстацца grep ці пошук-у-файлах з якога нармальнага рэдактара ці файл-мэнэджэра
- сканаваньне тэкстаў і выпампоўваньне ўсіх малюнкаў-фоткаў (а шмат малюнкаў, на якія я спасылаўся ўжо зьніклі)
- разабрацца, ці можна з жж выцягнуць цэтлікі
zmila: (bicikla neĝero)
Рыч Хікі тут пушнуў новую лібу ў гітхабу, і выдаў тоны матана (reducers) • пачытаў, з цяжкасьцю зразумеў што гэта, як і навошта • я яшчэ не да канца ўцяміў, як ужываць іхнія пратаколы, ня кажучы ўжо пра ўсе канкурэнтныя прыбабахі • але ў версіі 1.4 шчыра вітаў увядзеньне літаралаў чытача (reader literals) - асабліва для даты (хоць назва #inst трохі нечаканая) •

poliglot

Feb. 27th, 2012 02:16 pm
zmila: (bicikla neĝero)
GoSu, Xtend, Kotlin, Julia

што заўгодна людзі прыдумаюць,
абы толькі не працаваць (Java),
не вучыць матчасьць (Scala),
або дужа баяцца дужак (Clojure) •

cytaten

Jan. 18th, 2012 11:30 am
zmila: (Default)
Yet another Haskell vs. Scala question


... bla-bla-bla

UPDATE: Many thanks to everyone for the responses. The consensus seems to be "try Clojure instead", which I think is a great idea.

читд :)
zmila: (Default)
адпачывавю, цэлымі днямі ляжу, чытаю
кожны дзень па адной главе Joy of Clojure, а потым пераходжу на розную хвантастыку
чамусьці гэтая апошняя кніга не падабаецца - не разумею, на каго яны арыентаваліся: для навічкоў не падыходзіць, зусім няма элементаў абучэньня, тлумачэньня мовы; дый для прасунутых там нічога новага, цікавага, карыснага - проста вада і блаблабла

на с.120 няўдалы прыклад:
The if-let and when-let macros are useful when you’d like to bind the results of an expression based on if it returns a truthy value. This helps to avoid the need to nest if/when and let as shown:
(if :truthy-thing
  (let [res :truthy-thing] (println res)))
; :truthy-thing

(if-let [res :truthy-thing] (println res))
  ; :truthy-thing
The latter is much more succinct.
на маю думку if-let ужываецца замест:
(let [res (some-costly-calculation ,,,)]
  (if res 
    (use-the-result ,,,)) )

а яшчэ я не даганяю, нафіга так рабіць спасылкі:
We mentioned in section 6.3 that one way to ensure that lazy sequences are never fully realized in memory is to prefer (Hutton 1999) higher-order functions for processing.

[reference at the book end]
Hutton, Graham. 1999. “A Tutorial on the Universality and Expressiveness of fold.” Journal of Functional Programming 9, no. 4.
што, у згаданым артыкуле раскрываецца слова prefer, ці частка сказа ад пачатка да гэтага слова? тут наогул няма цытаваньня

q&a

Nov. 4th, 2011 11:13 am
zmila: (Default)
Matt Fenwick: Why are some (many) of Clojure's built-in functions defined using def, not defn?

amalloy: Read further down in clojure/core.clj - defn doesn't exist yet at the top, because that file is building the language as it goes. After several hundred lines, defn is written, and functions after that are defined with defn.
zmila: (lunlumulo)
(filter
  (fn [user]
    (let [langs-of-posts (map google.translate/guess-language
                              (google.plus/get-user-posts user))]
      (and
        (pos? (count langs-of-posts))
        (every? #(#{:be :en :eo :ja :ru :uk} %) langs-of-posts)) ))
  (google.plus/select-users-by-cirle "esperanto"))

Profile

zmila: (Default)
zmi la

December 2016

S M T W T F S
    123
45678910
11121314151617
181920212223 24
25262728293031

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 22nd, 2017 06:16 am
Powered by Dreamwidth Studios