LINUX.ORG.RU

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

Склеить звук и видео

Форум — General

Есть видео в .avi и звук в .mp3, нужно наложить звук.
В факе был. Не помогло. avimerge матюгается что "AVI open: avilib - Not an AVI file". avidemux склеил, но со страшенной рассинхронизацией звука и видео, хотя если запустить видео и звук отдельно в видео- и аудио- плеере, то все нормально на всем протяжении фильма.
Как сделать то же самое в mencoder что-то не могу понять... можно ли это вообще?
Что делать?

root_at_localhost ()

Эффективная оптимизация. Что такое Cython.

Форум — Development

За последнюю неделю почему-то часто всплывал этот вопрос, поэтому распишу всё сразу в одном месте. Описывать буду на примере питона, но общие принципы применимы ко многим языкам. Итак.

Часть первая. Правила эффективной оптимизация

  1. Не думайте об оптимизации пока код не дописан. Вообще! Думайте, как написать код проще и понятнее. А про оптимизацию даже не вспоминайте, пока не запустите код. Когда код запустится, проверьте насколько быстро он отрабатывает. Если он достаточно быстр — задача решена, ничего делать не нужно. Точка. И только если код отрабатывает медленнее, чем требуют условия задачи — начинайте думать об оптимизации.
  2. Попробуйте JIT, например PyPy, если условия это позволяют (apt-get install pypy && pypy yourprogram.py). Когда не хватает совсем немного производительности — JIT ускорит в несколько раз, и этого может быть достаточно. И тогда всё, задача решена. Только если это не сработало, переходите к фактической оптимизации кода.
  3. Пройдитесь профайлером. python -m cProfile yourprogram.py Никогда не оптимизируйте код без профилирования. По профилю определите самые медленные куски кода. Если код слишком большой — разбейте на функции. Не нужно бросаться переписывать всё подряд. Изолируйте наиболее прожорливые куски кода, и работайте только с ними.
  4. Выполните высокоуровневую оптимизацию найденных медленных кусков кода. Используйте более быстрые библиотеки: gmpy2 вместо встроенной длинной арифметики, python-regex вместо встроенного re, numpy для матричных вычислений, и т.д. Замените dict на list. Вынесите все возможные вычисления за циклы. Наконец, оптимизируйте алгоритм, или попробуйте найти ему более быстрый аналог. Если что-то получилось — goto 2.
  5. Cython. Расставьте типы, пройдитесь профайлером, посмотрите annotate cython-а, какой код сгенерирован, какие куски можно ускорить (он их расцвечивает)... Ещё раз подчёркиваю, низкоуровневая оптимизация — это последний этап, когда другие варианты исчерпаны.

Часть вторая. Cython

Если мы всё-таки дошли до cython-а, то... что же он такое?

Cython - это транслятор из питона в Си. Всё. Он просто генерирует код на си.

Если в файле mymodule.py написать:

def somefunc(x):
    y = x*42
    return y
и запустить cython mymodule.py то он том же каталоге сгенерирует mymodule.c, в котором будет что-то вроде:
static PyObject *__pyx_pf_8mymodule_somefunc(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_x) {
  PyObject *__pyx_v_y = NULL, *__pyx_r = NULL, *__pyx_t_1 = NULL;

  __pyx_t_1 = PyNumber_Multiply(__pyx_v_x, __pyx_int_42);
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_y = __pyx_t_1;
  __pyx_t_1 = 0;

  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_y);
  __pyx_r = __pyx_v_y;

  __Pyx_XDECREF(__pyx_v_y);
  __Pyx_XGIVEREF(__pyx_r);
  return __pyx_r;
}
И, хотя это редко делают вручную, этот код можно собрать обычным компилятором: gcc -shared -O3 -o mymodule.so mymodule.c `python-config --cflags --ldflags`. Нигде в остальном коде ничего менять не надо. Обычный «import mymodule» загрузит бинарный module.so так же, как загрузил бы питоновый mymodule.py.

Да, cython позволяет скомпилировать питонокод. Но никаких глубоких интеллектуальных оптимизаций cython не делает. Он просто вызывает из libpython.so питоновые функции, такие как PyNumber_Multiply(). Без питона этот код работать не будет. (в принципе, его можно собрать статически, но обычно это не имеет смысла — реальная программа всё равно будет использовать кучу внешних либ, и ещё одна библиотека роли не сыграет)

