Pull to refresh
417
0
Вадим Шевяков @Sirion

Пролетарий умственного труда

Send message

Как я намайнил первое* в мире биткоин**-стихотворение

Level of difficulty Easy
Reading time 15 min
Views 9.4K

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

Иногда хочется как-то объединить эти две стороны своей жизнедеятельности. Написать скрипт четырёхстопным ямбом. Или наоборот — скрипт, который напишет четырёхстопный ямб. Обычно это желание мимолётно и ни к чему не ведёт. Но недавно мне очень захотелось написать биткоин-стихотворение — и я это сделал.

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

Испить мёда поэзии
Total votes 119: ↑113 and ↓6 +107
Comments 46

Карма — это приглашение на вечеринку

Reading time 3 min
Views 23K
Рискуя кармой (хе-хе), хочу принять участие в дискуссии и ответить автору этого поста. В принципе, можно было бы ограничиться заголовком, но поскольку у нас тут Хабр, а не Твиттер, я растекусь мысию по древу, серым волком по земле, сизым орлом под облаками.

image
Читать дальше →
Total votes 162: ↑131 and ↓31 +100
Comments 412

Ключевое слово this в JavaScript. Полное* руководство

Reading time 6 min
Views 41K
* скорее всего, я что-нибудь да упустил, но уверен, в комментариях мне это подскажут

Эту статью я пишу для своих личных нужд. Планируется, что она будет содержать в себе ответы на все вопросы, которые мне задают студенты на эту тему. Если она пригодится кому-то ещё — здорово.

image

Содержание.

  1. Введение
  2. Заблуждения о this
  3. Как определить значение this
Читать дальше →
Total votes 26: ↑24 and ↓2 +22
Comments 30

Фибоначчи на собеседовании

Reading time 8 min
Views 123K
Вычисление ряда Фибоначчи — это классическая алгоритмическая задача, потому её нередко дают на собеседованиях, когда хотят проверить, что кандидат в принципе хоть как-то умеет в алгоритмы. Предположим, вы тот самый кандидат. Вам дали задание: на языке JavaScript написать функцию fib(n), возвращающую энное число Фибоначчи. Считаем, что нулевое число Фибоначчи — это нуль. Проверка корректности аргумента не требуется. Какие у вас есть варианты?

image
Выбирай мудро
Total votes 183: ↑177 and ↓6 +171
Comments 135

Псто добра

Reading time 3 min
Views 5.9K
Дисклеймер
Я осознаю, что этот пост можно расценивать как флуд, и приношу свои извинения тем, кому он испортил аппетит. Однако прошу понять, что это нежелательный побочный эффект. Цель поста — социальный эксперимент и, возможно, восстановление справедливости.

Введение


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

image
Читать дальше →
Total votes 76: ↑45 and ↓31 +14
Comments 312

Пятничный JS: квайн, который играет в крестики-нолики

Reading time 6 min
Views 7K
Приветствую всех в своей традиционной рубрике, полной лавкрафтианского безумия.

В процессе написания одной из прошлых статей (не ищите, она была не особенно хороша) я задумался над тем, что квайн… Да, на всякий случай напомню: квайн — это программа, которая выводит свой собственный текст, причём делает это «честно» (не подсмотрев, допустим, этот текст в файле на жёстком диске). В общем, традиционная бессмысленная пузомерка программистов.

Так вот, я задумался над тем, что квайн, в принципе, может нести произвольную полезную нагрузку. То есть — делать ещё что угодно помимо своей основной функции. И в качестве proof-of-concept я решил написать квайн, который играет в крестики-нолики. И написал. Грязные подробности под катом.

image
Но как он может делать что-то ещё, кроме вывода своего текста?
Total votes 38: ↑37 and ↓1 +36
Comments 7

У меня нет рта, но я должен кричать. Размышления об ИИ и этике

Reading time 6 min
Views 20K
Дисклеймер
Я скептически отношусь к своей способности высказать действительно оригинальную мысль. Скорее всего, я далеко не первый, кто задаёт эти вопросы, и вполне возможно, на них даже уже выработаны какие-то удобоваримые ответы. Поэтому, печатая данный текст, я не жду вашего удивления или восхищения. Я жду, что в комментарии придут люди, знакомые с современной философией сознания, и дадут мне ссылки на работы серьёзных мыслителей с забавными немецкими фамилиями.

image

Не так давно на Хабре был пост, комментарии к которому заставили меня задуматься о нескольких взаимосвязанных вопросах. Результатами этих раздумий (или их отсутствием, тут уж как посмотреть) я хочу поделиться с сообществом.

