пятница, 9 июня 2023 г.

 Фанатам Mikrotik дома и любителям настраивать 121 опцию в DHCP

Задался вопросом как красиво заполнять эту опцию, чтобы потом не сломать мозг разбирая HEX по RFC 3442.

Методом проб и ошибок оказалось довольно всё просто:

мне надо было добавить 3 маршрута

10.200.200.0/24 => 10.222.222.222

10.200.222.0/24 => 10.222.222.222

default => 10.222.222.222


т.е. в RFC 3442 это будет выглядеть как

10.200.200.0/24 => 10.222.222.222     18 0A C8 C8 0A DE DE DE

10.200.222.0/24 => 10.222.222.222     18 0A C8 DE 0A DE DE DE

default => 10.222.222.222    00 0A DE DE DE


Так вот, методом проб и ошибок решается это так в Mikrotik опцию можно задать как

'<длина маски>[.<маска>]''шлюз' .... '<длина маски>[.<маска>]''шлюз'

В итоге это превращается в

'24.10.200.200''10.222.222.222''24.10.200.222''10.222.222.222''0''10.222.222.222'

Что гораздо нагляднее, да вроде смотрится не очень, но зато если знаешь как читать то всё норм)

В принципе проверять конечно по количеству знаков всё равно рекомендую.

Красиво конечно это смотрится с масками, которые выглядят как IP, но если нечетные то лучше записывать так:

'<длина маски>''<октет0>''<октет1>' ... '<шлюз>'

Например:

10.0.0.0/7 => 10.222.222.222 будет выглядеть как '7''10''10.222.222.222', 

что преобразуется в 07 0A 0ADEDEDE.

Но если попытаться записать как '7.10''10.222.222.222', 

то получается как 07 00 00 0A 0ADEDEDE, что неверно по RFC.


Удачи в конфигурировании.

понедельник, 15 июня 2020 г.

Прекратите спрашивать программистов о теоритических вещах

Проходил тут собеседование по JS.

И как ведомо подгорело. Предложение собеседующим: если сами не в теме, то не спорьте, а если не можете поддержать и раскрыть разговор, то собеседование это не ваше.

1. Вопрос более холиварный Function - это отдельный тип JS?
В учебниках написано что это тип объекта, впрочем как и Array. Но тогда резонный вопрос, если это не отдельный тип (хотя даже typeof выделяет его отдельно), то как я могу создать его вручную из Object каким либо образом не беря ничего из Function? 
Я понимаю что под капотом оно наследуется всё от Object, но как создать его вручную реализовав какой либо интерфейс или объявив какое либо спец свойство я не знаю, может быть мне помогут комментарием коллеги?

2. Typescript вопросы про количество элементов в Enum, я понимаю что вопросы про это бред, но всё таки Есть понятие const enum, которое не попадает в код, а попадают только значения. Собеседующий быстро отбрехался от этого. Рекомендую проверить вывод этого кода:

Фрагмент TS
const enum A {
    A,
B,
C
}
console.log(A.B);

Сколько значений попало в код?
99% программистов можно засыпать вопросом из базового синтаксиса, типа деструктивного
присваивания, специфических символов и прочих вещей, которые пользуются 1% всего времени
и не всегда несут полезную нагрузку, например со строками деструктуризации и присваивания
иногда над одной строкой можно голову сломать, не то что еще и ошибку уловить.
греет сковородки, но это же не мешает ей пользоваться и вкусно готовить.


Ну и общее: прекратите вы сыпать теорией из книжки...

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


вторник, 19 мая 2020 г.

createrepo под Ubuntu для RPM репозитариев в связи с кончиной Python 2

Я как гик люблю обновления) Поэтому как выходит более менее стабильный релиз то ставлю его сразу, чтобы понимать что может сломаться у клиентов и опередить заявки.
Так было и с Ubuntu 20.04, но так как Python 2 снят с поддержки еще в начале года, то из репозитария пропали многие пакеты зависящие от него.

Последнее что я использовал с его зависимость это был пакет createrepo для обновления метаданных репозитариев RPM.

Был найден проект https://github.com/rpm-software-management/createrepo_c который собран только под RedHat дистрибутивы, поиск собранных под Debian ничего не дал.

Временно были скачаны RPM пакеты и распакованы в /usr/local в принципе работало, хоть и с предупреждениями

Принял решение поковыряться и собрать самому набор для установки.
Требуется дополнительно

