LINUX.ORG.RU

Сообщения den73

 

Golang взлетает?

Форум — Development

Не помню когда, но не больше года назад я смотрел вакансии по голангу на rabota.yandex.ru в Москве. Было, кажется, две. Сейчас пять. Также посмотрел список тех, кто пользуется голангом. «Я список кораблей прочёл до середины».

Хотя если взять вакансии с упоминанием слова «Clojure», то в Москве их 9. Со словом Scala - 23.

В общем, что вы думаете о здоровье golang-а?

 

den73
()

Сделать LiveCD (исполнитель найден)

Форум — Job

Требуется сделать LiveCD.

Требования:

- должен быть основан на «живом» LiveCD или на «живом» дистрибутиве Linux

- должен без проблем находить сеть (NAT) под VMWare Player под виндой и Oracle Virtual Box под линуксом

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

- должны быть установлены программы согласно ссылке (эта инструкция работала некоторое время назад и с ней не должно быть проблем)

- приложение занимает 360Мб (212Мб в архиве), но LiveCD должен вписаться в 400Мб. Наверное, понадобится сжатие файловой системы, или при запуске LiveCd приложение должно распаковываться из архива

- в ОС должен быть установлен веб-браузер и mc.

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

- русскоязычный интерфейс, переключение раскладок, индикатор текущей раскладки на десктопе

- легковесный VM, что-нибудь типа хfce.

Адрес для контактов указан здесь

Для меня комфортна сумма за такую работу в пределах 14 тыр. Если больше 20 - дешевле самому сделать :)

 

den73
()

Хочу свой LiveCD на базе PuppyRus

Форум — Development

Доброго времени суток. Хочу раздать своё приложение, чтобы можно было скачать LiveCD с ним и посмотреть, как оно работает.

Посмотрел на PuppyRus, на первый взгляд всё устроило.

Теперь мне нужно:

1. Выкинуть ненужные мне программы (например, музыкальные проигрыватели, калькулятор, мессенджеры и т.п.)

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

3. Добавить ярлычки на рабочий стол.

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

Куда копать, что читать? Есть ли здесь участники команды PuppyRus или это нужно на их форуме обсуждать? Или может быть PuppyRus - это плохо? Тогда прошу ваши аргументы.

 

den73
()

раздать своё приложение на поиграться

Форум — Development

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

Mercurial (aka hg)
sudo apt-get install mercurial
Git
sudo apt-get install git
SBCL
SBCL >= 1.2.7. To check your SBCL version, call sbcl --version from the shell, or (lisp-implementation-version) from SBCL prompt.
Tcl/tk
Tcl/tk >= 8.6.2. To check your tcl tk version start wish from the console and type in in the console: info patchlevel. If your distribution have earlier version, try Tombert's tcltk, see http://wiki.tcl.tk/668, or something else.
Quicklisp
Quicklisp. Clcon is now based on patched SLIME and NAMED-READTABLES so you might want to install another copy of Qucklisp if you have one. If you have no Quicklisp, download it, but do not set up SBCL to use it. On my machine, quicklisp is at ~/ql.sbcl.l, and it has ~/ql.sbcl.l/local-projects directory which we will use.
Decide clcon version
You can try trunk, but it is better to load latest tagged "release", 0.3.4. Note that online documentation usually describes trunk. To be sure that it matches software functionality, read not the online documentation, but documentation you have installed.
Lisp libraries, part 1 and clcon components
cd /s2/lib/ql.sbcl.l/local-projects
hg clone https://bitbucket.org/budden/budden-tools
git clone https://github.com/budden/slime 
git clone https://github.com/budden/named-readtables
# to download clcon's trunk, remove '-u 0.3.6' 
hg clone -u 0.3.6 https://bitbucket.org/budden/oduvanchik
hg clone -u 0.3.6 https://bitbucket.org/budden/clcon
Lisp libraries, part 2
hyperdoc, hyperspec-lookup, toposort: I patched two of these. The only way to get them is to download windows file release and get clcon/lp/third-party directory. Extract this directory as /s2/lib/ql.sbcl.l/local-projects/third-party .
Refreshing system-index for quicklisp:
cd /s2/lib/ql.sbcl.l/local-projects
rm system-index.txt
Build and start server
sbcl --no-userinit --load ~/ql.sbcl.l/local-projects/clcon/load-clcon-server-linux.lisp
If all is ok, you will see something like:
;; Swank started at port: 4009.
Waiting for oduvanchik to start.
*
Start client
chmod u+x ~/ql.sbcl.l/local-projects/clcon/clcon.tcl
~/ql.sbcl.l/local-projects/clcon/clcon.tcl

