Pull to refresh
20
0
Send message

Index-based programming или зачем нам все эти if, switch, тернарный оператор?

Reading time 6 min
Views 8.9K
Недавно читал топип о красоте кода. В комментариях, набрала популярность тема переноса скобочек при записи условного оператора. В одном из вариантов пример из статьи выглядел так:
if (typeof a ! == "undefined"
&& typeof b ! == "undefined"
&& typeof c === "string")
{ 
    call_function(a, b, c);
    // ...
}
Задумался над самими условиями: они немного странные, хотя и часто встречаются. Внутри «call_function» будет проверяться тип «a» и тип «b», но не тип «с». С другой стороны, количество поддерживаемых сочетаний типов «a» и «b», поддерживаемых функцией конечно, и, скорее всего, фиксировано, а, значит, было бы полезно эти сочетания увидеть. А этот пост натолкнул на мысль, что можно вообще обойтись без условных операторов. Так и зародилась идея отказаться от условных операторов в пользу индексов. Несмотря на то, подход рассматривается в рамках Javascript, он с успехом может быть применен во многих других языках после учета их синтаксических особенностей.

Не надейтесь увидеть тут картины Рембранта мира программирования. Код в статье — произведение Дали. Впрочем, как и сама статья.
Читать дальше →
Total votes 20: ↑12 and ↓8 +4
Comments 14

Решение проблемы звука в одно ухо у некоторых роликов на Youtube

Reading time 2 min
Views 16K
Не очень давно столкнулся со следующей проблемой: при просмотре некоторых роликов на youtube звук идет только на левый спикер. При прослушивании через наушники это доставляет некоторые неудобства.

Было найдено програмное решение для Windows 7 с использованием powershell и библиотеки для работы со звуком NAudio. Основная идея — преобразовать стерео в моно.
Читать дальше →
Total votes 9: ↑4 and ↓5 -1
Comments 0

Как слушать радио с использованием powershell и node.js

Reading time 5 min
Views 6.5K
Часть первая: powershell и mci.

Используемая операционная система — Windows 7.
Первый вопрос, который возникает: как воспроизвести mp3 в powershell?
Ранее на хабре были упоминания подобного вопроса:
Как воспроизвести mp3 из командной строки в Windows 7?
Как же все-таки пользоваться PowerShell?

Ввиду отсутствия удовлетворительного ответа, было принято решение использовать Media Control Interface или mci.
Плюсы следующие: встроенность в систему, достаточная низкоуровневость, есть возможность посылать команды в виде строки.
Многим mci известен по ответу на вопрос: «как программно отрыть устройство чтения-записи компакт дисков?», хотя предоставляет много других возможностей. Ниже приведены некоторые сценарии использования.

Извлечение CD-ROM:
mci 'set cdaudio door open'

Воспроизведение локального mp3-файла:
mci 'play C:\\temp\\Kalimba.mp3'
mci 'status C:\\temp\\Kalimba.mp3 mode'

Запись в wav-файл:
mci 'open new type waveaudio alias RecWavFile'
mci 'set RecWavFile bitspersample 16 samplespersec 44100 channels 2'
mci 'record RecWavFile'
mci 'stop RecWavFile'
mci 'save RecWavFile C:\\temp\\RecWavFile.wav'
mci 'close RecWavFile'
mci 'play C:\\temp\\RecWavFile.wav wait'

Простой вариант воспроизведения потока из сети:
mci 'play http://some-radio-server.com:80/some-radio-channel.mp3'

Читать дальше →
Total votes 9: ↑7 and ↓2 +5
Comments 3

One ring

Reading time 2 min
Views 877
Само понятие персональный компьютер устаревает, ему на замену постепенно приходит персональная реальность. Очки дополнительной реальности заменяют монитор.
image
А вот, идея для потенциального устройства, заменяющего мышь, а с помощью, например, 8pen и клавиатуру. Конечно, также мышь можно заменить слежением за взглядом, а клавиатуру — голосовым управлением, но не хватает чего-то осязаемого. А что может быть более осязаемым, чем пальцы. Осталось только научиться считывать с них информацию. Первое, что приходит на ум — это чувствительные перчатки. Но есть вариант получше — кольцо, улавливающее звук трения пальцев. Предположительно, должно одеваться на правый средний и быть похожим на эту картинку из википедии.
Читать дальше →
Total votes 19: ↑12 and ↓7 +5
Comments 11

