Блог О пользователеjavablog

Регистрация

Календарь

« Ноябрь 2010  
Пн Вт Ср Чт Пт Сб Вс
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
 

idef0


Раз 6 в год приходиться рисовать схему бизнес-процессов, и о как я не люблю рисовать idef0 диаграммы. Поэтому обращу на них особое внимание.

IDEF0 — Function Modeling — методология функционального моделирования и графическая нотация, предназначенная для формализации и описания бизнес-процессов. Отличительной особенностью IDEF0 является её акцент на соподчинённость объектов. В IDEF0 рассматриваются логические отношения между работами, а не их временна́я последовательность.

Хоть и не люблю я рисовать бизнес процессы, они просто необходимы при автоматизации предприятия.

Вообще стандартов моделирования семейства idef (IDEF=ICAM DEFinition) много - idef0, idef1, idef1x и т.д.

В основе методологии лежат четыре основных понятия.

1. Функциональный блок - некая функция внутри предприятия - изображается прямоугольником. По требованиям стандарта название каждого функционального блока должно быть сформулировано в глагольном наклонении (например, “производить услуги”, а не “производство услуг”).

Каждая из четырех сторон функционального блока имеет своё определенное значение (роль), при этом:
Верхняя сторона имеет значение “Управление” (Control);
Левая сторона имеет значение “Вход” (Input);
Правая сторона имеет значение “Выход” (Output);
Нижняя сторона имеет значение “Механизм” (Mechanism).

2. Интерфейсная дуга (поток, стрелка). Интерфейсная дуга отображает элемент системы, который обрабатывается функциональным блоком или оказывает иное влияние на функцию, отображенную данным функциональным блоком. По требованию стандарта, наименование должно быть оборотом существительного. 

В зависимости от того, к какой из сторон подходит данная интерфейсная дуга, она носит название “входящей”, “исходящей” или “управляющей”.

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

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

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

3. декомпозиция (Decomposition)

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

Модель IDEF0 всегда начинается с представления системы как единого целого – одного функционального блока с интерфейсными дугами, простирающимися за пределы рассматриваемой области. Такая диаграмма с одним функциональным блоком называется контекстной диаграммой, и обозначается идентификатором “А-0”.

В пояснительном тексте к контекстной диаграмме должна быть указана цель (Purpose) построения диаграммы в виде краткого описания и зафиксирована точка зрения (Viewpoint).

В процессе декомпозиции, функциональный блок, который в контекстной диаграмме отображает систему как единое целое, подвергается детализации на другой диаграмме. Получившаяся диаграмма второго уровня содержит функциональные блоки, отображающие главные подфункции функционального блока контекстной диаграммы и называется дочерней (Child diagram) по отношению к нему (каждый из функциональных блоков, принадлежащих дочерней диаграмме соответственно называется дочерним блоком – Child Box). В свою очередь, функциональный блок - предок называется родительским блоком по отношению к дочерней диаграмме (Parent Box), а диаграмма, к которой он принадлежит – родительской диаграммой (Parent Diagram). Каждая из подфункций дочерней диаграммы может быть далее детализирована путем аналогичной декомпозиции соответствующего ей функционального блока. Важно отметить, что в каждом случае декомпозиции функционального блока все интерфейсные дуги, входящие в данный блок, или исходящие из него фиксируются на дочерней диаграмме. Этим достигается структурная целостность IDEF0 – модели. Следует обратить внимание на взаимосвязь нумерации функциональных блоков и диаграмм - каждый блок имеет свой уникальный порядковый номер на диаграмме (цифра в правом нижнем углу прямоугольника), а обозначение под правым углом указывает на номер дочерней для этого блока диаграммы. Отсутствие этого обозначения говорит о том, что декомпозиции для данного блока не существует.

 

 

 

 

 

O MooTools


MooTools яваскрипт фреймворк, состоящий из двух модулей: core и more. Основное преимущество этого фреймворка – его объектно-ориентированнсть.

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

  • Features:
  • Browser.Features.xpath - (boolean) True if the browser supports DOM queries using XPath.
  • Browser.Features.xhr - (boolean) True if the browser supports native XMLHTTP object.
  • Engine:
  • Browser.Engine.trident - (boolean) True if the current browser uses the trident engine (e.g. Internet Explorer).
  • Browser.Engine.gecko - (boolean) True if the current browser uses the gecko engine (e.g. Firefox, or any Mozilla Browser).
  • Browser.Engine.webkit - (boolean) True if the current browser uses the webkit engine (e.g. Safari, Google Chrome, Konqueror).
  • Browser.Engine.presto - (boolean) True if the current browser uses the presto engine (e.g. Opera 9).
  • Browser.Engine.name - (string) The name of the engine.
  • Browser.Engine.version - (number) The version of the engine. (e.g. 950)
  • Browser.Plugins.Flash.version - (number) The major version of the flash plugin installed.
  • Browser.Plugins.Flash.build - (number) The build version of the flash plugin installed.
  • Platform:
  • Browser.Platform.mac - (boolean) True if the platform is Mac.
  • Browser.Platform.win - (boolean) True if the platform is Windows.
  • Browser.Platform.linux - (boolean) True if the platform is Linux.
  • Browser.Platform.ipod - (boolean) True if the platform is an iPod touch / iPhone.
  • Browser.Platform.other - (boolean) True if the platform is neither Mac, Windows, Linux nor iPod.
  • Browser.Platform.name - (string) The name of the platform.
  • Notes:
  • Engine detection is entirely feature-based. .

