LINUX.ORG.RU

Сообщения wandrien

 

Ретрошара

Кто-нибудь пользуется? С кем обменяться ключиками?

cast @mertvoprog

 

wandrien
()

Где нынче регистрировать домен...

…под личный бложик и пет-проекты?

Давным-давно брал на 2domains.ru.

Лучше брать домен у зарубежного регистратора? У какого? Какие подводные камни могут быть с оплатой или еще чем-нибудь?

 

wandrien
()

HDD дохнет?

Подхожу к компу, а там хомяк в RO. Ну и /var за компанию тоже.

В логах такое:

мар 10 13:48:26 aquila systemd-logind[898]: Lid closed.
мар 10 13:48:32 aquila kernel: ata3.00: exception Emask 0x10 SAct 0x1000 SErr 0x4040000 action 0xe frozen
мар 10 13:48:35 aquila kernel: ata3.00: irq_stat 0x00000040, connection status changed
мар 10 13:48:35 aquila kernel: ata3: SError: { CommWake DevExch }
мар 10 13:48:35 aquila kernel: ata3.00: failed command: WRITE FPDMA QUEUED
мар 10 13:48:35 aquila kernel: ata3.00: cmd 61/18:60:30:31:11/00:00:1b:00:00/40 tag 12 ncq dma 12288 out
                                           res 50/00:00:00:00:00/00:00:00:00:00/00 Emask 0x10 (ATA bus error)
мар 10 13:48:35 aquila kernel: ata3.00: status: { DRDY }
мар 10 13:48:35 aquila kernel: ata3: hard resetting link
мар 10 13:48:35 aquila kernel: ata3: SATA link down (SStatus 1 SControl 300)
мар 10 13:48:35 aquila kernel: ata3: hard resetting link
мар 10 13:48:35 aquila kernel: ata3: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
мар 10 13:48:35 aquila kernel: ata3.00: configured for UDMA/133
мар 10 13:48:35 aquila kernel: ata3: EH complete
мар 10 13:48:41 aquila kernel: ata3.00: exception Emask 0x10 SAct 0x40000 SErr 0x4040000 action 0xe frozen
мар 10 13:48:41 aquila kernel: ata3.00: irq_stat 0x00000040, connection status changed
мар 10 13:48:41 aquila kernel: ata3: SError: { CommWake DevExch }
мар 10 13:48:41 aquila kernel: ata3.00: failed command: WRITE FPDMA QUEUED
мар 10 13:48:41 aquila kernel: ata3.00: cmd 61/88:90:00:ad:d2/00:00:5f:00:00/40 tag 18 ncq dma 69632 out
                                           res 50/00:00:00:00:00/00:00:00:00:00/00 Emask 0x10 (ATA bus error)
мар 10 13:48:41 aquila kernel: ata3.00: status: { DRDY }
мар 10 13:48:41 aquila kernel: ata3: hard resetting link
мар 10 13:48:42 aquila kernel: ata3: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
мар 10 13:48:42 aquila kernel: ata3.00: configured for UDMA/133
мар 10 13:48:42 aquila kernel: ata3: EH complete
.
.
.
.
.
.
мар 10 13:54:17 aquila kernel: ata3.00: exception Emask 0x10 SAct 0x100000 SErr 0x450100 action 0x6 frozen
мар 10 13:54:17 aquila kernel: ata3.00: irq_stat 0x08000000, interface fatal error
мар 10 13:54:17 aquila kernel: ata3: SError: { UnrecovData PHYRdyChg CommWake Handshk }
мар 10 13:54:17 aquila kernel: ata3.00: failed command: WRITE FPDMA QUEUED
мар 10 13:54:17 aquila kernel: ata3.00: cmd 61/50:a0:58:f2:56/00:00:43:00:00/40 tag 20 ncq dma 40960 out
                                           res 50/00:50:58:f2:56/00:00:43:00:00/40 Emask 0x10 (ATA bus error)
