LINUX.ORG.RU

Сообщения ados

 

Производительность чтения файла

Форум — General

Пишу свой супер-пупер производительный парсер на CL под sbcl, GNU/Linux. И давно вот заметил что кусками равного размера чтение из файла идёт быстрее чем если читать поток по символу.


(in-package cl-user)

(defpackage buffering-tests
  (:use :cl))

(in-package buffering-tests)

(defparameter *test-text*
  (merge-pathnames #P"Desktop/buffering-test/text.txt"
                   (user-homedir-pathname)))

(defun count-chars (file)
  (with-open-file (in file)
    (loop :for c = (read-char in nil nil)
          :while c
            :counting 1)))

(defparameter *default-buffer-size*
  (floor (* 4 (expt 2 10))))

(defun count-chars-with-buffering (file
                                   &optional (buffer-size *default-buffer-size*))
  (with-open-file (in file)
    (loop :with buffer = (make-string buffer-size)
          :for e = (read-sequence buffer in)
          :while (plusp e)
          :summing e)))

  
BUFFERING-TESTS> (let (r)
                   (sb-ext:gc :full t)
                   (time (dotimes (i 15)
                           (setf r
                                 (count-chars *test-text*))))
                   r)
Evaluation took:
  1.514 seconds of real time
  1.512376 seconds of total run time (1.490228 user, 0.022148 system)
  99.87% CPU
  3,487,695,298 processor cycles
  63,488 bytes consed
  
6210660
BUFFERING-TESTS> (let (r)
                   (sb-ext:gc :full t)
                   (time (dotimes (i 15)
                           (setf r
                                 (count-chars-with-buffering *test-text*))))
                   r)
Evaluation took:
  0.693 seconds of real time
  0.692603 seconds of total run time (0.669793 user, 0.022810 system)
  100.00% CPU
  1,597,583,804 processor cycles
  323,520 bytes consed
  
6210660
  

Разница есть если даже пытаться сравнять количество итераций:

(defun count-chars-with-buffering (file
                                   &optional (buffer-size *default-buffer-size*))
  (with-open-file (in file)
    (loop :with buffer = (make-string buffer-size)
          :for e = (read-sequence buffer in)
          :while (plusp e)
          :summing
          (loop :repeat e
                :for i :upfrom 0
                :for c = (schar buffer i)
                :when c
                  :counting 1))))
  
BUFFERING-TESTS> (let (r)
                   (sb-ext:gc :full t)
                   (time (dotimes (i 15)
                           (setf r
                                 (count-chars-with-buffering *test-text*))))
                   r)
Evaluation took:
  1.193 seconds of real time
  1.191737 seconds of total run time (1.172685 user, 0.019052 system)
  99.92% CPU
  2,748,553,404 processor cycles
  323,520 bytes consed
  
6210660
BUFFERING-TESTS> 
  

В парсере это привело к созданию прослойки над потоками - объекта, содержащего ссылку на поток, буфер и инфу откуда программе начинать чтение. Остаётся вопрос - для чего так реализовано? Недостающая оптимизация sbcl? В других реализациях других языков тоже такая разница? Понятно что сварганить вышеописанный объект может любой программист в два счёта, но почему бы не сделать это в рамках реализации чтобы не было разницы посимвольно ты читаешь поток или кусками? Почему бы эту абстракцию не взять на себя ядру, у которого и так в IO буфер буфером погоняет?

 , , ,

ados
()

Мелочи в подписях под полями

Форум — General

Вот код:


\documentclass[a4paper]{article}

