LINUX.ORG.RU

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

Качество аппроксимации.

Форум — Development

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

http://s24.postimg.org/74srd5gdf/approx.png

 

ados
()

Еще одна победа, в этот раз над Australis

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

Файрфоксохейтеры были правы: с появлением австралиса жить стало печально. Очень, очень печально.

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

Тем временем я сбегал на пятую плазму и откатился обратно, сменив тему плазмы и поднастроив оксиген. Вкладки (которые называется oxygen plain) настолько мне понравились, что я медленно и планомерно начал пилить их стиль для фуррифокса.

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

Прикрепленные (pinned) вкладки сломаны, да и пофиг. Я ими не пользуюсь.

И даже с такими сотнями треша FF на порядок лучше всяких хромов и перехромов.

Ну и по какой-то причине у меня сломались отступы в трее, придется убивать еще кучу времени на разборки.

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

 , ,

derlafff
()

Сифон

Галерея — Рабочие места

У меня стоит отдельный сервер с рторрентом, и захотелось мне мониторить показатели отдачи и загрузки. Ну и лимит скорости настраивать. Скрипты и графики - это скучно, поэтому запилил вот хардварное решение. А чтобы уж совсем Ъ, стилизовал под Bioshock Infinite.

Девайс показывает скорость в мегабитах (в диапазоне 0-100 или 0-1000, в зависимости от положения переключателя диапазонов) и может устанавливать ограничение скорости (черные ручки по краям панели).

Внутри работает ардуина, которая обменивается данными с демоном на компе, который ходит за информацией по XMLRPC на сервер с рторрентом.

Туча фоточек девайса есть тут: http://fotki.yandex.ru/users/mdevaev/album/339302/

А тут - инструкция по сборке: http://liksys.livejournal.com/4212.html

 , , , ,

liksys
()

Сравнение Rust и C++ на примере трассировщика путей

Форум — Development

Тут как-то была тема про то, что хочется нормальное сравнение C++ и Rust. Вот эта серия статей, как мне кажется, вполне себе кандидат:

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

Разработка трассироващика путей на Rust`е, часть 7: Заключение

Чтобы изучить Rust, я портировал свой спекртальный трассировщик путей Luculentus на язык Rust. Результат я выложил на Github. В процессе я также немного обновил Luculentus, переведя его на более современный C++. Детали вы можете прочитать в прошлых постах. В этом же посте я хочу подвести итоги и сравнить результаты.

Картинка

Для начала, пример вывода трассировщика путей! Захардкоженная сцена выглядит вот так:

http://ruudvanasseldonk.com/images/robigo-luculenta.png

Если вам интересно что-то в ней изменить, то смотрите set_up_scene в app.rs.

Начало работы с Rust

В настоящий момент, вы можете установить компилятор Rust`а и Cargo за пару минут, даже в Windows. Да и заставить их работать было намного проще, чем, например, Scala и sbt.

