LINUX.ORG.RU

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

Посоветуйте литературу и нормальную документацию к Haskell

Форум — Development

Сабж. Желательно на русском языке.

 ,

playX
()

Haskell и Foldable

Форум — Development

Всем привет.

Познаю хаскель, наткнулся на проблему.

Есть простое дерево с лесом:

data RoseTree a = RoseEmpty | RoseTree a [RoseTree a]                                  
                    deriving (Show,Eq)

Пытаюсь реализовать для него интерфейс тайпкласса Foldable:

instance Foldable RoseTree where                                                       
    foldr _ acc RoseEmpty       = acc                                           
    foldr f acc (RoseTree x []) = f x acc                                       
    foldr f acc (RoseTree x ts) = let mapped    = map (foldr f acc) ts          
                                      folded    = foldr f acc mapped            
                                  in f x folded

Идея простая: чтобы свернуть список поддеревьев, применяю частично примененный (foldr f acc) к списку, получаю вместо списка поддеревьев (RoseTree a) список значений (a), потом сворачиваю список значений и применяю функцию f к значению ноды из паттерна и свернутому значению поддеревьев.

Но получаю ошибку в ghci:

error:
    • Couldn't match type ‘b’ with ‘a’
      ‘b’ is a rigid type variable bound by
        the type signature for:
          foldr :: forall a b. (a -> b -> b) -> b -> RoseTree a -> b
        at lecture11.hs:131:5
      ‘a’ is a rigid type variable bound by
        the type signature for:
          foldr :: forall a b. (a -> b -> b) -> b -> RoseTree a -> b
        at lecture11.hs:131:5
      Expected type: [a]
        Actual type: [b]
    • In the third argument of ‘foldr’, namely ‘mapped’
      In the expression: foldr f acc mapped
      In an equation for ‘folded’: folded = foldr f acc mapped
    • Relevant bindings include
        folded :: b (bound at lecture11.hs:134:39)
        mapped :: [b] (bound at lecture11.hs:133:39)
        ts :: [RoseTree a] (bound at lecture11.hs:133:29)
        x :: a (bound at lecture11.hs:133:27)
        acc :: b (bound at lecture11.hs:133:13)
        f :: a -> b -> b (bound at lecture11.hs:133:11)

Насколько я понимаю, ругань на то, что частично примененный (foldr f acc) получает на вход список не того типа. Но не могу понять почему, ведь этот foldr есть мой рекурсивный вызов и по идее он должен выглядеть так:

map (foldr f acc) ts

или для примера

map (foldr (+) 0) [RoseTree 1 [], RoseTree 2 [], RoseTree 3 []]

т.е.

[foldr (+) 0 (RoseTree 1 []), foldr (+) 0 (RoseTree 2 []), foldr (+) 0 (RoseTree 3 [])]

и по одной из моих реализаций Foldable RoseTree, где

foldr f acc (RoseTree x []) = f x acc

, получаем [1, 2, 3], что подтверждается пошаговым биндингом этого кода в ghci, но вот целиком ghci мой Foldable не проглатывает.

В чем проблема, парни?

 ,

WaterLine
()

Поиск работы за границей РФ: доступ из вашей страны запрещен и другие важные вещи

Форум — Job

Как вы знаете, в РФ есть довольно странное законодательство на счет персональных данных, в котором зарубежные рекрутеры не хотят разбираться. Со стороны это выглядит так, как будто вы пошли на сайт например Red Hat или IBM, а нажать кнопку «apply» вам не дали, вывесив текст о том, что законодательство вашей cтраны не позволяет обрабатывать персданные за границей.

ВАЖНО: эту заглушку не ставит работодатель, ее ставит рекрутер потому что так ему посоветовал МакКинзи или Прайс, которые так посоветовали потому что увидели некоторый риск для рекрутера. Никаких других прчин для этого нет, если вы зайдете на ту же страницу с IP любой европейской страны или США, то ваше резюме будет принято, рассмотрено, вам будут звонить на ваш российский номер телефона.

