Пишу, по большей части, про историю, свою жизнь и немного про программирование.

Минус ноль в JavaScript

Я, конечно, знаю, что JavaScript хранит числа по стандарту IEEE 754, но всё больше как-то теоретически. То есть, я знаю, что в языке есть NaN, бесконечности с разным знаком…

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

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

Как вы можете получить минус ноль? Например, просто написав что-то вроде «-x», где в «x» оказался ноль. Или округлив отрицательное число: Math.ceil(-0.5). В стандарте положительный и отрицательный ноль равны, знак нуля не исчезает при умножении, делении и нахождении квадратного корня. То есть он довольно живуч, но малозаметен.

Похоже, что в реальном коде минус ноль может проявить себя в двух вещах: делении и операции atan2, именно так его и можно отличить от положительного нуля:

function isNegativeZero(x) {
    return x === 0 && (1 / x) === -Infinity
}

function isNegativeZeroToo(x) {
    return x === 0 && Math.atan2(x, x) < 0
}
60 комментариев
cru3l 2011

отличный вопрос для собеседования в Яндексе

Евгений Степанищев (bolknote.ru) 2011

Комментарий для cru3l:

Есть такой анекдот: «если вы купили флейту, теперь у вас есть флейта. Если вы купили камеру — вы фотограф».

Вы, похоже, из лиги «фотографов», а я считаю, что если вы не знаете язык, на котором программируете, то вы просто «купили флейту».

Намёк понятен?

cru3l 2011

Комментарий для Евгения Степанищева:

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

Евгений Степанищев (bolknote.ru) 2011

Комментарий для cru3l:

Я не считаю себя сейчас хорошим программистом на JavaScript, появилось масса нового, о чём я представления пока не имею. Кроме того, есть детали, которые я мог пропустить. Я стараюсь чтобы такого не было, это ещё не значит, что мне одинаково хорошо удаётся это сделать в любом языке.

А если будете ещё троллить, я просто поудаляю ваши комментарии, включая эти. Мне одну кнопку нажать, делов-то.

cru3l 2011

Комментарий для Евгения Степанищева:

Да чего вы сразу обижаетесь?
Ну проводит Яндекс собеседования так, ваше право. Просто забавно, что вы вчерашний возможно не прошли бы собеседование у вас же сегодняшнего )

Евгений Степанищев (bolknote.ru) 2011

Комментарий для cru3l:

Да, и ещё.

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

cru3l 2011

Комментарий для Евгения Степанищева:

Мне кажется если уж и задавать такие вопросы, то было бы справедливо ставить плюс кандидату если он знает ответ, но не ставить минус, если не знает.

Евгений Степанищев (bolknote.ru) 2011

Комментарий для cru3l:

Да чего вы сразу обижаетесь?

Я не люблю троллинг. Смирнов вон как-то умеет в такие перепалки вступать, а мне кажется, что это напрасная трата сил и времени.

Ну проводит Яндекс собеседования так, ваше право.

Яндекс большой. Почти 3 тысячи человек, как он только собеседования не проводит. Кстати, если человек не ответил на какой-то вопрос (и даже группу вопросов) это совершенно не значит, что я не возьму его на работу.

Просто забавно, что вы вчерашний возможно не прошли бы собеседование у вас же сегодняшнего

Если бы поступал на вакансию advanced javascript developer, то наверняка не поступил бы. Ещё бы я не поступил на C++ developer или, там, на вакансию маркетолога.

Я не работаю программистом JavaScript, более того, я вообще программистом не работаю, хоть и программирую иногда.

За последние две недели я написал на работе 4 строчки кода, около 10 строк конфига nginx и не сделал ни одного коммита.

Евгений Степанищев (bolknote.ru) 2011

Комментарий для cru3l:

Мне кажется если уж и задавать такие вопросы, то было бы справедливо ставить плюс кандидату если он знает ответ, но не ставить минус, если не знает.

На некоторых вопросах ровно так и происходит. Вопросы совершенно разные.

