LINUX.ORG.RU

Избранные сообщения axle_nix

Линукс, ассемблер и X11

Статьи — Разработка
Линукс, ассемблер и X11

Это текстовая версия моей статьи про разработку графического приложения на чистом ассемблере под линукс.

( читать дальше... )

 , ,

alex0x08
()

Кто как делает бэкапы?

Форум — Admin

Имею минт, кажись, самый свежий. Бекапы делаю с помощью timeshift - скрытые системные файлы. ФС - ext4. Для этого завёл терабайтный hdd через переходник в USB (тоже, ext4).

Из-под винды делаю стандартными средствами - для этого у меня другой внешний USB-терабайтник, в NTFS. Ну, и всякая музыка, порнокино - копирую как есть на тот же самый USB-терабайтник, в NTFS.

А, да, бэкапы делаю как придётся, в среднем, раз в месяц.

Перемещено hobbit из general

 , , ,

tiinn
()

docker без overhead-a?

Форум — General

Везде слышу, что докер, дескать, не имеет никакого переголовы… тьфу, overhead-a.

Допустим. Однако, чтобы запустить что-то в докере, нужно сначала запустить а) службу докера, и б) службу docker-composer

И это уже нехилый оверхед.

Ну не прекрасно ли это? Что имеют ввиду, когда говорят, что докер без оверхеда?

 , ,

Kochergin
()

как рассылают почту на продакте?

Форум — Development

Как-то я не интересовался этим вопросом. А сейчас надо сделать стандартные оповещения (регистрация, сброс пароля и т.д.). Наткнулся на грабли: работоспособность smtp зависит от хрен пойми чего, постоянно отвал по таймауту. Решения вижу следующие:

  • поднять свой почтовый сервер (и забодать хостера, чтобы открыл порты)
  • перебирать smtp провайдеров, пока не найдётся нормальный
  • сервис с REST API (нашёл только зарубежные, заказчику не подходит)

Как это делается в нормальном продакте?

 

InterVi
()

Свой почтовый сервер. Некоторые спамфильтры нас не пропускают.

Форум — Admin

После того, как яндекс изъявил желание стать платным для корп клиентов, с нашей стороны было изъявлено желание развернуть свой почтовый сервер. Что сопсна на новогодних и было сделано. ПО - 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).
Все письма доставляются всем, за исключением:

  1. gmail, туда они попадают в спам, но доходят
  2. Почтовый сервер, где «прикручен» antispam.lotte.net, который возвращает 554 refused to talk to me.
  3. И почтовый сервер, у которого антиспам spamhaus. Там ребята выкладывают лог, что значение HELO нифига не наше, а вообще какие-то левые, буржуйские домены. Либо предлагают закрыть 25 порт, но тогда входящая почта встаёт колом.

В логах почта ходит нормально и ничего подозрительного нет. Единственное что основной наш домен, на котором крутится сайт 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 вдруг пригодится
Я не совсем понимаю куда ещё посмотреть. Где и что не так работает.

 ,

Shprot
()

Есть ли смысл покупать мак?

Форум — Talks

Раньше я просто запускал макось в виртуалке, коннектился по ссх потому что гуй не пердел и конпелировал под мак что мне было надо. Всё испортил этот их чип M1 и M2. И вот теперь я задумался по покупке Air 13.3 на M1 8/256 за 65тыр. Посмотрел бенчмарки, мой Ryzen 7 4800U уделывает мак во всех этих тестах, кроме видео. Хотя я ничего не монтирую и не обрабатываю, возможно там на дискретке можно всё делать. Ну и вот я в замешательстве, с одной стороны потихоньку все маководы перейдут на армы, с другой стороны я чувствую неуверенность. Возможно ли более-менее комфортно писать код на 13 дюймах? Хватит ли 8 гигов оперативы в ноутбуке, если даже в телефоне её больше? Подойдёт ли обычный nvme накопитель, которые у меня есть в запасе, или надо отдельно покупать «маковский» винт? Не будут ли мои исходники утекать прямиком к госдепу (куда же без паранойи)? Заодно опытные маководы дайте советы мудрые, на что обратить внимание при покупке, какие подводные камни.

 , , ,

dnb
()

ведение версий в проекте и в гите

