Pull to refresh
2
0
Артем Целовальников @SlazZy

ruby developer

Send message

Как спроектировать и написать полноценную программу

Reading time5 min
Views36K
«Инструкция создания функционального приложения», часть 1.

«Мне кажется, что понимаю функциональное программирование на базовом уровне, и я даже писал простые программы, но как мне создать полноценное приложение, с реальными данными, с обработкой ошибок и прочим?»

Это очень распространенный вопрос, поэтому я решил, что в этой серии статей опишу инструкцию, охватывающую проектирование, валидацию, обработку ошибок, персистентность, управление зависимостями, организацию кода и так далее.
Читать дальше →
Total votes 21: ↑19 and ↓2+17
Comments2

Вероятностное программирование

Reading time19 min
Views42K
Вероятностное моделирование является одним из мощнейших инструментов для специалиста по анализу данных. К сожалению, для его использования необходимо не только уверенно владеть аппаратом теории вероятностей и математической статистики, но и знать детали работы алгоритмов приближенного байесовского вывода, что делает порог вхождения очень высоким. Из этой лекции вы узнаете о сравнительно молодой парадигме в машинном обучении — вероятностном программировании. Его задача — сделать всю мощь вероятностного моделирования доступной любому человеку, имеющему опыт программирования и минимальный опыт анализа данных.



Лекция была прочитана Борисом hr0nix Янгелем на факультете компьютерных наук, открытом в Высшей школе экономики при поддержке Яндекса. Сам Борис окончил ВМиК МГУ и Школу анализа данных Яндекса. Работал в Microsoft Research Cambridge в группе Кристофера Бишопа над фреймворком Infer.NET. Сейчас Борис — ведущий разработчик поиска Яндекса.

Под катом — расшифровка рассказа.
Читать дальше →
Total votes 44: ↑41 and ↓3+38
Comments15

PostgreSQL: Приемы на продакшене

Reading time9 min
Views90K
Можно прочитать много книг по базам данных, написать кучу приложений на аутсорс или для себя. Но при этом невозможно не наступить на грабли, при работе с действительно большими базами/таблицами особенно, когда downtime на большом проекте хочется свести к минимуму, а еще лучше совсем избежать. Вот здесь самые простые операции, как например изменение структуры таблицы может стать более сложной задачей. Наиболее интересные случаи, проблемы, грабли и их решения из личного опыта с которыми нам на проекте Pushwoosh пришлось столкнуться описаны под катом. В статье нет красивых картинок, зато есть много сухого текста.

image
Читать дальше →
Total votes 75: ↑70 and ↓5+65
Comments18

Навыки .NET-разработчика России и США, в чем разница?

Reading time11 min
Views54K


Статья «Навыки .NET-разработчика» была первым моим аналитическим исследованием востребованности навыков на рынке труда, в котором я показал потребности близкого к нам российского рынка в специалистах моей профессии. В этом материале я представляю сравнение с зарубежным рынком. Говорят, что наш IT-рынок в целом и используемые нами технологии в частности отстают от Запада на несколько лет. Давайте вместе посмотрим «за рубеж» и попробуем понять, так ли это и есть ли нам чему поучиться.
Читать дальше →
Total votes 36: ↑29 and ↓7+22
Comments113

Структуры данных. Неформальный гайд

Reading time6 min
Views168K


Конечно, можно быть успешным программистом и без сакрального знания структур данных, однако они совершенно незаменимы в некоторых приложениях. Например, когда нужно вычислить кратчайший путь между двумя точками на карте, или найти имя в телефонной книжке, содержащей, скажем, миллион записей. Не говоря уже о том, что структуры данных постоянно используются в спортивном программировании. Рассмотрим некоторые из них более подробно.
Читать дальше →
Total votes 91: ↑83 and ↓8+75
Comments31