Важно понимать, что перетащить вас из страны в страну стоит некоторого количества сил и денег. Самостоятельно этого добиться трудно, для этого есть специальные агенства, у которых есть отработанные процедуры. Из этого есть 2 важных прямых следствия и одно косвеное: искать работу стоит в больших корпорациях/стартапах с деньгами, которым не горит вас нанять и для которых затраты на перевозку не критичны. Просто составьте таблицу больших фирм, чья продукция вам нравится, сходите на их раздел «Карьера» и попроситесь на все-все вакансии, которые вам подходят. Второе следствие: естественно все эти затраты кратно вернутся работодателю за первые ваши 2 года работы, так как бизнес - деятельность по извлечению прибыли и единственная причина вас нанять и тащить через пол мира - маржинальность вашей деятельности (местный попросит больше денег и не будет так держаться за место как вы за визу). Это нормально, считайте их затраты на ваше беспроблемное перемещение своей косвенной прибылью. Самостоятельно вы все равно потратите больше, можете потерпеть неудачу не зная точно важных формальностей. Косвенное следствие: с идущими работать в большую корпорацию посольство обращается значительно мягче, чем с идущими работать в новую или мутную фирму.

Прежде чем посылать CV в большую фирму, сходите на Linkedin/Facebook, пройдитесь там по знакомым и укажите их как референсы в резюме. Вы не поверите, сколько пользователей ЛОР, например, в Бренском Red Hat или IBM и с каким удовольствием они оставят о вас отзыв своему HR. Cпойлер: это возможные премии во многих конторах, так что не стесняйтесь спрашивать и просить рекомендации.

UPDATE из 2019. Теперь по крайней мере Red Hat заставляет формально аппаиться через российское представительство посте того, как зааплаился через VPN.

Перемещено Falcon-peregrinus из job

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

 , ,

Shaman007
()

Курс по компиляторам

Форум — Development

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

Вот, выкладываю ссылку (может будет полезно кому-нибудь) https://lagunita.stanford.edu/courses/Engineering/Compilers/Fall2014/

Если есть ещё слоупоки кроме меня, то давайте вместе проходить!

 , ,

dsxl
()

Отлючения Intel ME тред

Форум — Linux-hardware

К линуксу это имеет немного косвенное отношение, но здешним линуксоидам будет интересно. Авось информация начнёт копиться в одном месте. Немного самонадеянно с моей стороны, но прошу обратить внимание, что это не talks|general, и тред не про вопросы нужности.

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

Сначала проверим, активен ли Boot Guard. Сделать это можно из под линукса, метод с патченной intelmetool из coreboot. У меня не сработало (error access чего-то там, запускал ессно от рута), но вы по ссылке сходите, там информация о косвенных признаках присутствия Boot Guard, который, суде по ссылке на сатью на хабр выше, может нам испортить всю малину.

В (CS)ME System Tools с форума все утилиты есть для доса и .efi, а FWUpdate и для линукса. Но FIT есть только под винду. Можно ли без неё - хз. Но все туториалы, которые я находил, все опирались на неё. Поэтому далее манипуляции проводил из под винды.

Запустил скачанную с форума под своё железо MEinfo. Она бодро рапортует. Что-то. Если что-то такое, то конкретно вам повезло.

В таком случае, если вы с помощью утилиты flash programming tool (FPT) дампните себе всё (fpt.exe -d image.bin), то всё скорее всего пройдёт без ошибок. Полученный образ будет содержать таблицу-дескриптор, дамп биоса, дамп МЕ, ещё чего-нибудь. Посмотреть на эту таблицу, кстати, можно натравив coreboot'овский ifdtool либо на образ, либо на результат выполнения команды fpt.exe -D desc.bin -DESC (на случай, если МЕ не дампается).

Этот обрах можно редактировать в flash imaging tool (FIT). Всё настраиваете (убрать бут гард, отключить МЕ, поставить HAP-бит, например). Ещё можно взять ME регион, который появляется в папке disassembly в папке с экзешником FIT, и натравить на него me_cleaner (инструкцию как всё правильно сделать находил в интернете). По отчётам, с HAP битом эта процедура не ломает загрузку.

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

