Pull to refresh
64
0.4
Михаил@michael_v89

Программист

Send message
Это, как мне кажется, полная чушь, придуманная неграмотными фантастами. Показательный пример был в фильме «Чаппи». Вот представьте, лежите вы в лаборатории, и рядом с вами ваш информационный и генетический клон. Если вы порежете палец, больно будет вам. Если в вас выстрелят, исчезнете вы и ваша информационная составляющая. А не клон.
В принципе, во многих играх используется такая механика, когда на последнем дыхании персонаж сражается яростнее

Встречал такое в игре «Проклятые земли 2», очень разочаровало. Там по сюжету полная фигня получилась. Всю игру выбираешь тактику, навыки, которые надо качать, а в конце у него умирает подружка, и у героя из-за ярости половина навыков в 2 раза увеличивается просто так. Неинтересно это.
Вспоминаются игры на Денди и Сеге. Надо было пройти, пока играешь, а то потом заново надо начинать.
Почитал описание — чушь собачья, как говорится. Первый момент привыкания к игре — привыкание к физике, которую придумали авторы. Когда придумают нейроинтерфейсы, которые будут обрабатывать движения персонажа на основе развития мышц игрока, тогда может это и будет иметь смысл. Сейчас нет.
Вероятность «раз в миллион лет» говорит о том, что за миллион лет событие скорее всего произойдет хотя бы один раз. Но она ничего не говорит о том, в какой день это событие произойдет. Оно может произойти в любой день, например, в первый.
Логика, верстка, и работа с БД в одном файле. В PHP за такое давно по рукам бьют.


event(logout) ->
    wf:user(undefined)
...
buttons() ->
    case wf:user() of
        undefined 

Я ошибаюсь, или это обычное императивное программирование с изменением переменной?

Еще раз отмечу, что kvs плохо подходит для постраничной навигации, и этот код просто демонстрация того, как применения несоответствующих инструментов приводит к запутыванию кода
А как все-таки сделать правильно, чтобы код не был запутанным? Спрашиваю не с целью потроллить, мне правда интересно
Давайте рассмотрим пример. Прямоугольник — плоская фигура с четырьмя прямыми углами. У него есть ширина (width) и высота (height)

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

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

Кстати, обычно как-то обходится стороной то, что если задать прямоугольнику одинаковую ширину и высоту, то фактически он будет квадратом, но в программе он останется прямоугольником. Если бы у нас была возможность изменить тип объекта после изменения параметров, то наследовать было бы можно. Присвоили значения width = 10, height = 10 — тип rect изменился с Rectangle на Square. Насколько это хорошо для разработки — это отдельный вопрос.

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

А почему мы решили, что прямоугольник можно задавать 2 сторонами? Прямоугольник на плоскости не задается 2 сторонами, он задается 4 точками. Как и квадрат. Кроме того, это математический объект, и мы можем его только задать. Если мы его поменяем, то значит мы задали другую фигуру — может квадрат, может ромб, может просто какой-то четырехугольник. С этой точки зрения, прямоугольник и квадрат должны иметь конструкторы с одинаковым числом параметров — координаты 4 точек. При создании должно появляться исключение, если точки не образуют соответствующую фигуру. В этом случае с наследованием проблем нет.
В статье имеется уклон в сторону «используйте нативный javascript». Выскажу мнение со своей колокольни. Я ни в коем случае не против знания чистого javascipt, просто как-то так получается, что в основном занимаюсь проектами, где уже используется jquery.

Можно легко заменить селектор типа $('div, span, article'); на document.querySelectorAll('div, span, article');

И заменить 1 символ на 25. На главной Хабра обращение к $ встречается 44 раза. А сколько будет в подключаемых скриптах?
Сделать функцию-обертку? Идем дальше.

$('button').bind('click', function(e){});

$('button').bind('click', function(e){});
// 41 байт

console.log(document.querySelectorAll('button').forEach)
// undefined
// хм

// можно сделать так (83 байт)
for(var v of document.querySelectorAll('button')) {
  v.onclick = function() {}
}

// или так (144 байт)
nodes = Array.prototype.slice.call(document.querySelectorAll('button'), 0);
nodes.forEach(function(v, i) {
  v.onclick = function() {}
});

// или с оберткой в виде функции $ (73 байта)
$('button').forEach(function(v, i) {
  v.onclick = function() {}
});

«Зачем нам нужно так усложнять себе жизнь?»

И так, иногда обертка, иногда нет, а иногда специальная обертка

document.getElementById('some_id') возвращает Element
document.getElementsByClassName('some_class') возвращает HTMLCollection[...]
document.querySelectorAll('#some_id') возвращает NodeList[...]
document.getElementById('unknown_id') возвращает null

Последнее особенно весело, если кто-то так назначил обработчик где-нибудь в main.js и не проверил на null, при этом unknown_id является known на 99% страниц, а unknown он только на некоторых и при определенных условиях.

Да, еще при изменении селектора с «id» на «class» мне надо не забыть поменять нативную функцию.

Я видел кучу больших проектов которые превращались в одно большое блюдо спагетти на клиентской стороне

Здесь полностью согласен, такое бывает. Но для проектов среднего уровня, где не требуется серьезная работа с фронтендом, jQuery неплохой выбор.
Это аналог книжного шифра, только в книжном шифре одна книга и разные координаты букв в сообщении, а у вас много книг и одна и та же координата. Книга в данном случае — это одна фотография кота. Вернее, коты здесь даже ни при чем, книга — это хеш передаваемого файла, а сама фотография — просто протокол передачи. Соответственно, все достоинства и недостатки книжного шифра имеют место быть.
Ясно, спасибо. Кстати, а есть какие-то границы, на которые сотрудник может ориентироваться — типа «среднее время должно быть 7 часов в день»?
> после начала рассылки отчетов среднее время присутствия сотрудника на рабочем месте повысилось.
Немного непонятно, а это как? Сначала работали с 9 до 18, а стали с 9 до 19?
Я тоже как-то задумался, почему в жизни счет ведется с единицы, а в компьютерах с 0. И в чем различие. Получились такие мысли.

Сначала было бы неплохо определиться, что вообще означает «прибавить единицу», как это можно выразить математически? Началось все со счета на пальцах и палочках. Целочисленный счет на числовой прямой можно выразить набором единичных векторов, следующих один за другим — первый вектор, второй вектор…


И тут возникает такой вопрос — включать концы вектора или нет в отрезок, соответствующий числу 1? Есть 4 варианта — включать оба, включать правый, включать левый, не включать.


В первом точка между векторами принадлежит им обоим, в четвертом образуются промежутки. Эти варианты отбрасываем.
Третий вариант соответствует обычному счету предметов — чтобы с уверенность сказать, что овечка перепрыгнула через забор, надо чтобы она полностью была по эту сторону забора, а если хвост у нее еще по ту сторону, то так сказать нельзя. Перепрыгнула полностью — плюс один. Ноль в этом варианте не принадлежит ни одному вектору. Думаю, это одна из причин, почему он появился позже остальных цифр. Ну типа — мы всех овечек посчитали, каждой овечке соответсвует палочка, какой еще ноль?
Второй вариант соответствует адресации, которая используется в компьютерах. Допустим, у нас есть массив четырехбайтовых целых чисел. Элементы массива состоят из байтов, байты из битов. На любом уровне удобнее отсчитывать элементы в порядке возрастания. Для получения начального элемента массива надо взять байты со смещением [0, 1, 2, 3]. Аналог обычного счета был бы такой — прибавить к адресу массива размер элемента 4 байта, байты со смещением [-1, -2, -3, -4] это начальный элемент. Опять же big/little endian здесь можно вспомнить.
Тем не менее, проще не менять исходники и посмотреть в отладчике. Речь была не только про Java, а про языки в целом.
Я правильно понимаю, что у variable в этом случае вызывается что-то типа toString(), который мы сами должны реализовать? Я имел в виду не невозможность логирования в принципе и не определение типа переменной, а сложность получить все поля с их типами и значениями для некоторой сложной структуры.
Полагаю, что не в последнюю очередь это связано с тем, что в таких языках посмотреть, что представляет из себя переменная, можно только в отладчике. В динамических для этого есть всякие var_dump() и console.log(). С другой стороны, я часто использую отладчик в PHP, он хорошо помогает разобраться в работе плохо написанного кода или в дебрях абстракций и DI-контейнеров.
Если вам это интересно, мне меньше 30, лишнего веса не было, скорее наоборот. Но я говорил не об этом. Я указал на несостоятельность ваших доводов, а не на то, что сидячий образ жизни это хорошо. А вы почему-то подменяете понятия.
Сказка учит другому — сиди за компом и похудеешь чудесным образом
В сказке сказано довольно ясно: «и так увлекся, что все время забывал поесть, и очень сильно похудел пока писал». Если мало есть, то можно похудеть. Что здесь чудесного?

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