Цзяньшицзы и tcl

Reading time 4 min
Views 5K
Есть такой редкий малоизвестный язык программирования tcl. В википедии он расписан хорошо, но при написании программы возникнут вопросы.
Цзяньшицзы — это такая китайская(судя по названию) игра, переводится как «выбирание камней», интересна сама по себе: есть две кучки камней с любым количеством камней, играют двое. Каждый игрок может взять любое число камней из любой кучи, а также равное количество сразу из обоих. Побеждает тот, кто возьмет последний камень. Более подробное описание тут. Игра на сохранение баланса: с одной стороны, нужно чтобы числа в кучах различались, с другой, чтобы различие было не слишком большим. Начнем с того, что игра имеет выигрышную стратегию, происхождение которой мы рассматривать не будем. Возьмем лишь краткое описание. Существуют сочетания размеров куч, при которых игрок, который будет делать следующий ход, проигрывает.




Квадратные скобки обозначают взятие целой части. Нет, первая формула — это не числа Фибоначчи, хотя коэффициент тот же, но тут арифметическая прогрессия, а не геометрическая. Сразу заметим, что разница между числами пары составляет n.

Ранее на хабре были Реверси на TCL в 64 строки и Пятнашки на TCL в 10 строк, в которых был компактный и красивый код, здесь вы такого не увидите. Также он, возможно, далек от правил хорошего тона. Вобщем, если вам что-то покажется говнокодом, скорее всего так оно и есть. С другой стороны, это даже хорошо, потому что будет что улучшать в дальнейшем. Отчасти из-за того, что язык для меня новый, отчасти чтобы было удобнее делать пояснения. Также отсутствуют необязательные проверки.
Далее будут идти куски программы. Она далеко не оптимальна, но показывает особенности языка и работает.
Читать дальше →
Total votes 7: ↑4 and ↓3 +1
Comments 15

Первая страница выдачи — не гарантия безопасности

Reading time 2 min
Views 788
Многие привыкли вводить слово «вконтакте» в поиск гугла вместо набора адреса в адресной строке, где адреса, кстати, запоминаются. Почему люди настолько стали доверять поисковикам? Сам процесс поиска связан с рисками. Это как идти в лес на охоту: не знаешь кого встретишь, и чем это может обернуться. Другое дело, своя теплица, где всегда можно найти свежие апельсины. Если есть теплица, зачем ходить в лес за апельсинами.
Большинство полагает, что поисковики не ведут на сайты, предназначенные для фишинга. Я тоже когда-то так думал. Пока не столкнулся с множеством(не одним) примеров, доказывающих обратное.
В комментариях, сказали, что антивирусник помогает, так что если у вас он есть, топик скорее всего не для вас.
Читать дальше →
Total votes 25: ↑4 and ↓21 -17
Comments 21

Бот для игры в камень, ножницы, бумага

Reading time 4 min
Views 16K

Теория


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

Сама игра состоит в выборе и показе сопернику одного из трех вариантов: колодец(камень), ножницы и бумага. Причем, ножницы тонут в колодце(тупятся о камень), бумагу режут ножницы, колодец накрывается бумагой(камень оборачивается бумагой). Обозначим:

  1. 0 — колодец(камень)
  2. 1 — ножницы
  3. 2 — бумага

Предположим, что игра ведется достаточно долго, чтобы можно было собрать статистику, но не так долго, чтобы человек начал изменять свое поведение, раскусив алгоритм предсказания. Имеем последовательность пар чисел: (0, 1) (0, 2) (2, 2) (2, 0)..., где первое число показал бот, второе — человек. Чтобы определить победителя в паре, сравним числа. (0 — 1) % 3 = 2, значит человек проиграл, (0 — 2) % 3 = 1, значит человек победил, (2 — 2) % 3 = 0, ничья. Обозначим n — длина последовательности чисел из пар. Число возможных последовательностей равно 3^n. При n = 5 получится 243 варианта, что много больше 32 для двух вариантов выбора. Ясно что получить все варианты в течение одной игры маловероятно, поэтому усовершенствуем гадалку. Не каждый выбор человек делает опираясь на все n элементов последовательности чисел, некоторые ее элементы он игнорирует. Назовем такие элементы пустыми.
Читать дальше →
Total votes 16: ↑13 and ↓3 +10
Comments 9

Information

Rating
Does not participate
Location
Украина
Registered
Activity