Так как все вызовы питоновых функций остались, то просто сборка cython-ом большого ускорения не даст, может, раза в два. Но! Cython-у можно указать, где использовать сишные типы вместо питоновых! В примере выше, если расставить типы:

cdef double somefunc(double x):
    cdef double y = x*42
    return y
то cython mymodule.pyx сгенерирует в mymodule.c код:
static double __pyx_f_8mymodule_somefunc(double __pyx_v_x) {
  double __pyx_v_y, __pyx_r;

  __pyx_v_y = (__pyx_v_x * 42.0);

  __pyx_r = __pyx_v_y;

  return __pyx_r;
}
По сути, это чистый код на си. Быстрее некуда. А с параметром --annotate cython -a mymodule.pyx дополнительно сгенерирует «mymodule.html», в котором раскрасит код цветами. По нему легко смотреть, какие части кода ещё стоит оптимизировать. Но так как после расстановки типов обычным питоном такой код уже не запустится, его традиционно сохраняют в файле с расширением .pyx вместо .py.

Вот так, не написав ни одной строчки на си, а просто расставив типы, медленный питоновый код превращается в быстрый сишный.

В целом, это всё.

PS: Это не все возможности cython-а. В нём можно использовать плюсовые типы, например std::vector. Причём можно даже писать: cdef vector[double] sqrs = [x*x for x in somelist] и всё преобразование из питоновых типов в плюсовые и обратно cython возмёт на себя. Можно вызывать и внешний код на си (cdef extern from).

Есть и более тонкие оптимизации, например мелким функциям можно расставлять inline (хотя с этим и gcc обычно справляется). А ещё код, не использующий питоновые объекты, не блокирует GIL! А значит отлично подходит для многопоточных вычислений. В cython-е есть и модули для параллельных вычислений.

Да и сами .pyx файлы обычно компилируются не руками, а как часть скрипта distutils/setuptool. А в отладочных целях import pyximport; pyximport.install() и после этого обычный import mymodule сможет импортировать не только .py, но и .pyx файлы.

Полезные ссылки

Итого: Оптимизировать надо только когда иначе нельзя, и только то, что необходимо. Низкоуровневая оптимизация делается в последнюю очередь. Но если мы её таки делаем, то cython позволяет сделать её максимально легко — просто расставив типы.

PPS: Питон в этом не уникален. Почти во всех языки есть возможности низкоуровневой оптимизации, расширения на си через FFI/JNI/и т.д. Есть unsafe код в rust и c#. Даже в паскале и си есть ассемблерные вставки. Не удивительно, что кто-то придумал аналог и для питона. Так что эти же принципы оптимизации применимы и к другим языкам.

 , , , ,

pynonymous ()

S.T.A.L.K.E.R. Зов припяти завезли в линукс

Форум — Games

Свершилось, теперь ЗП запускается под линуксом. Собирать отсюда:
https://github.com/OpenXRay/xray-16
Инструкция по сборке там же, инстукция по запуску в вики.

Нужны тестеры и баг-репорты.

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

 ,

eagleivg ()

Хранение состояния приложения

Форум — Development

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

Будет хорошо, если ткнете в пример кода, где можно посмотреть.

 

hippi90 ()

Две панели в Firefox Quantum

Форум — Desktop

Можно ли сделать так, чтобы firefox quantum отображал две панели с разными веб-страницами в них? Ну как это сделано в файловых менеджерах, подобных total commander? В репозитории аддонов вижу только соотвествующие плагины для старых версий Firefox на Gecko.

 

te111011010 ()

Топ-10 игр для Linux по моему мнению

Форум — Games

1. Герои Меча и Магии 3 - Возрождение Эрафии

Стратегия, думаю нет смысла о ней рассказывать

Порт выполнен в 1999 году компанией Loki Games. Работает даже сейчас. Бинарник слинкован статично, поэтому у меня он работал даже в системе, не имеющей 32-битных либ. Недостатки: вывод звука через OSS, поэтому готовьте aoss/padsp, или подгружайте модуль ядра snd-pcm-oss. А также не работает сетевая игра (там надо вставить костыль, чтобы работала). А также, что Linux-версии официальных дополнений нет

2. Neverwinter Nights 1 и 2

