LINUX.ORG.RU

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

Форум — Mobile

Android, зонды, безопасность, СПО, паранойя

Disclaimer1: Проблема с данным маном в том, что местной аудитории, например, плевать на ведроид, а тому же 4pda наплевать на фанатичный СПО и избавление от зондов. Рискнем и запостим здесь.

Disclaimer2: Все описанное является суммой наклопленного мной опыта вперемешку с моим личным мнением. Пишите комменты, будем улучшать-дополнять-чинить

Уровень прошивки

Практически все стоковые прошивки на сегодняшний день идут с gapps (Google Apps). Что же это за зверь:

  • Любое приложение (даже не требуещее никаких прав) может с ним общаться.
  • Gapps имеют доступ к сети.
  • Gapps позволяют Google в любой момент установить/удалить с вашего телефона любое приложение.
  • Gapps постоянно держат открытое сетевое соединение с серверами гугла (для нужд push-нотификаций).
  • Gapps — нереальное огромное количество кода. Стоковый образ (если верить opengapps) будет весить около 700Мб.

ААААА, как это удолить этот рассадник потенциальных уязвимостей и жора батарейки?

Сложный вопрос, на самом деле. Есть три варианта действий:

  • Новый и простой, и профитный способ. Появилась прошивка «LingeageOS for microG». Если ваше устройство поддерживает её, просто ставьте её и наслаждайтесь. Fdroid+MicroG+пуши+signature spoofing+unlp+OTA-обновления из коробки
  • Самый простой способ. Если ваш андроид достаточно старый (на достаточно новом не удастся отключить самый главный компонент gapps), из Настройки->Приложения отключите все, связанное с Google (особенно, Google Service Frameworks):
    • root не требуется;
    • push-уведомления работать не будут;
    • на устройстве останется огромная и потенциальная куча гугловского дерьма, хоть и менее активная.
  • Способ посложнее. Накатываем root и вручную удаляем все пакеты и библиотеки, требуемые гуглу:
    • требуется root и разблокировка загрузчика;
    • минимальное количество зондов без смены прошивку на полностью опенсорсную;
    • увы, в последних версиях андроида вам, скорее всего, придется оставить несколько пакетов (вроде GoogleSetupWizard), иначе система не загрузится.
  • Самый профитный способ. Ставим альтернативную прошивку (или мотаем до следующей секции и покупаем устройство с пгавославной прошивкой без зондов из коробки). Наслаждаемся.
    • Требуется root, разблокировка загрузчика, шаманство и местами смена устройства.

Я тут начал наслаждаться, но вдруг понадобились пуши, да и Uber требует зонды. Что делать?

Вдоль

Попробовать поставить MicroG, свободную реализацию клиентской части гуглозондов. Самая больная часть: помимо собственно MicroG вам нужно будет запилить себе Signature Spoofing. Коротко говоря, это обход защитного механизма, не позволяющего прикидываться gapps'ами кому попало. Для этого необходимо либо патчить прошивку при помощи Xposed/Needle/Haystack, либо использовать совместимую прошивку (смотрите список, по ссылке, их стало очень много). Все подробности по той ссылке.

MicroG позволяет завести пуши, сервисы геолокации (со множеством бекендов, ищите nlp location backend в f-droid) и большое количество софта (когда я в последний раз тыкал, работали даже покемоны).

Уровень софта

Без гуглозондов жить есть!

https://f-droid.org/ — каталог с опенсорсным софтом.

Предлагаю вам следующий список приложений, способный заменить типичный набор проприетари из типичной вендорской прошивки. Аналогичный список: https://github.com/Datenschutz/awesome-FOSS-apps

  • Yalp store. Позволяет ставить приложения из Google Play (да, иногда это все-таки нужно), в том числе через общий аккаунт. Не требует зондов.
    • Позволяет так же выкачивать купленные приложения (но не факт, что они заработают: они при работе могут проверять лиценизию через gapps, возможно, тут может помочь microg).
    • Альтернативно, воспользуйтесь моим решением для выкачивания софта прямо в свой репозиторий f-droid.
  • K-9 Mail. Почтовый клиент.
  • DAVDroid. Синхронизация контактов с owncloud/nextcloud.
  • Gadgetbridge. Синхронизация с умными часами и браслетами (pebble, mi band и некоторые другие)
  • NewPipe. Клиент для YouTube. Умеет воспроизводить видео в фоновом режиме как музыку, загружать файлы.
  • Odyssey. Просто материальный музыкальный плеер, но в последнее время очень нужный, т.к. вендоры повадились заменять в прошивке плеер на Google Music.
  • Набор простых и красивых затычек для различных приложений — simple mobile tools.
  • Файрволл AFWall+ файрволл (имеет Xposed модуль для расширения возможностей)
  • Amplify Battery Extender.
  • DNS66.
  • KDE Connect.
  • OpenKeychain.
  • OpenVPN FOSS.
  • Картография и навигация: Maps.Me (приз симпатий от комментаторов), OsmAnd (приз глюкалова от меня, но щито поделать).
  • Список стал очень жирным. Пока новые элементы не добавляю, думаю над критериями включения в него софта.

Если вы будете ставить проприетарный софт, помните о следующем:

  • Желательно зайти в настройки приложения и вручную запретить доступ ко всем ненужным разрешениям, дабы не промахнуться в нужный момент.
  • Отключите приложению фоновый доступ к сети (если у вас свежий Android) или вообще доступ к сети (если у вас стоит файрволл).
  • Малвари вроде «Сбербанк Онлайн» вообще лучше создать отдельный аккаунт на телефоне.
  • Яндексовским приложениям нельзя давать доступ к местоположению. Вообще никаким — все сливают.
  • Проприетарь может читать названия аккаунтов, даже не принадлежащих ей. Называйте их максимально обще, т.е. вместо «sportloto@syncserver.com» делайте «contacts sync».

