Таки посетили Дачу в Эль-Тур и знатно покатались по акватории Бухты Моисея.
Tools
Записки программиста, обо всем и ни о чем. Но, наверное, больше профессионального.
2017-06-13
Dacha, Moses Bay, El Tur
Posted by
Valentin
at
10:15
3
comments
Labels: holiday, vacation, windsurfing
2017-05-02
Big Data Analysis with Scala and Spark
Big Data Analysis with Scala and Spark
https://www.coursera.org/learn/scala-spark-big-data/home/info
Ну вот, finally, закончил я последний курс специализации
Functional Programming in Scala Specialization
https://www.coursera.org/specializations/scala
Сдал сегодня последнюю домашку.
К сожалению, этот курс меня сильно разочаровал.
Настолько поверхностный и бесполезный оказался, что я пожалел времени, потраченного на прослушивание лекций.
По сравнению с предыдущими курсами этой специализации, где показывали всякое интересное
и давали массу кода, глядя на который можно было научиться полезному, здесь
кода минимум, все интересное есть в документации на Spark и научиться чему-либо может
только полный нуб.
Ощущение, что курс сляпали на отъебись. Очень жаль.
Отдельного упоминания заслуживает домашка, на которую я потратил непозволительно много времени.
Продолжая славную традицию "мы дадим вам задание, но не дадим тестов", тут задание местами
сформулировано так, что без телепата не разобраться.
А лично я застрял, как обычно, на простейшей вещи: в их тестах округление округляет в меньшую сторону,
а я использовал в большую (x.toInt vs x.round.toInt)
Пока не написал тест, не смог понять, где ошибка.
Чтобы написать тест, пришлось распечатывать входные данные, засылаемые грейдером курса.
Бляди, сэр.
def getResult(lang: String, scores: String, sc: SparkContext) = {
def langIdx(lang: String): Int = {
StackOverflow.langs.indexOf(lang)
}
val langCoord = StackOverflow.langSpread * langIdx(lang)
val iScores = scores.split(",").map(x => x.toInt)
val vectors = sc.parallelize(iScores.map((langCoord, _)))
val means = Array((langCoord, iScores.sum / iScores.size))
StackOverflow.clusterResults(means, vectors)
}
test("clusterResults - Groovy-19") {
val lang = "Groovy"
val scores = "23,15,13,13,76,26,16,27"
val sc = StackOverflow.sc
val results = getResult(lang, scores, sc)
StackOverflow.printResults(results)
assert(results.exists(_ == ("Groovy",100,8,19)))
}
test("clusterResults - PHP-34") {
val lang = "PHP"
val scores = "22,22,57,37,30,30,83,44,28,25,37,26,22,26,24,24,22,39,37,49,75,25,37,46,46,40,133,30,29,40,41,22,24,29,33,24,65,55,42,30,22,25,45,61,23,35,67,34,94,24,71,59,50,36,36,36,36,25,39,51,22,49,161,24,54,54,24,176,28,36,28,23,27,26,63,137,104,23,44,22,24,26,35,32,175,50,36,25,27,23,27,32,40,46,32,32,61,22,78,23,22,28,62,62,36,63,81,38,73,23,27,89,51,24,30,28,22,23,33,27,27,55,23,30,29,59,102,46,96,42,37,36,39,194,48,22,24,33,27,48,64,24,28,23,141,31,57,50,23,23,22,108,84,37,22,105,26,29,34,22"
val sc = StackOverflow.sc
val results = getResult(lang, scores, sc)
StackOverflow.printResults(results)
assert(results.exists(_ == ("PHP",100,160,34)))
}
2017-01-12
hate psto
Быказарогаза aka hashtag: ненавижу Зобянена.
Сегодня проспал, понял, что на машине не поеду: до 7 не успеваю проехать срануюленинградку и поехал на метро.
Вылез на Динамо и что я вижу? Затеяли очередную реконструкцию вестибюля, перекрыли половину ворот и эскалаторов. А там и так просторно не было.
И это не считая уже перманентного пиздеца снаружи: стройки-раскопки, говнище и толпы народа ползущие по временным перелазам.
Нуептвоюмать, зобянен.
Я не против строек и реконструкций, нет. Если они не мешают мне жить. А ты, сцуко, разъебашил весь город. Куда не сунься, в каждом микрорайоне локальный пиздец.
Если бы твои стройки не были похожи на фоллаут после ядерной войны, мне было бы поровну. А так -- я тебя ненавижу.
Боженька, сделай так, чтобы у них кончились деньги. Ну или заровняй уже этот мордор по нивелиру.
original post http://vasnake.blogspot.com/2017/01/hate-psto.html
Posted by
Valentin
at
10:06
2
comments
Labels: бытовуха
2017-01-10
interview question for programmers
Некоторые жалуются, что на интервью им дают закодить задачки оторванные от жизни. Типа, на работе никогда такое не встречается.
Пожалуйста, у меня есть вполне жизненная задачка, на обработку последовательностей.
https://gist.github.com/vasnake/4ce910892d286de2402adc24cbf9d886
Posted by
Valentin
at
10:04
0
comments
Labels: programming
2017-01-09
Solomon Grandy
Природоведение, дневник: пять недель ежедневных осадков сменились охуенными морозами. -30 и холоднее. Для мордора это перебор. Зато солнышко светит.
Вчера, 8 января, у нас состоялся велопробег. Говорят, 500 участников насчитали.
Официальные источники сообщают, что это был пробег, посвященный развитию велотранспорта в городе.
По этому поводу у меня есть соображение, очень простое: когда в выходной день за бортом -30, ни один уважающий себя человек без причины на улицу не выйдет. За хлебушком там, или собачку выгулять. А тут 500 человек, без спец снаряжения и подготовки, на велосипедах, покататься -- их всех, во главе с организаторами, надо в клинику отправить, лечиться. Это больные люди.
И вот эти на всю голову ушибленные будут определять развитие транспортной инфраструктуры?
Как говорил батя, хуже дурака только дурак с инициативой.
original post http://vasnake.blogspot.com/2017/01/solomon-grandy.html
Posted by
Valentin
at
10:00
0
comments
Labels: бытовуха
2016-12-27
природоведение, дневник
Продолжаем наблюдения за природой.
В мордоре идет пятая неделя ежедневных осадков. Тепло, около нуля. Снег выпал и начал подтаивать. А потом подмерзнет и будет весело.
Охуевайтунг.
original post http://vasnake.blogspot.com/2016/12/blog-post_27.html
Posted by
Valentin
at
09:14
0
comments
Labels: бытовуха
2016-12-21
Четвертая неделя
Не знаю, кому как, а по моему это эпично: четвертую неделю ежедневные осадки в мордоре.
Сегодня это снег переходящий в дождь. Скользко и мерзко.
Я думал, глядя на прогноз, где показывали слабый плюс и никаких осадков, поехать на машине. Потом, может, на мойку заглянуть, а то Прося вся в московском дристе. Но боженька решил иначе.
Вечером на кухне сорвало трубу и я с утра занимался "похозяйству". Посему до утренних пробок не успел. Оно и к лучшему, при такой-то погоде.
original post http://vasnake.blogspot.com/2016/12/blog-post_21.html
Posted by
Valentin
at
10:00
2
comments
Labels: бытовуха
2016-12-15
В деревне Гадюкино дожди
Это просто анекдот какой-то.
Две недели в мордоре идет снег. Поэтому на работу я езжу на метро.
На третьей неделе прогноз пообещал, что осадков не будет и, в понедельник, я поехал на машине.
Пошел снег, ехать было скользко и страшно. И долго.
На вторник пообещали, что осадков не будет. Я опять поехал на машине.
Пошел снег. Выкапывать машину из сугроба, парковаться в сугроб и ехать в пробени по скользкой дороге -- не вставляет совсем.
В среду ... ну вы поняли, та же история.
В четверг я решил, ну его нах, поеду на метро.
И что бы вы думали? Светит солнце, осадков нет.
Ну не пиздец?
Вообще, три недели непрерывных осадков это перебор. Ятакщетаю.
original post http://vasnake.blogspot.com/2016/12/blog-post.html
Posted by
Valentin
at
12:38
2
comments
2016-11-28
weekends & holidays
В связи с тем, что я искал (и успешно нашел) себе новую постоянную работу, на блог времени нет совершенно. Времени, походу, вообще хватает теперь только на то, чтобы поужинать, выпить чаю в процессе релакса под эпизод какого-нибудь сериала и ... всё. Но не будем терять надежду.
Заметка про нашего мальчика: понадобился мне список выходных и праздничных дней. Типа, для подсчета статистики всякой, бла-бла-бла "по выходным и праздничным дням". Грустно и смешно, но в удобоваримом виде такой информации нет.
Есть http://xmlcalendar.ru/ в xml.
Есть http://data.gov.ru/opendata/7708660670-proizvcalendar в csv.
Но оба требуют трансформации до состояния "список дат: выходные и праздничные дни".
Собственно, вот, трансформатор: https://github.com/vasnake/weekends
Поскольку я прокачиваю мышцу Scala, утилитка на написана на ей, родимой.
Enjoy.
original post http://vasnake.blogspot.com/2016/11/weekends-holidays.html
Posted by
Valentin
at
10:05
0
comments
Labels: scala
2016-09-11
Dog house
Интересно, как мысли/информация кругами ходит
Цитата
Разрешимость и даже complexity являются математическими игрушками и часто играют злые шутки с инженерами.
...
Представьте что надо написать программу, создающую будку на Х собак, где Х - натуральное. Но задача не решаема в общем виде! На 1-2 собаки надо делать классическую будку типа Плуто, на 3-10 - вольеры из сетки в ряд, а на большее число - уже целые комплексы в инете я видел, т.к. надо решать совершенно другие проблемы вроде массового выгула.
Но точно такая же ситуация например с задачей коммивояжёра. При некоторых размерах она тривиальным циклом решается, при некоторых требует распараллеливания, при некоторых требует суперкомпьютера с хорошим интерконнектом, а при некоторых вообще не имеет физического смысла т.к. ждать годы. Соответственно бред же доказывать что-то для стейт оф зе арт программы для суперкомпьютера за пределами суперкомпьютерных размеров задач.
...
Короче, основная масса работы - это неуниверсальный код, для которого доказывать что он валиден на всей бесконечности натуральных - это какой-то адов оверинжиниринг. Практики не поймут!
Конец цитаты
http://nponeccop.livejournal.com/507802.html
И это замечательно перекликается с выступлением
Alan Kay at OOPSLA 1997 - The computer revolution hasnt happened yet
https://youtu.be/oKg1hTOQXoY
Где у него, внимание, есть пример про собачью будку! Причем примерно в том же контексте.
Обожаю послушать умных людей.
original post http://vasnake.blogspot.com/2016/09/dog-house.html
Posted by
Valentin
at
19:39
0
comments
Labels: CS, programming, Wisdom
2016-09-10
Design patterns
Об https://en.wikipedia.org/wiki/Software_design_pattern
Краткое содержание:
паттерны -- это типа словарь, чтобы люди могли говорить на одном языке, обсуждая код.
Культивировать надо понимание (и умение рассуждать об) применимости тех или иных паттернов.
Цитата
Here's the deal with design patterns ... They are observations, not rules. People noticed that programmers seemed to be approaching problems in similar ways in a bunch of different applications, and they decided that it would be pretty useful to be able to talk about those approaches using a common vocabulary so they wouldn't have to keep explaining what they were referring to. So they figured out general versions of these common practices and gave them names like "Visitor" and "Observer."
But the important part is "understand why." The skill you need to cultivate to become a good developer and to be attractive to the kinds of companies in the question isn't plugging together objects from a library of canned formulas, but rather understanding the reasoning behind them deeply enough that, when faced with the same problem, you will arrive at the same solution on your own. And much more importantly, when faced with a similar but not identical problem, you will do something else rather than try to shoehorn the solution into an existing design pattern that's an awkward fit.
Конец цитаты
https://www.quora.com/What-are-the-most-important-design-patterns-that-software-engineers-should-know-to-work-at-Google-Amazon-and-Facebook/answer/Steven-Grimm
original post http://vasnake.blogspot.com/2016/09/design-patterns.html
Posted by
Valentin
at
22:25
0
comments
Labels: programming
2016-09-01
UPS
Posted by
Valentin
at
23:33
0
comments
Labels: hardware
2016-08-26
Decoupling
Замечательная идея: отсоединить I/O от конкретного протокола, скажем, HTTP.
Цитирую:
In a word: reusability. By implementing network protocols without any I/O and instead operating on bytes or text alone, libraries allow for reuse by other code regardless of their I/O decisions. In other words by leaving I/O out of the picture a network protocol library allows itself to be used by both synchronous and asynchronous I/O code. And by not simply abstracting out the I/O it allows users of the library to drive the network interactions themselves, not the network protocol library itself; not forcing I/O code to have to conform to a certain API provides the greatest flexibility for users of such low-level details such as network protocols. Working towards this unbinding of network protocols from I/O is very important as the Python community migrates from synchronous I/O code to using async/await for asynchronous I/O.
https://sans-io.readthedocs.io/
Не важно, как ты делаешь I/O, ты, главное, массив байтов или строку текста дай на вход и bob-your-uncle.
original post http://vasnake.blogspot.com/2016/08/decoupling.html
Posted by
Valentin
at
20:39
0
comments
Labels: python
Cartobonus/Картобонус
original post http://vasnake.blogspot.com/2016/08/cartobonus.html
Posted by
Valentin
at
20:26
0
comments
2016-08-17
produce a random BigInt and convert it to base 36
BigInt.probablePrime(100, util.Random).toString(36)
BigInt(128, util.Random) toString 36
Posted by
Valentin
at
23:49
0
comments
Labels: Book, programming, scala
BerkeleyX: CS190.1x Scalable Machine Learning, digest
Курс
BerkeleyX: CS190.1x Scalable Machine Learning
Posted by
Valentin
at
05:09
2
comments
2016-08-11
Machine Learning (Andrew Ng, Coursera, Stanford)
2016-08-04
Principles of Reactive Programming (Scala)
original post http://vasnake.blogspot.com/2016/08/principles-of-reactive-programming-scala.html
Posted by
Valentin
at
03:25
0
comments
Labels: course, functional programming, scala
2016-07-31
Dynamic Programming
Всё, что вы хотели знать про Dynamic Programming
-- brute-force, memoization, subproblems, guess, recursion.
Лекции от Erik Demaine (MIT)
https://youtu.be/ENyox7kNKeY
http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-006-introduction-to-algorithms-fall-2011/lecture-videos/
В частности,
1. что такое memoization, почему так называется?
2. Почему Dynamic Programming, откуда такое название?
1: Memo pad, внесение заметок в memo pad -- memoization.
2: Ученый работал на вояк и не мог сказать, что занимается "исследованиями", поэтому придумал загадочный термин, чтобы генералы не доебались.
original post http://vasnake.blogspot.com/2016/07/dynamic-programming.html
2016-07-20
Spark 2
Apache Spark 2: DataFrames, Datasets, Streaming.
Серьезные изменения в скорости и возможностях
https://www.youtube.com/playlist?list=PL-x35fyliRwiz70bTSSK4HmOZ4JazCFUj
https://www.google.com/search?q=spark+2+dataframe+dataset+streaming
https://spark-summit.org/2016/schedule/
original post http://vasnake.blogspot.com/2016/07/spark-2.html
Posted by
Valentin
at
02:55
0
comments













