Код, расположенный сзади (CodeBehind)
Хотя наша первая программа получилась хорошей, мы нарушили один из принципов ASP.NET: разделять разметку и код. Как вы помните, мы добавили блок с тэгами <% и %>, в котором разместили строку кода на C# для взвимодействия с текстовой меткой (элементом управления Label). И хотя это выглядит допустимым в маленьком и простом примере, в будущем мы получим смесь C#-кода с большой массой HTML-кода. Если сюда же добавить код на JavaScript и CSS, то очень скоро станет проблематично что-либо поменять. Вот почему в MS придумали технологию CodeBehind, позволяющую полностью отделить разметку (HTML, CSS и т.п.) и код (C#, VB.NET и др). Давайте теперь удалим скриптовый блок (между <% и %>) и запишем его в файл.
VisualStudio автоматически создала файл Default.aspx.cs и добавила его к проекту. Если его не видно в Обозревателе решения, кликните на маленький знак «+» слева от файла Default.aspx. Теперь откройте этот файл. Если вы знакомы с HTML, но не работали с языками программирования (не только на платформе .NET), то на первый взгляд его содержимое может показаться пугающим, т.к. он совершенно не похож на HTML-код. Однако, я попробую объяснить его содержимое, и со временем вы поймете, что технология разделения кода и разметки CodeBehind позволяет лучше организовать разработку веб-приложений. Листинг первоначальной версии файла Default.aspx.cs:
В его верхней части расположен список с пространствами имен, подключаемых к данному файлу с помощью ключевого слова «using». Я не буду объяснять их детально, т.к. данное учебное пособие по платформе ASP.NET, и, если хотите, вы можете почитать про них в Учебном пособии по C#. Дальше идет класс. Классы являются частью концепции Объектно ориентированного программирования (ООП), которая стала очень популярной, особенно с появлением таких языков как C++, Java и C#. ООП мы тоже не будем объяснять в данном пособии.
У класса задано имя «_Default», а двоеточие после имени означает, что класс отнаследован (в данном случае от класса Page пространства имен System.Web.UI). Путем наследования класса от другого класса с методами (и свойствами) наша страница может уже кое-что делать даже без (дополнительного) программирования. В ASP.NET все классы страниц должны наследоваться от класса Page, либо от других классов, которые наследованы от класса Page.
У класса страницы есть метод, который вызывается при каждой ее загрузке. Он называется Page_Load и уже присутствует в автоматически сгенерированном классе. Давайте, задействуем его для установки текста метки. Можно воспользоваться той же строкой кода, только без тэгов скриптового блока (<% и %>). Добавьте эту строку в метод Page_Load между фигурными скобками:
Запустите проект (F6) и посмотрите, что получилось. Страница должна выглядеть так же, как и в прошлый раз, но при этом значение метки мы задали в файле класса страницы (в соответствии с CodeBehind). В следующей главе мы познакомимся с кое-чем поинтереснее.
Умение разбираться в чужом коде
«Умение разбираться в чужом коде» — строка-детектор, которая содержится чуть более, чем во всех вакансиях на должность программиста и смежные должности. Чаще всего акцент на этой фразе делается для вакансий разработчика на C++ и PHP, где «чужой» не только код.
Содержание
Значение фразы [ править ]
- Вроде как компания ищет высококлассного специалиста
- Этот специалист должен быть настолько хорошим, что мог бы даже разбираться в чужом коде
На самом деле никакого такого умения не существует. Любой человек, способный писать, может и читать. Другое дело, что можно писать так, что потом сам хрен прочитаешь. Усугубляется это тем, что в сравнении с натуральными языками языки программирования, на человеческий взгляд, перегружены «пунктуацией», которая в них крайне важна и не терпит ошибок, а небольшие «слова» могут иметь очень большую (и неочевидную) смысловую нагрузку.
Потому и существуют гайдлайны, они же правила оформления. Например, не лениться использовать «говорящие» названия переменных и функций, даже если они длинноваты, оставлять комментарии в ключевых местах (то есть почти везде), не использовать goto-подобные операторы и так далее. И если подобных единых правил придерживаешься, то код хоть немного, но можно читать. Однако, код, написанный в спешке, почему-то получается нечитабельным у большинства разработчиков.
Настоящее значение фразы [ править ]
- Нужен идиот, который согласен разгребать это дерьмо.
- Руководитель свято верит, что причина получающегося дерьма в нерадивых программистах, а не в нём.
- Разгрести это дерьмо у тебя не получится при любом желании, так как от тебя будут требовать писать всё больше и больше кода, который непонятно как придётся прикручивать к уже существующему, на вдумчивое разгребание времени не останется совсем.
- В разработке архитектуры ПО используется метод «снизу вверх», требования меняются постоянно в зависимости от настроения левой пятки руководителя.
- С 2011 года, среди Java-разработчиков, фраза приобрела новый оттенок: программисту подсовывают («посмотреть», доделать, переделать, заставить работать…), под видом собственной разработки, довольно качественный код, декомпилированный из какого-нибудь коммерческого продукта. Ну и.
Что мы узнаём об организации по такой вакансии [ править ]
-
.
- Некому толком поставить процесс разработки в верную позу. (При грамотной организации процесса разработки ПО, код получается таким, что разобраться в нём не составит труда для любого программиста.)
- Темпы разработки постоянно подгоняются начальством, качество кода ужасно, переписывать приходится больше чем писать.
- Качество ПО, производимого этой конторой — дерьмо.
- Вам будут перманентно ебать мозг.
Что мы узнаём о работнике [ править ]
Если фраза встречается в резюме, то означает симметричное:
- Я готов копаться в любом дерьме
- Я буду писать такой код, разобраться в котором можно, только обладая данным умением
- Я умею заставить работать то, что накодили разработчики
Когда сабж оправдан [ править ]
Встречаются случаи, когда такое требование размещают в вакансиях оправданно. Это могут сделать после опыта работы с ковбоями-идеалистами. Когда такие люди сталкиваются с любой программой, они сразу же начинают истерить и пытаться переписать всё с нуля по своим лекалам. Тем не менее, «умение разбираться в чужом коде» это OCHE плохая формулировка. Годная альтернатива, это «терпимое отношение к чуждому коду». И всё равно строка скорее всего лишняя, так как должна подразумеваться в каждой вакансии программиста по умолчанию, что-то вроде столь же неимоверно популярного в вакансиях «умения работать в команде», которое на деле означает лишь «не быть мудаком» или «быть податливым мудаком».
Также есть конторы, специализирующиеся на поддержке чужих программ. Обычно востребованы в случаях, когда:
- за давностью лет авторов нельзя найти, или они отказываются от работы
- документация армейски проёбана, и никто не знает, как оно работает с целью сделать свой аналог с чем положено
Здесь уже сабж действительно один из ключевых навыков. Но это уже, скорее, компетенция программиста-аналитика 80-го уровня, а не школьника-быдлокодера, и написано в таких терминах, что не сразу узнаешь, что это оно.
А на самом деле [ править ]
А на самом деле это базовый навык без которого нельзя работать программистом. Даже если чужой код был написан твоим коллегой буквально вчера и вы вместе работаете над одним проектом. Кстати даже если с этим коллегой тесно общаетесь то вам все равно придётся разбираться в его коде без него хотя бы потому, что чисто физически тяжело запомнить все правки и то, зачем они были сделаны, особенно если проект большой. Вообще умение разбираться в чужих наработках свойственно всем профессиям со времён индустриализации общества: новый разработчик твоего кредитного лансера выкурил много старых чертежей перед тем как сделать в них свои правки.
См. также [ править ]
Примечания [ править ]
— Я делаю особую, шаблонную магию
— Не-не-не, Андрей Александреску, не-не-не
ДНК глазами программиста
Это всего лишь размышления программиста о ДНК. Я не являюсь молекулярным генетиком.
Исходный код
Находится здесь. Это не шутка. Исходники можно просмотреть с использованием замечательного набора скриптов Perl под названием «Ensembl». Геном человека занимает приблизительно 3 гигабайта, которые можно сократить до 750 мегабайт, если отбросить шелуху. Немного печалит, что это всего лишь 2.8 браузеров Mozilla Firefox.
ДНК похожа скорее не на исходники на языке C, а на байт-код для виртуальной машины под названием «ядро клетки». Крайне сомнительно, что существуют исходники, которые можно скомпилировать в этот байт-код: то, что мы видим, – это всё, что у нас есть.
Язык ДНК является цифровым, но не двоичным. Двоичный код использует 0 и 1 (поэтому его и называют бинарным), ДНК же использует 4 значения: T, C, G и A.
В то время как двоичный байт состоит в основном из 8 двоичных цифр, ДНК-«байт» (именуемый кодо́ном) содержит 3 символа. И так как каждый символ может иметь одно из четырёх значений, кодон ДНК имеет 64 возможных значения, в отличии от 256 значений двоичного байта.
Типичный пример кодона ДНК — это «GCC», который кодирует аминокислоту Аланин. Соединение большого числа этих аминокислот называется полипептидом или белком, и является химически активной составляющей всего живого. Подробнее о кодонах.
Позиционно-независимый код
Условная компиляция
Большинство клеток используют только крайне малую долю из предполагаемых 20000-30000 генов человеческого генома, – что является разумным, ведь клетка печени не нуждается в ДНК-коде, составляющем нейроны.
Но ввиду того, что все клетки содержат в себе полную копию («дистрибутив») генома, необходима система, которая позволит пометить #ifdef ненужные вещи. И именно так всё и работает. Генетический код кишит директивами #if/#endif .
Именно поэтому «стволовые клетки» сейчас так популярны – этот вид клеток обладает способностью превращаться во что угодно. Код ещё не за #ifdef ен, так сказать.
Выражаясь более точно, в стволовых клетках не включено всё подряд – они не являются одновременно и клетками печени, и нейронами. Клетки могут быть представлены в виде конечного автомата, начинающегося из состояния стволовой клетки. В ходе жизненного цикла клетки, во время которого она может делиться ( fork() ) множество раз, она специализируется. Каждая специализация может рассматриваться как выбор ветки в дереве.
Каждая клетка может принять (или быть побуждённой к принятию) решение о своём будущем, каждое из таких решений делают её более специализированной. Эти решения сохраняются при делении с использованием факторов транскрипции и модификации пространственного способа хранения ДНК (стерические эффекты).
Клетка печени в общем случае не может функционировать в качестве клетки кожного покрова, несмотря на то, что она содержит в себе все необходимые генетические инструкции для этого. Тем не менее, существуют признаки того, что клетки можно «вывести» вверх по иерархии, сделав их плюрипотентными.
Эпигенетика и импринтинг: патчи во время выполнения
Несмотря на то, что полноценные изменения ДНК в организме крайне редко происходят в пределах одного поколения, существенные поправки вносятся путём активации или деактивации частей нашего генома без изменения самого кода.
Если проводить аналогию, это подобно ядру Linux, которое во время загрузки обнаруживает процессор, на котором оно запущено, и отключает части своего двоичного кода в случае (к примеру), если оно запущено на однопроцессорной системе. Это не просто что-то вроде if (numcpus > 1) , этот код по-настоящему заменяется nop -ами. Крайне важно, что nop -ирование происходит в памяти, а не в образе на диске.
Похожим образом, по мере развития эмбриона в утробе матери, его ДНК существенно редактируется для снижения скорости его роста и размера плаценты. Таким способом балансируются противоположные интересы отца («большой сильный ребёнок») и матери («пережить беременность»). Подобный «импринтинг» может происходить только внутри матери, так как геном отца не имеет представления о размерах матери.
С недавних пор также стало ясно, что метаболический статус родителей влияет на вероятность продолжительной жизни, возникновения рака и диабета у их внуков, что достаточно логично, ведь выживание в бедном пищей климате может потребовать совершенно иной метаболической стратегии в сравнении с жизнью в среде еды предостаточно.
Механизмы, стоящие за эпигенетикой и импринтингом, – «метилирование» – присоединяют группы метила к ДНК для переключения статуса активации отдельных участков, а также модификация гистонов, которая может свернуть участки ДНК, что приводит к деактивации этих участков.
Некоторые из этих правок ДНК являются наследуемыми и передаются потомству, другие формы воздействуют только на отдельное животное.
Эта область науки всё ещё быстро развивается, и может так оказаться, что наши ДНК гораздо более динамичны, чем мы думали.
«Мёртвый» код, раздутый код, комментарии (мусор в ДНК)
Геном засорён старыми копиями генов и неудачных экспериментов в в недалёком прошлом (около полумиллиона лет назад). Этот код всё ещё в ДНК, но неактивен. Его называют «псевдогенами».
Более того, 97% вашего ДНК закомментировано. ДНК линейна и читается от начала до конца. Те участки, которые не нужно декодировать, отчётливо помечены, совсем как комментарии в C. Остальные 3%, которые используются по прямому предназначению, образуют так называемые «экзоны». Комментарии, которые расположены «между» называются «интронами».
Эти комментарии очаровательны по-своему. Как и комментарии C, они имеют маркеры начала (наподобие /* ) и маркеры окончания ( */ ). Но они имеют более сложную структуру. Ведь, как вы помните, ДНК похожа на ленту, соответственно, комментарии нужно вырезать физически! Начало комментария практически всегда указывается буквами «GT», что можно сопоставить с /* , окончание обозначается символами «AG», которые, соответственно, аналогичны */ .
Однако, из-за последующего разрезания, требуется некий клей, которым будут соединены код перед комментарием с кодом после комментария, что делает эти комментарии больше похожими на комментарии в HTML, которые несколько длиннее: – конец.
Так что, на самом деле промежуток ДНК с экзонами и интронами может выглядеть примерно так:
С началом комментария всё просто, за ним следует огромный объём некодирущей ДНК. Где-нибудь недалеко от окончания комментария находится участок ветвления, который означает, что комментарий скоро закончится. После него идёт ещё немного комментария, и затем настоящий ограничитель комментария.
Непосредственно вырезание комментариев происходит после того, как ДНК транскрибируется в РНК и выполняется путём скручивания комментариев в петлю и совмещения таким образом кусков настоящего кода. После этого РНК обрезается на участках ветвления около окончания комментария, затем «донор» (начало комментария) и «акцептор» (окончание) связываются друг с другом.
Так для чего же нужны эти комментарии? Эта тема для холивара силы сопоставимой с противостоянием vim/emacs. При сравнении разных видов, мы узнаём, что некоторые интроны содержат меньше различий в коде, чем соседствующие экзоны. Это наталкивает на мысль, что комментарии выполняют некую важную функцию.
Существует множество вероятных объяснений существования огромного количества некодирующей ДНК – одно из которых, наиболее привлекательное (для программиста), затрагивает «сворачивание» (folding propensity). ДНК должно храниться в сильно свёрнутой форме, но не все коды в ДНК справляются с этим в полной мере.
Отчасти это может напоминать RLL- или MFM-кодирование. На жёстком диске биты кодируются наличием или отсутствием инверсии полярности. При наивном способе кодирования мы записали бы 0 как «нет инверсии» и 1 как «инверсия».
Закодировать последовательность 000000 при таком способе крайне легко — достаточно оставить магнитную фазу неизменной на протяжении нескольких микрометров. Однако, при декодировании мы столкнёмся с неоднозначностью — сколько микрометров мы прочитали? Соответствует ли это 6 нулям или 5? Чтобы предотвратить эти проблему, данные записываются таким образом, что подобные непрерывные участки без инверсии не будут встречаться.
Если мы видим последовательность «нет инверсии, нет инверсии, инверсия, инверсия» на диске, мы можем быть уверены, что она соответствует «0011» – крайне маловероятно, что наш процесс чтения настолько неточен, чтобы мы могли трактовать её как «00011» или «00111». Таким образом, нам нужно вставить разделители, чтобы предотвратить недостаточное количество переходов. Такой подход называется «ограничением длины хода» (Run Length Limiting, RLL) на магнитных носителях.
Подчеркнём ещё раз, что порой необходимо вставить переходы (инверсии) для того, чтобы хранение данных было надёжным. Возможно, интроны выполняют подобную функцию, позволяя конечному коду сворачиваться подобающим образом.
Как бы там ни было, молекулярная биология – это минное поле! Бушуют споры и критика вокруг вариантов с волнующими названиями наподобие «ранних интронов» или «поздних интронов», а также таких солидных слов, как «сворачивание» и «потенциал образования шпилек» (stem-loop potential). Полагаю, лучше дать этим дебатам бушевать и дальше.
Апдейт от автора: десять лет спустя, эти дебаты всё ещё не утихли. Теперь совершенно очевидно, что «мусорная ДНК» является некорректным названием, но что касается её непосредственной функции консенсус так и не достигнут.
fork() и fork-бомбы (опухоли)
Как и в случае unix-а, клетки не «порождаются» – они делятся. Все клетки в вашем организме имеют начало в виде яйцеклетки, которая с тех пор делилась несметное количество раз. Подобно процессам, обе половины, возникающие в результате fork() поначалу (почти) идентичны, но в дальнейшем они решают заняться разными делами.
Как и в unix, существенные проблемы возникают, когда клетки продолжают fork аться. Достаточно скоро они исчерпают ресурсы, что может привести к смерти. Это называется опухолью. Клетки нашпигованы ulimit и сторожевыми таймерами (watchdogs) для предотвращения развития подобного сценария. К примеру, количество делений ограничивается укорачиванием теломер.
Клетка не может клонировать себя до тех пор, пока не будут выполнены крайне строгие условия – настройки «безопасность по умолчанию». И только если все эти защитные механизмы дадут сбой, возможно развитие опухоли. Так же как и в компьютерной безопасности, сложно найти баланс между безопасностью («ни одна клетка не может делиться») и удобством использования.
Можно сравнить это с известной проблемой с остановкой, впервые описанной основоположником информатики Аланом Тьюрингом. Похоже, что предсказать, завершится ли программа когда-либо, ничуть не легче, чем создать функциональный геном, который никогда не приведёт к раку?
Зеркалирование, отказоустойчивость
Каждая спираль ДНК избыточна сама по себе – она похожа на скрученную лестницу, в которой каждая ступенька содержит два основания – отсюда слово «пара оснований». Если одно из этих оснований отсутствует, его можно вывести из основания с другой стороны «ступеньки». T всегда связано с A, C – всегда с G. Так что мы можем утверждать, что геном зеркалируется внутри спирали, подобно RAID-1.
Более того, хромосомы всегда представлены в двух экземплярах – по одной от каждого родителя, за одним примечательным исплючением – Y-хромосомы, которая бывает только у самцов. Хоть детали и несколько сложнее, можно считать, что мы имеем по две копии большинства генов. В случае если один повредится или мутирует в бесполезное состояние, у нас остаётся вторая, независимая копия. Обычно мы такое называем отказоустойчивостью.
Нагромождение API, ад зависимостей
В ходе взаимодействия внутри клетки, белки́ полагаются на характеристики друг-друга. В 2001-2002 годах были опубликованы исследования, что протеины, взаимодействующие с большим числом других протеинов, не способны эволюционировать или, по крайней мере, делают это крайне медленно (журнал Nature от 28 июня 2001, а также M. Kimura, T. Ohta в журнале Science от 26 апреля 2002).
Авторы исследований предполагают, что это связано с огромным количеством внутренних зависимостей, которые препятствуют изменению «контракта» белка́. Также было отмечено, что эволюция всё же происходит, но очень медленно, так как обе стороны зависимости должны одновременно эволюционировать совместимым образом.
Вирусы, черви
Недавно, в ходе беседы, кто-то предположил, что было бы действительно круто взломать геном и скомпрометировать путём вставки кода, который копировал бы себя в другие геномы, используя тело-носитель в качестве транспорта. «Совсем как червь Nimda!»
Вскоре он осознал, что именно это делают биологические вирусы на протяжении миллионов лет. И они весьма хороши в этом.
Большое число подобных вирусов стали неотъемлимой частью нашего генома и катаются вместе со всеми нами. Для этого им приходится прятаться от вирусного сканера, который стремится обнаружить чужой, вредоносный код и не допустить его проникновение в ДНК.
Центральная догма: .c -> .o -> a.out/.exe
На заре открытий основ генетики, учёным приходилось сталкиваться со множеством химикалий, взаимосвязь которых была неочевидной. Момент, когда стало ясно, из чего что получается, был провозглашён великим триумфом и получил название «Центральная догма».
Эта догма говорит нам, что ДНК нужен для получения РНК, а РНК необходим для получения белков, подобно тому, как из .c-файл превращается в объектный файл .o, который затем может быть скомпилирован в исполняемый файл (a.out/exe). Кроме того, она сообщает нам, что это единственный порядок, в котором следует информационный поток.
И всё же, Центральная догма недавно слегка поблекла. Как и при любой миллиардлетней разработке проекта, происходило множество хаков, из-за которых информация иногда течёт в обратном направлении. Иногда РНК патчит ДНК, а бывает, что ДНК модифицируется белка́ми, созданными ранее.
Но, в целом, зависимости ясны, так что Центральная догма всё ещё остаётся важной.
Бинарные патчи, aka «генная терапия»
Проделывать махинации с ДНК довольно просто. Существуют фирмы, которым вы можете отправить файл с ДНК, записанным ASCII-символами, и они синтезируют вам соответствующие материалы. Мы даже можем составить ДНК зародышей животных или растений.
Гораздо сложнее «пропатчить» «исполняемый файл» прямо во время выполнения, и это подтвердит любой программист. Так же дела обстоят и с геномом. Чтобы изменить запущенную копию (человека, например), необходимо отредактировать каждый экземпляр гена, который вы хотите «пропатчить», в организме.
На протяжении многих лет медицинская наука пыталась патчить людей, страдающих тяжёлым комбинированным иммунодефицитом (SCID, Severe Combined Immunodefeciency) – крайне неприятным заболеванием, которое, по сути, отключает иммунную систему, что делает пациента тяжелобольным. Достаточно давно стало понятно, какие именно буквы в ДНК необходимо исправить для исцеления этих людей.
Было осуществлено много попыток пропатчить «работающих» людей при помощи вирусов, которые вставляли бы новую ДНК в живых организмах, но этот подход оказался слишком сложным. Геном крайне хорошо защищён, чтобы такой простой подход сработал, – клетки хранят свой код надёжнее, чем Microsoft!
Тем не менее, недавно был найден подходящий вирус, который способен прорваться сквозь защиту и исправить поломки в ДНК, что, вроде бы, исцеляет больного.
Регрессия кода
И это не единственный пример подобной регрессии.
Коды Рида-Соломона: Прямая коррекция ошибок
Как и компьютерный накопитель, ДНК (и его промежуточная форма – РНК) может быть повреждена. Для предотвращения распространённых «однобитных ошибок» кодирование протеина в символах ДНК избыточно. Существует 4 символа РНК: U, C, G и A – другими словами, «байт» имеет длину в 2 бита. Три символа соответствуют аминокислоте.
Теоретически, 6 бит могли бы соответствовать 64 аминокислотам, однако существует только 20 стандартных аминокислот. К примеру, UCU, UCC, UCA и UCG – кодируют один и тот же серин, тогда как только UGG соответствует триптофану.
Тогда, выходит, что некоторые наиболее вероятные «опечатки» (UCU -> UCC) в коде приведут к синтезу одной и той же аминокислоты. Подробнее об этом явлении можно прочитать в книге «Metamagical Themas» за авторством Дугласа Хофстадтера (Douglas Hofstadter).
Священный код: /* от вас не требуется понимание этого кода */
Некоторые участки кода священны. Мы можем не помнить, кто или зачем написал его, мы просто знаем, что он работает. Парень, который его написал, возможно, уже давно покинул компанию. С таким кодом лучше не связываться.
В ДНК известна концепция «молекулярных часов». Некоторые части генома активно меняются, а некоторые – неприкосновенны. Отличным примером последнего являются гистоновые гены H3 и H4.
Эти гены лежат в основе того, как геном хранится, а потому имеют первостепенную важность. Любой сбой в их коде ведёт к нежизнеспособному организму.
Поэтому можно предположить, что этот код не меняется на скорую руку, и, судя по всему, так оно и есть. Гены H3 и H4 обладают нулевым эффективным темпом мутации у людей. Но всё заходит ещё дальше. Этот код является общим для всех, начиная с человека, заканчивая травой или плесенью.
Темп замены нуклеотидов в пересчёте на сайт на 1 миллиард лет между различными протеин-кодирующими генами человека и грызуна с разбросом в 80 миллионов лет, на основании ископаемых доказательств:
Судя по всему, существуют два способа, с помощью которых геном может удостовериться в отсутствии мутации кода. Первый способ был описан ранее: использовать аминокислоты, кодировка которых очень избыточна, что позволит получать один и тот же результат даже в случае «опечаток».
Второй способ заключается в том, что гены могут быть скопированы в начале или конце процесса репродукции клетки, что обеспечивает более или менее благоприятные условия копирования. Помимо этого, используются огромное количество подобных условий.
Похоже, что H3 и H4 были весьма тщательно проработаны, так как в них допустимо множество «синонимичных» изменений, которые благодаря вышеописанным хитрым техникам не приводят к изменению результата.
Ошибки кадрирования: стартовые и стоповые биты
. 0 0000 0001 0000 0010 0000 0011 0.
Эта последовательность, очевидно, описывает 8-битные значения 1, 2 и 3. Я добавил пробелы, чтобы было видно, где байт начинается и заканчивается. Множество последовательных устройств используют стоповые и стартовые биты для обозначения, откуда вам нужно начинать чтение. Если мы немного сдвинем эту последовательность:
. 00 0000 0010 0000 0100 0000 0110 .
она внезапно начнёт обозначать 2, 4, 6! Во избежание подобного, в ДНК применяются выработаны сигналы, которые сообщают клетке, где начинать чтение. Любопытно, что существуют участки генома, которые можно начинать читать с нескольких стартовых точек, и каждый раз получать полезный (но разный) результат. Вот что я называю крутым хаком!
Каждый способ прочтения подобного участка ДНК называется открытой рамкой считывания и их обычно 6, по 3 в каждую сторону.
Массовая многопроцессорность: каждая клетка – это вселенная
И всё-таки, ДНК не похожа на язык программирования. Она действительно им не является. Тем не менее, есть несколько больших схожестей. Можно рассматривать каждую клетку в качестве центрального процессора, на каждом из которых запущено своё ядро ОС. Каждая клетка обладает полной копией ядра, но активирует только соответствующие части – свои модули и драйвера, так сказать.
Когда клетке требуется выполнить что-либо («вызвать функцию»), она находит необходимую часть генома и транскрибирует её в РНК. РНК затем переводится в последовательность аминокислот, которые в совокупности дадут белок, который был закодирован в ДНК. А теперь самая крутая часть!
Этот белок будет помечен адресом доставки. Он представлен в виде маркера, состоящего из нескольких аминокислот, который сообщает клетке, куда именно нужно доставить этот белок. Внутри клетки есть целый механизм, который выполняет эти инструкции и способен доставить белок по адресу, который может оказаться даже снаружи самой клетки.
После доставки эта инструкция отрывается и осуществляются несколько этапов пост-обработки, которые могут, например, активировать белок, ведь транспортировать активный белок через места, для которых он не предназначен, – не лучшая затея.
Makefile
Организмы обычно начинают своё существование с одной клетки, которая, как было сказано ранее, содержит две полноценные копии генома. Своеобразный tar-файл, в котором все файлы уже распакованы, готовые к употреблению. Что же дальше?
Встречайте гомеобокс. Клетки должны быть скопированы и каждой нужно назначить её цель существования. Гены, которые содержат гомеобокс, начинают выстраивать цепочку зависимостей «сверху вниз», которая означает «начинать с головы». Для того, чтобы это сработало, образуется химический градиент, благодаря которому клетки могут почувствовать, где они находятся, и определить свои дальнейшие действия, требуемые для образования головы или для образования нотохорда.
Впервые обнаруженные в 1983, на данный момент гены гомеобокса являются одной из самых захватывающих областей для изучения. Отметим любопытный факт, что как и makefile, гены «HOX» только отвечают за включение разных вещей в других генах и сами по себе ничего не образуют.
Похоже, что «синтаксис» гомеобокса является «священным» в смысле, описанном выше. Что случится, если вы скопируете часть «HOX» мышинного гена, являющийся «селектором ноги» в гомеообокс дрозофилы?
Геномы дрозофилы и человека разветвились не миллионы, а сотни миллионов лет назад. И всё же вы можете скопировать участки («селекторы» на языке генетики) makefile-а и они будут работать. Прошу отметить, что процедура «выращивание ноги» у фруктовой мушки совершенно иная, нежели у мыши, но «селектор» способен корректно запустить необходимые инструкции.
Плагины: Плазмиды
Все живые организмы имеют ДНК, иногда организованные в несколько хромосом («библиотеки»), иногда только одну (как правило, закольцованную в таких случаях). Это касается и большинства бактерий. И по соседству с этим большим основным геномом такие бактерии зачастую содержат «плазмиды» – крохотные кольца ДНК с определёнными функциями.
Эти плазмиды отчасти совместимы с разными видами и при помощи разнообразных механизмов они передаются по горизонтали. Таким способом, например, даже неидентичные бактерии могут «учиться» резистентности к антибиотику друг у друга.
Если сравнивать с миром программирования, плазмиды не являются добровольным приобретением, и подобны загрузке .so при помощи LD_PRELOAD или её аналогом на других платформах. И в самом деле, плазмиды зачастую инъектируются с целью исследования. Их можно ввести в любой вид бактерии и сразу же приступать к работе.
Плазмиды копируют себя независимо от главной хромосомы, поэтому становятся постоянной составляющей бактерии. Для достижения этого, плазмида обладает геном с великолепным названием «точка начала репликации», который срабатывает, когда клетка собирается делиться.
Что такое код бихайнд
Решил немножко покопаться в Silverlight, да смастерить на нём что-нибудь прикольное. Это прикольное, конечно, должно шевелиться, переливаться и плавно подёргиваться, ибо вебдваноль у нас или где? :). И вот тут мне пришлось столкнуться с неплохой, по сути, системой анимаций в WPF/Silverlight. Покурив MSDN, я бодренько приступил к написанию анимаций в XAML. Одну написал, вторую, третью… А потом мне захотелось сделать так, чтобы они шли в определённой последовательности. И вот тут-то я и понял, что XAML, зараза, очень избыточный. Для описания интерфейсов он подходит идеально: сразу видно, что к чему относится и надобность в визуальном редакторе отпадает чуть менее, чем полностью. Но вот когда пытаешься написать в этом XAMLе какую-то логику, начинает проявляться вся его несуразность. Покурив гугл, я был сильно удивлён тем, что большинство людей упорно пытаются впихнуть в XAML абсолютно всё. Ругаются, путаются в коде, плачут, но продолжают писать. Прямо как те мыши с кактусом, чесслово. И тут мне пришла идея аккуратно описать анимации обычным кодом на C#. Мы, так сказать, олдфаги, рисовали интерфейс прямыми вызовами к WinAPI, неужто нас какие-то анимации испугают?
В результате получился вот такой портабельный класс AnimationBag. Портабельный он потому, что его безо всяких изменений можно использовать как в WPF, так и в Silverlight.
Как видно из кода, класс предельно простой. Вот пример использования.
Сам класс представляет собой что-то вроде словаря с ключами — именами анимаций и значениями — анимациями. В методе InitAnimations в коллекцию добавляются две анимации, при этом указывается имя, контрол, над которым будет производится действо, свойство этого контрола и сам объект анимации. Его можно создавать ручками, а можно добавить статические хэлперы к уже имеющемуся методу для DoubleAnimation. Кроме всего прочего, метод AddAnimation может принимать два делегата, которые будут выполняться до и после самой анимации. Например, здесь после завершения анимации “fadeOut” сразу запускается “fadeIn”.
В итоге, получился довольно удобный механизм, позволяющий описывать анимации одной строкой кода вместо килобайтов перегруженного XAML.
Как перевести фразу «code-behind» на русский?
Сабж. Всю голову сломал;).
Для справки: при использовании технологий ASP.NET, WPF, Silverlight, части кода, которые отвечает за UI и логику обработки событий от UI разделяются. Вот, эти самые файлы, которые содержат логику обработки событий и называются code-behind.
Кто знает как нормально и понятно перевести фразу code-behind на русский язык?
В избранное В избранном 0