Форум — Development

день добрый.

кто как ведет версии в проекте (pom.xml) и в гите (теги)?

и самое интересное: как сделать так, чтобы они не разъезжались?

 ,

Rastafarra
()

Ричард Столлман опубликовал «Введение в GNU C»

Новости — Разработка
Ричард Столлман опубликовал «Введение в GNU C»
Группа Разработка

Ричард Столлман опубликовал электронную книгу «Введение и справочное руководство по GNU C».

Труд за авторством Столлмана, Трэвиса Ротвелла и Нэльсона Биба распространяется по лицензии GFDL-1.3 и позиционируется одновременно и как введениие в язык C, и как справочник непосредственно по диалекту GNU C (т.е. включающему gnu-расширения gcc).

RMS просит сообщать о найденных ошибках, неточностях и непонятных, либо неоднозначно написанных пассажах.

>>> Подробности

 , , , ,

Quote
()

Отлаживаю кодогенератор

Форум — Development

В свободное время попиливаю компилятор ЯП для разминки мозгов и чтобы не забыть ассемблер окончательно.

По семантике ЯП Си-подобный, по синтаксису больше похож на что-то из линейки Паскаль/Модула/Оберон.

За основу брал 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… что-то из этого.

Задавайте ваши вопросы.

 , ,

wandrien
()

Кто у нас тут с ryzen 5 3600?

Форум — Linux-hardware

Всем привет. Чёрт меня дёрнулся апгрейднуть десктоп, поставил себе 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 планках памяти.

 , , ,

proveryam
()

Отрисовка на стороне сервера (SSR) — За/Против?

Форум — Web-development

Если предполагается, что сайт будет иметь высокую нагрузку, например 10 тысяч пользователей, одновременно что-то комментирующих, открывающих, покупающих, ставящих лайки, – стоит ли делать отрисовку на сервере, если не обладаешь своим цодом а всего лишь vps?

 , ,

shiva
()

Добрый день, помогите побороть рандомные зависания AMD Ryzen 7 1700 на Debian 10

Форум — Linux-hardware

Добрый день.

Что есть в наличии: ОС: 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 тоже.

Что пытался делать:

  • Обновление BIOS - не помогло
  • Memtest - ошибок нет
  • параметры загрузки grub «processor.max_cstate=5 idle=nomwait rcu_nocbs=0-15 noiswmd» - не влияют никак

Тестировал работу этой же задачи на Windows 10 - зависаний нет

Есть идеи? какие журналы можно включить чтобы понять что происходит? Может кто в курсе какие параметры при загрузке передать?

 , ,

vsafonin
()

Как не дать уйти в бесконечность своим тратам на облачных провайдерах типа AWS?

Форум — General

Насколько я знаю, нет простых способов ограничить свои траты. Если будет глюк вашего софта и он начнет качать терабайтами, или кто то получил доступ к вашему аккаунту- можно хорошо залететь. Надеяться на алармы тоже не стоит.

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

Можно конечно копать API биллинга и ресурсов, но вопросом этим наверняка многие интересовались, может есть готовое решение?

 , , , ,

Tvorog
()

Вышла книга Брайана Кернигана «UNIX: A History And A Memoir»

Новости — Linux General
Вышла книга Брайана Кернигана «UNIX: A History And A Memoir»
Группа Linux General

Брайан Керниган, разработчик ряда UNIX-утилит, а также автор классических трудов по языку программирования С и операционной системе UNIX, опубликовал свою новую книгу.

«UNIX: A History And A Memoir» это история UNIX через призму личных воспоминаний Кернигана. Она рассказывает о людях и событиях в Bell Labs, положивших начало самой значимой операционной системе и самому значимому языку программирования в истории.

>>> Приобрести книгу

 , , , ,

torvn77
()

В Mozilla Thunderbird появится поддержка шифрования OpenPGP

Новости — Mozilla
Группа Mozilla

Mozilla Thunderbird ждет большое обновление, в котором появится встроенное шифрование писем с помощью OpenPGP. Теперь можно отказаться от таких аддонов, как Enigmail и Mailvelope. Реализация шифрования основана на наработках аддона Enigmail, автор которого и помогает команде Mozilla в переносе функциональности в почтовый клиент.