Например, я даю некоторые тесты, чтобы посмотреть как человек решает задачу. Я смотрю на сам процесс, мне совершенно неважно решит ли он задачу из такого теста.

анонимус 2011

Комментарий для cru3l:

cru3l не на пустом месте подковырнул. собеседования на вавансию программиста порой этим и достают, что хочется задающего вопросы послать подальше.
я сеячас делаю то что можно назвать RIA с испольщованием Jquery UI — но я вполне признаю что я не знаю 10% того что можно знать о JS и знаю 1% информации о Jquery UI. для базовой части приложения этого может хватить. не хватит — буду рыть документацию еще. Но если я буду рыть не по мере необходимости — а от и до — я в этом ЗАВЯЗНУ.

Потому я считаю неправильным задавать стопицот вопросов о определенных особенностях языка. сам из порой просто не помню — я помню куда посмотреть чтобы взять.
Правильный вариант проверки навыков — дать задачку работы с конструктциями языка при наличие документации.
например задачку создать в PHP класс, имитирующий при чтении большого файла(условие — не надеяться на память доступную скрипту) обращение к массиву(так чтобы foreach заработал ) — при полной документации по ООП решали единицы :)

анонимус 2011

чорт. опечатался. ну да фиг с ним

cru3l 2011

Комментарий для Евгения Степанищева:

Спасибо за разъяснения. Судя по всему, росказни о собеседованиях в Яндексе несколько преувеличены «фотографами»

Евгений Степанищев (bolknote.ru) 2011

Комментарий для анонимус:

Потому я считаю неправильным задавать стопицот вопросов о определенных особенностях языка. сам из порой просто не помню — я помню куда посмотреть чтобы взять.

Вы на Перле раньше не программировали, нет? :) Иначе откуда такое мнение, что нужно только писать на языке, а не читать его?

С вами вместе работают другие люди, они участвуют в написании кода, иногда они «подхватывают» ваши куски, иногда вы им помогаете что-то написать.

В условиях, когда есть два программиста, один из которых бегло читает код, а второй лезет в словарь, чтобы посмотреть что будет, если написать typeof NaN, то как думаете, кого из них я возьму на работу?

Если ответ почему-то не очевиден, то я отвечу: предпочту первого, потому что он будет быстрее работать.

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

Но платить ему будут меньше, конечно же.

Евгений Степанищев (bolknote.ru) 2011

Комментарий для анонимус:

Если ответ почему-то не очевиден, то я отвечу: предпочту первого, потому что он будет быстрее работать.

Тут, конечно, нужно понимать, что это при прочих равных.

анонимус 2011

Комментарий для Евгения Степанищева:

ну тут крайности...
javascript:alert(typeof(NaN) ); в строке браузера сказало что будет number :)
я typeof сам часто пользую из-за особенностей работы некоторых JS библиотек. но я не могу сказать что я могу перечислить на вскидку ВСЕ что может эта функция вернуть :)

в том и проблема что чаще приходится решать задачу «на стыке». делать JSON отработчик на PHP и код на JS который с этим что-то делает по какой-то логике. «бегло-читающие» код в таких ситуациях часто впадают в ступор и даже не представляют как ТАКОЕ отлаживать в случае проблем. потому как зубрежка для них выше по рангу чем способность размышлять.

Евгений Степанищев (bolknote.ru) 2011

Комментарий для анонимус:

потому как зубрежка для них выше по рангу чем способность размышлять

Я не понимаю как можно читать код, что-то зазубрив. Как прочитать вот это, например (это JavaScript 1.8):

(function (x) x(x))(function (z) function (y) z)(1)(2)(3)

Ну вызубрил я что-то, как мне это поможет?

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

Евгений Степанищев (bolknote.ru) 2011

Комментарий для анонимус:

javascript:alert(typeof(NaN) ); в строке браузера сказало что будет number :)

То есть вы запустили этот код? Так ведь это часть стандарта IEEE 754, которому следует определённое количество языков (JavaScript, PL/SQL и так далее).

IEEE 754 — стандарт представления чисел. NaN — это число, согласно этому стандарту, а не потому что авторы JavaScript так захотели.

анонимус 2011

Комментарий для Евгения Степанищева:

я в курсе что такое NaN, более того, я физмат закончил и вполне представляю что есть +0 и -0 и откуда это идет.
Простой пример, относительно тех же типов данных.
http://docs.php.net/manual/en/function.gettype.php

Warning
Never use gettype() to test for a certain type, since the returned string may be subject to change in a future version. In addition, it is slow too, as it involves string comparison.
Instead, use the is_* functions.

Все довольно переменчиво. есть какие-то базисные вещи. кстати стандарты тоже со временем меняются.

Еще простой пример:
Сишные функцие работ со строками(strcmp, ...) уже с C99 могут «понимать» кодировки в зависимости от текущей локали и не надо задействовать уникодовские функции. но так стало с определенного момента. а до этого было время когда со строками в другой кодировке приходилось писать сво библиотеку, да более того — грузить свой шрифт(я про времена засилия MS DOS <= 6.22- которые зацепил и приходилось это делать)

Я про то, что не любой код получится читать БЕГЛО. когда влез в проект — в курс дела — да, тут не спорю.(множество данных которое держишь в голове становится меньше и проблем нет).

хотя я не спорю что есть люди, которые сходу врубаются в чужой говнокод
ЗЫ. код такого типа как Вы показали считаю говнокодом -​-​ по простой причине. Поддержка такого кода оборачивается головной болью.
ЗЗЫ. я не перлист и этот марсианский язык не терплю. его «стопицот способов прострелить себе ногу» приводят к нечитаемому коду.
такие дела

SiMM 2011

Комментарий для анонимус:

IEEE 754 — стандарт представления чисел. NaN — это число, согласно этому стандарту, а не потому что авторы JavaScript так захотели.

Полагаю, что у авторов JavaScript’а это конкретная константа, в то время как согласно IEEE 754 это целое множество значений, у которых значение порядка максимально и мантисса не равна нулю.

Евгений Степанищев (bolknote.ru) 2011

Комментарий для SiMM:

Полагаю, что у авторов JavaScript’а это конкретная константа, в то время как согласно IEEE 754 это целое множество значений, у которых значение порядка максимально и мантисса не равна нулю

На чём основано ваше предположение.

Евгений Степанищев (bolknote.ru) 2011

Комментарий для анонимус:

код такого типа как Вы показали считаю говнокодом — по простой причине. Поддержка такого кода оборачивается головной болью

Я ведь специально подчеркнул, что код подобный этому нигде не используется.

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

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

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

SiMM 2011

На чём основано ваше предположение.

Дык присвойте переменной NaN — она будет иметь конкретное значение знака, мантиссы и порядка. Любопытно, конечно, посмотреть, как операции сравнения будут работать (с теми же inf и -inf, до кучи), но я в яваскриптах не силён.

Евгений Степанищев (bolknote.ru) 2011

Комментарий для SiMM:

NaN == NaN // false
NaN === NaN // false

Евгений Степанищев (bolknote.ru) 2011

Кстати, вот смешное из определение NaN, я это иногда спрашиваю на собеседованиях:

a = NaN, a == a // false

SiMM 2011

Комментарий для Евгения Степанищева:

Вообще я имел в виду сравнить при разных значениях мантиссы, но вполне допускаю, что это не имеет значения — если один из аргументов подходит под определение NaN — результат сравнения, видимо, false.
И, кстати, операций сравнения несколько больше, чем два.
Если NaN == NaN — false, то
NaN != NaN/inf/-inf (или как там в JS неравенство?) — true? А как насчёт
NaN > NaN/inf/-inf
NaN < NaN/inf/-inf
?

Евгений Степанищев (bolknote.ru) 2011

NaN != NaN // true
NaN != Infinity // true
NaN != -Infinity // true
NaN < NaN // false
NaN < Infinity // false
NaN < -Infinity // false
NaN > NaN // false
NaN > Infinity // false
NaN > -Infinity // false

gogis 2011

