LINUX.ORG.RU
ФорумTalks

А что там система на PHP?

 ,


2

2

И правда, давно не писал как там дела у лучшего в мире DE дистра на PHP.

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

Из новенького

Решил пойти по пути наименьшего сопротивления, и остановиться на дистре.

Теперь понимаю этих дистроклепателей. Главная проблема в том, что пых — интерпретируемый язык, вдобавок должен быть собран со своими (точнее, моими) особыми модулями, и автоматизировать этот процесс мне не удалось. Все равно в зависимости от дистра — где-то депрекейтед, где-то доставьте libwnck, где-то gtksourceview3, еще и дистростроители никак не могут между собой договориться, как называть один и тот же пакет — короче не вариант.

Что касается самого DE

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

Почти полностью разобрался с треем через d-bus. Теперь оно не тормозит, проц не жрет. Вдобавок средствами PHP научился принудительно обесцвечивать иконки в серой палитре, или с красивыми стильными тенями. Выглядит почти прикольно, и не зависит от программы.

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

Облегчил док. Заметил по своим знакомым, что никто не перетаскивает иконки — они остаются на усмотрение системы. Так что перетаскивание убрал. Ну и остановился на индикации приложений в виде серой точки — закрыто, голубой точки — запущено, красной точки — требует внимания, голубой полоски — активно. Решил не нагромождать меню по ПКМ, а сделал два вида - основное по ПКМ, добавочное по shift+ПКМ. Например при ПКМ в меню есть опция «Закрыть», а в меню вызываемом shift+ПКМ, вместо нее «Закрыть принудительно».

С меню к сожалению получилось не все что я хотел. Хотел добавить туда возможность запускать программы от рута. Но из-за специфики PHP, а точнее вызова программы после программы (pkexec) либо меню закрывается только после завершения самой программы, либо pkexec не запускается вовсе. Городить костыли навроде передачи команды на запуск крутящемуся в фоне демону — не хочу. Зато теперь можно с меню добавлять в док, не запуская. Может чё еще добавлю.

Настройки

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

Внутря

Запилил демон настроек, который преобразует конфигурационный файл ДЕ в субконфигурации той или иной подсистемы. Кстати про настройки. Остановился на самом оптимальном и читаемом на мой взгляд формате — подобно HTML-теговому: <keyboard_layouts>us ru</keyboard_layouts>

Поскольку это все же PHP, т.е. может быть ненадежно, сделал лимит перезапусков DE чтобы не было бесконечных циклов, если 5 раз не вышло - запускается xterm.

Все-таки пересобрал xembedsniproxy — шняга которая конвертит программы со старого формата иксового трея, в новомодно-костыльный dbus-ный.

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

Ввел некоторые ключи производительности в само DE. Что-то типа «безопасного режима» что ли. С некоторыми ключами, эффекты отключаются, задержки между итерациями разных проверок увеличиваются, и в целом система адекватно насколько это возможно, работает на первом EeePC на одноядерном селероне 900 МГц и 2Гб ОЗУ.

На данный момент, будучи абсолютно работоспособной (хоть и не готовой в продакшен), система без учета иксов и прочих сопутствующих либ, занимает 3 мегабайта ОЗУ. Так-то. Исходный код, он же исполняемый код - занимает 700Кб. Абсолютно вся система, включая скомпиленный интерпретатор PHP и сырцы либ — 76 мегабайт на носителе.

В дистре это DE вместе со всеми необходимыми потрохами, я решил размещать в одной единственной директории в корне. Посему любые операции — удобны и делаются в обыкновенном ФМ без рисков положить систему.
Удалить: rm -rf /system.
Апгрейднуть: mv /system /system_old;mv ~Downloads/new_version /system.

Естественно дистр лайвовый — просто берется и запускается безо всякого геморроя.

Когда будет готово для скачивания?

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

https://ibb.co/ykj0cMV

https://ibb.co/RYWcsFL

★★★★★

Последнее исправление: hobbit (всего исправлений: 6)

Заметил по своим знакомым, что никто не перетаскивает иконки - они остаются на усмотрение системы. Так что перетаскивание убрал.

