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

Що таке монади?

All About 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

OpenID: Альтернатива .Net Passport

OpenID: an actually distributed identity system

На відміну від .Net - OpenID не централізований.

December 22, 2005

Часті питання про онтології

Frequently Asked Questions on Ontology Technology

Визначення: 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.

Теорія прийняття рішень:Мова програмних адаптивних агентів

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

Memoization

Memoization - Wikipedia, the free encyclopedia
Memoization - методика, яка використовується для прискорення комп'ютерних програм шляхом зберігання результатів функцій для подальшого використання.
Тільки функції, результат яких залежить лише від аргументів можуть використовуватись тут, інакше потрібні складніші методи кешування.

December 21, 2005

Ідентифікатор цифрових об'єктів

DOI
Система дозволяє присвоювати унікальні ідентифікатори об'єктам широкого спектру: статтям, різними об'єктам інетелектуальної валасності.
Тоді як різна інформація такого роду об'єкта (місце розташування у вебі чи навіть назва або автор) може змінюватись, унікальний ідентифікатор залишається без змін.

December 9, 2005

Логіка Хоара

Призначення логіки: надати множину логічних правил, які дали б змогу робити висновок про коректність комп'ютерної програми з такою ж строгістю, як математична логіка.

Основною особливістю логіки Хора є Тріплет Хоара - має вигляд {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 підтримка багатопоточності

Design by contract

Design by contract

Проектування "за контрактом".
Це альтернатива для reference в .Net. Якщо в .Net ми явно вказуємо, які бібліотеки нам потрібні, то при підкході DBC - ми повинні описати, що повинні вміти робити ці бібліотеки. Такий опис і називається контрактом.

Eiffel - основи

Короткий огляд на dotSITE
Море лінків присвячених 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.

December 8, 2005

Правила екстремального програмування

Правила екстремального програмування

Планування
* Пишуться User Stories.
* Власне план створюється в результаті Планування Реліза.
* Випускать часті невеликі Релізи.
* Вимірюється Швидкість проекту.
* Проект ділиться на Ітерації.
* Кожна ітерацяя починається зі зборів планування.
* Люди постійно міняються задачами.
* Кожен день починається з ранкових Зборів стоячи.
* XP правила коректуються якщо щось йде не так як треба.

Дизайн
* Простота.
* Обов'язково вибирається Метафору системи.
* Використовувати CRC картки для дизайну.
* Писати Пробні рішення для зменшення ризику.
* Не додавати ніяких функццй передчасно.
* Рефакторити чим більше тим краще.

Кодування
* Замовник завжди поруч.
* Весь код повинен відповідати прийнятому стандарту.
* Весь код повинен бути створений парним програмуванням.
* Часта інтеграція коду.
* Колективне володіння кодом.
* Залишати оптимізацію на потім.

Тестування
* Будь-який код повинен мати Unit Test.
* ВСІ Unit тести повинні успішно проходити перед здачею.
* Якщо знайдено баг, то тести коректуються чи створюються.
* Функціональні тести періодично виконуються і їх результати публикуються.

December 6, 2005

Smalltalk роійською

Smalltalk роійською

Grasshopper

Developer Edition Product Page

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

Wget - насос для Інтернету [VAP home]

Wget - насос для Інтернету (rus) [VAP home]

FloraWare – середовище розробки, яке базується на State Machine

SoftCraft: FloraWare – ускорить разработку приложений

Snippet Compiler

Snippet Compiler

Простеньке середовище для програмування в C#, можна використовувати, коли потрібно протестувати невеличний фрагмент коду, але воблом відкривати проект в студії.

December 2, 2005

UMichRL

Спільнота, присвячена навчанню з підкріпленням.

Main < UMichRL

Можна побачити Київ зі супутника :)

Google Local - Kiev

November 30, 2005

Introduction to UniMod

Introduction to UniMod: "Overview

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/."

Реалізація паттрнів Observer, Decorator, Strategy and Builder

Design Your Soccer Engine, and Learn How To Apply Design Patterns (Observer, Decorator, Strategy and Builder Patterns) - Part I and II - The Code Project - Design and Strategy

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.
Details

State Chart & W3C

Зовсім недавно W3C почав стандартизацію State Machines.

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 hierarchyGrammarsLanguagesMinimal automaton
Type-0 (unrestricted)Recursively enumerableTuring machine
(unrestricted)RecursiveDecider
Type-1Context-sensitiveContext-sensitiveLinear-bounded
Type-2Context-freeContext-freePushdown
Type-3 RegularRegularFinite

Finite State Machine

Стаття про сабджект на Wikipedia.