LINUX.ORG.RU

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

Релиз PhotoFlare 1.6.2

Новости — Open Source
Релиз PhotoFlare 1.6.2
Группа Open Source

PhotoFlare — относительно новый кроссплатформенный редактор изображений, который предлагает баланс между тяжелым функционалом и удобным интерфейсом. Он подходит для самых разных задач, и включает в себя все основные функции редактирования изображений, кисти, фильтры, настройки цвета и т.п. PhotoFlare не является полноценной заменой GIMP, Photoshop и подобных «комбайнов», но содержит в себе самые популярные возможности редактирования фото. Написан на С++ и Qt.

Главные особенности:

  • Создание изображений.
  • Обрезка изображений.
  • Отражение и поворот изображений.
  • Изменение размеров изображения.
  • Изменение размеров холста.
  • Палитры инструментов.
  • Поддержка фильтров.
  • Вариация оттенка.
  • Градиенты.
  • Добавление и редактирование текста.
  • Инструменты автоматизации.
  • Пакетная обработка изображений.
  • Множество настроек.

Что нового в версии 1.6.2:

  • Исправление билда для OpenMandriva Cooker.
  • Несколько исправлений инструмента Zoom.

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

 , , , ,

fail2ban
()

Wireguard включен в ядро Linux

Новости — Ядро Linux
Группа Ядро Linux

Wireguard – это простой и безопасный VPN-протокол, основным разработчиком которого является Jason A. Donenfeld. Долгое время модуль ядра, реализующий этот протокол, не принимали в основную ветку ядра Linux, так как использовалась своя реализация криптографических примитивов (Zinc) вместо стандартного crypto API. Недавно это препятствие было устранено, в том числе за счет доработок, принятых в crypto API.

Сейчас wireguard принят в основную ветку ядра Linux и будет доступен в релизе 5.6.

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

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

 ,

AEP
()

Machine Learning.

Форум — General

Здравствуйте! Скажите, пожалуйста, что нужно для того, чтобы влиться в ML? Что нужно изучать последовательно,по порядку, чтобы ввалиться в эту сферу (или попытаться)?

 

Alexandrietz
()

Вышел симулятор электронных схем Qucs-S 0.0.22

Новости — Open Source
Вышел симулятор электронных схем Qucs-S 0.0.22
Группа Open Source

Сегодня, 19 января вышел очередной релиз Qucs-S-0.0.22. Qucs-S является форком проекта Qucs и в отличие от оригинала позволяет использовать не только встроенный движок моделирования, но и внешние Ngspice и XYCE. Это позволяет использовать готовые SPICE-модели электронных компонентов минуя слои совместимости и достичь лучшей скорости и стабильности симулятора. Проект написан на C++ с использованием набора библиотек Qt4.

Список изменений:

  • Добавлен компонент SPICEINIT, который позволяет задавать дополнительные настройки для Ngspice;
  • Исправлены баги;

Подробности и ссылки на пакеты для Debian, Ubuntu и CentOS есть на странице релиза.

>>> Страница релиза на Github

 , , ,

DarthVadimius
()

Вышел PinePhone — защищенный Linux-смартфон

Новости — Hardware and Drivers
Вышел PinePhone — защищенный Linux-смартфон
Группа Hardware and Drivers

Компания Pine64 сообщила о начале продаж свободного защищенного смартфона PinePhone. Смартфон нацелен на тех, кто считает, что человек должен иметь полный контроль над технологиями и своей жизнью. Все, кто ценит приватность и ненавидит телеметрию Android и iOS, являются потенциальными покупателями PinePhone. Пришло время послать большого брата в /dev/null!

Первая партия разлетелась как горячие пирожки, но в ближайшее время в магазине появится новая.

Стоимость PinePhone всего $150. Железо смартфона полностью заменяемое — каждый модуль можно вытащить и заменить, или обновить на более мощный с помощью отсоединяемых шлейфов.

PinePhone поддерживает множество ОС:

  • Postmarket OS (KDE Plasma Mobile предустановлена);
  • UBPorts (Ubuntu Touch);
  • Maemo Leste;
  • Nemo Mobile;
  • Manjaro;
  • LuneOS;
  • SailfishOS;
  • В ближайшее время появится поддержка NixOS.

Все эти образы можно скачать и поставить на смартфон прямо с SD-карты.

Технические характеристики:

Allwinner A64 Quad Core SoC with Mali 400 MP2 GPU
2GB of LPDDR3 RAM
5.95″ LCD 1440×720, 18:9 aspect ratio (hardened glass)
Bootable Micro SD
16GB eMMC
HD Digital Video Out
USB Type C (Power, Data and Video Out)
Quectel EG-25G with worldwide bands
WiFi: 802.11 b/g/n, single-band, hotspot capable
Bluetooth: 4.0, A2DP
GNSS: GPS, GPS-A, GLONASS
Vibrator
RGB status LED
Selfie and Main camera (2/5Mpx respectively)
Main Camera: Single OV6540, 5MP, 1/4″, LED Flash
Selfie Camera: Single GC2035, 2MP, f/2.8, 1/5″
Sensors: accelerator, gyro, proximity, compass, barometer, ambient light
3 External Switches: up down and power
HW switches: LTE/GNSS, WiFi, Microphone, Speaker, Cameras
Samsung J7 form-factor 3000mAh battery
Case is matte black finished plastic
Headphone Jack

Видео: запуск 4х ОС на PinePhone

Бонус: обзор ноутбука Pinebook Pro

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

 , , , ,

fail2ban
()

Сочетания клавиш (выжимка из руководства)

Форум — General

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

