Что такое код localinit

Содержание

Переменные и циклы на CIL

C# — Сборки .NET — Переменные и циклы на CIL

Объявление локальных переменных в CIL

Давайте посмотрим, как в CIL объявлять локальную переменную. Для этого предположим, что необходимо создать в CIL метод по имени MyLocalVariables(), не принимающий аргументов и возвращающий void, и определить внутри него три локальных переменных типа System.String, System.Int32 и System.Object:

Как здесь видно, в первую очередь для размещения локальных переменных в CIL должна использоваться директива .locals вместе с атрибутом init. Внутри соответствующих скобок с каждой переменной необходимо ассоциировать определенный числовой индекс (в примере это [0], [1] и [2]). Далее вместе с каждым из этих индексов понадобится указать тип данных (обязательно) и имя переменной (необязательно).

После определения локальных переменных останется только загрузить значения в стек (с помощью различных кодов операций, предназначенных для загрузки) и сохранить их в этих локальных переменных (посредством различных кодов операций, предназначенных для сохранения значений).

Илон Маск рекомендует:  Многоколоночная вёрстка

Отображение параметров на локальные переменные в CIL

Объявление локальных переменных непосредственно в CIL с использованием директивы .local init уже было показано, а теперь необходимо ознакомиться с отображением входных параметров на локальные методы. Рассмотрим следующий статический метод на C#:

В CIL этот метод, который настолько просто выглядит в C#, потребует массы дополнений. Чтобы представить его на CIL, понадобится, во-первых, разместить входные аргументы (а и Ь) в виртуальном стеке выполнения с помощью кода операции ldarg, во-вторых, использовать код операции add для извлечения двух значений из стека, вычисления их суммы и затем опять ее сохранения в стеке, и, в-третьих, извлечь эту сумму из стека и вернуть ее вызывающему коду с использованием кода операции ret.

Если просмотреть этот метод на C# в утилите ildasm.exe, то видно, что csc.exe вставил массу дополнительных лексем, хотя основная часть CIL-кода выглядит довольно просто:

Скрытая ссылка this

Обратите внимание, что в CIL-коде для ссылки на входные аргументы (а и b) используются их индексные позиции (0 и 1), причем нумерация этих позиций в виртуальном стеке выполнения начинается с нуля.