Замечательная RPG, думаю тоже не нуждается в представлении. Порт 2003 работает и сейчас. Скачиваете с сайта icculus.org архив с линуксовыми бинарниками, и распаковываете в Windows-версию игры

3. Unreal Tournament 99, 2004 и 4

Году эдак в 2008 я обнаружил на торрентах в городской локалке Linux-версию UT2004. Прошёл с огромным удовольствием! После чего выяснил, что уровень сложности-то можно и поднять! Оказалось что боты не просто начинают точнее стрелять, но и меняют модель поведения, играя слаженнее и профессиональнее. В режиме прохождения на это влиет скилл команды противника, таким образом были более профессиональные команды и менее, можно было сражаться за самых крутых вояк другой команды и собрать убер-отряд

Мультиплеер отличный, кстати. «Цепляет» не хуже MMORPG, Доты и «танков». В 2018 году онлайн всё ещё есть

Для создания Linux-версии недостаточно только распаковать бинари с icculus.org, надо ещё создать текстовый файл с серийным номером, а также скопировать два файла библиотек. Файл с серийником - System/serial без расширения. Библиотеки - libSDL-1.2.so.0 и openal.so, тоже в директорию System

P.S. Linux-версия UT99 работает ускоренно, если выключен VSync. Включайте VSync, либо скачивайте с сайта Иккулуса другой файл игры - он ест 100% одного ядра CPU, но не ускорен

4. Left 4 Dead 2

Это шутер. Командный шутер, с возможностью сетевой игры. Тут надо «выносить» орды монстров (а именно зомби), но это не Serious Sam какой-нибудь - тут не поле и не коридоры, и не безлимитное оружие. А город, захваченный монстрами, и вы с друзьями удираете. Оружия мало, получать ранение нежелательно. Игра стала очень популярной, я считаю что именно Гейб зародил в мире моду на зомби-апокалипсис, но я могу ошибаться

Игра скачивается в Стиме

5. War Thunder

Самолётная леталка и танковый симулятор в годы 2 Мировой войны.

Самолётная часть очень сильно напоминает Ил-2 Штурмовик 2001 года (Википедия утверждает, что последнюю часть игры Ил-2 Штурмовик делала как раз Gaijin Entertaiment). Управление очень упрощено относительно Ил-2 Штурмовик, играть можно вообще без подготовки, и побеждать. При первом запуске спрашивают, какое управление вы хотите: мышь-клава или джойстик. Ещё там замечательный вид из кабины, очень проработанный. А самолётов много!

Танковая часть очень сильно напоминает World of Tanks, но имеет ряд отличий

Есть два режима игры: аркадный и реалистичный. В аркадных боях команда представляет сборную «солянку» игроков: тут вам и советские самолёты, и немецкие. Реалистичный приближен к реальности, и лично для меня он очень сложен. Также есть режим симуляторных боёв, когда воссоздаются исторические бои. В советах, показываемых при загрузке уровня, вам шутливо предлагают «переписать историю, сыграв в симуляторный бой». Но так-то вообще здорово

Отдельно можно сказать про систему донатов. Соблюдён сложный баланс между играми, в которых можно «нагибать» за донат, и играми, в которых донат не даёт ничего, только «шапочки». Донаты тут действительно что-то дают, но не такое, что позволит плохо играющему игроку побеждать

Под Linux можно скачать с официального сайта, либо из Стима

6. ARMA III

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

В ARMA III можно идти по дороге до линии фронта, причём долго идти, прям как в реальной жизни. А потом «словить» пулю, даже не поняв, откуда она «прилетела»

Игра доступна на официальном сайте, а также в стиме. Стоит 1500 рублей

7. Papers, please

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

У игры замечательная стилистика рисовки

Для Linux брать в Steam, GOG или Humble Store

8. Euro Truck Simulator 2

Симулятор дальнобойщика. Что может быть весёлого в развозе грузов туда-сюда? Но оказалось, что водить грузовик очень даже весело. Когда я еду по однополосной дороге на скорости 80 км/ч, и дорога идёт влево, а по противоположной стороне едет другой грузовик, то я готов кричать ААААА! Страшно! Хотя это даже не реальная жизнь, а всего лишь игра. Отдельный челленж - парковка задом. Я даже говорить не буду, как это сложно, и как легко потерять сцепку при этом

Под Linux брать в Steam