#----------------- Перемещение ------------------------------------------------
* h j k l
* 0 ^
* $
* gM                     Середина строки.
* [N]|                   Переход к столбцу с номером N, 1 по умолчанию.
* [N]f{char} [N]F{char}  К N'му символу char справа/слева.
* [N]t{char} [N]T{char}  До символа.
* [N]; [N],              Повтор f F t T в прямом/обратном напр-ии.
* g0 g^ g$ gm gk gj      Оперируют с экранными линиями.
* gg [line num]G
* {N}%                   На строку, являющуюся N % файла.
* w e b ge
  W E B gE               Границы слов - только пробелы.
* [N][* [N]]*            К /* или к */.
* gd gD                  К локальному/глобальному объявлению.
* {N}go                  К N байту буфера.
* CTRL-{U|Y|B}           Прокрутка назад на половину/строку/экран.
* CTRL-{D|E|F}           Прокрутка вперёд на половину/строку/экран.
* zz zt zb               Сдвиг окна так, что курсор в центре/в верху/в низу.
* [# ]# %                Перемещение по препроцессорным директивам.
* [[ ][                  К внешней {/};
  [{ ]}                  К текущей {/};
  [m ]m                  К предыдущей/следующей старту функции-члену;
  [] ]]                  Переход между функциями.
* [( ])                  К текущей (/).
* [/ ]/                  К /* /  */.
#----------------- Модификация, копирование -----------------------------------
* i I                    Добавление перед курсором/в начало строки.
* a A                    Добавление за курсором/в начале строки.
* x X                    Удалить под курсором/слева.
* i_CTRL-A i_CTRL-@      Вставить текст введённый в предыдущем insert режиме/
                         с выходом из insert режима.
* i_CTRL-Y i_CTRL-E      Скопировать символ со строки выше/ниже.
* ["x]d{pos} dd [N]D     Удалить до pos/всю строку/до конца строки;
                         Регистр X - добавить в x.
* i_CTRL-R[_CTRL-R]{reg} Вставка из регистра; [не вып-ть команды, <BS> и т.п.].
* ["x]y[pos] yy          Копирование объекта/всей строки.
* ["x]p P                Вставка после/перед курсором.
* o O                    Вставка пустой строки выше/ниже курсора.
* J gJ                   Удалить \n. В vis режиме - у всех выд-ых строк;
                         gJ - без пробелов.  
* r gr R gR              Замена одного/нескольких символов, с g - виртуальная;
                         В виз-ом ре-ме заменит блок символом.
* c{pos} cc C s          Замена объекта/строки/до конца строки/одного сивола.
* ~ v_{~|u|U}            Изменение регистра;
  {g~|gu|gU}{pos}        Всю строку - g~~, guu, ...
* i_CTRL-V{int|kstroke}  Вставить символ литерально.
* [N]CTRL-A [N]CTRL-X    Увеличить/уменьшить число под курсором на N.
#----------------- Поиск, поиск с заменой -------------------------------------
* %                      Поиск парных скобок.
* # *                    Поиск слова под курсором назад/вперёд.
  g# g*                  Находить и частичные совпадения.
* /txt[\c] ?txt[\c]      Поиск верёд/назад; n N продолжить вперёд/назад;
                         CTRL-I CTRL-O переходы вперёд/назад; \c иг-ть рег-тр.
* [range][%]s/было/стало/[g|c|e]  % - во всём файле; g не только первое;
                                  с - с запросом; e - отсут-ие совпад-ий не
                                  ошибка.
* :[range]g/{ptrn}/{cmd} Выполнить cmd на строках, подходящих под ptrn.
* :grep x *.cc
  :cnext :cprev :clist
* :set ic hls is         Нечувствительность к регистру/подсветка/инкр-ый поиск;
  :wrapscan               Для отключения префикс no (noic, ...).
* gf :find nm :sfind     Найти и открыть файл под курсором/nm в текущей
  CTRL-W f               директории и в path директориях.
  :set path+=
#----------------- Метки ------------------------------------------------------
* CTRL-{O|I}             Перемещение по меткам.
* ``                     Переход на последюю, тек-ая позиция - последняя метка.
* :jumps :clearjumps
* m{a-z} {`|'}{a-z}      Именованные метки; Создать/перейти/список;
  :marks [abc]           a-z локальные, A-Z глобальные.
* `" `.                  Поз-ия при выходе из файла/модификация перед выходом.
#----------------- Кодинг, фолдинг, отступы -----------------------------------
* zf zo zc               Фолдинг, создать/развернуть/свернуть;
  zr zm                  Уровень свёрнутости меньше/больше;
  zR zM                  Развернуть/свернуть всё;
  zn zN zt               Убарать фолдинг/вернуть/переключение между ними;
  zO zC                  Развернуть/свенруть всё под курсором;
  zd zD                  Удалить фол-г под курсором/весь;
  :set foldmethod=syntax
  :set foldopen=all      Автофолдинг.
       foldclose=all
* CTRL-X_CTRL-O          omni completion, CTRL-{P|N} для перемещения.
* set makeprg            Задать команду, выполняемую при :make;
  :c{next|previous|
     first|last}
  :cc[n] :clist[!]       Описание ошибок/список ошибок;
  :colder :cnewer        К старому/к новому списку ошибок;
  :compiler              Выбрать формат ошибок (set errorformat).
* set shiftwidth=4
  set softtabstop=4
  =                      Форм-вать текст (отступы); ==, v_=, gg=G весь файл;
  CTRL-T CTRL-D          Добавить/удалить один shiftwidth в строке;
  > <  << >>             Добавить/удалить отступ в норм-ом или виз-ом реж-ме;
  :set cinoptions        Настройка отступов.
#----------------- Файлы ------------------------------------------------------
* :w                     Сохранение части файла в виз-ом режиме/всего в об-ом.
* :e!                    Переоткрыть файл.
* ZZ                     Выход с сохранением или из справ-го окна.
* [range]r{file | !cmd}  Вставка файла/вывода cmd.
* :w :wa :w>>name
  :saveas :file :edit
  :hide edit
  :args [other*.txt]
  :[N]next :prev :last
  :first 
* CTRL-^                 Переход между последними файлами;
  CTRL-w CTRL-^          Переход с разделением окна.
* $ view file            Открыть read-only.
* :oldfiles :e #<2       История файлов/ссылка на второй.
* :buffers :ls
  :[s]buffer 3
  :bnext :bprevious
  :bdelete 3
#----------------- Окна, вкладки ----------------------------------------------
* :close :only :[v]new
* :[sz][v]split {name}
  :[vertical]all
* [sz]CTRL-W _           Изменить размер окна.
  CTRL-W +
  CTRL-W -
* CTRL-W {H|J|K}L}       Переход между окнами.
  CTRL-W w
* tab split [file]
  tabedit {file}
* gt :tabonly            Переход по вкладкам/закрыть кроме текущей.
#----------------- vimdiff ----------------------------------------------------
* zo zc                  Фолдинг в vimdiff.
* [vertical] diffsplit
* ]c [c                  Переход по изменениям.
* dp do                  Прменить изменение в/из другой/го файла.
* :diffupdate            Обновить подсветку.
#----------------- Командная строка -------------------------------------------
* <S-Right> <S-Left>     Перемещение
  CTRL-B CTRL-E
* CTRL-W CTRL-U CTRL-C   Удалить слово/всю строку/выйти.
* <Tab> CTRL-{P|N}       ctrl комбинации после Tab;
  CTRL-D                 Список совпадений;
  CTRL-L                 Дополнить слово длиннейшим однозначным вар-то.
* history [/] 
  <Up> <Down>
  CTRL-{P|N}             В отличие от up down, не учитывает префикс.
* :q                     Command line window.
* gQ                     Ex mode, похож на cmd mode, но многокомандный.
* :!{cmd}                Выполнить внешнюю команду.
* :shell
#----------------- Отмена изменений -------------------------------------------
* u U                    Отмена посл-го/всех изм-ий в пос-ей редакт-мой строке;
  CTRL-R                 Отмена отмены; Проходят по активной ветке.
* g- g+                  К более ранней/поздней версии текста, активность ветки
                         неважна.
* :undolist              Показать листья в дереве изменений.
* :undo 2                Перейти на ветку с номером 2.
* :earlier 1f            Переход к версиям файла, которые были на момент
  :later 1f              сохранения; Необязательно на 1 шаг.
* :earlier 10{s|m|h|d}   Переход к версии файла в указанный момент.
* :later 1m  
#----------------- Разное -----------------------------------------------------
* q{reg} ... q           Записать макрос в reg (REG - добавить);
  @reg @@                Выполнить макрос/повторить.
* .                      Повторить последюю редактирующую команду.
* :{range}!cmd           Выполнить внешнюю команду над диапазоном.
  !{motion}cmd
* {vis block} {A|I|c|C|  + выделение строк блока через $.
  ~|u|U|r|<|>}
* text-objects           На месте {pos} и виз-ом реж-ме. :h text-objects.
* !{motion}{program}     Пропустить блок через внешнюю команду.
* v V CTRL-V             Визуальный режим/визуальная строка/виз-ый блок;
  v_o v_O                Смена угла;
  gv                     Перевыделить.
* CTRL-G                 Инфа о местоположении.
  g CTRL-G
* gq                     Форматировать текст (ширина строк, set textwidt).
* i_CTRL-{U|W}           Удалить слово слева/всё слева кроме отступа.
* i_CTRL-O               insert normal mode.
* CTRL-H                 Backspace.
* CTRL-I                 Tab.
* CTRL-[                 Esc.
* "* "+                  Primary selection/clipboard.
* :options
* :set {option}&         Вернуть значение по умолчанию.
* :set [no]number        Номера строк.
* :set [no]ruler
* :set textwidth
* :set viminfo
  :wviminfo! fnm         Перекинуть инфу между разными
  :rviminfo! fnm         vim экземплярами.
* :set sessionoptions
  :mksession f.vim       Сохранить/
  :source f.vim          загрузить сессию.
* :mkview :loadview      Как сессия, но для одного окна.
* Modelines              Установка опций для файла (спец строка в файле).
* :edit .                Открыть netrw file browser.
* :pwd :cd :cd -
  :lcd :tcd              Локальная директория окна/вкладки.
* vim -b datafile        Hex редактор; -b запрещает потенциальные
  :%!xxd :%!xxd -r       автокорректировки.
* :{i|c}abbrev           Создание аббревиатур.
  :abbreviate
* :argdo :windo :bufdo   Выполнить cmd на всех файлах-аргумента/окнах/буферах.
#----------------- Справка ----------------------------------------------------
* K                      Найти man для слова под курсором.
* :helgrep               Поиск по справке.
  :cnext :copen
* :help langmap
* :help ft-<filetype>-<functionality>    Пример: help ft-c-syntax.

 

pavlick
()

Управление моментом разрушения объекта

Форум — Development

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

struct S {
   const char *c;
   S(const char *c): c{c} {}
   ~S() {cout << c << endl;}
};

S &g1() {
   static S s{"g1"};
   return s;
}
S &g2() {
   static S s{"g2"};
   return s;
}
int main() {
   g1(); // создаём g1::S
   g2(); // создаём g2::S
   return 0;
}
Т.е создаю g1::S раньше g2::S, деструкторы в обратном порядке. Что смущает: может ли компилятор при каких-нибудь (не запрещено ли ему в принципе?) условиях заооптимизировать бесполезный на его взгляд вызов g1()/g2()?

 

pavlick
()

OpenVSP 3.19.1 — свободная САПР для проектирования и анализа геометрии летательных аппаратов

Новости — Open Source
OpenVSP 3.19.1 — свободная САПР для проектирования и анализа геометрии летательных аппаратов
Группа Open Source

OpenVSP — свободная параметрическая САПР для проектирования и анализа геометрии летательных аппаратов (CFD, FEM). Программа разрабатывается сотрудниками NASA Langley Research Center и включена в список ПО NASA Software Catalog.

17-19 сентября 2019 состоялся «OpenVSP Workshop 2019» на котором были представлены наработки и планы разработки ветки 3.19.x. 9 ноября состоялся релиз OpenVSP 3.19.0, а спустя чуть более недели был выпущен корректирующий релиз 3.19.1.

Ветка разработки OpenVSP 3.19.x включает три наиболее ожидаемых новшества: VSPAERO 6.0.0, Generic XSec Editor и автогенерируемую документацию к API с помощью Doxygen. Кроме того была проведена масштабная работа по улучшению и исправлению ошибок. Значительная часть данной работы была проведена командой ESAero, проспонсирована за счёт U.S. Air Force Research Laboratory.

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

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

 , , ,

atsym
()

Релиз Coreboot 4.11

Новости — Hardware and Drivers
Группа Hardware and Drivers

Состоялся релиз Coreboot 4.11 - свободной замены проприетарным прошивкам UEFI/BIOS, используемой для начальной инициализации железа перед передачей управления дополнению «payload», например SeaBIOS или GRUB2. Coreboot очень минималистичен, к тому же он предоставляет широкие возможности встраивания различных дополнений вроде утилиты вывода подробной системной информации coreinfo и тетриса tint, а также дискетных ОС: Kolibri, FreeDOS, MichalOS, Memtest, Snowdrop, FloppyBird и др.

В новой версии:

  • Почищен и унифицирован код многих платформ

  • Значительно улучшена поддержка чипсетов Mediatek 8173 и AMD Picasso 17h (Ryzen), а также RISC-V

  • Расширена поддержка vboot (свободного аналога проприетарному SecureBoot) — изначально он был только на хромбуках, но теперь появился и на другом железе

  • Добавлены 25 новых плат:

    AMD Padmelon, ASUS P5QL-EM, Emulation QEMU-AARCH64, Google Akemi / Arcada CML / Damu / Dood / Drallion / Dratini / Jacuzzi / Juniper / Kakadu / Kappa / Puff / Sarien CML / Treeya / Trogdor, Lenovo R60, Lenovo T410, Lenovo Thinkpad T440P, Lenovo X301, Razer Blade-Stealth KBL, Siemens MC-APL6, Supermicro X11SSH-TF / X11SSM-F.

  • Удалена поддержка единственной поддерживаемой платы MIPS (Google Urara) и архитектуры MIPS вообще, а также платы AMD Torpedo и кода AMD AGESA 12h

  • Улучшена нативная инициализация Intel-овских видеокарт в библиотеке libgfxinit

  • Исправлен спящий режим на некоторых AMD-шных платах, включая Lenovo G505S

В ближайшее после релиза время планируется удаление многих плат, не поддерживающих «relocatable ramstage», «C bootblock» и платформ использующих «Cache as RAM» без стадии postcar. Это ставит под, угрозу множество важных плат на базе AMD, в том числе сервер ASUS KGPE-D16 — самый мощный поддерживаемый coreboot-ом сервер, к тому же способный работать без блобов (libreboot). О серьёзности намерений свидетельствует ряд свежих изменений на review.coreboot.org, в особенности https://review.coreboot.org/c/coreboot/+/36961

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

 , , , ,

SakuraKun
()

GIMP 2.10.14

Новости — Мультимедиа
Группа Мультимедиа

Выпущена новая версия графического редактора GIMP.

Основные изменения:

  • появилась возможность просмотра и редактирования пикселей за пределами холста (пока без поддержки инструментов выделения);
  • добавлено опциональное редактирование слоёв с отключенной видимостью;
  • добавлен экспериментальный фильтр генерирования карты нормалей из карты высот и ещё несколько фильтров на базе GEGL (Bayer Matrix, Linear Sinusoid, Newsprint, Mean Curvature Blur);
  • ещё 27 старых фильтров теперь используют буферы GEGL (пока в режиме 8 разрядов на канал, не портированы в операции GEGL);
  • улучшена поддержка HEIF, TIFF и PDF;
  • улучшена загрузка поврежденных файлов XCF;
  • многократно ускорена работа с изображениями в градациях серого;
  • добавлена поддержка macOS Catalina.

В ближайшие пару месяцев планируется выпустить версию 2.99.2. Это будет первый релиз на базе GTK3 (ветка master в Git), с минимальным функциональным отличием от 2.10.x и объемным рефакторингом кода (удаление костылей, подготовка к запланированным на версию 3.2 новшествам).

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

 

AP
()

std::async deprecated (на самом деле нет)

Форум — Development

Проблема в том, что std::async не справляется (и фундаментально не может справляться) со своей задачей — предоставить task-based параллелизм. Подробнее см. [1]

Если верить Eli Bendersky [2], из-за указанных в [1] проблем (и не только) std::async почти пометили бумажкой «deprecated» в 17-м стандарте, но в последний момент решили подставить кастыль в виде [3], только ради того, чтобы сохранить лицо комитета стандартизации: шутка ли — в 11-м году принять фичу в стандарт, а уже в следующей редакции (14-я была минорной, не забывайте) пометить deprecated. Это поставит под сомнение адекватность и легитимность комитета.

Вот так всегда в C++: впопыхах напихали нерабочих фич в стандарт — потом подпирают кастылями.

[1] https://bartoszmilewski.com/2011/10/10/async-tasks-in-c11-not-quite-there-yet/
[2] http://eli.thegreenplace.net/2016/the-promises-and-challenges-of-stdasync-tas...
[3] http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3773.pdf

P.S. Лучше бы его и правда пометили deprecated.

 

utf8nowhere
()

Релиз PrusaSlicer 2.0.0 (раньше назывался Slic3r Prusa Edition/Slic3r PE)

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

PrusaSlicer - это слайсер, то есть программа, которая берёт 3D модель в виде сетки из обычных треугольников и конвертирует её в специальную программу управления трёхмерным принтером. Например в виде G-кода для FFF принтеров, в котором содержатся детальные инструкции о том, как нужно двигать печатающую головку (экструдер) в пространстве и сколько горячего пластика через неё выдавливать в конкретный момент времени. Кроме G-кода в этой версии добавили и генерацию слоёв растровых изображений для фотополимерных mSLA принтеров. Исходные 3D модели могут быть загружены из файлов форматов STL, OBJ или AMF.

Хотя PrusaSlicer разрабатывался с прицелом на опенсорсные принтеры Prusa, он может создавать G-код, совместимый с любым современным принтером на основе наработок RepRap, включая все с прошивками Marlin, Prusa (форк Marlin), Sprinter и Repetier. Также есть возможность генерации G-кода, поддерживаемого контроллерами Mach3, LinuxCNC и Machinekit.

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

Ссылки

>>> Домашняя страница

 , , prusaslicer, slic3r, slicer

Deleted
()

Выпуск пакета EQUINOX-3D и браузерного 3D движка Fusion engine

Новости — Мультимедиа
Выпуск пакета EQUINOX-3D и браузерного 3D движка Fusion engine
Группа Мультимедиа

Скромно и незаметно трудится Gabor Nagy над своим самобытным детищем, не часто радует релизами, но именно этим я хочу поделиться с вами (изюминка в конце).

EQUINOX-3D - это скромный, минималистичный пакет 3D моделирования, анимации, фотореалистичного рендеринга, работающий на Linux, Mac OS X и даже на SGI IRIX.

В новой версии v0.9.9 EQUINOX-3D:

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

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

 , , ,

ChekPuk
()

Stellarium 0.19.1

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

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

В общей сложности список изменений с предыдущей версии занимает почти 50 позиций.

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

 , , , ,

alex-w
()

Вышел NoRT CNC Control

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

Сегодня, после длительной разработки, вышла первая стабильная версия системы управления фрезерным станком с ЧПУ.

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

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

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

 

cvs-255
()

VPN-сервисы ответили отказом на желание Роскомнадзора приобщиться к блокировкам и фильтрации сайтов

Новости — Интернет
Группа Интернет

На днях Роскомнадзор прислал крупнейшим VPN-сервисам письмо с предложением сотрудничать по части блокировок сайтов и фильтрации контента в интернете. На принятие решения было дано 30 дней. Не совсем понятно, на что надеялся Роскомнадзор, но не прошло и дня, как большинство VPN-сервисов, за исключением российского «Kaspersky Secure Connection», отреагировали жестким отказом.

Какие решения предприняли VPN-сервисы:

  • TorGuard — в списке РКН, отказ + закрывает сервера в РФ
  • VyprVPN — в списке РКН, отказ
  • OpenVPN — в списке РКН, отказ
  • ProtonVPN — не в списке РКН, отказ
  • NordVPN — в списке РКН, отказ + рассмотрит варианты действий
  • Private Internet Access — не в списке РКН, отказ
  • Trust.Zone — не в списке РКН, отказ + закрывает сервера в РФ
  • VPN Unlimited — в списке РКН, отказ
  • Kaspersky Secure Connection — в списке РКН, согласие.

По ссылке можно прочитать подробные ответы компаний в адрес цензурного(*) ведомства.

* запрещено на территории Российской Федерации.

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

 , , , ,

anonymous
()

using FLTK

Форум — Development

Привет всем, если у кого-то имеется опыт разработки на FLTK, дайте совет пожалуйста!

Пытаюсь реализовать для «Fl_Input» функционал редактирования как в терминальной строке - стрелками вверх/вниз подгружать историю ввода. Но засада с обработкой клавиш стрелок - не получается подвесить отдельный обработчик события на «стрелки» - приходится только полностью все события клавиатуры обрабатывать в собственном цикле. Или например такой вариант:


Fl_Simple_Terminal *Tty = nullptr;
Fl_Input* Input = nullptr;

/// callback
void cb(Fl_Widget*, void*)
{
  auto key = Fl::event_key();
  if(key == FL_Up) Tty->printf( "%s\n", "UP-key" );
  else if(key == FL_Down) Tty->printf( "%s\n", "Down-key" );
  else Tty->printf( "%s\n", Input->value() );
  Input->take_focus();
  return;
}

/// MAIN
int main(int, char**)
{
  ...
  Fl::option(Fl::OPTION_ARROW_FOCUS, true);
  Tty = new Fl_Simple_Terminal(0, 0, width, tty_h);
  ...
  Input = new Fl_Input(0, tty_h, width, input_h, nullptr);
  Input->callback(cb);
  ...

В таком варианте корректно обрабатывается только одно нажатие на стрелку сразу после ввода/удаления символа в строке ввода. Два нажатия подряд не работают. Что-то надо переключить в состоянии, но что? Или может использовать другой класс для ввода строки?

Ответ (спасибо, rymis):

#include <functional>
#include <FL/Fl_Window.H>
#include <FL/Fl_Input.H>
#include <FL/Fl_Simple_Terminal.H>

Fl_Simple_Terminal *Tty = nullptr;
Fl_Input* Input = nullptr;

class History {
  public:
  void log (const char* msg){ Tty->printf( "%s\n", msg ); }
  void up  (void){ log("Up is pressed."); };
  void down(void){ log("Down is pressed."); };
  void add (const char* msg){ log(msg + 2); };
};

class MyInput : public Fl_Input {
    History hist;
public:
    template <typename...Args>
    MyInput(Args&&...args) : Fl_Input(std::forward<Args>(args)...) { }

    int handle(int ev) override {
       if (ev != FL_KEYDOWN) return Fl_Input::handle(ev);
       auto key = Fl::event_key();
       if (key == FL_Up) {
           hist.up();
           return 1;
       } else if (key == FL_Down) {
           hist.down();
           return 1;
       } else if (key == FL_Enter) {
           hist.add(value());
           value("$ ");
           return 1;
       }
       return Fl_Input::handle(ev);
    }
};

int main(int, char**) {
  int width = 500; int tty_h = 500; int inp_h = 24;
  Fl_Window *Win = new Fl_Window(width, tty_h + inp_h, "App");
  Win->begin();
  Tty = new Fl_Simple_Terminal(0, 0, width, tty_h);
  Input = new MyInput(0, tty_h - 3, width, inp_h, nullptr);
  Input->insert("$ ");
  Win->end();
  Win->resizable(Tty);
  Win->show();
  Fl::focus(Input);
  return Fl::run();
}

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

 ,

bigov
()

Конспект по GNU Make

Форум — Development

Привет, я штудировал доки по Make (уже второй раз за несколько лет) и пожалел о том, что в прошлый раз не составил небольшой конспект. Оставлю здесь на случай, когда потребуется освежить память, может и ещё кто сочтёт полезным.

1.  include / -include - включить Makefile, дупускаются shell
    шаблоны. С / без ошибки при отсутствии файла. После прочтения всего
    Makefile, имена файлов, которые указаны  директиве, проверяются на
    возможность обновления рецептами. В случае обновления включаются
    заново (основа для автоматической генерации зависимостей).

2.  Secondary expansion - после чтения Makefile и перед фазой
    обновления целей, производится второй проход по списку
    пререквизитов. Доступны автоматические переменные.
        .SECONDEXPANSION:
        main_OBJS := main.o try.o test.o
        lib_OBJS := lib.o api.o
        main lib: $$($$@_OBJS)

3.  Order-only пререквизиты - цель не будет считаться устаревшей при
    выполнении рецепта такого пререквизита
        targets : normal_prereq | order_only_prereq.

4.  Переменная VPATH - пути поиска всего. Директива vpath - пути поиска
    для определённого класса файлов.

5.  .PHONY : target - цель target всегда устаревшая. Для target не
    производится поиск неявных правил.

6.  Если в качестве пререквизита -lname, то поиск библиотеки в
    следующих местах: в текущей директории, vpath и VPATH, /lib,
    /usr/lib, prefix/lib.

7.  Если существуют несколько правил с одним двоеточием для одной цели,
    то все они объединяются в одно правило. Рецепт может быть указан
    лишь однажды, если его нет, то поиск среди неявных правил.

8.  Если существуют несколько правил с двумя двоеточием для одной цели,
    то каждое правило независимо от другого. Каждое правило может иметь
    свой рецепт иначе поиск среди неявных правил. Могут выполниться все
    рецепты, ни одного не выполниться, выполниться лишь часть рецептов.

9.  target : ; пустой рецепт, не будет производиться поиск неявного
    правила.

10. Static pattern rule
       targets : target-pattern : prereq-pattern
            recipe
       ${objects} : %.o : %.c
    Часть имени соответствующая % - stem.

11. Каждая строка рецепта исполняется в своей shell (в одной есле
    .ONESHELL). Shell, которая используется, хранится в SHELL, опции в
    .SHELLFLAGS. Значение SHELL не наследуется из окружения make.
    Exit-status shell, выполняющей команду, содержится в .SHELLSTATUS.

12. В рецепте (в начале строки):
       @ - отключает печать команды (-n и --just-print всё равно
           печатают такие команды);
       + - выполнить даже если заданы -n или --just-print;
       - - игнорировать ошибки при исполнении команды.

13. В рецепте: обращение к make переменной ${var}, к shell переменной
    $${var}.

14. При рекурсивном вызове make использовать переменную ${MAKE}
       $(MAKE) -C subdir

15. [override] undefine var - удалить переменную.

16. export / unexport var [=val] - экспортировать / не экспортировать
    переменную в sub-make. Одинокий export / unexport - экспортировать
    / не экспортировать все переменные.

17. var = val - ссылка;
    var := val - обычная переменная;
    var += val - ссылка ли, зависит от типа val;
    var ?= val - присвоить значение если var не объявлена;
    var != cmd - выполнить cmd в shell;
    ${foo:.o=.c} - заменить .o в конце слов на .c;
    ${foo:%.o=%.c}

18. Иерархия переменных:
       1. объявлянные внутри Makefile с override (дальнейшая
          модификация возможно только с override);
       2. переданные через командную строку;
       3. объявленные внутри Makefile без override;
       4. из окружения, где запускается make.
    Экспортируются переменные в sub-make:
       1. из окружения, где запускается make (редактирование внутри
          Makefile не влияет);
       2. переданные через командную строку (если Makefile редактирует
          с override, то в sub-make приходит значение из командной
          строки);
       3. объявленные внутри Makefile с export.

19. MAKEFLAGS - содержит флаги переданные при запуске make +
    переменные со значениями переданными через командрую строку, но не
    содержит цели. В переменную можно добавить флаги внутри Makefile
    или в окружении, в котором запускается make).

20. MAKELEVEL - содержит целое число, которое указывает на глубину
    рекурсии. 0 для главного make.

21. MAKECMDGOALS - содержит цели заданные при запуске make.

22. Target-specific переменные
       prog : [private] CFLAGS=-g
       prog : prog.o foo.o bar.o
           recipe
     задаёт CFLAGS в рецептах для prog, prog.o, foo.o, bar.o. Если
     private стоит, то пререквизиты не наследуют CFLAGS. Если
     переменная объявлена private на глобальном уровне, то она не
     будет видна ни в одно рецепте.

23. Pattern-specific переменные
       %.o : CFLAGS=-g

24. Match-anything pattern rule (цель одинокий %). Бывают:
      1. терминальные (%::pregeq) - prereq должен существовать, не
         может быть создан посредством другого правила.
      2. иначе - правило будет рассмотрено только если нет других
         неявных правил , чья цель совпадает с искомой.

25. Last-resort default rule
      1. %::
      2. .DEFAULT:      # если рецепт не указан, то текущее правило
                          будет удалено

26. Отмена неявного правила
       %.o:%.s
    указать ту же цель и те же пререквизиты, рецепт не указывать.
    
27. Архивы:
      1. при использовании нотации со скобками ( libname(objs) ) не
         допускать параллельного запуска make (-j опция).
      2. внутри архива содержится таблица символов (__.SYMDEF), ranlib
         lib.a её обновляет. GNU ar не требует запуска вручную,
         запускает её автоматически.

28. Договорённости:
      * Каждый Makefile должен содержать
          SHELL = /bin/sh
        для избежания проблем на системах, где SHELL может быть
        унаследована из окружения.
        
      * Не плохо задать суффиксы для которых будет производиться поиск
        неявных правил
           .SUFFIXES:             # удаляет все раннее установленные
           .SUFFIXES: .c .o
           
      * ar bison cc flex install ld ldconfig lex make makeinfo ranlib
        texi2dvi yacc chgrp chmod chown mknod - вызывать через
        переменные ${AR}, ... . Для каждой переменной-команды
        переменная с опциями образуется добавлением FLAGS к имени
        (исключение - CFLAGS, YFLAGS, LFLAGS).

       * команды, которые следует использовать напраямую (без
         переменных): awk cat cmp cp diff echo egrep expr false grep
         install-info ln ls mkdir mv printf pwd rm rmdir sed sleep
         sort tar test touch tr true gzip.

       * каждый Makefile должен задавать переменные: INSTALL,
         INSTALL_PROGRAM (дефолтно ${INSTALL}), INSTALL_DATA (дефолтно
         ${INSTALL} -m 644).

       * staged install - для целей install и uninstall поддерживать
         переменную DESTDIR
            $(INSTALL_PROGRAM) foo $(DESTDIR)$(bindir)/foo
            $(INSTALL_DATA) libfoo.a $(DESTDIR)$(libdir)/libfoo.a

       * установка info и man страниц в цели install.

       * Разбивка install на $(PRE_INSTALL), $(POST_INSTALL),
         $(NORMAL_INSTALL). Разбивка uninstall на $(PRE_UNINSTALL),
         $(POST_UNINSTALL), $(NORMAL_UNINSTALL).

Господа, у меня вот ещё какой вопрос имеется: вот написал я какую-нибудь софтину, как мне определиться с именами файлов и всего проекта? Т.е. чтобы небыло конфликтов имён с другим софтом при make install. К тому же если сегодня конфликтов нет, то завтра у меня нет никаких гарантий, что такой софт не появится. Как тут правильно поступать? Каждый проект должен писать какие-то проверки на конфликты имён? Если так, то делает ли это автоматом autoconf+automake? cmake?

 

pavlick
()

Динамические библиотеки, конспект

Форум — Development

Привет. Так вышло, что пришлось основательно разобраться в теме и пока память свежа изложил всё в виде небольшой памятки. Удобно по прошествии некоторого времени освежить память прочитав небольшой конспект. Вообще, по-хорошему, блог что ли какой завести )). Просьба - не флудить, ссылки/комментарии/дополнения по теме приветствуются. ЗЫ: подразумевается, что либы -fpic

1. Утилиты readelf, objdump. Читать man elf, man ld.so. N в именах структор
   подразумевает 32 или 64.
2. Структура ELF файла:
   1. заголовок (смещение 0, struct ElfN_Ehdr). Readelf::ELF Header
   2. program header table (массив struct ElfN_Phdr). Содержит информацию о том
      как отображать секции в память процесса. Readelf::Program Headers
   3. section header table (массив struct ElfN_Shdr). Readelf::Section Headers
3. link_map   
3.1. Загруженные в память модули попадают в список (массив) из struct link_map.
     Списков может быть много, каждый список - "пространство имён". Для
     загрузки модулей в неглобальный список (создание нового) используется
     dlmopen().
3.1. Получать link_map модуля через dlinfo() или dladdr1():
     [--code--]
     #define _GNU_SOURCE
     #include <link.h>
     #include <dlfcn.h>
     #include <stdio.h>
     int main()
     {
        static char addr_in_mod;
        Dl_info __info;
        struct link_map *lm;
        if(dladdr1(&addr_in_mod, &__info, (void*)&lm, RTLD_DL_LINKMAP) != 0) {
           printf("link_map:\n");
           struct link_map *i = lm;
           for(; i->l_prev != NULL; i = i->l_prev);
           for (; i != NULL; i = i->l_next)
              printf("addr diff=%p  name=%s%s",(void*)i->l_addr,  i->l_name, i==lm?"  <--cur\n":"\n");
        }
     }
     //output:
     //link_map:
     //addr diff=0x41f000  name=  <--current module
     //addr diff=0xb7fc4000  name=linux-gate.so.1
     //addr diff=0xb7fa3000  name=/lib/libdl.so.2
     //addr diff=0xb7dc5000  name=/lib/libc.so.6
     //addr diff=0xb7fc6000  name=/lib/ld-linux.so.2
     [/--code--]
3.2. Во время переразмещений символ ищется в модулях указанных в link_map
     списке начиная от начала списка т.е. порядок важен, "gcc -ls1 -ls2"
     libs1.so находится в списке раньше, чем libs2.so.
3.3. При добавлении библиотеки через LD_PRELOAD, она попадает перед остальными
     разделяемыми библиотеками в глобальном link_map списке.
3.4. Опция RTLD_DEEPBIND для dlopen - собственные символы модуля приоритетнее
     символов из вышестоящих в link_map списке модулей.
     Собственные символы загружаемой библиотеки содержат:
      1. символы из самой загружаемой библиотеке
      2. символы из библиотек, которые были слинкованы с загружаемой из
         командной строки (у первых приоритет выше).
3.5. При загрузки через dlopen, библиотеки добавленные с флагом RTLD_GLOBAL
     имеют приоритет над RTLD_LOCAL, не смотря на то, что находятся в link_map
     списке позже (не относится к получению void f() через dlsym()). Например:
     [--code--]
     // предоставляет void f(), ссылается на void f().
     dlopen("lib1.so", RTLD_LOCAL);
     // предоставляет void f().
     dlopen("lib2.so", RTLD_GLOBAL);
     // при ленивом переразмещении, lib1.so будет ссылаться на lib2.so::f().
     [/--code--]
4. RTLD_GLOBAL - символы из загруженного модуля будут участвовать в
   переразмещениях для заргуженных в дальнейшем библиотек. RTLD_LOCAL - не будут.
   Если lib2.so линкуется с lib1.so через командную строку
   "gcc -fpic -shared -l2 s.c -o lib1.so", то видимость символов из lib2.so
   наследуется от видимости символов из lib1.so:
   [--code--]
   dlopen("./lib1.so", RTLD_LAZY|RTLD_GLOBAL);    // символы из lib2.so глобальные
   dlopen("./lib1.so", RTLD_LAZY|RTLD_LOCAL);     // символы из lib2.so локальные
   [/--code--]
   Если lib2.so подгружается из lib1.so через dlopen(), то видимость символов
   из lib2.so контролируется флагом dlopen() при загрузке lib2.so. Способ
   загрузки (через командную строку или dlopen) и флаг для dlopen при
   загрузки lib1.so значения не имеет.
5. Переразмещение (relocation).
5.1. Переразмещение - процесс соединения символьной ссылки с символьным
     определением.
     Переразмещение: ленивое - загрузчик вызывается при ссылке на символ, и
     ненеленивое - переразмещение при загрузке. Переразмещение переменных всегда
     неленивое.
5.2. Символы, требующие переразмещения, содержатся в .rel... секциях. В них
     находятся ElfN_Rel структуры.
     [--code--]
     typedef struct {
         Elf32_Addr r_offset;    \\ адрес внесения правки (адрес в GOT, например. readelf::Offset).
         uint32_t   r_info;      \\ содержит тип переразмещения и индекс в таблице символов (массив Elf32_Sym[]).
     } Elf32_Rel;
     typedef struct {
         uint32_t      st_name;   \\ индекс в таблице строк. Т.е. сопостовляет символ с Си строкой.
         Elf32_Addr    st_value;  \\ адрес символа в текущем модуле (readelf::Sym.Value).
         uint32_t      st_size;
         unsigned char st_info;
         unsigned char st_other;
         uint16_t      st_shndx;
     } Elf32_Sym;
     [/--code--]
5.3. Механизм обращения к переменным (требующим переразмещений):
     1. линкер на старте правит .got секцию, она начинает указывать на нужные
        данные.
     2. ссылка на переменную в коде (в .text секции):
          [--code--]
          call   44c <__x86.get_pc_thunk.ax>  # получаем в eax адрес следующей инструкции
          add    $0x1bcb,%eax                 # в eax адрес .got секции
          mov    0x14(%eax),%edx              # отступ от края .got на адрес переменной,
                                              # разыменовываем в edx
          [/--code--]
5.4. Механизм обращения к функциям, для пример - exfn():
     1. ссылка на exfn() в коде (в .text секции)
     2. переход на "трамплин" в .plt секции - plt@exfn()
     3. переход на разыменованный указатель из .got.plt, если переразмещение
        уже было произведено, то попадаем на exfn(), иначе:
        3.1. возврат в plt@exfn(), в стек кладётся смещение в .rel.plt
             секции Elf32_Rel структуры и указатель на link_map список
        3.2. вызов ld.so, правится указатель в .got.plt
        3.3. переход на exfn().
6. .dynamic секция может быть прочитана из программы через массив _DYNAMIC[],
   который содержит struct ElfN_Dyn, автоматически заполняется линкером.
7. Экспортируемые символы из elf модуля указываются в .dynsym секции.
8. -rdynamic опция линкера (для исполняемого ELF) - символы из exe, которые не
   были востребованы библиотеками, указанными в командной строке, не
   экспортируются (не указываются в .dynsym секции) и не участвуют в
   переразмещениях в библиотеках, которые подргружаются через dlopen. Данная
   опция заставляет линкер помещать в таблицу все функции.
9. Управление экспортом из модуля
   * Управление экспортом по умолчанию:
     gcc -fvisibility=default
     -fvisibility=hidden
     -fvisibility=internal
     -fvisibility=protected
   * Управление экспортом посимвольно:
     __attribute__ ((visibility ("hidden")));
     __attribute__ ((visibility ("hidden")))
   * Для группы:
     #pragma GCC visibility push(hidden)
     ...
     #pragma GCC visibility pop
   * static и анонимные namespace
   * Управление эспортом через export map, через опцию --version-script

 , , ,

pavlick
()

В чём разница между alignof в C и в C++?

Форум — Development

По мотивам Неверное выравнивание начатого pavlick

Возьмём такой код на C:

#include <stdio.h>
#include <stdalign.h>

int main() {
	printf("alignof(double) == %u\n", alignof(double));
}

Возьмём компилятор:
% gcc --version
gcc (Ubuntu 4.9.2-0ubuntu1~14.04) 4.9.2
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Скомпилируем и запустим (ВНИМАНИЕ! 32 БИТА!):
% gcc -march=i686 -m32 -std=c11 -o test-c test-c.c

% ./test-c
alignof(double) == 4

Теперь возьмём такой код на C++:
#include <iostream>

int main() {
	std::cout << "alignof(double) == " << alignof(double) << '\n';
}

Компилятор:
% g++ --version
g++ (Ubuntu 4.9.2-0ubuntu1~14.04) 4.9.2
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Запускаем:
% g++ -march=i686 -m32 -std=c++11 -o test-cpp test-cpp.cc

% ./test-cpp
alignof(double) == 8

Итак, почему выравнивание разное?

P.S. В x86_64 в обоих случаях будет 8.

 , , ,

proud_anon
()