\usepackage[T2A,TS1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[russian]{babel}
\usepackage[normalem]{ulem}

\usepackage [top=20mm,
             bottom=20mm,
             footskip=12mm,
             left=20mm,
             right=10mm]{geometry}

\renewcommand{\ULdepth}{1.8pt}

\makeatletter
\newcommand{\dynscriptsize}{\check@mathfonts\fontsize{\sf@size}{\z@}\selectfont}
\makeatother
\newcommand\textunderset[2]{%
  \leavevmode
  \vtop{\offinterlineskip
    \halign{%
      \hfil##\hfil\cr % center
      \strut #2\cr
      \noalign{\kern-.1ex}%
      \dynscriptsize
      \strut%
      #1
      \cr
    }%
  }%
}


\begin{document}

Обучающийся \textunderset{подпись}
      {\uline{\makebox[90mm]{}}}/\uline{\hfill%
        \textunderset{расшифровка подписи}%
      {\hfill Петров Д.Я. \hfill}\hfill}/

\end{document}

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

И ещё вопрос как делать такую подпись в две строчки?

 ,

ados
()

Погрешность определения размера наночастиц

Форум — Science & Engineering

Вот варят люди в лаборатории наночастицы и оформляют грант на исследование влияния технологии на эксплуатационные параметры. Мы снимаем эти частицы с помощью электронного растрового микроскопа и на глаз определяем размер, строим гистограмму и достаточно удачно фитуем Логнормальное распределение. Распределение, к примеру, получается с матожиданием 3.7 нм с дисперсией 0.6 нм, что мы и докладываем. И вот среди всей этой конкурсно-грантовой тусовки бывает подходят какие-то типа эксперты и спрашивают: а какая погрешность в оценке размера наночастиц? Вот что им ответить?

 , матстатистика,

ados
()

Устал копипастить sed-скрипт

Форум — General

Вот обыкновенная программа просто сваливает список файлов в файл и чтобы sh-утиль спокойна файлы по списку подхватывал нужно проделывать кучку экранирования:

cat ../SIZES |../../utils/filter_size.py \<5M|sed -e '/^$/d'  -e 's/\\/\\\\/g' -e 's/"/\\"/g' -e "s/'/\\\\'/g" |xargs -I {} cp --parents '{}' ../r/

Чем бы вот эту команду с sed-ом заменить чем-нибудь по-лаконичнее?

 ,

ados
()

Безопасный удалённый CLI-интерфейс

Форум — Development

На сервере из под огороженного пользователя запускаем sshd с зачуханным конфигом, сертификатом и портом. Клиент на устройстве просто подключается по ssh и сразу же запускает конкретную программу на сервере. То что эта программа на сервере тоже является на самом деле клиентом, но тут отношения сервер-клиент разруливаются в рамках одной машины на пингвине, ну и да ладно с этим. Вот что может быть проще и безопаснее?

ЗЫ в перспективе ssh соединение можно ещё потом в tor-туннель воткнуть, но пока и без этого можно жить.

 , ,

ados
()

LineageOS 15.1, Samsung Galaxy A3

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

Вот после этого:

Сносить или не сносить...

Установку осилил, потихоньку работает, у меня как замена стокого андроида вполне устраивает. cast Valman_old. Как читалка, календарик, портативная карта города, музыкальный плеер вполне годен. Симки нет - для этого у меня более узкоспециализированный кнопочник.

Я не любитель сильно кастомизировать интерфейс без необходимости, поэтому прошу извинить за практически дефолтный LineageOS.

Gapps'ы не нужны поэтому без них.

 , ,

ados
()

Операционная система Linux в России

Форум — Linux-org-ru

Если мои скрины не подтверждаете...

... то может хотя-бы в Форум/Mobile переместите?

LineageOS 15.1, Samsung Galaxy A3

UPD

Со скриншотом тему можно закрыть. Но как быть с «операционной системой Linux» отсюда: www.linux.org.ru/about ?

Что это за такая система?

 

ados
()

Сносить или не сносить...

Форум — Mobile

Есть у меня аппарат Samsung galaxy a3 (2017). Перед тем как начать как-то под себя перенастраивать андроид мне бы хотелось как аппарат работает на альтернативах. Хотелось бы узнать у знающих людей о рисках потерь различных функций при сносе.

Например я слышал что подобный аппарат специально был произведён для использования на предприятиях и снабжён некой samsung knox. Вроде как это подразумевает некоторые железные предохранители-триггеры, которые выгорают при сносе прошивки. Добрые люди подарившие мне подобный аппарат в подобные детали и не вникали. Да зачем нужен мне такой софт если я ему не доверяю как проприетарщине - я всему андроиду не доверяю, а этот софт стоит поперёк того чтобы заменить этот андроид. Однако я опасаюсь что потерь в функциях может быть больше.

 , ,

ados
()

Парсинг с продолжениями

Форум — Development

Вот есть ли такие библиотеки генераторов парсеров где возможно такое. Вот идёт парсер, которому скормили правило, по строке. Если он находит на строке подстроку которая отвечает правилу полностью то тут поведение ничем не отличается от уже реализованных генераторов парсеров типа всевозможных regexp-либ или esrap. Интересно если строка закончилась и тогда парсер должен вернуть состояние. Это состояние можно скормить парсеру вместо правила (состояние скорее всего будет содержать правило иначе как-то мало смысла кормить остальное состояние с каким-то другим правилом) и отправить парсить какую-то новую строку. Причём в таком случае если парсер не упрётся опять с подобным результатом в конец строки, то результат работы парсера был бы такой же как если бы парсера изначально бы отправили по одной строке, которая была бы соединением первой и новой строк.

 

ados
()

Многомерный отчёт об опросе

Форум — Linux-org-ru

Вот например здесь: Какой ОС вы пользуетесь на основном ПК?

Чтобы можно было видеть по сколько из выбравших, например, пункт M$ выбрало также каждый из других пунктов.

 ,

ados
()

Макрос раскрывает код макроса

Форум — Development

Есть макрос раскрывающийся в окружение с локальным макросом, определяемым macrolet-ом. Последний раскрывает код вроде:

`(,a ,b)

Только ,a должен подставить первый макрос, а ,b - локальный.

Код вроде такого:

(let ((x ...))
  `(macrolet ((m (y)
                `(,x ,y)))
     ...))

Такое можно описать с backquote синтаксисом?

 

ados
()

Удобное количество строк для чтения кода

Форум — Development

Вот у вас открыт редактор кода или просмотрщик и вы читаете код подобно книге страницу за страницей. Вот сколько обычно строк кода в одной странице у вас и вам при этом комфортно читать код? Ещё интересно при этом на каком языке вы читаете код обычно?

 

ados
()

Unknown public key

Форум — Security

Что за ключ такой unknown public key D1483FA6C3C07136? Ему можно доверять?

 ,

ados
()

Капсула для процесса

Форум — Security

Вот мучает меня временами один вопрос, но в теме у меня довольно поверхностные познания.

Вот есть в системе процесс с подозрительной активностью. Можно ли создать такое окружение для процесса, с помощью которого можно:

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

  2. Как можно лучше изучить активность подозрительного процесса.

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

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

Также интересен вариант системы с оффтопиком и андроидом, хотя я уверен, что с прямыми руками в таких случае вероятность неуспеха как не крути выше.

ados
()

uiop/launch-process и espeak

Форум — Development

Экспериментирую я тут с espeak:

(defmacro with-espeak-process ((&rest args)
                               &body code)
  `(let ((*espeak-process*
           (uiop:launch-program '("espeak" ,@args)
                                :input :stream
                                :output :stream)))
     (unwind-protect
          (progn ,@code)
       (uiop:close-streams *esrap-process*)
       (uiop:terminate-process *esrap-process*))))

Но espeak после такой сессии не подыхает и может дальше принимать текст на озвучку и озвучивать его. Как его убить с не вдаваясь в специфичные функции sbcl?

SBCL

 

ados
()

С днём космонавтики!

Форум — Talks

Сабж.

 

ados
()

Посоветуйте литературу

Форум — Talks

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

Заранее благодарю

 

ados
()

Звуковая подсистема для игрового движка

Форум — Development

В принципе маленькая игра готова с sbcl и интерфейсом через gobject introspection + gtk + cairo, но хотелось бы добавить ещё сабж.

 

ados
()

Чеклисты

Форум — Mobile

Ищу программу, которая может:

  • Быть свободной - только с этим сабж не является оффтопом
  • В основном режиме работы программа должна просто задавать вопросы один за другим, принимая стандартные ответы DONE, FAIL, CNCL, etc. или какую нибудь другую строку (число, время). Ответы записывать в базу вместе с временем ответа.
  • Набор вопросов - чеклист должен быть хорошо поддаваться настройке.
  • База ответов может быть экспортирована в файл хорошо поддающийся парсингу (XML, JSON, etc.)

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

 

ados
()

McCLIM 0.9.7 «Imbolc»

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

После десяти лет разработки команда разработчиков решила выпустить релиз McCLIM — Common Lisp библиотеки для создания GUI, свободной реализации (лицензия LGPL) спецификации CLIM — спецификации полностью объектно-ориентированного тулкита на базе CLOS и идях потоков ввода и вывода, обладающего средствами платформонезависимости. CLIM унаследованна от GUI систем Dynamic Windows в лисп-машинах Symbolics.

Понятно что за 10 лет разработки список изменений очень большой и желающие могут ознакомиться с более подробной информацией в блоге McCLIM, git log и issue tracker.

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

Сайт проекта

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

 ,

ados
()

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