Я слышал, что есть Docker, LXC и другие средства виртуализации. Могу ли я с их помощью облегчить установку? В качестве экстремального варианта я могу выложить образ вирт. машины, но мне кажется это будет слишком уж тяжеловесно для скачивания. Но давайте и этот вариант рассмотрим. Моё приложение графическое (tcl/tk).

 , ,

den73
()

Языки, годные для крупномасштабных разработок

Форум — Development

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

Не предлагайте индекс Tiobe :) Про него я уже знаю, и он никак не говорит о масштабе проектов.

 

den73
()

3 самых громких истории успеха Common Lisp?

Форум — Talks

Я всегда говорю про емакс и про постгрес, но это всё фигня. Вот я сегодня прочитал на сайте Franz, что система планирования наблюдений телескопа Хаббла написана на лиспе. У кого есть что добавить?

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

 ,

den73
()

Продайте мне Хаскель

Форум — Development

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

Абстракция или костыль?

Абстракция. Есть много интересных применений и не только в хаскеле. В F# они называются computation expressions или workflows. На базе монады continuation строится механизм асинхронных вычислений (the async workflow). Ничего подобного в других языках (общего назначения) даже близко не видел. С такой легкостью задаются сложнейшие параллельные и асинхронные вычисления!

Вот можно поподробнее об этом, не применяя слова «монада» или «функтор». А простым Русским языком. То есть, допустим, я разрабатываю бухгалтескую программу, или веб-сайт, или среду разработки. И например, я так могу объяснить некоторые фичи из языков с точки зрения полезности для пользователя:

  • RAII нужна мне для того, чтобы при любой ошибке в программе мой файл отчёта закрывался, а не оставался захваченнным, что повлечёт проблемы для других пользователей.
  • Замыкания мне нужны для того, с минимальными усилиями сохранять состояние клиентского приложения во время, пока я жду ответа от веб-сервера, не создавая на каждый запрос к серверу новый объект данных.
  • Сборка мусора нужна мне для того, чтобы не заботиться об удалении каждого объекта, который я создал, а заботиться лишь о некоторых, и чтобы при этом моя программа не падала из-за ошибок обращения с кучей и не жрала лишнюю память.
  • call/cc мне нужен для того, чтобы реализовать в моей IDE инкрементную раскраску файла.
  • code walker мне нужен для того, чтобы реализовать call/cc там, где его нет, например, на лиспе.

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

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

Допустим, если вы знаете 5 применений монад (кроме оформления императивности), то достаточно 5 фраз.

 

den73
()

Crossover ищет программиста Common Lisp на удалённую работу, фултайм

Форум — Job

Предлагают $15 в час. Если вы находитесь в России, то надо открыть ИП (налог 6% + ещё какие-то мелочи, порядка 40 тыр в год).

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

Частичная занятость пока не обсуждается (уже обсуждалась и отвергнута). Рабочая неделя 40 часов. Я реально отрабатываю от 32 до 40, пока не выгнали :) Отпуска и больничные не оплачиваются. Кроме лиспа, нужно знать C/C++.

Я не работодатель и мотороллер не мой, так что дальше действуйте самостоятельно :)

 

den73
()

common lisp - ищется реализация лексических переменных времени компиляции

Форум — Development

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

Эта переменная должна быть связана до конца процесса компиляции, а дальше должна пропасть и не мешаться.

Наверное, для этого нужно поменять compile. Может быть, кому-то попадалась библиотека, которая создаёт слой переносимости между реализациями лиспа?

Или что-нибудь в CDR Process может быть есть?

Или это как-то тривиально делается, а просто я туплю?

 

den73
()

Cons как интерфейс

Форум — Development

Ищу библиотеку, в которой cons является интерфейсом, на базе этого интерфейса построена библиотека стандартных функций работы со списками. Удобный ввод-вывод (сопоставимый по удобству со стандартным print/read). Но при этом реализацию cons-а я могу сделать сам.

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

 

den73
()

Сослали на тесты. Что почитать?

Форум — Development

Задача состоит в том, чтобы доработать систему юнит-тестов. Что почитать? Интересует общая информация (понятия, методологии, типичные ошибки), а вовсе не конкретные реализации для языка программирования X.

Википедия советует «Лайза Криспин, Джанет Грегори. Гибкое тестирование: практическое руководство для тестировщиков ПО и гибких команд» - годнота?

 

