Pull to refresh
92
0
Бурдаков Даниил @burdakovd

Разработчик ПО

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

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

Впрочем у меня за год с примерно такой же редкой очисткой так и не пришли.
> Как писать парсеры на JavaScript
Не писать :)

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

Я похожий интерфейс в своё время пилил на Lua для packrat-парсера. Там получилось особенно хорошо, потому что в Lua можно не писать скобки при вызове функции с литералом в качестве параметра, из-за чего код получается примерно таким:
local digit = peg.R"09"


Полный код примера использования:
--- калькулятор
local function accum(u,op,v)
    if op=="+" then return u+v
    elseif op=="-" then return u-v
    elseif op=="*" then return u*v
    elseif op=="/" then return u/v
    end
end

local space = peg.S" \n\t":star()
local digit = peg.R"09"
local sign = peg.S"+-"
local unsigned = digit:plus()
local number = (sign^{0,1}*unsigned*("."*unsigned)^{0,1}):C()/tonumber*space
local Open = "(" * space
local Close = ")" * space
local mulop = peg.S"/*":C() * space
local sumop = peg.S"-+":C() * space

-- необходимо сделать Fake(), т.к. тут рекурсия value -> sum -> mul -> value
-- реальная формула для value доопределяется тремя строками ниже
local value = peg.Fake()
local mul = (value * (mulop*value):Cg():star()):Cf(accum)
local sum = (mul * (sumop*mul):Cg():star()):Cf(accum)

value:define(number + Open*sum*Close)

local expression = sum * peg.eof

--print(expression"3 + 5*9 / (1+1) - 12 + 0.012")

print(expression(io.read()))
А я вот не вижу проблемы в рандомном движении румбы (без навигации). Всё равно работает каждый день, в итоге для каждого места комнаты вероятность того что за последние три дня оно не было случайно покрыто — крайне мала.

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

