|
ArcaOS 5.0 Русская версия
Пакет русификации ArcaOS 5.0 OS/2 давно доступен.
Поддерживается любая версия: 5.0, 5.0.1, 5.0.2.
eCo Software может выпустить и другие пакеты
(Немецкий, Голландский, Бразильский Португальский, Испанский, Шведский и т.д.)
|
Семь признаков того, что Rexx по-прежнему актуален |
TITLE: Семь признаков того, что Rexx по-прежнему актуален
DATE: 2013-06-10 04:11:03
AUTHOR: Rene Jansen
О динамическом языке Rexx хоть и говорят с ностальгией,
но редко берутся писать на нем. Рене Винсент Янсен (René Vincent Jansen) приводит несколько убедительных причин в пользу использования языка в инструментарии разработчика.
Всякий раз, когда я упоминаю о языке Rexx на Slashdot или другом техническом сайте, люди недовольно вздыхают. Они полагают что Rexx, первый скриптовый язык широкого применения, больше не актуален. Я с этим не согласен и в этой статье я постараюсь объяснить почему.
Итак, если вы не сталкивались с Rexx ранее, сделаем небольшое пояснение. Язык придумал сотрудник компании IBM Майк Кулешоу (Mike Cowlishaw) в 1979 году. Сегодня существует девять открытых реализаций Rexx. Он поддерживается практически на любой платформе, но изначально был наиболее популярен на платформах IBM: мейнфреймах и ОС OS/2.
Вот несколько ключевых причин, почему писать программы на Rexx так здорово:
- небольшой язык с богатыми возможностями.
- не чувствителен к регистру там, где это имеет значение.
- предоставляет два непревзойденных встроенных оператора - TRACE и PARSE.
Так где же может стать полезным Rexx сегодня, когда есть множество языков - напр., Python, PHP и Perl ? более известных и популярных? Сейчас объясню...
Rexx выступает в роли связующего звена, объединяющего
все важные вычислительные задачи на мейнфреймах.
Несомненно, пик популярности Rexx, почтенного предка скриптовых языков, пришелся на середину девяностых годов. На упоминания о Rexx на Slashdot отзываются те, кому нравилось работать с Rexx, но сейчас им приходится использовать другие языки. Чаще всего это означает, что они больше не имеют доступа к мейнфрейму, на котором работали и, спустя какое-то время, нашли замену Rexx. Это также означает, что новый инструмент не смог полностью заменить воспоминания.
Rexx изначально применялся на мейнфреймах и применяется
там по сей день. Он появился в 1980 на VM и был
опубликован IBM (поначалу неохотно) для решения нужд технического
персонала. Тем самым заменив собой язык exec-2, который состоял
преимущественно из амперсандов. Автор языка, Майк Кулешоу,
впоследствии был удостоен звания IBM Fellow, а Rexx
распространился на все операционные системы IBM - MVS, OS/2 и OS/400.
Обычно язык Rexx, выступая в роли связующего звена, применяется
персоналом,
не занятом в программировании,
т.е. системными программистами и группами управления инфраструктурой и промежуточным ПО. Возможно, это делает Rexx также и первым языком DevOps. Rexx-приложения как таковые обычно остаются незамеченными, но если бы их вдруг не стало, вероятнее всего, наступил бы конец света похлеще предсказываемого древними Майя. Недавно я видел, как ключевые компоненты коммерческих приложений заменили на связующее Rexx-приложение потому что "все просто работает" - "It Just Works" (эти слова должны бы стать торговой маркой Rexx - кому бы сейчас не принадлежали права на эту фразу). Так что Rexx самый "большой" неизвестный язык написания приложений. Брюс Эккель (Bruce Eckel) упомянул об этом в своей книге
Thinking in Java.
Для мейнфреймов коммерческий компилятор Rexx генерирует нативный объектный код. Он также позволяет внедрять приложения в промышленную эксплуатацию без необходимости выполнения их из исходного кода (выжимая производительность всю до последней капли). Ни для кого не секрет, что великолепный компилятор Rexx, от Haifa research, Vienna labs - прибыльный продукт. На мейнфреймах (которые играют важную роль в обеспечении вашего финансового благополучия) альтернативы просто нет.
С появлением объектно-ориентированной версии
для виртуальной машины Java, Rexx развился в полноценный язык ООП.
В своем первозданном виде, который по-прежнему используется на мейнфреймах, Rexx относится ко времени функциональной декомпозиции.
Если это всё, что вам известно, вы, вероятно, удивитесь тому, что язык Rexx является куда более современной средой программирования.
Существует два объектно-ориентированных потомка.
Один разрабатывался комитетом под впечатлением от Smalltalk. Здесь еще до Java использовалась стековая виртуальная машина, динамизму которой позавидовал бы Ruby. (Хотя это и анахронизм т.к. Ruby еще "пешком под стол ходил" в то время, когда Simon Nash с коллегами создал Object в IBM Hursley). Еще одно существенное преимущество этой иновационной реализации: ooRexx обладает полной обратной совместимостью с классическим вариантом языка. Она родилась на OS/2 и в глазах общественности ее репутация незаслуженно пострадала от преждевременного заката самой ОС. Она отлично интегрируется в модель компонентов SOM.
Другая ветвь развития создана отцом языка Rexx.
Начиналось всё как эксперимент по оценке возможности выполнения Rexx на виртуальной машине Java (JVM). В дальнейшем это стал первый альтернативный язык для JVM. Эта версия сегодня является стабильным, полноценным и самодостаточным продуктом, который обходит по производительности другие языки для VM.
Причина проста: NetRexx реализован в виде кросс-платформенного транслятора с Rexx в исходный код на языке Java. За 16 лет существования эта версия JVM продемонстрировала значительный прогресс для компилятора javac, ВМ hotspot и j9 и др. NetRexx - это попытка начать с нуля и исправить то, что не устраивало самого Майка Кулешоу
(все сравнения теперь не чувствительны к регистру,
а перегруженная конструкция "do" разбита на две - "do" и "loop"
и также перенесена в Object Rexx). Это, как было отмечено в 2008
году на саммите Sun JVM Language Summit, единственный
альтернативный язык для JVM, который послужил основой
для реализации класса в библиотеке классов Java Class Library. BigDecimal.
Rexx по прежнему доступен пользователю (понятен человеку)
Важнейшей целью при создании интерпретаторов и компиляторов является простота и доступность для пользователя. Другими словами, язык не должен быть сложным, даже если это и упростит задачу создателю компилятора. Под этим подразумевается: "я думаю, это должно работать".
В любой реализации Rexx вся арифметика - десятичная. Она не страдает от "компьютерных" ошибок округления, которые заставляют вас выглядеть глупо. Более того, десятичная точность практически не ограничена (разумеется, в пределах объема памяти, вычислительной мощности и здравого смысла).
Эволюционируя, Rexx не "ломает" ваш старый код.
Меня не перестает удивлять то, сколько компаний обанкротилось из-за того, что переход с VB n на VB n+1 требовал слишком больших инвестиций или то, как люди говорили о "legacy-коде Java" в 1997 году. Такого просто не может случиться с Rexx. Можно не беспокоиться о выбранных годами ранее именах переменных: в язык не было добавлено ни одного нового служебного слова. Более того, в NetRexx и вовсе нет зарезервированных слов
(хотя я бы не советовал давать переменной имя "end" если вы
хотить сократить код программы используя loops).
Для языка Rexx существует стандарт ISO и реализация для
любой платформы.
Не так много языков программирования имеют стандарт ISO. Это означает, что определены жесткие критерии, по которым можно оценить ту или иную реализацию, следовательно, и качество доступных интерпретаторов и компиляторов. Одна из первых открытых реализаций,
Regina, работает на внушительном количестве архитектур и операционных систем о которых даже я не слыхал ни разу.
Rexx - это открытое ПО!
Я уверен: будущее - за open source.
Любопытно, но когда я только начал работать в IT-сфере, программное обеспечение, даже большие проекты IBM, было доступно в исходных кодах. Во всяком случае для клиентов, которые обязательно получали код на ленте или микрофильмах. Я помню, что в то время даже IT-специалисты конкурирующих компаний помогали друг другу и в итоге выигрывали все. К тому же это было весело!
Что касается дня сегодняшнего, тот факт что в IBM сдержали обещание открыть Object Rexx и NetRexx (первый в 2005 года, второй в июне 2011 года) для всех пользователей и поклонников означает, что затраченные ресурсы не пропадут зря и есть перспективы. Также это значит и то, что будущее уже наступило. Чтобы начать работать с открытым Rexx, обратите внимание на Open Object Rexx и NetRexx.
Regina - соответствующий стандарту ISO классический Rexx для всех актуальных платформ.
Будущее языка Rexx - на мобильных платформах.
Rexx отлично подходит для мобильных устройств благодаря скромным требованиям
и отличной переносимости. Уже существуют несколько реализаций Rexx и
NetRexx для Android. Например, есть NetRexx IDE для Android-устройств.
Производительность, которая присущая оптимизированному коду, появляется на маломощных машинах, "карманных мейнфреймах".
Вполне возможно,
что код NetRexx уже выполняется на вашем Android-устройстве,
просто вы об этом не догадываетесь... как и о роли мейнфреймов в сегодняшней жизни.
Так или иначе, у языка Rexx определенно есть место
в нашем с вами будущем.
Дополнительная информация:
- Редакция: 2014/01/15 / Дата первой публикации: 2013-06-10
- Источник: 7 Reasons that Rexx Still Matters
- Автор: Рене Янсен / Rene Jansen
- Перевод выполнен по заказу eCo Software
Попробуй программу:
|
CoolFM - программа управления FM-приемниками.
|
Комментарии: TAE1980 2013-06-10 13:46:06 | Полностью согласен с автором. Где подписаться? :)
Я с 2000 года говорю, что Rexx это самая сильная сторона OS/2. К сожалению современные разработчики отодвинули его на задний план. И упорно не хотят ни чего о нем слышать.
Автор выдвигает слоган "все просто работает", я предлагаю ещё один "Rexx для всего". Мои поиски показали, что Rexx может заменить любой язык, кроме Ява скрипта. То есть не нужно изучать зоопарк различных языков, а используя старые наработки эффективно решать новые задачи.
Ещё одна особенность Rexx'а - он не навязывает стиль написания кода. Все иные языки требуют от программиста следования жестким догмам "шаг влево, в право - попытка бегства, прыжок на месте провокация" (с) От сюда появляются Си программисты и прочие. Я например перешел на Rexx с Паскаля, и поначалу строил конструкции к которым привык на нем. И только через пол года начал потихоньку от них отходить, открывая для себя все новые и новые грани Rexx. Мой же друг, до сих пор, пишет на Rexx как на Форте. Он жутко упрямый и очень тяжело расстается со старыми привычками. В обсуждении новости "Warpstock Europe: Изменения" Sergey Posokhov привел пример якобы кода Rexx. Смею утверждать что это код Basic'ка реализованный на Rexx. Образец кода Rexx я привел ниже в цепочке обсуждения. Вывод: Rexx не навязывает жесткого стиля написания программ, и может вынести почти любой. Одновременно он "мягко" подталкивает, можно сказать, даже "обучает" использовать свои конструкции - так как только в этом случае получается красивый и эффективный код Rexx. На практике это дает возможность быстрой адаптации программистов к условиям Rexx, снижает временные и как следствие материальные издержки. | SERG 2013-06-10 23:53:25 | Нормальный удобный язык программирования.. А самое главное простой как бейсик..
Дело не в языке, а в программисте :) | TAE1980 2013-06-11 14:23:13 | SERG, соглашусь на 70%. На остальные 30% скажу, что "дело не в языке, а в информационном окружении".
"Цель рационального организации рабочего информационного пространства состоит в том, чтобы уменьшить время, необходимое для выполнения работы, устранить ненужные действия и подсистемы, обеспечить «хорошие условия труда» и уменьшить утомляемость программиста, а также максимально повысить производительность труда."
С этой задачей Rexx справляется значительно части иных языков программирования. | tux 2013-06-11 19:17:07 | Кто-нибудь из комментирующих использует NetRexx? | TAE1980 2013-06-11 20:22:44 | Я не использую. Но собираюсь. Часть моих планов связана с мобильными устройствами, вот для созданиях приложений для них собираюсь использовать NetRexx. Хотя признаю, что его применение возможно значительно шире.
Главным тормозом для меня является отсутствие документации на русском. А заниматься разбором перевода Промта, такого объема, я пока не готов. :) | Sergey Posokhov 2013-06-12 02:49:16 | 1) Ява - говно. Скрытое состояние и ссылочный навес над ним. Rexx никогда не разовьётся в ООП, и это хорошо.
2) Он и над JavaScript вполне возможен. "Было бы желание".
3) "Parse" не оператор, это макра из Лиспа. | TAE1980 2013-06-12 20:59:10 | Sergey Posokhov: Rexx никогда не разовьётся в ООП, и это хорошо.
Мда... Позволю себе напомнить.
"Язык программирования Object REXX (объектный REXX) — объектно-ориентированный скриптовый язык, основанный на языке REXX, созданный корпорацией IBM первоначально для операционных систем серий OS/2 и OS/390." ([url])
"С середины 1990-х годов, два новых варианта Rexx появились:
* NetRexx : компилируется в Java байт-код с помощью исходного кода Java, это не имеет зарезервированных ключевых слов на всех, и использует модель Java объект, и, следовательно, как правило, не вверх-совместимый с «классическим» Rexx.
* Объект REXX : объектно-ориентированные в целом вверх-совместимой версией Rexx. "([url])
Второе: А оно нужно? Лично я всегда считал ООП - ошибкой и тупиком. А в последнее время все больше публикация с похожими точками зрения. Типизацию данных вообще считаю бредом, так как невозможно все подогнать под одну грибенку. Напеши тип (объект и т.п.) вселеной, с учетом ВСЕХ её свойств от "частицы бога", до черной дыры. Тип написать не возможно, а значит и "раборать" с ней тоже нельзя. А вот если типов данных нет, тогда за милую душу - все становятся на свои места. А главно расширяется до безгонечности, что согласись для вселеной не маловажно. :)
Да, здесь мы с тобой "на разных барикадах".
Sergey Posokhov: "Parse" не оператор
Согласен, Parse - это инструкция. "А хрен редьки не слаще?" (с) И он встречается в нескольких языках программирования, иногда называется по другому. Но Parse есть в Rexx, и он далеко не единственное достоинство Rexx.
Очень уважаю твой труд "OS/2 API Research", читал запоем. Хотел даже писать тебе, что ты так мало уделил внимание Rexx. Теперь понимаю что это безполезно. И в этом вопросе скажу "Иван, ты не прав!" (с). | Sergey Posokhov 2013-06-12 21:23:07 | >Напиши тип (объект и т.п.) вселеной, с учетом ВСЕХ её свойств от "частицы бога", до черной дыры.
На этот случай есть техника под названием "подмешивание", она применяется в языке Scala, вот так:
x = new Dog with Wings
x.fly()
Создали летающую собаку и запустили. Пока ты читал эту строку, она уже улетела.
В других языках (Сишка, Лисп, Эрланг, Питон) так сделать не получится. Но это не значит, что строгая типизация - что-то плохое. | TAE1980 2013-06-12 23:38:25 | Sergey Posokhov: есть техника под названием "подмешивание"
Как вариант. Но все таки по упрямлюсь, подобные механизмы я называю "костылями". Подобные "дополнительные подсистемы" лишь за уши натягивают идею до желаемого результат, при этом перегружают самую идую, программу, понижают стабильность систему в целом и прочее и прочее. Вообщем от них больше проблем, чем пользы.
Для проверки своих бредовых идей я использую инструмент называется "доведения до абсурда". Берем идею и по шагово "расширяем" её сначала в "одну", затем в "другую" сторону, до полного абсурда. Большинство идей не выдерживают и трех "шагов в строну". Идея считается жизнеспособной если она способна существовать в "полном абсурде" с обоих "сторон". В крайнем случае она должна позволять максимально приблизиться к "абсурду".
Sergey Posokhov: Но это не значит, что строгая типизация - что-то плохое.
Ни в коем случае. Типизация - это один самых древних костылей в программировании. Изначально это облегчало написание самого языка и понижало ресурсоемкость техники. А потом она слишком прижилось, так что теперь придеться избавляться от неё лет 50. Я точно не доживу. В бытность фаната Паскаля, я "молился" на типизацию. Но за последний годы Rexx "показал" мне что есть другой путь. И он появился как минимум одновременно с типизацией. Только на "перекрестке сверунли" не туда.
Я не за и не против "типизации" и ООП, я просто говорю что есть иной путь. И добиваюсь простого признания самого этого факта. Пусть каждый останеться при своих. Но вот представители "классической" модели не хотят ни чего даже слышать. И готовы кидать помидорами при первых звуках, что их путь не единственно верный. | Sergey Posokhov 2013-06-13 00:22:41 | В таком случае, авторы языка Erlang свернули как раз в нужную тебе сторону. В этом языке нет типов данных, но есть механизм сопоставления с образцом.
Создаём три структуры данных:
X = {rectangle, 10, 10}
Y = {circle, 10}
Z = {apple, 10}
Пишем функцию для расчёта площади:
area({rectangle, Width, Ht}) -> Width * Ht;
area({circle, R}) -> 3.14159 * R * R.
Вызываем её:
area(X) %% площадь прямоугольника равна 100
area(Y) %% площадь окружности равна 314.159
area(Z) %% ошибка... | Sergey Posokhov 2013-06-13 02:56:02 | Если же ты хочешь полностью динамический язык, где доступ к данным происходит по их именам, то у тебя там начнутся задержки, примерно соответствующие логарифму от числа переменных, а так как никто не знает заранее, сколько данных встретит программа, то и задержек этих стараются избегать. Вот разве что веб-макаки и 1С-мартыхи не догадываются о них. Потому, наверное, и пишут на языках, где эти задержки есть.
Так что третьего пути нет: либо как в Erlang, либо доступ по указателям - но тогда уже и строгая типизация и проверки всего вся.
Такие дела. | TAE1980 2013-06-13 08:42:05 | Sergey Posokhov: Если же ты хочешь полностью динамический язык, где доступ к данным происходит по их именам
Если честно не совсем понял о чем ты. Выдлею несолько базовых идей Rexx которые мне симпатизируют:
1. Составные имена пременных.
2. Отсутствие классических массивов (следствие первого).
3. Отсутствие разницы между процедурами и функциями.
4. Отсутствие типа данных. Вернее не так, наличие одно типа данных - текстового.
5. Инструкция Parse.
6. Инструкция Interpret.
7. Перегруженность do. Хотя это многим не нравиться.
8. и так далее. Здесь нет смысла писать все.
Вот пример массива из одной моей программы (он малась устарел, но для примера пойдет):
Base.Counter=0 /* Счетчик уникальных номеров */
Base.Pump.Base='УнКод' /* Основа для создания уникальных номеров */
Base.Buch.ListCode='УнКод1 УнКод2' /* Список уникальных номеров существующих насосов */
Base.ListTelefon='Телефон1 Телефон2' /* Список телефонных номеров */
Base.Telefon.Code='УнКод' /* Уникальный код связанного насоса */
Base.Code.Name='Имя насоса' /* Имя насоса. Отображется в списке */
Base.Code.Description='Описание' /* Описание насоса */
Base.Code.Production=0 /* Производительность, куб/ч */
Base.Code.EngineSize=0 /* Мощность двигателя, кВт/ч. Расход энергии. */
Base.Code.ComStart='' /* Команда запуска насоса. */
Base.Code.ComStop='' /* Команда остановки насоса. */
Где Code - уникальный номер насоса.
А вот пример работы с ним:
pumpName = value(Base.PumpCode.Name)
/* Ищем номер телефона по коду насоса */
do n=1 to words(Base.ListTelefon)
if value('Base.'word(Base.ListTelefon,n))=pumpCode then do
pumpTelefon=word(Base.ListTelefon,n)
leave
end /* if */
end /* do n */
Здесь использую "новый" тип массивов который я активно у себя внедряю. Он состоит из переменой структуры, обычно так её и называю Structure, и элементов массива любой сложности, доступ которым осуществлется по именам хранящимся в Structure. Плюсы:
* Простое определение количества элементов массива words(structure)
* Доступ к элементу по номеру word(structure,n)
* Доступ к элементу по имени (имя может нести значение, например дата) - напрямую
* Простое добление нового элемента.
* Простое удаление элемента.
* Простая проверка наличие элеменат в массиве. wordpos >0.
* Простая сортировка массива.
* И прочее. Думаю идея понятна.
Он подходит для данных объемов от десятков до нескольких тысяч (в rexx строка безконечная). Кроме того если данных очень много, их всегда можно переорганизовать, что бы уменьшить количество корневых элементов. | Sergey Posokhov 2013-06-13 16:49:05 | Да, знаем такую структуру данных, именованный массив, он же HashMap и он же хеш. Есть ещё LinkedList и ArrayList, им надо памяти поменьше и добавление в них быстрее (но не поиск).
Здесь полезно знать не как это делается в Rexx, а каким будет снижение быстродействия: логарифмическим или линейным. И тогда мы узнаем, что будет, если программа встретит несколько миллионов (а не тысяч) элементов, названия которых она вывалит в массив "Structure".
Линейные там задержки скорее всего. | TAE1980 2013-06-13 17:21:56 | На миллион элементов я бы не советовал использовать подобный массив, или реорганизовал данные так что бы корневых элементов осталось не более нескольких тысяч.
Про задержки ни чего сказать не могу (я же не программист :), скорость работы с моими объемами данных (~20 000 записей за год на 10 насосов, в настоящий момент имеем 3 года), меня устраивает и резерв очень большой. Скорость загрузки программы зависит от машины и составляет 3-10 сек, при этом происходит полная настройка программы, а не только загрузка данных. Вывод запрашиваемых данных на любой машине - задержка меньше секунды.
Поиск, перебором - да не быстрый, но нужен очень редко, так как я даю элементам осмысленные имена (rexx это позволяет) и когда нужно по известному алгоритму получаю имя и обращаюсь к данным на прямую. Самое главное не это, а то что структуру (узор) данных я могу задать удобный мне, а не машине. Тем более структуры могут быть вложенными, а часть вообще не иметь "прямого" доступа, только через структуры более высокого уровня.
Не так давно пробовал написать программу на VBA, мозги уже отказываются думать в столь узких рамках. | tux 2013-06-13 21:56:15 | Sergey Posokhov мне кажется вы не правильно поняли
оппонента. Rexx есть по умолчанию в системе и позволяет пользователям не программистам решать задачи в их профессиональной области.
P. s.: за OS/2 API Research спасибо. | TAE1980 2013-06-13 22:33:32 | tux, ты не когда не думал, что на классическом rexx'се можно без особых проблем почти полностью (по прикидкам до 70%) повторить ООП? | TAE1980 2013-06-15 19:23:02 | tux,все забываю спросить, вопрос про NetRexx, был из чистого интереса или есть проекты? Сам пишешь на нём? | tux 2013-06-15 19:45:13 | На NetRexx можно сказать не пишу хотя был случай написал как-то расчетную программу для работы. Непонятна дальнейшая судьба NetRexx и открытие исходников ничего похоже не изменило. Насчет возможностей повторить ООП на классическом Rexx это не ко мне (хлеб свой не программированием зарабатываю). Я считаю язык программирования должен помогать решать мои задачи, что Rexx (хорошо что он есть в базовой поставке системы) с успехом и делает ну а все остальное от лукавого. | TAE1980 2013-06-16 00:50:03 | tux, NetRexx изучал по английской справке? | TAE1980 2013-08-15 23:24:59 | Ну вот свершилось. Закончился Chaos Constructions 2013. По его результатам можно сказать следующее:
1. Он прошел успешно.
2. Я впервые побывал на нем, хотя хотел попасть аж с 1998 года.
3. Была собрана меж городская осевка, проверено на практике возможность такого. Правда там было всего три осевика. Ну что для начала то же не плохо.
4. Я все таки сделал майку с эмблемами eCS и OS/2.
5. Было принято решение сделать осевку на базе Chaos Constructions ежегодной. В перспективе открыть отдельную секция.
6. Мною прочитан доклад по Rexx на тему «Язык программирования REXX в современном мире. Создание кроссплатформенных программ». Адаптированный доклад можно прочитать здесь ([url]). На сколько я могу судить, все прошло хорошо. Да же задали ряд вопросов. Как только узнаю адрес видео, добавлю ссылку в статью.
7. Горбнов, не хороший человек (редиска. прим.редактора) да же не пришел на мой доклад. Не очень-то и хотелось. Но "за державу обидно" (с) Сам ни чего не сделал, так хотя бы своих подержал бы.
8. Первые объявлено об открытии электронной библиотеке по Rexx (librexx.ru) Материала пока мала, но это только начало. Так что прошу заходить, пользоваться. Если есть иной материал шлите на меня для публикации. tae(очень злая собака)aport.ru
9. Мои суммарные затраты составили 10т.р. Если не считать кражи телефона (то же мне культурная столица). Но его, кстати, украли из-за Всех Вас. Так как не приехали, и не создали толпу. Вот теперь пусть вас совесть мучает. :)
Вполне подъемная сумма за год. Все начинаем копить. Каждый день нужно откладывать по 30 рублей, и через год у вас будет нужная сумма. У нас чашка кофе стоит дороже.
Вывод: Давайте ребята веселее, на следующий год собираемся толпой, все в майках с нашими эмблемами. Дружно готовим доклады на самые разные тематики.
Чуть позже объявим ответственных за координацию общих усилий. На их имя высылать заявки с примерными темами докладов и иными хотелками или вопросами.
Хватит спать! Выходим из сумрака! |
Прокомментируйте эту статью (напоминаем, автор работал над текстом несколько недель, уважайте мнение других).
|
Как приумножить количество пользователей eComStation? Каждый осевик может установить eCS своим друзьям и родственникам, распечатать для них методичку, как пользоваться системой - Сайт LiveBook |
|
|
|
Готовая eComStation на SSD диске
Последний активный опрос: Какая высота барьера RPM?
[Google]
|
IBM OS/2 Warp
|