среда, 19 августа 2015 г.

scala-cpd, yet another scala copy paste detector

You could treat this post as ad. Because, literally it is.

I have realise that our code contains a little bit copy-pasted blocks. Code in Scala, obviously. So, I was looking for perfect working tools for it (at least, to find those blocks). I found only  two non-working  implementations. One is based on PMD (some classic tool for this topic), I cannot execute other variant because of elder sbt version. 

So... I write my own. It's sbt-plugin. 


The code is pretty simple. Scala 2.10 contains macros/run time aka ToolBox. That means, we have AST for free. After that we traverse tree and put all matched subtrees into dictionary (as strings). All matched substrees are blocks/functions_apply/vals/defs and so on. Yeah, and we don't care about comments, because ToolBox-parser perform only AST for code, not for comments.

If two subtrees are equal (syntactically, by _.toString) and  big enough, it's a problem. Houston. 

Fairly, first version is simple. Next version, I hope, would find val-renaming. It should be simple task while we work with AST, not with code-as-string. 

At least, we use it in out CI-process. For each commits, TeamCity execute task with this plugin, and check that count of copy-pasted-blocks is less or equal than for previous commit. 

It would be a big pleasure, if you also will use it.

PS. 3 years ago we use Simian. It's good enough, but it's not a AST, just strings. 

суббота, 4 июля 2015 г.

Само совершенство (нечетное)

http://mathworld.wolfram.com/OddPerfectNumber.html

Таки наконец-то случайно наткнулся (хотя вообще странно, что мне лень было погуглить што-ле?)

В отечественной научПоповской литературе про ТЧ (как ни странно) есть два мнения, что нечетных совершенных чисел нет и не будет, либо просто отсылка к тому что "типа, никто не знает".

А тут аж библиография на 35 источников.

И еще вот тут http://www.oddperfect.org/ люди таки как-то их ищут. И это несколько забавляет, хотя внутри математики, очевидно, неограниченно. Забавляет скорее факт, что их результат будет вроде "Соверешенное нечетное, если и существует, обязано быть более 10^645" (степень случайна, и брякнута на клавиатуре).

Мерсенн-щиков (тех, кто GIMP гоняет) я тоже не понимаю. Себя я тоже не понимаю, мини-идеи и эксперименты (в виду лени) как-то у меня не шибко идут.

ЗЫ.
Жаль я довольно туп. Хотя бы потому, что не нашел этого ранее.

О дивный, новый мир. Хотя не... спать сегодня спокойно буду.

понедельник, 27 апреля 2015 г.

Принцип двойной записи и псевдовыборы

Тут некое видео, которое показывает тонкие места нашей(все давно понимают, что не нашей) избирательной системы:
https://navalny.com/p/4219/

И так, основной глюк всей этой системы - это "вброс". Проблема, как мне кажется, имеет очевидное решение.

Почти постановка задачи.

На избирательном участке в день выборов проходит не более 2000 человек (мультиплицирующий коэффициент не так важен). Важен факт, что всех этих людей обрабатывают (проверяют в списках/паспорт) вручную.

Если в результате бюллетеней оказывается меньше, чем официально выдано - это формально не проблема. Текущими законами (очевидно, это все с моей точки зрения, так как "закон о выборах" я не читал) не запрещается взять, но не проголосовать.

Хуже, если бюллетеней оказывается больше, чем изначально выдано.

Задача сводится к проверке аутентичности/подлинности бумажки. Очевидно, что если бумажка только содержит галочку и ее можно отпечатать в некоторой типографии, то ничего не получится.

Первое тривиальное решение, которое приходит в голову - это заверять каждую бумажку у Главного(-ых) в избирательной комиссии. Подписи 3-4 человек в углу документа/специальном поле, позволяют отделить выданные от "вброшенных". Круговая порука, 3-4 человека, представляющие разные стороны. По крайне конкретно эту проблему должен решить. Минусы тоже очевидны - замедление процесса, и необходимость в изменении законов/процесса. Лично я - за честность.

Возможна куча других модификаций, типа записывать что этот бланк выдан тогда-то (с точностью до минуты) в отдельный лог (журнал). И на бланке ссылка. В случае подозрений можно искать в логах. Тут только аккуратно продумать с тайностью голосования, чтобы нельзя было привязать голос к голосующему.