den73
()

Разовый проект - SBCL/Common Lisp

Форум — Job

Есть разовый проект под SBCL, небольшой, но интересный. В целом задача примерно описана здесь:

Ищутся библиотеки для Common Lisp

но есть дополнения. Кому интересно - пишите, адрес в моём резюме, моё резюме здесь

http://rosinmn.ru/ecovillage/budden.html

Своё резюме присылать не надо, это я просто так адрес шифрую.

 ,

den73
()

Ищутся библиотеки для Common Lisp

Форум — Development

Ищу следующие вещи под пермиссивными лицензиями:

1. Реализацию неограниченного call/cc. Пока нашёл в Arnesi интерпретатор с call/cc и он вроде бы работает, но желателен всё же нативный код. Я знаю проблемы, связанные с call/cc в лиспе, но в данном случае я готов на компромиссы, можно мне не постить Ловесана.

2. cons как интерфейс. Т.е. должна быть возможность перекрыть примитивы car,cdr и cons и на базе этого должна быть построена библиотека лисповых функций работы со списками (и с последовательностями, в той части, где это касается списков). А также должна быть возможность в инспекторе SWANK скрыть реализацию, чтобы это было похоже на список. Пока не искал.

3. Структуры и массивы с состоянием, зависимым от времени, с возможностью откатить время до какой-то точки и начать с начала. Скажем, должна быть переменная *текущий-тик-часов* и при присваивании поля как-то запоминается, в какой тик это было сделано, и тик увеличивается на один. Дальше есть возможность эффективно узнать значение поля на любой тик. Также должна быть возможность сказать, «все тики, начиная с такого-то, более невалидны». И начать время заново.

 

den73
()

синтаксис отдельно, сахар отдельно

Форум — Development

Есть такая вот идея на тему ключевых слов.

Сделать их полными (полной длины). В том числе и для знаков. Например, сложение - это будет «плюс» или «сложить». Составной оператор будет «составной оператор».

Код хранится в файле именно в таком виде.

При открытии файла в среде к нему применяется сахар. Который представляет из себя отдельную таблицу сокращений. В ней записано, что составной оператор - это, скажем, «{}», а в плюс - это «+». И к тому добавляется затеняющая последовательность на случай, если совпадёт сокращение с реальным содержанием файла. Например, если мы сократим слово начать_вычисления до нв, а в файле уже есть слово нв, то «нв» - это будет начать_вычисления, а эскейп(нв) - это будет слово «нв».

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

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

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

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

Конкретный пример у меня тоже есть - квазицитаты. Мне на всё хватило более-менее коротких значков, но элегантные квазицитаты, как в лиспе, уже точно не получатся - значки закончились. А квазицитат иногда бывает много. Такие сокращения стали бы выходом в этом случае.

 ,

den73
()

Просто посоветуйте, как делать обработку ошибок

Форум — Development

Доброго времени суток!

Начинаю попытки создать для Яра спецификацию на то, что называется «исключениями». Вводные таковы:

1. Под капотом Common Lisp с его сигнальным протоколом.И библиотеки, написанные на CL. Поэтому придётся как-то уважать возможности CL.

2. Мне нравится та идея, что исключения являются частью сигнатуры функции. В связи с этим хотелось бы идей на тему того, как реанимировать «checked exceptions». Считается, что программы нужно писать слоями. А исключения проходят сквозь слои. Поэтому исключения нужно либо переупаковывать (что мне не кажется хорошей идеей), либо нарушается модульность. Есть ли какие-то ещё идеи на эту тему? В лиспе типы являются first-class сущностями, кроме того есть тип (А или Б или С). Ничто в принципе не мешает в библиотеке завести некий тип «все-мои-исключения», который будет одним из параметров процесса компоновки. В этом случае прикладной код может идентифицировать типы исключений, полученных от библиотеки, при этом не завися от этих типов. Что думаете на тему того, чтобы вот таким образом реализовать checked исключения без перупаковывания?

А также библиотека может представлять некую разновидность конструкции try..catch, оформленную в виде функции высшего порядка. Прикладной код будет применять эту функцию к телу своей функции и в итоге получится опять же, динамическая компоновка кода. Выглядеть это может как-то так:

определить модуль ру.розинмн.либа1/работа-с-файлами
  :пакет 
    пакет
      экспорт (
        Все-мои-исключения, //тип
        Вернуть-все-мои-исключения //реализация try .. catch
        )
    кнп