Права суперпользователя

Читая васянский 4pda вы часто можете увидеть «ну и накатываем SuperSU.zip». Не делайте этого. Есть прекрасный опенсорсный superuser, совместимый со свежими ведроидами. Нужно лишь поставить zip (используйте beta на android >=6) и apk.

Если ваша прошивка основана на LineageOS, то все еще проще. Где-то рядом с загрузками в директории extra должен валяться zip, включающий встроенные и интегрированные в прошивку права суперпользователя. Профит.

XPosed

XPosed — опенсорсный фреймворк для низкоуровневых хаков.

  • Не доступен для свежих андроидов.
  • Позволяет заставить не увидеть root всякие «Сбербанки Онлайн».
  • Имеет кучу некрофильских и неопенсорсных модулей. Осторожнее.
  • Легким движением руки может окирпичить прошивку.
  • Полезные модули:
    • PlayPermissionsExposed
    • YouTubeAdAway (но все-таки советую использовать NewPipe, LightTube, WebTube, SkyTube или MiniTube. Тысячи их!)
    • XPrivacy — по своей сути это «песочница» для любого, даже системного, ПО. Xprivacy применяет правила ко всему ПО. Эти правила можно создавать самому или качать готовые. То есть, к примеру, если установлено нечто местами полезное, но попутно показывающее свою рекламу, Xprivacy можно просто запретить этому ПО доступ в сеть. Или если очередная косынка хочет интернет, список контактов, доступ к микрофону и камере, то с Xprivacy это легко и просто запрещается конкретно этой гадости и она даже будет при этом работать не имея доступа к тому, что ей будет запрещено.

Уровень устройства

Тут тоже всё плохо. Выбор:

  • Рандомный флагман с хорошей поддержкой LineageOS (CyanogenMod). Поддержка, вероятно, будет хорошей, секьюрити-апдейты будут приходить долго (например, для htc desire hd цианоген обновлялся до самого конца — декабря 2016 года), но вот версия андроида, скорее всего, застрянет. Обычно дорого. Можно искать по списку официально поддерживаемых линейкой устройств.
  • OneplusOne / Wileyfox Swift 1. Поставлялись с CyanogenOS, имеют хорошее коммьюнити разработчиков, будут долго обновляться в софтовой части. В железной — все плохо. 1+1 уже довольно старый и хорошие запчасти купить сложно. Wileyfox изначально имел несколько проблем, в т.ч. слабенькую батарейку. Компенсируется ценой, местами можно найти новое в продаже. Довольно бюджетно.
  • Fairphone 2. Очень дорого, очень хорошо. Но это в теории, как там на практике — хз, не пользовался, отпишитесь.
  • Рандомный телефон с официальным портом los. Сойдет, главное, чтобы фатальных багов в порте не было. Долгой жизни порта не ждите.
  • Рандомный телефон с васянским los. Совсем плохо, но если телефон уже куплен, ничего не поделать.
  • Рандомный телефон с васянским ведроидом, основанным на стоковой прошивке / без исходников / проч. Лучше такое не ставить, а подготовить прошивку самостоятельно, смотрите выше и ниже.

Следует также заметить, что:

  • Существует несколько устройств с CyanogenOS, без доступной Cyanogenmod. В комплекте идут сервисы microsoft, gapps и много разной другой блотвари. Исходники обычно зажабены. Пример устройств: Wileyfox Spark, Wileyfox Swift 2(|+|x).
  • Выбирая устройство, так же загляните на его страничку на 4pda. Ресурс хоть и васянский, но очень полезный: можно увидеть список доступных прошивок, FAQ по типичным проблемом, список самых вероятных заводских проблем (которые можно проверить еще перед покупкой).

Уровень физической безопасности

Для чего нужна физическая безопасность:

Допустим, ваш девайс попал в руки злоумышленнику.

  • Во-первых, вы хотите, чтобы он не имел никакой возможности прочитать важные файлы с вашего телефона (кейз ФБ-1).
  • Во-вторых, вы хотите узнать, не добавил ли он кейлоггеров в ваш загрузчик (кейз ФБ-2).

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

Я бы на вашем месте на это не рассчитывал.

  • Аппаратные защиты часто не надежны и опираются на принципах безопасности через неясность, в них переодически находят уязвимости
  • На прекрасных, казалось бы, телефонах Xiaomi вы не сможете разблокировать загрузчик, если с Xiaomi что-либо случится: разблокировка производится с участием интернета при помощи (работающей только под Windows) программы, требующей их аккаунта и доступа к интернету. У HTC похожая ситуация, но в несколько более мягких условиях.
    • Скорее всего, это доставит неудобств именно вам, а не злоумышленнику
  • Всякие проприетарные системы полнодискового шифрования тоже не выдерживают проверок специалистами.

Выводы:

  • Для хранения ваших секретных файлов в безопасности от ФБ-1 используйте, к примеру, Secrecy.
  • «Таблеток» от ФБ-2 на сегодняшний день нет. Промбируйте телефон при помощи скотча и волос и не расставайтесь с ним.
  • Лучше все-таки не хранить никакие важные данные на телефоне.

Модули сотовой связи