Сообщество Rust`а показалось мне очень дружелюбным. Когда я не знал что делать, мне очень помогали IRC канал и /r/rust. Члены основной команды разработки языка есть и там и там, так что часто советы были весьма профессиональными.

На сегодняшний день Rust все еще быстро меняется. Во время процесса портирования порядочное количество функций были объявлены устаревшими или переименованы и даже синтаксис немного изменился. Некоторые люди описывают сегодняшний Rust как совершенно другой язык, сильно отличающийся от того, что было год назад, но я не использовал язык настолько долго, что бы почувствовать это. Все изменения в языке делают его лучше и более последовательным и я уверен, что Rust 1.0 будет отличным языком.

Владение

Если бы мне надо было описать Rust одним словом, это было бы «владение». Для меня, это то, что отличает Rust от остальных языков. В большинстве языков владение неявно и это приводит к нескольким типам ошибок. Когда в Си функция возвращает указатель, кто ответственен за освобождение памяти? Вы можете ответить на этот вопрос без подглядывания в документацию? И даже если вы знаете ответ, то все равно легко забыть освободить память или освободить ее дважды.

Проблема относится не только к указателям, она касается все ресурсов. Может показаться, что сборка мусора это отличное решение, но она работает только для памяти. Тогда вам нужен другой способ для освобождения ресурсов (вроде файловых дескрипторов) и все проблемы возвращаются. Например, сборщик мусора в C# спасает от ошибок «использования после освобождения» (use after free), но ничего не спасает вас от ошибок «использования после удаления» (use after dispose). Разве ObjectDisposedException намного лучше сегфолта? Из-за явного времени жизни и системы владения в Rust нет этих типов ошибок.

прим. ozkriff: поскольку я с C# знаком мало, то пришлось загуглить про этот ObjectDisposedException. Вот пример кода:

using System;
using System.IO;

public class ObjectDisposedExceptionTest 
{
   public static void Main()
   {     
      MemoryStream ms = new MemoryStream(16);
      ms.Close();
      try 
      {
         ms.ReadByte();
      }
      catch (ObjectDisposedException e) 
      {
         Console.WriteLine("Caught: {0}", e.Message);
      }
   }
}

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

Обновление Luculentus

Сами по себе достоинства явного владения не уникальны для Rust`а. Такой же код можно написать на современном C++, который очень сильно отличается от С++ до-2011. Когда я писал Luculentus, C++11 поддерживался только частично. Я использовал много простых указателей, которые сегодня уже не нужны. Я заменил большинство простых указателей в Luculentus на shared_ptr или unique_ptr, а массивы на векторы. Как следствие, все ручные деструкторы пропали. (Раньше их было шесть). Раньше было 11 операторов удаления, теперь их нет. Все управление памятью стало автоматическим. Это сделало код не только короче, но и снизило вероятность появления ошибок.

Портирование трассировщика путей на Rust улучшило его дизайн. Если ваше управление ресурсами некорректно, то код не скомпилируется. В C++ вы можете, например, взять адрес элемента вектора и, когда вектор уничтожится, указатель на элемент станет некорректным. Но код скомпилируется. Rust не позволяет таких «срезов» и это открыло мне глаза на то, о чем я не думал до этого. Теперь, даже работая с другими языками, я думаю, что если эта конструкция не скомпилировалась бы в Rust`е, то надо поискать путь получше.

Но все же, обновление демонстрирует, что возможно писать относительно безопасный код и на С++. Вы получаете безопасность и автоматическое управление памятью практически без накладных расходов. Единственной проблемой является то, что вы должны очень настойчиво стремиться к этому. Вы можете использовать unique_ptr, но так же можете и простой указатель. Все опасные инструменты «старого» С++ все еще доступны и вы можете смешивать их с новым С++. Конечно, есть определенная ценность в возможности собирать старый код (Бьерн называет это достоинством), но я бы предпочел не смешивать неявно эти две парадигмы и не поддерживать старые ошибочные решения. Требуется некоторое время, что бы разучиться использовать new и delete, но даже тогда старые API останутся с нами на очень долгое время.

Новое начало

Хорошим моментом в Rust является то, что он может начать все практически с чистого листа и учиться на ошибках старых языков. C++11 немного лучше своего предшественника, но он только добавляет новое и обязан поддерживать обратную совместимость. Одна из вещей, на которой это хорошо видно - синтаксис. В Rust, типы идут после имени и возвращаемый функцией тип идет после списка аргументов, что очень разумно. Синтаксис анонимных функций в Rust короток и в нем меньше повторения. Но я так и не могу привыкнуть к египетским скобкам, они до сих пор выглядят как-то не так.

Другим моментов, в котором Rust сделал правильный выбор, является мутабельность. В Rust`е все по-умолчанию неизменяемо, когда как в C++ наоборот. В коде Luculentus 535 раз появляется «const» (на момент написания). В Robigo Luculenta всего 97 «mut». Конечно, в C++ больше дублирования, но это все равно показывает, что неизменяемость по-умолчанию - лучше. Так же, компилятор Rust выдает предупреждение о переменных, которым не нужно быть изменяемыми, это тоже хорошо.