кном

/* функция, реализующая try .. catch. Функция вызывает свой
аргумент "что-делать-с-файлами" и перехватывает все исключения
файловой системы. Если они есть, то возвращает их, иначе 
возвращает то, что вернула ф-я "что-делать-с-файлами" */
функция Вернуть-все-мои-исключения(
  что-делать-с-файлами -- (: функция() -- тип-любой-кортеж :)
  ) -- (: тип-кортеж(возможно-исключение -- 
                     ?Все-мои-исключения, 
                    возврат -- тип-любой-кортеж) :)


// Клиент выглядит так:
функция дело()
  Вернуть-все-мои-исключения(
    лямбда
     С-открытым-файлом
       чёто 
       делать  
     кнС
    кнл
  )
кнф

3. Есть проблема «исключение в деструкторе». Для лиспа она не так актуальна, но я хочу в языке конструкции, подобные RAII. Проблема «исключение при отпускании ресурса», как мне кажется, является некоей разновидностью проблемы «исключение в деструкторе». Хотелось бы комментариев прежде всего от лисперов: значима ли эта проблема в лиспе? Если да, то как она правильно решается.

4. Хоть я уже неоднократно подходил к расту и го, я всё же не могу осилить, чем сделанное там отличается по сути от исключений в Яве и С++ и какой в этом смысл. Просветите.

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

 , , ,

den73
()

Яр - поругайте строки

Форум — Development

 , , ,

den73
()

golang - можно ли узнать, была ли паника?

Форум — Development

Если я всё правильно понял, то:

  • вызвать panic с аргументом nil вполне возможно.
  • при этом recover вернёт nil. Также recover возвращает nil при отсутствии паники. То есть, если есть recover, то невозможно определить, была ли вызвана паника с nil внутри данного куска кода или же код исполнился нормально.

Я всё правильно понял?

 ,

den73
()

clcon 0.3.6, yar 0.0.2

Форум — Development

Выложил очередную версию среды. Особых отличий нет (в основном поправлены баги). Зато теперь есть видео:

https://youtu.be/nMhwvZ56jHU

Страница проекта - здесь

https://bitbucket.org/budden/clcon

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

 , ,

den73
()

итак, боремся с грустными смайликами

Форум — Development

В С любой оператор должен заканчиваться точкой с запятой. Это порождает грустные смайлики ");" и «};» и я попытаюсь от них избавиться. Я изначально сомневался, нужны ли точки с запятой, и вот теперь появился против них ещё серьёзный аргумент.

Практически я имел дело с двумя языками, где нет точек с запятой - это tcl/tk и язык определения макросов в C. Перенос на новую строку осуществляется с помощью «\». Это выглядит и ощущается как голимая кустарщина. И это неудобно.

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

Я хотел бы услышать мнения полиглотов на тему новомодного golang. Я не понял пока что, как решена в нём эта проблема, но понял, что там что-то придумали на эту тему.

Удачно ли golang обходится без точек с запятой? Удобно ли это, понятно ли? Стоит ли так делать в новом языке?

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

Я пока придумал только одну вещь на замену «\». Сделать правило, что если в строке есть несбалансированная открывающая круглая скобка, то следующая строка является продолжением предыдущей, и так до тех пор, пока скобка не будет сбалансирована. Так, по сути, сделано в лиспе.

 , ,

den73
()

кодица получила название «Яр», исходники опубликованы

Форум — Development

В свое время вроде бы monk вызывался поучаствовать в запиле языка.

О боги, ниспошлите мне новый тег «яр», пожалуйста!

Сайт тоже слегка переехал. https://bitbucket.org/budden/yar

Но чтобы особо не расслабляться, есть вопрос. В лиспе есть префикс «def» и префикс «make-». Например, есть defpackage (объявить пакет) и make-package (создать пакет). Первый из них является декларацией, а второй - командой.

Яр является наследником лиспа, но мне не удалось нормально перевести приставку «def». Лучшее, на что меня хватило - это «объ_». Только что я понял, что функция будет писаться как «объ_функции» и это, конечно, ужас.

Что делать? Может быть, сделать по умолчанию язык декларативным, т.е., «библиотека», «класс» и «функция» на самом деле будет означать «объявить библиотеку», «объявить класс» и «объявить функцию», а приставку сделать для императивных конструкций? «создать_класс», «создать_пакет» и т.п. ?

Жду мнения полиголтов.

 ,

den73
()

RSS подписка на новые темы