В каждом мобильном телефоне, почти каждом планшете есть GSM-модуль мобильной связи. Это —

  • Фактически отдельное устройство, обычно имеющее максимальный доступ к процессору, памяти и переферии. Зачем это делают — черт знает. Возможны исключения, нужно уточнять в каждом отдельном случае.
  • Идентифиционный модуль, который постоянно разговаривает с воздухом.
  • Куча проприетарного кода, который никто не анализировал. В тех немногих случаях, когда анализировали — находили кучу всего интересного.
  • Работает это все на протоколах, местами разработанные в 80-х годах.

Так что тут все настолько плохо, что я даже предложить ничего не могу. Страдайте.

Вроде, все, что хотел сказать. Выдыхаю

 , , , ,

derlafff
()
Новости — Open Source

rfcreader 0.4

Группа Open Source

Вышла новая версия программы для поиска документов RFC с интерфейсом на curses — 0.4.
Новые возможности:

  • обработка изменения размеров терминала;
  • выбор просмотра: txt или pdf (если доступно);
  • поиск ключевых слов теперь не зависит от регистра букв;
  • обновление теперь осуществляется с помощью той же программы.

Обновление базы документов RFC:

rfcreader -update
Подготовлены deb-пакеты для установки.

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

 ,

u0atgKIRznY5
()
Форум — Development

Подскажите CMSку моей мечты

Сразу скажу, не уверен, что такое вообще существует в природе, ибо требования у меня противоположны всему, что сейчас воспринимается как мейнстрим. В общем, нужна CMS для сайтов, которые заведомо _не_ относятся (и никогда не будут относиться) к категории «высоконагруженных». При этом имеются два совершенно категорических требования:

1) свободное распространение и использование без ограничений (в том числе без всяких обязательных ссылок и т.п.)

2) ничего тьюринг-полного на стороне клиента; JS, HTML5, CSS3 запрещены под страхом смертной казни, то есть если CMS генерит что-то из перечисленного, то она не рассматривается вообще, вот то есть даром не нужна; в идеале — генерит XHTML и использует мелкий CSS-файлик на десяток классов;

Кроме того, есть ещё несколько более мягких, но тоже существенных пожеланий:

3) Язык реализации. В идеале она вообще должна быть написана на C или C++ с использованием минимума (лучше — zero) внешних библиотек, но такого, скорее всего, не бывает. PHP я терпеть ещё готов, Perl с его системой библиотек и dependecny hell — уже с трудом, что касается Питона, Руби, Джавы и прочей экзотики — мне проще будет её самому написать. Или без сайта обойтись.

4) Хранилище. Идеальная с моей точки зрения CMS не использует никакие СУБД вообще от слова совсем, то есть даже SQLite. Для хранения всего и вся — обычные текстовые файлы в обычных директориях.

5) Кастомизация. Сменные темы, среди которых есть что-нибудь лёгкое и НЕ привязанное к конкретной ширине экрана.

При этом она должна обязательно поддерживать настраиваемую навигацию, блоки, появляющиеся на определённых страницах (на всех или на некоторых), а также пользовательские комментарии (крайне желательно, чтобы пользователи могли заходить со своими OpenID — да, я имел в виду именно OpenID, а не OAUTH).

Если кто видел что-то подобное, киньте ссылочку :-)

 

Croco
()
Форум — Desktop

Лютейшее ШГ - как побороть?

Дистр - manjaro, i3wm. В настройках есть галочки про хинтинг, но не помогает. Подцепил репы bohoomil infinality - а в них, внезапно, версии пакетов старее.

На экране сейчас просто невероятная радуга. Вот как оно сейчас выглядит.

Никогда не сталкивался с настолько жёсткой ситуацией. Ну и как правило, обычно было достаточно обновиться с реп infinality, да выбрать fc-preset.

 , ,

ekzotech
()
Форум — Science & Engineering

По просьбам трудящихся, ОФФТОПИК ЛИСТ S&E (неофициальный)

Этот раздел форума, как подсказывает описание, был создан «для обсуждения научных и инженерно-технических тем». Несмотря на то, что критерии «научности» разработаны уже довольно давно, и используются весьма эффективно, раз за разом в S&E появляются одни и те же споры на одни и те же не совсем научные темы.

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