На выходе получил пакеты
libdrpm
libdrpm-dev
libmodulemd
libmodulemd-dev
zchunk
libzchunk
libzchunk-dev
createrepo-c
libcreaterepo-c
libcreaterepo-c-dev

Собственно ставлю с внутреннего репозитария и не знаю проблем без Python 2 )

вторник, 29 августа 2017 г.

Оценка результата программиста



Типовая ситуация

Требуется выполнить определенную работу. Есть "специально обученные" люди для её выполнения, которые собственно и отвечают за это.

Естественно работу отдаем им, так как никто не хочет брать лишнюю работу. Работу берет человек и выполняет её за N часов.

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

Возникает резонный вопрос: почему на выходе "одинаковых в профессиональной оценке" людей разный результат?

Что-то не то с оценкой результата и мотивацией в организации.


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

вторник, 7 марта 2017 г.

Яндекс Деньги. Привязка карты. А нужна ли?

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

Вот ответ поддержки:

>>>
Если к Вашему счёту привязана карта другого банка, то Вы можете оплатить что-нибудь в интернете через Яндекс.Деньги с баланса этой карты. При этом баланс карты и кошелька не объединяется, просто при каждом платеже (только когда Вы выбираете оплату с карты и вводите CVV-код) деньги списываются именно с карты, привязанной к счету.

Пополнить кошелек с карты можно тут: https://money.yandex.ru/topup/card/carddetails.xml
По этой ссылке можно перевести деньги с кошелька на карту: https://money.yandex.ru/direct-payment.xml?form-state=to-card

При оплате картой Яндекс.Деньги, средства должны быть на балансе Яндекс.Кошелька.
>>>

То есть нельзя оплачивать покупки Яндекс Картой с автосписанием средств с привязанной.

Смысл ясен. Плюсы Яндекс карты стали еще более неочевидны.

четверг, 12 января 2017 г.

Zimbra и Ubuntu 16.04

Насколько известно все переходят на SystemD систему инициализации.
В принципе это правильно, но при обновлении Zimbra и Ubuntu 14.04->16.04 столкнулся с тем что старый upstart конфиг от Zimbra нормально не встает.
Пришлось переписать на SystemD сервис.

Проблема выложенного  на github в том, что не стартует сервис logger.
Проблема изза того, что при старте генерится perl класс, который использует внутренние пакеты Zimbra, на которые в переменных нет ссылки.
Решается это подгрузкой переменных среды.

Короче выкладываю рабочий результат. Пользуйте.

[Unit]
Description=Zimbra Collaboration Suite
After=network.target remote-fs.target time-sync.target syslog.target
Conflicts=sendmail.service exim.service postfix.service

[Service]
Type=forking
User=zimbra
Group=zimbra
ExecStart=/bin/bash -c ". /opt/zimbra/.bashrc && /opt/zimbra/bin/zmcontrol start"
ExecStop=/bin/bash -c ". /opt/zimbra/.bashrc && /opt/zimbra/bin/zmcontrol stop"
ExecReload=/bin/bash -c ". /opt/zimbra/.bashrc && /opt/zimbra/bin/zmcontrol restart"
TimeoutSec=500

[Install]
WantedBy=multi-user.target

Такие программисты

Не выдержал... Как же меня бомбит от таких постов на нормальном ресурсе Habrahabr.

Начну пожалуй 
1. "Проблема — «непоследовательное» наследование" - это не проблема. Проблема в коде, который просто недостоин существования в 2017 году. Научитесь писать модульно и вы забудете об этом навсегда.
   "При настройках студии "по умолчанию" важен порядок подключения зависимых скриптов" - не умеете готовить не пользуйтесь.
   Если для сборки проекта используете средство интегрируемое, через костыль (а плагин - это костыль), то как бы может быть разобраться как средство работает в своей среде и насколько ему начхать на ваши Solution и Project в терминах Visual Studio.
   Используйте хотя бы paths в tsconfig.json для маппинга проектов.

2. "Проблема — глобальные переменные" - проблема в руках. Никто в 2017 году не использует глобальные переменные. А если ваш проект экспортирует, то это не должно быть проблемой.
3. "Обратите внимание на длинные относительные пути. Они тут нарочно, чтобы показать, что такое случается" - случается, если используешь не модульную систему. И более скажу, использование регистрозависимых путей может привести к веселым последствиям )) особенно когда будешь собирать под другой системой )

4. "Переписать весь наш код на использование импортов за один подход не представляется возможным. " - сколько не оттягивай процесс, все равно вернешься.
5. Интегрирование чего то куда то ради интегрирования это бред.