Я не троллю, но.
Программист, намеренно использующий в рабочем коде 5% языка, когда их можно заменить простыми конструкциями остальных 95% — тролль и груз для команды разработчиков, которые полезут из-за него в документацию. Меня реально бесит от таких «гуру» и чтобы понять почему, надо подумать.
В данном случае я приверженец идеологии XP.

Embrace simplicity, Luke!

Артур 2011

«я это иногда спрашиваю на собеседованиях» — как же неимоверно бесят вот такие самоутверждающиеся интервьюеры. Причем они сами-то не знали о тех фишках, о которых спрашивают — просто прочли где-нить на западном блоге и давай потом умничать. Такие мелочи, типа «NaN == NaN» не нужно знать — могу гарантировать, что за всю историю человечества нет ни одной строчки кода, где подобное быдлокодовское сравнение имеет место.

Евгений Степанищев (bolknote.ru) 2011

Комментарий для Артур:

«я это иногда спрашиваю на собеседованиях» — как же неимоверно бесят вот такие самоутверждающиеся интервьюеры

Ещё один психолог по переписке? Вы были у меня на собеседовании?

Такие мелочи, типа «NaN == NaN» не нужно знать — могу гарантировать, что за всю историю человечества нет ни одной строчки кода, где подобное быдлокодовское сравнение имеет место.

Конечно нужно. Это не мелочи, а азы. И, конечно, сравнения в таком виде нет. Есть какое-то var1 == var2, где в какой-то переменной может быть NaN.

Кроме того, если не знать этой особенности, легко накодить что-то вроде if (var1 == NaN), что является уже ошибкой.

Евгений Степанищев (bolknote.ru) 2011

Комментарий для gogis:

Программист, намеренно использующий в рабочем коде 5% языка, когда их можно заменить простыми конструкциями остальных 95% — тролль и груз для команды разработчиков, которые полезут из-за него в документацию

Учиться надо, а не беситься. Что вам мешает овладеть инструментом, которым вы пользуетесь каждый день? Сложно выделить один вечер и прочитать спецификацию?

Vladimir Moskva (fulc.ru) 2011

Комментарий для gogis:

Программист, намеренно использующий в рабочем коде 5% языка, когда их можно заменить простыми конструкциями остальных 95% — тролль и груз для команды разработчиков, которые полезут из-за него в документацию

А почему эти разработчики ленятся посмотреть в документацию?

gogis 2011

Учиться надо, а не беситься. Что вам мешает овладеть инструментом, которым вы пользуетесь каждый день? Сложно выделить один вечер и прочитать спецификацию?

Надо шире думать. Не с позиции себя, а команды. У тебя проект, над которым работало и будет работать 10 человек. Они будут приходить и уходить. Искать гуру-девелоперов проблематично и дорого, поэтому писать так, чтобы было понятно сферическому программисту выгоднее в перспективе.

gogis 2011

А почему эти разработчики ленятся посмотреть в документацию?

Да никто не ленится. Просто никакая группа людей не покроет знания друг друга на 100%. Намеренно извращать код, делая его «изысканным» но сложным для восприятия/чтения — вот где зло.

Евгений Степанищев (bolknote.ru) 2011

Комментарий для gogis:

Они будут приходить и уходить. Искать гуру-девелоперов проблематично и дорого, поэтому писать так, чтобы было понятно сферическому программисту выгоднее в перспективе

У нас текучка низкая. По крайней мере, в моей команде. Много проектов на поддержку (мы используем и готовые чужие проекты), так что важно уметь читать код.

SiMM 2011

Комментарий для Евгения Степанищева:

NaN < NaN // false
NaN > NaN // false

Интересно, а -0 меньше 0? :)

анонимус 2011

Комментарий для gogis:

Программист, намеренно использующий в рабочем коде 5% языка,

намеренно? oh really? я просто признаю что пользую не больше 10% быдлопохапе в работе. но кто знает может остальные 90% мне в данный момент в данном модуле прост не нужны? :)
Например DOM, абстрактные классы php5, куча всяких поездатых плюшек.
Вы что так уверены что они везде нужны?
таки стоит признать что в узких задачках пользуетс маленький процент объема знаний. это не значит что я не знаю про все остальное. просто зачем пихать то что не нужно туда где оно не нужно?

