December 30, 2005
December 29, 2005
Language Oriented Programming
Стаття Мартіна Фаулера
Eng - Language Workbenches: The Killer-App for Domain Specific Languages?
Rus - Языковой инструментарий: новая жизнь языков предметной области
Мовноорієнтоване програмування - стиль програмування на основі створення програми за допомогою предметноорієнтованої мови.
Мовний інструментарій - загальний термін для всіх видів програм, які розроблено за допомогою об'єктно-орієнтовного програмування.
В статті робиться розділяння абстракції та конфігурації. Абстракція предаставляє собою бібліотеку класів і може використовуватись без змін у різних проектах, тодя як конфігурація специфічна для кожного проекту, її можна виділити в конфігураційний XML, але в статті обґрунтовується думка, що доцільніше для цього все ж використовувати спеціальний синтаксис (Domain Specific Language, DSL) - більш читабельно.
Внутрішній DSL - в якості конфігураційної мови вибирається мова, на якій написаний весь проект (C#) , але обменежа множина функцій цієї мови використовується (тільки окремі класи і методи).
Зовнішній DSL - спеціально розроблена дуже проста мова.
«Всяка задача стає тривіальною, якщо її сформулювати адекватною мовою» І. М. Гельфанд
Eng - Language Workbenches: The Killer-App for Domain Specific Languages?
Rus - Языковой инструментарий: новая жизнь языков предметной области
Мовноорієнтоване програмування - стиль програмування на основі створення програми за допомогою предметноорієнтованої мови.
Мовний інструментарій - загальний термін для всіх видів програм, які розроблено за допомогою об'єктно-орієнтовного програмування.
В статті робиться розділяння абстракції та конфігурації. Абстракція предаставляє собою бібліотеку класів і може використовуватись без змін у різних проектах, тодя як конфігурація специфічна для кожного проекту, її можна виділити в конфігураційний XML, але в статті обґрунтовується думка, що доцільніше для цього все ж використовувати спеціальний синтаксис (Domain Specific Language, DSL) - більш читабельно.
Внутрішній DSL - в якості конфігураційної мови вибирається мова, на якій написаний весь проект (C#) , але обменежа множина функцій цієї мови використовується (тільки окремі класи і методи).
Зовнішній DSL - спеціально розроблена дуже проста мова.
«Всяка задача стає тривіальною, якщо її сформулювати адекватною мовою» І. М. Гельфанд
Codepedia
Енциклопедія кусків коду із перехресними посиланнями між ними
http://rsdn.ru/Forum/Message.aspx?mid=1410268&only=1
Альтернатива бібліотекам, з таких репозитаріїв можна одержати тільки потрібний набір коду.
Деякі пов'язані ресурси:
http://sourceforge.net/projects/scriptorium
http://rubyforge.org/snippet/
http://rsdn.ru/Forum/Message.aspx?mid=1410268&only=1
Альтернатива бібліотекам, з таких репозитаріїв можна одержати тільки потрібний набір коду.
Деякі пов'язані ресурси:
http://sourceforge.net/projects/scriptorium
http://rubyforge.org/snippet/
December 27, 2005
Що таке монади?
All About Monads
Using Monads
Using Monads
Монада - це спосіб подання обчислень у вигляді значень і послідовностей обчислень з використанням цих значень. Монади дають змогу програмістам будувати обчислення з використанням зовні послідовнісного синтаксису (аля імперативного програмування) - виглядає як послідовність операторів, але зберігає строгість функціонального підходу. Монада визначає як комбіновані обчислення формують нові обчислення і звільняє програміста від ручного кодування таких комбінацій.
Зручно розглядати монаду як стратегію комбінування обчислень у більш складні обчислення. Наприклад є відома у Haskell монада Maybe:
data Maybe a = Nothing | Just a
що представляє собою спосіб обчислень, які можуть не повернути результату. Maybe тип пропонує стратегію комбінування обчислень, які повертають Maybe значення: якщо комбіноване обчислення скаладаєтсья з одного обчислення B, яке залежить від результату іншого обчислення A, тоді комбіноване обчислення повинно видати Nothing якщо одне з A чи B видає Nothing і комбіноване обчислення повинно видати результат обчислення B з аргументом A, якщо обидва обчислення не повертають Nothing.
Інші монади призначені для формування операцій введення/виведення, якщо операції повиння мати стан, можуть повертати багато результатів тощо. Існує стільки монадичних типів, скільки існує стратегій для комбінування обчислень, деякі особливо корисні і достатньо широко використовувані включено в стандартні бібліотеки Haskell 98.
У Haskell монада задається:
1. Конструктором типу (позничимо m)
2. Функцією, яка створює значення цього типу (типу a -> m a) - return
3. Функцією, яка комбінує значення цього типу з обчисленнями, які повертають значення цього ж типу аби повернути нове обчислення для значень цього типу... бррр..... (m a -> (a -> m b) -> m b) - >>=-- the type of monad m
data m a = ...
-- return is a type constructor that creates monad instances
return :: a -> m a
-- bind is a function that combines a monad instance m a with a computation
-- that produces another monad instance m b from a's to produce a new
-- monad instance m b
(>>=) :: m a -> (a -> m b) -> m b
December 23, 2005
December 22, 2005
Визначення: Markov decision process
Маємо дискретний час T={0, 1, 2, ...}.
Markov decision process задається
1) скінченними множинами St станів, для кожного t з T.
2) скінченними множинами At дій, для кожного t з T.
3) для кожного стану st з St і кожної дії at з At, задано ймовірніснісний розподіл переходу pt( . / st, at), для кожного t з T.
4) задано функцію винагороди rt : St * At -> R, для всіх t з T.
Markov decision process задається
1) скінченними множинами St станів, для кожного t з T.
2) скінченними множинами At дій, для кожного t з T.
3) для кожного стану st з St і кожної дії at з At, задано ймовірніснісний розподіл переходу pt( . / st, at), для кожного t з T.
4) задано функцію винагороди rt : St * At -> R, для всіх t з T.
Теорія прийняття рішень:Мова програмних адаптивних агентів
Decision Theory:The Language of Adaptive Agent Software
Table of Contents
Decision Theory:The Language of Adaptive Agent Software
Outline
Where Is Software Today?
Where Is Software Headed?
The Challenge of Complex Environments
What Is Adaptive Software?
The Myth of the Specification
The Myth of the Black Box
The Myth of Design Choices
The Myth of the Expert Programmer
Lessons of Object-Oriented Programming
Lessons of Adaptive Programming
What Are Software Agents?
Features of Agent-ness
What Makes Agents Different
You can't always get what you want
You never know what's going to happen
You’re not the only one in the world
The Adaptive Model of Programming
Decision Theory Is The Language For
Core Technology for Adaptive Software
The Three Laws of Robotics (and Agents?)
Design for a Rational Decision-Theoretic Agent
Real-Time Resource Allocation
Resource Allocation Example
Resource Allocation Computation
Technology for Multi-Agent Systems
Summary of Adaptive Software
Conclusions
Table of Contents
Decision Theory:The Language of Adaptive Agent Software
Outline
Where Is Software Today?
Where Is Software Headed?
The Challenge of Complex Environments
What Is Adaptive Software?
The Myth of the Specification
The Myth of the Black Box
The Myth of Design Choices
The Myth of the Expert Programmer
Lessons of Object-Oriented Programming
Lessons of Adaptive Programming
What Are Software Agents?
Features of Agent-ness
What Makes Agents Different
You can't always get what you want
You never know what's going to happen
You’re not the only one in the world
The Adaptive Model of Programming
Decision Theory Is The Language For
Core Technology for Adaptive Software
The Three Laws of Robotics (and Agents?)
Design for a Rational Decision-Theoretic Agent
Real-Time Resource Allocation
Resource Allocation Example
Resource Allocation Computation
Technology for Multi-Agent Systems
Summary of Adaptive Software
Conclusions
Memoization
Memoization - Wikipedia, the free encyclopedia
Memoization - методика, яка використовується для прискорення комп'ютерних програм шляхом зберігання результатів функцій для подальшого використання.
Тільки функції, результат яких залежить лише від аргументів можуть використовуватись тут, інакше потрібні складніші методи кешування.
Memoization - методика, яка використовується для прискорення комп'ютерних програм шляхом зберігання результатів функцій для подальшого використання.
Тільки функції, результат яких залежить лише від аргументів можуть використовуватись тут, інакше потрібні складніші методи кешування.
December 21, 2005
Ідентифікатор цифрових об'єктів
DOI
Система дозволяє присвоювати унікальні ідентифікатори об'єктам широкого спектру: статтям, різними об'єктам інетелектуальної валасності.
Тоді як різна інформація такого роду об'єкта (місце розташування у вебі чи навіть назва або автор) може змінюватись, унікальний ідентифікатор залишається без змін.
Система дозволяє присвоювати унікальні ідентифікатори об'єктам широкого спектру: статтям, різними об'єктам інетелектуальної валасності.
Тоді як різна інформація такого роду об'єкта (місце розташування у вебі чи навіть назва або автор) може змінюватись, унікальний ідентифікатор залишається без змін.
December 9, 2005
Логіка Хоара
Призначення логіки: надати множину логічних правил, які дали б змогу робити висновок про коректність комп'ютерної програми з такою ж строгістю, як математична логіка.
Основною особливістю логіки Хора є Тріплет Хоара - має вигляд {P} C {Q}, де P - передумова, Q - після умова, C - безпосередньо код програми.
Логіка Хоара включає аксіоми і правила для всіх базових типів операторів імперативної мови програмування.
Hoare logic - Wikipedia, the free encyclopedia
Основною особливістю логіки Хора є Тріплет Хоара - має вигляд {P} C {Q}, де P - передумова, Q - після умова, C - безпосередньо код програми.
Логіка Хоара включає аксіоми і правила для всіх базових типів операторів імперативної мови програмування.
Hoare logic - Wikipedia, the free encyclopedia
Основи Ruby
Дока Ruby (rus)
Інтрерактивний тутор - прикольно, можна попрограмувати на рубі прямо в браузері, без інсталяції - просто і легко
Особливості Ruby
* швидко і легко
o інтерпретує
o змінні не типізовані
o не потрібно оголошувати змінні
o простий синтаксис
o не потрібно слідкувати за розподілом пам'яті
* для ООП
o все є об'єктом
o класи, наслідування, методи тощо
o singleton метод
o Mixin by module (альтернатива множинному наслідуванню)
o iterator and closure
* скриптова мова
o інтерпретатор
o потужність операторів обробки рядків і регулярних виразів
o можливість прямого доступу до ОС (enable to access to OS directly)
* misc...
o multiple precision integers
o exception processing model
o dynamic loading
o підтримка багатопоточності
Інтрерактивний тутор - прикольно, можна попрограмувати на рубі прямо в браузері, без інсталяції - просто і легко
Особливості Ruby
* швидко і легко
o інтерпретує
o змінні не типізовані
o не потрібно оголошувати змінні
o простий синтаксис
o не потрібно слідкувати за розподілом пам'яті
* для ООП
o все є об'єктом
o класи, наслідування, методи тощо
o singleton метод
o Mixin by module (альтернатива множинному наслідуванню)
o iterator and closure
* скриптова мова
o інтерпретатор
o потужність операторів обробки рядків і регулярних виразів
o можливість прямого доступу до ОС (enable to access to OS directly)
* misc...
o multiple precision integers
o exception processing model
o dynamic loading
o підтримка багатопоточності
Design by contract
Design by contract
Проектування "за контрактом".
Це альтернатива для reference в .Net. Якщо в .Net ми явно вказуємо, які бібліотеки нам потрібні, то при підкході DBC - ми повинні описати, що повинні вміти робити ці бібліотеки. Такий опис і називається контрактом.
Проектування "за контрактом".
Це альтернатива для reference в .Net. Якщо в .Net ми явно вказуємо, які бібліотеки нам потрібні, то при підкході DBC - ми повинні описати, що повинні вміти робити ці бібліотеки. Такий опис і називається контрактом.
Eiffel - основи
Короткий огляд на dotSITE
Море лінків присвячених Eiffel - Cetus Links: 16604 Links on Objects and Components / Eiffel
Море лінків присвячених Eiffel - Cetus Links: 16604 Links on Objects and Components / Eiffel
Great Leap Forward from Java to Smalltalk
Great Leap Forward from Java to Smalltalk
Код в SmallTalk зберігається не в файлах, а в образах. Образ - це набір об'єктів, які живуть самі по собі. Робота програміста полягає у "спілкуванні" з цими об'єктами - через Workspace.
Код в SmallTalk зберігається не в файлах, а в образах. Образ - це набір об'єктів, які живуть самі по собі. Робота програміста полягає у "спілкуванні" з цими об'єктами - через Workspace.
December 8, 2005
Правила екстремального програмування
Правила екстремального програмування
Планування
* Пишуться User Stories.
* Власне план створюється в результаті Планування Реліза.
* Випускать часті невеликі Релізи.
* Вимірюється Швидкість проекту.
* Проект ділиться на Ітерації.
* Кожна ітерацяя починається зі зборів планування.
* Люди постійно міняються задачами.
* Кожен день починається з ранкових Зборів стоячи.
* XP правила коректуються якщо щось йде не так як треба.
Дизайн
* Простота.
* Обов'язково вибирається Метафору системи.
* Використовувати CRC картки для дизайну.
* Писати Пробні рішення для зменшення ризику.
* Не додавати ніяких функццй передчасно.
* Рефакторити чим більше тим краще.
Кодування
* Замовник завжди поруч.
* Весь код повинен відповідати прийнятому стандарту.
* Весь код повинен бути створений парним програмуванням.
* Часта інтеграція коду.
* Колективне володіння кодом.
* Залишати оптимізацію на потім.
Тестування
* Будь-який код повинен мати Unit Test.
* ВСІ Unit тести повинні успішно проходити перед здачею.
* Якщо знайдено баг, то тести коректуються чи створюються.
* Функціональні тести періодично виконуються і їх результати публикуються.
Планування
* Пишуться User Stories.
* Власне план створюється в результаті Планування Реліза.
* Випускать часті невеликі Релізи.
* Вимірюється Швидкість проекту.
* Проект ділиться на Ітерації.
* Кожна ітерацяя починається зі зборів планування.
* Люди постійно міняються задачами.
* Кожен день починається з ранкових Зборів стоячи.
* XP правила коректуються якщо щось йде не так як треба.
Дизайн
* Простота.
* Обов'язково вибирається Метафору системи.
* Використовувати CRC картки для дизайну.
* Писати Пробні рішення для зменшення ризику.
* Не додавати ніяких функццй передчасно.
* Рефакторити чим більше тим краще.
Кодування
* Замовник завжди поруч.
* Весь код повинен відповідати прийнятому стандарту.
* Весь код повинен бути створений парним програмуванням.
* Часта інтеграція коду.
* Колективне володіння кодом.
* Залишати оптимізацію на потім.
Тестування
* Будь-який код повинен мати Unit Test.
* ВСІ Unit тести повинні успішно проходити перед здачею.
* Якщо знайдено баг, то тести коректуються чи створюються.
* Функціональні тести періодично виконуються і їх результати публикуються.
December 6, 2005
Grasshopper
Developer Edition Product Page
Grasshopper являє собою плагін для VS.Net s дозволяє використовувати VS.Net для написання веб-додатків та веб-сервісів на C# чи VB.Net і виконувати розроблені системи на платформі Java (Схоже C# код компілюється в яву)
Grasshopper являє собою плагін для VS.Net s дозволяє використовувати VS.Net для написання веб-додатків та веб-сервісів на C# чи VB.Net і виконувати розроблені системи на платформі Java (Схоже C# код компілюється в яву)
Створення систем без кодування
... середовище розробки, яке зводить використання тексту програми до мінімуму, дозволяє створювати об'єктну модель методом компонування з екземплярів базових класів, а зв'язки задавати шляхом встановлення властивостей об'єктів.
Нагадаємо основні положення об'єктного метода. Для вирішення поставленої задачі будуєтья об'єктна модель, яка має ряд елементів: абстрагування, ієрархія, інкапсуляція, модульність, типізація, паралелізм і збережність. Об'єктна модель будуєтсья з об'єктів, які повинні мати такі властивості: ідентифікація, яка дозволила б відрізнити один об'єкт від іншого; станом, який задає значення їх полів; поведінкою, яка реалізується методами об'єкта. Вирішення задачі забазпечуєтсья функціонуванням об'єктної моделі. Що, в свою чергу, досягається посиланням об'єктами повідомлень один одному і їх реакцією на ці повідомлення. Передача повідомлень здійснюється викликом методів об'єктів.
http://www.osp.ru/os/2004/06/049_print.htm
http://www.softcraft.ru/paradigm/oop/flora/index.shtml
Snippet Compiler
Snippet Compiler
Простеньке середовище для програмування в C#, можна використовувати, коли потрібно протестувати невеличний фрагмент коду, але воблом відкривати проект в студії.
Простеньке середовище для програмування в C#, можна використовувати, коли потрібно протестувати невеличний фрагмент коду, але воблом відкривати проект в студії.
December 2, 2005
Subscribe to:
Posts (Atom)