9. Minecraft

Игра с разрушаемым окружением. Есть два режима: творчество (идеально для пиксель-арта, а также для моделирования сложных скульптур в 3D-пространстве - это скорее лего, чем 3D-редактор) и выживание (где прежде, чем что-то построить, надо добыть ресурсы, а ещё ночью вас пытаются убить, а днём всё нормально). Есть мультиплеер, здесь как раз интересно играть в режиме «выживание». Советую два хороших сервера - это Ttyh.ru и Minecrafting.ru. На остальных - лишь дети

Под Linux брать на официальном сайте minecraft.net, либо на Ттюхе

10. Metro 2033 и Metro: Last Light

Хорошие линейные шутеры от первого лица по вселенной книг «Метро» Дмитрия Глуховского

11. Dwarf Fortress

Одна из лучших игр в жанре Roguelike. Игра в ASCII-графике, очень специфичная, многих «затягивает»

Для Linux брать на официальном сайте

 ,

ZenitharChampion ()

На какой бы тайлинг переехать с awesome, или как решить проблему с менюшками IDEA?

Форум — Desktop

Собственно, все время пользовался awesome и в ус не дул, но по долгу работы стала актуальна замена Emacs на IDEA.

Но тут я увидел супер «фичу» не знаю кого именно awesome или java-шного гуи-тулкита, но каждое меню превращается в отдельное окошко и даже в floating-режиме улетает в верхний левый угол.

Возможно, я просто рукожоп и что то делаю не так.

 , , , ,

nihirash ()

TomeNET // MMO–roguelike — самая интересная онлайн игра

Форум — Games

Пару слов о TomeNET на этом замечательном форуме звучало, но игра достойна отдельного топика :)

TomeNet ( https://tomenet.eu ) — open–source онлайновый рогалик (roguelike) по вселенной Толкина (Властелин Колец, Сильмариллион и др.); пожалуй, самая интересная онлайн игра. Она сочетает в себе глубину геймплея рогаликов и возможности современных MMORPG.

Суть TomeNET — в зубодробительном геймплее, который вы не встретите ни в одной игре. Более 1000 монстров с огромным количеством особенностей и характеристик; абсолютно случайная генерация уровней; играть можно за 18 рас и 16 классов, которые действительно _уникальны_. Все это порождает глубочайший геймплей (официальный гайд насчитывает ~300 страниц, хотя там есть далеко не все). При этом обучение игры идет native, первое время можно и не заглядывать в гайд; я играю 3 года и каждый день узнаю что–то новое. Игра существует с 2001 года и в нее до сих пор играют некоторые из тех, кто начинал 17 лет назад (хорошая характеристика глубины геймплея и реиграбельности, не так ли?).

Игра вполне себе рогалик. Огромное количество игровых действий (пнуть, кинуть, искать, рыть и проч.); тру–рогаликовый режим permadeath — умереть можно 1 раз. Есть и режим попроще, с возможностью воскрешения (для тех, у кого плохой коннект); но он не учитывается в ладдере.. и там тоже можно (на высоких уровнях) умереть навсегда. Смерть не так страшна, как кажется — это новый опыт, собственно основной способ обучения игры в том, чтобы учиться на своих фатальных (и не очень) ошибках; можно вернуть вещи убиенного персонажа — игроки часто помогают друг другу, устраивая спасательные миссии :)

Из рогаликовости здесь также абсолютная свобода – нелинейное прохождение игры; при этом конечного как такового прохождения нет, геймлей бесконечен. Боевка — традиционный Hack’n’Slash, вследствие реал–тайма персонаж сам атакует монстров обычной атакой, вам остается кастовать заклинания, использовать скиллы, предметы и проч. Боевка гениальна, надо это просто попробовать, чтобы понять в чем кайф.

Плюс к этому богатству в TomeNet у вас есть все радости современных онлайн миров — PvE в группе (есть контроль агро, можно быть лекарем, танком, дпс), PvP (как дуэли, так и отдельный режим), крутейшая экономика (можно открыть свой магазин, игроки часто торгуют), разные ивенты и проч.

Мир игры по своему красив (если вы что–то смыслите в олдскуле) — Бри, Гондолин, Лориен, Минас Анор, Кхазад–Дум; места знакомые каждому почитателю Средиземья.. Игра также является передовым рогаликом в технологическом плане: реализована смена дня и ночи, времена года, погода, звуковые эффекты и музыка; игра работает под Windows, Linux и Mac OS X.