Итак, платиновые треды S&E (пока только современная фундаментальная физика, специалисты из других областей приглашаются добавить свои наболевшие баяны, если таковые имеются):

  1. Я обнаружил парадокс СТО! Я опроверг Эйнштейна!
    А ты вообще читал СТО? Скорее всего нет. А согласись полезно хотя бы знать ту теорию которую ты собрался опровергать.
  2. Да, я ее читал и вообще в курсе. Я все еще уверен что я прав, а Эйнштейн нет.
    Скорее всего ты просто чего-то из прочитанного не понял. Вот в этой статье подробно разбираются все самые известные парадоксы СТО.
  3. СТО не работает на микромасштабах/в космологии/вообще нигде. Зашоренные физики не хотят открыть глаза на истину!
    Начнем с того, что СТО уже больше ста лет. Для сравнения, примерно в то же время когда Эйнштейн писал свои статьи, свой первый самолет построили братья Райт. Так вот, современная физика примерно настолько же отстоит от теории Эйнштейна насколько современная авиация отстоит от «Флайера-1».
    Продолжим тем, что СТО никогда не разрабатывалась как теория для практического решения каких бы то ни было задач. СТО была программной теорией призваной объяснить нестыковки между электромагнетизмом Максвелла и Ньютоновской механикой. СТО — это мысленный эксперимент, и в качестве такового прекрасно работает и по сей день.
  4. ОТО не работает/не подтверждается экспериментами/38 микросекунд в GPS это вранье!
    Ну я думаю тут бесполезно давать ссылки на всевозможные научные статьи, ты ведь все равно не поверишь, и скажешь что это они нам мозги пудрят, а на самом деле никаких поправок в свои спутники не вносят.
    Но зато можно дать ссылку на официальный мануал по приемникам GPS: http://www.gps.gov/technical/icwg/ICD-GPS-200C.pdf читать параграф 20.3.3.3.3.1
    В соответствии с этим мануалом делаются абсолютно все приемники GPS, и тут уж соврать не выйдет. Все приемники в мире вносят описанные в этом параграфе поправки при вычислении координат и получают верный ответ. Остается только предположить всемирный заговор, в который вовлечены даже китайцы, которые варганят GPS приемники в подвале на коленке.
  5. Все современные теории не верны, потому что базируются на ложных принципах! Вот Эйнштейн...
    Да оставьте вы уже дедушку в покое! Вклад Эйнштейна в науку, конечно, велик, но к квантовым теориям он не имеет никакого отношения. Он вообще в них не верил и был их противником до самой своей смерти. Отцом современных физических теорий является Стивен Вайнберг, и если ты сейчас впервые услышал эту фамилию, то тебе в тредах по современной физике вообще делать нечего.
  6. Все современные теории не верны, потому что описывают выдуманные объекты не существующие в реальности. А на самом деле все не так.
    Ну как оно там «на самом деле» не знает никто. Это знать просто невозможно. А что отличает верную теорию от неверной, так это способность предсказывать результаты экспериментов. Вот краткий список исторически значимых экспериментов:
    • Эффект Зеемана, расщепление спектральных линий (1897 год)
    • Тормозное излучение электрона (1909 год)
    • Комптоновское рассеивание, рассеивание фотонов на заряженных частицах (1923 год)
    • Бета-распад нейтрона (1933 год)
    • Эксперимент Ву, нарушение четности (1957 год)
    • Распад каона, нарушение CP-симметрии (1964 год)
    • Нейтральные токи (1973 год)
    • J/Psi, Upsilon и прочие мезоны (1974, 1977, далее везде)
    Эти эксперименты, это не просто красивые слова, это конкретные числа и результаты. И можно долго спорить существует там Z-бозон или не существует, но в конечном итоге все сводится к трекам в трековой камере и уровням энергии в калориметре. Они-то точно существуют. И чтобы теория была признана верной, ей мало придумать новые названия для объектов микромира, ей надо предложить механизм как предсказать конкретные числа. И пока что такая теория всего одна. Современная стандартная модель не возникла из ничего, это результат полувековой работы и эволюции самых разных, зачастую признаных неверными, теорий. И она считается верной не потому, что слово «кварки» всем нравится больше чем слово «амеры», а потому, что она верно предсказывает результаты экспериментов. Так что прежде чем заявлять что есть некая теория которая гораздо лучше стандартной модели, приложи хотя бы один теоретический расчет результатов хотя бы одного из вышеприведенных экспериментов.
  7. Объясните мне на пальцах электродинамику/квантовую механику/теорию струн/другое чего.
    Большая часть физических теорий на пальцах не объясняется. Вообще. Никак. Для электродинамики нужен матанализ на уровне третьего курса технического вуза. Для квантовой электродинамики до кучи еще требуется теория групп. Квантовая хромодинамика добавляет неабелевы группы, асимптотическую свободу, теорему факторизации и еще кучу умных слов на изучение которых придется потратить пару лет жизни. Для теории струн нужен вообще такой математический аппарат, что ее даже и не проходят на физфаке. Только факультативом на старших курсах, и то в виде общего обзора. Во всем мире не наберется и пары тысяч человек которые бы реально в ней разбирались. «Объяснить на пальцах» обычно означает «привести аналогию из обычной механики». Таких аналогий нет. Если бы эти физические теории были аналогичны каким-то другим, более простым теориям, то их бы и проходили вместе еще в школе. Их не проходят именно потому, что это невозможно. Вообще. Никак.
  8. Что будет если на летящем на сверхсветовой скорости звездолете влететь в черную дыру и включить фары?

    Никогда вопросов глупых
    Сам себе не задавай,
    А не то еще глупее
    Ты найдешь на них ответ.
    Если глупые вопросы
    Появились в голове,
    Задавай их сразу взрослым.
    Пусть у них трещат мозги.

 

morse
()
Форум — Science & Engineering

Облачные вычисления в науке и воркшоп по биоинформатике

Привет ЛОР!

Мы с товарищами из FutureBiotech решили тут делать научпоп в формате стримов, посвященных всему, что связано с современной биологией: открытия, лекарства, технологии. Это такие апгрейженные онлайн-трансляции, где мы очень внимательно читаем комментарии в чатах и отвечаем на вопросы зрителей. Форматы бывают достаточно разные - стримы прямо из лабораторий, интервью с людьми «в теме», трансляции интересных мероприятий из области.

В этот раз мы стримим лекцию и воркшоп по биоинформатике:

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

Сегодня в об этом расскажет обворожительная Анна Костикова, PhD в области вычислительной биологии и сравнительной геномики, University of Lausanne, Switzerland. В вводной лекции она раскроет роль облачных вычислений в биоинформатике, а в ходе воршкопа каждый сможет самостоятельно попробовать что это такое - использовать топовые научные инструменты для анализа геномов бактерий.

Ждем вас в физическом воплощении в Ключе или в 19:30 на наших канал на SC2TV и YouTube.

P.S. Записи прошлых стримов можно посмотреть на YouTube.

P.P.S. И да, смотреть можно в HTML5 а для стриминга а используется опенсорсный OBS Studio иногда даже и на онтопике.

 , , ,

silw
()
Форум — Development

Qt6: Чем же так помешал QList в Qt ?

Вот тут:

https://yadi.sk/d/1ncHf4zCmCRTJ/effective_qt.mp4

узнал такую новость.

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

И в Qt6 решили выпилить QList, QStringList и заменить их stl-ным вектором. Тогда типа все будет хорошо.

Я понять не могу, а что, если вектор будет хранить указатели на хранимые значения, то будет легче? Он же не сможет хранить непосредственно сами объекты, например QString, в виду разного обжектсайза у разных строк, которые к тому же могут меняться.

 ,

Xintrea
()
Форум — Talks

Где и как искать редакторов(копирайтеров)?

Если хочешь сделать продукт, а умение внятно и просто описывать страдает? Описать что-то и я смогу, но это не лучший вариант.

Вот Спуфинг, например, могет)

Кстати, если у кого-то есть информация о том, как самому научиться нормально излагать мысли, поделитесь :)

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

 

Dreamject
()
Новости — Проприетарное ПО

Обновление кассового сервера QKkmServer до версии 5.15.11.9

Группа Проприетарное ПО

Вышло обновление набора программ проекта QKkmServer — кроссплатформенного кассового сервера для ФР, использующих протокол управления ФР Штрих-М.

Возможности:

  • управление ФР по сети;
  • управление из разных ОС;
  • управление посредством размещения файлов в отслеживаемом каталоге;
  • полный контроль операций с ФР.

( Подробности )

>>> Сайт проекта

 , , ,

HEXen
()
Форум — Talks

Состояние экосистемы Gentoo

Скажите, какое оно? Как можно помочь проекту (и стоит ли)? Спрашиваю, ибо уже не первый год ходят разговоры о том, что вымирает постепенно коллектив. Да и сам вижу, что многие приложения давно не обновляются. Тот же blender, например.

В последнее время всё реже обновляю систему, потому что обновлений всё меньше. Есть пара команд (KDE, например), которые занимаются поддержкой, но всё дерево как будто уже не так живо, как лет 5 назад, скажем.

 

alextk
()
Форум — Development

const type var = value vs #define var value

Я тут читаю умную книжку и автор уверенно заявляет, что #define для лох^W сишников, а плюсовики должны использовать const type var = 0;
А у меня уши растут с Си и поэтому у меня вопрос к тем, у кого сильна теоретическая плюсовая база.
Если с #define всё ясно — препроцессор просто пробежится по тексту, то с константой у меня вопрос. Будет ли выделяться под неё память? В принципе компилятор вполне может выполнить работу препроцессора и заменить встречающуюся константу на её значение. В идеале мы получим и проверку типа и никаких накладных расходов.
Или я что-то упускаю? Или я всё правильно думаю, но компилятор всё равно всё сделает через жопу?
Расскажите.

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

 

Stahl
()
Форум — Development

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

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

Это будет формат для самых маленьких, где я буду показывать как что-то пилится по-пацаночке. Его задача - на примерах пересказать штеудмануал тем, кому лень его читать, но кто очень любит спорить про код, перфоманс и матчасть. Ну и просто интересные наблюдения.

Изначально я хотел написать про то: что такое бесплатные вычисления на примере is_range() + сумма елементов массива, но тут выявилась смешная особенность, поэтому пока без is_range().

Начнём с простого - сумма елементов(float) массива. Как написать её быстро? Обычный крестопоц сделает так:

auto summ = accumulate(begin(vec), end(vec), 0.)

Этот код выдаёт 5.6GB/s(мы всё бенчим в л1д 32килобайта массив). Казалось бы, если бы мы слушали всяких «гуру», которые нам говорят: accumulate() - оптимизирован, «ты что умнее создатели stl"а?», «конпелятор умнее тебе - сам всё делает оптимально», «руками что-то делать слишком сложно и не нужно» - то мы бы там и остались с этими 5.6ГБ, но мы пойдём дальше и поймём почему так, и является ли это тем, что намн ужно.

Но посмотрев на код - он не векторизован:

	addq	$4, %rdx
	vcvtss2sd	-4(%rdx), %xmm2, %xmm2
	vaddsd	%xmm2, %xmm1, %xmm1

Почему? Патамучто это основная флоатпроблема: Он не ассоциативен - флоат не имеет в себе точных представлений всех чисел входящих в диапазон его «представления» т.е. порядкопроблемы.

Поэтому конпелятор НЕ ВЕКТОРИЗУЕТ флоат по умолчанию, ну никак. Даже такую банальщину.

Для решения этих проблем - есть ключик -funsafe-math-optimizations, который входит в -ffast-math, который кладёт на точность при вычислениях. Добавив его мы получаем уже 44.9GB/s.

Но теперь мы получаем ещё одну проблему - надо думать: «как бэ сунуть эту ключик не повредив там, где этот ключик не нужен».

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

double memadd_autovec(buf_t buf) { //5.609465GB/s, либо 44.969652GB/s с ffast-math
  float * it = buf_begin(buf), * end = buf_end(buf), summ = 0.;
  do {
    summ += *it++;
  } while(it != end);
  return summ;
}

double hsumf(__v8sf v) {
  return (v[0] + v[1] + v[2] + v[3] + v[4] + v[5] + v[6] + v[7]);
}

double memadd_vec(buf_t buf) { //45.652002GB/s и класть на ffast-math
  __v8sf * it = buf_begin(buf), * end = buf_end(buf), summ = {};
  do {
    summ += *it++;
  } while(it != end);
  return hsumf(summ);
}

Т.е. разницы никакой нет, кроме нужной нам реализации горизантального сложение вектора. Когда я говорил пацану: «векторную сишку для написания быстрого кода юзать намного проще, чем плюсы» - поцан нипонимэ, да и любые пацаны скажут - ну дак с -ffast-math оба выдают по 45гигов - нахрен эта сишка нужна?