Да у нас тут гномер :D

HE_KOT
()

Поредактировал немного оформление, надеюсь, ТС не против.

/system

«После этой новости в плацкартах начался сущий кошмар».

Заметил по своим знакомым, что никто не перетаскивает иконки — они остаются на усмотрение системы. Так что перетаскивание убрал.

:(

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 1)
Ответ на: комментарий от hobbit

Заметил по своим знакомым, что никто не перетаскивает иконки — они остаются на усмотрение системы. Так что перетаскивание убрал.

Так изобрели Гном.

wandrien ★★
()


В дистре это DE вместе со всеми необходимыми потрохами, я решил размещать в одной единственной директории в корне. Посему любые операции — удобны и делаются в обыкновенном ФМ без рисков положить систему.
Удалить: rm -rf /system.
Апгрейднуть: mv /system /system_old;mv ~Downloads/new_version /system.


Ну есть же /opt и /usr/lib

Kolins ★★★★
()

Последний человек который писал на форум такие же длинные посты лежал в дурке на соседней кровати. Подумай об этом.

Tark ★★
()
Ответ на: комментарий от Bad_ptr

Вообще забавно наблюдать, что в ветке обсуждения php рано или поздно упомянут психушку

PPP328 ★★★★★
()
Ответ на: комментарий от Bad_ptr

раз на ЛОРе больше не появляется.

Или помер. Тоже причина уважительная.

wandrien ★★
()
Ответ на: комментарий от xwicked

Напишите дистряб на одинЭс!

На одинЭсе напишу что-нибудь другое, более интересное чем какое-то там ДЕ.

windows10 ★★★★★
() автор топика
Ответ на: комментарий от HE_KOT

Да у нас тут гномер :D

Будто это что-то плохое.

windows10 ★★★★★
() автор топика
Ответ на: комментарий от hobbit

Поредактировал немного оформление, надеюсь, ТС не против.

Не против, благодарю.

«После этой новости в плацкартах начался сущий кошмар».

Может и правда лучше в /opt запихнуть. В любом случае меняется это быстро.

windows10 ★★★★★
() автор топика
Ответ на: комментарий от wandrien

Норкоман. Увожаемое.

Виндузятники без этого не живут =)

windows10 ★★★★★
() автор топика
Ответ на: комментарий от Kolins

Ну есть же /opt и /usr/lib

Да. Посмотрю какие косяки будут в эксплуатации, и есличо, зашлю туда.

windows10 ★★★★★
() автор топика
Ответ на: комментарий от Tark

Последний человек который писал на форум такие же длинные посты лежал в дурке на соседней кровати. Подумай об этом.

Да, он тут рядом :)

windows10 ★★★★★
() автор топика
Ответ на: комментарий от Psilocybe

Надо ещё bash на php заменить

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

Хотя с учетом того что половина скрипта на баше, отсылка к внешним sed, awk, wc, bc и прочим - еще не понятно, кто в итоге жирнее.

windows10 ★★★★★
() автор топика
Ответ на: комментарий от windows10

Не, комментарии у тебя норм, но ты такой, я вам десять миллионов раз писал сообщения что я не сумасшедший, вы что там все того?

Tark ★★
()
Ответ на: комментарий от MOPKOBKA

Сочетание плоскоты и ужасного дизайна с градиентами из 2000х.

Ну вообще тут нет «дизайна» - дизайн берется из системной темы.

https://ibb.co/qNpRvNk - вот например другая тема.

И даже вот так: https://ibb.co/9svsFY8

Кстати фишку «принудительного оттенения» иконок я ввел именно чтобы не было как на последней картинке.

windows10 ★★★★★
() автор топика
Ответ на: комментарий от wandrien

Вот опровержение А что там система на PHP? (комментарий) ))

Полиполярочка-с.

В конце концов у кого еще спрашивать совета, в случае вопросов.

windows10 ★★★★★
() автор топика
Ответ на: комментарий от Xintrea

Ты бы еще спросил, зачем на php новый софт писать в 2024-м.

wandrien ★★
()
Ответ на: комментарий от Xintrea

А зачем тогда использовать синтаксис XML?

А где ты там увидел синтаксис XML?

windows10 ★★★★★
() автор топика
Ответ на: комментарий от windows10

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

Например значки на панели не кнопки, хотя кнопки в твоих темах явно есть, и они не просто плоские.

MOPKOBKA ★★★★★
()
Ответ на: комментарий от windows10

более интересное чем какое-то там ДЕ

Герои уже есть, нужно теперь DE.

xwicked ★★☆
()
Ответ на: комментарий от lovesan

зачем PHP? Или это такая специальная олимпиада по поеданию говна?

Потому что на нем все быстро пишется, изящно выглядит, шустро работает, на лету исправляется, очевидно конструируется, мало занимает места в памяти.

Proof of concept, короче говоря.

В конструировании программы, так или иначе используется биндинг системных фреймворков. Поэтому в данном случае ну ващщще монопенисуально, каким ЯП дергается та или иная функция glibc, gobject, gtk или xserver. А значит решающую роль играет семантика и парадигма ЯП, т.е. по факту его удобство.

Ну сорян что мне удобнее $str = $str1.$str2.$str3 чем лапша из strcat'ов. Сорян что мне удобнее сделать include какой-нибудь части прямо в рантайме, в зависимости от нужных мне условий.

Я вот сравниваю коды того что я уже написал с кодами того что выложено на гите в простейших вариантах. 300 строк моего кода vs ~2000 строк С-шного кода (мой плагин языковой раскладки vs LXDE плагин языковой раскладки). Так что поедание говна - это скорей расходовать клавиатуру об лишние телодвижения по написанию С-костылей.

Я ж надеюсь ты удержишься от рекомендации юзать имбецильный пистон, дубовый vala или ни дай боже наркоманский lisp?

windows10 ★★★★★
() автор топика
Последнее исправление: windows10 (всего исправлений: 1)
Ответ на: комментарий от windows10

php - один из самых имбецильных, дубовых и наркоманских языков вообще придуманных, с ним даже перл рядом не валялся, настолько он бессмысленно глупый и упоротый

ниче там удобного нет, если пробовал что-то кроме него, или опять же вообще пыхоплеяды

lovesan ★★
()
Ответ на: комментарий от lovesan

Или это такая специальная олимпиада по поеданию говна?

Ну, Лавсанчик, если ты уже наелся, дай и остальным попробовать: Пыхотред

EXL ★★★★★
()
Ответ на: комментарий от lovesan

php - один из самых имбецильных, дубовых и наркоманских языков вообще придуманных, с ним даже перл рядом не валялся, настолько он бессмысленно глупый и упоротый

Мне нет дела до твоих суеверий. Главное что все работает как часики.

ниче там удобного нет, если пробовал что-то кроме него, или опять же вообще пыхоплеяды

Я тебе написал парочку удобств, мог бы еще десяток примеров удобства накидать, но судя по первому абзацу, ты просто фоннатик с глупой аргументацией, поэтому воздержусь и соглашусь: да, да, PHP самый имбецильный, дубовый и наркоманский язык, поэтому фейсбук писан на перле, вк писан на лиспе, вордпресс с его 80% рынка так вообще на Rust.

Впрочем ты можешь запросто показать свои программы на своем любимом языке, такие ведь наверняка существуют, и это что-то явно посложнее калькулятора ;)

windows10 ★★★★★
() автор топика
Ответ на: комментарий от windows10

При чем тут сколько на нем написано? Вон в Индии, где полтора миллиарда человек, на минуточку, люди постоянно валяются в коровьих фекалиях - буквально причем, праздники у них там такие есть, да и вообще. И, значит, раз это делают 1.5 миллиарда, это тоже правильно? Вперед, валяйся в коровьем говне. Я как-то пас.

Мне нет дела до твоих суеверий. Главное что все работает как часики.

Это ты дристанул про то какой язык там «наркоманский».

Ну сорян что мне удобнее $str = $str1.$str2.$str3 чем лапша из strcat’ов.