Любопытная черта TomeNet – абсолютная бескорыстность разработчиков игры. Проект open–source и здесь просто напросто не предусмотрена возможность перечисления каких–либо денег; принципиально принято решение не принимать донат, чтобы избежать проблем с копирайтом (все–таки мир по Толкину) и коррупцией (подгонами). При этом идет постоянное совершенствование игры разработчиками, которые прислушиваются к игрокам и часто реализуют идеи, которые мы им предлагаем.

В общем… Если говорить концептуально и в двух словах, TomeNET — это самая глубокая по геймплею онлайн игра; самая интересная и непредсказуемая. Вы никогда не знаете, что вас ждет на следующем уровне. Это всегда что–то НОВОЕ. Вы постоянно сталкиваетесь с исключительно невообразимыми игровыми ситуациями (небольшая табличка–иллюстрация есть у меня на сайте http://tangar.info/analitika/tomenet-roguelike/ , т.к. сюда таблички не вставляются).

Даже, если сравнивать TomeNET с сингл–играми — и среди них она является одним из сильнейших представителей в RPG/roguelike–жанре. TomeNET вполне соперничает по многообразию игровых ситуаций и сложности (в хорошем смысле слова) с NetHack; действие происходит в постоянном цейтноте, порой нужно принимать решения достаточно быстро, тогда как в традиционных рогаликах вы можете думать над ходом пару недель.

Да, TomeNET — игра сложная. Сложная не столько в плане обучения игровому процессу, а сколько для понимания ее сути и смысла. Современные игроки, воспитанные на 3d картиночках, зачастую просто неспособны воспринимать подобную игру, понять в чем ее фишка. Я периодически пытаюсь как–то объяснить это в своих видео; в очередной раз записал ‘аналитический’ видос на тему, может кого–то он вдохновит попробовать: https://www.youtube.com/watch?v=oMQBueyDDVc

Как выглядит игровой процесс можно посмотреть на моем недавнем стриме: https://www.youtube.com/watch?v=kMpt4q9ejh4 Не пугайтесь скорости игрового процесса, это очень высокие уровни; когда начинаешь играть все в разы спокойнее и проще.

Честно говоря, я очень рад, что в TomeNET довольно высокий порог вхождения. В итоге, большинство невежественных (в плане игр) людей просто–напросто обойдут игру стороной. Если вы устали от однообразных ММО–д#$%илок и выросли из трехкнопочного геймплея WoW–клонов, вам надоел Barrens–chat и вы хотите чего–то нового… TomeNET — ваш выбор!

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

Также приглашаю всех в дискорд: https://discord.gg/rASkhCg, там есть русскоязычный канал, можно получить ответы на любые вопросы ;)

Увидимся в игре!

p.s. Я бы еще добавил вот что: TomeNET — лучшая онлайн игра для Linux. Это действительно так

 , , , ,

tangar1 ()

Помогите с запуском WoT в ubuntu

Форум — Desktop

Вдохновлённый каментом Что полезное написать для Linux (комментарий) я ринулся грудью на амбразуру.
Что сделано:
1. ubuntu 16.04
1.1 xserver-xorg-core-hwe-16.04
2. графические дрова из ppa oibaf
3. wine из https://wiki.winehq.org/Ubuntu ветка winehq-stable
3.1 dpkg --add-architecture i386
3.2 winetricks d3dx9
4. winehq-stable

железо - RX 550 + R9 290x (никуда не подключена)

glxinfo выдаёт

OpenGL vendor string: X.Org
OpenGL renderer string: AMD POLARIS12 (DRM 3.18.0 / 4.13.0-31-generic, LLVM 5.0.1)
OpenGL core profile version string: 4.5 (Core Profile) Mesa 17.4.0-devel
OpenGL core profile shading language version string: 4.50
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile
OpenGL core profile extensions:
и тд, там вроде всё норм

в итоге WoT при запуске сообщает «no appropriate graphics hardware»

wine ./WorldOfTanks.exe 
0009:err:winediag:SECUR32_initNTLMSP ntlm_auth was not found or is outdated. Make sure that ntlm_auth >= 3.0.25 is in your path. Usually, you can find it in the winbind package of your distribution.
0009:fixme:msvcrt:_configure_wide_argv (1) stub
0009:fixme:msvcrt:_initialize_wide_environment stub
0009:fixme:msvcp:_Mtx_init_in_situ unknown flags ignored: 2
0009:fixme:msvcp:_Mtx_init_in_situ unknown flags ignored: 2
0009:fixme:msvcp:_Mtx_init_in_situ unknown flags ignored: 2
0009:fixme:msvcp:_Mtx_init_in_situ unknown flags ignored: 2
0009:fixme:msvcp:_Mtx_init_in_situ unknown flags ignored: 102
0009:fixme:msvcp:_Mtx_init_in_situ unknown flags ignored: 2
0009:fixme:msvcp:_Locinfo__Locinfo_ctor_cat_cstr (0x33fdc0 63 C) semi-stub
0009:fixme:msvcp:locale__Locimp__Makexloc (0x33fdc0 63 0x439b7e0 (nil)) semi-stub
0009:fixme:msvcp:locale__Locimp__Makewloc (0x33fdc0 63 0x439b7e0 (nil)) semi-stub
0009:fixme:msvcp:locale__Locimp__Makeushloc (0x33fdc0 63 0x439b7e0 (nil)) semi-stub
0009:fixme:msvcp:_Locinfo__Locinfo_ctor_cat_cstr (0x33f938 1 C) semi-stub
0009:fixme:msvcp:_Locinfo__Locinfo_ctor_cat_cstr (0x33f708 1 C) semi-stub
0009:fixme:reg:GetActiveProcessorGroupCount semi-stub, always returning 1
0009:fixme:msvcp:_Locinfo__Locinfo_ctor_cat_cstr (0x33f988 1 C) semi-stub
0009:fixme:msvcp:_Mtx_init_in_situ unknown flags ignored: 2
0009:fixme:msvcp:_Mtx_init_in_situ unknown flags ignored: 2
0009:fixme:msvcp:_Mtx_init_in_situ unknown flags ignored: 2
0009:err:wgl:init_opengl Failed to load libGL: libGL.so.1: cannot open shared object file: No such file or directory
0009:err:wgl:init_opengl OpenGL support is disabled.

СПАСИТЕ ПАМАГИТЕ

 , ,

targitaj ()

Функция, принимающая любую последовательность?

Форум — Development

Пытаюсь на расте написать аналог такого:

def print_items(items):
    for item in items:
        print item

Это же просто, да?

Растишкин код:

// так работает
fn print_items(items: &[&str]) {
    for item in items {
        println!("{}", item);
    }
}

// а так не работает, блджад!
fn print_items_iter<'a, I> (items: I)
    where I: IntoIterator<Item = &'a str>
{
    for item in items {
        println!("{}", item);
    }
}

fn main() {
    let items = ["pracuj", "kurwo"];
    print_items(&items);
    print_items_iter(&items);
}

Не компилится:

src/main.rs:21:5: 21:21 error: type mismatch resolving `<&[&str; 2] as core::iter::IntoIterator>::Item == &str`:
 expected &-ptr,
    found str [E0271]
src/main.rs:21     print_items_iter(&items);
                   ^~~~~~~~~~~~~~~~
src/main.rs:21:5: 21:21 help: run `rustc --explain E0271` to see a detailed explanation
src/main.rs:21:5: 21:21 note: required by `print_items_iter`

Штоааа? В доке же написано, что слайсы реализуют IntoIterator. Чего он от меня хочет? Алсо, &[&str; 2] - это таки слайс или ссылка на массив? Почему? Я уже совсем ничего нипа

Растишка: формула здорового росту.

 , ,

HeipaVai1o ()

Ищется дополнение для Firefox на Android

Форум — Mobile

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

 

Virtuos86 ()

И снова Rust

Форум — Development

Я Вас, категорически, приветствую!

Вот, в всеми не любимой Delphi есть поля класса называемые property, при изменении которых можно использовать сеттеры и геттеры. В делфи коде, в одном из проектов, есть класс

TConfigManager = class
  ... 
  private
    function GetHost: String;
    procedure SetHost(AValue: String);
  public
    property host: String read GetHost write SetHost;
end;

При присваивание нового значения в host - это значение будет записано в ini-файл процедурой SetHost, при чтении будет прочитано из ini-файла с помощью функции GetHost. Притом код получается крайне локаничным:

  ConfigManager.Host := '127.0.0.1';
  MyHost := ConfigManager.Host;

Собственно, вопрос, как такое запилить в Rust?

 ,

AntonyRF ()

Хикке и static typing

Форум — Talks

Шок, видео:
https://www.youtube.com/watch?v=2V1FtfBDsLU
[само действо с ~20 минуты]

«I think types are an antipattern for program maintenance and extensibility.»

 , , , ,

Unununij ()

Ошибка ввода вывода hdd

Форум — Linux-hardware

Доброго времени суток! Есть жесткий диск на 3тб, который стоял в каком-то NAS от D-Link. Диск работал, потом попробовали воткнуть в Synology, который при попытке форматнуть диск выдал ошибку. Теперь диск форматнуть не получается. Gparted не видит таблицу разделов. При попытке определить диск выдает:

Ошибка синхронизации или закрытия файлов /dev/sdb: Ошибка ввода/вывода

При попытке выполнить

sudo fdisk -l /dev/sdb
fdisk: невозможно открыть /dev/sdb: Ошибка ввода/вывода
Сейчас поставил на выполнение
sudo badblocks -s /dev/sdb > /home/yazov/bad
В файлик падает все подряд: 0,1,2,3,... При попытке выполнить
sudo dd if=/dev/zero of=/dev/sdb bs=512 count=1
Ситуация та же - i/o error.

Есть какие-нибудь идеи или это труп? Диск относительно свежий, год ему. Данные мне не нужны, а вот диск - напротив.

 ,

Yazov ()

LORCode Tools: панель тегов и цитирование выделенного

Форум — Lor-source

Скрипт добавляет панель тегов над формами ответа/треда/профиля/etc.
Кроме тегов на панели есть специальные функции:

  • «brs» добавляет [br] к переводам строк;
  • «fix», а-ля викификация: превращает (c) в ©, (f) в £, " - " в " — " и еще много;
  • «deltags-in» снимает крайнее (внешнее) обрамления тегами в выделенном.

Добавляет ссылки сверху постов:

  • «блок-цитата» вставляет выделенный текст (или все сообщение) в тегах [quote];
  • «цитата» вставляет текст, добавляя в начало каждой строки стрелочки цитирования (>);
  • «юзер» вставляет обращение через тег [user] к автору соответствующего поста.

Для установки скрипта в Firefox вам необходимо расширение Greasemonkey, по ссылке на скрипт будет предложено установить его.
В Opera смотрите настройки для сайта >> скрипты, где задается папка JavaScript, в которую и должен быть сохранен скрипт.

Обновления:

  • 03.11.2011: v. 0.1
  • 04.11.2011: v. 0.11
  • 13.11.2011: v. 0.12
  • 14.12.2011: v. 0.13
  • 02.01.2012: v. 0.2
  • 14.04.2012: v. 0.21

Форки:

Официально поддерживается только тема black. Форки любого рода приветствуются.

При обновлениях обновляется все тот же файл, а равно ссылка не меняется (по крайней мере пока). Об обновлениях создаются соответствующие посты в треде, ChangeLog ведется на официальной странице. Рекомендую подписаться на тред.

Скрипт базируется на MultiCodePanel 2 (тоже мой проект) и распространяется на условиях лицензии Creative Commons Attribution 3.0 Unported.

Спасибо за помощь Yareg, спасибо авторам статей «Range, TextRange и Selection», «Учимся писать userscript'ы», «Textarea и управление им с помощью javascript», без вас у меня ничего бы не вышло.

 

moscwich ()

Ждущий режим в Puppy-linux.

Форум — Desktop

Вопрос такой, насколько корректно будет работать pm-utils (необходим ждущий режим) в системе на USB? Попробывал бы и сам, но на данный момент нет возможности переписать систему в случае неполадки. P.S. дистр Tahrpup 6.0.5, без всяких системГЭ.

 ,

Voyager1 ()

Видящий да увидит, слышащий да услышит!

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

Решил обновить рабочий стол своего домашнего, старенького и давно отжившего своё компа. Случилось это накануне и следующим интересным образом: мне попалась вдруг песня Егора Летова «Родина» (как раз к 23 февраля; странно, что я ее не слышал!!). Потом я встретил на youtube «симфоническую» (sic!) версию нескольких песен «Обороны» от одного музыканта, который оказался еще и художником. Одна из его работ в конечном счете сподвигла меня подправить десктоп. Вот как бывает :)

  • Puppy Linux
  • JWM
  • Compton
  • conky