мар 10 13:54:17 aquila kernel: ata3.00: status: { DRDY }
мар 10 13:54:17 aquila kernel: ata3: hard resetting link
мар 10 13:54:17 aquila kernel: ata3: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
мар 10 13:54:17 aquila kernel: ata3.00: configured for UDMA/133
мар 10 13:54:17 aquila kernel: ata3: EH complete
мар 10 13:54:27 aquila kernel: ata3: limiting SATA link speed to 1.5 Gbps
мар 10 13:54:27 aquila kernel: ata3.00: exception Emask 0x10 SAct 0x20 SErr 0x450100 action 0x6 frozen
мар 10 13:54:27 aquila kernel: ata3.00: irq_stat 0x08000000, interface fatal error
мар 10 13:54:27 aquila kernel: ata3: SError: { UnrecovData PHYRdyChg CommWake Handshk }
мар 10 13:54:27 aquila kernel: ata3.00: failed command: WRITE FPDMA QUEUED
мар 10 13:54:27 aquila kernel: ata3.00: cmd 61/58:28:30:f3:56/00:00:43:00:00/40 tag 5 ncq dma 45056 out
                                           res 50/00:58:30:f3:56/00:00:43:00:00/40 Emask 0x10 (ATA bus error)
мар 10 13:54:27 aquila kernel: ata3.00: status: { DRDY }
мар 10 13:54:27 aquila kernel: ata3: hard resetting link
мар 10 13:54:27 aquila kernel: ata3: SATA link up 1.5 Gbps (SStatus 113 SControl 310)
мар 10 13:54:27 aquila kernel: ata3.00: configured for UDMA/133
мар 10 13:54:27 aquila kernel: ata3: EH complete

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

SMART:

smartctl 7.2 2020-12-30 r5155 [x86_64-linux-5.10.19-1-lts] (local build)
Copyright (C) 2002-20, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Model Family:     HGST Travelstar 7K1000
Device Model:     HGST HTS721010A9E630
Serial Number:    JR1004BNJKM6VM
LU WWN Device Id: 5 000cca 8e6e43178
Firmware Version: JB0OA3U0
User Capacity:    1 000 204 886 016 bytes [1,00 TB]
Sector Sizes:     512 bytes logical, 4096 bytes physical
Rotation Rate:    7200 rpm
Form Factor:      2.5 inches
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   ATA8-ACS T13/1699-D revision 6
SATA Version is:  SATA 3.0, 6.0 Gb/s (current: 3.0 Gb/s)
Local Time is:    Wed Mar 10 19:42:30 2021 +07
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED

General SMART Values:
Offline data collection status:  (0x00)	Offline data collection activity
					was never started.
					Auto Offline Data Collection: Disabled.
Self-test execution status:      (   0)	The previous self-test routine completed
					without error or no self-test has ever 
					been run.
Total time to complete Offline 
data collection: 		(   45) seconds.
Offline data collection
capabilities: 			 (0x5b) SMART execute Offline immediate.
					Auto Offline data collection on/off support.
					Suspend Offline collection upon new
					command.
					Offline surface scan supported.
					Self-test supported.
					No Conveyance Self-test supported.
					Selective Self-test supported.
SMART capabilities:            (0x0003)	Saves SMART data before entering
					power-saving mode.
					Supports SMART auto save timer.
Error logging capability:        (0x01)	Error logging supported.
					General Purpose Logging supported.
Short self-test routine 
recommended polling time: 	 (   2) minutes.
Extended self-test routine
recommended polling time: 	 ( 170) minutes.
SCT capabilities: 	       (0x003d)	SCT Status supported.
					SCT Error Recovery Control supported.
					SCT Feature Control supported.
					SCT Data Table supported.

SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x000b   100   100   062    Pre-fail  Always       -       0
  2 Throughput_Performance  0x0005   100   100   040    Pre-fail  Offline      -       0
  3 Spin_Up_Time            0x0007   119   119   033    Pre-fail  Always       -       2
  4 Start_Stop_Count        0x0012   100   100   000    Old_age   Always       -       1122
  5 Reallocated_Sector_Ct   0x0033   100   100   005    Pre-fail  Always       -       0
  7 Seek_Error_Rate         0x000b   100   100   067    Pre-fail  Always       -       0
  8 Seek_Time_Performance   0x0005   100   100   040    Pre-fail  Offline      -       0
  9 Power_On_Hours          0x0012   086   086   000    Old_age   Always       -       6553
 10 Spin_Retry_Count        0x0013   100   100   060    Pre-fail  Always       -       0
 12 Power_Cycle_Count       0x0032   100   100   000    Old_age   Always       -       1115
191 G-Sense_Error_Rate      0x000a   100   100   000    Old_age   Always       -       0
192 Power-Off_Retract_Count 0x0032   100   100   000    Old_age   Always       -       36
193 Load_Cycle_Count        0x0012   078   078   000    Old_age   Always       -       223725
194 Temperature_Celsius     0x0002   157   157   000    Old_age   Always       -       38 (Min/Max 11/51)
196 Reallocated_Event_Count 0x0032   100   100   000    Old_age   Always       -       0
197 Current_Pending_Sector  0x0022   100   100   000    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0008   100   100   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x000a   200   200   000    Old_age   Always       -       39
223 Load_Retry_Count        0x000a   100   100   000    Old_age   Always       -       0

SMART Error Log Version: 1
ATA Error Count: 39 (device log contains only the most recent five errors)
	CR = Command Register [HEX]
	FR = Features Register [HEX]
	SC = Sector Count Register [HEX]
	SN = Sector Number Register [HEX]
	CL = Cylinder Low Register [HEX]
	CH = Cylinder High Register [HEX]
	DH = Device/Head Register [HEX]
	DC = Device Command Register [HEX]
	ER = Error register [HEX]
	ST = Status register [HEX]
Powered_Up_Time is measured from power on, and printed as
DDd+hh:mm:SS.sss where DD=days, hh=hours, mm=minutes,
SS=sec, and sss=millisec. It "wraps" after 49.710 days.

Error 39 occurred at disk power-on lifetime: 6547 hours (272 days + 19 hours)
  When the command that caused the error occurred, the device was active or idle.

  After command completion occurred, registers were:
  ER ST SC SN CL CH DH
  -- -- -- -- -- -- --
  84 51 01 07 90 cc 0d  Error: ICRC, ABRT at LBA = 0x0dcc9007 = 231510023

  Commands leading to the command that caused the error were:
  CR FR SC SN CL CH DH DC   Powered_Up_Time  Command/Feature_Name
  -- -- -- -- -- -- -- --  ----------------  --------------------
  61 08 50 00 90 cc 40 00      03:50:09.783  WRITE FPDMA QUEUED
  ef 10 03 00 00 00 a0 00      03:50:09.783  SET FEATURES [Enable SATA feature]
  ec 00 00 00 00 00 a0 00      03:50:09.782  IDENTIFY DEVICE
  ef 03 42 00 00 00 a0 00      03:50:09.782  SET FEATURES [Set transfer mode]
  ec 00 00 00 00 00 a0 00      03:50:09.781  IDENTIFY DEVICE

Error 38 occurred at disk power-on lifetime: 6547 hours (272 days + 19 hours)
  When the command that caused the error occurred, the device was active or idle.

  After command completion occurred, registers were:
  ER ST SC SN CL CH DH
  -- -- -- -- -- -- --
  84 51 01 07 90 cc 0d  Error: ICRC, ABRT at LBA = 0x0dcc9007 = 231510023

  Commands leading to the command that caused the error were:
  CR FR SC SN CL CH DH DC   Powered_Up_Time  Command/Feature_Name
  -- -- -- -- -- -- -- --  ----------------  --------------------
  61 08 68 00 90 cc 40 00      03:50:09.413  WRITE FPDMA QUEUED
  ef 10 03 00 00 00 a0 00      03:50:09.413  SET FEATURES [Enable SATA feature]
  ec 00 00 00 00 00 a0 00      03:50:09.412  IDENTIFY DEVICE
  ef 03 42 00 00 00 a0 00      03:50:09.412  SET FEATURES [Set transfer mode]
  ec 00 00 00 00 00 a0 00      03:50:09.411  IDENTIFY DEVICE