За компом чел. будет жрать и жрать
Если некто жрет и жрет за компом, это личные проблемы этого «некта». Он будет часто есть и без компа. Не нужно проецировать 1 или 2 известных вам случая на всех людей.

Это реальность, а не то что вам хотелось бы
У меня, например, бывает так. Утром чего-нибудь перекусить, потом начать работать, потом «блин, че оно не работает, надо разобраться», потом «тут немножко доделать осталось», потом «ой блин, уже 4 часа, а я еще не обедал». Это реальность. А приводить в качестве реальности слова профессора, про критику которого даже в Википедии написано, это несерьезно.
Как мне кажется, в целом выглядит получше, чем форматы, описанные в других аналогичных статьях на хабре. Возможно, кому-то и пригодится.
Навскидку вопросы такие:
Если надо сохранить в поле весь текст этой статьи с комментариями, какой разделитель выбрать? Получается, нужен какой-то редактор, который будет назначать разделители или хотя бы просто проверять валидность разметки.
Если надо в одном поле сохранить завершающий перевод строки, а в другом нет, какая у них должна быть разметка?
Раз поднялась такая тема, тоже расскажу свою историю. На диплом делал эмулятор процессора, по документации IA32. Цель была сделать простую виртуальную машину, но при этом оставить полный доступ к оборудованию с возможностью эмулировать отдельные устройства типа CD-ROM. В основном, для ситуаций вида «скинул образ ОС на флешку, подключил виртуальный CD-ROM, поставил ОС на комп». Сначала думал — подумаешь, несколько сотен мелких команд процессора эмулировать, за год управлюсь. Я явно переоценил свои возможности, оказалось, что придумали много всяких умных штук типа DMA и GDT. Поэтому для демонстрации пришлось также написать маленькую ОС в которой использовались только простые команды, но был графический режим, драйвер клавиатуры и браузер содержимого CD. Зато 16-разрядные команды и прерывания эмулировались полностью, и можно было сделать виртуальную дискету из образа.

Скрытый текст
Дело осложнялось тем, что при любой ошибке в защищенном режиме процессор уходит в перезагрузку. Поэтому сделал систему логов, работала она так — программа пишет строки в память начиная с некоторого константного адреса, при ошибке происходит перезагрузка, при горячей перезагрузке память не обнуляется, загружается DOS, из него можно запустить специальную программу, которая из реального режима открывает доступ к 4Г памяти, читает с этого адреса строки, выводит их на экран через досовское прерывание, а при запуске можно перенаправить этот вывод в файл. Может кому пригодится такой способ.
Есть вот такое неплохое изображение с визуализацией. При некоторой фантазии можно заметить, что кубы взаимно перпендикулярны.
Скрытый текст

Information

Rating
2,220-th
Location
Россия
Registered
Activity