Искомая песня: https://www.youtube.com/watch?v=HBtn3LOxuoQ

Симфоническая Оборона: https://youtu.be/-3hzSmj87HI?list=PLF0CCEDF529CC34F1

ДевиантАрт: http://rhads.deviantart.com/

>>> Просмотр (1024x768, 1203 Kb)

 , ,

powerguy ()

Магия энергосбережения в ядре.

Форум — General

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

Собранное ядро, в котором я выключил все, что мне не надо ( в том числе _все_ опции мониторинга и дебага )! прожило на 2 часа больше в режиме читалки, чем стоковое дебиановское, а добавление MuQSS дало еще пол часа и увеличило экономию под нагрузкой. А шедулер noop или deadline и на стоковом ядре экономит на ssd энергию(но на hdd - наоборот)...

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

P.S. в лолксах - потому что предчувствую приход маководов с их экономным уберзондом.

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

 , , , ,

timdorohin ()

Запилил безрутовый Reverse Tethering для Android

Форум — Mobile

[update]

Новая версия: https://github.com/vvviperrr/SimpleRT

Реализована поддержка сразу нескольких подключенных android девайсов, притом все девайсы находятся в одной виртуальной сети. Удобно напрямую обмениваться файлами с девайса на девайс.

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

Код полностью переработан, софтина стала намного стабильнее.