Это я говорю из опыта использования румбы 555, роботов с навигацией не пробовал. Но вот сейчас переехал и собираюсь покупать нового, поэтому буду рад советам.
Там 20 минут :(

Если вы смотрели — может быть сразу скажете какой самый лучший?
Не иногда, а минимум пару раз в неделю, не так ли? Заполняется он довольно-таки быстро.
Всегда, когда можно, делаю переменную final, предпочитаю объявить две финальный переменных, чем одну изменяемую.

Я тоже так делаю, бро.

При этом при декомпиляции такого кода слова final не вижу. Вот интересно, финальность переменных поддерживается на уровне JVM или только на уровне синтаксиса компилятора?

Думаю только на уровне синтаксиса. Это ведь просто синтаксический сахар для человека, какой был бы бенефит от него в JVM? Та же история с generics в Java, после компиляции происхолит type-erasure и один и тот же код работает для всех инстансов дженерика. В отличие от C++ где каждое инстанциирование шаблона порождает независимую копию кода. Поэтому кстати в Java нельзя в шаблоне написать new T(), или T::foo().
Обходить конкретно эти грабли принято с помощью функции высшего порядка, введя таким образом промежуточный scope:
>>> lambdas = [(lambda i: lambda a: a + i)(i) for i in xrange(5)]
>>> [l(1) for l in lambdas]
[1, 2, 3, 4, 5]


Мне больше нравится как в C++ оно работает. Хочешь — захватываешь по значению, тогда всё работает предсказуемо. Хочешь — по ссылке, но тогда имей в виду что её время жизни не продлевается. Хочешь — сделай shared_ptr и захватывай его по значению.

В Java чтобы люди не путались запретили не final переменные захватывать.

А в Python как-то ни рыба ни мясо. Захват по read-only reference-counted ссылке (причём ссылка второго порядка: она ссылается на переменную, а не на сам объект: если извне в переменную записать ссылку на новый объект — в замыкании оно тоже поменяется).
Тут можно поспорить, областью видимости переменной из list comprehensions должная быть одна итерация цикла или весь цикл. Но в данном случае в питоне всё ещё веселее. Областью видимости такой переменной будет та, где был расположен цикл:
>>> lambdas = [lambda a: a + i for i in xrange(5)]
>>> [l(1) for l in lambdas]
[5, 5, 5, 5, 5]
>>> a
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined
>>> i
4
>>> l
<function <lambda> at 0x02402D30>
>>>


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

То есть если хотите, сможете этим заниматься, но это будет так же полезно как например разгадывание кроссвордов.
В данном случае он не продлевает жизнь переменным start, finish, а копирует их, т.к. захват произошёл по значению ([=]).

То есть start в строке «return start++» — это уже не тот start что в строке «auto start, auto finish», это поле в классе, сгенерированном для внутренней лямбды.
А ещё гамбургер почему-то ссылается на /posts/, из-за чего я даже не заподозрил что за ним скрывается меню, до тех пор пока не прочитал этот пост.

Но текст мог быть не обрамлён в RLE/LRE, тогда его обратить так легко не получится, т.к. неясно какой тег добавлять.

Да и вообще тег RLE/LRE например вовсе не означает что текст внутри будет написан именно в таком порядке. Он лишь задаёт основное направление текста — что по сути влияет на знаки препинания на границе текста, а также на то в каком порядке будут идти блоки LTR и RTL символов, порядок символов внутри блока зависит только от самих символов.

То есть если у нас текст тупо из символов английского алфавита — то есть это один блок, то оборачивание его в RLE-тег не изменит ровным счетом ничего.
А у нас разве есть символ обращения направления текста? Вроде только для форсинга RLE/LRE, но не для обращения.
— Объявляем о новой, улучшенной системе обслуживания! Теперь ваш «логик» может давать вам не только консультации, но и практические советы. Если вы хотите что-то сделать, но не знаете как, спросите вашего «логика»!
Затем пауза. Вроде бы выжидательная. И только потом, словно нехотя, нашего приятеля соединяют с домом. Жена отвечает и устраивает ему хай за то, за это и за другое. Он выслушивает и отключается.
— Знаете что, ребята? — говорит он, возвращаясь к столу. И рассказывает о вспышке на экране и объявлении. — Нас должны были предупредить. Сейчас посыплются жалобы. Что, если какой-нибудь кретин спросит, как ему избавиться от жены, а цензурный контур заблокирован?
Кто-то из нас сбросил туза и говорит:
— А ты попробуй спроси, вот и увидим, что будет.
Шутка, конечно. Но наш парень опять встает и набирает вопрос. В принципе на экране должен вспыхнуть символ цензурного блока и прозвучать суровый голос: «ПОДОБНЫХ УСЛУГ НЕ ОКАЗЫВАЕМ». Мы во всех банках памяти имеем цензурные блокирующие контуры, иначе детишки начнут в подробностях расспрашивать о том, до чего еще не доросли. И по многим другим причинам. Впрочем, сами убедитесь.
Так вот, наш парень набирает вопрос: «Как мне избавиться от своей благоверной?»
Просто так, смеха ради. Проходит с полсекунды. Затем экран вспыхивает.
«Логическая служба просит уточнить: она блондинка или брюнетка?»
— Эй, скорее сюда! — орет наш парень, и мы все бросаемся к нему. — Блондинка, — говорит он.
Следует еще одна короткая пауза, и потом экран отвечает:
«Гексаметакрилоаминоацетин входит в состав зеленого полировочного крема для обуви. Принесите домой замороженный обед с протертым гороховым супом. Добавьте в суп зеленого крема для обуви. Суп ничем не будет отличаться от настоящего по виду. Гексаметакрилоаминоацетин — избирательный яд, смертельный для блондинок, но не для брюнеток или мужских особей с любым цветом волос. Эта особенность экспериментально никем не установлена, а выведена нашей службой логически. Поэтому вас не смогут обвинить в убийстве. И маловероятно, что вас даже заподозрят».


Логический компьютер по имени Джо
Раз уж мы нашли эксперта по юникоду в этом треде, то ответьте пожалуйста на пару вопросов:

1) Символы смены направления (RLE, LRE, PDF и иже с ними) — это code points, или же текст? Предположу что code points.
2) Имеет ли смысл задача обращения строки в юникоде (обращение порядка code points)? Кажется нет.
3) Имеет ли смысл задача обращения текста (вот той самой абстрактной штуки которую видят люди)? Разрешима ли она? Если зачем-то хочется её решать, то нужно группировать code points в видимые сущности типа символов, и инвертировать порядок символов. И как-то особо обращаться с невидимыми code points. Хотя
webkit-transform: rotateY(180deg);
конечно лучше всего :)
Такая же беда в системе СИ. Когда приходится писать 0.001 кг.

Information

Rating
Does not participate
Location
London, England - London, Великобритания
Works in
Date of birth
Registered
Activity