Главным отличием станет то, что вместо использования внешней программы GnuPG, предлагается использование собственной реализации библиотеки OpenPGP.

Также предлагается собственное хранилище ключей, которое несовместимо с форматом файлов ключей GnuPG и защищается мастер-паролем, что используется для защиты аккаунтов и ключей S/MIME.

>>> Подробности

 , , , ,

fail2ban
()

Janayugom - первая в мире газета, полностью перешедшая на открытое ПО

Новости — Open Source
Группа Open Source

Janayugom — ежедневная газета издающаяся в штате Керала (Индия) на малаяламском языке и имеющая порядка 100,000 подписчиков.

Вплоть до недавнего времени они использовали проприетарный Adobe PageMaker, но возраст ПО (последний релиз был аж в 2001 году), а также отсутствие поддержки юникода подтолкнули руководство к поиску альтернатив.

( Продолжение )

>>> Подробности

 newspaper, , ,

loz
()

Книга по матану

Форум — General

Посоветуйте хорошую книгу по математике. Интересует мат. анализ и линейная алгебра. Чтоб нормы были, ряды, дифуры и т.д. Хочу чтобы формулы в документации к библиотекам для машинного обучения, шифрования или статистики выглядели знакомо. Математика в университете была, но если углубляться в определенные дисциплины, то чувствую, что не хватает. Например, ряды у нас, так получилось, вообще не преподавали. Несколько статей в интернете поправили ситуацию, но качество такого обучения оставляет желать лучшего. Книгу желательно на английском и написанную современным языком.

 , , , ,

Rot1
()

Объясните как работать с Docker

Форум — Development

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

Мой стэк — Node.js/Express/TypeScript, MongoDB, RabbitMQ, nginx. Я бы вручную установил ОС, весь стэк, конфигурацию, и общую папку (чтобы не копировать файлы). При необходимости эмулировать продакшн — создал бы ещё один контейнер. Если бы у меня была macOS, то я бы использовал VirtualBox.

Но я до сих пор не понял что мне делать в Docker. Конкретно:

  • Ой. Мой список вопросов закончился :)

Отвеченные вопросы:

  • Мой главный вопрос — что мне вообще делать с вашим докером? Работать как с виртуалкой?
    • Ответ: 1
  • Мне нужно все этапы установки, которые я выполнял при ручном создании контейнера, перенести в Dockerfile/docker-compose?
  • Зачем нужен DockerHub, если можно выбрать ОС и самому установить нужный софт?
    • Ответ: нужно понимать в чём смысл докера, тогда эти вопросы отпадают. Во многих гайдах упускают тот момент, что вы не должны создать единый образ, который содержит всё, а должны все процессы поместить в отдельные контейнеры. Например, приложение на Node.js и сервер MongoDB должны быть в разных контейнерах. В Docker это называется сервисами
  • Я в некоторых Dockerfile видел apt-install — разве это уже не означает, что образ не иммутабелен? Ведь изменится версия библиотеки в репах — изменится и в твоём образе, разве нет?
    • Ответ: 1
  • Я вижу как в очередном Dockerfile пишут FROM php:alpine-666 и чуть ниже RUN apt-install .... Это значит, что используемый образ из DockerHub — Ubuntu-based?
    • Ответ: образы в DockerHub действительно базируются на какой-то ОС. Причём не всегда очевидно на какой.

Спасибо!

 ,

elonmusk
()

Доступна web-версия первого Интернет-обозревателя.

Новости — Интернет
Доступна web-версия первого Интернет-обозревателя.
Группа Интернет

Ребята из CERN выпустили веб-версию первого в мире Интернет-обозревателя WorldWideWeb. WorldWideWeb был разработан Тимоти Бернерс-Ли в ноябре 1990, в рамках его проекта известного нынче как World Wide Web.

На сайте проекта также доступна историческая справка и ссылка на репозиторий с исходным кодом.

>>> Подробности

 

urxvt
()

Конец эпохи: Прощание с проектом search.cpan.org

Новости — Разработка
Группа Разработка

Работа сайта 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. Вам не нужно обновлять никакие ссылки прямо сейчас.

>>> Подробности

 , , ,

das_tier
()