Потенциальные юз-кейсы (помимо очевидного - получения интернета):

  • анализ трафика
  • основа для стенда тестирования

[/update]

Позволяет раздать интернет с ПК на мобильный девайс через usb, без рута, без adb. Зачем оно местному анонимусу? В случаях, когда нет wi-fi, когда не ловит 3g/lte (или ловит, но скорость небольшая), но есть ПК с жирным каналом. Почему бы не воспользоваться им, да еще и попутно подзарядить девайс?

Софтина в 2-х частях, андроидная и десктопная. Андроиды поддерживаются от 4.0 и выше. Оси - только линукс и osx. По факту создается виртуальный туннель, на десктопе настраивается ip forward и nat. Можно использовать для передачи файлов с ПК на девайс и обратно (поднять туннель и запустить ftp/samba/etc сервер на девайсе). Хорошая альтернатива mtp (который под линуксом работает чуть лучше, чем никак).

Для передачи данных по usb используется Android Open Accessory API, т.е ПК выступает в роли аксессуара. Со стороны ПК - libusb, с простой реализацией AOA.

Андроидная часть - простой VpnService, без гуя. При первом коннекте девайс спросит, использовать ли софтину постоянно с этим «аксессуаром» и разрешает ли владелец перехват трафика. При последующих соединениях просто молча запустится тетеринг.