Несмотря на то, что синтаксис является делом вкуса, есть и измеряемые величины. Если я сравню количество непробельных символов в коде, то у С++ будет примерно 109 тысяч символов (не считая файлы, которые я не портировал на Rust), а у Rust - 74 тысячи. Почти на треть меньше.

C++ славится своими информативными и понятными сообщениями об ошибках, когда что-то идет не так в шаблонном коде. Ошибки в Rust`е, в основном, намного более понятны, но некоторые тоже могут напугать:

error: binary operation `/` cannot be applied to type `core::iter::Map<'_,f32,f32,core::iter::Map<'_,&[f32],f32,core::slice::Chunks<'_,f32>>>`

Производительность

Я добавил базовые счетчики производительности в Luculentus и Robigo Luculenta. Они считают количество завершившихся задач трассировки (trace tasks) в секунду. Вот результаты:

Компилятор              платформа           производительность

GCC 4.9.1*              Arch Linux x64      0.35 ± 0.04
GCC 4.9.1               Arch Linux x64      0.33 ± 0.06
rustc 0.12 2014-09-25   Arch Linux x64      0.32 ± 0.01
Clang 3.5.0             Arch Linux x64      0.30 ± 0.05
msvc 110                Windows 7 x64       0.23 ± 0.03
msvc 110*               Windows 7 x64       0.23 ± 0.02
rustc 0.12 2014-09-23   Windows 7 x64       0.23 ± 0.01