Сложно выделить один вечер и прочитать спецификацию?

я это время от вреиени делаю. таки да!

чтобы было понятно сферическому программисту выгоднее в перспективе.

код должен быть максимально понятен. желательно чтобы даже для дебила.
а то сам откроешь свой код 10летней давности и срешь кирпичами — непонятно ни%уя

Интересно, а -0 меньше 0? :)

вбей простенький скрипт и посмотри. не сцы винт оно не форматнет. :)

Vladimir Moskva (fulc.ru) 2011

Намеренно извращать код, делая его «изысканным» но сложным для восприятия/чтения — вот где зло.

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

Евгений Степанищев (bolknote.ru) 2011

Комментарий для SiMM:

Интересно, а -0 меньше 0? :)

Они равны.

hshhhhh.name 2011

Комментарий для Евгения Степанищева:

За последние две недели я написал на работе 4 строчки кода, около 10 строк конфига nginx и не сделал ни одного коммита.

а... Так ты сисадмин. Всё понятно.

Евгений Степанищев (bolknote.ru) 2011

Комментарий для hshhhhh.name:

Вот там ↑↑↑↑↑↑↑↑ написано, что я руководитель группы разработчиков.

анонимус 2011

Комментарий для Евгения Степанищева:

Они равны.

запускал, проверял? ))))

Vladimir Moskva (fulc.ru) 2011

Комментарий для Евгения Степанищева:

Signed zero -​-​ это ведь не только -0, но и +0. Такой в JS есть?

Vladimir Moskva (fulc.ru) 2011

Почитал спецификацию, вопрос отпал. Показалось, что имеет смысл отделять понятия Signed zero от просто ноля (который unsigned). Так же как и пределом последовательности может быть как 0, так и ±0.

Евгений Степанищев (bolknote.ru) 2011

Комментарий для анонимус:

запускал, проверял? ))))

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

jankkhvej (jankkhvej.blogspot.com) 2011

Перечитал первый камент, так и не понял, как его можно было воспринять на свой счёт и так затроллиться. Ну действительно, хороший вопрос же. Я вот на PHP пописываю с времён PHP/FI, а про  http://php.net/manual/en/function.ignore-user-abort.php не знал до сегодняшнего утра.
Кстати, считаю, что ignore_user_abort вредна, как goto — создаёт ложное чуство защищённости, и позволяет считать безопасным написание двух зависимых действий без транзакции. Мол, всё равно ж выполнение скрипта не прервётся… Хотя сама функция поступает ровно так, как она называется.
Так что вопрос про нули хороший для любого собеседования.

анонимус 2011

Мол, всё равно ж выполнение скрипта не прервётся…

да кто вам такое сказал? :)
или max_execution_time у вас в ноль стоит и вы моете себе такое позволить? :)

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

jankkhvej (jankkhvej.blogspot.com) 2011

анонимус, считаешь, что выставив в 0 max_execution_time и ignore_user_abort в true, можно забыть про исключения и транзакции?

Евгений Степанищев (bolknote.ru) 2011

Комментарий для jankkhvej.blogspot.com:

Я не анонимус, но не считаю. Например, такой пример прекрасно прерывается по Ctrl+C:

<?
ignore_user_abort(true);
set_time_limit(0);

for ($i = 0; $i<1000000; $i++) {
sin($i);
}

И умирает при получении TERM и мало ли ещё что. Память внезапно кончилась (у PHP есть ограничение на память), segfault получился и так далее.

Перечитал первый камент, так и не понял, как его можно было воспринять на свой счёт и так затроллиться

Потому что этот вопрос надо воспринимать в контексте. До этого было несколько обсуждений собеседований в Яндексе.

jankkhvej (jankkhvej.blogspot.com) 2011

Комментарий для Евгения Степанищева:

Эх, каменты в блогах — не группы новостей в старом добром Netscape communicator. Может, если уж комментаторы зарегистрированы, давать возможность посмотреть последние каменты по клику на аватарке?