Если же на этапе проверки бут гарда не повезло, и картинка какая-то такая, то не повезло, и фиг что с ME сделаешь. Наверно. У меня картинка на ноутбуке была как раз такая.

Я не очень шарю во всём этом, могу где-то тупить. Хочу попробовать поменять что-нибудь с помощью setup_var, но никак не могу понять, какие адреса переменных использовать. IFRextract'овский файл содержит VarStoreInfo и VarStore, и я хз, какой адрес использовать. Не знаю, насколько это осмысленно, поэтому прошу не пинать.

Например, тут:

One Of: Me FW Image Re-Flash, VarStoreInfo (VarOffset/VarName): 0x2, VarStore: 0x4, QuestionId: 0x86E
Ясное дело, что нельзя просто написать setup_var 0x2|0x4 0x1, потому что на 0x2 и 0x4 - это явно не то, ведь поискав, находим и другие настройки с VarStore: 0x4 и VarStoreInfo: 0x2

Для примера дамп «скрытого меню» (я хз как в него попасть, был бы рад советам): Section_PE32_image_E6A7A1CE_5881_4B49_80BE_69C91811685C_Setup_body IFR.txt

                                UEFI Protocol Detected
--------------------------------------------------------------------------------


                                String Packages
--------------------------------------------------------------------------------
Offset:		Language:
--------------------------------------------------------------------------------
0x354		en-US (0x0)


                                   Form Sets
--------------------------------------------------------------------------------
Offset:		Title:
--------------------------------------------------------------------------------
0x44E74		Platform Information Menu (0x12CB from string package 0x0)
0x45504		Intel Advanced Menu (0x12DD from string package 0x0)
Интересный кусок
0x5DB4A 		Ref: Firmware Update Configuration, VarStoreInfo (VarOffset/VarName): 0xFFFF, VarStore: 0x0, QuestionId: 0x864, FormId: 0x1043 {0F 0F 89 03 8A 03 64 08 00 00 FF FF 00 43 10}
0x5DB59 		Gray Out If {19 82}
0x5DB5B 			QuestionId: 0xA17 equals value 0x1 {12 86 17 0A 01 00}
0x5DB61 				QuestionId: 0xA15 equals value 0x1 {12 06 15 0A 01 00}
0x5DB67 				Or {16 02}
0x5DB69 			End {29 02}
0x5DB6B 			One Of: ME State, VarStoreInfo (VarOffset/VarName): 0x2, VarStore: 0x1108, QuestionId: 0x865, Size: 1, Min: 0x0, Max 0x1, Step: 0x0 {05 91 91 03 92 03 65 08 08 11 02 00 10 10 00 01 00}
0x5DB7C 				One Of Option: Disabled, Value (8 bit): 0x0 {09 07 04 00 00 00 00}
0x5DB83 				One Of Option: Enabled, Value (8 bit): 0x1 (default) {09 07 03 00 30 00 01}
0x5DB8A 			End One Of {29 02}
0x5DB8C 		End If {29 02}
Про возможность писать ME:
0x5DD5A 	Form: Firmware Update Configuration, FormId: 0x1043 {01 86 43 10 89 03}
0x5DD60 		One Of: Me FW Image Re-Flash, VarStoreInfo (VarOffset/VarName): 0x2, VarStore: 0x4, QuestionId: 0x86E, Size: 1, Min: 0x0, Max 0x1, Step: 0x0 {05 91 8B 03 8C 03 6E 08 04 00 02 00 10 10 00 01 00}
0x5DD71 			One Of Option: Disabled, Value (8 bit): 0x0 (default) {09 07 04 00 30 00 00}
0x5DD78 			One Of Option: Enabled, Value (8 bit): 0x1 {09 07 03 00 00 00 01}
0x5DD7F 		End One Of {29 02}
0x5DD81 		Suppress If {0A 82}
0x5DD83 			QuestionId: 0xA11 equals value 0x3 {12 86 11 0A 03 00}
0x5DD89 				Not {17 02}
0x5DD8B 			End {29 02}
0x5DD8D 			One Of: Local FW Update, VarStoreInfo (VarOffset/VarName): 0x1, VarStore: 0x1108, QuestionId: 0x86F, Size: 1, Min: 0x0, Max 0x1, Step: 0x0 {05 91 8D 03 8E 03 6F 08 08 11 01 00 10 10 00 01 00}
0x5DD9E 				One Of Option: Disabled, Value (8 bit): 0x0 {09 07 04 00 00 00 00}
0x5DDA5 				One Of Option: Enabled, Value (8 bit): 0x1 (default) {09 07 03 00 30 00 01}
0x5DDAC 			End One Of {29 02}
0x5DDAE 		End If {29 02}
0x5DDB0 	End Form {29 02}

