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 - спеціально розроблена дуже проста мова.
«Всяка задача стає тривіальною, якщо її сформулювати адекватною мовою» І. М. Гельфанд
Codepedia
http://rsdn.ru/Forum/Message.aspx?mid=1410268&only=1
Альтернатива бібліотекам, з таких репозитаріїв можна одержати тільки потрібний набір коду.
Деякі пов'язані ресурси:
http://sourceforge.net/projects/scriptorium
http://rubyforge.org/snippet/
December 27, 2005
Що таке монади?
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
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.
Теорія прийняття рішень:Мова програмних адаптивних агентів
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 - методика, яка використовується для прискорення комп'ютерних програм шляхом зберігання результатів функцій для подальшого використання.
Тільки функції, результат яких залежить лише від аргументів можуть використовуватись тут, інакше потрібні складніші методи кешування.
December 21, 2005
Ідентифікатор цифрових об'єктів
Система дозволяє присвоювати унікальні ідентифікатори об'єктам широкого спектру: статтям, різними об'єктам інетелектуальної валасності.
Тоді як різна інформація такого роду об'єкта (місце розташування у вебі чи навіть назва або автор) може змінюватись, унікальний ідентифікатор залишається без змін.
December 9, 2005
Логіка Хоара
Основною особливістю логіки Хора є Тріплет Хоара - має вигляд {P} C {Q}, де P - передумова, Q - після умова, C - безпосередньо код програми.
Логіка Хоара включає аксіоми і правила для всіх базових типів операторів імперативної мови програмування.
Hoare logic - Wikipedia, the free encyclopedia
Основи Ruby
Інтрерактивний тутор - прикольно, можна попрограмувати на рубі прямо в браузері, без інсталяції - просто і легко
Особливості 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
Проектування "за контрактом".
Це альтернатива для reference в .Net. Якщо в .Net ми явно вказуємо, які бібліотеки нам потрібні, то при підкході DBC - ми повинні описати, що повинні вміти робити ці бібліотеки. Такий опис і називається контрактом.
Eiffel - основи
Море лінків присвячених Eiffel - Cetus Links: 16604 Links on Objects and Components / Eiffel
Great Leap Forward from Java to Smalltalk
Код в SmallTalk зберігається не в файлах, а в образах. Образ - це набір об'єктів, які живуть самі по собі. Робота програміста полягає у "спілкуванні" з цими об'єктами - через Workspace.
December 8, 2005
Правила екстремального програмування
Планування
* Пишуться User Stories.
* Власне план створюється в результаті Планування Реліза.
* Випускать часті невеликі Релізи.
* Вимірюється Швидкість проекту.
* Проект ділиться на Ітерації.
* Кожна ітерацяя починається зі зборів планування.
* Люди постійно міняються задачами.
* Кожен день починається з ранкових Зборів стоячи.
* XP правила коректуються якщо щось йде не так як треба.
Дизайн
* Простота.
* Обов'язково вибирається Метафору системи.
* Використовувати CRC картки для дизайну.
* Писати Пробні рішення для зменшення ризику.
* Не додавати ніяких функццй передчасно.
* Рефакторити чим більше тим краще.
Кодування
* Замовник завжди поруч.
* Весь код повинен відповідати прийнятому стандарту.
* Весь код повинен бути створений парним програмуванням.
* Часта інтеграція коду.
* Колективне володіння кодом.
* Залишати оптимізацію на потім.
Тестування
* Будь-який код повинен мати Unit Test.
* ВСІ Unit тести повинні успішно проходити перед здачею.
* Якщо знайдено баг, то тести коректуються чи створюються.
* Функціональні тести періодично виконуються і їх результати публикуються.
December 6, 2005
Grasshopper
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
Простеньке середовище для програмування в C#, можна використовувати, коли потрібно протестувати невеличний фрагмент коду, але воблом відкривати проект в студії.
December 2, 2005
November 30, 2005
Introduction to UniMod
UniMod states for Unified Modeling. Long term project goal is to create unified methodology for application development process that will close the gap between Design and Development phases.
Currently, UniMod project is focused on designing and implementing applications behavior. Already implemented approach adapts SWITCH-technology for UML notation. SWITCH-technology is also known as Automata-based Programming and has it's own Russian site http://is.ifmo.ru/english/."
ASP.Net в моно
You can use ASP.NET in three ways:
- The mod_mono module for Apache can be used to run your applications within the popular web server
- XSP is a light-weight web server written in C#
- Or roll your own server: ASP.NET provides an infrastructure to host ASP.NET in any way you desire.
State Chart & W3C
State Chart XML (SCXML): State Machine Notation for Control Abstraction 1.0
This document outlines a state machine notation that combines concepts from CCXML and Harel State Tables. It is intended to be a general-purpose state machine language that can be used in multiple contexts, including VoiceXML 3.0, CCXML 2.0, and the MultiModal Interaction framework. CCXML [W3C CCXML 1.0] is an event-based state machine language designed to support call control features in Voice Applications (specifically including VoiceXML but not limited to it). The CCXML 1.0 specification defines both a state machine and event handing syntax and a standardized set of call control elements. Harel State Tables are a state machine notation that are part of UML [UML 1.5]. They offer a clean and well-thought out semantics for sophisticated constructs such as a parallel states. They have been defined as a graphical specification language, however, and hence do not have an XML representation. The goal of this document is to combine Harel semantics with an XML syntax that is a logical extension of CCXML's state and event notation. For an overview of the UML notation and a brief outline of its semantics, see E An Overview of Harel State Table Notation and Semantics, below.
For simplicity's sake, the language definitions below refer to the 'properties' of elements, without specifying whether said properties are attributes or children. The markup samples at the end of the document make specific decisions about what is an attribute and what is a child element, but we may revise these decisions as refine the definitions.
For concreteness sake, we use ECMAScript as the language for data elements, but the complete language definition will permit other languages such as XPath to be used as well.
Класифікація Хомського
Chomsky hierarchy | Grammars | Languages | Minimal automaton |
Type-0 | (unrestricted) | Recursively enumerable | Turing machine |
(unrestricted) | Recursive | Decider | |
Type-1 | Context-sensitive | Context-sensitive | Linear-bounded |
Type-2 | Context-free | Context-free | Pushdown |
Type-3 | Regular | Regular | Finite |