Есть минусы: некоторые приложения (например youtube) не хотят работать с сетью, если нет ни wi-fi, ни 3g соединения. Выход - смириться, либо перед запуском туннеля оставить один из видов соединения. Трафик все равно пойдет по туннелю (на нем дефолтный маршрут). Ну либо поднять рута, в xposed framework есть плагин, который исправляет ситуацию.

Конкуренты с маркета:

Естественно open source. Код далек от идеала, по факту это просто proof of concept. Но работает стабильно. Идеи, пожелания, рекомендации охотно принимаются на гитхабе.

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

https://github.com/vvviperrr/SimpleRT

пс. подгоните иконку тематическую.

upd. тема на hn - https://news.ycombinator.com/item?id=12198085

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

 , , , ,

vvviperrr ()

Addon для браузера позволяющий просмотреть HTTP заголовки как есть

Форум — Web-development

Существует ли addon для firefox или chromium позволяющий просмотреть HTTP header как есть не распарсивая их. Как например можно смотреть с помощью wireshark. Но так как один сайт пихает чего то в эти заголовки и при этом использует HTTPS что делает невозможным просмотр с помощью wireshark. Делаю всё один в один в скрипте как в браузере но вместо 302 скрипт получает ответ 403 FORBIDDEN хотя всё один в один. Козлы! Взяли моду пихать туда чего то джаваскриптом!

 , , ,

iluha16 ()