Везде выставлены самые высокие уровни оптимизации. Компиляторы со звездочкой использовали PGO (Profile-guided optimization - оптимизация, управляемая профилированием https://ru.wikipedia.org/wiki/Profile-guided_optimization). Единственный вывод, который я могу сделать из этого, что вам, наверное, не стоит использовать Windows для сильно нагружающих процессор приложений.

Во второй статье из этой серии я отметил, что код на Rust`е собирается очень быстро, но тогда было не много кода. Сейчас время сборки вот такое (в секундах):

Компилятор             Время

rustc 0.12 2014-09-26  7.31 ± 0.05
Clang 3.5.0            13.39 ± 0.03
GCC 4.9.1              17.3 ± 0.5
msvc 110               20.4 ± 0.3

Сборка теперь не так быстра, но все равно быстрее С++.

Заключение

Изучать Rust было интересно. Мне понравился язык и портирование привело к нескольким озарениям, которые могут улучшить и оригинальный код. Владение часто неявно в других языках, что увеличивает чувствительность кода к человеческим ошибкам. Rust делает владение явным, убирая возможность допущения подобных ошибок. Все безопасно по умолчанию. Все это сдвигает Rust намного ближе к краю «стабильность» на спектре, чем к краю «быстрая разработка». Я не написал на Rust`е достаточно кода, что бы быть на 100% уверенным, но пока что достоинства Rust`а перевешивали его недостатки. Если бы я выбирал между C++ и Rust`ом для своего следующего проекта, то выбрал бы Rust.

Ну как, это тянет на «нормальное» сравнение? По-моему, в любом случае интересно почитать.

 ,

ozkriff
()

Falltergeist 0.1.2

Форум — Games

Тихо и не заметно 12.09.2014 вышло обновление открытой реализации движка игры Fallout 1/2. Из нововведений это новый участник Вадим В. Балашов (v.v.b.), рефакторинг кода и отделение рендера в отдельный модуль. Сейчас существует уже два рендера SDL и OpenGL.

Новость на сайте.

Снимок экрана 1, снимок экрана 2, видео.

Так же открылся форум.

 , , ,

s1n
()

Книга «Наглядная статистика. Используем R!» в свободном доступе.

Новости — Документация
Группа Документация

По истечению срока отчуждения имущественных прав в пользу издателя в свободный читательский доступ поступила книга «Наглядная статистика. Используем R!»

Книга доступна на страничке Алексея Шипунова, одного из авторов книги: http://ashipunov.info/shipunov/software/r/r-ru.htm.

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

 , , , ,

psv1967
()

очень хорошее кино

Форум — Talks

Топик хорошего кино.

То, что мне очень понравилось из последнего просмотренного:

oldboy
Иди и смотри
Вход в пустоту
Человек, которого не было
Господин Никто
Лучшее предложение
Весна, лето, очень, зима и снова весна
Ночь на Земле
Фейерверк (хана-би)
Достучаться до небес
Европа
Обезьянки

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

LimboMe, наверняка подскажешь что-либо.

 ,

kinik
()

Закосимши

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

Gentoo, Linux 3.13.7
Десктоп: Plasma + Docky + Compiz + Emerald
Софт: Mozilla Firefox, Dolphin, Konversation, xfce4-terminal
Шрифты: Fira Sans, Myriad Pro, Monaco

 ,

zezic
()

Первые нотки

Форум — Talks

http://www.youtube.com/watch?v=CDsNZJTWw0w&nofeather=True
Прям как по нотам. Аугментации, нейроинтерфейс. И даже не 2027 год еще но близко.

 

bga_
()

Firefox и ссылки на русском

Форум — General

Собственно, всем известна очень старая «фича» лиса, который показывает ссылки с крилицей как "...D0%B0%D...". Я случайно нашел трюк, как эту фичу обойти.

Курсор в адресную строку с нужным для копирования адресом, напечатать мусор (хватит и одной буквы) и нажать Ctrl+z. Скопировать восстановившийся адрес без мусора. При вставке куда-либо будет выглядеть читабельно.

Вопрос: а что по этому поводу говорят разрабы лиса? Искал в их багзилле, но там сложно что-то найти. В чем причина такого поведения?

 

Gregon
()

рисование кривой

Форум — Development

Нужно нарисовать кривую, такую же по аналогии как на графике с закруглениями между точками P3 и P4. Подозреваю что это кривая безье, но пока что еще не уверен. Буду благодарен за помощь.
Картинка

ECLIPSE
()

KDE4 на Pipo Max M6 Pro 3g

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

Итак, пожалуй уже есть чем похвастаться. Самый, так сказать первый вариант, преальфа. Надоело мне ждать пока KDEшники запилят свой планшет, потому решил сделать это сам.

Да, девочки, Debian Wheezy на armhf это вам не розовая Gentoo на x86. Это свое, особое красноглазие не для слабонервных ;) После чудных приключений в 4х сериях я таки запустил (пока поверх fb и с sd карты (ядро в нанде)) KDE4 на RK3188. Как это не странно, но гуй не особенно тормозит даже на позорном тормозном софтовом рендере, включая перетаскивание и ресайз (хотя матрица-то 2048х1536). Артефакты имеются на сложных лейаутах но отчего и почему только предстоит выяснять.

Прошлые серии детектива: [ один | два | три | четыре ]

Собственно, с 4й серии изменилось немного. Я немного докрутил драйвер lcdc0, чтобы завелся без проблем fbcon по дефолту. Заодно теперь оно не паникует при попытке прочитать disp_info в /sys/class/graphics/fb0/. Более того, оно и лог загрузки теперь стало без проблем выводить и даже с цветом. Жаль только лого при включенном fbcon оно не рисует.

Выпилил к чертям свинячьим RK_EARLYPRINTK и эпичный костыль с консолью поверх FIQ дебаггера (sic!). Там где-то был рейс намертво вешавший иногда систему, потому как только я избавился от этой содомии все стало намного стабильнее и отзывчивее.

Немного разгреб костыли в board файле и добавил поддержку звука, хотя пока еще не проверял еще.

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

