tag:blogger.com,1999:blog-34894765224135466862024-03-08T18:47:37.175+04:0067108864's blog. Сериализованные думы.67108864http://www.blogger.com/profile/02888735973047043835noreply@blogger.comBlogger315125tag:blogger.com,1999:blog-3489476522413546686.post-44790306702280964292022-05-21T14:00:00.001+04:002022-05-21T14:00:30.788+04:00Двойственность<p>Когда в середине 20го века математики ушли в теорию категорий, в какой-то момент оказалось что можно сформулировать и автоматически доказать двойственную теорему. Берем, переворачиваем все стрелки (ака морфизмы), доказательство механически получается из доказательства базовой теоремы. Все, статья готова. Продлилось, очевидно, это не долго. </p><p><br /></p><p>Сейчас другие противоречия и двойственности. Родина - это не жопа президента. Вне зависимости от жопы, президента и страны. Что такое Родина, государство, страна, быть русским или не русским. На этой неделе даже мем про паспорт хорошего русского появился. Даже слово "война" первые два месяца почти была табуирована, категорщики бы использовали "ко-война", но их мало бы кто понял.</p><p><br /></p><p>Для меня понятие Родины схлопнулось до определенной части города и видимо первых 5-10-20 лет жизни там. Сейчас в моем родном городе на центрально площади на театре опера и балета висит Z-ига. Город родной, но прямо сейчас понятие Родины ушло куда-то во времени и пространстве.</p><p><br /></p><p>Понятие быть русским - пока все еще для кого русский язык является нативным. Если вы с Дагестана и сдали ЕГЭ на 100 баллов по русскому языку (честно сдали) - то для меня вы русский. Да, возможный акцент, или регион происхождения. Но какой-то общий культурный пласт, мемасики, смешная реклама в телевизоре из 90-х, пока это еще смотреть можно было. Пропаганда пыталась и все еще пытается отфильтровать, что "русские = это те, кто за президента, остальные типа не русские". Тут сраться с ними даже не хочется, ок, я не прошел тест. В моих определениях это деление на адекватность. </p><p><br /></p><p>Не знаю как у англичан, американцев, австралийцев. Понятие американец - это как москвич, первый вопрос должен быть откуда приехал. Второй - первое или второе поколение. А язык общий, видимо для меня это основное, а не паспорт. </p><p><br /></p><p>Государство - это что-то плохое, сразу бюрократией какой-то отдает. Страна - это все еще про географию, поля, березки, или что там у вас растет. </p><p><br /></p><p>Понятие "наши" - стало вообще сложным. Это как будто вы на футбольном матче, и болеете за какую-то конкретную команду. Я на футболе был раз 5-6 за последние годы, один раз в России, все остальное за границей. Чисто ради кругозора и развлечения. В России это была Португалия-Мексика(?), 2017, турнир перед ЧМ. Короче, у меня нет такого понятие как "наши".</p><p><br /></p><p>Войска РФ какого-то хера делают на территории Украины. Есть понятие мое и не мое, только первое лицо, и дополнение. Войска точно не мои. И Крым не мой. Видимо, с 2014го ментальный барьер на это слово. Президент тоже не мой. Там чуть раньше пошло. Единственное где проскальзывает, так это "нам крыш", известная игра слов про полуостров. Хотя "нам" и "наши" формально разные слова.</p><p><br /></p><p>В заключение, страна в жопе. И даже более одной. К сожаление, там чувствуется какое-то мнимое соревнование, одна скатилась, но зачем-то бомбит другую и хвастается, смотрите, у них жопа больше. </p>67108864http://www.blogger.com/profile/02888735973047043835noreply@blogger.com0tag:blogger.com,1999:blog-3489476522413546686.post-41939198400541363442022-04-10T11:50:00.000+04:002022-04-10T11:50:06.822+04:00Как это вывозить?<p>- Никак.</p><p><br /></p><p>Кукуха уже почти начала забивать на все. Но вскрылись новые факты. Опять несколько дней, и мозг принимает новую реальность. Да, российские войска массово (на текущий момент известно про несколько сотен; очевидно что числа станут сильно выше) умышленно убивает мирное население. </p><p><br /></p><p>Из тяжелого, это даже не фотографии тел. А снимок 6-ти летней девочки, на фоне могилы матери во дворе. И банки консервов, которые стоят на перекопанной земле. Это не взрослые ритуалы с поминками. Попытка покормить маму. </p><p><br /></p><p>Говорят, только у обезъян тоже трудно приходит принятие смерти. У всех остальных животных - типа, ну ок. Обезъяна-мать может неделями ходить с телом своего ребенка, процесс разложения тела, все остальные физико-химические процессы. Но не процесс принятия.</p><p><br /></p><p>У людей же, появился алкоголь, наркотики, способность говорить и сарказм в твиттере. Шутки про смерть, это сейчас как способ вывозить. Для всех, кто вне боевых действий, это далеко, за экраном интернета или пропаганды. </p><p><br /></p><p>Какие-то терракты в Ираке, Сирии и любой другой африканской стране. Это было все далеко. Сейчас эти все вещи также далеки для жителей Ирака, Сирии и любой другой африканской страны. </p><p><br /></p><p>В общем, хочется остаться хотя бы на уровне обезьяны. Еще несколько слоев, и "ну ок" станет реакцией на все. Отдельные виды обезьян тоже ходят с палками стенка-на-стенку, и там тоже все кроваво. Надеюсь, вы поняли, про какой уровень обезьяны я говорю.</p>67108864http://www.blogger.com/profile/02888735973047043835noreply@blogger.com0tag:blogger.com,1999:blog-3489476522413546686.post-25538612896010903282022-03-27T09:52:00.001+04:002023-06-12T13:12:21.789+04:00Хуй войне<p style="text-align: right;"> Миру тоже пизда.</p><p><br /></p><p>Прошел месяц безумия. Пишу тут, очевидно для себя, для собственной кукухи.</p><p><br /></p><p>Контекст, так получилось, что за месяц до всего этого я по работе переехал довольно далеко. Формально, это даже страна НАТО. Это персональный бложек, тут года 3-4 назад было 6 читателей. Скорее всего, возможно это прочитает пару симметрично знакомых человек. Товарищ майор, я буду писать местами с матом, потому что иначе сложно. Буду называть вещи, как они у меня в голове и на языке, другого к сожалению у меня нет. То, что за слово "война" уже светит 15 лет, я в курсе. Но это на Родине. Да и за слова из трех букв тоже. "Нет" и "мир", к сожалению, тоже в списке.</p><p><br /></p><p>А теперь к противоречиям. </p><p><br /></p><p>Мозг очень пластичная штука. В первый вечер было очень тяжко. Тут был вечер, когда все началось. Дышать было сложно. Из алкоголя дома было только вино, а впервые в жизни захотелось что-то тяжелее. Следующие недели 2 было просто тяжело. После месяца уже целый день можно пропустить новости.</p><p><br /></p><p>Полушария немного противоречат. Какое-то одно хочет "чтоб ты сдох", второе же "да не по христиански это, до тюрьмы пусть доживет".</p><p><br /></p><p>У нас коллега в Киеве, первые сообщения были уровня "у нас тут началось, видимо пока будет не до работы". Пару недель ночевал в подвалах, потом продолжил работать. Не знаю, как измерять поражения кукухи, это сложно и с долгими последствиями.</p><p><br /></p><p>Телевизора не видел более 10 лет, эпизодически у родственников только. Но я пока боюсь заглядывать в их мысли. После первых разговоров в первые дни что "санкции скоро снимут", "мы пенсионеры, вне политики", понятно кто это говорит. Разговаривать конечно нужно, пусть лучше от меня чем во дворе. Я пока не вывожу даже себя.</p><p><br /></p><p>Количество друзей и знакомых, кто поехал сразу - как бы есть, и не мало. Но да, айтишнеки, увы, такой мой круг общения. Уже в чатике в телеграме хочется видеть, в какой он таймзоне/сколько времени у него сейчас, сложно самому считать.</p><p><br /></p><p>Все относительно. Мои и наши страдания ничто по сравнению со смертями и потерями которые там происходят. Тут все в масштабах и расстояниях важно. Все человеческие жизни равны, но некоторые равнее (сами знаете откуда цитата). То что полгода назад талибы пришли в Афганистане и жизнь у нескольких миллионов человек изменилась, да, это далеко и новостной фон на месяц.</p><p><br /></p><p>Когда это конкретные люди, города, это более чем персонально. </p><p><br /></p><p>Понятие коллективной ответственности, увы, не существует. В больших бюрократиях придумали митинги (которые корпоративные), где решают кто же это будет делать, размазывая тонким слоем на никого. С одной стороны все поучаствовали в обсуждении, в итоге там и осталось на никого. </p><p><br /></p><p>Понятие "наши", "русские", "Родина" - очень противоречиво. Пропаганда пытается натянуть "русские = которые за того парня". Очевидно, что линия есть. Мой президент например, сидит. Официально ему вкатили 9 лет строгача, но на новостной ленте это уже капля в море. По ту стороны от линии отделения видно, что это не более чем набор букв. </p><p><br /></p><p>Я таки довольно оптимист, это все закончится до 2036-го года. Мой прогноз был что 27 лет - это период полураспада. И конституция РФ, и Лукашенко, и рокерский клуб. Пока конечно, еще долго вниз, уверенность в завтрашнем дне (читать как "дно") будет поддерживаться. </p><p><br /></p><p>Довольно сумбурно, но это чисто поток сознания из кукухи. Всем мир, но это тоже уже экстремизм в отдельной выделенной стране. </p>67108864http://www.blogger.com/profile/02888735973047043835noreply@blogger.com0tag:blogger.com,1999:blog-3489476522413546686.post-46194346664670586122019-07-03T21:20:00.001+04:002019-07-03T21:20:34.953+04:00Погодный бот<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
Немного саморекламы пет-проектика.<br />
<br />
<a href="https://t.me/wikiWeatherbot">https://t.me/wikiWeatherbot</a> , или же <span style="font-family: "Helvetica Neue"; font-size: 14px;">@wikiWeatherbot - бот в телеграмме, который отслеживает осадки по заданным гео-точкам.</span><br />
<div class="p1">
<br /></div>
<div class="p1">
- Зачем это? </div>
<div class="p1">
- Раньше были прогнозы, уровня "вероятность дождя на завтра 40%". Сейчас метеорадары отслеживают и прогнозируют осадки с точностью до километра и десятка минут.</div>
<div class="p1">
<br /></div>
<div class="p1">
- Зачем это если есть Яндекс.Погода?</div>
<div class="p1">
- Тут можно догадаться, откуда я беру данные. Да, говорят в мболильном приложении даже уведомляет, что в центре города "осадки не окончатся в течении часа". Проблема в том, что "центр города" и что обычно нужно, это как минимум две разные точки. </div>
<div class="p1">
<br /></div>
<div class="p1">
Можно добавить дом/работу/дачу и стадион, в разных городах/частях города. Бот будет отслеживать и сообщать об осадках, если они прогнозируются в течении двух часов. Диаметр Москвы составляет 40 км, между домом и дачей даже в провинции расстояние довольно значительное. В одном месте ливень, в другом - ни облачка.</div>
<div class="p1">
<br /></div>
<div class="p1">
Работает на территории России, СНГ и Европы (пожалуй, только Лондон не цепляет).</div>
<div class="p1">
<br /></div>
<div class="p1">
Чат можно замютить, ибо когда целый день идет дождь, то как бы и так понятно. В любом случае, принудительно информирует только светлое время суток.</div>
<div class="p1">
<br /></div>
В общем, после старта бота - просто киньте ему гео-локацию (в приложении внизу есть "скрепка", это подменю). Потом можно переименовать, принудительно проверить и прочее. Справка есть.<br />
<style type="text/css">
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px 'Helvetica Neue'}
</style></div>
67108864http://www.blogger.com/profile/02888735973047043835noreply@blogger.com0tag:blogger.com,1999:blog-3489476522413546686.post-88992261894003421722018-01-23T21:24:00.002+04:002018-01-23T21:24:54.627+04:00Наскальная живопись и боль<div dir="ltr" style="text-align: left;" trbidi="on">
Запись больше для себя, сохранить текущий стейт продвижения по scala. <strike>Без StateMonad.</strike><br />
<br />
И так, прошло 4.5 года, как я <strike>как проститутка, за деньги</strike> на работах на scala.<br />
<br />
Недавно прошла внешняя мысль, что чем больше ты испытываешь боль, тем больше продвижения по ФП. Тонко/философско, что-то есть. Вообще обучение и боль связаны, если не БДСМ.<br />
<br />
Короче:<br />
<br />
Есть немного котов, но от туда в основном моноид. Плюсов kittens, он генерит для котов моноиды для ваших АДТ. Монатки, ну стандартные, котовых и скалазишных явно нет. Пока нет боли, не пройдено. Пару мест где вызывает M.traverse/sequence. Traverse пока в процессе осознания. МонадТрансформеров нет, потому как в пару мест достаточно traverse.<br />
<br />
Type constructor, то что погружение в F[_] - есть не более двух.<br />
<br />
Тайпклассы - очевидно есть, торчат где только можно/модно.<br />
<br />
Фри - ничего нет. Далекое понимание, но близкого к боли нет.<br />
<br />
Shapeless - есть пару использований. В целом прикольно и больно. И правильно.<br />
<br />
Сейчас пошел кусок akka/akka-streams. Очень круто. 5-6-7-8К rps (ну, не совсем rps, item-ов из kafka) на одной машине, вращаешь данными по правилу правой руки. В akka пока только persistence, sharding пока в прототипе. Иного пока не надо.<br />
<br />
Макросов нет, scala.meta - вертится на языке, но без боли.<br />
<br />
Стандартный slick && play.json. На другое смысле смотреть нет, боли нет.<br />
<br />
Рекурсивных схем нет, были краткосрочные 10 секундные интервалы времени когда что-то открывалось. Но без боли.<br />
<br />
Сопряжений и профункторов тоже нет.<br />
<br />
Ковариации и контравариации - есть. Внезапно по 1 инстансу. Внезапно начинаешь испытывать боль, понимаешь что не хватает одного символа, с первой попытки интуитивно ставишь верно.<br />
<br />
Ко-вещей - нет.<br />
<br />
Оптики тоже нет, ради одного места не стал добавлять. Извините, там copy(copy), не глубже. Сплю спокойно.<br />
<br />
Чистоты как в haskell - нет. Кое-где это вызывает боль и кровь в глазах. НЕ ХВАТАЕТ.<br />
<br />
Выводы: боль - это хорошо. Мир - это война, свобода - это рабство, незнание - сила.<br />
<br />
<br /></div>
67108864http://www.blogger.com/profile/02888735973047043835noreply@blogger.com0tag:blogger.com,1999:blog-3489476522413546686.post-2556693148342228842017-08-07T03:40:00.002+04:002017-08-07T03:40:53.661+04:00Про бегуна на длинные дистанции<div dir="ltr" style="text-align: left;" trbidi="on">
<span class="status_select" style="background-color: white; cursor: pointer; font-family: "Open Sans"; font-size: 18px;" title="Нажмите
для выделения">Десять тысяч и всего один забег<br />Остался. (С) В. Высоцкий</span><br />
<span class="status_select" style="background-color: white; cursor: pointer; font-family: "Open Sans"; font-size: 18px;" title="Нажмите
для выделения"><br /></span>
<span class="status_select" style="background-color: white; cursor: pointer; font-family: "Open Sans"; font-size: 18px;" title="Нажмите
для выделения">Таки Саша М. замотивировал бегать. Записались на 10к в сентябре еще прошлым ноябрем. В апреле потихоньку начал тренироваться.</span><br />
<span class="status_select" style="background-color: white; cursor: pointer; font-family: "Open Sans"; font-size: 18px;" title="Нажмите
для выделения"><br /></span>
<span class="status_select" style="background-color: white; cursor: pointer; font-family: "Open Sans"; font-size: 18px;" title="Нажмите
для выделения">Бег сам по себе довольно бюджетный спорт. Более шахмат, конечно. Но не хоккей, например, или биатлон. Все что реально нужно, это нормальные кроссовки и нормальные часы/пульсометр. </span><br />
<span class="status_select" style="background-color: white; cursor: pointer; font-family: "Open Sans"; font-size: 18px;" title="Нажмите
для выделения"><br /></span>
<span class="status_select" style="background-color: white; cursor: pointer; font-family: "Open Sans"; font-size: 18px;" title="Нажмите
для выделения">Увы, в России (провинции) купить часы и кроссовки практически не возможно. Не знаю как в столицах, но тут ритейлеры возят с коэффициентом 2-2.5 по цене. В Ростове-на-Дону кроссовки есть (Топ-Лига), но как-то вне основных путей. Я там не был, просто Саша А. там купила в командировке. </span><br />
<br />
<span class="status_select" style="background-color: white; cursor: pointer; font-family: "Open Sans"; font-size: 18px;" title="Нажмите
для выделения">Вышло, что в Европе получается адекватнее, и еще taxFree работает. Часы Garmin Forerunner 235 вышли около 15к, кроссовки Asics Cumulus - 10к. </span><br />
<span class="status_select" style="background-color: white; cursor: pointer; font-family: "Open Sans"; font-size: 18px;" title="Нажмите
для выделения"><br /></span>
<span class="status_select" style="background-color: white; cursor: pointer; font-family: "Open Sans"; font-size: 18px;" title="Нажмите
для выделения">Всякие wristBand от Китая не смотрите, оно должно пульс непрерывно мерять, а не раз в минуту. GPS, куча аналитики и графиков, социалочка с друзьями, в простом Китае этого нет.</span><br />
<span class="status_select" style="background-color: white; cursor: pointer; font-family: "Open Sans"; font-size: 18px;" title="Нажмите
для выделения"><br /></span>
<span class="status_select" style="background-color: white; cursor: pointer; font-family: "Open Sans"; font-size: 18px;" title="Нажмите
для выделения">Начинал в начале апреля (еще снег и лед) где-то с 4к за 6:40 на км. Масса зимняя - 95кг. Кроссовки образовались ближе к концу мая. Там через неделю перешел на 7.5к. </span><br />
<span class="status_select" style="background-color: white; cursor: pointer; font-family: "Open Sans"; font-size: 18px;" title="Нажмите
для выделения"><br /></span>
<span class="status_select" style="background-color: white; cursor: pointer; font-family: "Open Sans"; font-size: 18px;" title="Нажмите
для выделения">Сейчас <strike>я уже 4 года пишу на Scala и чувствую себя отлично</strike> спокойно делаю 10к за 50:20 (надо бы в течение месяца/двух пробить 50 минут), то есть 5:02 на км. Масса 82кг, то есть от зимнего ушло 13кг (после майских и Питера все равно был 95кг). По массе еще точно 3-5кг на животе болтается, масса вторична, просто бегать с лишними 10-13кг оно по определению тяжелее.</span><br />
<span class="status_select" style="background-color: white; cursor: pointer; font-family: "Open Sans"; font-size: 18px;" title="Нажмите
для выделения"><br /></span>
<span style="font-family: Open Sans;"><span style="background-color: white; font-size: 18px;">Все бегал с оглядкой на пульс, последние недели две тупо по темпу (стабильно 5:15, или чуть быстрее по ощущениям), последний км на максимуме. Вообще не устаешь. До этого чисто по ощущениям первые два км идут быстро, но и сам потом упарываешься. Не надо так, бегайте в стабильном темпе.</span></span><br />
<span style="font-family: Open Sans;"><span style="background-color: white; font-size: 18px;"><br /></span></span>
<span style="font-family: Open Sans;"><span style="background-color: white; font-size: 18px;">Еще, в жару (все что выше 20) бегать сложно. Градусов 15-17 - идеально. Но в этой стране либо непрерывный дождь, либо жара в 25, либо стадион закрыт. В жару я решил более 7к не бегать, там обезвоживание что-то быстро идет, вообще не кайф.</span></span><br />
<span style="font-family: Open Sans;"><span style="background-color: white; font-size: 18px;"><br /></span></span>
<span style="font-family: Open Sans;"><span style="background-color: white; font-size: 18px;">До бега часа 4-5 вообще не есть (иначе больно), после вы сами не захотите. Двойная экономия. </span></span><br />
<span style="font-family: Open Sans;"><span style="background-color: white; font-size: 18px;"><br /></span></span>
<span style="font-family: Open Sans;"><span style="background-color: white; font-size: 18px;">Еще, на такой дистанции с меня выходит 1-1.5 кг, очевидно воды. Рекомендуют восстанавливаться специальными жидкостями, а не просто водой. Там состав по солям/электролитам ближе к человеческому (гуглится, можно купить или что-то самому делать).</span></span><br />
<span style="font-family: Open Sans;"><span style="background-color: white; font-size: 18px;"><br /></span></span>
<span style="font-family: Open Sans;"><span style="background-color: white; font-size: 18px;">В общем, мотивируйтесь.</span></span></div>
67108864http://www.blogger.com/profile/02888735973047043835noreply@blogger.com0tag:blogger.com,1999:blog-3489476522413546686.post-26148374172649616952016-08-18T01:47:00.000+04:002016-08-18T01:47:20.016+04:00Про м*<div dir="ltr" style="text-align: left;" trbidi="on">
Нет, не про мудаков.<br />
<br />
Тут в функциональном интернете ходит поверье, что чтобы понять м*, ты просто обязан написать про них <strike>монографию</strike> пост, либо в крайнем случае твит. После этого ты теряешь все способности объяснить окружаюшим, что есть м*.<br />
<br />
Так вот...<br />
<br />
Это наиболее простое объяснение, которое я когда-либо встречал:<br />
<br />
<a href="https://www.quora.com/Can-I-understand-monad-as-a-container-performing-certain-computation/answer/Bartosz-Milewski?share=a7312bea">https://www.quora.com/Can-I-understand-monad-as-a-container-performing-certain-computation/answer/Bartosz-Milewski?share=a7312bea</a><br />
<br />
В молодости ты все думаешь, что контейнер - это некая структура данных. Так вот... забейте, это не так. Думайте, что это контейнер (никакой STL тут не причем).<br />
<br />
Самое важное, что есть в функциональном программировании (и вообще в программировании. и мире в целом) - это композиция ("композибилити"). Это когда выход одного может быть входом другого. Для ФП - это как бы базис. Хваленное ООП не такое, тут понятие вход/выход выходит за рамки ООП. Ну а в мире, один из самых простых примеров - вилка-розетка. Это только потом Lego появилось.<br />
<br />
Так вот... Иногда удобно, когда у вас выход чем-то обернут, назовем это "чем-то" контейнером. И хочется сохранить композицию. То есть следующая функция берет оригинал, и возвращает опять обертку. И мы это композируем.<br />
<br />
В мире java до сих пор (2016 год у меня на дворе) любят null. Все-таки немного про мудаков. Всякие вариации nullable, Option[_] и есть контейнер. Мудаки все равно будут утверждать что null быстрее работает, что-нибудь про боксинг говорить. Мудаки как есть. Закончили про них.<br />
<br />
Еще контейнер - список. Функция возвращает не просто один "детерминированный" вариант, а целый список. Список пустой - функция загнулась. Список из одного элемента, единственный результат. Несколько элементов - резветвление "недетерминированных" вычислений (тут кавычки нужны, оно конечно все детерминированно).<br />
<br />
Представьте, что задачу о N-ферзях считаете, либо что-то другое рекурсивно-переборное. То есть если вернулся пустой список, то все, ветка вычислений дальше не пойдет. Если несколько вариантов, то дальше на один уровень для каждого варианта углубляемся<strike> и машем</strike>.<br />
<br />
Аналогия с прямолинейным Option/nullable тут на лицо. Если - косяк, то - косяк. Иначе живем. Можно обернуть этот косяк к красивым сообщение об ошибке. Так вот... у нас есть еще один контейнер.<br />
<br />
А фьючи..? Например поэтому не хочется говорить структура данных, это именно контейнер.<br />
<br />
Про упоротых хаскеллистов я пока не буду, мне рановато. Все равно IO() немного маджик, там как-то скрыта ссылка на внешний мир.<br />
<br />
State он прикольный, но я тоже ничего здесь писать не буду. У меня местами есть подозрение, что в какие-то моменты времени до меня доходят Free M* и trampoline. Трансформеры пока мимо кассы.<br />
<br />
А так реальный пример с широкими массами: заметил у Сереги на работе код на swift-e. Тот унылый треугольник кода, где пять вложенных if-ов, в каждом проверка на null и что-то деланье. Выразил свое негодование. Через неделю проверил, там 4-5 вынесенных мини-функций, но все равно по факту лапша. Континуэшенами не втирал, но близко. Оказалось, что в swift у Option и так есть map/flatMap. Переписали в 4 строки, ни одного if-a.<br />
<br />
В первые полгода сначала кажется, какой же классный синтаксис, for работает и со списками, и с фьючами, и с Option. Так вот, это не синтаксис, это и есть м*.<br />
<br />
ЗЫ. Вот и философский вопрос. Предположим есть язык, в котором достаточно богатая типизация, м* вынесены как абстракция, но нет for-comprehension. Вопрос, на который день он появится?</div>
67108864http://www.blogger.com/profile/02888735973047043835noreply@blogger.com1tag:blogger.com,1999:blog-3489476522413546686.post-91649500061787300222016-05-10T01:33:00.001+04:002016-05-10T01:33:19.295+04:00Изоморфизм с едой<div dir="ltr" style="text-align: left;" trbidi="on">
Таки услышал хорошую мысль от Erik Meijer, про всякие agile&&scrum. Делюсь.<br />
<br />
Вот в McDonalds работает куча необразованного персонала тинейджерского возраста, им нужно куча инструкций/бизнес-процессов, что бы из полуфабрикатов (читай, тоже так себе продукты) сделать что-то более-менее съедобное.<br />
<br />
С другой стороны в ресторане есть шеф-повар, который сам отвечает за покупку продуктов, у него каждый день различное меню, его едой наслаждаются. Ему не нужна куча инструкций и досок с отрывными бумажками. Это называется профессионализм.<br />
<br />
Конец цитаты (вольный пересказ).<br />
<br />
Все эти ваши методологии (с) направлены на:<br />
- взаимодействие с "верхами" (заказчик/клиент/менеджер)<br />
- показать прозрачность разработки/планирования<br />
- ...<br />
<br />
Но никаким образом не сказываются на внутреннем качестве кода. Тесты/CI/code_review как-то мимо. Оно и понятно, что scrum-ы и для производства автомобилей применимо, где code review отсутствует. Так и получается, что все все равно говорят на разных языках.<br />
<br />
А выход у программиста - это код. И с моей точки зрения, нужно все метрики вводить на код. Хороводы у костра - это дистракт от кода, и программистам он вообще теплее не делает (а всем остальным руко-водителям как бы теплее).<br />
<br />
Вместо получения нормальной спецификации по задаче (да, это сложно, но это как-то нужно делать) вводят кучу *-мастеров, по словам Erik-а, вообще на сетевую пирамиду похоже.<br />
<br />
ЗЫ. После ухода с МС, Мейер как-то много где тусил. А потом как-то пропал. Вообще, локально обсуждали, думали опять с кем-то поругался. Оказалось, его хорошенько по здоровью скосило, на полгода. Вывод: не строить домыслов.</div>
67108864http://www.blogger.com/profile/02888735973047043835noreply@blogger.com0tag:blogger.com,1999:blog-3489476522413546686.post-29255994087787683662016-05-06T22:00:00.001+04:002016-05-06T22:00:43.787+04:00Алгеброидная хроника<div dir="ltr" style="text-align: left;" trbidi="on">
Организованная группа лиц в поле пыталась извлечь корень из единицы. В последнее время участились случаи использования таких корней при производстве пучков ко-гомологий, контрамодулей и других психотропных веществ.<br />
<br />
РосМатриксКонтроль удаленно зафиксировал незаконное использование размерности больше 3, на место предполагаемого преступления выехала оперативная полугруппа "Анти-Тензор". Подозреваемые задержаны.<br />
<br />
Главарь группы (погоняло Моноид), ранее судимый за подобные ко-преступления, имеет характеристику 7, что далеко от идеала. Согласно аксиомам, Универсум гарантирует бесплатного алгеброида для данного процесса. Остальные элементы ранее не выходили за пределы Банахова пространства и отпущены под подписку о невычислениях.<br />
<div>
<br /></div>
<div>
За данное преступление согласно 1729 статье математического кодекса виновному грозит до 2-х лет вычислений на дистрибутивной решетке, а так же запрет на использование кватернионов и комплексных чисел до 5-ти лет. Пункт 2 статьи 1729, за те же деяния, совершенные группой лиц по предварительному сговору, запрещает занимать любые вычислительные должности на срок до 7 лет.</div>
<div>
<br /></div>
<div>
Если вам что-либо известно о данной группе, либо об аналогичных преступлениях, просьба обратиться на ближайшую кафедру. Реверсивность и вознаграждение гарантируется.</div>
</div>
67108864http://www.blogger.com/profile/02888735973047043835noreply@blogger.com0tag:blogger.com,1999:blog-3489476522413546686.post-15860977348609356772016-04-06T01:35:00.001+04:002018-09-17T20:19:19.113+04:00Объявление (аренда квартиры)<div dir="ltr" style="text-align: left;" trbidi="on">
<strike>Таки извиняюсь, личное, и объявление.</strike><br />
<strike><br /></strike>
<strike>Сдам 2-х комнатную квартиру, Ижевск, район ГорСовета, 9 этаж, вид на Металлург.</strike><br />
<strike><br /></strike>
<strike>Кухня вся (газ плита, микроволновка, холодильник), стиральная машина, пылесос, 2 раскладных дивана, интернет.</strike><br />
<strike><br /></strike>
<strike>15тр + счетчики. На длительный срок(!). Депозит в размере 1 месяца, так как без риэлторов, то других платежей нет. Сильное желание, чтоб вы меня знали (и симметрично).</strike><br />
<br />
Таки не актуально. Всем спасибо.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-aDtnXIitti0/VwQsAzuUPKI/AAAAAAAANRI/EHCJYmxlCsoK-fGNL59QNlVhYd70UoC7w/s1600/2016-02-27%2B17-02-27.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://4.bp.blogspot.com/-aDtnXIitti0/VwQsAzuUPKI/AAAAAAAANRI/EHCJYmxlCsoK-fGNL59QNlVhYd70UoC7w/s320/2016-02-27%2B17-02-27.JPG" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-idkd8_RYA24/VwQtPSoqITI/AAAAAAAANSA/Q5bmKJOHnEY6GvdqIKaq2RmDVNnlBaStw/s1600/2015-10-26%2B15-01-46.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://3.bp.blogspot.com/-idkd8_RYA24/VwQtPSoqITI/AAAAAAAANSA/Q5bmKJOHnEY6GvdqIKaq2RmDVNnlBaStw/s320/2015-10-26%2B15-01-46.JPG" width="240" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-7yR1jbNl-ls/VwQtPO9SXmI/AAAAAAAANSA/4t07Ef5LTUwu9On9GpUFinIEbrWIpHWQw/s1600/2015-10-26%2B15-01-58.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://2.bp.blogspot.com/-7yR1jbNl-ls/VwQtPO9SXmI/AAAAAAAANSA/4t07Ef5LTUwu9On9GpUFinIEbrWIpHWQw/s320/2015-10-26%2B15-01-58.JPG" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-i4wgVUBzNyw/VwQtPPyI1WI/AAAAAAAANSA/D-PEUFLz-9cr77zGmTt899OFZ37IYVxaQ/s1600/2015-10-26%2B15-02-11.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://3.bp.blogspot.com/-i4wgVUBzNyw/VwQtPPyI1WI/AAAAAAAANSA/D-PEUFLz-9cr77zGmTt899OFZ37IYVxaQ/s320/2015-10-26%2B15-02-11.JPG" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-3znH5gNJX7o/VwQtPkWo1JI/AAAAAAAANSA/i76jAfiEP8kXgECh6C5UoHnR1WAM46jQw/s1600/2015-10-26%2B15-02-24.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://4.bp.blogspot.com/-3znH5gNJX7o/VwQtPkWo1JI/AAAAAAAANSA/i76jAfiEP8kXgECh6C5UoHnR1WAM46jQw/s320/2015-10-26%2B15-02-24.JPG" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-XeveTP3lOKs/VwQtP8YIKtI/AAAAAAAANSA/8fiaAF12goUj5nEIzDOCaQcM9u6yNdF_Q/s1600/2015-10-26%2B15-04-31.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://4.bp.blogspot.com/-XeveTP3lOKs/VwQtP8YIKtI/AAAAAAAANSA/8fiaAF12goUj5nEIzDOCaQcM9u6yNdF_Q/s320/2015-10-26%2B15-04-31.JPG" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-fbFxJTFGjz4/VwQtP9K8TXI/AAAAAAAANSA/tHxbkJOs26wII1mpeuImtNXiKJ2guJX_g/s1600/2015-10-26%2B15-04-50.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://2.bp.blogspot.com/-fbFxJTFGjz4/VwQtP9K8TXI/AAAAAAAANSA/tHxbkJOs26wII1mpeuImtNXiKJ2guJX_g/s320/2015-10-26%2B15-04-50.JPG" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-vuikDrObAvc/VwQtQPg2sXI/AAAAAAAANSA/35llN6VSNRIJV1aLL1CW2XJQZsq-oiGVQ/s1600/2015-10-26%2B15-05-02.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://1.bp.blogspot.com/-vuikDrObAvc/VwQtQPg2sXI/AAAAAAAANSA/35llN6VSNRIJV1aLL1CW2XJQZsq-oiGVQ/s320/2015-10-26%2B15-05-02.JPG" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-rEzJtnrYFMg/VwQtQSiCqLI/AAAAAAAANSA/SXMOC-RKg30hiEvDWH33FbqR5Uq-itrCQ/s1600/2015-10-26%2B15-05-17.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://1.bp.blogspot.com/-rEzJtnrYFMg/VwQtQSiCqLI/AAAAAAAANSA/SXMOC-RKg30hiEvDWH33FbqR5Uq-itrCQ/s320/2015-10-26%2B15-05-17.JPG" width="240" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-5hBGtudPnFI/VwQtQrN6-CI/AAAAAAAANSA/u5op91RnkGwh2Q2rM92Brha1lQNWFa7Iw/s1600/2015-10-26%2B15-05-31.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://3.bp.blogspot.com/-5hBGtudPnFI/VwQtQrN6-CI/AAAAAAAANSA/u5op91RnkGwh2Q2rM92Brha1lQNWFa7Iw/s320/2015-10-26%2B15-05-31.JPG" width="240" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-aV7Ov8S3t-M/VwQtQzWPdCI/AAAAAAAANSA/iBGZwzxFgBY8q11X24qhVLKytbvZu1zYA/s1600/2015-10-26%2B15-05-42.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://2.bp.blogspot.com/-aV7Ov8S3t-M/VwQtQzWPdCI/AAAAAAAANSA/iBGZwzxFgBY8q11X24qhVLKytbvZu1zYA/s320/2015-10-26%2B15-05-42.JPG" width="240" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-09lp0uquTpk/VwQtRCoxhAI/AAAAAAAANSA/eUKlwPWUQT0G83uowBurODqzL3KmPOoew/s1600/2015-10-26%2B15-08-46.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://4.bp.blogspot.com/-09lp0uquTpk/VwQtRCoxhAI/AAAAAAAANSA/eUKlwPWUQT0G83uowBurODqzL3KmPOoew/s320/2015-10-26%2B15-08-46.JPG" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-aIcjrKSd0CM/VwQtROZA43I/AAAAAAAANSA/otn1YNkJrAsNUgtLYbTyv71gDDgUXjhSQ/s1600/2015-10-26%2B15-09-06.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://4.bp.blogspot.com/-aIcjrKSd0CM/VwQtROZA43I/AAAAAAAANSA/otn1YNkJrAsNUgtLYbTyv71gDDgUXjhSQ/s320/2015-10-26%2B15-09-06.JPG" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-E-5kS70iXno/VwQsAodZwNI/AAAAAAAANRI/sOy0hYkf_PI6C5rspwQhtJhHAeODOlfAQ/s1600/2016-02-27%2B17-01-08.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://3.bp.blogspot.com/-E-5kS70iXno/VwQsAodZwNI/AAAAAAAANRI/sOy0hYkf_PI6C5rspwQhtJhHAeODOlfAQ/s320/2016-02-27%2B17-01-08.JPG" width="320" /></a></div>
<br /></div>
67108864http://www.blogger.com/profile/02888735973047043835noreply@blogger.com0tag:blogger.com,1999:blog-3489476522413546686.post-41255499246721524112016-03-04T00:17:00.000+04:002016-03-04T00:17:30.604+04:00Scala<div dir="ltr" style="text-align: left;" trbidi="on">
Обнаружил, что у меня здесь два черновика с таким заголовком. Оба удалил, пишу еще один пост про это.<br />
<br />
Собственно, Scala is awesome. Оосам. За 2.5 года (чуть более чем) профессиональной (100% и свободное время) понимаю, что это что-то иное, чем ... язык.<br />
<br />
В принципе, язык и есть способ мышления. Все еще поражает, что у меня есть рост (хотя вру, не поражает), но рост есть.<br />
<br />
Начал отличать здоровую от нездоровой функциональщины. Пока у нас в коде есть 2-3 кб нездоровой функциональщины. Нездоровая - это когда ты и твоя команда не понимает, как оно работает. В общем, у нас есть немного shapeless с небольшими включениями HList-ов. Базовую концепцию понять не сложно, но у нас кусок нездоровой. В принципе, я понимал, что это можно сделать магией, спросил на StackOverFlow, и получил кусок магии. Суммарно 2-3 дня вкуривания, и ... не помогло.<br />
<br />
Еще в 2-3 местах хочется scalaz.Functor.lift, но не критично. По факту хочется лифтинга с базовой функции на коллекцию, что еще внутри параллелизм был. Одного метода вручную должно хватить.<br />
<br />
Еще у нас есть имплициты (неожиданно, правда?), очевидно, у всех есть. А еще есть имплицит, который из одного имплицита достает что надо. То есть такой рекурсивный имплицит на один уровень.<br />
<br />
Еще у нас есть 4Тб сырых данных и 9.5 млрд строчек там. Это так, что б померяться. Правда, это вся история, а не за сутки.<br />
<br />
Еще у нас нет null-ов. Вообще. Zero. Хотя NPE был на этой неделе, но там запрос в легаси БД, где джоиняться 10 таблиц (какие-то дебилы писали), и на выходе где-то пусто оказалось. Но дальше этого null-ы не пройдут. ScalaStyle проверяет, что в коде нет слова null. И точка.<br />
<br />
Еще у нас нет var-ов. Лукавлю, есть. Есть два итератора, и как-то внутри итераторов без стейта вообще сложно, особенно, если он нужен. И еще в одном/двух местах, но там не я, и надо выпиливать.<br />
<br />
Еще понимаешь, что дело не в языке, а в людях/головах. Бывает отвернешься, смотришь коммит, а там на тебя смотрит Try[Option[List[String]]]. Или null, или var, однажды вообще break торчал. А ты такой, берешь лопату, и говоришь: "Не надо так". Потом идешь в continuous integration и добавляешь правило, что оно само следило за порядком.<br />
<br />
А однажды, я глазами обнаружил пласт копи-пасты, пришлось свой плагин для sbt писать, чтоб это безобразие контролировать.<br />
<br />
Еще был кусок макроса. Но нашлась библиотека, которая состоит из этого макроса. Enum собирать в коллекцию. Тот же рефлекшн, только компайл-тайм.<br />
<br />
Еще в одном месте доабстрагировались, что есть мини-OLAP, с иерархической агрегацией, и все это в N строчек кода. N - мало.<br />
<br />
А еще я понимаю, что хвастаться - не хорошо.<br />
<br />
А еще есть чудики, которые пишут, что язык ХХХ - говно, мы перешли на Go, и все стало круто. Другие, что компания, занимающаяся языком YYY произвела ребрендинг (поменяла название), что языку YYY - хана.<br />
<br />
Из всего этого я понял, что мир не одномерен (читай, язык ХХХ - лучший), а как минимум трехмерен [команда, задача, технологии]. Но об этом кричат люди, которые даже не в команде.<br />
<br />
В общем, не будьте плоскими. Можно считать это тостом.</div>
67108864http://www.blogger.com/profile/02888735973047043835noreply@blogger.com0tag:blogger.com,1999:blog-3489476522413546686.post-59900390053440809702015-10-11T02:35:00.000+04:002015-10-11T02:35:43.101+04:00О хорошем<div dir="ltr" style="text-align: left;" trbidi="on">
Что такое "хороший программист". Мои 50центов.<br />
<br />
Наверняка у вас в голове есть тоже какое-то определение. Есть еще всякие слова типа Lead/ведущий, в английском еще странная позиция уровня "Staff engineer", что в иерархии может быть довольно крутым (даже после lead).<br />
<br />
Сейчас у нас импортный коллега в импортном офисе в linkedin выставил что он "директор по инфраструктуре и облачным решениям". По факту он единственный сис. админ. Директор - оно конечно звучит, но факт не отменяет.<br />
<br />
Еще у себя у университете я видел "ведущего программиста". Так как это бюджетная организация, то ставка "ведущего программиста" подразумевала открывание аудитории с компьютерами до начала занятий и закрытие оной после окончания занятий. Российское понятие "трудовая книжка" не описывает всю сложность выполняемых работ, потому безликая надпись "ведущий программист" в принципе уравнивает всех несмотря на цветовую дифференциацию штанов на этой планете.<br />
<br />
Сейчас в нашей команде 3 человека. Можно выбрать любой титул для linkedin, все равно санитары его не читают. Если что, я им лучше про аппликативные функторы рассказывать буду, чем вице-президентом представляться.<br />
<br />
Сейчас (на ближайщий год) мое определение "хорошего программиста" - использование подходящего уровня абстракции и способность переходить/опускаться/подниматься на нужный уровень.<br />
<br />
Да, это довольно абстрактно.<br />
<br />
Но это лучше чем "я руководил коллективом и 15 программистов", "в начале 2000-х я писал на COM+/драйвера для принтера". Очевидно, что есть куча специализаций, и сравнить вообще что-то просто бессмысленно. Опыт/знание/умение не численный показатель.<br />
<br />
Как же тогда оценить "подходящий уровень абстракции", спросит надоедливый читатель? Если коротко, я не знаю.<br />
<br />
Есть куча нормальных задач, где надо опускаться сверху вниз. При условии, что вы это сами можете. Двигаться вверх обычно сложнее, и в задачах редко можно шагнуть на 1-2 шага вверх без сложностей.<br />
<br />
Двигаться вниз на 2-3 шага довольно занимательно. Но дальше вы снова упретесь в абстракции. Либо там уже аксиоматика, либо абстракции, близкие к аксиомам. Можно опускаться в квантовую механику (заметьте, что "опускаться"). Понятие числа вообще сложно, тем более вещественного. А основания логики и философские основания математики вроде выглядят как "копание вниз", все равно упиратесь. Так что копание вниз и абстрагирование вверх <strike>одинаково</strike> сложно.<br />
<br />
Разные уровни абстракции приводят к разным языкам. И не только в программировании. Порефлексируйте на эту тему самостоятельно.<br />
<br />
Вообще, все вышенаписанное применимо в абстрактной форме к тем вещам, где есть абстракции. К землекопам, роющим троншеи для ГВС оно слабо применимо. Можно конечно, перейти из 2d в 3d, но дальше не получится. </div>
67108864http://www.blogger.com/profile/02888735973047043835noreply@blogger.com0tag:blogger.com,1999:blog-3489476522413546686.post-23508858973660136102015-10-02T23:44:00.003+04:002015-10-02T23:44:39.508+04:00почти как в одной стране<div dir="ltr" style="text-align: left;" trbidi="on">
Кстати, а откуда в числе \pi все есть?<br />
<br />
Ну, иррациональное и трасцендентное. В \log{2}{10} как бы тоже, и как континуум других чисел, но в логарифме как-то иначе. А про \pi все говорят/бьют себя в грудь, будь то сами видели. Тут можно вспомнить бородатый анекдот про Чака Норисса. Что тот в качестве пароля использует последние 8 знаков числа \pi.<br />
<br />
Еще меня только на прошлой неделе осенило, что в числе \pi есть число \pi. Причем дважды (очевидно что больше ) ). "Легко видеть, что " если взять первые $n$ знаков числа \pi, то они с какой-то позиции содержатся. Предельный переход по $n$ (не совсем уверен, законно ли это).<br />
<br />
Причем та копия, тоже содержит число \pi. Тут уровень рефлексии зашкаливает.<br />
<br />
Это все рассуждения, при условии что в \pi содержится любая конечная последовательность.<br />
<br />
А та наркомания от Рамануджана, где \sqrt (\pi * \ e / 2) = цепная дробь + гипергеометрический ряд. Оно вообще доказано, либо у Рамы много чего из сонника есть. Следуют ли отсюда какие-то свойства \e ?<br />
<br />
Так же недавно еще наркомания в голову пришла. Возможно, многие уже в курсе, что 1+2+3+4+... = -1/12? Если нет, так вот знайте. Даже я знаю про 3 доказательства на уровне школы. Товарищи с МехМата сказали, что это вообще очевидно следует из Гамма-функции, но я не такая.<br />
<br />
Так вот, говорят что физики это натянули на теории струн, и наша вселенная вообще 26 мерная, причем из этих -1/12 они взяли 12, помножили на 2 и еще добавили 2. Странные какие-то. Пусть, я своими глазами вообще только проективную геометрию вижу, да и об горячий чайник рукой обжигаюсь.<br />
<br />
Если же паралелльные вселенные существуют, то в них тоже 1+2+3+...=-1/12, тогда если еще и поверить физикам и неведомым струнам, то пространство тоже 26-мерное. Мирок изоморфный нашему получится. Такой же, с инфляцией и ценами на гречку. А это несколько печалит. Хотелось бы что-то иное. Это, если конечно, физики нас со струнами не обманывают. А я только название знаю, и слишком доверчивая.<br />
<br />
<br /></div>
67108864http://www.blogger.com/profile/02888735973047043835noreply@blogger.com2tag:blogger.com,1999:blog-3489476522413546686.post-64784816337460474152015-08-22T23:16:00.001+04:002015-08-22T23:16:35.776+04:00flashmob<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="background-color: white; line-height: 20.7999992370605px; text-align: justify;">1. Взять ближайшую книгу.</span><br style="background-color: white; line-height: 20.7999992370605px; text-align: justify;" /><span style="background-color: white; line-height: 20.7999992370605px; text-align: justify;">2. Открыть на странице 69.</span><br style="background-color: white; line-height: 20.7999992370605px; text-align: justify;" /><span style="background-color: white; line-height: 20.7999992370605px; text-align: justify;">3. Найти первое предложение — оно и описывает вашу сексуальную жизнь.</span><br style="background-color: white; line-height: 20.7999992370605px; text-align: justify;" /><span style="background-color: white; line-height: 20.7999992370605px; text-align: justify;">4. Поместить в дневнике вместе с этими инструкциями.</span><br style="background-color: white; line-height: 20.7999992370605px; text-align: justify;" /><span style="background-color: white; line-height: 20.7999992370605px; text-align: justify;">5. Не выбирать книгу, взять ту, которая ближе других в данный момент!</span><br />
<span style="background-color: white; line-height: 20.7999992370605px; text-align: justify;"><br /></span>
<div style="text-align: justify;">
<span style="background-color: white; line-height: 20.7999992370605px;">"Дополняя исследования параграфов 15 и 49, приведем еще все типы групп восьмого порядка."</span></div>
<div style="text-align: justify;">
<span style="background-color: white; line-height: 20.7999992370605px;"><br /></span></div>
<div style="text-align: justify;">
<span style="background-color: white; line-height: 20.7999992370605px;">ЗЫ. Больше полугода на столе лежит что попало. Бумажные медленно идут (</span></div>
</div>
67108864http://www.blogger.com/profile/02888735973047043835noreply@blogger.com0tag:blogger.com,1999:blog-3489476522413546686.post-47048972430581930802015-08-19T01:07:00.000+04:002015-08-19T01:07:22.837+04:00scala-cpd, yet another scala copy paste detector<div dir="ltr" style="text-align: left;" trbidi="on">
You could treat this post as ad. Because, literally it is.<div>
<div>
<br /></div>
<div>
I have realise that our code contains a <strike>little</strike> bit copy-pasted blocks. Code in Scala, obviously. So, I was looking for <strike>perfect</strike> working tools for it (at least, to find those blocks). I found only two <strike>non-working</strike> implementations. One is based on PMD (some classic tool for this topic), I cannot execute other variant because of elder sbt version. </div>
<div>
<br /></div>
<div>
So... I write my own. It's sbt-plugin. </div>
<div>
<br /></div>
<div>
<a href="https://github.com/ajtkulov/scala-cpd">https://github.com/ajtkulov/scala-cpd</a></div>
</div>
<div>
<br /></div>
<div>
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.</div>
<div>
<br /></div>
<div>
If two subtrees are equal (syntactically, by _.toString) and big enough, it's a problem. Houston. </div>
<div>
<br /></div>
<div>
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. </div>
<div>
<br /></div>
<div>
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. </div>
<div>
<br /></div>
<div>
It would be a big pleasure, if you also will use it.</div>
<div>
<br /></div>
<div>
PS. 3 years ago we use Simian. It's good enough, but it's not a AST, just strings. </div>
</div>
67108864http://www.blogger.com/profile/02888735973047043835noreply@blogger.com0tag:blogger.com,1999:blog-3489476522413546686.post-69936818309525399412015-07-04T00:49:00.003+04:002015-07-04T00:49:57.050+04:00Само совершенство (нечетное)<div dir="ltr" style="text-align: left;" trbidi="on">
<a href="http://mathworld.wolfram.com/OddPerfectNumber.html">http://mathworld.wolfram.com/OddPerfectNumber.html</a><br />
<br />
Таки наконец-то случайно наткнулся (хотя вообще странно, что мне лень было погуглить <strike>што-ле</strike>?)<br />
<br />
В отечественной научПоповской литературе про ТЧ (как ни странно) есть два мнения, что нечетных совершенных чисел нет и не будет, либо просто отсылка к тому что "типа, никто не знает".<br />
<br />
А тут аж библиография на 35 источников.<br />
<br />
И еще вот тут <a href="http://www.oddperfect.org/">http://www.oddperfect.org/</a> люди таки как-то их ищут. И это несколько забавляет, хотя внутри математики, очевидно, неограниченно. Забавляет скорее факт, что их результат будет вроде "Соверешенное нечетное, если и существует, обязано быть более 10^645" (степень случайна, и брякнута на клавиатуре).<br />
<br />
Мерсенн-щиков (тех, кто GIMP гоняет) я тоже не понимаю. Себя я тоже не понимаю, мини-идеи и эксперименты (в виду лени) как-то у меня не шибко идут.<br />
<br />
ЗЫ.<br />
Жаль я довольно туп. Хотя бы потому, что не нашел этого ранее.<br />
<br />
О дивный, новый мир. Хотя не... спать сегодня спокойно буду.</div>
67108864http://www.blogger.com/profile/02888735973047043835noreply@blogger.com0tag:blogger.com,1999:blog-3489476522413546686.post-50934237439536783112015-04-27T01:35:00.003+04:002015-04-27T01:35:51.785+04:00Принцип двойной записи и псевдовыборы<div dir="ltr" style="text-align: left;" trbidi="on">
Тут некое видео, которое показывает тонкие места <strike>нашей(все давно понимают, что не нашей)</strike> избирательной системы:<br />
<a href="https://navalny.com/p/4219/">https://navalny.com/p/4219/</a><br />
<br />
И так, основной глюк всей этой системы - это "вброс". Проблема, как мне кажется, имеет очевидное решение.<br />
<br />
Почти постановка задачи.<br />
<br />
На избирательном участке в день выборов проходит не более 2000 человек (мультиплицирующий коэффициент не так важен). Важен факт, что всех этих людей обрабатывают (проверяют в списках/паспорт) вручную.<br />
<br />
Если в результате бюллетеней оказывается меньше, чем официально выдано - это формально не проблема. Текущими законами (очевидно, это все с моей точки зрения, так как "закон о выборах" я не читал) не запрещается взять, но не проголосовать.<br />
<br />
Хуже, если бюллетеней оказывается больше, чем изначально выдано.<br />
<br />
Задача сводится к проверке аутентичности/подлинности бумажки. Очевидно, что если бумажка только содержит галочку и ее можно отпечатать в некоторой типографии, то ничего не получится.<br />
<br />
Первое тривиальное решение, которое приходит в голову - это заверять каждую бумажку у Главного(-ых) в избирательной комиссии. Подписи 3-4 человек в углу документа/специальном поле, позволяют отделить выданные от "вброшенных". Круговая порука, 3-4 человека, представляющие разные стороны. По крайне конкретно эту проблему должен решить. Минусы тоже очевидны - замедление процесса, и необходимость в изменении законов/процесса. Лично я - за честность.<br />
<br />
Возможна куча других модификаций, типа записывать что этот бланк выдан тогда-то (с точностью до минуты) в отдельный лог (журнал). И на бланке ссылка. В случае подозрений можно искать в логах. Тут только аккуратно продумать с тайностью голосования, чтобы нельзя было привязать голос к голосующему.<br />
<br />
Варианты с фильтром Блюма, (полу-)центральной выдачей GUID-ов и т. д. возможны, но пока довольно сложны.<br />
<br />
ЗЫ. Подделывать подписи 3-4 людей тоже возможно, но таки сложнее. </div>
67108864http://www.blogger.com/profile/02888735973047043835noreply@blogger.com0tag:blogger.com,1999:blog-3489476522413546686.post-11534330427299772102015-04-19T02:54:00.002+04:002015-04-19T02:54:58.339+04:00Абстрактнее<div dir="ltr" style="text-align: left;" trbidi="on">
<a href="https://gist.github.com/noelwelsh/02b9ecf6d21c7b8934e8">https://gist.github.com/noelwelsh/02b9ecf6d21c7b8934e8</a><br />
<br />
Хотя в текущем проекте потенциально null-ы могут придти только из внешних систем (), но писать обработку на всякий случай приходится. Сейчас это только Cassandra и какая-то хреновина для гео-локации по ip (maxmind). Наследие. "В java только дедушки" (с).<br />
<br />
null вообще запрещен синтаксически к употреблению в scalaStyle. Приходится в нескольких местах закрывать/открывать проверку стиля.<br />
<br />
Вот те две проверки на равенство null теперь можно довольно красиво заменить на (см. ссылку на месте первого абзаца):<br />
<br />
> result.?.getOrElse("")<br />
<br />
Перфекционизма с возрастом все больше и больше. Это отход от студенчества.<br />
<br />
Прошелся по коду. Оказалось, что Option[_] тоже можно глуповато использовать. Очевидно, это лучше чем null. Но и пересолить/переборщить тоже можно. К тому же, если потом в каждом месте match-ить или if-ить. Try[_] там оказался уместнее. Хотя дать волю, то его тоже начнуть match-ить или if-ить, хотя кроме необходимого map/flatMap больше ничего и не надо.<br />
<br />
В scala очень нравится то, что через месяц (и каждый месяц в течение нескольких лет) написанный код уже начинает вызывать отторжение, и хочется переписать на чуть более абстрактные абстракции. И это очень клево, хоть какая-то движуха.<br />
<br />
<br /></div>
67108864http://www.blogger.com/profile/02888735973047043835noreply@blogger.com0tag:blogger.com,1999:blog-3489476522413546686.post-52945157490423552162015-03-30T01:19:00.002+04:002015-03-30T01:19:48.694+04:00КопиПаста<div dir="ltr" style="text-align: left;" trbidi="on">
Пока не нашел для scala работающей тулзы для поиска копипасты в коде. <strike>(Коллега немного грешен, в аду не я по этому поводу гореть буду)</strike>. Есть 1-2 неработающих, но они на 2.9 и как-то уже несколько лет не активны.<br />
<br />
Как всегда, <strike>(даже если вас съели)</strike> есть два выхода.<br />
<br />
Тупой, и в то же время, обычно работающий вариант, смотреть на это все как на строки. И искать плагиат. Баян. Через "а".<br />
<br />
А крутой способ - это иметь AST, и искать похожие поддеревья. В чем крутизна, что строить/парсить/лексить scala не надо, начиная с 2.11 тут нормальные механизмы. <strike>Пока руки коротки, но скоро </strike>все подключу.<br />
<br />
Очевидно, что в каждом компиляторе все проходят через шаги c AST. То есть основная задача - это внедриться в процесс и в нужный момент искать копипасту. В реальности проблемы, что обычно это написано как монолитный кусок (тут можно бы добавить, но я тактично промолчу) кода. В C# почти сделали Roslynd, но я уже два года вне темы и C#. В gcc внедряются как-то, но я вообще вне темы. Уровень вхождения там сильно выше.<br />
<br />
А в scala видится несложным. Макросы должны быть гораздо проще, но лично мне макросы пока тоже далековаты, хотя в пару мест и можно было бы запихнуть. Тут что-то рефлексией попахивает. В общем, надо копать.</div>
67108864http://www.blogger.com/profile/02888735973047043835noreply@blogger.com0tag:blogger.com,1999:blog-3489476522413546686.post-6482849395747455902015-03-17T00:58:00.002+04:002015-03-17T00:58:40.684+04:00Режим радиомолчания<div dir="ltr" style="text-align: left;" trbidi="on">
Пора уже выходить из <strike>радио</strike>молчания. В принципе, писать есть о чем, но в то же время и не хочется. Как в классике: "Начало лекции про ленивые вычисления. -Лекция окончена. У вас есть вопросы?"<br />
<br />
Так что ссылка на котиков не будет, вместо этого канал на Wednesday Addams.<br />
<br />
<a href="http://www.youtube.com/channel/UCyX7977vwwko1lurVlEJszQ">http://www.youtube.com/channel/UCyX7977vwwko1lurVlEJszQ</a><br />
<br />
И ленивые вычисления совершенно не причем.</div>
67108864http://www.blogger.com/profile/02888735973047043835noreply@blogger.com0tag:blogger.com,1999:blog-3489476522413546686.post-15747496884683887332014-12-30T16:57:00.000+04:002014-12-30T16:57:06.044+04:00Агрегатное<div dir="ltr" style="text-align: left;" trbidi="on">
Ижевск-Казань-Ижевск (автомобиль)<br />
Ижевск-Москва<br />
Москва-Таллин-Москва (неделя, поездом. Таллин, Палмсе, Тарту, Пярму - это внутренними автобусами)<br />
Москва-Лондон-Москва (1 день, самолет)<br />
Москва-Ижевск (поезд)<br />
Ижевск-Кунгур-Пермь-Ижевск (3 дня, автомобиль)<br />
Ижевск-Москва<br />
Москва-Казань-Беларусь-Москва (Витебск, Гродно, Беловежская пуща, Минск - внутри автомобилем)<br />
Москва-Переславль-Москва<br />
Москва-Ижевск<br />
Ижевск-Ульяновск-Ижевск (УльКамп, автобус)<br />
Ижевск-Москва-Ижевск (2 дня, поезд, обратно автомобиль)<br />
Ижевск-Екатеринбург-Ижевск (1 день, поезд)<br />
Ижевск-Лондон-Ижевск (неделя, Кардиф, Дувр, Кентеберри, Милтон-Кейнс/Блечли-Парк)<br />
Ижевск-Москва-Нижний Новгород-Ижевск (3 дня, Highload++)<br />
Ижевск-Переславль-Ижевск (4 дня, НСКФ-2014)<br />
Ижевск-Екатеринбург-Ижевск (1 день, поезд)<br />
<br />
Всякую мелочовку, типа дневные выезды в Воткинск(2)/Сарапул/Нижнекамск вообще не в счет. Выезд за МКАД, кстати, больше напрягает.<br />
<br />
По сравнению с <a href="http://ajtkulov.blogspot.com/2013/12/blog-post_29.html">предыдущим годом</a> - примерно, но кажется немного больше. Эмоций несколько больше, чем в прошлом году. Год опять поделился на до/после.<br />
<br />
Про глобальную экономику/политику говорить не хочу, ибо там все плохо. Все в курсе.<br />
<br />
Так что суммарно настроение на уровне "прорвемся".</div>
67108864http://www.blogger.com/profile/02888735973047043835noreply@blogger.com0tag:blogger.com,1999:blog-3489476522413546686.post-60512855784664026042014-12-09T15:40:00.002+04:002014-12-09T15:40:27.069+04:00Нельзя не поделиться<div dir="ltr" style="text-align: left;" trbidi="on">
<a href="http://www.slideshare.net/ScottWlaschin/fp-patterns-ndc-london2014">http://www.slideshare.net/ScottWlaschin/fp-patterns-ndc-london2014</a><br />
<br />
<a href="http://www.slideshare.net/ScottWlaschin/fp-patterns-buildstufflt">http://www.slideshare.net/ScottWlaschin/fp-patterns-buildstufflt</a><br />
<br />
Оно же. С небольшими отличиями.<br />
<br />
#МирУжеНикогдаНеБудетПрежним</div>
67108864http://www.blogger.com/profile/02888735973047043835noreply@blogger.com3tag:blogger.com,1999:blog-3489476522413546686.post-80697268978331547192014-11-27T18:18:00.004+04:002014-11-27T18:18:40.423+04:00Ни о чем<div dir="ltr" style="text-align: left;" trbidi="on">
Досмотрел ML от Ng (он же Ын в русском написании, хотя кто об этом знает?). Правда, без домашек, времени на это все нет.<br />
<br />
Хотя категорщики после 2-ой лекции (первая: <a href="http://www.youtube.com/watch?v=ZKmodCApZwk&index=78&list=WL">http://www.youtube.com/watch?v=ZKmodCApZwk&index=78&list=WL</a>, вторая там же, вы в состоянии ее найти) сильнее переворачивают сознание.<br />
<br />
Обычно, успевают рассказать базовые определения, и рисуют пару диаграм.<br />
<br />
Еще есть редкие ролики, типа <a href="http://www.youtube.com/watch?v=cYzp5IWqCsg">http://www.youtube.com/watch?v=cYzp5IWqCsg</a>, которые радуют. Только не радует, что они редкие, и дальше ничего нет.<br />
<br />
Vihart/numberphile/signinbabana радуют всегда и не редкие, но они не совсем по теме. Приходится извращаться, и смотреть бородатых мужиков/категорщиков.<br />
<br />
<a href="https://class.coursera.org/mmds-001">Mining Massive Datasets</a> радует как никогда. Хотя, лентяй, их книгу только 1/3 пока прочитал, что-то все откладывается в очереди. Хотя тут просмотрел тоже пока 1/3, но нового и интересного таки больше.</div>
67108864http://www.blogger.com/profile/02888735973047043835noreply@blogger.com0tag:blogger.com,1999:blog-3489476522413546686.post-33991718533646230842014-11-17T17:27:00.002+04:002014-11-17T18:50:29.399+04:00Nonogram<div dir="ltr" style="text-align: left;" trbidi="on">
То что в русском известно как японские кроссворды.<br />
<br />
<a href="https://github.com/ajtkulov/Nonogram">https://github.com/ajtkulov/Nonogram</a><br />
<br />
Таки написал, даже на больших работает.<br />
Код немного причесать, ибо большая часть (хотя там можно сказать одна сущность, да и год назад написанная) никакая (слово "кака" как подстрока). Код на scala уже через 2 недели смотришь, и "кто это писал?". Я так не пишу.<br />
<br />
Оказалось, там элемент динамики (динамическое программирование), ну, тупо кеш вычисленных потребовался. Иначе на больших медленно (50х50 и больше, где в ряд по 8-10 отрезков бывает).<br />
<br />
Кодом не доволен, результатом удовлетворен.<br />
<br />
Так что с позавчера считаю японские кроссворды неитересными.</div>
67108864http://www.blogger.com/profile/02888735973047043835noreply@blogger.com0tag:blogger.com,1999:blog-3489476522413546686.post-14023269205758684022014-11-09T01:18:00.000+04:002014-11-10T11:06:41.112+04:00Толерантность<div dir="ltr" style="text-align: left;" trbidi="on">
Что в русском известно как пофигизм. Можно было бы и ярче сказать, но тут возможно <strike>дети</strike> РосЗапрет прочитают.<br />
<br />
За последние дня три моя pro-шка ушла в <strike>синий</strike> серый экран четыре раза. В эти же дни Тим Кук (который Apple) сделал признание, что все сходится. Я, в принципе, всех их так и называл.<br />
<br />
Мне не понятна мода. Да, на западе если ты <strike>нег</strike> афро-американка, [пока что еще] нетрадиционной ориентации, то с работы уволить почти невозможно. Как в этой стране жить. Не знаю, как она устраиваться на работу будет. Видимо, в резюме указывают это, и идешь вне конкурса.<br />
<br />
Так же мне не понятны двойные стандарты. Вот пришел человек в банк просить/требовать/угрожать/взять (нужное подчеркнуть) кредит. Ему отказывают, мол зачем вам миллион долларов? Приходят НО (нетрадиционно ориентированные) в детский дом, типа, дайте нам на воспитание. Им нельзя отказывать, иначе не толерантно (увы, конечно же ситуация выдумана из пальца).<br />
<br />
Вот тут странно, я не вижу никакой принципиальной разницы. Если человек может создавать, брать взаймы, и отдавать больше, то все хорошо. Но, очевидно, одна группа лиц не может создавать.<br />
<br />
Я знаю людей, которым отказали в котенке из приюта (правда, это Лондон). Отказ был в форме, что ребенок половину дня в школе, родители целый день на работе, что будет делать бедное животное первую половину дня? Слово "пидорасы" тут только скрыто за словом "отказ", и никакой толерантности.<br />
<br />
Я не против НО, но и не за. Машину водить могут, в ипотеку вступать тоже. Раз детей делать не могут, то и брать в кредит не должны. Главное, что б компьютеры в ребут не уходили, оно ведь не должно зависеть от направления (читай, ориентации)... </div>
67108864http://www.blogger.com/profile/02888735973047043835noreply@blogger.com0