Пакет Array – также содержит множество ютильных функций: each, every, filter, clean, indexOf, map, some, associate, link, contains, extend, getLast, getRandom, include, combine, erase, empty, flatten, hexToRgb, rgbToHex.

Также в core есть методы для работы с json. Есть интересные fx.  Ну и соотвестенно возможность работы с элементами, навешивания событий на клик, стилей и т.д.

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

 

GWT проект по шагам.


GWT проект по шагам.

1 - создаем объекты сущностей с которыми будем работать. Все они должны имплементить Serializable.

2 - определяем интерфейс, который будет содержать методы, кторые будут дергаться на сервере.

 extends RemoteService

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

@RemoteServiceRelativePath("userService")

3 - создаем асинхронную версию этого интерфейса - это требование гвт.  

Она ничего не экстендит - единственное обладает таким же имененем с суффиксом async.

и во все методы добавляется доп параметр AsyncCallback.

4 - создаем имлементацию сервиса.

5 - определяем сервлет в веб.хмл

6 - создаем юай в виде таблички например

7 - создаем колбэк

8 - создаем ентрипоинт - точку входа

9 - размечаем ее в хмл модуля

10 - правим хтмл  и ксс

 

 

 

 

JavaFx пример


Данный JavaFx пример состоит из трех частей:

1. Код

2. Компиляция

3. Запуск

Собственно сам код ничего сложного из себя не представляет, для тех кому не понятен синтаксис вот ссылочка http://javafx.com/learn/training.jsp

package helloworld;

import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.text.Text;
import javafx.scene.text.Font;

Stage {
 title: "Senior software developer! - Hello World"
 width: 250
 height: 250
 scene: Scene {
  content: [
   Text {
     content: "Привет! Привет!"
     x: 70
     y: 70
     font: Font {
          name: "Sans Serif"
          size: 14
     }
    }
   ]
 }
}

Весь этот код храним соотвественно в классе HelloWorld.

Переходим к этапу 2. Компиляция, но тут собственно все просто. В командной строке:

"C:\Program Files\JavaFX\javafx-sdk1.0\bin\javafxc.exe" HelloWorld.fx

и собственно запуск также прост

"C:\Program Files\JavaFX\javafx-sdk1.0\bin\javafx.exe" HelloWorld

 

 

 


 
 
 

java download files с русскими буквами


Т.к. ие глючит приходиться хитрить

  filename += ".xml";
  if (filename.matches(".*[\\/:*?|< >\"].*")) {
  filename="file.xml";
  }
 
  ByteArrayOutputStream bos = new ByteArrayOutputStream();
  bos.write(sb.toString().getBytes());
  ByteArrayInputStream bin = new ByteArrayInputStream(bos.toByteArray());
  response.setHeader("Content-Disposition", "file");
  response.setContentType("text/xml; charset=Cp866");
  response.setHeader("Pragma", "public");
  response.setHeader("Cache-Control", "max-age=0");
  String userAgent = req.getHeader("USER-AGENT").toLowerCase();
  filename = URLEncoder.encode(filename, "UTF8");
  if (userAgent != null 
  && userAgent.indexOf("opera") == -1 
  && userAgent.indexOf("msie") != -1 ) {
  response.setHeader(
  "Content-Disposition", 
  "attachment; filename=\"" + filename + "\"" 
  );
  } else {
  response.setHeader(
  "Content-Disposition", 
  "attachment; filename*=\"utf-8'" + filename + "\""
  );
  }
  ServletOutputStream outstream = response.getOutputStream();
  FileCopyUtils.copy(bin, response.getOutputStream());
  outstream.flush();
  response.flushBuffer();

 
Занимается услугами - sennheiser pc 320 . Никто не знал, а мы открылись,  Занимается услугами - golf gti купить . Никто не знал, а мы открылись,  Занимается услугами - sennheiser капельки наушники . Никто не знал, а мы открылись