Может, это вообще не то, я целый вечер тыкаюсь почти вслепую.

Для определённости. Использовал биос от ThinkPad P50 (1.46).

 , , ,

Mihahail
()

Школьникам и студентам: помогу освоить программирование

Форум — Development

Здравствуйте!

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

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

Разумеется всё на Linux, если в университете требуется работа программы под Windows, помогу освоить кроссплатформенную разработку.

Всё совершенно безвозмездно, т.е. даром. Кому интересно прошу стучаться в почту: undefer _na_ gmail.com

 ,

unDEFER
()

Как рисовать объемные графики

Форум — Development

Нужно на Python 3 нарисовать данные по типу таких, для начала без прозрачностей: https://www.tecplot.com/wp-content/gallery/3d-plots/tecplot_3d_cfd_fluid_blow...

Есть ли такие библиотеки. Вот представленная на этой картинке - проприетарная штука, управляется через Python. А на халяву есть?

 ,

I-Love-Microsoft
()

Отключаем PulseAudio в Linux

Форум — Linux-hardware

Здравствуйте! Сегодня мы узнаем, как отключить PulseAudio в Linux! Но «для чего?» не узнаем - вы должны знать ответ сами!

Как это сделать?

mkdir ~/.config/pulse
echo "autospawn = no" >> ~/.config/pulse/client.conf
killall pulseaudio

Вообще, тут должен был быть скучный список «если такой-то дистр меньше N-й версии, то ~/.pulse, а если больше, то ~/.config/pulse». Или хитрый скрипт, который проверяет «if ~/.pulse exist, then echo tuda, else echo v ~/.config/pulse». Но сделаем просто:

mkdir ~/.config/pulse
mkdir ~/.pulse
echo "autospawn = no" >> ~/.config/pulse/client.conf
echo "autospawn = no" >> ~/.pulse/client.conf
killall pulseaudio

Вот! Чтобы наверняка.

Почему не работает просто killall pulseaudio?

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

Почему не удалить пульсу?

Многие программы слинкованы с /usr/lib/libpulse.so.0 Upd: Оказывается libpulse и системная служба PulseAudio - в разных пакетах! Значит, удалять всё-таки можно.

То есть, отключаем пульсу - и всё, звук идёт через ALSA?

Да. Попробуйте сами.

Хотя не совсем. В некоторых дистрибутивах Linux не исчезает ALSA-устройство «pulse» - звук, соответственно, идёт в /dev/null. У меня в Debian и Ubuntu ALSA-устройство «pulse» пропадает при отключении пульсы. А в openSUSE пришлось также удалить/переименовать/закомментировать конфигурационный файл /etc/asound-pulse.conf.

Это устройство - довольно хитрый «костыль»: те программы, которые поддерживают PulseAudio, выводят звук напрямую в него. А те, которые поддерживают только ALSA, выводят звук в ALSA-устройство default, ведущее в «pulse», которое ведёт в PulseAudio. А потом снова в ALSA, и далее в дом, который построил Джек