А вот зачем:

double memadd(buf_t buf) { //132.878440GB/s
  __v8sf * it = buf_begin(buf), * end = buf_end(buf), summ = {};
  do {
    summ += *it++;summ += *it++;summ += *it++;summ += *it++;
  } while(it != end);
  return hsumf(summ);
}

Это называется пацанский анролл копипастой, а вот заставить конпелятор нормально что-то разанролить очень сложно.

Если бы мы слушали всяких «гуру», которые нам вещают: «анрол говно и не нужен» - мы бы так и седели с 45-ю гигами, а так мы сидим с 132.878440GB/s. Т.е. анролл нам дал немного не мало ~300%.

Но основная мысль, которую толкают всякие «гуру» - это не надо следить за тактами/считать такты и прочее. Но мы о5 сделаем наоборот и посмотрим что будет.

Т.к. наш юзкейс упирается на 99% в throughput и дёргается одна инструкция, то нам достаточно просто считать теоретическую производительность для моего камня. 4.5(частота камня)*8(т.е. у нас камень с avx, то там вектор 32байта, либо 8флоатов.)*1(throughput нашей инструкции - в данном случае vpaddps из интел мануала). Т.е. 36гигафлопс, либо ~144гига. Т.е. мы сняли овер 90% теоретической производительности - остальные 10% у нас ушли в наши циклы, всякие горизонтальные суммы вектора и прочее, ну и конечно же чтение данных из кеша.

Но самое смешное - на моём хасвеле умножение имеет throughput 0.5 - т.е. на хасвеле умножение быстрее сложения. Это новая забористая трава у интела.

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

Поэтому очень смешно слушать, когда какие-то пацаны говорят: «float point имеет такую же производительность как и инты» - нет, оно имеет такоу же производительность лишь по причине того, что на штеуде инты тормазят так же, как и float.

И чтобы окончательно в этом убедится - мы взглянем на fma(вариации умножения со сложением/вычитанем), которые имеют throughput 0.5 - да, да - на хасвеле умножение+сложение в 2раза быстрее просто сложения. Это уже не просто трава - это что-то принципиально новое.

У целочисленного сложения же throughput 0.5 и казалось бы, если мы поменяем в нашей функции float на int - у нас будет сложение работать в 2раза быстрее, но это не так. Оно выдаёт те же 130гигов, а почему?

Вообще у камня есть такая фича, допустим у нас:

add $1, %reg0//вот тут инструкция add залочит регистр reg0
add $1, %reg0//а эта инструкция уйдёт в лок до особождения предыдущей инструкцией регистра reg0

Чтобы такой жопы небыло - есть специальная фича:

add $1, %reg0//lock reg0
add $1, %reg0//И тут вместо того, чтобы уйти в лок - камень вместо reg0 даёт инструкции любой свободный регистр.

Эта фича называется прееименование регистров, либо как-то так - мне лень гуглить.

Дак вот штука в том, что фича работает через жопу. Мне лень читать мануал и искать почему так, но штука в том, что она ограничивает throughput. На умножении и целочисленном сложении она огранивает throughput c 0.5 до 1.

И вот я решил заюзать сложении через fma:

__v8sf fmaadd(__v8sf a, __v8sf b) {
  return _mm256_fmadd_ps(_mm256_set1_ps(1.), a, b);// a + b * 1. == a + b.
}

double memadd_fma(buf_t buf) {
  __v8sf * it = buf_begin(buf), * end = buf_end(buf), summ = {};
  do {
    summ = fmaadd(summ, *it++);
  } while(it != end);
  return hsumf(summ);
}

Но меня ждала жопа: 27.347290GB/s, причем не анролл и ничего не помогал. Я уж подумал, что мануал наврал, но позже до меня допёрло: у неё latency 5тактов и ((4.5×8)÷5)×4 ~= 29гигов - т.е. я получаю производительность с её latency, но какой жопой оно так?

Потом я вспомнил, что гцц гинерит анрольный код вида:

add $1, %reg0
add $1, %reg0
//а не
add $1, %reg0
add $1, %reg1

Т.е. на неё вообще не работает переименовывание регистров - и инструкции постоянно в локе. Я это проверил и оказался прав. Ну и я написал такой мемадд:


__v8sf fmaadd(__v8sf a, __v8sf b) {
  return _mm256_fmadd_ps(_mm256_set1_ps(1.), a, b);
}

inline void fma_10way_finality(__v8sf * cache, __v8sf * it, __v8sf * end) {
  switch(end - it) {
    case 8:
      *(cache + 7) = fmaadd(*(cache + 7), *(it + 7));
      *(cache + 6) = fmaadd(*(cache + 6), *(it + 6));
    case 6:
      *(cache + 5) = fmaadd(*(cache + 5), *(it + 5));
      *(cache + 4) = fmaadd(*(cache + 4), *(it + 4));
    case 4:
      *(cache + 3) = fmaadd(*(cache + 3), *(it + 3));
      *(cache + 2) = fmaadd(*(cache + 2), *(it + 2));
    case 2:
      *(cache + 1) = fmaadd(*(cache + 1), *(it + 1));
      *(cache + 0) = fmaadd(*(cache + 0), *(it + 0));
    case 0:
      break;
    default: error_at_line(-1, 0, __FILE__, __LINE__, "bad_aligned");
  }
}