При изучении и создании CIL-кода нужно помнить о том, что каждый нестатический метод, который принимает входные аргументы, автоматически получает дополнительный входной параметр, представляющий собой ссылку на текущий объект (похожую на ключевое слово this в C#). Если, например, метод Add() определен не как статический:

то входные аргументы а и b будут загружаться с помощью ldarg.1 и ldarg.2 (а не ldarg. О и ldarg.1, как ожидалось). Объясняется это тем, что в ячейке с номером О будет содержаться неявная ссылка this. Ниже приведен псевдокод, который позволит удостовериться в этом:

Представление итерационных конструкций в CIL

Итерационные конструкции в языке программирования C# представляются с помощью таких ключевых слов, как for, foreach, while и do, каждое из которых имеет специальное представление в CIL. Для примера рассмотрим следующий классический цикл for:

Вспомните, что для управления ходом выполнения программы на основе условий в CIL применяются коды операций br (br, blt и т.д.). В данном примере условие гласит, что выполнение цикла должно завершаться тогда, когда значение локальной переменной i становится больше или равно 10. С каждым проходом к значению i добавляется 1, после чего проверяемое условие вычисляется заново.

Кроме того, при использовании любого из связанных с ветвлением кодов операций в CIL должна быть определена специальная метка (или две) для обозначения места, куда будет произведен переход в случае удовлетворения условия. С учетом всего вышесказанного взглянем на следующий (расширенный) код CIL, сгенерированный в ildasrn.exe (вместе с соответствующими метками):

Этот CIL-код начинается с определения локальной переменной int32 и ее загрузки в стек. После этого осуществляется переход туда и обратно между метками IL_0009 и IL_0005, во время каждого из которых значение i увеличивается на 1 и проверяется на предмет того, по-прежнему ли оно меньше 10. Если нет, происходит выход из метода.

Где в битрикс лежит init.php и как с ним работать

Где в Битрикс лежит файл init.php и что делать, если вы его не нашли

Файл init.php в битрикс может находиться по одному из следующих путей:

/bitrix/php_interface/init.php — в этом случае код написанный в файле распространяется на все ваши сайты.

/bitrix/php_interface/ID сайта/init.php — если файл находится по этому пути, то написанный в нем код будет подключен только к одному определенному сайту.

/local/php_interface/init.php — этот файл пришел к нам из D7. Это аналог файла /bitrix/php_interface/init.php Он будет работать для всех ваших сайтов, при этом есть один очень важный нюанс: файл /bitrix/php_interface/init.php не подключится и соответственно код написанный в нем работать не будет.

/bitrix/php_interface/ID сайта/init.php — этот файл, как и предыдущий его собрат пришел к нам из ядра D7, но является аналогом файла /bitrix/php_interface/ID сайта/init.php как и у его предшественника, при подключении этого файла, глобальный файл /bitrix/php_interface/ID сайта/init.php работать не будет

Выше описаны стандартные варианты расположения init.php в битрикс, но на вашем сайте может быть подключено 2-4 init.php, а возможен и такой вариант, что файлы init.php отсутствуют вовсе.

Если на вашем сайте есть несколько файлов init.php /bitrix/php_interface/init.php и /bitrix/php_interface/ID сайта/init.php то сначала подключится файл /bitrix/php_interface/init.php , а потом /bitrix/php_interface/ID сайта/init.php

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

Назначение файла init.php в Битрикс

Как работать с файлом init.php

Файл init.php в битрикс достаточно важный т.к. подключается в прологе, т.е. еще до выполнения кода на страницах сайта и административной части, таким образом любая ошибка в файле init.php приведет к тому, что перестанет работать не только публичная часть сайта, но и административная.

Даже если вы узнали где лежит init.php в битрикс и понимаете как сним работать, необходимо соблюдать некоторые меры безопасности и правила хорошего тона в программировании:

1. Всегда вносите изменения только по ftp или sftp или хотя бы убедитесь в том, что у вас есть доступ к сайту по ftp/sftp — это будет полезно, если вы допустите ошибку в файле и сайт перестанет работать.

Как узнать координаты базовой станции GSM по MCC, MNC, LAC и CellID (CID).

Published 22.04.2015 by Johhny

Cellidfinder — это простой и удобный сервис по поиску местоположения базовых станций мобильной связи стандарта GSM и построению их на карте. В статье приведена подробная инструкция по поиску местоположения базовых станций GSM с помощью данного сервиса.

Какие данные необходимы для локализации БС?

Для того, чтобы найти координаты сектора базовой станции необходимо знать 4 параметра:

  • MCC (Mobile Country Code) — код, определяющий страну, в которой находится оператор мобильной связи. Например, для России он равен 250, США — 310, Венгрия — 216, Китай — 460, Украина — 255, Белоруссия — 257.
  • MNC (Mobile Network Code) — код, присваиваемый оператору мобильной связи. Уникален для каждого оператора в конкретной стране. Подробная таблица кодов MCC и MNC для операторов по всему миру доступна здесь.
  • LAC (Location Area Code) — код локальной зоны. В двух словах LAC — это объединение некоторого количества базовых станций, которые обслуживаются одним контроллером базовых станций (BSC). Этот параметр может быть представлен как в десятичном, так и в шестнадцатеричном виде.
  • CellID (CID) — «идентификатор соты». Тот самый сектор базовой станции. Этот параметр также может быть представлен в десятичном, и шестнадцатеричном виде.

Где взять эти данные?

Данные берутся с нетмонитора. Нетмонитор — это специальное приложение для мобильных телефонов или других устрйств, которое позволяет узнать инженерные параметры мобильной сети. В сети существует огромное количество нетмониторов для различных устройств. Найти подходящий — не проблема. Кроме того многие современные GPS трекеры в условиях плохого приема спутников могут отсылать хозяину не координаты, а параметры базовой станции (МСС, MNC, LAC, Cellid) за которую они цепляются. Cellidfinder поможет быстро перевести эти параметры в приблизительное местоположение БС.

Откуда берутся координаты базовой станции?

Поиск координат базовых станций проводится в базах данных Google и Yandex, которые предоставили такую возможность. Следует отметить, что в результате поиска мы получаем не точное местоположения вышки, а приблизительное. Это то местоположение, в котором регистрировалось наибольшее количество абонентов, передавших информацию о своем местоположении на серверы Google и Yandex. Наиболее точно местоположение по LAC и CID определяется при использовании функции усреднения, при которой вычисляются координаты всех секторов (CellID) одной базовой станции, а затем вычисляется усредненное значение.

Как работать с CellIDfinder?

Для того, чтобы начать работать с сервисом поиска местоположения базовых станций CellIdfinder необходимо установить на смартфон любой нетмонитор. Вот один из неплохих вариантов. Включаем скачанное приложение и смотрим необходимые параметры.

В данном случае в окне нетмонитора мы увидели:
MCC = 257 (Белоруссия)
MNC = 02 (МТС)
LAC = 16
C >

Вводим эти параметры в форму поиска на главной странице. Т.к. LAC и CID могут выдаваться нетмонитором как в десятичном, так и в шестнадцатеричном виде, то форма поиска имеет автозаполнение для LAC и CID во втором виде. Выбираем «Данные Google», «Данные Yandex» и, если необходима высокая точность, «Усреднение». Нажимаем кнопку «Найти БС».

В результате получили координаты для данного сектора базовой станции. Более того координаты по базам Google и Yandex практически совпали, а значит можно предположить, что БС построены на карте достаточно точно.

LocalAlloc

Описание: function LocalAlloc(Flags, Bytes: Word): THandle;

Выделяет из локальной кучи память под блок локальной памяти. Фактический pазмеp может быть больше, чем указанный.

Паpаметpы:

Flags: Одна или несколько из следующих констант: lmem_Discardable, lmem_Fixed, lmem_Modify, lmem_Moveable, lmem_NoCompact, lmem_NoDiscard и lmem_ZeroInit. См. pаздел «Флаги локальной памяти, lmem_» в главе 1.

Bytes: Размеp выделяемого блока в байтах.

Возвpащаемое значение:

Идентификатоp выделенного блока локальной памяти; 0 — если ошибка. функция находится в файле kernel32.dll

Что такое код MMI: убираем ошибку на устройстве с ОС Android

Многие владельцы гаджетов с ОС Android во время набора кода USSD видели уведомление о том, что возникли проблемы с подключением. В сегодняшней публикации рассмотрим, что такое код mmi, почему возникают такие ошибки. К слову, сам спецкод нужен для форматирования ussd запросов. Эти сообщения могут появляться независимо от используемого оператора. Вот только в первую очередь следует проверить, корректно ли введены данные. Весь перечень можно найти на сайте провайдера. Если все введено верно, но сбой все равно происходит, читайте инструкцию ниже.

Илон Маск рекомендует:  Что такое код domxml_new_doc

Привлекаем режим полета

Что такое код mmi? Если проблема возникла в первый раз, то вероятнее всего, произошел сбой в работе сети. В таком случае воспользуйтесь простым методом. Для этого перейдите в настройки и тапните по значку самолета для активации режима полета, чтобы совсем отключить сеть.

Потом нужно немного подождать, примерно 30 секунд и можно его деактивировать. Дальше опять попробуйте ввести запрос, если спецкод mmi опять отменен, то придется пробовать другие варианты.

Нестабильная работа 3G или LTE

Такой сбой может появляться, если уровень сигнала плохой. Это будет видно по значку сети, если там тип меняется, то это ведет к сбоям в запросах. Для исправления необходимо выбрать один сетевой тип, их вы найдете в разделе настроек. Там нажмите значок «Еще», далее переходите к мобильным сетям, там и находится нужный пункт. Вы можете попробовать поочередно имеющиеся варианты, все зависит от покрытия вашего региона.

Что такое код mmi: проверка SIM карты

Эта проблема является самой распространенной, если вы ищите ответ на вопрос, что значит недействительный код mmi. Скорее всего, ваша симка уже давно используется или недавно она переставлялась с одного на другой девайс и была повреждена.

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

Ничего не помогает

Если не получилось исправить ситуацию, можете воспользоваться дополнительными советами. Они могут и не помочь, но все же они иногда выручали пользователей, так что пробуйте:

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

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

Что такое код localinit

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

Курс для разработчиков — продолжение линейки учебных курсов по Bitrix Framework. Получение сертификата по курсу рекомендуется после успешной сдачи тестов по всей линейке курсов, так как без понятия о работе Контент-менеджера и Администратора создание успешных сайтов будет затруднено.

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

  • Интерфейс программы — в главе Элементы управления курса Контент-менеджер.
  • Компоненты 2.0 (начальные сведения) в главе Компоненты 2.0 (начальные сведения) курса Контент-менеджер.
  • Информационные блоки — в главе Информационные блоки (начальные сведения) курса Контент-менеджер.
  • Управление доступом к файлам, элементам контента, модулям и другие права доступа в главе Управление доступом курса Администратор. Базовый.
  • Работа с инструментами системы — в главе Работа с инструментами курса Администратор. Базовый.
  • Модуль Поиск — в главе Поиск курса Администратор. Базовый.
  • Вся информация по администрированию модулей размещена в курсах:
    • Администрирование. Модули — модули «1С-Битрикс: Управление сайтом»
    • Администратор. Бизнес — модули «1С-Битрикс: Управление сайтом», связанные с коммерческой деятельностью в Интернете.
    • Администратор «1С-Битрикс: Корпоративный портал» — модули «1С-Битрикс: Корпоративный портал»

    По завершению изучения этого курса можно продолжить изучение работы в продуктах Bitrix Framework по следующим курсам:

  • Бизнес-процессы — настройка и создание бизнес-процессов.
  • Бот платформа Битрикс24 — приложения, основанных на чатах в веб-мессенджере.
  • Маркетплейс Битрикс24 — приложения для коробочной и облачной версий Битрикс24.
  • Маркетплейс Bitrix Framework — расширение функционала проектов на основе Bitrix Framework с помощью сторонних модулей и решений.
  • Многосайтовость — система многосайтовости и принципы работы с многосайтовой конфигурацией.

Начальные требования к подготовке

Для успешного изучения курса и овладения мастерством разработки сайтов на Bitrix Framework необходимо владеть (хотя бы на начальном уровне):

  • основами PHP, баз данных;
  • основами HTML, CSS.

После изучения курса вам будет предложено пройти тесты на сертификацию. При успешной сдаче последовательности тестов на странице Моё обучение можно просмотреть результат обучения и загрузить сертификат в формате PDF.

На каждой странице курса авторизованный на сайте посетитель может дать комментарий к содержимому страницы. Комментарий — не форум, там не ведётся обсуждений или разъяснений. Это инструмент для сообщений нам об ошибках, неточностях. Для отправки комментария воспользуйтесь расположенной в правом нижнем углу окна браузера кнопкой:

Для преподавания оффлайн

Если данный курс берётся в качестве основы для оффлайного преподавания, то рекомендуемая продолжительность: 5 дней (40 академических часов).

Примечание: В тексте курса вы встретите цитаты, высказанные в разное время разработчиками системы и разработчиками проектов на базе Bitrix Framework. Надеемся, что такие неформальные замечания внесут некоторое разнообразие в процесс изучения. Заодно опытные специалисты поделятся и своим опытом.

Имена авторов цитат даются в том написании, в каком авторы зарегистрировали себя на сайте «1С-Битрикс».

Скачать материалы курса в формате CHM. Файлы формата CHM обновляются ежемесячно, тем не менее, возможно некоторое отставание их от онлайновой версии курса.

Чтобы отключить подобное отношение к файлу необходимо:

    перейти в свойства файла на вкладку Общие. Внизу у Вас отобразится сообщение о том, что этот файл был заблокирован системой с целью защиты компьютера.

Отсутствие кнопки Разблокировать возможно в двух случаях:

  1. Файл лежит не локально, а на сетевом ресурсе.
  2. Если файл лежит на локальном диске, но путь к нему содержит спецсимволы (# и прочие).

Что такое код localinit

Во многих дистрибутивах linux можно добавлять программы или команды в конец процесса загрузки и они будут выполнены после того как запустятся все системные сервисы. Для этих целей разные дистрибутивы используют разные методы. Например, в дистрибутивах на основе RedHat можно добавить скрипт или программу в /etc/rc.d/rc.local файл, однако такого файла нет в дистрибутивах основанных на Debian. Как же быть в таком случае, ниже решение.

Необходимо создать файл /etc/init.d/local

#sudo nano /etc/init.d/local

Так как это shell скрипт в начало файла необходимо добавить

Проектирование и рефакторинг

Реорганизация кода

Все подряд

Лучшие

Авторы

  • SanQri 1 июня 2020 в 13:59

Архитектура конечных автоматов в Unity для организации поведений юнитов

Первым этапом разработки моей игры стала разработка RTS-движка. Я планирую написать серию постов о возникших задачах и их решениях в этом блоге. В этом посте я расскажу как организовал поведения юнитов.

Размышляя с чего начать вообще этот RTS движок, я пришел к выводу, что стоит начать с конкретики и от нее перейти к абстракции. Первой прикладной задачей, пришедшей на ум, был сбор ресурсов, а точнее, добыча дерева.

Пара слов в защиту монолита

Тонкости Lambda Expressions в C#

То, о чем написано в статье, я отлавливал около 10 часов, это были 10 часов непрерывного дебага, которые cвелись к пошаговому сравнению рабочей и нерабочей версий кода, даже не так, к сравнению каждой строчки из окошка дебага рабочей и не рабочей версий кода

Ваши распределенные монолиты плетут козни у вас за спиной

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

Рекомендуем

Раскрываем преступление при помощи кода: блокчейн-квест в стиле нуар

Воспоминания разработчика Blizzard: как появилась первая Diablo

Конкурс IT-статей для авторов Хабра. Всем участникам — почет и уважение комьюнити, высокое жюри, крутые номинации — все как вы любите

Что нужно знать перед переходом на Akka toolkit для реализации Event Sourcing и CQRS

Здравствуйте, уважаемые читатели Хабра. Меня зовут Рустем и я главный разработчик в казахстанской ИТ-компании DAR. В этой статье я расскажу, что нужно знать перед тем, как переходить на шаблоны Event Sourcing и CQRS с помощью Akka toolkit.

Примерно с 2015 года мы начали проектировать свою экосистему. После анализа и опираясь на опыт работы со Scala и Akka, решили остановиться на Akka toolkit. У нас были и удачные реализации шаблонов Event Sourcing c CQRS и не очень. Накопилась экспертиза в этой области, которой я хочу поделиться с читателями. Мы рассмотрим, как Akka реализует эти паттерны, а также какие инструменты доступны и поговорим о подводных камнях Akka. Надеюсь, что после прочтения этой статьи, у вас будет больше понимания рисков перехода на Akka toolkit.

Технический долг

Программные системы склонны к накоплению мусора — внутренних недоработок, которые затрудняют дальнейшее изменение и расширение системы по сравнению с идеальным кодом. Технический долг — это метафора, придуманная Уордом Каннингемом. Она объясняет, как воспринимать этот мусор, по аналогии с финансовым кредитом. Дополнительные усилия, необходимые для добавления новых функций, — это проценты по кредиту.

Илон Маск рекомендует:  wordwrap - Выполняет перенос строки на данное количество символов с использованием символа разрыва

САПР CATIA на платформе 3DEXPERIENCE помогла воссоздать боевой корабль Леонардо да Винчи

Многих инженеров-машиностроителей вдохновляет талант Леонардо да Винчи — «универсального человека», успешно сочетавшего в своей деятельности искусство, науку и инженерное дело, анатомию и медицину.

Сегодня его работы можно увидеть в таких известных музеях, как Лувр в Париже и Галерея Уффици во Флоренции. Именно они побудили Алена Дюгуссе, эксперта по PLM CATIA V5/V6 в компании Dassault Systèmes, принять участие в проекте 3DEXPERIENCE Lab «Open Codex», посвященном виртуальному воссозданию изобретений Леонардо.

AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Как мы запустили 2ГИС под CarPlay и до сих пор расхлёбываем

Привет! Меня зовут Ваня, я пишу мобильное приложение 2ГИС под iOS. Сегодня будет история о том, как наш навигатор появился в CarPlay. Расскажу, как с такой себе документацией и недоделанными инструментами мы создали рабочий продукт и разместили его в AppStore.

Тесты для кода и код для тестов

В динамических языках, вроде python и javascript, возможно прямо во время работы заменять методы и классы в модулях. Это очень удобно для тестов — можно просто ставить «заплатки», которые будут исключать тяжёлую или ненужную логику в контексте данного теста.

Но что делать в C++? Go? Java? В этих языках код не получится модифицировать для тестов на лету, а создание заплаток требует отдельных инструментов.

В таких случаях стоит специально писать код так, чтобы он тестировался. Это не просто маниакальное стремление увидеть в своём проекте 100% покрытие. Это шаг к написанию поддерживаемого и качественного кода.

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

inzeppelin 17 мая 2020 в 12:14

Логи фронтенд-разработчика Хабра: рефакторим и рефлексируем

Мне всегда было интересно, как устроен Хабр изнутри, как построен workflow, как выстроены коммуникации, какие применяются стандарты и как тут вообще пишут код. К счастью, такая возможность у меня появилась, ведь недавно я стал частью хабракоманды. На примере небольшого рефакторинга мобильной версии попробую ответить на вопрос: каково это — работать тут фронтом. В программе: Node, Vue, Vuex и SSR под соусом из заметок о личном опыте в Хабре.

Вакансии

vmchar 15 мая 2020 в 23:45

Размышления о красоте и коде

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

Disclaimer: эта статья ставит перед собой целью поделиться мыслями, возникшими в процессе попытки осмыслить понятие красивого кода. Приведенные мысли не претендуют быть истиной в последней инстанции. Надеюсь лишь на то, что эти мысли, размышления и доводы, возможно, помогут кому-то взглянуть на сам процесс написания кода немного с другой стороны. Далее не следует ни одного формального правила вида «Пишите код так, и будет вам счастье». По данной тематике уже написан большой объем литературы от гораздо более уважаемых авторов.

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

Дорогой клиент, вот почему это изменение заняло столько времени

Изменения в сложных программных системах, кажется, занимают вечность, не так ли? Даже инженерам часто кажется, что изменения идут больше положенного, хотя мы сознаём всю сложность системы!

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

Поэтому рано или поздно заказчик пришлёт письмо: «Почему, чёрт возьми, это занимает так много времени?» Не будем забывать, что у нас как инженеров-программистов есть окно в мир, которого они зачастую лишены. Они очень нам доверяют, но иногда кажущееся незначительным изменение отнимает действительно много времени. Из-за этого и возникают вопросы.

Должны ли строки в Python быть итерируемы?

И сотворил Гвидо строки по образу C, по образу массивов символов сотворил их. И увидел Гвидо, что это хорошо. Или нет?

Представьте, что вы пишете совершенно идиоматичный код по обходу неких данных с вложенностью. Beautiful is better than ugly, simple is better than complex, так что вы останавливаетесь на следующем варианте кода:

Вы пишите юнит-тест, и что бы вы думали? Он не работает, причём не просто не работает, а

Как? Почему? В поисках ответа вы погрузитесь в удивительный мир коллекций бесконечной глубины.

Глобальное кеширование результатов Query в ASP.NET CORE

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

Пусть все интерфейсы, использующиеся в рамках запроса будут иметь тип IQuery или IAsyncQuery:

Быстрорастворимое проектирование

Люди учатся архитектуре по старым книжкам, которые писались для Java. Книжки хорошие, но дают решение задач того времени инструментами того времени. Время поменялось, C# уже больше похож на лайтовую Scala, чем Java, а новых хороших книжек мало.

В этой статье мы рассмотрим критерии хорошего кода и плохого кода, как и чем измерять. Увидим обзор типовых задач и подходов, разберем плюсы и минусы. В конце будут рекомендации и best practices по проектированию web-приложений.

Эта статья является расшифровкой моего доклада с конференции DotNext 2020 Moscow. Кроме текста, под катом есть видеозапись и ссылка на слайды.

Linux.yaroslavl.ru

Режимы Выполнения (runlevels)
Пред. Глава 11. Файлы Загрузки: init sysv След.

Режимы Выполнения (runlevels)

Все файлы, имеющие отношение к загрузке находятся в каталоге /etc/rc.d. Вот список файлов:

В начале, как мы видим, запускается файл rc.sysinit. Этот файл отвечает за установки базовой конфигурации машины: тип клавиатуры, конфигурация некоторых устройств, проверка файловой системы и т.д.

Затем запускается скрипт rc, с желаемым номером runlevel в качестве аргумента. Как мы видим, runlevel это простое целое число, и для каждого runlevel имеется соответствующий rc .d каталог. В обычной инсталляции Mandrake Linux вы можете увидеть 6 определенных runlevel:

0: полная остановка машины;

1: single-user (однопользовательский) режим; используется в случае серьезных проблем или для восстановления системы;

2: multi-user (многопользовательский) режим, без поддержки сети;

3: Мulti-user (многопользовательский) режим с поддержкой сети;

5: такой же как и 3, но, кроме всего, запускает графический интерфейс для входа в систему (login);

Давайте посмотрим, например, на содержимое каталога rc5.d:

Как вы видите, все файлы в этом каталоге это символические ссылки, и все они имеют специфический вид. Их общий вид такой:

S обозначает Start сервиса, а K обозначает Kill (остановку) сервиса. Скрипты запускаются в возрастающем порядке номеров, а если два скрипта имеют одинаковый номер, тогда действует алфавитный порядок. Мы также видим, что каждая символическая ссылка указывает на соответствующий скрипт в каталоге /etc/rc.d/init.d (кроме local), скрипт, который отвечает за контроль особого сервиса.

Когда система отправляется в заданный runlevel, все начинается с запуска K ссылок в таком порядке: rc ищет куда указывает ссылка, затем вызывает соответствующий скрипт с одним аргументом stop. Затем запускаются S скрипты, используя тот же метод, не учитывая того факта, что скрипт вызван с аргументом start.

Итак, не учитывая всех остальных скриптов, мы можем видеть, что когда система переходит в runlevel 5, сначала запускается K15postgresql, то есть /etc/rc.d/init.d/postgresql stop. Затем K20nfs, затем K20rstatd, и так до последнего; потом, запускаются все S скрипты: первым S05apmd, который вызывает /etc/rc.d/init.d/apmd start, и так далее.

Вооружившись всем этим, вы можете создать свой собственный целый runlevel за несколько минут, или предотвратить запуск или остановку сервиса путем удаления соответствующей символической ссылки (есть также программы с интерфейсом для выполнения этого, в особенности drakxservices и chkconfig; бывшая графическая программа)

Как правильно сделать скрипт для init.d?

Второй день мучаюсь в попытках убивать хром перед перезагрузкой/выключением нормально, чтоб он вкладки не терял.
Что делал: создал файл /usr/local/sbin/killchrome (chmod +x естественно) с содержимым:

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

Потом создал в /etc/init.d/ файл killchrome с содержимым:

и запустил сервис через YaST

Но после перезагрузки/выключения хрому всё так же нужно восстанавливать вкладки.

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL