LINUX.ORG.RU

Сообщения dadd

 

Новый шрифт для кода и терминала

Галерея — Скриншоты

Зацените экспериментальный шрифт, сделанный на основе B612 mono и PT mono (шрифт рассчитан на использование со slight hinting).

>>> Просмотр (1440x900, 110 Kb)

 

dadd
()

Иксы и C++ vs wayland и Rust

Форум — Talks

А вам не кажется, что C++ — это аналог иксов в области языков программирования? Основные выпады в сторону иксов применимы и к плюсам. Иксы и С++ появились примерно в одно и то же время, в середине 80-х. За это время обросли кучей всего. Как и с иксами, никто уже не понимает полностью того, как работает С++ (говорят, даже Страуструп!). Как и с иксами, известные/заслуженные плюсовики переметнулись на другие языки и даже их активно развивают (привет, Александреску!). Как и иксы, С++ небезопасен, а вот rust безопасен (возьмём rust как wayland). Что там ещё? Аналог иксового тиринга — отсутствие модулей в плюсах. Погодите, модули же вроде как завезли, ну так и в иксах есть убирающие тиринг опции типа «TearFree», но кого это волнует? Вообще, недостатки С++, которые решил тот же rust, можно долго перечислять. Понятное дело, что С++ насовсем ещё долго не исчезнет, ну так и в вайланде есть Xwayland для легаси.

Итого, сейчас за С++ топят только луддиты. Все на rust! Доказано?

 

dadd
()

Доступен язык программирования Hare

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

Впервые представлен широкой публике язык программирования Hare, который разрабатывает Дрю ДеВолт (автор Sway и SourceHut) со своей командой последние пару лет.
Hare — язык для системного программирования с минималистичным рантаймом, статической типизацией и ручным управлением памятью.

Исходный код компилятора предоставляется под лицензией GPLv3, а для стандартной библиотеки под лицензией MPL (Mozilla Public License). Компилятор Hare не основан на LLVM или GCC, а использует легковесный qbe. Программы на Hare не линкуются с libc по умолчанию.

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

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

 hare, ,

dadd
()

Куда ведёт плоскота

Форум — Talks

Помните недавнюю новость по атаку https://www.opennet.ru/opennews/art.shtml?num=56889, в которой использовалась похожесть интерфейса?

Видно, что плоскота внешне практически нивелирует разницу между веб-интерфейсом и десктопным.
Вообще, почему плоскота интерфейсов опять стала популярной? Может, вы думали, это просто мода, которая быстро пройдёт? Нет, не дождётесь! Вы когда-нибудь задавались вопросом, зачем доминирующим корпорациями понадобилось насаждать эту «моду»? Кто-то говорит, что так красивее и проги становятся «легковеснее». Сомнительно. Многие считают как раз наоборот. По-моему, это делается для того, чтобы все побольше привыкали запускать работающий из веба софт вместо оффлайнового (так как вебня преимущественно плоская, то подгоняют декстопное под веб, а не наоборот, ведь подгонять под примитивное легче). В итоге сделать так, чтобы оффлайнового софта у пользователей вообще не было. Всё в каком-нибудь «облаке» корпорации или типа того. Прикиньте, к каким последствиям в таких условиях привёл бы внезапный уход/блокировка со стороны этих корпораций. Тут ещё можно было бы порассуждать про зонды и про то, что это идёт вразрез со свободным софтом, который считается таковым, если обладает четырьмя важнейшими свободами https://www.gnu.org/philosophy/free-sw.ru.html

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

 ,

dadd
()

Почему старое железо может быть быстрее нового

Форум — Talks

