public class C
{
[CompilerGenerated]
private sealed class <>c__DisplayClass2_0
{
public int j;
internal void <M>b__0()
{
Console.WriteLine(j);
}
}
private const int Count = 42;
[System.Runtime.CompilerServices.Nullable(1)]
private readonly Action[] ActionsArray = new Action[42];
public void M()
{
int num = 0;
while (num < 42)
{
<>c__DisplayClass2_0 <>c__DisplayClass2_ = new <>c__DisplayClass2_0();
<>c__DisplayClass2_.j = num;
ActionsArray[num] = new Action(<>c__DisplayClass2_.<M>b__0);
num++;
}
}
}
Спасибо за статью. Подборка информации впечатляет.
Не могли бы вы порекомендовать что-либо для изучения system design? Книги, курсы, Youtube-каналы - что угодно, чтобы можно было разобраться в теме при наличии базовых знаний. Разумеется, не с претензией "войти в FAANG" :)
"The filter extracts an access token from the currently authenticated user" - извлекает из куки (ранее созданной самим Gateway)? Или gateway отдает пользователю токен в незашифрованном виде, а UserAgent сам хранит этот токен и передает на gateway через заголовок "Authorization: Bearer ..."?
И спасибо за статью. Я сам не джавист, было интересно посмотреть, как у вас реализуется auth. Выглядит очень удобно: gateway с минимумом кода - круть!
These are some of the error messages produced by Apple's MPW C compiler. These are all real. (If you must know I was bored one afternoon and decompiled the String resources for the compiler.) The compiler is 324k in size so these are just an excerpt I hope. I'm not sure where I stand on the copyright issue.
Tony Cunningham
"String literal too long (I let you have 512 characters, that's 3 more than ANSI said I should)"
"...And the lord said, 'lo, there shall only be case or default labels inside a switch statement'"
"a typedef name was a complete surprise to me at this point in your program"
"'Volatile' and 'Register' are not miscible"
"You can't modify a constant, float upstream, win an argument with the IRS, or satisfy this compiler"
"This struct already has a perfectly good definition"
"This onion already has a perfectly good definition"
"type in (cast) must be scalar; ANSI 3.3.4; page 39, lines 10-11 (I know you don't care, I'm just trying to annoy you)"
"Can't cast a void type to type void (because the ANSI spec. says so, that's why)"
"Huh ?"
"can't go mucking with a 'void *'"
"we already did this function"
"This label is the target of a goto from outside of the block containing this label AND this block has an automatic variable with an initializer AND your window wasn't wide enough to read this whole error message"
"Call me paranoid but finding '/*' inside this comment makes me suspicious"
"Too many errors on one line (make fewer)"
"Symbol table full - fatal heap error; please go buy a RAM upgrade from your local Apple dealer"
Клиентом в данной ситуации является Gateway. У него есть и id, и secret, и получение токена идет через back-channel. Токен он, судя по диаграмме, на сторону UserAgent не отдает, а пользуется им от имени resource owner. Ну и кука, как я понял, здесь используется (`RemoveRequestHeader=Cookie `)...
Экран ввода пароля запускается под специальной учетной записью. Проблема в том, что для локализованных версий ОС к таким учеткам применяются параметры по умолчанию, в том числе и дефолтный язык ввода (русский для русской версии Windows). Это поддается настройке:
Ну вот вам реальный пример логического выражения в LD (Step7)
Пример
Конечно, его можно представить в "обычном" языке программирования в виде цепочки операторов &&, || или в виде вложенных блоков if. Но это сильно усложнит чтение и отладку программы.
А вот что можно увидеть в этом примере:
Логическое выражение с дюжиной элементов представлено очень компактно. Сразу видно логические связи между компонентами. Одна из самых типовых задач поддержки - выяснить, почему нажатие кнопки не запускает механизм. При запущенном отладчике вы сразу увидите, какие "контакты" замкнуты, а какие - нет. Кнопка - слева, выход - справа. Сразу видно, где не проходит "сигнал". А теперь представьте, как вы будете отлаживать это же выражение в языке программирования на основе текста.
В логике автоматизации есть свои паттерны и стандартные элементы: "передний фронт", "задержка включения", "триггер" и т.д. В примере элемент -(P)- выделяет передний фронт. Да, это тоже можно реализовать в "обычном" ЯП. Но код будет гораздо менее читаемым. В качестве паттерна здесь же можно увидеть так называемый "подхват": по нажатию кнопки I762.6 логический сигнал на механизм M440.4 "закорачивает" кнопку и удерживает механизм в рабочем состоянии, пока он не доедет до конца. В LD этот паттерн виден с первого взгляда. Чтобы это же увидеть в логическом выражении из &&, II, if, вам нужно будет прочитать его целиком.
В плане "синтаксического сахара", в LD очень легко вывести дополнительную текстовую информацию о каждом элементе. Например, по кнопке мы видим логический номер входа, текстовое описание-комментарий и обозначение кнопки на принципиальной схеме. Можно ли сделать нечто подобное, если вся программа представлена текстом?
Я бы не сказал, что "релейная логика" очень уж удобная. Самый адский недостаток - невозможность использования со стандартным инструментарием типа git. Но достоинства LD-логики **в её области применения** перевешивают недостатки, и никто пока не спешит предоставить достойной алтернативы.
Отмечу также, что, по моим наблюдениям, логика промышленной установки процентов на 80..90 состоит из выражений, подобных приведенному примеру, и "релейная логика" работает в них очень хорошо. Но в некоторых частях программы больше подходит как раз "традиционный" императивный код. Например, без этого сложно обойтись, когда реализуешь коммуникацию с приводами. И конкретно в Step7 тут засада: приходится писать на ассемблероподобном STL. В других реализациях МЭК с этим попроще: есть язык ST. К чему это я? МЭК-языки создавали неглупые люди, и всем тамошним инструментам есть свое применение.
Да. Высокая распространенность -> больше аудитория -> проще создать большое и активное сообщество -> язык лучше развивается и проще в использовании. Для всех, в том числе и для тех, у кого английский - иностранный.
Японских проектов автоматизации я пока не видел, возможно это так. Готовое оборудование - немного имел дело с Mitsubishi. Достаточно качественная документация на английском языке. Для китайских вендоров это огромная редкость. Из "обычного" японского софта приходилось работать с вот этим opensource проектом. Нормальные имена переменных на английском, попадаются комменты на японском. Но это опенсорс, так что, возможно, пример непоказательный :)
"Непрактично? Подержи-ка мое пиво!" - сказали китайцы. В сименсовском софте (например, в таком ) уже очень давно можно писать имена символов на любом языке, в том числе на китайском. И китайцы так делают постоянно. Переменные, дата-блоки, функции - все на китайском. Особенно весело, когда установка приходит в неработоспособном состоянии, и все на китайском, включая ПО и схемы. Причем схемы не соответствуют действительности, а обозначения в схемах и в ПО контроллера разные (разумеется, и там, и там иероглифы).
Такое ощущение, что Blizzard решила повторить историю Артаса в реальном мире: до основания разрушить королевство отцов и зафигачить на руинах новое царство мертвых.
Можно продемонстрировать это еще нагляднее с помощью Sharplab:
https://sharplab.io/#v2:EYLgtghglgdgNAExAagD4AEBMBGAsAKAPQGYACLUgYVIG8DSHSAHAJygDcIAXAU1IGMA9jADOXUrHGVBAVxjiAvKQAsmANz1GrDtz4seEBMIA2AT3LZMAbQC6FzCICCLFhHNKYPAO72r0uVw2GviMpJoMJOTKpACyABQAlGEhjHQpoQwAZoIspHGSEqRKAAxqhQA8VLLyZVDIyAnhGWkZraScuQBWRRLBbRnolk4ublZQdkqJRQB8FgCccZ0JfW0Avk3r+KtAA==
Спасибо за статью. Подборка информации впечатляет.
Не могли бы вы порекомендовать что-либо для изучения system design? Книги, курсы, Youtube-каналы - что угодно, чтобы можно было разобраться в теме при наличии базовых знаний. Разумеется, не с претензией "войти в FAANG" :)
Понятно, спасибо. А что будет, если "key2" лежит не в начальном бакете, а в
overflow
? Вы же не проверяетеoverflow
, если ячейка уже запомнена.Вот здесь, в
bucket.Put()
, у вас случаем break не пропущен?Вот теперь ситуация понятна. Спасибо!
"The filter extracts an access token from the currently authenticated user" - извлекает из куки (ранее созданной самим Gateway)? Или gateway отдает пользователю токен в незашифрованном виде, а UserAgent сам хранит этот токен и передает на gateway через заголовок "Authorization: Bearer ..."?
И спасибо за статью. Я сам не джавист, было интересно посмотреть, как у вас реализуется auth. Выглядит очень удобно: gateway с минимумом кода - круть!
Вспомнился древний боян
Hidden text
These are some of the error messages produced by Apple's MPW C compiler. These are all real. (If you must know I was bored one afternoon and decompiled the String resources for the compiler.) The compiler is 324k in size so these are just an excerpt I hope. I'm not sure where I stand on the copyright issue.
Tony Cunningham
"String literal too long (I let you have 512 characters, that's 3 more than ANSI said I should)"
"...And the lord said, 'lo, there shall only be case or default labels inside a switch statement'"
"a typedef name was a complete surprise to me at this point in your program"
"'Volatile' and 'Register' are not miscible"
"You can't modify a constant, float upstream, win an argument with the IRS, or satisfy this compiler"
"This struct already has a perfectly good definition"
"This onion already has a perfectly good definition"
"type in (cast) must be scalar; ANSI 3.3.4; page 39, lines 10-11 (I know you don't care, I'm just trying to annoy you)"
"Can't cast a void type to type void (because the ANSI spec. says so, that's why)"
"Huh ?"
"can't go mucking with a 'void *'"
"we already did this function"
"This label is the target of a goto from outside of the block containing this label AND this block has an automatic variable with an initializer AND your window wasn't wide enough to read this whole error message"
"Call me paranoid but finding '/*' inside this comment makes me suspicious"
"Too many errors on one line (make fewer)"
"Symbol table full - fatal heap error; please go buy a RAM upgrade from your local Apple dealer"
Клиентом в данной ситуации является Gateway. У него есть и id, и secret, и получение токена идет через back-channel. Токен он, судя по диаграмме, на сторону UserAgent не отдает, а пользуется им от имени resource owner. Ну и кука, как я понял, здесь используется (`
RemoveRequestHeader=Cookie
`)...А где Gateway хранит токен? Сохраняет в сессию в БД? Или помещает в куку, которую отдает пользователю?
У старых советских кассовых аппаратов была очень похожая клавиатура. Они основаны на принципе комптометра?
Например, такой аппарат: https://habr.com/en/post/376385/
Экран ввода пароля запускается под специальной учетной записью. Проблема в том, что для локализованных версий ОС к таким учеткам применяются параметры по умолчанию, в том числе и дефолтный язык ввода (русский для русской версии Windows). Это поддается настройке:
https://superuser.com/questions/955783/setting-the-default-input-method-for-the-windows-10-login-screen
А вот то что пароль должен быть обязательно на латинице - первый раз слышу. Откуда это?
Ну вот вам реальный пример логического выражения в LD (Step7)
Пример
Конечно, его можно представить в "обычном" языке программирования в виде цепочки операторов &&, || или в виде вложенных блоков if. Но это сильно усложнит чтение и отладку программы.
А вот что можно увидеть в этом примере:
Логическое выражение с дюжиной элементов представлено очень компактно. Сразу видно логические связи между компонентами. Одна из самых типовых задач поддержки - выяснить, почему нажатие кнопки не запускает механизм. При запущенном отладчике вы сразу увидите, какие "контакты" замкнуты, а какие - нет. Кнопка - слева, выход - справа. Сразу видно, где не проходит "сигнал". А теперь представьте, как вы будете отлаживать это же выражение в языке программирования на основе текста.
В логике автоматизации есть свои паттерны и стандартные элементы: "передний фронт", "задержка включения", "триггер" и т.д. В примере элемент -(P)- выделяет передний фронт. Да, это тоже можно реализовать в "обычном" ЯП. Но код будет гораздо менее читаемым. В качестве паттерна здесь же можно увидеть так называемый "подхват": по нажатию кнопки I762.6 логический сигнал на механизм M440.4 "закорачивает" кнопку и удерживает механизм в рабочем состоянии, пока он не доедет до конца. В LD этот паттерн виден с первого взгляда. Чтобы это же увидеть в логическом выражении из &&, II, if, вам нужно будет прочитать его целиком.
В плане "синтаксического сахара", в LD очень легко вывести дополнительную текстовую информацию о каждом элементе. Например, по кнопке мы видим логический номер входа, текстовое описание-комментарий и обозначение кнопки на принципиальной схеме. Можно ли сделать нечто подобное, если вся программа представлена текстом?
Я бы не сказал, что "релейная логика" очень уж удобная. Самый адский недостаток - невозможность использования со стандартным инструментарием типа git. Но достоинства LD-логики **в её области применения** перевешивают недостатки, и никто пока не спешит предоставить достойной алтернативы.
Отмечу также, что, по моим наблюдениям, логика промышленной установки процентов на 80..90 состоит из выражений, подобных приведенному примеру, и "релейная логика" работает в них очень хорошо. Но в некоторых частях программы больше подходит как раз "традиционный" императивный код. Например, без этого сложно обойтись, когда реализуешь коммуникацию с приводами. И конкретно в Step7 тут засада: приходится писать на ассемблероподобном STL. В других реализациях МЭК с этим попроще: есть язык ST. К чему это я? МЭК-языки создавали неглупые люди, и всем тамошним инструментам есть свое применение.
Кодировка "ФПУ-8"? Безобразие! Язык разметки ЯГТР должен использовать исключительно КОИ-8 (ГОСТ 19768-93)
Да. Высокая распространенность -> больше аудитория -> проще создать большое и активное сообщество -> язык лучше развивается и проще в использовании. Для всех, в том числе и для тех, у кого английский - иностранный.
Вопрос к @yurixi. Как вы думаете, почему создатель Python - голландец - использовал для своего проекта английский язык?
Японских проектов автоматизации я пока не видел, возможно это так. Готовое оборудование - немного имел дело с Mitsubishi. Достаточно качественная документация на английском языке. Для китайских вендоров это огромная редкость. Из "обычного" японского софта приходилось работать с вот этим opensource проектом. Нормальные имена переменных на английском, попадаются комменты на японском. Но это опенсорс, так что, возможно, пример непоказательный :)
Если эта документация предназначена на экспорт, то ничем.
"Непрактично? Подержи-ка мое пиво!" - сказали китайцы. В сименсовском софте (например, в таком ) уже очень давно можно писать имена символов на любом языке, в том числе на китайском. И китайцы так делают постоянно. Переменные, дата-блоки, функции - все на китайском. Особенно весело, когда установка приходит в неработоспособном состоянии, и все на китайском, включая ПО и схемы. Причем схемы не соответствуют действительности, а обозначения в схемах и в ПО контроллера разные (разумеется, и там, и там иероглифы).
Такое ощущение, что Blizzard решила повторить историю Артаса в реальном мире: до основания разрушить королевство отцов и зафигачить на руинах новое царство мертвых.
На запчасти