Евгений Степанищев (bolknote.ru) 2011

Комментарий для jankkhvej.blogspot.com:

Вообще, а зачем видеть комменты какого-то конкретного автора? Я просто не могу пользы понять.

анонимус 2011

Комментарий для jankkhvej.blogspot.com:

анонимус, считаешь, что выставив в 0 max_execution_time и ignore_user_abort в true, можно забыть про исключения и транзакции?

lolwhat?
я то как раз так не считаю.
НО. для одминских задач — что-то там запустить и тд — допускаю.
а когда такое на массово дергаемом юзерами скрипте — тадада — программера надо вешать.

Я не анонимус, но не считаю. Например, такой пример прекрасно прерывается по Ctrl+C:

В консоли. А на вебсервере если юзер дернул его и прервал чтение данных он будет работать. ну или если время взаимодействия истекло.
Евгений, я для частных ситуаций обработки данных если разово что-то большое надо запустить — запустить скрипт на вебсервере и «забыть» — тут ниче плохого нет.
А вот если такой скрипт все подряд дергают — такое делать низя.
в общем все зависит от предусловий. (с) Пастер

Евгений Степанищев (bolknote.ru) 2011

Комментарий для анонимус:

А на вебсервере если юзер дернул его и прервал чтение данных он будет работать. ну или если время взаимодействия истекло

Вы какую-то одну цитату выдернули. Почему? Я там ещё несколько случаев привёл.

Евгений Степанищев (bolknote.ru) 2011

Комментарий для анонимус:

И, честно сказать, я не очень-то понимаю чему вы пытаетесь меня научить :) Я на PHP программировать начал где-то в конце 90-х, ещё на 3-й версии программировать начал. Знаю этот язык вдоль и поперёк :)

анонимус 2011

Комментарий для Евгения Степанищева:

ну.... смотря как писать :)
например есть задача — раз в час обновлять кейворды из свежеобновленных статей пропущенные через стеммер портера(нужно было для написания автодополнения шустрого). можно запускать в кроне. можно запустить руками через веб и там такая штука будет нужна.
Некоторые любят скрипты такой пакетной обработки запускать не в консоли или через крон а со стороны вебсервера. там такая штука имеет смысл(max_execution_time в 0 + ignore_user_abort в true).

сожрет скрипт память или нет — понятно от кого зависит :)
я про задачки из разряда «однообразно перелопатить кучу данных». там это может иметь смысл.
риск что за это время что-то будет с вебсервером тоже есть :) ну так можно и точку на которой скрипт стопорнулся запомнить :)

hshhhhh.name 2011

Комментарий для Евгения Степанищева:

Вот там ↑↑↑↑↑↑↑↑ написано, что я руководитель группы разработчиков.

http://4.bp.blogspot.com/_DoMs4zc6wuI/TALgtABzGuI/AAAAAAAAB4E/9rDrYY6iqcQ/s1600/Sarcasm-the-big-bang-theory-8135257-500-281.jpg

jankkhvej (jankkhvej.blogspot.com) 2011

Комментарий для Евгения Степанищева:

Ну, чтобы видеть контекст — сколько в каком топике и чего этот комментатор накомментил.

Евгений Степанищев (bolknote.ru) 2011

Комментарий для hshhhhh.name:

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

Евгений Степанищев (bolknote.ru) 2011

Комментарий для jankkhvej.blogspot.com:

То есть чтобы понять не тролль ли это или что? Я просто пытаюсь задачу представить, ведь от этого решение зависит.

jankkhvej (jankkhvej.blogspot.com) 2011

Ну, не только «тролль/не тролль», просто вообще составить представление о.
Чтобы хоть так вот примерно было — https://groups.google.com/forum/#%21activity/ukr.nodes/YpHPUyOI2nYJ

Евгений Степанищев (bolknote.ru) 2011

Комментарий для jankkhvej.blogspot.com:

Хм… всё-таки пока до конца не понимаю зачем это. Подумаю.