Удобнее по сравнению с чем? С Си? Да Си это сраный ассемблер, ты нахера вообще с ним сравниваешь? Еще бы с машкодами сравнил. Это устаревший, и крайне низкоуровневый язык.

Я говорю, тебе не хватает кругозора, и если нравится метапрограммирование, то ты не туда зашел. Ты вместо лиспов, полез в какой-то гадюшник.

Впрочем ты можешь запросто показать свои программы на своем любимом языке, такие ведь наверняка существуют, и это что-то явно посложнее калькулятора ;)

У меня гитхаб есть, вон посмотри вот эту мою либу, например

https://github.com/Lovesan/bike/tree/master

там и примеры есть, что-нибудь типа такого

https://github.com/Lovesan/bike/blob/master/examples/wpf.lisp

lovesan ★★
()
Ответ на: комментарий от lovesan

А так ваш лисп может без лишней возни?

fopen("ftp://example.org/archive.rar", "r");
А так?
echo "Hello, ".htmlspecialchars($_GET['name']).'!';
А так?
new DateTime("last day of next month")
А так?
ssh2_scp_recv($con, "from", "to");
А так?
$zip->addFile("file.txt");
А так?
$n = $JSEngine_GoogleV8->executeString("return 10");
А документация с примерами есть? А настоящее IDE с отладчиком?

MOPKOBKA ★★★★★
()
Последнее исправление: MOPKOBKA (всего исправлений: 1)
Ответ на: комментарий от MOPKOBKA

Для всего есть библиотеки, я не знаю в чем проблема вообще, покажи лучше типа, может ли ваш PHP вот такое:

* (let ((tz [:TimeZoneInfo FindSystemTimeZoneById "US/Pacific"])
        (culture [:CultureInfo GetCultureInfo "ru-RU"]))
    [[:TimeZoneInfo ConvertTime [:DateTimeOffset %Now] tz] ToString "F" culture])
"четверг, 21 ноября 2024 г. 00:44:51"
*

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

lovesan ★★
()
Ответ на: комментарий от MOPKOBKA

А документация с примерами есть? А настоящее IDE с отладчиком?

Ну кстати да, и IDE получше многих. Щас вот до уровня интерактивности Emacs+SLIME только-только Visual Studio подтягивается, для C# вон, когда можно останавливать все в рантайме, и не перезапуская там что-то менять, тыкать, вот это всё.

И это VS, которая объективно самая навороченная IDE в мире.

А у пыха IDE ужасные, никаких плюсов по сравнению с тупым вимом или каким-нибудь саблаймом они особо не дают, разве что тормозят(ну типа как у JB).

lovesan ★★
()
Ответ на: комментарий от lovesan

кстати для zip-файлов я сам писал небольшую приблуду тут недавно, с использованием своей либы

(in-package #:cl-user)

(uiop:define-package #:zip
  (:use #:cl #:bike #:uiop)
  (:export #:make-zip-file))

(in-package #:zip)

(use-namespace '(System.IO.Compression System.IO))

(named-readtables:in-readtable bike-syntax)

(defun make-zip-file (out-filename in-file &rest in-files)
  (let ((files (mapcar (lambda (name) (pathname name))
                       (cons in-file in-files)))
        (outfile (native-namestring (pathname out-filename))))
    (with-disposables* ((out [:File Open outfile
                                    #e(FileMode Create)
                                    #e(FileAccess ReadWrite)])
                        (zip (new 'ZipArchive out #e(ZipArchiveMode Create) nil)))
      (loop :for file :in files
            :for native-namestring = (native-namestring file)
            :for ename = (native-namestring
                          (make-pathname* :name (pathname-name file)
                                          :type (pathname-type file)
                                          :directory '(:relative)))
            :for entry = [zip CreateEntry ename #e(CompressionLevel Optimal)] :do
              (with-disposables* ((in [:File OpenRead native-namestring])
                                  (estream [entry Open]))
                [in CopyTo estream])))
    (truename* outfile)))

создает плоский архив из нескольких файлов

lovesan ★★
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)