Error 37 occurred at disk power-on lifetime: 6547 hours (272 days + 19 hours)
  When the command that caused the error occurred, the device was active or idle.

  After command completion occurred, registers were:
  ER ST SC SN CL CH DH
  -- -- -- -- -- -- --
  84 51 01 07 90 cc 0d  Error: ICRC, ABRT at LBA = 0x0dcc9007 = 231510023

  Commands leading to the command that caused the error were:
  CR FR SC SN CL CH DH DC   Powered_Up_Time  Command/Feature_Name
  -- -- -- -- -- -- -- --  ----------------  --------------------
  61 08 28 00 90 cc 40 00      03:50:09.033  WRITE FPDMA QUEUED
  ef 10 03 00 00 00 a0 00      03:50:09.033  SET FEATURES [Enable SATA feature]
  ec 00 00 00 00 00 a0 00      03:50:09.032  IDENTIFY DEVICE
  ef 03 42 00 00 00 a0 00      03:50:09.032  SET FEATURES [Set transfer mode]
  ec 00 00 00 00 00 a0 00      03:50:09.031  IDENTIFY DEVICE

Error 36 occurred at disk power-on lifetime: 6547 hours (272 days + 19 hours)
  When the command that caused the error occurred, the device was active or idle.

  After command completion occurred, registers were:
  ER ST SC SN CL CH DH
  -- -- -- -- -- -- --
  84 51 01 07 90 cc 0d  Error: ICRC, ABRT at LBA = 0x0dcc9007 = 231510023

  Commands leading to the command that caused the error were:
  CR FR SC SN CL CH DH DC   Powered_Up_Time  Command/Feature_Name
  -- -- -- -- -- -- -- --  ----------------  --------------------
  61 08 18 00 90 cc 40 00      03:50:08.663  WRITE FPDMA QUEUED
  ef 10 03 00 00 00 a0 00      03:50:08.663  SET FEATURES [Enable SATA feature]
  ec 00 00 00 00 00 a0 00      03:50:08.662  IDENTIFY DEVICE
  ef 03 42 00 00 00 a0 00      03:50:08.662  SET FEATURES [Set transfer mode]
  ec 00 00 00 00 00 a0 00      03:50:08.661  IDENTIFY DEVICE

Error 35 occurred at disk power-on lifetime: 6547 hours (272 days + 19 hours)
  When the command that caused the error occurred, the device was active or idle.

  After command completion occurred, registers were:
  ER ST SC SN CL CH DH
  -- -- -- -- -- -- --
  84 51 00 00 00 00 00

  Commands leading to the command that caused the error were:
  CR FR SC SN CL CH DH DC   Powered_Up_Time  Command/Feature_Name
  -- -- -- -- -- -- -- --  ----------------  --------------------
  ec 00 00 00 00 00 a0 00      03:50:03.301  IDENTIFY DEVICE
  61 08 01 07 90 cc 0d ff      03:50:02.961  WRITE FPDMA QUEUED
  61 08 28 00 90 cc 40 00      03:50:02.923  WRITE FPDMA QUEUED
  ef 10 03 00 00 00 a0 00      03:50:02.923  SET FEATURES [Enable SATA feature]
  ec 00 00 00 00 00 a0 00      03:50:02.922  IDENTIFY DEVICE

SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Extended offline    Interrupted (host reset)      80%      4412         -
# 2  Short offline       Completed without error       00%      3199         -
# 3  Extended offline    Completed without error       00%        24         -
# 4  Short offline       Completed without error       00%         4         -