Какие проблемы могут быть?

  1. Исчез значок в системном трее

    У меня в KDE такого не было, но было в MATE. В MATE можно установить программку Volti. В репозиториях она собрана с GTK2, а в GIT доступна начальная поддержка GTK3

  2. Перестали работать мультимедийные клавиши клавиатуры

    У меня такого не было, но другие люди жаловались. Если у вас не работает, включите в настройках Volti. Работает либо через HAL, которого в современном линуксе уже нет (но есть в CentOS 6), либо через Xlib (который в современном линуксе ещё есть). Также советую выставить в настройках Volti недефолтный микшер (например этот), потому что дефолтный неудобен.

  3. Исчез звук в Skype 4.3

    Запускайте через apulse (уже в репозиториях!)

  4. Исчез звук в приложениях, использующих SDL (99% игр)

    У меня в KDE такого не было, но было в MATE. Проверить можно этой игрой. Решается так:

    echo "drivers = alsa" > ~/.alsoftrc

    Или:

    export SDL_AUDIODRIVER=alsa
    ./run_game.sh
  5. Как заставить работать Bluetooth-гарнитуру?

    А тут вот что произошло. BlueZ 4 поддерживал ALSA, а BlueZ 5 - перестал. Разработчики сказали «а мы не обязаны! Вот посмотрите: разработчики PulseAudio написали плагин сами. Почему плагин для ALSA должны писать мы?», и удалили поддержку ALSA.

    Bluez-alsa пока доступен не во всех репозиториях, поэтому даю ссылку на исходники. Инструкция по настройке.

 , ,

ZenitharChampion
()

Язык для работы с массивами

Форум — Development

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

 

ados
()

Из чего сейчас модно делать роутеры?

Форум — Linux-hardware

Всем добра!

Хочу, наконец, поменять убогий дешванский SOHO TP-Link на крутой конструктор более универсальное решение.

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

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

Задачи: wi-fi ac на 5 устройств (максимально быстрая синхронизация файлов по воздуху), интернет 100 мегабит от провайдера, всякие owncloud и другие развлечения для красноглазых.

Изначально хотел себе собрать очень маленький Desktop и поручить ему работу роутера, но решил, что хочу сперва более специфичное устройство без вентилятора.

Поделитесь, пожалуйста, историями успехов или просто ссылками на материнский платы, сетевые карты, антенны.

 

aquadon
()

TMSU 0.4 программа для тегирования/пометки файлов

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

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

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

Особенности:

  • Утилита командной строки «tmsu» для создания и управления метками.
  • Виртуальная файловая система (FUSE), основанная на метках.
  • TMSU не трогает ваши файлы, вы можете прекратить пользоваться программой в любой момент.
  • TMSU не хранит ваши файлы, они остаются на своих первоначальных местах.
  • Информация по тегам хранится в обычной базе данных Sqlite3.
  • Запрос файлов из командной строки, например, " музыка " и " год " < 2000'.
  • Бесплатная и с открытым исходным кодом (GPL3).

Пример использования программы:

$ tmsu tag mysong.mp3 music audio year=2010
$ tmsu files music
./mysong.mp3
$ mkdir mountpoint
$ tmsu mount mountpoint
$ ls mountpoint/tags/music
mysong.1.mp3

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

 

fallout4all
()

Тегирование (назначение тегов) файлов в Linux

Форум — General

Всем привет, как-то уже давненько я пытался решить одну проблему, но так и не смог. Проблема в назначении тегов файлам на ПК, допустим, я хочу присвоить файлу теги amateur, teen, black qt и qml (если это мануал) и потом найти его поиском по тегам из пачки аналогичных мануалов по другим темам. Как мне это сделать? Желательно под KDE и чтобы было в репах моей божественной Федоры.

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

Гугл выдавал какие-то невнятные полудоделанные программки.

 ,

Fedorast
()

KVM для игр. мануал

Форум — Desktop

Здравствуйте. Кто из вас настраивал квм для игр? поделитесь полными мануалами.
Спасибо.

 , ,

darkenshvein
()