double memaddfma_10way(buf_t buf) {
  __v8sf * it = buf_begin(buf), * end = buf_end(buf), summ = (__v8sf){};
  __v8sf * cache = (__v8sf[10]){{}};
  uint64_t i = 0;
  while((it += 10) <= end) {
    *(cache + i) = fmaadd(*(cache + i), *(it - i - 1));++i;
    *(cache + i) = fmaadd(*(cache + i), *(it - i - 1));++i;
    *(cache + i) = fmaadd(*(cache + i), *(it - i - 1));++i;
    *(cache + i) = fmaadd(*(cache + i), *(it - i - 1));++i;
    *(cache + i) = fmaadd(*(cache + i), *(it - i - 1));++i;
    *(cache + i) = fmaadd(*(cache + i), *(it - i - 1));++i;
    *(cache + i) = fmaadd(*(cache + i), *(it - i - 1));++i;
    *(cache + i) = fmaadd(*(cache + i), *(it - i - 1));++i;
    *(cache + i) = fmaadd(*(cache + i), *(it - i - 1));++i;
    *(cache + i) = fmaadd(*(cache + i), *(it - i - 1));++i;
    i = 0;
  }
  fma_10way_finality(cache, (it - 10), end);
  summ = (*(cache + 0) + *(cache + 1) + *(cache + 2) + *(cache + 3) +
	  *(cache + 4) + *(cache + 5) + *(cache + 6) + *(cache + 7) +
	  *(cache + 8) + *(cache + 9));
  return hsumf(summ);
}

Пришлось хреначить финалити, ибо тут «анролл» на 10, а почему на 10 - для максимального throughput"а - надо, чтобы каждый каждый регистр юзался через 5тактов - т.е. 10регистров.

И вся эта порятнка нужна для борьбы с тупостью конпелятора.

Это уже: 214.167252GB/s(раельно там в районе 250 - просто мой бенч говно). 107 гигафлопс на ведро. Из теоретических 144, но тут уже влияние кеша. Причем 50+ из которых выкидываются и просто бесплатные.

Теперь вопрос к пацанам - что нам дадут эти гагфлопсы, когда у нас будет массив не 32килобайта, а 32мегабайта? Зачем нужно выживать максимум, когда скорость памяти отсилы 20-30гигабайт и нам хватит даже С++ кода с ffast-math?

Ну и призываются упомянутые мною пацаны: mv - этот тот експерт, что вещал про «руками переименовывать регистры не надо» и «анрол ваще ненужен», emulek вещал про ненужность счёта тактов, и не понимал что такое «беслпатно», AIv - не понимал в чем проблема плюсов, ck114 - так же не понимал в чем проблема плюсов.

Бенчи: https://gist.github.com/superhackkiller1997/606be26fa158ef75501d - вроде я там ничего не напутал.

P.S. - не выпиливайте пж, пусть пацаны «нужно» или «не нужно». Мне интеерсно. Ну и там рекомендации пацанов.

 , , ,

Carb_blog
()
Форум — Multimedia

Программы для работы со звуком

Базовая система коммутации звуковых потоков:

  • Jack Audio Connection Kit - необходимый элемент системы для соединения разных звуковых устройств, музыкальных инструментов, микрофонов, программ для обработки звука.
  • QjackCtl - графический интерфейс для JACK на Qt4
  • Patchage - удобный графический инструмент для коммутации звуковых потоков и устройств, в частности MIDI.
  • KXStudio: Cadence - набор приложений для коммутации аудиопотоков и устройств, управления Jack-сервером, замера уровня сигнала...
  • KXStudio: Carla - хост аудиоплагинов, поддерживает LADSPA (включая LRDF), DSSI, LV2, VST2/3 и AU форматы плагинов,также поддерживаются файлы GIG, SF2 и SFZ. Работает с Jack и ALSA.

Программы для звукозаписи и обработки звука:

  • Audacity - достаточно простой, но удобный инструмент для записи и обработки звука.
  • Ardour - профессиональный инструмент для многоканальной, многодорожечной записи звука, поддерживает несколько разных источников.
  • Qtractor - многодорожечный аудио/MIDI секвенсор.

Гитарные процессоры:

  • Rakarrack - набор гитарных эффектов реального времени, комбиков, кабинетов, усилителей, множество предустановленных вариантов и возможность «накрутить» собственные
  • Guitarix - ещё один набор гитарных эффектов реального времени, комбиков, кабинетов, усилителей, множество предустановленных вариантов и возможность «накрутить» собственные.

Синтезаторы:

  • Amsynth - набор синтезаторов с множеством настроек и предустановок. Ввод нот осуществляется с MIDI-клавиатуры, которую удобно подключить при помощи Patchage
  • LMMS - мультимедийная студия с синтезаторами, секвенсорами, кольцами и эффектами.
  • ZynAddSubFX - набор синтезаторов: реального времени, полифонический, мультитембральный, микротональный. Также набор эффектов для обработки звука. Работает с Jack, поддерживает MIDI, в том числе и подключение MIDI-контроллеров.
  • Yoshimi - форк ZynAddSubFX с усовершенствованиями в направлении работы с Jack и MIDI.

Инструменты для создания трекерной музыки:

  • MilkyTracker - инструмент для создания трекерной музыки.
  • Schism Tracker - инструмент для создания трекерной музыки, основанный на модифицированной версии Modplug - OpenMPT

Драм-машины:

  • Hydrogen - удобная графическая драм-машина.
  • DrumGizmo - драм-машина в виде самостоятельно приложения, также и в виде плагина.

Наборы эффектов для обработки звука:

  • Linux Audio Developer's Simple Plugin API (LADSPA) - классический набор эффектов и алгоритмов для обработки звука, также язык для разработи музыкальных программ.
  • LV2 - следующее поколение LADSPA
  • Calf studio gear - набор эффектов и алгоримов для обработки звука.