Что такое боль?


Как-то раз у меня болел зуб. Я лежал на диване и пытался не обращать на это внимания. Я думал о том, что боль — это просто сигнал, идущий в мой мозг. Такой же сигнал, как наличие или отсутствие напряжения в проводке, идущем к PS/2 разъёму системного блока. Сам по себе он не несёт никакой семантики, это моё сознание выбирает, как его интерпретировать. Если я перестану воспринимать его как боль, а вместо этого проигнорирую или просто «приму к сведению», мне станет легче.

Но легче не становилось
Total votes 31: ↑27 and ↓4 +23
Comments 628

Функции высших порядков в JS: курс молодого бойца

Reading time 8 min
Views 13K
Данная статья рассчитана на человека, делающего свои первые робкие шаги на тернистой тропе изучения JavaScript. Несмотря на то, что на дворе 2018 год, я использую синтаксис ES5, дабы статья была понятной юным падаванам, проходящим курс «JavaScript, уровень 1» на HTML Academy.

Одной из особенностей, отличающих JS от многих других языков программирования, является то, что в этом языке функция — «объект первого класса». Или, говоря по-русски, функция — это значение. Такое же, как число, строка или объект. Мы можем записать функцию в переменную, можем положить её в массив или в свойство объекта. Мы даже можем сложить две функции. На самом деле, ничего осмысленного из этого не получится, но как факт — мы можем!

function hello(){};
function world(){};
console.log(hello + world);
// кто знает, что получится, тому печеньку
// кто не знает, пусть попробует в консоли

Самое интересное, что мы можем создавать функции, оперирующие другими функциями — принимающие их в качестве аргументов или возвращающие их как значение. Такие функции называются функциями высшего порядка. И сегодня мы с вами, девочки и мальчики, поговорим о том, как бы эту возможность приспособить на нужды народного хозяйства. Попутно вы узнаете ещё про некоторые полезные особенности функций в JS.
Читать дальше →
Total votes 12: ↑10 and ↓2 +8
Comments 16

Пятничный JS: игра в 0 строк JS и CSS

Reading time 3 min
Views 21K
Возможно, многие из старожилов помнят эпидемию статей с заголовками вида "%something% в 30 строк JS". А также последовавший за ней эпичный пост "Игра в 0 строк кода на чистом JS", после которого эпидемия резко сошла на нет. Полностью осознавая, что этот шедевр мне никогда не превзойти, я всё же спустя пять лет решил докинуть свои пять копеек.

Дамы и господа, вашему вниманию предлагается игра «Крестики-нолики» в нуль строк JS, а также, в отличие от игры, упомянутой выше, в нуль строк CSS (включая инлайн стили). Только голый HTML, только хардкор.


Ссылка на игру

Выглядит неказисто, зато будет работать в любом браузере. Под катом я расскажу, почему игра без JS оказалась в рубрике «Пятничный JS», а также другие грязные подробности. Впрочем, Америку я никому не открою, если вы опытный кодер, можете под кат даже не заходить
Читать дальше →
Total votes 48: ↑45 and ↓3 +42
Comments 28

Седьмая печаль

Reading time 13 min
Views 6.9K
Дисклеймер
Я не уверен, что этот текст должен быть на Хабре. Тащу его сюда просто потому, что больше нигде не публикуюсь. Если вы полагаете, что сей опус здесь неуместен, вы знаете, что делать.

Антоний Блок почесал острый подбородок и передвинул фигуру на доске. Партия подходила к концу, и исход её был слишком очевиден. Смерть улыбнулся — страшно, одними губами. Его глаза, не мигая, смотрели из-под нависших надбровных дуг. Бледной рукой Смерть взял свою королеву и поставил вплотную к королю рыцаря. Мат.

— Говорят, на сарацинском «шах мат» означает «правитель мёртв», — бесстрастно произнёс Антоний.
— На персидском, — уточнил Смерть.
— Я не отличаю одних нехристей от других, — сплюнул рыцарь. — Пусть дьявол в преисподней разбирается, кого из них кинуть в какой котёл.
— Ты веришь в дьявола? — спросил Смерть, буравя Антония своим немигающим взглядом.
— Я уже ни во что не верю, — Блок горько усмехнулся. — Только в то, что вскоре ты захочешь забрать свой выигрыш.
— Несомненно, — Смерть улыбнулся снова, и сердце храброго рыцаря замерло в страхе. — Сейчас ты можешь идти, куда захочешь. Но вскоре я вернусь, и тогда ты пойдёшь за мной.
— Пойду куда?! — воскликнул рыцарь в душевной муке.