Мой код не работает :-(

Reading time1 min
Views21K
Представляем наглядное пошаговое руководство по поиску и устранению ошибок в коде для языка Python, которое мы в Alconost перевели специально для Хабра. Следуйте по стрелкам, чтобы определить вероятную причину проблемы — и, если первое из найденных решений не подходит, возвращайтесь и пробуйте еще.

Если ничего из предложенного не работает, убедитесь, что вы редактируете тот же файл, который компилируете.


Картинка кликабельна

Переведено с любовью к коду компанией-локализатором Alconost.
Total votes 28: ↑16 and ↓12+4
Comments12

Рефакторинг: выделяй метод, когда это имеет смысл

Reading time4 min
Views22K
Сейчас уже сложно вспомнить тот момент, когда я впервые осознал, что выделять функции из больших кусков полезного кода, вообще-то, хорошая идея. То ли я получил это знание из “Совершенного кода”, то ли из “Чистого кода” — сложно вспомнить. В целом, это не особенно важно. Мы все знаем, что должны разносить бизнес-логику по хорошо проименованным функциям. Самая длинная функция, которую я когда-либо видео в жизни была длиной в 5к строк. Я лично знаком с тем “программистом”, что написал тот код. Помню, как впервые встретил эту функцию. Не сложно предсказать, что моей первой реакцией было: “Какого чёрта!!! Кто произвёл на свет этот кусок дерьма???”
Да, представьте себе, этот “программист” до сих пор слоняется тут в офисе, где я сейчас работаю над текущими проектами. Не хочу углубляться в эту историю, но хочу упомянуть, что та функция длиной в 5к строк была ядром программы, размером примерно в 150к строк. Разработка программы в конце концов зашла в тупик, из-за той ужасной функции, которая крайне негативно влияла на архитектуру приложения. В конце концов было принято решение о переписывании приложения с нуля.
Читать дальше →
Total votes 25: ↑20 and ↓5+15
Comments17

Почему программировать легко

Reading time8 min
Views68K
Прочитал я тут на Хабре отличную статью «Почему программировать так тяжело?» и сразу проникся к ней симпатией. «Боже мой!» — подумал я. Наконец-то можно показать толковый и взвешенный текст некоторым моим знакомым, считающим меня высокооплачиваемым бездельником, объяснить родственникам, что это за работа такая — «кнопки целый день тыкать» и предоставить защитившим кандидатские диссертации друзьям доказательства того, что и я тут тоже не коровам хвосты кручу в рабочее время. «Какая прекрасная статья!» — думал я. Наконец-то кто-то понял всю суть работы программиста и объяснил её сложность понятным языком!

И лишь одной малюсенькой детали в этой статье не хватало. Правды.


Правды о том, что программировать легко и приятно, что сложности надуманы, а плюсы работы — недооценены. И я думаю стоит исправить эту несправедливость, написав такую статью. И нет, я не буду тут скатываться в трёп о высоких зарплатах, востребованности на рынке и высокой мобильности. Это всё ведь не о программировании, это о стиле жизни программиста, что не совсем то. А мы ведь на Хабре, а не на Мегамозге каком-то, поэтому давайте рассмотрим именно программирование, во всей его завораживающей красоте и устрашающей мощи!
Читать дальше →
Total votes 89: ↑71 and ↓18+53
Comments172

MIT предлагает всем желающим бесплатные уроки по теории покера

Reading time2 min
Views22K

Первое видео курса

Массачусетский технологический институт выложил в свободный доступ курс лекций по теме «Теория и аналитика игры в покер» (на английском языке). Доступны видеолекции, конспекты и специальные заметки по курсу. Это событие – часть программы OpenCourseWare, которая посвящена организации бесплатного доступа к избранным лекциям института для всех желающих – даже для тех, кто не учится в нём.

Помните, как в школе многие говорят: «Ну зачем мы это учим, нам это не пригодится!»?



Так вот, лекции по покеру – пожалуй, могут оказаться не просто интересными, но и весьма полезными с практической точки зрения.

Лекции ведёт магистрант института Кевин Дезмонд, который получил степень бакалавра по финансам. И, что логично, его лекции как раз рассказывают о технологиях анализа и планирования, предназначенных для максимизации выгоды от игры на деньги.

В курсе рассматриваются основы игры, наилучшие стратегии, и те важные детали, которые самоучки обычно упускают. Рассматривается анализ поведения игроков, манеры игры и прогнозы их будущих действий в зависимости от предыдущих раздач.
Читать дальше →
Total votes 22: ↑18 and ↓4+14
Comments0

Веб-приложения на Clojure

Reading time6 min
Views24K
На Хабре не так уж и много статей о Clojure, и это печально, намерен это исправить. Ниже я расскажу об отличном на мой субъективный взгляд инструменте — языке программирования Clojure и его библиотеках для создания веб-приложений.
Читать дальше →
Total votes 25: ↑25 and ↓0+25
Comments11

Размышления о способах обработки ошибок

Reading time12 min
Views20K
Тема обработки ошибок сложна и неоднозначна. До сих пор нет какого-то оптимального подхода или группы подходов к этой проблеме. Все они страдают от тех или иных недостатков. В этой статье я хотел бы поделиться своими мыслями на эту тему, и что не менее важно, почерпнуть новые знания в комментариях.

Код в статье приводится на scala, однако рассматриваемый подход может быть реализован на многих других языках (c++ с помощью макросов, java с помощью JetBrains MPS и т.д.). Наиболее близким аналогом рассматриваемого подхода является способ обработки ошибок в haskell.
Читать дальше →
Total votes 15: ↑14 and ↓1+13
Comments36

Как сделать красивую документацию для Web API, за которую будет не стыдно

Reading time3 min
Views40K
Я хотел бы рассказать вам об утилите, с которой вы сможете забыть о боли создания документации для Web API. О том как это сделать прошу всех под кат.


Все вкусняшки тут
Total votes 45: ↑39 and ↓6+33
Comments25

«Под капотом» индексов Postgres

Reading time7 min
Views52K

Капитан Немо у штурвала «Наутилуса»

Индексы — один из самых мощных инструментов в реляционных базах данных. Мы используем их, когда нужно быстро найти какие-то значения, когда объединяем базы данных, когда нужно ускорить работу SQL-операторов и т.д. Но что представляют собой индексы? И как они помогают ускорять поиск по БД? Для ответа на эти вопросы я изучил исходный код PostgreSQL, отследив, как происходит поиск индекса для простого строкового значения. Я ожидал найти сложные алгоритмы и эффективные структуры данных. И нашёл.

Здесь я расскажу о том, как устроены индексы и как они работают. Однако я не ожидал, что в их основе лежит информатика. В понимании подноготной индексов также помогли комментарии в коде, объясняющие не только как работает Postgres, но и почему он так работает.
Читать дальше →
Total votes 48: ↑44 and ↓4+40
Comments21

Стабилизация видеосъёмки в киноиндустрии, или «Про Тульскую Головку»

Reading time5 min
Views21K
После выхода на экраны российских кинотеатров эпического «Mad Max» на различных ресурсах рунета (и на Хабре Гиктаймсе, в том числе) стали появляться статьи из разряда «как это снималось». Но, почему-то, все эти статьи свелись лишь к восторгам по спецэффектам (ах, Рука Фьюриосы, растудыть твою ж кочерыжку; ах, небо разукрасили, и далее в том же духе). Но «Дорога Ярости» для публики, которой уже давно приелись Трансформеры, Мстители и прочие Железные Человеки, является безбашенным экшном как раз благодаря тому что бОльшую часть фильма снимали натурально, без компьютера. Все тачки, фуры, погони, взрывы — всё было по-настоящему. Ну, чуток может и дорисовали, но именно чуток.

А вот теперь попробуйте взять видеокамеру, сесть в машину и попытаться на скорости от 60 до 160 км/час снять другую машину, едущую рядом. При езде по ровному асфальту вполне вероятно что у вас это получится, но всё равно довольно трудно будет добиться плавности картинки, чтоб не было дрожания, рывков и пропадания фокуса. А теперь представьте что съёмку вы ведёте не маленькой бытовой видеокамерой в руках, сидя в плавно едущей по асфальту машины, а большой киношной камерой (а то и сразу несколькими) из машины, несущейся по кочкам, песку и прочему бездорожью. В этой ситуации можно и не пытаться снять плавное видео «кинематографического качества».

В этой ситуации на помощь приходит специальное оборудование, так называемые «гиростабилизированные подвесы» и «стедикамы». Многие на Хабре (ну и Гиктаймсе) давно в курсе про подвесы, которые крепятся на брюхо коптера, могут нести на себе довольно большие профессиональные камеры (Red Epic и т.д) и позволяют добиться плавной съёмки. Но коптеры не обеспечивают требуемой динамики при съёмках (экшн такой экшн) и имеют довольно малый запас по времени полёта, долгие погони на высоте несколько метров от земли ими особо не поснимаешь. Так что в киноиндустрии (в Голливуде, во всяком случае) уже довольно давно сложилась традиция для съёмок всего что связано с погонями на тачках, мотоциклах, лодках и прочим подвижным составом, использовать специально оборудованный автомобиль.

Автомобиль обычно довольно приличный (порш кайен, внедорожник мерседес amg, шевроле тахо и т.д.), так как он должен уметь быстро передвигаться как по обычным дорогам, так и по бездорожью. Погони снимают на большой скорости, так что съёмочный автомобиль должен не отставать от какой-нибудь шустрой Porsche или Ford Mustang, в которой сидит какой-нибудь виндизель. А ещё автомобиль обязательно чёрный матовый, чтоб не создавать лишних бликов и не быть заметным если вдруг в удачный кадр попадёт.



Читать дальше →
Total votes 48: ↑47 and ↓1+46
Comments12

Дзэндо — не только боевое искусство, но и игра на индуктивные умозаключения

Reading time4 min
Views13K
Does a dog have Buddha-nature?
This is the most serious question of all.
If you answer yes or no
You lose your own Buddha-nature.


На Хабре и Гиктаймсе время от времени появляются посты с обзорами игр для программистов, но в большинстве случаев это или Лого с графикой, или казуальные настолки. Иногда хочется чего-нибудь посложнее и поматематичнее. Как, например, Zendo, выпущенной в 2001 году Кори Хис и полуившая несколько наград. Представляет она собой соревновательную игру, построеннуюна мат.индукции и дзэн-коанах.

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



Правила просты, но интересны
Total votes 24: ↑23 and ↓1+22
Comments22

Ненормальное функциональное программирование на python

Reading time7 min
Views45K

После просмотра курса Programming Languages и прочтения Functional JavaScript захотелось повторить все эти крутые штуки в python. Часть вещей получилось сделать красиво и легко, остальное вышло страшным и непригодным для использования.

Статья включает в себя:
  • немного непонятных слов;
  • каррирование;
  • pattern matching;
  • рекурсия (включая хвостовую).


Статья рассчитана на python 3.3+.
Читать дальше →
Total votes 55: ↑51 and ↓4+47
Comments18

Создание простейших структур данных с помощью функций в Python

Reading time4 min
Views51K
Вступление: Позапрошлым летом я открыл для себя великолепную книгу SICP — чтение только первого раздела книги открыло для меня новый мир функционального программирования. Анонимные функции, функции, что возвращают функции, функции высших порядков. Во втором разделе книги авторы показали, что возможно с помощью одних только функций создавать различные структуры данных, такие как пара, список, или даже деревья! Сегодня мне бы хотелось реализовать кое-какие идеи из этой книги на языке программирования Python. Конечно же, исключительно с помощью функций.
Читать дальше →
Total votes 17: ↑12 and ↓5+7
Comments9

Слово на букву «М», или Монады уже здесь

Reading time8 min
Views42K


Про монаду ходит множество мемов и легенд. Говорят, что каждый уважающий себя программист в ходе своего функционального возмужания должен написать хотя бы один туториал про монаду — недаром на сайте языка Haskell даже ведётся специальный таймлайн для всех отважных попыток приручить этого таинственного зверя. Бывалые разработчики поговаривают также и о проклятии монад — мол, каждый, кто постигнет суть этого чудовища, начисто теряет способность кому-либо увиденное объяснить. Одни для этого вооружаются теорией категорий, другие надевают космические костюмы, но, видимо, единого способа подобраться к монадам не существует, иначе каждый программист не выдумывал бы свой собственный.

Действительно, сама концепция монады неинтуитивна, ведь лежит она на таких уровнях абстракции, до которых интуиция просто не достаёт без должной тренировки и теоретической подготовки. Но так ли это важно, и нет ли другого пути? Тем более, что эти таинственные монады уже окружают многих ничего не подозревающих программистов, даже тех, кто пишет на языках, никогда не считавшихся «функциональными». Действительно, если приглядеться, то можно обнаружить, что они уже здесь, в языке Java, под самым нашим носом, хотя в документации по стандартной библиотеке слово «монада» мы едва ли найдём.

Именно поэтому важно если не постичь глубинную суть этого паттерна, то хотя бы научиться распознавать примеры использования монады в уже существующих, окружающих нас API. Конкретный пример всегда даёт больше, чем тысяча абстракций или сравнений. Именно такому подходу и посвящена эта статья. В ней не будет теории категорий, да и вообще какой-либо теории. Не будет оторванных от кода сравнений с объектами реального мира. Я просто приведу несколько примеров того, как монады уже используются в знакомом нам API, и постараюсь дать читателям возможность уловить основные признаки этого паттерна. В основном в статье пойдёт речь о Java, и ближе к концу, чтобы вырваться из мира legacy-ограничений, мы немного коснёмся Scala.
Читать дальше →
Total votes 43: ↑39 and ↓4+35
Comments33

8 ресурсов для бесплатного образования на русском языке

Reading time3 min
Views62K
Как выглядит процесс обучения? Детсад, школа, университет и эпизодические курсы повышения квалификации, да и то не у всех. До конца жизни человек идет на том багаже знаний, который набрал в начале. Сейчас есть запрос на то, чтобы процесс обучения стал постоянным. Нужно поменять специализацию – пожалуйста. Нужно усилиться – пожалуйста. Делать это виртуально может быть проще и удобнее, ведь нет никаких барьеров. При этом качественные знания можно получить бесплатно. Представляю 8 платформ, на которых можно учиться на русском языке без бюджета.
Читать дальше →
Total votes 27: ↑24 and ↓3+21
Comments15

Как технологии украли время на креативность

Reading time3 min
Views15K
image
Оригинал: How Technology Has Hijacked Our Creative Spaces

Нам в буквальном смысле надо давать себе отдых от технологий, чтобы освободить разум.

Недавно я поняла, что креативные идеи посещают меня в то время, когда… Интернет отключен, а Wi-Fi не доступен. Или когда я иду выгуливать собаку и забываю смартфон. Или когда я еду домой, а батарея смартфона разряжена.

Да, конечно. Я прекрасно понимаю, что это далеко не новость. Или, может кто-то об этом еще не знает? Что касается меня, то это умозаключение открыло глаза на многое. Я никогда не хотела считать, что современные технологии — что-то, что может мешать мне быть креативной. Наоборот, я всегда думала, что технологии помогают креативности. Я могу читать интересные статьи, где и когда хочу. Я могу продуктивно использовать каждую минуту свободного времени. Всего пару нажатий на экран смартфона, и я могу получить доступ к нескончаемым запасам информации и знаний.

Но что толку? Какой смысл напичкивать себя информацией, если времени ее переработать и усвоить все равно нет?
Читать дальше →
Total votes 30: ↑27 and ↓3+24
Comments42

Information

Rating
Does not participate
Location
Тула, Тульская обл., Россия
Date of birth
Registered
Activity