Нотные редакторы:

  • TuxGuitar - графический нотный MIDI-редактор, есть возможность вбивать ноты на «гитарном грифе» и «пианино».
  • LilyPond - крайне минималистичный, но очень мощный текстовый «нотный компилятор», часть проекта GNU.
  • Frescobaldi - продвинутый графический интерфейс для LilyPond, удобен возможность работы с мышью
  • Denemo - ещё один продвинутый графический интерфейс для LilyPond
  • Rosegarden - графический нотный редактор и MIDI-секвенсор.
  • FluidSynth - MIDI-синтезатор реального времени без графического интерфейса, работающий по спецификациям SoundFont 2.
  • Qsynth - графический интерфейс для FluidSynth.
  • MidiEditor - простой MIDI-редактор.
  • Musescore - нотный MIDI-редактор с графическим интерфейсом.
  • MusE - MIDI-секвенсор.

Статья на LOR Wiki

 , , , ,

toney
()
Новости — Конференции и встречи

Выложено видео прошедшей лекции «Linux во встраиваемых системах»

Группа Конференции и встречи

18 ноября 2014 года в Хакспейс Neuron прошла лекция ncrmnt о Linux-е во встраиваемых системах.

Лекция выложена .

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

 , , ,

DR_SL
()
Форум — Development

Qt5 + CMake

Кто работает с данной связкой? Сборку я победил, даже сделал так, чтобы можно было как с Qt4 собирать, так и с Qt5. Проблема появилась с install частью. Для Qt4 я юзал следующий код:

FOREACH(LANG ${LANGUAGES})
    INSTALL(FILES ${TRANSLATIONS_DIR}/${TARGET}_${LANG}.qm DESTINATION ${CMAKE_INSTALL_PREFIX}/bin/)
    INSTALL(FILES ${QT_TRANSLATIONS_DIR}/qt_${LANG}.qm DESTINATION ${CMAKE_INSTALL_PREFIX}/bin/)
ENDFOREACH(LANG ${LANGUAGES})

IF(WIN32)
    INSTALL(FILES ${QT_BINARY_DIR}/QtCore4.dll DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
    INSTALL(FILES ${QT_BINARY_DIR}/QtNetwork4.dll DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
    INSTALL(FILES ${QT_BINARY_DIR}/QtXml4.dll DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
    INSTALL(FILES ${QT_BINARY_DIR}/QtSql4.dll DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)

    INSTALL(FILES ${QT_QJPEG_PLUGIN_RELEASE} DESTINATION ${CMAKE_INSTALL_PREFIX}/bin/plugins/imageformats)
    INSTALL(FILES ${QT_QGIF_PLUGIN_RELEASE} DESTINATION ${CMAKE_INSTALL_PREFIX}/bin/plugins/imageformats)

    INSTALL(FILES ${CMAKE_BINARY_DIR}/3rdparty/QtSolutions/src/qtservice/libQtService.dll DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)

    FIND_PATH (MINGW_PATH "libstdc++-6.dll")
    INSTALL(FILES ${MINGW_PATH}/libgcc_s_dw2-1.dll DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
    INSTALL(FILES ${MINGW_PATH}/libstdc++-6.dll DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
    #INSTALL(FILES ${MINGW_PATH}/mingwm10.dll DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
    INSTALL(FILES ${MINGW_PATH}/libwinpthread-1.dll DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
ENDIF(WIN32)

Вот только для Qt5 QT_TRANSLATIONS_DIR, QT_BINARY_DIR и остальные данные пусты. Как теперь их доставать?

 ,

panter_dsd
()
Форум — Talks

Музыкальное аниме

Насоветуйте какого-нибудь аниме о музыке. Только не о всякой попсе, вроде «Beck», а что-нибудь вроде «Nodame Cantabile».

Перемещено beastie из general

 ,

Kotolegokot
()
Форум — General

Современная библиография в LaTeX

Господа!

Абсолютно подходящей темы не нашёл.

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

Использую TeX Live 20130722 (бекпортирован на wheezy из sid в конце августа). Пишу код в Kile, использую UTF8. Пока норм. Строго соответствовать ГОСТу нет необходимости, но было бы желательно. После первичного гугления назрели вопросы:

  1. Чем создать базу данных bib? Подойдёт ли KBibTeX (0.4; выглядит многообещающе)? Или только руками, только хардкор? Зависят ли особенности оформления базы данных от выбора движка (bibtex, biblatex+biber+[biblatex-gost])? Сильная ли зависимость?
  2. Какой сейчас актуальный движок для библиографии? Есть ли где-нибудь сравнения? Какой предпочтительнее для российских реалий:
    • biblatex-gost (его, похоже, придётся устанавливать вручную, не забыв заново бекпортировать посвежевший недавно в sid texlive 2013, в который включили этот самый biblatex 2.7);
    • utf8gost705u.bst от ЯрГУ (который для utf8 и тестировался с XeTeX);
    • другие варианты...
  3. Будет ли с разнообразными стилями библиографии и bibtex/biblatex работать база в utf8?
  4. Стоит ли поломать голову об ГОСТ 7.0.5-2008? Или есть методички?
  5. Допускает ли ГОСТ и стили библиографии список, и, соответственно, нумерацию в ссылках по этому списку, разделить на группы по виду документа (книга, стандарт и т.д.)?
  6. Может быть я всё неправильно понимаю, и здесь нужно совсем всё иначе делать? Поделитесь мудрыми советами?

Заранее спасибо за терпимость и ссылки на литературу и конкретные посты в других темах!

 , , , ,

akj
()