Смерть поправил свой плащ, смахнув с него нанесённую ветром сухую былинку.
Читать дальше →
Total votes 42: ↑31 and ↓11 +20
Comments 48

DocumentFragment: что это такое и как с ним (не) бороться

Reading time 4 min
Views 31K
Дисклеймер
Похоже, у меня начинается новая серия статей — немного скучная и сугубо утилитарная. В них будут содержаться разъяснения моментов, которые часто вызывают трудности у моих студентов. Если вы матёрый веб-девелопер, скорее всего, вам будет неинтересно. Если вы ждёте извращений в силе «Пятничного JS», их тут не будет, увы.


Одна из вещей, с пониманием которых у студентов регулярно возникают проблемы — это DocumentFragment. В общем-то, я не могу их за это винить. При внешней простоте он имеет несколько неочевидных и даже контринтуитивных свойств. В данной статье я хочу собрать всё, что необходимо про него знать новичку.

image
Я преисполнен любопытства и желаю читать дальше
Total votes 22: ↑22 and ↓0 +22
Comments 23

Пятничный JS: случайное перемешивание

Reading time 6 min
Views 50K
Экзамен в школе прапорщиков.
— Вот смотрите. Это большой палец, это — указательный, это — средний, это — безымянный, это — мизинец. Мешаем, мешаем, мешаем (двигает пальцами)… Теперь где какой?
Всем привет. С ортодоксальной точки зрения сегодня не настоящая пятница — просто день, когда завтра выходной. Поэтому статья в моей традиционной рубрике тоже будет не совсем настоящая, у неё пониженный градус безумия и повышенная полезность. Однако довольно предисловий, перейдём к сути.

Перед моими студентами регулярно встаёт задача случайного перемешивания массива. За её решением они, как правило, лезут в гугл. И гугл им подсказывает следующее:

var shuffledArr = arr.sort(function(){
  return Math.random() - 0.5;
});

Здесь и далее будем называть этот метод случайной сортировкой. Сегодня я решил написать о том, какие преимущества и недостатки есть у такого подхода.
Читать дальше →
Total votes 57: ↑57 and ↓0 +57
Comments 69

Пятничный JS: минус без минуса

Reading time 4 min
Views 9.2K
И вновь я приветствую всех в моей традиционной рубрике. Сегодня вы узнаете, что же такого особенного произошло 31 декабря 1969 года, ровно за миллисекунду до полуночи. Точнее, вы узнаете не только лишь это, но только к этому примеру я смог подобрать картинку, а развлекательная статья без картинок — нонсенс.

image

Читать дальше →
Total votes 20: ↑20 and ↓0 +20
Comments 47

Миллион плюс один равно миллион. Теория относительности натурального ряда

Reading time 5 min
Views 7.4K
image

К читателю


Несмотря на некоторое количество умных слов и фамилий, статья вполне доступна восприятию нематематика. Несмотря на провокационность заголовка, статья не является фрической. Читайте на здоровье.

Пролог


Начало двадцатого века было богато на революции — как политические, так и научные. Например, тогда полным ходом шла аксиоматизация математики. Происходила она бурно, драматично. «Наивную теорию множеств» Кантора похоронил парадокс Рассела, ограниченность аксиоматики Цермело-Френкеля показала — уже в тридцатых годах — теорема Гёделя о неполноте.

В физике революцию произвела специальная теория относительности. Открытие Эйнштейна, основанное на работах Максвелла, Лоренца и других учёных, постулировало некоторые контринтуитивные свойства физической реальности, в частности — лоренцево сложение скоростей.
Дальше самое интересное, тык сюда
Total votes 22: ↑16 and ↓6 +10
Comments 116

Пятничный JS: reqyire.js и очепятко-ориентированное программирование

Reading time 5 min
Views 16K
И вновь я приветствую уважаемых хабражителей в своей не то чтобы постоянной, но повторяющейся рубрике. Сегодня мы с вами поговорим о том, как стать более эффективным программистом под Node.js. А также, как вы могли догадаться из названия, об опечатках и их роли в этом процессе. Немного кода для привлечения внимания

const reqyire = require("reqyire");
const http = reqyire("htpp");

const server = http.creteServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World\n');
});

server.listem(3000, "127.0.0.1");
Вы ведь заметили, что здесь какой-то подвох?
Total votes 85: ↑79 and ↓6 +73
Comments 46

Игры для программистов, часть вторая