15 комментариев

Есть еще много хороших специализированных словарей на www.lingvodics.com/ но там их надо выменивать у хозяина.
ASP.NET Web Page Code Model
An ASP.NET Web page consists of two parts:
blah blah blah
ASP.NET provides two models for managing the visual elements and code — the single-file page model and the code-behind page model. The two models function the same, and you can use the same controls and code for both models.
Модель кода веб-страниц ASP.NET
Веб-страница ASP.NET состоит из двух частей:
бла бла бла
В ASP.NET реализовано две модели управления визуальными элементами и кодом: однофайловая модель страницы и модель страницы с выделенным кодом. Обе модели работают одинаково, и в них обеих используются одни и те же элементы управления и код.
2. Результаты 1 — 10 из примерно 465 000 для выделенный код. (0, 24 секунд)
Код программной части и XAML в WPF
Этот раздел состоит из следующих подразделов.
Предварительные требования
В этом разделе предполагается, что вы читали XAML в WPF и имеете некоторые базовые знания о среде CLR и объектно-ориентированном программировании.
Code-Behind и язык XAML
Язык XAML включает функции уровня языка, позволяющие связывать файлы кода с файлами разметки с стороны файла разметки. В частности, язык XAML определяет директивуLanguage Features X:Class, директиву x:Subclassи директиву КС:классмодифиер. Точно то, как должен быть создан код и как интегрировать разметку и код, не является частью того, что указывает язык XAML. Она остается в таких платформах, как WPF, для определения способа интеграции кода, использования XAML в моделях приложения и программирования, а также действий сборки или другой поддержки, которые требуются для всех этих платформ.
Код программной части, обработчик событий и требования к разделяемому классу в WPF
Разделяемый класс должен быть производным от типа, который является резервным для корневого элемента.
Обратите внимание на то, что при поведении действия сборки компиляции разметки по умолчанию можно оставить пустое производные в определении разделяемого класса на стороне кода программной части. Скомпилированный результат предполагает, что резервный тип корня страницы будет базисом для разделяемого класса, даже если он не указан. Однако использовать такое поведение не рекомендуется.
Обработчик должен соответствовать делегату для соответствующего события в системе резервных типов.
x:Code
Ограничения встроенного кода
Рекомендуется избегать или ограничивать использование встроенного кода. С точки зрения архитектуры и философии программирования, обеспечение разделения между разметкой и кодом программной части обеспечивает гораздо более отличающиеся роли конструктора и разработчика. На более техническом уровне код, написанный для встроенного кода, может быть неудобным для записи, так как вы всегда пишете в XAML созданный разделяемый класс и можете использовать только сопоставления пространства имен XML по умолчанию. Поскольку нельзя добавлять using инструкции, необходимо полностью определить множество вызовов API. Сопоставления по умолчанию WPF включают большинство, но не все пространства имен CLR, которые есть в WPF сборках. вам придется полностью квалифицировать вызовы типов и членов, содержащихся в других пространствах имен CLR. Кроме того, нельзя определить что-либо за пределами разделяемого класса во встроенном коде, и все сущности кода пользователя, на которые вы ссылаетесь, должны существовать в виде члена или переменной в созданном разделяемом классе. Некоторые функции программирования, такие как макросы или #ifdef глобальные переменные или переменные сборки, также недоступны. Дополнительные сведения см. в разделе Тип данных, встроенный в x:Code.
Модель кода в Visual Studio
Пока что мы рассказали только о том, как проектируются простые веб-страницы, и из каких частей состоит интерфейс Visual Studio. Но прежде чем приступать к серьезному кодированию, нужно обязательно разобраться в некоторых базовых деталях модели кода ASP.NET. Поэтому в данной статье речь пойдет о доступных вариантах использования кода для программирования веб-страниц и том, как события ASP.NET привязываются к коду.
Visual Studio поддерживает две модели для кодирования веб-страниц:
Внутритекстовый код
Эта модель удобна, поскольку позволяет хранить все в одном месте безо всяких излишеств и потому часто применяется для кодирования простых веб-страниц.
Отделенный код (code-behind)
Эта модель подразумевает создание для каждой веб-страницы ASP.NET двух файлов: файла разметки (.aspx) с дескрипторами HTML и дескрипторами элементов управления, и файла кода (.cs) с исходным кодом страницы (при условии, что для программирования веб-страницы применяется язык C#). Такая модель обеспечивает более удобную схему организации, позволяя отделять пользовательский интерфейс от программной логики, что очень важно при создании сложных страниц.
Чтобы лучше понять, в чем состоит разница между моделями внутритекстового и отделенного кода, не помешает рассмотреть какую-нибудь простую страницу. В следующем примере показан код разметки для страницы по имени WebForm1.aspx, который отображает текущее время в текстовой метке и обновляет страницу всякий раз, когда в ней выполняется щелчок на кнопке. В случае использования модели внутритекстового кода эта страница будет выглядеть следующим образом:
Приведенные ниже коды файлов WebForm1.aspx и WebForm1.aspx.cs демонстрируют, как эта же страница будет поделена на две части в случае использования модели отделенного кода:
Единственное реальное отличие между примером с внутритекстовым кодом и примером с отделенным кодом состоит в том, что в последнем случае класс страницы больше не является неявным, а наоборот — объявляется как класс, содержащий все методы страницы.
В целом, модель отделенного кода предпочтительнее использовать для сложных страниц. Хотя модель внутритекстового кода является немного более компактной для небольших страниц, с увеличением объема кода и HTML-разметки с ними становится гораздо проще иметь дело по отдельности. Вдобавок модель отделенного кода является более чистой с концептуальной точки зрения, поскольку явно отображает созданный класс и импортированные пространства имен. И, наконец, она также еще позволяет веб-дизайнеру улучшать разметку страниц, не затрагивая код, написанный разработчиком.
Связывание файлов отделенного кода со страницами
Определять местонахождение связанного кода можно несколькими способами. В более старых версиях ASP.NET было распространено использование атрибута Src для указания на исходный код либо атрибута Inherits для указания на имя скомпилированного класса. Однако обе эти возможности имеют свои индивидуальные особенности.
Например, с помощью атрибута Inherits вы должны предварительно компилировать код, что довольно-таки утомительно (и может вызвать проблемы в командах разработчиков, поскольку стандартной возможностью является компиляция каждой страницы в отдельную DLL-библиотеку сборки). Но реальная проблема состоит в том, что оба подхода вынуждают объявлять каждый веб-элемент управления, который вы собираетесь использовать, с помощью переменной экземпляра. В результате получается большой объем стереотипного кода.
Связывание дескрипторов элементов управления с переменными страниц
При запросе веб-страницы в окне браузера ASP.NET сначала отыскивает связанный с ней файл кода, а затем генерирует объявление переменной для каждого присутствующего в ней серверного элемента управления (т.е. для каждого элемента, у которого имеется атрибут runat=»server»).
Например, предположим, что есть текстовое поле по имени txtInput:
ASP.NET сгенерирует для него следующее объявление переменной экземпляра и объединит его с классом страницы с помощью «волшебного» механизма частичных классов:
Кстати, вы заметите, что переменные элементов управления всегда объявляются с помощью ключевого слова protected (обозначающего защищенный доступ). Все дело в способе, которым ASP.NET использует наследование в модели веб-страниц. Существуют следующие уровни:
Ваш класс отделенного кода (например, WebForm1) наследуется от класса Page, чтобы получить этот базовый набор функциональных возможностей веб-страницы ASP.NET.
Когда вы компилируете свой класс, ASP.NET добавляет в него кое-какой дополнительный код (с помощью «волшебного» механизма частичных классов). В этом генерируемом автоматически коде все имеющиеся на странице элементы управления определяются как защищенные переменные, чтобы можно было получать к ним доступ в коде.
Связывание событий с обработчиками событий
Большая часть кода страницы ASP.NET помещается внутрь обработчиков событий, реагирующих на события веб-элементов управления. С помощью Visual Studio добавить в код обработчик событий можно одним из трех способов:
Ввести его вручную. В этом случае метод добавляется непосредственно в класс страницы. Необходимо указать соответствующие параметры, чтобы сигнатура обработчика событий в точности соответствовала сигнатуре события, которое вы собираетесь обрабатывать. Также понадобится отредактировать дескриптор элемента управления, чтобы он связывал элемент управления с соответствующим обработчиком событий, добавив атрибут OnИмя_события.
Дважды щелкнуть на элементе управления в представлении визуального конструктора. В этом случае Visual Studio создаст обработчик события по умолчанию для этого элемента управления (и соответствующим образом настроит дескриптор элемента управления). Например, двойной щелчок на странице приводит к созданию обработчика события Page.Load, а двойной щелчок на кнопке — обработчика события Click.
Выбрать событие в окне Properties. Выделите элемент управления и щелкните на кнопке с изображением молнии в окне Properties. Вы увидите список всех событий, предоставляемых этим элементом управления. Дважды щелкните на поле рядом с событием, которое собираетесь обработать, и Visual Studio автоматически сгенерирует обработчик события в классе страницы и настроит дескриптор элемента управления:

Второй и третий способы наиболее удобны. С другой стороны, третий способ самый гибкий, поскольку позволяет выбрать уже созданный ранее метод в классе страниц. Просто выберите событие в окне Properties и щелкните на стрелке раскрывающегося списка справа. Вы увидите список методов класса, которые соответствуют сигнатуре, ожидаемой этим событием. Затем в списке можно выбрать метод для его подключения, как показано на рисунке выше.
В Visual Studio используется автоматическое образование цепочек событий, как показывает директива Page. Автоматическое образование цепочек событий основано на двух базовых принципах:
Все обработчики событий страницы подключаются автоматически на основании имени обработчика событий. Другими словами, метод Page_Load() автоматически вызывается во время загрузки страницы.
Все обработчики событий элемента управления подключаются с использованием атрибутов в дескрипторе элемента управления. Атрибут носит то же имя, что и событие, но имеет префикс On.
Например, если вы собираетесь обработать событие Click элемента управления Button, необходимо лишь установить атрибут OnClick в дескрипторе элемента управления с именем обработчика событий, который вы собираетесь использовать.
Этот подход служит для создания элементов управления «на лету».
Чем на самом деле является QR код и стоит ли им пользоваться
В наше время, кажется, уже все знают, что такое QR-код, но мало кто знает, как он появился, где применяется и какие особенности имеет. В то же время этот незамысловатый квадратик с узором не просто является актуальным носителем информации, но и имеет все шансы стать очень перспективным средством донесения информации до человека будущего. Если вы думаете, что он проще, чем кажется — эта статья для вас. Тем более что сейчас, когда москвичей обязали проходить идентификацию по QR при выходе из дома в условиях карантина.

QR код очень удобен. Отсканировал и нужная информация у тебя.
Кто придумал QR-код
История этого на первый взгляд простого узора началась ровно четверть века назад в Японии. Разработкой занималась компания Denso-Wave. Сейчас обозначение ”QR code” является зарегистрированным товарным знаком DENSO Corporation, однако, его использование не облагается какими-либо лицензионными отчислениями. Кроме этого, сами QR коды описаны и опубликованы в качестве стандартов ISO.
Расшифровка QR очень проста. Две столь привычные буквы означают “Quick Response”. То есть QR код можно назвать кодом быстрого реагирования (или моментального отклика). Сейчас это как никогда отражает суть, так как для сканирования не нужно никаких специальных приборов. Достаточно поднести к коду смартфон и можно получить всю необходимую информацию.

В сканировании QR кода нет ничего сложного и в этом его плюс.
Изначально код разрабатывался для автомобильной промышленности, но постепенно начал выходить за ее пределы. Настоящий прорыв в умах потребителей произошел с появлением в широком доступе смартфонов с хорошей камерой. Именно тогда начали появляться информационные и рекламные коды, сделанные по технологии QR.
Технические особенности QR кода
QR коды бывают разных версий и в зависимости от них имеют разный размер. От 21 на 21 пикселя без учета полей в первой версии до 177 на 177 пикселей в сороковой версии.
Существует 4 основных типа кодировок. Среди них цифровая (для шифровки цифр), алфавитно-цифровая (цифры и символы), байтовая (данные) и кандзи, предназначенная для работы с иероглифами.
Для исправления ошибок в QR-коде, в случае его повреждения или нанесения дополнительных рисунков, используется код Рида-Соломона с 8-битным кодовым словом. Существует четыре уровня избыточности (7%, 15%, 25% и 30%). Есть и другие сложные степени защиты от ошибок считывания. Особую важность они обретают в случае работы с платежными и идентификационными системами. Одной из таких степеней является перебор всех возможных вариантов считывания с подсчетом штрафных баллов по особым правилам для каждой из них. В итоге выбирается самый удачный вариант, который и принимается за истинный.
Как работает QR код
Главным преимуществом QR кода является его “вместительность”. Этот тип кода является двухмерным в отличии от одномерного штрих-кода. В свое время переход от “полосочек” к “квадратикам” был обусловлен именно необходимостью шифровать в кодах больше информации.
Подписывайтесь на наш новостной Telegram-канал и всегда будете в курсе всего самого нового и интересного из мира Android и не только.
Стандартный QR код может нести в себе до 4000 символов. Это позволяет зашифровать не только пару десятков символов инвентарного номера товара в магазине, но даже целые тексты, длинные реферальные ссылки и многое другое. Есть даже возможность шифрования JPEG, GIF и PNG. Правда, для этого они должны быть размером не больше 4 КБ, а это очень мало. Для передачи изображений куда проще зашифровать ссылку и разместить на специальной странице любое изображение.

В QR код можно даже зашифровать книгу.
Основным преимуществом QR кодов является их перспективность. С каждым днем они появляются вокруг нас все чаще и чаще. Многие рекламные компании переведены на этот код. Уже сейчас вполне нормально идти по улице и встретить QR код на столбе или стене. В этом случае, правда, стоит быть осторожным, так как никто не знает, куда он ведет. Но, если вы видите код на большом плакате в магазине, на ТВ или на упаковке товара, его можно смело сканировать.

Пример использования QR кода в общественных местах.
Использование QR кода даже позволяет сэкономить на стоимости товара. Например, вы покупаете наушники и производителю не нужно класть в коробку толстые стопки инструкций на всех языках. Достаточно разместить внутри QR-код со ссылкой на страничку, где можно будет выбрать язык и получить нужную информацию. Экономия идет за счет уменьшения веса упаковки, уменьшения ее объема и, конечно, экономии на бумаге.
Возвращаясь к перспективам, можно представить варианты нашего будущего, когда дополненная реальность станет обычным делом и мы будем ходить в специальных очках. При считывании такого кода очки заменят его на нужное изображение и рядом с человеком “повиснет” экран с информацией. Звучит немного криповато, но реклама коварна — она не спрашивает, когда ей появиться.

Отсканировал QR и не нужно много места для печатного текста.
Пока в рекламе коды применяются только как дополнение. Есть основной посыл и завлекающий элемент в виде QR кода, по которому предлагается перейти для получения большей информации. Опять же, так производители могут более точно оценить эффективность рекламы и количество людей, заинтересованных в ней.
Что такое Micro QR code
Кроме основного типа QR кода, в последнее время начал набирать популярность Micro QR. Основным преимуществом является бОльшая эффективность. В самом коде используется только одна метка позиционирования, в отличии от трех в большом варианте (большие квадраты по углам). Это позволяет высвободить дополнительное пространство, не переживая за ошибки считывания.

Пример Micro QR кода
Кроме этого, в Micro QR уменьшен размер свободной области. В обычном варианте должно использоваться 4 модуля свободного пространства, а в Micro QR только два. Свободным полем является чистая область за пределами изображения кода, а модулями — один элемент (квадратик) внутри самого кода. То есть уменьшение свободной области позволяет разместить код более красиво и опять же сэкономить место.
Зачем нужны QR-коды
Креативщики из Guinness решили внести современные нотки в такое старое дело, как пивоварение. Так, на бокалы пива наносится QR код, который видно только при наполнении емкости темным пивом Guinness. Когда стакан пустой или наполнен обычным светлым пивом, код считать не получится. Если покупатель все же считал код, он получает доступ на специальную страницу с промокодами и другой интересной информацией.

Видно код — не видно код.

Та самая пицца для молодых специалистов.

Аппетитно и информативно.
Некоторые кулинары наносят QR на продукты. В итоге, покупатель может ознакомиться с историей пирожного, узнать больше о заведении или получить информацию о предстоящих акциях. Но некоторые идут дальше. В рамках кампании одного из рекрутинговых агентств, молодым специалистам, которым хотели предложить работу, отправляли пиццу с нанесенным на нее QR кодом с предложением. Это было очень креативно и кроме получателя никто не видел послание, так как пицца была очень вкусной и сразу съедалась.
Встречаются QR коды и в архитектуре. Так, например, на крыше офиса Facebook красуется большой QR код, который можно легко прочитать на снимках с воздуха. Применен QR и в проекте бизнес-центра в Дубае. Весь фасад здания должен быть покрыт “информативными квадратиками”.

Офис Facebook с QR кодом на крыше.

Проект здания в виде QR кода
Еще одним примером креатива могут служить футболисты клуба “Бромли”, которые во время матча кубка Англии вышли на поле с выбритыми на голове QR-кодами. Сканирование кодов вело на сайт букмекерской конторы. Что скажешь? Необычный ход.

Оригинальное решение по размещению QR кода. Главное, не ошибиться.
В Корее есть один очень необычный супермаркет, в котором на полках не стоят товары. Вместо этого на столбы и стены нанесены фотографии реальных полок, на которых стоят такие же ненастоящие товары. Человек ходит между этих полок, выбирает то, что ему нужно, сканирует QR код и все. На выходе он сканирует QR код для оплаты и передачи своего адреса для доставки товаров домой. Это лишнее доказательство того, что QR коды нужны для того, чтобы мы могли общаться с компьютером на одном языке.
Как использовать QR-коды
Помимо приведенных выше способов использования QR кодов есть и более приземленные, привычные многим людям.
Среди основных можно назвать оплату товаров и услуг населением азиатских стран. В Китае почти все оплачивают покупки при помощи встроенных возможностей многофункционального приложения WeChat. С его помощью оплачиваются товары на кассе, преподносятся денежные подарки путем перевода (у китайцев очень распространены так называемые ”красные конверты”) и даже подается милостыня городским попрошайкам.

Традиционные китайские красные конверты дарятся на праздники. Благодаря WeChat они стали электронными.
Согласно данным iResearch, объем мобильных платежей в Китае в 2018 году составил 72,1 триллиона юаней или примерно 10 триллионов долларов. Львиную долю из этого составили именно платежи при помощи QR-кодов.
Широкому распространению такого вида оплаты поспособствовала китайская компания Inspiry, которая в 2003 году изобрела быстрый способ считывания кодов. Правда, в начале нулевых оплата все равно проходила только в течение 15-20 секунд. Впоследствии трудности преодолели и ускорили процесс, а рост объема платежей пошел вверх по экспоненте. Для сравнения, с 2011 года он вырос почти в 1000 раз и каждый год рос не меньше, чем на четверть.
В это же время в Европе и США люди существенно реже сталкиваются с QR кодами. Например, по данным опросов в США, только 20 процентов продавцов знает как ими пользоваться и примерно такое же количество человек хоть раз в жизни сканировало QR код. Определенные попытки продвижения есть, но они очень слабые и заключаются только в размещении специальных меток на памятниках архитектуры, в общественных местах и на рекламных материалах.
Исключениями являются единичные случаи, вроде австралийского бренда UGG и американской компании Sennheiser, которые реализовали проверку подлинности на основе QR кода. После вскрытия упаковки покупателю предлагается просканировать код. Если его нет или система выдала ошибку, покупатель может вернуть товар в магазин, так как он является контрафактным.
Россия в этом вопросе продвинулась чуть дальше. Например, у нас уже несколько лет действует стандарт на использование QR кодов в документах. Он позволяет наладить документооборот на предприятиях и обеспечить боле удобную оплату коммунальных платежей. Проблема в том, что мало кто этим пользуется.
Как создать QR-код
В наше время нет, наверное, ничего проще создания QR кода. Для этого существует масса сервисов и сайтов, которые быстро и без регистрации позволяют сгенерировать нужный код и скачать его для печати или отправки кому-то. Приводить примеры в большом количестве нет смысла, достаточно просто вбить в поиске “генератор QR кода” и получить нужный результат в виде сайта или приложения.
Как видите, в этом нет ничего сложного и, если вы не пользовались такими кодами, советую попробовать. Это иногда может быть очень удобным способом поделиться информацией. Не стоит их недооценивать. И не надо называть их штрих-кодами.