Наверняка многие из вас негодуют по поводу разжиревшего софта (или читали от других об этом, типа такого https://tonsky.me/blog/disenchantment/ru/ ). Одобряющие же постоянно растущую жручесть софта говорят так: «зачем беспокоиться, компьютеры достаточно быстрые». То есть предпочитают докупить железа и пользоваться bloatware вместо того, чтобы поддерживать эффективный софт. При этом bloatware, зачастую, не только не даёт новых полезных возможностей для пользователя, но лишает и тех, что были ранее.

Последнее время популярна тема импортозамещения, и тут меня осенило: а ведь когда сравнивают всякие «устаревшие» эльбрусы на реальных (типичных) пользовательских задачах, то ориентируются-то на bloatware! Это значит, какое бы крутое железо не было, оно будет считаться неустаревшим очень короткий срок, ибо прожорливый софт сведёт все наработки на нет. Очевидно, при правильном подходе к софту компьютер уровня Пентиум 3 (привет Столярову!) будет работать эффективнее новейших многоядерников, напичканных bloatware!

Та же хрень с браузерами. Часто попадаются возгласы, что нормальный браузер написать невозможно, потому что нужно обязательно поддерживать кучу «стандартов». Выходит новая версия файрфокса с бенчмарками под bloatware-сайты типа фейсбука и гмэйла. Ну так вам никогда не угнаться за браузером с такими стандартами! Но зачем это поддерживать?

 ,

dadd
()

Странное поведение xbps-src

Форум — General

Есть такой шаблон для сборки:

# Template file for 'mtn'
pkgname=mtn
version=3.4.1
revision=1
wrksrc="mtn-v${version}/src"
makedepends="gd-devel ffmpeg-devel"
short_desc="mtn"
maintainer="none"
license="GPL2"
homepage="https://gitlab.com/movie_thumbnailer/mtn"
distfiles="https://gitlab.com/movie_thumbnailer/mtn/-/archive/v3.4.1/mtn-v${version}.tar.bz2"
checksum=d9b0154d6c7a9d2a5fc9c38e3ccd99689a5f5422caae70558181e12f0b5a3c0b

do_build() {
  make
}

do_install() {
  make PREFIX=/usr DESTDIR=${DESTDIR} install
}

Когда делаю xbps-src pkg mtn, то начинается предварительная сборка из исходников самого ffmpeg вместо того, чтобы подтянуть пакеты ffmpeg и ffmpeg-devel, которые уже собраны в репах. Зачем лишний раз пересобирается? Или это только у меня такое?
Ещё подобное было, когда пакет git был в зависимостях (тоже начиналась его сборка из исходников, хотя в репах он есть).

 

dadd
()

Многозадачность

Форум — Talks

Был такой ученый https://en.wikipedia.org/wiki/Clifford_Nass, который изучал многозадачность у людей. Как влияет на когнитивные способности одновременное использование нескольких информационных потоков https://en.wikipedia.org/wiki/Media_multitasking и частое переключение между ними. Вывод неутешителен – многозадачность отупляет.

Вот его интервью https://web.archive.org/web/20190209124009/https://www.pbs.org/wgbh/pages/frontline/digitalnation/interviews/nass.html
Вот научная статья https://www.jstor.org/stable/40484765

С отвлекающими медиа (чатами, почтой, форумами, соцсетями, «фоновым» видео и пр.) все понятно. А в плане интерфейсов выводы можно сделать такие:

  • Тайлинг отупляет создаёт лишнюю когнитивную нагрузку.
  • Постоянно находящиеся на виду conky или куча всяких индикаторов на панели задач – тоже.
  • В идеале, на рабочем экране должно отображаться только самое необходимое. А всякие индикаторы нужно вызывать, когда они действительно нужны (по хоткею, например). Автоскрытие панели задач во многих оконных менеджерах – правильная фича (кстати, кто её впервые придумал?).

 ,

dadd
()

FyneDesk DE

Галерея — Скриншоты

Запустил тут в виртуалке новое DE под названием FyneDesk, которое написано на тулките fyne.

Там уже есть свои: эмулятор терминала, калькулятор, редактор изображений, дисплейный менеджер и прочее https://github.com/fyne-io

Как видно, все в зачаточном состоянии, но перспектива есть.
Ну и до кучи запущена OpenDiablo2 https://github.com/OpenDiablo2/OpenDiablo2

>>> Просмотр (1920x1080, 332 Kb)

 , fyne,

dadd
()

Глобальное потепление климата

Форум — Science & Engineering

Есть ли тут те, кто отрицает влияние антропогенного фактора на глобальное потепление климата? Ознакомьтесь с научной точкой зрения:
https://theins.ru/obshestvo/196848
https://theins.ru/obshestvo/198532

 

dadd
()

Встречайте очередную замену Си

Форум — Talks

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

https://drewdevault.com/2021/03/19/A-new-systems-language.html

use io;

export fn main() void = {
	const greetings = [
		"Hello, world!",
		"¡Hola Mundo!",
		"Γειά σου Κόσμε!",
		"Привет мир!",
		"こんにちは世界!",
	];
	for (let i = 0z; i < len(greetings); i += 1) {
		io::println(greetings[i]);
	};
};

По сравнению с Си:

  • More robust error handling via tagged unions
  • Improved, Unicode-aware string support
  • Memory safe array, slice, and pointer types (and unsafe versions, if needed)
  • Direct compatibility with the C ABI for trivial C interop
  • A simpler, context-free, expression-oriented syntax
  • A standard library free of the constraints of POSIX or the C standard

 ,

dadd
()

trango

Форум — Talks

В связи с релизом transmission 3.0, где добавлена поддержка меток (категорий), представляю вашему вниманию tui для transmission-daemon, в котором задействована эта фича.

Сам успешно пользуюсь им с прошлого года.
Системную ассоциацию для открытия торрент-файлов на такой скрипт повесил:

#!/bin/bash
xterm -e torrent_open "$1" "$2" "$3" "$4"

примерное содержимое torrent_open:

#!/bin/bash

if [ -z "$1" ]; then exit 1; fi

TORRENT_FILE="$1"
SAVE_PATH=""
CATEGORY="Default"
START_KEY=""

if ! [ -z "$2" ]; then SAVE_PATH="$2"; fi
if ! [ -z "$3" ]; then CATEGORY="$3"; fi
if ! [ -z "$4" ]; then START_KEY="-start"; fi

if echo "$TORRENT_FILE" | grep -q rutracker; then
# в зависимости от имени торрент-файла
    SAVE_PATH="/media/music"
    CATEGORY="music"    
elif trango -add "$TORRENT_FILE" -trackers | grep -q new; then
# в зависимости от имени трекера в торрент-файле
    SAVE_PATH="/media/music/new"
    CATEGORY="music_new"
fi

trango -dialog -add "$TORRENT_FILE" -dir "$SAVE_PATH" -category "$CATEGORY" "$START_KEY" || read -s -n 1 -p 'Press any key to continue . . .'

Enjoy!

 ,

dadd
()

Самые обсуждаемые темы LOR'a

Форум — Talks

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

Короче, здесь представлена десятка самых обсуждаемых тем на LOR’e (отсортированных в порядке убывания) по каждому из следующих разделов: новости, talks, development. За все годы и месяцы.

Например, за апрель 2003: https://takiz.github.io/lor-stats/2003/4.html

 ,

dadd
()

Real Programmers Don't Use PASCAL

Форум — Talks

Как сопротивлялись паскалю, когда он ещё только набирал популярность?

Читаем текст 1982 года, переведённый на русский: http://lib.ru/ANEKDOTY/non_pas.txt

А про Си аналогичное есть? Наверняка же во времена его появления не все принимали его с распростёртыми объятиями.

 ,

dadd
()

Человекочитаемые размеры в Midnight Commander

Форум — General

https://midnight-commander.org/ticket/3165
Интересно, почему этот патч не приняли?

Я его адаптировал для современной версии mc:

diff -rU 3 a/lib/util.c b/lib/util.c
--- a/lib/util.c	2019-10-13 18:40:47.000000000 +0000
+++ b/lib/util.c	2019-11-08 14:56:06.000000000 +0000
@@ -415,7 +415,8 @@
  */
 
 void
-size_trunc_len (char *buffer, unsigned int len, uintmax_t size, int units, gboolean use_si)
+size_trunc_len (char *buffer, unsigned int len, uintmax_t size, int units, gboolean use_si,
+                gboolean human_readable)
 {
     /* Avoid taking power for every file.  */
     /* *INDENT-OFF* */
@@ -456,6 +457,8 @@
     static const char *const suffix_lc[] = { "", "k", "m", "g", "t", "p", "e", "z", "y", NULL };
 
     const char *const *sfx = use_si ? suffix_lc : suffix;
+    unsigned base = use_si ? 1000 : 1024;
+    unsigned human_digits;
     int j = 0;
 
     if (len == 0)
@@ -486,6 +489,9 @@
             size += size_remain;        /* Re-add remainder lost by division/multiplication */
         }
 
+    if (human_readable && len < 5)
+        human_readable = FALSE; /* Human readable form needs 5 characters */
+
     for (j = units; sfx[j] != NULL; j++)
     {
         if (size == 0)
@@ -503,11 +509,28 @@
             break;
         }
 
-        if (size < power10[len - (j > 0 ? 1 : 0)])
+#define DIV_ROUND(a, b) (((a) + ((b)/2))/(b))
+        if ((!human_readable && size < power10[len - (j > 0 ? 1 : 0)]) ||
+            (human_readable && size < 1000))
+         {
+             g_snprintf (buffer, len + 1, "%" PRIuMAX "%s", size, sfx[j]);
+             break;
+         }
+        else if (human_readable && DIV_ROUND (size, 10) < base && sfx[j + 1])
+        {
+            human_digits = DIV_ROUND (size, 10) * 1000 / base;  /* 0 - 999 */
+            g_snprintf (buffer, len + 1, "%u.%02u%s",
+                        human_digits / 100, human_digits % 100, sfx[j + 1]);
+            break;
+        }
+        else if (human_readable && DIV_ROUND (size, 100) < base && sfx[j + 1])
         {
-            g_snprintf (buffer, len + 1, "%" PRIuMAX "%s", size, sfx[j]);
+            human_digits = DIV_ROUND (size, 100) * 1000 / base; /* 0 - 999 */
+            g_snprintf (buffer, len + 1, "%u.%01u%s",
+                        human_digits / 10, human_digits % 10, sfx[j + 1]);
             break;
         }
+#undef DIV_ROUND
 
         /* Powers of 1000 or 1024, with rounding.  */
         if (use_si)
diff -rU 3 a/lib/util.h b/lib/util.h
--- a/lib/util.h	2019-10-13 18:40:47.000000000 +0000
+++ b/lib/util.h	2019-11-08 14:57:06.000000000 +0000
@@ -154,7 +154,7 @@
  * not including trailing 0. BUFFER should be at least LEN+1 long.
  *
  * Units: size units (0=bytes, 1=Kbytes, 2=Mbytes, etc.) */
-void size_trunc_len (char *buffer, unsigned int len, uintmax_t size, int units, gboolean use_si);
+void size_trunc_len (char *buffer, unsigned int len, uintmax_t size, int units, gboolean use_si, gboolean human_readable);
 const char *string_perm (mode_t mode_bits);
 
 const char *extension (const char *);
diff -rU 3 a/src/filemanager/boxes.c b/src/filemanager/boxes.c
--- a/src/filemanager/boxes.c	2019-10-13 18:40:47.000000000 +0000
+++ b/src/filemanager/boxes.c	2019-11-08 14:57:59.000000000 +0000
@@ -646,6 +646,7 @@
                 QUICK_START_GROUPBOX (N_("Main options")),
                     QUICK_CHECKBOX (N_("Show mi&ni-status"), &panels_options.show_mini_info, NULL),
                     QUICK_CHECKBOX (N_("Use SI si&ze units"), &panels_options.kilobyte_si, NULL),
+                    QUICK_CHECKBOX (N_("Human readable &size"), &panels_options.human_readable, NULL),
                     QUICK_CHECKBOX (N_("Mi&x all files"), &panels_options.mix_all_files, NULL),
                     QUICK_CHECKBOX (N_("Show &backup files"), &panels_options.show_backups, NULL),
                     QUICK_CHECKBOX (N_("Show &hidden files"), &panels_options.show_dot_files, NULL),
diff -rU 3 a/src/filemanager/chown.c b/src/filemanager/chown.c
--- a/src/filemanager/chown.c	2019-10-13 18:40:47.000000000 +0000
+++ b/src/filemanager/chown.c	2019-11-08 14:58:34.000000000 +0000
@@ -438,7 +438,7 @@
         chown_label (0, str_trunc (fname, GW - 4));
         chown_label (1, str_trunc (get_owner (sf_stat.st_uid), GW - 4));
         chown_label (2, str_trunc (get_group (sf_stat.st_gid), GW - 4));
-        size_trunc_len (buffer, GW - 4, sf_stat.st_size, 0, panels_options.kilobyte_si);
+        size_trunc_len (buffer, GW - 4, sf_stat.st_size, 0, panels_options.kilobyte_si, panels_options.human_readable);
         chown_label (3, buffer);
         chown_label (4, string_perm (sf_stat.st_mode));
 
diff -rU 3 a/src/filemanager/filegui.c b/src/filemanager/filegui.c
--- a/src/filemanager/filegui.c	2019-10-13 18:40:47.000000000 +0000
+++ b/src/filemanager/filegui.c	2019-11-08 15:03:18.000000000 +0000
@@ -524,7 +524,7 @@
     vfs_path_free (p);
     g_free (s1);
     /* new file size */
-    size_trunc_len (s2, sizeof (s2), ui->src_stat->st_size, 0, panels_options.kilobyte_si);
+    size_trunc_len (s2, sizeof (s2), ui->src_stat->st_size, 0, panels_options.kilobyte_si, panels_options.human_readable);
     NEW_LABEL (2, s2);
     /* new file modification date & time */
     s1 = (char *) file_date (ui->src_stat->st_mtime);
@@ -539,7 +539,7 @@
     vfs_path_free (p);
     g_free (s1);
     /* existing file size */
-    size_trunc_len (s2, sizeof (s2), ui->dst_stat->st_size, 0, panels_options.kilobyte_si);
+    size_trunc_len (s2, sizeof (s2), ui->dst_stat->st_size, 0, panels_options.kilobyte_si, panels_options.human_readable);
     NEW_LABEL (6, s2);
     /* existing file modification date & time */
     s1 = (char *) file_date (ui->dst_stat->st_mtime);
@@ -1090,13 +1090,13 @@
 
     if (ui->total_bytes_label != NULL)
     {
-        size_trunc_len (buffer2, 5, tctx->copied_bytes, 0, panels_options.kilobyte_si);
+        size_trunc_len (buffer2, 5, tctx->copied_bytes, 0, panels_options.kilobyte_si, panels_options.human_readable);
 
         if (!ctx->progress_totals_computed)
             g_snprintf (buffer, sizeof (buffer), _(" Total: %s "), buffer2);
         else
         {
-            size_trunc_len (buffer3, 5, ctx->progress_bytes, 0, panels_options.kilobyte_si);
+            size_trunc_len (buffer3, 5, ctx->progress_bytes, 0, panels_options.kilobyte_si, panels_options.human_readable);
             g_snprintf (buffer, sizeof (buffer), _(" Total: %s/%s "), buffer2, buffer3);
         }
 
diff -rU 3 a/src/filemanager/info.c b/src/filemanager/info.c
--- a/src/filemanager/info.c	2019-10-13 18:40:47.000000000 +0000
+++ b/src/filemanager/info.c	2019-11-08 15:03:49.000000000 +0000
@@ -178,8 +178,8 @@
         {
             char buffer1[6], buffer2[6];
 
-            size_trunc_len (buffer1, 5, myfs_stats.avail, 1, panels_options.kilobyte_si);
-            size_trunc_len (buffer2, 5, myfs_stats.total, 1, panels_options.kilobyte_si);
+            size_trunc_len (buffer1, 5, myfs_stats.avail, 1, panels_options.kilobyte_si, panels_options.human_readable);
+            size_trunc_len (buffer2, 5, myfs_stats.total, 1, panels_options.kilobyte_si, panels_options.human_readable);
             tty_printf (_("Free space: %s/%s (%d%%)"), buffer1, buffer2,
                         myfs_stats.total == 0 ? 0 :
                         (int) (100 * (long double) myfs_stats.avail / myfs_stats.total));
@@ -237,7 +237,7 @@
 #endif
         {
             char buffer[10];
-            size_trunc_len (buffer, 9, st.st_size, 0, panels_options.kilobyte_si);
+            size_trunc_len (buffer, 9, st.st_size, 0, panels_options.kilobyte_si, panels_options.human_readable);
             tty_printf (_("Size:       %s"), buffer);
 #ifdef HAVE_STRUCT_STAT_ST_BLOCKS
             tty_printf (ngettext (" (%lu block)", " (%lu blocks)",
diff -rU 3 a/src/filemanager/panel.c b/src/filemanager/panel.c
--- a/src/filemanager/panel.c	2019-10-13 18:40:47.000000000 +0000
+++ b/src/filemanager/panel.c	2019-11-08 15:04:16.000000000 +0000
@@ -515,7 +515,7 @@
         format_device_number (buffer, len + 1, fe->st.st_rdev);
     else
 #endif
-        size_trunc_len (buffer, (unsigned int) len, fe->st.st_size, 0, panels_options.kilobyte_si);
+        size_trunc_len (buffer, (unsigned int) len, fe->st.st_size, 0, panels_options.kilobyte_si, panels_options.human_readable);
 
     return buffer;
 }
@@ -1157,9 +1157,9 @@
         char buffer1[6], buffer2[6], tmp[BUF_SMALL];
 
         size_trunc_len (buffer1, sizeof (buffer1) - 1, myfs_stats.avail, 1,
-                        panels_options.kilobyte_si);
+                        panels_options.kilobyte_si, panels_options.human_readable);
         size_trunc_len (buffer2, sizeof (buffer2) - 1, myfs_stats.total, 1,
-                        panels_options.kilobyte_si);
+                        panels_options.kilobyte_si, panels_options.human_readable);
         g_snprintf (tmp, sizeof (tmp), " %s/%s (%d%%) ", buffer1, buffer2,
                     myfs_stats.total == 0 ? 0 :
                     (int) (100 * (long double) myfs_stats.avail / myfs_stats.total));
diff -rU 3 a/src/setup.c b/src/setup.c
--- a/src/setup.c	2019-10-13 18:40:47.000000000 +0000
+++ b/src/setup.c	2019-11-08 18:25:32.000000000 +0000
@@ -131,6 +131,7 @@
 panels_options_t panels_options = {
     .show_mini_info = TRUE,
     .kilobyte_si = FALSE,
+    .human_readable = FALSE,
     .mix_all_files = FALSE,
     .show_backups = TRUE,
     .show_dot_files = TRUE,
@@ -410,6 +411,7 @@
 } panels_ini_options[] = {
     { "show_mini_info", &panels_options.show_mini_info },
     { "kilobyte_si", &panels_options.kilobyte_si },
+    { "human_readable", &panels_options.human_readable },
     { "mix_all_files", &panels_options.mix_all_files },
     { "show_backups", &panels_options.show_backups },
     { "show_dot_files", &panels_options.show_dot_files },
diff -rU 3 a/src/setup.h b/src/setup.h
--- a/src/setup.h	2019-10-13 18:40:47.000000000 +0000
+++ b/src/setup.h	2019-11-08 15:05:51.000000000 +0000
@@ -37,6 +37,7 @@
     gboolean show_mini_info;    /* If true, show the mini-info on the panel */
     gboolean kilobyte_si;       /* If TRUE, SI units (1000 based) will be used for larger units
                                  * (kilobyte, megabyte, ...). If FALSE, binary units (1024 based) will be used */
+    gboolean human_readable;    /* If TRUE, at most three digits are used to display the size of the files. */
     gboolean mix_all_files;     /* If FALSE then directories are shown separately from files */
     gboolean show_backups;      /* If TRUE, show files ending in ~ */
     gboolean show_dot_files;    /* If TRUE, show files starting with a dot */
diff -rU 3 a/src/viewer/display.c b/src/viewer/display.c
--- a/src/viewer/display.c	2019-10-13 18:40:47.000000000 +0000
+++ b/src/viewer/display.c	2019-11-08 15:06:24.000000000 +0000
@@ -172,7 +172,7 @@
             char buffer[BUF_TRUNC_LEN + 1];
 
             size_trunc_len (buffer, BUF_TRUNC_LEN, mcview_get_filesize (view), 0,
-                            panels_options.kilobyte_si);
+                            panels_options.kilobyte_si, panels_options.human_readable);
             tty_printf ("%9" PRIuMAX "/%s%s %s", (uintmax_t) view->dpy_end,
                         buffer, mcview_may_still_grow (view) ? "+" : " ",
 #ifdef HAVE_CHARSET

В настройках панели выбираешь опцию «human readable size», работает, на первый взгляд, нормально: https://i.imgur.com/WwthIt7.png

 

dadd
()

Как это будет выглядеть в Go?

Форум — Development

На Си аргументы командной строки можно модифицировать, чтобы изменения были видны в списке процессов (ps ax | grep название_проги). Например:

#include <stdio.h>
#include <unistd.h>

int main(int argc, char *argv[]) {
        if (argc < 2) {
                fprintf(stderr, "Добавьте аргумент.\n");
                return 1;
        }        
        for (int i = 0; argv[1][i] != '\0'; i++) {
                argv[1][i] = '*';
        }
        for (;;) {
                sleep(10);
        }        
        return 0;
}
Но попробовал аналогичное написать на Go и обломался:
package main

import (
	"fmt"
	"os"
	"time"
)

func main() {
	if len(os.Args) < 2 {
		fmt.Fprintf(os.Stderr, "Добавьте аргумент.\n")
		os.Exit(1)
	}
	var s string
	max := len(os.Args[1])
	for i := 0; i < max; i++ {
		s += "*"
	}
	os.Args[1] = s
	for {
		time.Sleep(10 * time.Second)
	}
}
Как на Go правильно менять аргумент, чтобы это влияло на его отображение в списке процессов?

 

dadd
()

Российские дистрибутивы — есть ли смысл?

Форум — Talks

От российских дистрибутивов линукса (например, calculate, alt) многие отказываются из-за возможного наличия там шпионских закладок. Да, говорят, у забугорных дистров тоже могут быть зонды, но свои опаснее и всё такое. То есть даже невзирая на технические преимущества российским ничего не светит. Представьте, каково будет российскому гению, который запилит принципиально новый дистрибутив на новых физических принципах, а все его старания обломают ёмкой фразой «зонд не нужен»? Но тогда как, по-вашему, создателям нужно правильно доказывать отсутствие закладок? Или это невозможно? И вообще, откуда такая уверенность, что в иностранных дистрибутивах нет российских зондов (в придачу к местным)?

 , ,

dadd
()

Подскажите генератор изображений

Форум — Desktop

Для отслеживания некоторых событий мне понадобились индикаторы в виде изображений. Вручную рисовать их муторно, т.к. события могут часто меняться, поэтому нужна генерилка, которая из любых трёх символов текста генерирует изображение типа такого https://imgur.com/download/GyS2cfb, но размером 48x48 px.
Есть для этого что-нибудь готовое?

 ,

dadd
()

Как правильно создать livecd

Форум — General

Есть собранный LFS 8.3, который успешно грузится с hdd. Теперь пытаюсь из него livecd сделать:

cd $LFS; ln -s /sbin/init init;
find . | cpio -o -H newc | gzip -9 >/media/iso/boot/initramfs.cpio.gz
cp $LFS/boot/vmlinuz /media/iso/boot/linux

В /media/iso/boot/ есть загрузчик isolinux с таким конфигом:

default linux
prompt 1
timeout 300
display boot.msg

label linux
  kernel /boot/linux
  append initrd=/boot/initramfs.cpio.gz

iso'шник делаю так:

cd /media/iso
mkisofs -z -R -l --allow-leading-dots -D -o ../lfslivecd-8.3.iso -b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -V "lfslivecd-8.3" ./

Распакованная initramfs весит 1.7GB, памяти на тестовой виртуалке выделено 3GB.
В итоге загрузка виснет в таком виде: https://i.imgur.com/YzNOtKC.png

Как исправить?

 ,

dadd
()

10 лет непрерывных побед

Форум — Talks

30 сентября этого года проекту Wayland исполняется 10 лет.

Есть ли тут те, кто уже полностью отказался от иксов?

 ,

dadd
()

Mozilla удалит все устаревшие дополнения

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

5 сентября 2018 Mozilla прекратит поддержку Firefox (ESR) 52.
Так как оставшиеся поддерживаемые версии браузера несовместимы с XUL-based дополнениями, то все эти дополнения удалят с addons.mozilla.org в начале октября 2018 года. Об этом сообщила Caitlin Neiman в блоге Mozilla.

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

 ,

dadd
()

RSS подписка на новые темы