SMART Selective self-test log data structure revision number 1
 SPAN  MIN_LBA  MAX_LBA  CURRENT_TEST_STATUS
    1        0        0  Not_testing
    2        0        0  Not_testing
    3        0        0  Not_testing
    4        0        0  Not_testing
    5        0        0  Not_testing
Selective self-test flags (0x0):
  After scanning selected spans, do NOT read-scan remainder of disk.
If Selective self-test is pending on power-up, resume after 0 minute delay.

Какой вердикт? Срочно бэкапиться?

P.S.

После перезагрузки стали падать вкладки в лисе. Вроде к HDD не относится, хотя хз…

 

wandrien
()

Утечка данных через кольцевую шину CPU Intel

Пацаны, к нам снова традиционный дуршлаг с подогревом от Интел подъехал:

https://www.opennet.ru/opennews/art.shtml?num=54717

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

Ай, хорошо!

 

wandrien
()

shell-script, у тебя всё хорошо?

То есть

Если ты про руби, то у тебя куча ошибок в слове «всратые»

— не нарушает никаких правил форума.

А ответ

Типичный фанатик. Кроме сортирных, других мыслей в голове нет.

— это 4.3.

З.Ы. Ну раз сайт требует поставить тэг, то пусть будет швим.

 

wandrien
()

Ну что, почалося? BrВИМ!

Помоги перенести скрипт bash -> sh

Сообщение удалено bryak по причине 4.3 Провокация flame (-1)

Почему бы не переписать скрипт на Python?

Или тебе принципиально хочется пострадать?

EXL ★★★★★ (05.03.21 13:53:43)

Сообщение удалено bryak по причине 4.1 Offtopic (0)

Ответ на: комментарий от EXL 05.03.21 13:53:43

Ему даже bash запрещают. А ты python предлагаешь.

wandrien (05.03.21 13:54:58)

Тебе заняться больше нечем??

 ,

wandrien
()

«Простой» синтаксис

Небольшая задача. Вот так — не работает:

Ext_Ajax_promise = async function(options) {
    return new Promise(function(resolve, reject) {
        options.callback = function(options, success, response) {
            let result = {
                response: response,
                options: options
            }
            (success ? resolve : reject)(result);
        }
        Ext.Ajax.request(options);
    });
}

Кто за 2 секунды понял, почему, — тот молодец и гуру джаваскрипта. А я не молодец, я ломал голову минут 10.

Если кто-то не догадался, где ошибка, то смотрите историю правок поста — там скрыта рабочая версия.

Мораль простая: не слушайте адептов «простого синтаксиса» и всегда шарашьте точки с запятой.

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

 ,

wandrien
()

Выбор встраиваемого интерпретатора

Привет! Поделитесь опытом внедрения разных встраиваемых реализаций.

Есть идея для одного приложения. Планирую, что оно будет поставляться в двух вариантах:

  • Как обычное веб-приложение для развёртывания и запуска на сервере.
  • Как статический бинарь (appimage?) со всем кодом внутри. «Запустил и работает», для локалхоста.

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

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

Вспомнились такие встройки:

  • Для Ruby: mruby
  • Для Python: micropython
  • Для JS: quickjs, duktape, десятки их

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

Мой вопрос в том, какой инструмент выбрать. Взяв какой язык и какой встраиваемый интерпретатор я поимею наименьшее количество проблем по поддержанию совместимости кода приложения одновременно с мейнстримовым интерпретатором и со встраиваемым?

P.S.:

Жирный V8 в appimage тащить не хочу. Электрон не предлагать.

 , ,

wandrien
()

Добавление столбцов

Есть ли разница, добавлять новые столбцы в таблицу после последнего столбца или где-нибудь в середине списка?

Разница по производительности работы таблицы или еще какие-то подводные камни?

 ,

wandrien
()

Как мне в питоне включить отладочный лог для единственного модуля?

Извините, но я прочитал https://docs.python.org/3/library/logging.html и нихрена не понял.