Reading time 5 min
Views 81K
Прошло четыре с половиной года с тех пор, как я, пользуясь свежеполученным инвайтом, написал предыдущий хабрапост с подобным заголовком. Большой срок для игровой индустрии. Успело появиться много новых хороших игр, и недавно я ощутил настоятельную необходимость поделиться знанием о них с широкой общественностью.

Несмотря на опасность, что вновь возникнет спор относительно названия, я решил оставить его прежним, дабы сохранить преемственность. Можно воспринимать его как «игры для тех, кто имеет способность к программированию», или ещё как-нибудь в этом духе. Однако я полагаю, что вы читаете этот пост не ради рассуждений о семантике, потому перейдём к сути.

Infinifactory


image
И что же это за майнкрафт такой?
Total votes 58: ↑57 and ↓1 +56
Comments 74

Лучшие головоломки, про которые не знает никто*. Часть вторая

Reading time 4 min
Views 30K
*почти

И вновь я приветствую вас, дорогие мои читатели. С момента выхода предыдущей части прошло уже полгода, однако тема её не перестаёт быть актуальной. По-прежнему в незаслуженном забвении пребывают великолепные образцы головоломочного жанра. И на помощь им вновь прихожу я — герой, которого они заслуживают. Без лишних предисловий, начнём.

Volvox




Осторожно, пропаганда употребления наркотиков
Total votes 22: ↑20 and ↓2 +18
Comments 39

Пятничный JS: единственно верный способ вычисления факториала

Reading time 4 min
Views 50K

Введение


Вычисление факториала — одна из традиционных программистских задач для собеседований. Если вдруг кто забыл, факториал натурального числа N обозначается как N! и равняется произведению всех натуральных чисел от единицы до N включительно. Например, $6! = 1 \cdot 2 \cdot 3 \cdot 4 \cdot 5 \cdot 6 = 720$. Казалось бы, что тут сложного? Однако есть свои нюансы.

Например, сравним два самых распространённых способа вычисления факториала.

Через цикл
function factorial(n){
    var result = 1;
    while(n){
        result *= n--;
    }
    return result;
}


Через рекурсию
function factorial(n, result){
    result = result || 1;
    if(!n){
        return result;
    }else{
        return factorial(n-1, result*n);
    }
}


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

В любом случае, оба эти способа слишком примитивны, чтобы по ним судить о знаниях кандидата. А вот опытный разработчик на React.js уже может написать что-то в этом роде:
Узнать, что же напишет опытный разработчик на React.js
Total votes 21: ↑12 and ↓9 +3
Comments 47

Пятничный JS: как вдохновиться Smalltalk'ом и попасть в ад

Reading time 5 min
Views 20K
Когда я читал книгу «Паттерны разработки игр», написанную замечательным человеком по имени Bob Nystrom (я не пишу его имя по-русски, поскольку не имею ни малейшего понятия, как это произносится), в одной из глав мне на глаза попалась небольшая ода языку Smalltalk как праотцу всех современных объектно-ориентированных языков, намного опередившему своё время. Поскольку я по жизни испытываю необоримую приязнь ко всяким винтажным языкам, естественно, я полез про него гуглить. И разумеется, вместо того, чтобы вынести из этого опыта что-то полезное, я научился плохому.


Доктор, откуда у вас такие картинки?
Total votes 77: ↑74 and ↓3 +71
Comments 39

Лучшие головоломки, про которые не знает никто*

Reading time 5 min
Views 94K
*почти

Бодрый день, дамы и господа. Я наконец решил, что негоже мне сидеть в рид-онли, когда у меня в голове зреет столько полезных и нужных комментариев, и пора получить инвайт. А значит, надо писать пост. О чём? Конечно же, о том, что я люблю и знаю — об играх. Конкретно — о головоломках.

Огромный недостаток головоломки по сравнения с какими-нибудь ММОРПГ — очень малая реиграбельность. Я всегда думал, что технология стирания памяти в «Вечном сиянии чистого разума» использовалась не по назначению. Вместо того, чтобы изжить из воспоминаний какую-то женщину, не лучше ли забыть своё прохождение любимой игры, а потом пройти её заново? К сожалению, пока что это фантастика. Поэтому всё, что я могу — изнывая от ностальгии, в письменной форме вспоминать все эти прекрасные вещи, вернуться к которым мне, увы, не суждено.

Учитывая «одноразовость» головоломок, тем более странно и в чём-то даже преступно, что о замечательнейших представителях этого жанра узнаёшь практически случайно. Мой пост имеет целью исправление этой несправедливости, и я как раз заканчиваю затянувшееся предисловие и перехожу к сути.
Total votes 78: ↑74 and ↓4 +70
Comments 117
1

Information

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