Немного докрутил степпинг частоты DDR, на 600 Mhz работает стабильнее и сильно быстрее.

Немного докрутил степпинг проца по частоте, выставив заявленные 1.8Ghz вместо 1.6Ghz в пределе. Пока полет нормальный.

Ну и, наконец, самое главное - я запустил KDE4. Пока поверх /dev/fb0, без мали, в моем ядре нет даже упоминания о том, что оно существует. Есть в соседнем бранче ядра откуда надо это дело перетаскивать и раскуривать если что будет не так.

Тачскрин не подхватился evdev'ом, подозреваю что неправильно прописаны капсы и надо его будет немного того, докрутить немного. Так что пока залогинился при помощи усб клавиатуры и мыши.

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

Следите за новостями и подписывайтесь на тег rk3188. Образы и сырцы будут выложены на шитхаб сразу, как только будет рабочая (более или менее) система с работающим более или менее мали. А еще там on2 нетыканный...

Сам скриншот

 , ,

ncrmnt
()

Посоветуйте годный учебник по программированию для Android

Форум — Development

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

 , ,

int13h
()

Получение адресов по координатам точки в Open Street Map

Форум — Development

Добрый день.

Есть задачка реализовать загрузку данных из локальной базы данных адресов OSM.

Точка - это транспортное средство, оно проходит через различные объекты. Нужно знать как они называются.

Сейчас сам гуглю, но может кто имеет опыт и работал с OSM.

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

 ,

weare
()

Процедурно генерируемы игры.

Форум — Games

Недавно наткнулся на славную игрульку kkrieger. А теперь ещё и это.

Это космический симулятор, но с интересной особенностью — практически все элементы игры генерируются процедурно.

Для

Собственно вопрос, а какие игры с процедурной генерацией элементов вы знаете? Только не говорите про платформеры! Прошу покидать названиями и ссылками. Ну и своё ИМХО не забываем!

 , ,

leonidko
()

256 цветов в консоли TTY (256 color linux virtual console) - это возможно?

Форум — General

Возможно ли настроить в консоли (tty) поддержку 256 цветов?

Разумеется я гуглил на эту тему, спрашивал на каналах, конференциях. Мнения разнятся, но живых примеров нет.

Тег «Fedora» я поднял потому (мне-то на Гентоо-линукс нужно прикрутить), что встречал обсуждения на эту тему, дескать в Федоре, единственном дистрибутиве, из коробки, в ~18-19beta это поддерживается. Поддерживается без прокладок типа fbterm и прочих эмуляций, а патчами. Но загрузившись в Живо-КД Fedora 18/19beta - я не наблюдаю никаких 256, или даже 16 цветов. Т.к.:

~$ tput colors
8

Кто-нибудь настраивал в консоли, без прокладок, 256 цветов?

 , , ,

science
()

Что ещё можно настроить для ssd?

Форум — Desktop

Поставил себе SSD на ноут и сделал следующее:

  • оставил несколько гигов неразмеченными;
  • отключил swap (у меня и раньше его не было);
  • опции монтирования noatime,commit=600,noadir,discard;
  • ext4 везде;
  • tmpfs:
    • /tmp;
    • /var/tmp
    • /var/lock
    • /var/log
    • /var/cache/apt/archives
  • в sysctl
    vm.swappiness = 0
    vm.dirty_writeback_centisecs = 6000
    vm.dirty_expire_centisecs = 6000
    vm.dirty_ratio = 80
    vm.dirty_background_ratio = 20
    vm.laptop_mode=5
    
  • отключил планировщик в/в
    GRUB_CMDLINE_LINUX_DEFAULT="elevator=noop"
  • интересная штука iotop: позволяет смотреть запись на диск для процессов;
  • кэш хрома --disk-cache-dir=/tmp/chrcashe

Всё летает.

Вопрос: что я забыл? И да - мне нечем заняться.

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

 

ziemin
()