Во всех нормальных обертках для записи логов можно переопределить уровень логирования для конкретного модуля, сделав уровень выше дефолтного. А в питоне вы можете сделать его только ниже, а не выше.

Что они курили и что курить теперь мне?

UPD:

В качестве решения сделал модуль для манки-патчинга дефолтного логгера. См. в комментариях.

 ,

wandrien
()

list comprehensions

В очередной раз при правке кода на питоне у меня пригорело от list comprehensions.

А вот что пишут настоящие живые люди, которых никто не заставляет под дулом пистолета:

I find the list comprehension much clearer than filter+lambda

Или:

Personally I find list comprehensions easier to read. It is more explicit what is happening from the expression [i for i in list if i.attribute == value] as all the behaviour is on the surface not inside the filter function.

Ну давайте посмотрим, как этот much clearer way выглядит in the wild. Как-то так:

    def getSupportedTrackers(self):
        trackers = self.getTrackers()

        if not self.site.connection_server.tor_manager.enabled:
            trackers = [tracker for tracker in trackers if ".onion" not in tracker]

        trackers = [tracker for tracker in trackers if self.getAddressParts(tracker)]  # Remove trackers with unknown address

        if "ipv6" not in self.site.connection_server.supported_ip_types:
            trackers = [tracker for tracker in trackers if helper.getIpType(self.getAddressParts(tracker)["ip"]) != "ipv6"]

        return trackers

Просто сплошной [blabla for blabla in blablas if ...blabla...].

