LINUX.ORG.RU

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

Написал функцию, куда положить?

Форум — Development

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

Что делает:
Cчитает уровень градиента в заданной точке. Задается A(x1, y1), B(x2, y2) - линия градиента, значения от 0 до 255. Также задается точка T(tx, ty) и считается значение градиента в этой точке.

Код:
http://paste.org.ru/?3ux5ln

Код без комментариев:

unsigned char GradientValue(int x1, int y1, int x2, int y2, int tx, int ty)
{
    if ((x1 == x2) && (y1 == y2))
        return 0;
    float AB_A = y2 - y1;
    float AB_B = x1 - x2;
    float NAB_A = AB_B;
    float NAB_B = -AB_A;
    float NAB_C = -NAB_A * x1 - NAB_B * y1;
    if ((NAB_A * x2 + NAB_B * y2 + NAB_C) *
        (NAB_A * tx + NAB_B * ty + NAB_C) <= 0)
        return 0;
    NAB_C = -NAB_A * x2 - NAB_B * y2;
    if ((NAB_A * x1 + NAB_B * y1 + NAB_C) *
        (NAB_A * tx + NAB_B * ty + NAB_C) <= 0)
        return 255;
    float Dx = (x1*(y2-y1)*(y2-y1)+tx*(x2-x1)*(x2-x1)+(x2-x1)*(y2-y1)*(ty-y1)) /
               ((y2-y1)*(y2-y1)+(x2-x1)*(x2-x1));
    float Dy = (x2-x1)*(tx-Dx) /
               (y2-y1) + ty;
    float AD = sqrroot((Dx-x1)*(Dx-x1)+(Dy-y1)*(Dy-y1));
    float AB = sqrroot((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
    float Ratio = (AD / AB) * 255;
    return (unsigned char)Ratio;
}

Пример применения:

    int x, y;

    int basecolor  = SML_COLOUR_RED;
    int transcolor = SML_COLOUR_BLUE;
    unsigned char alpha;
    int colour;

    for (x = 0; x < 500; x++)
    for (y = 0; y < 500; y++)
    {
        alpha  = SmlGradientValue(50, 50, 450, 450, x, y);
        colour = SML_COL_MIX(basecolor, transcolor, alpha);
        SmlImagePixelSet(img1, colour, x, y);
    }

Результат:
https://dl.dropboxusercontent.com/u/31471800/p2p/grad.png

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

 ,

inn
()

Чем так хороши макросы в Lisp?

Форум — Development

Уже много всякого прочитал про лисп(в том числе Practical Common Lisp и уже даже освоился с Clojure), но никак не могу понять, чем же на самом деле являются макросы в этом языке. И этот вопрос не дает мне покоя т.к. лисп сильно повлиял на мое мышление и я вижу, что лисп (а особенно, common lisp для своего времени), действительно, лучше и удобней других языков (ну, за исключением странного скобочного синтаксиса ^^) ... Если бы его преимущества заключались в динамической типизации, сборке мусора и интерактивном цикле разработки, то их в полной мере имели бы питон, javascript и даже php.

Обычно пишут, что макросы - сильная сторона лиспа, которая отличает его от других языков и в качестве аргументов приводят неудачные примеры, которые довольно просто реализовать в других языках. Может кто-нибудь объяснить более-менее формально, что такое макросы? В чем их преимущества?

Для себя мне удалось выделить лишь два свойства макроса, отличающих его от функции:

макрос выполняется до исполнения кода; вычислением аргументов макроса управляет программист.

Первое мне видится ограничением, которое приводит к целому ряду неудобств, как, например, невозможность применить apply к макросу(особено часто хочится сделать (apply and ...) или (reduce and ...)).

А второе может быть легко реализовано посредством функций высшего порядка хоть в C и C++. Для примера, в весьма популярной книге «Приемы объектно-ориентированного проектирования. Паттерны проектирования» Э. Гамма, Р. Хелм, Р. Джонсон, Д.Влиссидес описываются пaттерны Command и Interpreter - в комбинации это в точности макросы времени выполнения...

 

CheKastro
()

Машина тьюринга

Форум — Talks

Я почитал в свое время про машину тьюринга и машину поста. Толком ни хрена не понял идею. В надежде, что я что-то пойму, я скачал десктопную машину поста и выполнил на ней пару десятков задачек по программированию. Программировать на ней у меня получалось, но понимания после этого как не было так и нет. Эти формализмы слишком много скрывают в своей реализации. Например, совершенно непонятно, как происходит переход между ячейками ленты. Как головка идентифицирует символ метки. Как она может быть одновременно и средством записи и ср-вом чтения, да еще и средством замены. И еще over 1000 вопросов.
Возникает такое ощущение, что тебя посадили на звездолет с блекджеком и шлюхами, показали кнопки «взлет», «место назначения» и теперь ты, значит понимаешь, что такое вычисления. Еще бы не помешала цистерна джек дениэлса, чтобы не задавал лишних вопросов. Летай, трахайся, бухай - теперь ты знаешь, что такое вычисления.
Не кажется ли вам, Господа, что подобные «машины», слишком сложны, чтобы претендовать на формализацию вычислительных процессов.

 формализм вычисления

anonimous
()

руби-стартап vs си-опенсурс

Форум — Talks

Чтобы вы выбрали, если бы у вас появилось много свободного времени?

nerdogeek
()

Релиз Clojure 1.4

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

Вышла новая версия языка программирования Clojure — современного диалекта Лиспа с поддержкой разработки в интерактивном режиме, поощряющего функциональное программирование и упрощающего поддержку многопоточности. Clojure работает на платформах JVM и CLR.

Среди изменений:

  • Расширяемая процедура чтения. Теперь разработчик может указывать функцию для чтения своих типов данных. Для этого необходимо указать метку для своего типа данных и соответствующую функцию чтения, которая будет вызвана после того, как следующая за меткой форма будет считана стандартным reader. Пример:
    #foo/bar [1 2 3] 
    ;;после чтения метки reader сначала считает форму [1 2 3], затем осуществит вызов процедуры, связанной с этой меткой, и передаст ей считанные данные.
    
  • Новый синтаксис для доступа к полям записей. Теперь можно писать так:
    (defrecord Foo [x]) ;=> user.Foo
    (.-x (Foo. 10)) ;=> 10
    
  • Возможность контролировать поведение компилятора, задавая опции в переменной *compiler-options*.
  • Исправлены некоторые ошибки.

>>> Полный список изменений

 , ,

ymn
()

[Clojure] Перепись

Форум — Development

Для использующих Clojure:

  • В какой области применяете? Успешно?
  • Какими инструментами разработки пользуетесь? (IDE, система сборки и т.п.) Опишите в 2х словах производственный процесс :)
  • До этого были знакомы с Java? С Лиспом?
  • Ваше мнение о Clojure.

 

o
()

ФОРТРАНа-тред

Форум — Talks

Вчера, под воздействием веществ, предавался воспоминаниям. И допредавался до воспоминаний о ФОРТРАНе.

Погуглил - книжки, кажись, пишутся, стандарты выдумываются etc

Вопрос: как обстоят дела с сабжем в этих ваших мухосрансках? Совсем печально, или в каких-нить науках оно живее всех живых?

Понятно, что речь идёт не о коммерческих прожках.

 , , фортран

Deleted
()

лексическая область видимости

Форум — Development

Небольшая непонятка.

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


(define a 1)
(define tst (lambda() (write a)))
(define a 10)
(tst)

10
Почему функция берет значение а из контекста вызова а не определения? Мы имеем, по факту динамический биндинг?

 

anonimous
()

Будущее Smalltalk и Ъ-ООП

Форум — Development

Вопрос к смоллтолкером и ооп-шникам. Скажите - каково будущее у данного языка? Какой из диалектов наиболее развит и перспективен? Как себя чувствуют поделки на jvm (Redline Smalltalk)? Как дела у Smalltalk/X? GST уже научилась работать по человеческому под оффтопиком?

Есть ли еще языки, кроме эльфиля, которые реализуют полностью именно классическое представление об ООП? (именно подход смаллтолка). Лишпики не предлагать.

 , , ,

silver-bullet-bfg
()

Человеческое метапрограммирование

Форум — Development

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

Ndulu
()

Erlang - что почитать?

Форум — Development

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

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

Btw: исключая видеокурс Царёва( http://erlang-mnesia-video.ru/ ), ессно, это я уже освоил в полной мере

 , ,

lovesan
()

Хороший компьютерщик сейчас - как хороший конюх в начале 20-го века

Форум — Talks

Из комментариев одного юзера:

За последие 10 лет у людей стало меньше свободного времени, а скоро будет ещё меньше.

Раньше программисту можно было, как в «Office Space», тратить на решение чисто рабочих вопросов по 15 минут в день, а всё остальное время можно было уделять любимому занятию. Тот же Линус писал в «Just for fun», что он целый год играл на компе, прежде чем написать то самое сообщение, с которого и началось Ядро.

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

А куда ж он денется? Хороший компьютерщик сейчас - как хороший конюх в начале 20-го века, хороший радист в середине или хороший специалист по электронике в 70-х. Профессия нужная, распространённая и, вроде, в будущем востребованная. А потом приходит будущее и оказывается, что всё не так. В случае с компьютерщиками - оказывается, что шаг влево-вправо стал уголовным преступлением, все возможные программы давно написаны, а все возможные идеи давно запатентованы. Чтобы хотя бы разобраться в основах, нужно очень много сил. Разобрался - в смежную область уже не шагнёшь: старость на пороге и мозги не те. Вот суперспецы и шли на радиорынок детальками барыжить. А которым не хотелось - соглашались доживать до пенсии на зарплате в 5000. То же будет и с узкими специалистами по ядру.

nerdogeek
()

Геттер и сеттер: что они дают?

Форум — Development

Уточняю: понятно что некоторые поля классов и т.д. должны быть закрыты от доступа извне. Однако что дает сеттер и геттер вся работа которых, просто тупо присвоить значение без каких-либо проверок или же отдать значение без проверок. В чем сакральное преимущество перед обычным присвоением или прямым доступом к полю у такого сеттера\геттера? Когда внутри сеттера есть проверки на корректность входного значения, то зачем он-- понятно

 ,

pylin
()

Веб программисты здесь есть? Совет дать можете?

Форум — Web-development

Встал на путь становления веб программиста! Что изучать после html и css, javascript или php? Просто навыков программирования нет, даже в школе basic не изучал. Советовали следовать алгоритму html>css>javascript>jquery>php или же можно нарушить порядок, начав к примеру сразу с php.

 , ,

kuchbuch
()

Нет присваивания.

Форум — Development

Не силен в функциональной парадигме, пытаюсь сейчас вникнуть. На одном из сайтов нашел такое определение:

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

В связи с этим вопрос: является ли такое определение присваиванием с точки зрения ФП:

(define a (let ((x 1)) (lambda(y) (x y))))

 

new_1
()

Очепятки в книге по функциональному программированию

Форум — Development

В занимательной книженции Душкина «14 занимательных эссе о языке Haskell и функциональном программировании» в разделе про комбинаторы есть такой пример кода:

data Combinator = Var String
		| App Combinator Combinator
		| Lam String Combinator
  deriving Eq
instance Show Combinator where
  show (Var x)= x
  show (App x y) = case y of
     App _ _ -> showLam x ++
		"(" ++
		show y ++
		")"
     _	     -> showLam x ++
		showLam y
    where
	  showLam l@(Lam _ _) = "(" ++
	  			show l ++
				")"
	  showLam x	      = show x
  show (Lam x e) = "\\" ++
		   x ++
		   "."
		   ++ show e
i = Var "I"
k = Var "K"
s = Var "S"

free :: String -> Combinator -> Bool              
free x (Var y)	   = x == y
free x (App e1 e2) = free x e1 || free x e2
free x (Lam y e)   = free x e

transform :: Combinator -> Combinator
transform (Var x) = Var x
transform (App x y) = App (transform x)
                          (transform y)
transform (Lam x (Var y)) | x == y
  = i transform (Lam x e)
                          | (not . free x) e
  = App k (transform e) transform (Lam x l@(Lam y e))
                          | free x e
  = transform (Lam x (transform l))
transform (Lam x (App e1 e2))
  = App (App s (transform (Lam x e1)))
        (transform (Lam x e2))
Невооруженным глазом видны ошибки (естественно hugs его жрать отказывается). Тут е черт знает откуда взялась:
transform (Lam x (Var y)) | x == y
  = i transform (Lam x e)
Тут вообще синтаксически неверно:
                          | (not . free x) e
  = App k (transform e) transform (Lam x l@(Lam y e))
Я внес вот такие изменения:
transform :: Combinator -> Combinator
transform (Var x) = Var x
transform (App x y)= App (transform x)
						 (transform y)
transform e@(Lam x (Var y)) | x == y
  = App i (transform (Lam x e))
			  | (not . free x) e
  = App k (transform e) 
transform (Lam x l@(Lam y e))  | free x e
  = transform (Lam x (transform l))
transform (Lam x (App e1 e2))
  = App (App s (transform (Lam x e1)))
	(transform (Lam x e2))
Но как человек, увидевший haskell практически вчера, я своим изменениям естественно не доверяю. Правильно ли мне удалось уловить мысль автора?

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

 

LIKAN
()

А что у нас есть свободного для работы с OBD2?

Форум — Development

Нарыл на ибее OBD2-сканер. Стоит недорого, судя по роликам на тытрубе, в линуксе работает (он просто эмулирует последовательный порт и можно хоть в сессии screen, хоть в com каком-нибудь «пообщаться» с ним в бинарных кодах).

Немного погуглив, нашел какие-то бородатые страшилы (на пхытоне, например, или на жабе). Еще видел что-то на плюсах, но там расшифровки кодов не было.

Вопрос: есть ли в природе нормальный «родной» для линукса свободный софт для работы с этой железякой? Обязательно с поддержкой Hyundai. Если нет — то хотя бы оформленные в виде заголовочных файлов коды ошибок/расшифровки где-нибудь на просторах интернета валяются?

В принципе, судя по протоколу, с OBD2 работать просто. Неохота лишь эти тонны диагностических сообщений для расшифровки кодов вручную прописывать. Хочу консольную утилитку, которая бы мне писала ошибки + текущее состояние системы. А еще в планах — купить дочке игрушку (планшет на 10"), чтобы мультики в машине смотрела. Так можно было бы и туда что-нибудь прифигачить. Вроде как программировать под ондроед не сильно сложно? А в наполеоновских планах — реализовать это дело на STM32 (кстати, есть свободный проект — надо будет покопаться, но он коды не расшифровывает), чтобы на экранчике текст выводился.

 obd2,

Anon
()

Посоветуйте книгу по Си

Форум — Development

Всем привет :)

Искал по трекерам, находил самую позднюю издания 2009 Керниган и Ритчи. Посоветуйте что-нибудь новее, если есть. Ну и желательно про всё-всё-всё, от переменных до GTK в одной книге. Спасибо :)

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

 , ,

Pa
()

Russian AI Cup — соревнование по программированию искусственного интеллекта

Новости — Linux в России
Группа Linux в России

Russian AI Cup — открытое соревнование по программированию искусственного интеллекта. Попробуйте свои силы в программировании игровой стратегии! Это просто, наглядно и весело!

Чемпионат второго Russian AI Cup называется CodeTroopers. Вам предстоит программировать искусственный интеллект для отряда бойцов. Ваши стратегии будут сражаться между собой в Песочнице и чемпионате. Вы можете использовать любой из языков программирования: Common Lisp, С++, Java, Visual Prolog, D, C#, Python или Pascal. Песочница уже открыта. Удачи!

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

Песочница: с 4 ноября по 15 декабря открыта для всех желающих; первая неделя будет проходить в режиме бета-тестирования, в этот период возможны нестабильная работа системы и существенные изменения в правилах, а 11 ноября в 00:00 рейтинг в Песочнице будет сброшен до первоначального состояния

Раунд 1: 23–24 ноября.

Раунд 2: 30 ноября–1 декабря.

Финал: 7–8 декабря.

Лучшие участники получат приятные призы: Макбуки, айпады и футболки.

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

 , , ,

anonymous
()

Чем сейчас лямбда выражения удобны?

Форум — Development

Что их наличие преподносится как большой плюс?

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

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

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

.....

T result;
{
// а вот тут код, который любят в лямбда функции совать
....
result = ....;
}
....

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

cvs-255
()