Линукс, ассемблер и X11
Это текстовая версия моей статьи про разработку графического приложения на чистом ассемблере под линукс.
( читать дальше... )
Это текстовая версия моей статьи про разработку графического приложения на чистом ассемблере под линукс.
( читать дальше... )
Имею минт, кажись, самый свежий. Бекапы делаю с помощью timeshift - скрытые системные файлы. ФС - ext4. Для этого завёл терабайтный hdd через переходник в USB (тоже, ext4).
Из-под винды делаю стандартными средствами - для этого у меня другой внешний USB-терабайтник, в NTFS. Ну, и всякая музыка, порнокино - копирую как есть на тот же самый USB-терабайтник, в NTFS.
А, да, бэкапы делаю как придётся, в среднем, раз в месяц.
Перемещено hobbit из general
Везде слышу, что докер, дескать, не имеет никакого переголовы… тьфу, overhead-a.
Допустим. Однако, чтобы запустить что-то в докере, нужно сначала запустить а) службу докера, и б) службу docker-composer
И это уже нехилый оверхед.
Ну не прекрасно ли это? Что имеют ввиду, когда говорят, что докер без оверхеда?
Как-то я не интересовался этим вопросом. А сейчас надо сделать стандартные оповещения (регистрация, сброс пароля и т.д.). Наткнулся на грабли: работоспособность smtp зависит от хрен пойми чего, постоянно отвал по таймауту. Решения вижу следующие:
Как это делается в нормальном продакте?
После того, как яндекс изъявил желание стать платным для корп клиентов, с нашей стороны было изъявлено желание развернуть свой почтовый сервер. Что сопсна на новогодних и было сделано. ПО - postfix+dovecot. Из web-интерфейса старый-добрый кубик (RoundCube) на nginx v.1.18, php v.7.4.33.
Результат проверки mail-tester показывает 10/10. Helocheck говорит что host mail.abuseat.org[54.93.50.35] said: 550 *** The HELO for IP address (IP нашего почтовика) was ‘mail.наш.домен’ (valid syntax) *** (in reply to RCPT TO command).
Все письма доставляются всем, за исключением:
В логах почта ходит нормально и ничего подозрительного нет. Единственное что основной наш домен, на котором крутится сайт example.com на IP 11.11.11.11, а почтовый сервер mail.example.com на IP 22.22.22.22, но соответствующая запись example.com MX на mail.example.com сделана.
Конфиг postfix’a
Конфиг Dovecot’a
iptables вдруг пригодится
Я не совсем понимаю куда ещё посмотреть. Где и что не так работает.
Раньше я просто запускал макось в виртуалке, коннектился по ссх потому что гуй не пердел и конпелировал под мак что мне было надо. Всё испортил этот их чип M1 и M2. И вот теперь я задумался по покупке Air 13.3 на M1 8/256 за 65тыр. Посмотрел бенчмарки, мой Ryzen 7 4800U уделывает мак во всех этих тестах, кроме видео. Хотя я ничего не монтирую и не обрабатываю, возможно там на дискретке можно всё делать. Ну и вот я в замешательстве, с одной стороны потихоньку все маководы перейдут на армы, с другой стороны я чувствую неуверенность. Возможно ли более-менее комфортно писать код на 13 дюймах? Хватит ли 8 гигов оперативы в ноутбуке, если даже в телефоне её больше? Подойдёт ли обычный nvme накопитель, которые у меня есть в запасе, или надо отдельно покупать «маковский» винт? Не будут ли мои исходники утекать прямиком к госдепу (куда же без паранойи)? Заодно опытные маководы дайте советы мудрые, на что обратить внимание при покупке, какие подводные камни.
день добрый.
кто как ведет версии в проекте (pom.xml) и в гите (теги)?
и самое интересное: как сделать так, чтобы они не разъезжались?
Ричард Столлман опубликовал электронную книгу «Введение и справочное руководство по GNU C».
Труд за авторством Столлмана, Трэвиса Ротвелла и Нэльсона Биба распространяется по лицензии GFDL-1.3 и позиционируется одновременно и как введениие в язык C, и как справочник непосредственно по диалекту GNU C (т.е. включающему gnu-расширения gcc).
RMS просит сообщать о найденных ошибках, неточностях и непонятных, либо неоднозначно написанных пассажах.
>>> Подробности
В свободное время попиливаю компилятор ЯП для разминки мозгов и чтобы не забыть ассемблер окончательно.
По семантике ЯП Си-подобный, по синтаксису больше похож на что-то из линейки Паскаль/Модула/Оберон.
За основу брал Context Хохлова, но перепилил практически все сорцы.
Компилятор многопроходный. Сначала строится синтаксическое дерево. Потом на нём выполняются некоторые простые оптимизации. Потом запускается бэкэнд. (Другой подход применён, например, в tcc
, где программа компилируется за один проход — ради скорости компиляции.)
Некоторые вещи вычисляются/оптимизируются сразу при парсинге. Например, логическое отрицание вообще не сохраняется в синтаксическое дерево, если может быть заменено на эквивалентную трансформацию отрицаемого выражения:
word Not(word P)
switch Node[P].ID of
case iOR: Node[P].ID = iAND; Not(Node[P].pLeft); Not(Node[P].pRight);
case iAND: Node[P].ID = iOR; Not(Node[P].pLeft); Not(Node[P].pRight);
case iXOR: Node[P].ID = iEQV;
case iEQV: Node[P].ID = iXOR;
case iLT: Node[P].ID = iGE;
case iLE: Node[P].ID = iGT;
case iEQ: Node[P].ID = iNE;
case iNE: Node[P].ID = iEQ;
case iGE: Node[P].ID = iLT;
case iGT: Node[P].ID = iLE;
default:
word P2 = Peek();
Node[P2].ID = iNOT;
Node[P2].pLeft = P;
return P2;
end:switch
return P;
end
Бэкэнд не строит промежуточного представления, на котором можно было бы гонять умные алгоритмы, соответственно 90% оптимизаций, описанных в «Книге дракона» невозможны. Пока я пытаюсь выжать максимум из компиляции на основе синтаксического дерева.
Ассемблерный листинг строится рекурсивным обходом дерева. При этом оптимизация осуществляется локально, в каждом отдельном узле, исходя только из информации доступной для узла и пары его дочерних элементов (или иногда — заглядывая чуть глубже).
Хочу показать, чего удалось добиться с этим подходом на примере компиляции арифметических выражений:
Оптимизация умножения на константу при помощи add
, shl
и lea
. Пример умножения на 15 при помощи lea
:
mov EAX, dword [EBP-24]
lea EAX, [EAX*2+EAX]
lea EAX, [EAX*4+EAX]
push EAX
call @10013
Компиляция выражения put_word(v100 * 18 + v1 * 27);
:
mov EAX, dword [EBP-24]
lea EAX, [EAX*8+EAX]
add EAX, EAX
mov EBX, dword [EBP-8]
lea EBX, [EBX*2+EBX]
lea EBX, [EBX*8+EBX]
add EAX, EBX
push EAX
call @10013
Здесь умножения заменены более оптимальными инструкциями и разумно распределены регистры.
Компиляция выражения word v500 = v2 * v100 + v3 * v100;
:
mov EAX, dword [EBP-12]
mul dword [EBP-24]
push EAX
mov EAX, dword [EBP-16]
mul dword [EBP-24]
pop EBX
add EAX, EBX
mov dword [EBP-32], EAX
Более оптимальным кодом был бы вариант:
mov EAX, dword [EBP-12]
mul dword [EBP-24]
mov EBX, EAX
mov EAX, dword [EBP-16]
mul dword [EBP-24]
add EAX, EBX
mov dword [EBP-32], EAX
Но компилятору в текущей реализации недоступна информация, потребуется ли EBX при вычислении второго слагаемого. Поэтому он сохраняет EAX на стек и затем восстанавливает оттуда значение в EBX уже после того как второе слагаемое вычислено.
Компиляция выражения put_word(v500 - v100 * v5);
:
mov EAX, dword [EBP-24]
mul dword [EBP-20]
mov EBX, dword [EBP-32]
xchg EAX, EBX
sub EAX, EBX
push EAX
call @10013
Компилятор требует от выражения результат во вполне определённом регистре. Поэтому столкнувшись с тем, что операнды оказались в обратном порядке, он вынужден вставлять лишний xchg
. Ситуацию можно решить, если разрешить выражению в ряде случаев свободно выбирать регистр для результата. Тогда код был бы таким:
mov EAX, dword [EBP-24]
mul dword [EBP-20]
mov EBX, dword [EBP-32]
sub EBX, EAX
push EBX
call @10013
Компиляция выражения put_word((v500 * 2 + v2) + (v200 & v1) + (v200 - 100) * 10 - 100 - v200 - v100);
:
mov EAX, dword [EBP-32]
add EAX, EAX
add EAX, dword [EBP-12]
mov EBX, dword [EBP-28]
and EBX, dword [EBP-8]
add EAX, EBX
mov EBX, dword [EBP-28]
sub EBX, 100
lea EBX, [EBX*4+EBX]
add EBX, EBX
add EAX, EBX
sub EAX, 100
sub EAX, dword [EBP-28]
sub EAX, dword [EBP-24]
push EAX
call @10013
Пример компиляции ветвлений для блока switch
(табличная реализация switch пока отсутствует) :
mov EAX, dword [@@DATA+EAX+7177840]
sub EAX, 0xD
je @11097
sub EAX, 0x3
je @11098
sub EAX, 0xFFFFFFFE
je @11099
dec EAX
je @11100
sub EAX, 0x5
je @11101
dec EAX
je @11102
dec EAX
je @11103
dec EAX
je @11104
dec EAX
je @11105
dec EAX
je @11106
jmp @11107
Пример переиспользования значения константы в регистре вместо загрузки другой константы:
word v0 = 0;
word v1 = 1;
word v2 = 2;
word v3 = 3;
word v5 = 5;
word v100 = 100;
word v200 = 200;
xor EAX, EAX
mov dword [EBP-4], EAX
inc EAX
mov dword [EBP-8], EAX
inc EAX
mov dword [EBP-12], EAX
inc EAX
mov dword [EBP-16], EAX
mov EAX, 5
mov dword [EBP-20], EAX
mov EAX, 100
mov dword [EBP-24], EAX
add EAX, EAX
mov dword [EBP-28], EAX
Сам компилятор полностью работоспособен, запускается в 32-разрядном режиме под виндой и линуксом и, в принципе, легко может быть портирован на другие ОС. Написан на самом себе (self-hosted) и частично обвешан тестами. Далее в планах научить его генерировать код для какой-нибудь другой системы команд. ARM, MIPS, RISC-V… что-то из этого.
Задавайте ваши вопросы.
Всем привет. Чёрт меня дёрнулся апгрейднуть десктоп, поставил себе 5 3600 на мать asrock b450 pro4. Работало-работало и фризануло. И так несколько раз, просто наглухо - ни sysrq, ни ctrl+alt+f1 - ничего не работает. Картинка на мониторах как была - так и осталась. Поспрашивал людей - сказали память(а у меня 4 планки), типа из-за частоты зависает. Ок, снизил частоту до 1933 вроде мгц. То же самое. Убираю 1 планку новую(на 3 раньше работало на athlon 200ge) - зависания. Думаю ну ок, может бп не тянет. Взял новый - поставил, всё то же самое. Фризит. Заметил что фризит когда активно на диски начинаю писать. Смотрю - а у меня на матери около чипсета и сата-портов какие-то разводы и окислилось что-то. Ну, подумал, кранты. Взял другую мать на 550 чипсете, сегодня поставил. Ну и что думаете? - всё опять зависло. Но проработало дольше, под полной нагрузкой на диски. Ну и тут уже ничего не осталось кроме проца(и харда нового, на самом деле, но я очень уж сомневаюсь что из-за харда так может вешаться система), полез гуглить - нашёл кучу ссылок ведущих на реддит, где люди жалуются на фризы при работе на 5 3600, ровно такие же как у меня, и чем лечить - непонятно.
Конфиг - gigabyte aorus elite v2, ryzen 5 3600, 4 планки памяти по 8гб какой-то амдшной, несколько ссд и пара хардов. Блок питания 700 ватт. Видео - gt 710. Драйвера нвидии 460.67 из buster-backports, ядро 5.10.0-0.bpo.5-amd64 тоже из buster-backports.
Помогите, люди добрые, уже не знаю чё делать, бегаю в магазин за комплектухой каждый день.
PS На athlon 200ge всё работало прекрасно годами, на этой матери и на старом бп. И на 3 планках памяти.
Если предполагается, что сайт будет иметь высокую нагрузку, например 10 тысяч пользователей, одновременно что-то комментирующих, открывающих, покупающих, ставящих лайки, – стоит ли делать отрисовку на сервере, если не обладаешь своим цодом а всего лишь vps?
Добрый день.
Что есть в наличии: ОС: Debian 10 CPU: AMD Ryzen 7 1700 Eight-Core Processor MotherBoard: Asus PRIME B350M-A Версия ядра: 4.19.0-13-amd64
Сервер используется как - файлопомойка и web сервер с 1С.
Проблема - есть совершенно рандомные зависания системы. Чаще ночью, бывает днем. Зависания почти каждый день. Подключиться по ssh невозможно, при подключении монитора «Черный экран, на клавиатуру не реагирует».
В журнале systemd последние записи каждый раз разные.В syslog тоже.
Что пытался делать:
Тестировал работу этой же задачи на Windows 10 - зависаний нет
Есть идеи? какие журналы можно включить чтобы понять что происходит? Может кто в курсе какие параметры при загрузке передать?
Насколько я знаю, нет простых способов ограничить свои траты. Если будет глюк вашего софта и он начнет качать терабайтами, или кто то получил доступ к вашему аккаунту- можно хорошо залететь. Надеяться на алармы тоже не стоит.
Поэтому должна быть лямбда функция и т.п, типа «если я превышаю свои квоты по трафику или уже понесенным затратам- вырубить все мои ресурсы в облаке.»
Можно конечно копать API биллинга и ресурсов, но вопросом этим наверняка многие интересовались, может есть готовое решение?
Брайан Керниган, разработчик ряда UNIX-утилит, а также автор классических трудов по языку программирования С и операционной системе UNIX, опубликовал свою новую книгу.
«UNIX: A History And A Memoir» это история UNIX через призму личных воспоминаний Кернигана. Она рассказывает о людях и событиях в Bell Labs, положивших начало самой значимой операционной системе и самому значимому языку программирования в истории.
>>> Приобрести книгу
Mozilla Thunderbird ждет большое обновление, в котором появится встроенное шифрование писем с помощью OpenPGP. Теперь можно отказаться от таких аддонов, как Enigmail и Mailvelope. Реализация шифрования основана на наработках аддона Enigmail, автор которого и помогает команде Mozilla в переносе функциональности в почтовый клиент.
Главным отличием станет то, что вместо использования внешней программы GnuPG, предлагается использование собственной реализации библиотеки OpenPGP.
Также предлагается собственное хранилище ключей, которое несовместимо с форматом файлов ключей GnuPG и защищается мастер-паролем, что используется для защиты аккаунтов и ключей S/MIME.
>>> Подробности
Janayugom — ежедневная газета издающаяся в штате Керала (Индия) на малаяламском языке и имеющая порядка 100,000 подписчиков.
Вплоть до недавнего времени они использовали проприетарный Adobe PageMaker, но возраст ПО (последний релиз был аж в 2001 году), а также отсутствие поддержки юникода подтолкнули руководство к поиску альтернатив.
( Продолжение )
>>> Подробности
Посоветуйте хорошую книгу по математике. Интересует мат. анализ и линейная алгебра. Чтоб нормы были, ряды, дифуры и т.д. Хочу чтобы формулы в документации к библиотекам для машинного обучения, шифрования или статистики выглядели знакомо. Математика в университете была, но если углубляться в определенные дисциплины, то чувствую, что не хватает. Например, ряды у нас, так получилось, вообще не преподавали. Несколько статей в интернете поправили ситуацию, но качество такого обучения оставляет желать лучшего. Книгу желательно на английском и написанную современным языком.
Я прочитал статьи про то зачем нужен докер, как на нём разворачивать простейшие приложения, но всё ещё не понимаю как я могу его использовать в своём проекте.
Мой стэк — Node.js/Express/TypeScript, MongoDB, RabbitMQ, nginx. Я бы вручную установил ОС, весь стэк, конфигурацию, и общую папку (чтобы не копировать файлы). При необходимости эмулировать продакшн — создал бы ещё один контейнер. Если бы у меня была macOS, то я бы использовал VirtualBox.
Но я до сих пор не понял что мне делать в Docker. Конкретно:
Отвеченные вопросы:
apt-install
— разве это уже не означает, что образ не иммутабелен? Ведь изменится версия библиотеки в репах — изменится и в твоём образе, разве нет?
FROM php:alpine-666
и чуть ниже RUN apt-install ...
. Это значит, что используемый образ из DockerHub — Ubuntu-based?
Спасибо!
Ребята из CERN выпустили веб-версию первого в мире Интернет-обозревателя WorldWideWeb. WorldWideWeb был разработан Тимоти Бернерс-Ли в ноябре 1990, в рамках его проекта известного нынче как World Wide Web.
На сайте проекта также доступна историческая справка и ссылка на репозиторий с исходным кодом.
>>> Подробности
Работа сайта http://search.cpan.org будет прекращена 25-го июня 2018 года.
Проект CPAN Search — это поисковая система для дистрибутивов, модулей, документов и идентификаторов CPAN. Грэм Барр (Graham Barr) создал сайт около двадцати лет назад (в начале 1999 года), который быстро стал неоценимым ресурсом для Perl-разработчиков во всём мире.
Возможность поиска в CPAN (Comprehensive Perl Archive Network — архив документации и программного обеспечения, написанного на языке программирования Perl) и чтения документации по модулям Perl в интернете помогла привлечь интерес большого количества разработчиков к языку программирования и создать сообщество Perl.
Первоначально сайт был размещён на единственном сервере Solaris Университетом Вашингтона (Washington University) в Сент-Луисе. За свою работу над search.cpan.org Грэм Барр был удостоен премии «Белый Верблюд» (White Camel) в 2002 году.
Позже сайт переместился в Perl NOC. Американские зеркала были размещены на серверах YellowBot и Phyber, европейское зеркало было доступно благодаря отдельным единомышленникам на протяжении последних десяти лет. Эти замечательные люди и компании привели сайт к успеху.
Однако в последние годы поддержка и техническое обслуживание стали обузой. Дело в том, что код большей части проекта написан на Perl времён 2005 года. К счастью, в настоящее время существует отличная жизнеспособная альтернатива — MetaCPAN.org. Команда MetaCPAN готовится к переходу и уже почти готова взять на себя лидерство.
Вскоре сообщение об изменениях появится на всех страницах search.cpan.org. А примерно через месяц весь трафик будет перенаправлен на эквивалентную страницу MetaCPAN.
Мы бы хотели поблагодарить всех, кто помог с этим проектом. Выражаем отдельную благодарность Грэму за его тяжёлый труд и неизменную поддержку проекта search.cpan.org на протяжении всех этих лет. Search.cpan.org, мы будем скучать по тебе!
После публикации новости возникла некоторая путаница в отношении того, будут ли продолжать работу существующие ссылки на search.cpan.org. Да, будут! Подавляющее большинство из них будет доступно посредством страниц MetaCPAN.org. Вам не нужно обновлять никакие ссылки прямо сейчас.
>>> Подробности
следующие → |