Варианты с фильтром Блюма, (полу-)центральной выдачей GUID-ов и т. д. возможны, но пока довольно сложны.

ЗЫ. Подделывать подписи 3-4 людей тоже возможно, но таки сложнее. 

воскресенье, 19 апреля 2015 г.

Абстрактнее

https://gist.github.com/noelwelsh/02b9ecf6d21c7b8934e8

Хотя в текущем проекте потенциально null-ы могут придти только из внешних систем (), но писать обработку на всякий случай приходится. Сейчас это только Cassandra и какая-то хреновина для гео-локации по ip (maxmind). Наследие. "В java только дедушки" (с).

null вообще запрещен синтаксически к употреблению в scalaStyle. Приходится в нескольких местах закрывать/открывать проверку стиля.

Вот те две проверки на равенство null теперь можно довольно красиво заменить на (см. ссылку на месте первого абзаца):

> result.?.getOrElse("")

Перфекционизма с возрастом все больше и больше. Это отход от студенчества.

Прошелся по коду. Оказалось, что Option[_] тоже можно глуповато использовать. Очевидно, это лучше чем null. Но и пересолить/переборщить тоже можно. К тому же, если потом в каждом месте match-ить или if-ить. Try[_] там оказался уместнее. Хотя дать волю, то его тоже начнуть match-ить или if-ить, хотя кроме необходимого map/flatMap больше ничего и не надо.

В scala очень нравится то, что через месяц (и каждый месяц в течение нескольких лет) написанный код уже начинает вызывать отторжение, и хочется переписать на чуть более абстрактные абстракции. И это очень клево, хоть какая-то движуха.


понедельник, 30 марта 2015 г.

КопиПаста

Пока не нашел для scala работающей тулзы для поиска копипасты в коде. (Коллега немного грешен, в аду не я по этому поводу гореть буду). Есть 1-2 неработающих, но они на 2.9 и как-то уже несколько лет не активны.

Как всегда, (даже если вас съели) есть два выхода.

Тупой, и в то же время, обычно работающий вариант, смотреть на это все как на строки. И искать плагиат. Баян. Через "а".

А крутой способ - это иметь AST, и искать похожие поддеревья. В чем крутизна, что строить/парсить/лексить scala не надо, начиная с 2.11 тут нормальные механизмы. Пока руки коротки, но скоро все подключу.

Очевидно, что в каждом компиляторе все проходят через шаги c AST. То есть основная задача - это внедриться в процесс и в нужный момент искать копипасту. В реальности проблемы, что обычно это написано как монолитный кусок (тут можно бы добавить, но я тактично промолчу) кода. В C# почти сделали Roslynd, но я уже два года вне темы и C#. В gcc внедряются как-то, но я вообще вне темы. Уровень вхождения там сильно выше.

А в scala видится несложным. Макросы должны быть гораздо проще, но лично мне макросы пока тоже далековаты, хотя в пару мест и можно было бы запихнуть. Тут что-то рефлексией попахивает. В общем, надо копать.

вторник, 17 марта 2015 г.

Режим радиомолчания

Пора уже выходить из радиомолчания. В принципе, писать есть о чем, но в то же время и не хочется. Как в классике: "Начало лекции про ленивые вычисления. -Лекция окончена. У вас есть вопросы?"

Так что ссылка на котиков не будет, вместо этого канал на Wednesday Addams.

http://www.youtube.com/channel/UCyX7977vwwko1lurVlEJszQ

И ленивые вычисления совершенно не причем.

вторник, 30 декабря 2014 г.

Агрегатное

Ижевск-Казань-Ижевск (автомобиль)
Ижевск-Москва
Москва-Таллин-Москва (неделя, поездом. Таллин, Палмсе, Тарту, Пярму - это внутренними автобусами)
Москва-Лондон-Москва (1 день, самолет)
Москва-Ижевск (поезд)
Ижевск-Кунгур-Пермь-Ижевск (3 дня, автомобиль)
Ижевск-Москва
Москва-Казань-Беларусь-Москва (Витебск, Гродно, Беловежская пуща, Минск - внутри автомобилем)
Москва-Переславль-Москва
Москва-Ижевск
Ижевск-Ульяновск-Ижевск (УльКамп, автобус)
Ижевск-Москва-Ижевск (2 дня, поезд, обратно автомобиль)
Ижевск-Екатеринбург-Ижевск (1 день, поезд)
Ижевск-Лондон-Ижевск  (неделя, Кардиф, Дувр, Кентеберри, Милтон-Кейнс/Блечли-Парк)
Ижевск-Москва-Нижний Новгород-Ижевск (3 дня, Highload++)
Ижевск-Переславль-Ижевск (4 дня, НСКФ-2014)
Ижевск-Екатеринбург-Ижевск (1 день, поезд)

Всякую мелочовку, типа дневные выезды в Воткинск(2)/Сарапул/Нижнекамск вообще не в счет. Выезд за МКАД, кстати, больше напрягает.

По сравнению с предыдущим годом - примерно, но кажется немного больше. Эмоций несколько больше, чем в прошлом году. Год опять поделился на до/после.

Про глобальную экономику/политику говорить не хочу, ибо там все плохо. Все в курсе.

Так что суммарно настроение на уровне "прорвемся".

вторник, 9 декабря 2014 г.

Нельзя не поделиться

http://www.slideshare.net/ScottWlaschin/fp-patterns-ndc-london2014

http://www.slideshare.net/ScottWlaschin/fp-patterns-buildstufflt

Оно же. С небольшими отличиями.

#МирУжеНикогдаНеБудетПрежним

четверг, 27 ноября 2014 г.

Ни о чем

Досмотрел ML от Ng (он же Ын в русском написании, хотя кто об этом знает?). Правда, без домашек, времени на это все нет.

Хотя категорщики после 2-ой лекции (первая: http://www.youtube.com/watch?v=ZKmodCApZwk&index=78&list=WL, вторая там же, вы в состоянии ее найти) сильнее переворачивают сознание.

Обычно, успевают рассказать базовые определения, и рисуют пару диаграм.

Еще есть редкие ролики, типа http://www.youtube.com/watch?v=cYzp5IWqCsg, которые радуют. Только не радует, что они редкие, и дальше ничего нет.

Vihart/numberphile/signinbabana радуют всегда и не редкие, но они не совсем по теме. Приходится извращаться, и смотреть бородатых мужиков/категорщиков.

Mining Massive Datasets радует как никогда. Хотя, лентяй, их книгу только 1/3 пока прочитал, что-то все откладывается в очереди. Хотя тут просмотрел тоже пока 1/3, но нового и интересного таки больше.

понедельник, 17 ноября 2014 г.

Nonogram

То что в русском известно как японские кроссворды.

https://github.com/ajtkulov/Nonogram

Таки написал, даже на больших работает.
Код немного причесать, ибо большая часть (хотя там можно сказать одна сущность, да и год назад написанная) никакая (слово "кака" как подстрока). Код на scala уже через 2 недели смотришь, и "кто это писал?". Я так не пишу.

Оказалось, там элемент динамики (динамическое программирование), ну, тупо кеш вычисленных потребовался. Иначе на больших медленно (50х50 и больше, где в ряд по 8-10 отрезков бывает).

Кодом не доволен, результатом удовлетворен.

Так что с позавчера считаю японские кроссворды неитересными.

воскресенье, 9 ноября 2014 г.

Толерантность

Что в русском известно как пофигизм. Можно было бы и ярче сказать, но тут возможно дети РосЗапрет прочитают.

За последние дня три моя pro-шка ушла в синий серый экран четыре раза. В эти же дни Тим Кук (который Apple) сделал признание, что все сходится. Я, в принципе, всех их так и называл.

Мне не понятна мода. Да, на западе если ты нег афро-американка, [пока что еще] нетрадиционной ориентации, то с работы уволить почти невозможно. Как в этой стране жить. Не знаю, как она устраиваться на работу будет. Видимо, в резюме указывают это, и идешь вне конкурса.

Так же мне не понятны двойные стандарты. Вот пришел человек в банк просить/требовать/угрожать/взять (нужное подчеркнуть) кредит. Ему отказывают, мол зачем вам миллион долларов? Приходят НО (нетрадиционно ориентированные) в детский дом, типа, дайте нам на воспитание. Им нельзя отказывать, иначе не толерантно (увы, конечно же ситуация выдумана из пальца).

Вот тут странно, я не вижу никакой принципиальной разницы. Если человек может создавать, брать взаймы, и отдавать больше, то все хорошо. Но, очевидно, одна группа лиц не может создавать.

Я знаю людей, которым отказали в котенке из приюта (правда, это Лондон). Отказ был в форме, что ребенок половину дня в школе, родители целый день на работе, что будет делать бедное животное первую половину дня? Слово "пидорасы" тут только скрыто за словом "отказ", и никакой толерантности.

Я не против НО, но и не за. Машину водить могут, в ипотеку вступать тоже. Раз детей делать не могут, то и брать в кредит не должны. Главное, что б компьютеры в ребут не уходили, оно ведь не должно зависеть от направления (читай, ориентации)... 

среда, 22 октября 2014 г.

EWSCS2014

Чтоб не быть совсем слоупоком, стоит написать не позже 6-и месяцев. Таки как я (мы) были вот тут cs.ioc.ee/ewscs/2014.

Где-то в конце ноября/начале декабря (2013 года) я случайно в соцСетях увидел объявление о школе. Смотрю, что будет с dependent type и полиморфизмом (*произносить с интонацией робота-Бендера про поэзию и шахматисток*). Спрашиваю человека: "А поехали?" Даже позитивно ответил.

Где-то в конце декабря отправили заявку. Первого февраля стало известно, что поедем. Мог бы написать слово "отобрались", но чую что конкуренции там не было. Мероприятие несколько платно (320Е), это проживание/питание/трансфер на 5 дней. Местным эстонским студентам все оплатили, даже питерским нашим (АУ все-таки) обещались. А в глубинке (русской) все плохо.

В общем надо было быстро порешать с визами. За час закупился билетами и гостиницами. Справки/фоточки/страховки/анкетки... Мелкая проблема с синхронизацией. Я тут, а Дима в 1200 км. Писал письма декану в универе, едет ли кто. Сгонял на вокзал, синхронизировались.

Через неделю подал. Довольно четко, в отличие от другого опыта. Электронная запись - оно работает, бывает/-ло хуже. Постоял в очереди минут 10-15, приняли. В приглашении было написано, что это как бы "по науке", поэтому "согласно пункту NN пошлина не нужна". На Димины документы смотрят - аспирант, ок. На меня - мальчик - ты кто? Я бью себя в грудь, показываю что название "*** Research", что едем на конференцию, будем что-то рассказывать, что вот в приглашении указано, что не надо денег. В общем, принимающая сторона отлучилась минут на 10, (с кем-то там тоже торговалась), в итоге можно. Я, видимо, тоже не предусмотрел. Копию диплома ктн можно было бы и взять.

Через неделю забрал визу. Дали ровно на 12, как и просили. Позже выяснилось, что питерским (которые с Екб) дали на 3 года, хотя тоже просили только на мероприятие.

Собственно, поезд Мск-Таллин. Вагон сидячий, потому как оно стоит что-то около 3-х в два конца, остальные вагоны только купе по 8. Бизнес, мать ее. Самолет даже дешевле купе, но все равно бизнес. Хотя опыт показал, что сидячий вагон - ад и таки одна страна.

В вагоне оказалось 6-8 среднешкольников, или ближе к младше-. Энергии на целый табун буйволов, не выспался, да и в сидячем положении оно довольно затруднительно.

Прибыли, еще день на гуляния. Точнее прибыли в сб утром, гостиница часа через 2-3, автобус на само мероприятие только в вс вечером. Дима оказался никаким, в смысле здоровья. Хотя есть фоточка, как он хлещет водку за неделю до этого. Понял, что проще гулять одному, да и он просидел все в номере.

Погулял по историческому центру, потом в музей с картинками. Везде русская речь, ну совсем редко что-то эстонское.

В вс пошел опять в соседний мезей с картинками (там немного Шишкина и Айвазовского), еще Эстонский исторический музей, дальше памятника "русалке", на берегу залива много лебедей и уточек. Вечером автобус на мероприятие, часа полтора езды.

На ужине меня спросили, "ты ли Павел Айткулов?" Я честно сознался (хотя секунд пять думал, а не сделал ли чего...). Оказалось, что я в анкете написал, что не ем грибов, и тут лично для меня соус к мясу без грибов. Очень тронут.

Прошелся вокруг объектов, там вечер и темно.

Завтрак оказался шведским. Опять русским кругом сидели за одним столом.

Дальше все мероприятия согласно плану. Конор МакБрайд - agda-ил, первая половина понятна и очевидна, вторая - кровь/кишки/распи###ло. У англичан/шотландцев непонятная для меня привычка ходить босиков в помещении, в том числе зимой. Интересно, кто был первым? Тот же Пейтон Джонс тоже.

Был француз Сахарович (да, русские корни), говорил про автоматы и алгебру. Что-то прикольное, местами нравилось.

Был итальянец про безопасность - не в коня. Грек что-то про выпуклость в экономике - там вроде немного воды, и что-то не понятное. Китайца вообще мало кто понимал, точнее старшее поколении достаточно. Нагуглили, что китаец с Хоаром совместно книжки писал, только это и впечатлило.

Два вечера была сессия для студентов, ну и я (и Дима тоже) там тоже немного очевидной для меня воды рассказывал. В принципе, первое мое публичное выступление на английском. Фиг знает, какая обратная связь, но как минимум два человека потом подходили с вопросами/разговорами.

На обед и ужин были рассадки, то есть аццкий рандом выбирал тебе собеседников на трапезу. Сильно правильно, а то все время с этими русскими бы просидел.

На четвертый день повезли на экскурсию. От нашей страны было 3 человека. В основном были групповые фото, уровня "найди трех русских и японца". В общем, картина, где 4 человека стоят на высоком камне, на который фиг залезешь, и человек 15 внизу.

В тот же день вечером был финальный ужин, хотя отбытие в пятницу. Опять сели русским кругом (были и эстонцы по паспорту, но русские имена/фамилии/мышление). Чтоб не уходить от стереотипов кричали с акцентом "Na zdorovie", травили анекдоты про текущего нашего президента и прочее.

В пятницу после обеда обратно в Таллин. Вечером ужинали, провожали питерских на автовокзал. Оказалось, что если ехать в Питер автобусом, а потом поездом до Москвы, то будет дешевле, чем в сидячем вагоне напрямую до Москвы. "И гений, пародоксов друг".

Еще взяли 3 дня, ибо там праздники на 8-ое марта. Дима тупил в гостинице, я же успел съездить в Тарту и Пярму. Сначала советовался с местными, и трипАдвайзером.

В Тарту был классный интерактивный музей техники, ну и гулял весь день.

В Пярму ничего нет, ну только самый большой аквапарк на Эстонию. Но так как я не умею плавать, то я туда зачем-то пошел. И да, теперь у меня есть плавки за 35 Евро. Горки классные, но я вообще впервые в жизни в таком заведении.

Еще когда обедал в Пярму, разговорился в девочкой-официанткой. Она русскоговорящая/думающая. Рассказала, что в Таллине есть районы, где живут только русские(!) (*это надо произносить с такой интонацией, что ужас-ужас*), что эстонцы боятся туда заходить, что там в магазинах работают продавцы, которым если на кассе что-то сказать на эстонском, то в ответ можно услышать "Чё?".

Обратно поезд часов в 6 вечера, никуда не уехать. Тупил по городу, он оказался довольно маленьким.

Выводы: эстонский совсем не медленный язык, пока в Москве работал, там еще больше тупящих медлеееенннннно говорящих.
Познакомились с группой/категорией крутых людей. Даже аспирантка у Эско Укконена была, только она уже 40+, и вообще автоматами занимается.
Кормил лебедей с рук, и чаек в полете. Миндаль едят все.

Фоточки для привлечения внимания. Мы жили в том домике. Ну и традиционно, уточки!



воскресенье, 14 сентября 2014 г.

Need for speed

Глазами можно быстро пробежать текст и сделать некоторые выводы о его адекватности. (Некоторая проблема с иностранными текстами. Например, научная статья на английском, красиво оформленная в ТеХ-е/pdf, как-то изначально немного внушает доверие больше, чем файл в word-е, который уже не очень понятно чем открывать).

Презентации/слайды бывают информативнее. Точнее более эффективными в передачи информации. Очевидно, бывают и менее, когда ни черта не понятно. Тут тоже можно пролистать глазами.

Видео-презентации (так же иногда) бывают наиболее информативны. То есть когда идут слайды и человек сбоку машет руками и говорит. Тут главная проблема, что нельзя перелистнуть на нужный кадр, и оценить адекватность релевантность материала своему уровню. Было бы круто, если бы была текстовая расшифровка ко всему этому, так же доступ к слайду с точки зрения произвольности доступа. А этого пока нет. Это я к чему...? Вдруг, кто-то с slideshare/youtube это читает?

И титры/текст было бы круто вынести в отдельную прокрутку. Чтоб можно было независимо смотреть текста больший кусок, и скролить вперед/назад независимо от основного содержимого. Да и слайды тоже.

infoq.com - пока лучшее что есть, но делать еще лучше, наверное, пока им не надо.

Ну и изменение скорости просмотра есть на youtube. Но сделайте шаг более маленький, (1, 1.05, 1.1 ...), а не 1.5 и 2.

понедельник, 25 августа 2014 г.

Медленно

Мееееееддддлееееннннооооо

До меня недавно дошло, почему работает метод множителей Лагранжа, там где минимизировать функцию надо. В принципе, это должно было дойти на первом-втором курсе, но "жираф большой..."

"Нет времени объяснять..." (с) тут тоже применимо. Сейчас стало чуть более интуитивно понятно. Только поздно, "все лучшие годы..." Что там за \lambda и нафига частные производные, жил же как-то эти годы.

В принципе, есть масса вещей которые не понятны. Тот же тривиальный Лопиталь, где для поиска предела достаточно взять производную от числителя и знаменателя. Вот когда в университете (большинству, не знаю, может где-то иначе) за пять минут, ну вот здесь надо брать производные и "счастье". Тут есть какая-то слабая интуиция, что "да, и в правду работает", "ну, если вызвать духов Тейлора и МакЛоринов,  то можно что-то и вызвать".

Потом включается противоречие, что понятие производной и включает в себя понятие предела, а тут мы предел ищем при помощи производной. Уроборос, мать змей его. Рекурсия то бишь.

А потом понимаешь, что все что ты знаешь - это и есть куча вещей которых ты не доказал, а принял на веру. Только вера лет через 10 переходит в маленькую уверенность. Если вообще переход, чаще в небытие.

Плач тривиальной первокурсной математики закончен.

воскресенье, 3 августа 2014 г.

В никаком году

Весь покрытый терминалами, абсолютно весь
Монитор developer-а в cloud-e он есть
Монитор developer-а в cloud-e он есть
Весь покрытый терминалами, абсолютно весь

Там живут несчастные люди-PHP  //*(Пи-Эйч-Пи)
На лицо ужасные, в свитерах они
На лицо ужасные, в свитерах они
Там живут несчастные люди-PHP 

Что они не делают, не идут дела
Видно в понедельник всех у них deadline
Видно в понедельник всех у них deadline
Что они не делают, не идут дела

Task-и не разолвятся, говно-код растет
Плачут, кактус колется, не жалея слез
Плачут, кактус колется, не жалея слез
Task-и не разолвятся, говно-код растет

Вроде не тупые и могли бы жить
Им бы все deadline-ы взять и отменить
Им бы все deadline-ы взять и отменить
Вроде не тупые и могли бы жить

Как назло в офисе нет календаря
Junoir-ы и взрослые пропадают зря
Junoir-ы и взрослые пропадают зря
Как назло в офисе нет календаря

По такому случаю с ночи до зари
Плачут невезучие люди-PHP
И рыдают, бедные, и клянут беду
В день какой неведомо, в никаком году

И рыдают, бедные, и клянут беду
В день какой неведомо, в никаком году

// Серия идиоматических выражений на английском языке...


----
Извиняюсь, нет пунктуации, рифмы и смысла.
Почти изоморфно исходнику. 
Не знаю зачем, но пусть тут будет.
Я ничего не имею против php, просто рифма.