Просто в начале каждой такой строки ты должен мысленно стирать кусок [tracker for tracker in trackers if и читать, что же там дальше. И как писал Роберт Мартин в «Чистом коде», любые конструкции, которые принуждают читателя тренироваться пропускать себя мимо глаз, являются источником скрытых ошибок. Пропустив 500 раз мимо глаз типовой фрагмент кода, на 501-й раз вы пропускаете ПОЧТИ такой же фрагмент, в котором содержится ошибка. И в силу одинаковой натренированности рефлексов у всех разработчиков продукта, эта ошибка может оставаться незамеченной годами.

Давайте посмотрим, как этот же код можно преписать на лямбдах на руби:

    def getSupportedTrackers():
        trackers = @getTrackers()

        if not @site.connection_server.tor_manager.enabled
            trackers = trackers.filter {|tracker| not tracker.include? ".onion"}
        end

        trackers = trackers.filter {|tracker| @getAddressParts(tracker)}

        if not @site.connection_server.supported_ip_types.include? "ipv6"
            trackers = trackers.filter {|tracker| helper.getIpType(@getAddressParts(tracker)["ip"]) != "ipv6"}
        end

        return trackers
    end

Уже стало лучше за счёт уменьшения количества бойлерплейта, который приходится пропускать мимо. Но 3 вызова trackers.filter подряд и два идентичных вызова getAddressParts говорят нам, что этот код надо переписать.

Заметьте, что необходимость рефакторинга для устранения дублирования не была очевидна в коде с list comprehensions, потому что они за своей многословностью и нечитабельным синтаксисом скрывают суть происходящего.

Убираем дублирование:

    def getSupportedTrackers()
        tor_enabled = @site.connection_server.tor_manager.enabled
        ipv6_enabled = @site.connection_server.supported_ip_types.include? "ipv6"

        trackers = @getTrackers()

        trackers = trackers.filter {|tracker|
            if (not tor_enabled) and (tracker.include? ".onion")
                next false
            end

            address_parts = @getAddressParts(tracker)
            if not address_parts
                next false
            end

            if (not ipv6_enabled) and (helper.getIpType(address_parts["ip"]) == "ipv6")
                next false
            end

            next true
        }

        return trackers
    end

Этот код хотя и выглядит не так компактно при взгляде на экран издалека, на самом деле проще в чтении и в поддержке. Здесь нет дублирования, которое заставляет читателя многократно сверять строки, чтобы убедиться, что разработчик имел в виду именно то, что увидел читатель. А каждая строка выражает свою мысль без лишних бессмысленных слов, которые нужно отфильтровывать глазами.

P.S. Или для любителей длинных однострочников:

    def getSupportedTrackers()
        tor_enabled = @site.connection_server.tor_manager.enabled
        ipv6_enabled = @site.connection_server.supported_ip_types.include? "ipv6"

        trackers = @getTrackers()

        trackers = trackers.filter {|tracker|
            next false if (not tor_enabled) and (tracker.include? ".onion")

            address_parts = @getAddressParts(tracker)
            next false if not address_parts

            next false if (not ipv6_enabled) and (helper.getIpType(address_parts["ip"]) == "ipv6")

            next true
        }

        return trackers
    end

Но этот вариант по моему мнению хуже.

Перемещено leave из talks

 , ,

wandrien
()

Статья: Устройство подсистемы TTY

Опубликовал статью, посвященную устройству подсистемы TTY.

Подсистема TTY — одна из ключевых особенностей Unix и Unix-подобных операционных систем.

В этой статье я постараюсь кратко, но достаточно ёмко и доступно для читателей разного уровня подготовки разобрать устройство подсистемы TTY и её взаимодействие с другими частями программной среды.

Описание архитектуры TTY, изложенное здесь, не является на 100% корректным. Некоторые части были намеренно упрощены или опущены, чтобы итоговая картина получилась более простой и цельной. Эти детали не являются критичными для понимания принципов работы TTY. При необходимости все необходимые детали могут быть восстановлены чтением страниц руководств в составе операционной системы.

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

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

 ,

wandrien
()

Не совсем Windows calculator не совсем портировали на Linux

Windows calculator портировали на Linux

В таком виде — вызывающе неверная информация. См. подтверждение здесь: Windows calculator портировали на Linux (комментарий)

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

 

wandrien
()

Блокировать сайты в поисковой выдаче

Отщепенцы со дна общества под названием «оптимизаторы» придумали новый способ поискового спама для обхода эвристик Гугла: переводить машинным переводом Stack Overflow и заливать типа сайты вопросов и ответов на русском и других языках.

Зачастую этот мусор в результатах поиска оказывается выше, чем страницы, с которых он был спи^Wпереведён.

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

В общем, поставил в лису uBlacklist. Всем рекомендую.

 ,

wandrien
()

Куда утекает память?

Показания htop: https://ibb.co/fC34MBw

В первую очередь проверил tmpfs, там пусто:

$ df -h -t tmpfs
Файловая система Размер Использовано  Дост Использовано% Cмонтировано в
run                3,9G         1,6M  3,9G            1% /run
tmpfs              3,9G            0  3,9G            0% /dev/shm
tmpfs              4,0M            0  4,0M            0% /sys/fs/cgroup
tmpfs              6,2G          96K  6,2G            1% /tmp
tmpfs              788M         116K  788M            1% /run/user/1000

Главный подозреваемый – ядерный модуль VirtualBox.

Вчера днём утекло около 3 гигов. Перезагрузил, запустил VBox, оставил на ночь. За ночь утекло еще 6.

 ,

wandrien
()

И ты, Брут...

https://git.archlinux.org/pacman.git/commit/?id=454ea024383eab60295e4c4fdf2c329475887b2c

2020-05-11 This removes support for autotools in favour of meson.

Этому миру нужен герой…

 ,

wandrien
()

Bedrock Linux

Bedrock Linux – это «метадистрибутив», что в понимании авторов означает «программа для управления другими дистрибутивами».

Вы ставите любой дистрибутив по вкусу (из списка поддерживаемых) тем способом, который вам нравится. После этого запускаете установщик Bedrock Linux. Bedrock Linux перехватывает управление над системой, внедряясь в качестве дефолтного инита, изменяя и добавляя точки монтирования и т.п. После перезагрузки вы оказываетесь в системе, которая работает «внутри» Bedrock Linux. Вы можете устанавливать другие операционные системы семейства Linux «рядом» с основной системой и свободно смешивать софт из них. (Общий /bin, список файлов *.desktop, bash-completion, man pages и другие интеграционные фичи).

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

Это всё красивая теория. Что на практике:

Я пожертвовал установленным на флешке Арчем, чтобы поэкспериментировать с Bedrock. Этот Арч, как и все мои Арчи, представляет собой клона основной системы, которая работает около 10 лет без переустановок. Так что я заранее был готов, что при накатывании сверху Bedrock всё развалится. Как пишут авторы, они тестируют работу системы только поверх свежеустановленного дистрибутива.

Для начала:

# ./bedrock-linux-0.7.17-x86_64.sh --hijack Arch
No file detected at /sbin/init.  Unable to hijack init system.

Смотрим в код. Установочный скрипт даже не пытается обнаружить, какой инит на самом деле использован:

    if ! [ -r "/sbin/init" ]; then
        abort "No file detected at /sbin/init.  Unable to hijack init system."
    fi

Мне лень писать ln -s ... вручную, поэтому просто ставлю пакет, который притащит нужный симлинк:

# pacman -S systemd-sysvcompat

Вот такой у меня повидавший жизнь и кучу апдейтов экземпляр Арча, в котором не стоит systemd-sysvcompat. Ладно, пофиксил, едем дальше.

Запускаю установку, на этот раз Bedrock ставится нормально. Говорит, что внедрился в операционную систему, и что надо перезагрузиться.

Сначала смотрю, что он сделал:

  • Создал директорию /bedrock со своими конфигами и бинарниками.
  • Заменил симлинк /sbin/init на свой скрипт запуска.

Других изменений не заметно.

Конфиг в /boot/grub/grub.cfg не поправил и даже не сказал, что я должен это проверить. А в конфиге вписан совсем не тот init:

menuentry "Archlinux Ester (mainline)" {
    linux /boot/vmlinuz-linux root=$root_dev ro init=/usr/lib/systemd/systemd
    initrd /boot/initramfs-linux.img
}

Правлю инит. Перезагружаюсь.

Получаю сообщение «No suitable video mode found. Booting in blind mode.» и… система не грузится.

Ну, это мой косяк. Сообщение было и раньше, и пока systemd не переключит видеорежим, экран действительно оставался чёрным.

Догадываюсь, что Bedrock пытается на чёрном экране показать мне своё boot menu. Нажимаю enter. Запускается systemd. Ура, у нас есть картинка.

Снова лезу в /boot/grub/grub.cfg. Добавляю строку insmod all_video. Перезагружаюсь.

На этот раз всё нормально, Bedrock рисует загрузочное меню, и оно отображается на экране. Предлагает грузиться через systemd или через runit-init, который у меня, оказывается, тоже установлен. Я и не помню, что его сюда ставил. Правда, в runit-init грузиться смысла нет, половина программ в Арче просто не поймут отсутствие systemd.

Загружаюсь. Сети у приложений нет. Обнаруживаю, что у меня хаос в ip route и в /etc/resolve.conf. NetworkManager видит Wifi, но, видимо, какой-то подземный стук вмешался в работу. Вручную правлю маршруты и резолверы имён. Сеть появляется.

==> Вы находитесь здесь.

Теперь надо разобраться, что мешает автоматике настраивать сеть правильно. Пока на этом из приключений всё. И дальше можно ставить рядом приложения из Debian, Void, Alpine, да хоть Gentoo компилировать.

Stay tuned!

 ,

wandrien
()

hacktoberfest

Сабж в этом году окончательно вышел из-под контроля.

Какие вам присылали бессмысленные PR-ы?

 

wandrien
()

DOS Subsystem for Linux

Там opennet наркоманию принёс:

https://www.opennet.ru/opennews/art.shtml?num=53791

 

wandrien
()

Нашел залежи документации

Нашел случайно. Чей сервер, не знаю:

https://doc.lagout.org/

Не всё на английском, часть на французском. Есть как историческая информация, так и актуальная.

 ,

wandrien
()

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