Обновить

Rails: от ERb к Haml

Всем хорошо известно, что родным способом генерации всевозможных HTML страничек в рельсах является использование Ruby Templating, ERb. Честно признаюсь, до недавнего времени считал его единственным и вполне приемлемым. Но все изменилось, когда я познакомился с Haml. В данной статье я собираюсь рассказать об этом знакомстве.
Читаем дальше

Совместимость чего-то с Opera

Для начала хочу сказать, что мне очень нравится браузер Opera. Использую его еще с 6 версии и всем доволен.

Однако при написании веб приложений на ASP.NET иногда приходится сталкиваться с проблемой несовместимости некоторых компонент с Opera. От разработчиков, как этих компонент, так и самих MS приходится слышать примерно такие слова: «Opera не достаточно хорошо поддерживает javascript, поэтому данный продукт не работает». Я не являюсь сотрудником компании Opera Software, поэтому не могу на 100% опровергнуть эти слова и даже не буду пытаться это сделать.

Совсем недавно я заметил одну очень забавную вещь, о которой хочу рассказать.

Некоторые ресурсы начинают нормально работать и в Opera если она представится не своим именем, а как Firefox или Internet Explorer.

В качестве примера могу привести сайт Microsoft. Если Opera предоставляется самой собой, то не загружается Silverlight. Если же Opera начинает выдавать себя за Firefox, то все работает. Тут многие могут вспомнить что пока еще технология Silverlight не поддерживается Opera официально. Однако проблема не в том, что Opera что-то там поддерживает или нет. Проблема в том, что ей подсовывают совершенно другую страницу для отображения. Что касается Silverlight'а, то стандартными средствами та страница, которая отдается Opera просто не содержит ссылок на некоторые скрипты. Поэтому совсем не удивительно, что без бубна ничего не работает.

Вам не кажется такое поведение странным? А кто виноват? К сожалению, этим «кто-то» является IIS. На своем сайте решить эту проблему мне удалось с помощью Form.browser вот такого содержания:

<browsers>
  <browser refID="Default">
    <capabilities>
      <capability name="ecmaScriptVersion" value="1.5" />
      <capability name="javascript" value="true" />
      <capability name="supportsCss" value="true" />
      <capability name="tables" value="true" />
      <capability name="tagWriter" value="System.Web.UI.HtmlTextWriter" />
      <capability name="w3cdomversion" value="1.0" />
    </capabilities>
  </browser>
</browsers>


PS: Данное решения не является идеальным, потому что «причесывает» все браузеры под одну гребенку. Но теперь все браузеры получают одинаковые страницы. И только после этого можно говорить о том, что кто-то работает лучше или хуже.

PPS: если следовать XHTML стандартам, то в большинстве случаев и этого не придется делать.

Удаление значения из файлового поля в веб-форме

Как многие из нас знают, доступ к value поля ввода файла в веб формах закрыт. Браузеры запрещают это чтобы избежать проблем с безопасностью. Конечно же, обойти это ограничение должно быть невозможно. Поэтому, об установлении значений по умолчанию или обработки пути файла на уровне JavaScript речь идти не может. Однако, есть простой способ сделать кнопку для стирания этого значения из поля ввода…
Читать дальше →

Технологические коллизии.

Технологические коллизии.

В данном материале я сделаю две вещи. Первая — представлю на суд уважаемой публики довольно таки редкую информацию о реальном примере развертывания популярного ПО 1Сv8 полностью на платформе Linux. И второе — приведу интресную информацию о неработоспособности(!) системы лицензирования 1С в таком режиме развертывания.

1С и Linux против HASP

Итак, с полгода назад мой отдел (ИТ) получил задание от руководства на внедрение ПО 1Сv8. Следует отметить, что компания которую мы обслуживаем, с некоторых пор весьма трепетно ;) относится к вопросам лицензионной чистоты. В связи с этим было закуплено на первый этап внедрения 50 лицензий (с перспективой на 150 лицензий), «сервер 1C предриятие» и оборудование — сервер HP два квадкора и 10Г оперативки. Серверное ПО — Novell SUSE Linux Enterprise Server 10 SP2 (x86_64). С целью экономии (и не только) решили разворачивать это ПО основе Linux. Несмотря на то, что такой вариант весьма экономен — количество внедрений по этой схеме, на удивление, не велико. Экономия весьма приличная — по нашим подсчетам от 800000р. Кстати развертываения этой системы не доставило особенных трудностей… Итак на данный момент имеем такую схему — на сервере, в среде виртуализации XEN развернуто три VM и три гостевых сервера
* сервер СУБД — ОС SLES и Postgresql от 1с
* сервер приложений — ОС SLES и сервер 1C предриятие на нем
* терминальный сервер — ОС SLES на котором установлен бесплатный Etersoft на котором работает клиентская часть 1с, теминальный доступ к которой осуществляется посрдеством сервера X и XRDP.

Клиентские компьютеры, коих у нас большинство под управлением Linux, получают доступ к 1С по X-совому протоклу — удаленные же машины работают по RDP.

Резюмируем: Внедрение в данный момент внедрение состоялось. Внедрение не вызвало каких либо серьезных сложностей, хотя были некоторые проблемы с подключением HASP на VM. В частности, в прошлой статье «Практикум по XEN» я рассказал о первой части решения проблемы подключения хаспа на сервер. На данный момент продолжаются некоторые проблемы с утечками ресурсов на сервере приложений и с XRDP сервером.

Но речь в этой статье не только и не столько об интеграционных мероприятиях, хотя и это интересно. Теперь рассмотрим один интересный эффект, который был замечен в процессе эксплуатации. А именно в один из дней, 50и пользовательский хасп с клиентскими лицензиями был случайно заменен на 5и пользовательский. А дальше совершенно спокойно подключаются 15ть человек и работают!

Вызовы и угрозы.

Вот как модно сейчас говорить дваай проанализуирем вывзовы которые имеются в данной ситуации. А по русски — а в чем собственно дело — как так получилось и чего нам за это будет. Ну понятно, что запускать в работу 150 пользователей
на 50 пользовательском ключе никто не собирается, но любой грамотный айтишник (читай «битый волк») что ситуация в целом нехорошо пахнет.

Итак проанализируем что же получается. Попытки читать птичий-юридический язык по материалам лицензирования, у меня как у неюриста вызвал только оторопь, вследствие чего мы начали активную переписку с партнерами 1с с целью получить удобоваримые для простого человека разъяснениями. И вот что мы получили
Добрый день,

Для всех одновременно работающих с 1С компьютеров, с которых производится доступ к базам 1С:Предприятия, должна быть клиентская лицензия.
Количество баз значения не имеет.

С уважением,
отдел продаж "1С"

К сожалению коментарии под роспись и печать не дают, так что вам придется поверить мне на слово ;) Эта модель лицензирования очень похожа на MSую Per Device, то есть сколько компов запустило клиентское ПО 1с столько надо и лмицензий.

Однако у нас всё клиентское ПО запускается на терминальном сервере! то есть на одном компьютере и нужна всего одна лицензия. Понятно конечно, что если бы терминальным сервером был Windows Server, то клиентское ПО конечно могло бы уточнить у операционной ситсемы, что работает терминальная сессия и снять лицензию (сам не пробовал — только предполагаю). Но в моей ситуации у меня Wine@etersoft, и 1С вместе с драйвером хаспа считает, что мы работаем не в терминале а якобы с workstation! Исходя из вышесказанного -сколько бы я не запустил терминальных wine@etersoft экземпляров лицензия снимается одна.

Так чего же опасаться? Казалось бы, не надо наглеть — купил 50 лицензий так и пусть работает 50 человек — надо больше купи еще. На самом деле в нашей великой стране, где в первую очередь сами органы очень вольно вместе с судами трактуют законы, очень даже есть чего опасаться. Доходит до обсурда! Высококвалифицированные юристы обсуждают — как сделать так чтобы вас не привлекли к ответственности за использование бесплатного ПО!!! См. здесь. А опасаться в этой ситуаци стоит вот чего. Когда наши специалисты в погонах берут человека в оборот — ему инкриминируют не только, и не столько контрафакт (его доказать тяжело — купил на рынке, в открытой продаже и взятки гладки) а в основном статью 273 использование «вредоносного ПО». См. например здесь (огромное спасибо Сергею Середе). Можно конечно возразить — вредоносное по — это кряки. А в нашей ситуации нет ни сейбла, и нет patch77.exe Так, да не так! На чем основываются обвинения (в переводе на человеческий язык) — вы используете некое ПО, которое «искажает либо блокирует информацию». Вопрос, какую информацию? Если отбросить псевдонаучный бред который на эту тему несет сторона обвинения и сторона защиты, то это информацию ЛИЦЕНЗИОННУЮ. А при таком подходе есть за что и претензию получить — ведь в даном случае информация лицензионного характера просто не учитывается, и заметьте при вашем (ну то есть в данном случае нашем) активном участии — а кто вообще всю эту «чудовищную» схему придумал? ;)

Можно долго конечно возражать, «не виноватая я, он сам ко мне пришел», или например требовать экспертов предъявить то самое ПО которое нарушило работоспособность и доступность лицензионной информации, только сдается мне не сильно это поможет…

Ну и на последок, для усугубления коллизии можно довести ситуацию например с 1с до полного абсурда. А именно устанавлива ПО 1с вы ставите на компьютер дополнительное ПО — HASP драйвер. Причем он — не произведен 1с. И что же делает этот посторонний софт? Он (о ужас!) считывает и обрабатывает информацию из хаспа. А вот в чем принципиальная разница «обработки» и «искажения и блокирования» информации в законе не говорится…

VertaTags — сервис для добавления функциональности меток на любом сайте.

image

В одну из суббот придумал идею веб-приложения. Это сервис, который позволил бы на любом сайте добавить функциональность меток. Так как на выходные ничего не планировал, то решил тут же начать работу. Через один день в воскресенье вечером, загрузил код на сервер и запустил сервис VertaTags.
Читать дальше →

Устойчивая связь на сервере

Столкнулся со следующей ситуацией — плохая связь на АТС, понятно что делать я ее не буду. А стабильный линк на почтовом сервере нужен.
Сделал следующий скрипт:
1. Посылаем один пинг на модем — если его нет — ребут (можно зарубить процесс DHCP, удалить пид-файл и поднять заново).
Делаем запись в логах.
2. Модем пингуется — делаем три пинга на шлюз — пингов нет — делаем ребут модема (заходим по телнет).
Делаем запись в логах.
3. Переподнимаем DHCP и получаем айпи снова.

Скрипт исполняется каждые пять минут в кроне и выглядит следующим образом:

#!/bin/bash
ping="/bin/ping"
# сетевые адре
IP1=217.168.64.2
# Связь с модемом
if ping -c 1 192.168.1.1
then echo "OK"
else
echo Модем отвалился `date` >> /var/log/apc.log
reboot
fi
is=`$ping -c 3 $IP1 | grep -c "64 bytes"`
# Проверяем прошли ли пинги
if !(test $is -gt "0")
then
# Пингов нет - ребут модема
(sleep 3 ; echo "admin" ; sleep 3 ;echo "12345" ; sleep 3 ; echo "reboot" ; sleep 10) | telnet 192.168.1.1
sleep 180
# Ждем пока модем прогрузится и делаем релоад DHCP
echo "Up DHCP 1"
killall dhcpcd dhcpcd
rm -f /var/run/dhcpcd-eth1.pid
dhcpcd eth1
sleep 15
echo "Все заработало!"
echo Комп перестал пинговаться в `date` >> /var/log/apc.log
exit 1;
fi


Таким образом, можно зайти на любое оборудование и перезагрузить по telnet, у меня например — DLINK DSL-300T
Примечание: Не забудьте изменить логин и пароль для доступа, шлюз/днс своего провайдера и адрес модема.

Тумбим сайты

Решил на своем сайте сделать предпросмотр других сайтов.

Задача оказалась плотформо-зависимой.
И так начнем с ОС Windows.

Для реализации сей задачи используем небольшую программу IECapt для капчюринга картинок через Internet Explorer, использует GDI+(gdiplus.dll).
Для кроссплатформенного использования можно использовать CutyCapt, но нужно установить Qt 4.4.0+

Итак скачиваем IECapt.
Копируем в C:\windows (в системную папку windows).
Скачиваем php скрипты от Zubrag и устанавливаем на ваш web сервер(естественно с поддержкой php и включенной библиотекой GD) например в С:\www\webthumb.
Правим скрипт webthumb.php:

$thumbnails_folder = 'С:/www/webthumb/cache/';
Создаем папку.

Если у вас системная папка windows отличается, правим соответственно строчку

@exec('c:/windows/IECapt.exe --url='.....

Отсальное правим по вкусу:
$image_quality = 100; // качество jpeg картинки
$image_type = 3; // тип картинки 1 = GIF, 2 = JPG, 3 = PNG
$max_x = 200;// максимальный размер тумбика
$max_y = 200;


Все. Открываем в браузере www.vashsite.ru/webthumb/webthumb.php?url=http://www.direg.ru
Получаем соответствующий тумбик сайта.

Читать дальше →

Чувства и эмоции глазами гугла.

Думаю, что каждый когда-либо в жизни задавал себе вопрос: «А как же она выглядит эта любовь\романтика\ложь (нужное подчеркнуть)». Вот и я в очередной раз пришел к этой мысли. Сам я ответа так и не нашел, но решил спросить у того, кто знает о жизни побольше меня. На помощь мне пришел верный друг Google, а точнее его раздел с картинками. Методика очень простая, но результаты были мне любопытны. Вводим слово и смотрим первую выданную нам картинку. Итак, посмотрим, как же гугл представляет слова, которые нельзя пощупать или однозначно представить.

Читать дальше →

Знакомство с Haiku OS

Доброго времени суток, %username%!

В последнее время заметен рост интереса к Open Source приложениям и операционным системам.
С вашего позволения, я не буду рассказывать о всех прелестях Open Source, а перейду сразу к делу.
Многие видели эту ОС, но наверняка найдутся хабралюди, которых данный пост заинтересует.

Итак, Haiku OS — операционная система с открытым исходным кодом, основанная на идеях BeOS.
Ее создатели хотят, чтобы система была простой для пользователя с любым уровнем знаний и навыков работы с компьютером.
Читать дальше →

RapidShare начал раскрывать IP-адреса пользователей

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

Немецкие СМИ говорят, что производится передача IP-адреса в соответствии со 101-м параграфом Закона об авторских правах Германии. Отмечается, что хотя RapidShare и не делает информацию о реквизитах пользователей публичной, по крайней мере однажды администрация RapidShare передала данные о пользователе, после чего в отношении него было начато судебное разбирательство.

Данное дело касается нового альбома группы Metallica Death Magnetic. На RapidShare запись была размещена за сутки до релиза, чем пользователь навлек на себя гнев правообладателей. СМИ сообщают, что рекорд-лейбл обратился в RapidShare, а затем и в Deutsche Telekom, после чего пользователь был идентифицирован.

УЗИ теперь можно делать на смартфоне

Группа исследователей (William D. Richard, Ph.D. и David Zar) из Вашингтонского университета в Сент-Луисе (Washington University in St. Louis, WUSTL) разработала USB-зонд для ультразвукового сканирования внутренних органов. Компактное устройство при помощи специального ПО можно подключить не только к ноутбуку, но и к смартфону на базе Windows Mobile. Создание зонда стало возможным благодаря гранту от Microsoft в размере $100 тыс., выделенному разработчикам в 2008 году. С помощью этого устройства можно провести ультразвуковое исследование почек, печени и многих других органов человека.



Разумеется, подобное исследование не сможет заменить УЗИ на специализированном аппарате, но как мобильный вариант для экспресс-диагностики заболеваний или для обучения студентов-медиков вполне подойдет. Кроме этого, не стоит забывать об относительно низкой стоимости устройства. Предлагаемый исследователями вариант стоит около $2000, тогда как типичная портативная УЗИ-установка обойдется в $30000. В планах разработчиков снизить стоимость комплекта (зонд+ПО) до $500.

Реализация png и Internet Exporer с помощью css, javascript и php

PNG и IE: CSS


Использовании для IE фильтра AlphaImageLoader.

1. Вставляем CSS файл fix-ie6.css только для IE5.5 и 6 в разделе head html документа.



2. Помечаем селектором(айдишником или классом) в каком контейнере будет png графика.
3. Описываем в общем файле стилей, например в styles.css, свойства контейнера #png_wrap.

#png_wrap {
background-image: url(/src/to/image/image.png) no-repat;
width:100px;
height:100px;
}

4. Прописываем в файле fix-ie6.css фон для этого контейнера с использованием фильтра AlphaImageLoader

#png_wrap {
background-image: none;
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='/src/to/image/image.png', sizingMethod='crop');
}

5. Если нужно добавить кликабельность контейнера, можно внутрь контейнера поместить прозрачный гиф внутри ссылки. Например:
<div id=«png_wrap»>
<a title=«Example» href=«example.com»>
<img title=«Example» src=«clear.gif» alt=«Example» width=«100» height=«100» />
</a>
</div>

Недостатки решения AlphaImageLoader:


— Необходим дополнительный контейнер для каждой картинки.

Преимущества решения AlphaImageLoader:


+ Простота использования
+ Валидный код

Подробная информация про свойства фильтра AlphaImageLoader

PNG и IE: JavaScript


Существует огромное количество библиотек JavaScript для борьбы с проблемой IE и PNG. Они загружаются при полной загрузке страницы и обрабатывают png графику. Каким образом изменяют графику — это уже вопрос другого обзора. Теперь рассмотрим наиболее интересные варианты:
jquery.pngFix.js — плагин на основе API jQuery

Свойства плагина jquery.pngFix.js

  • Работает с фоновыми изображениями
  • Работает с кликабельными изображениями
  • Работает с атрибутами alt, title, styles и class изображения

Установка:

  1. Скачать jQuery
  2. Скачать pngFix
  3. Подключить в заголовке head скаченные файлы

    <script type=«text/javascript» src=«jquery-latest.pack.js»></script>
    <script type=«text/javascript» src=«jquery.pngFix.js»></script>
  4. Активировать плагин pngFix. Вставлять можно и в заголовок head и в тело страницы body

    <script type=«text/javascript»>
    $(document).ready(function(){
    $(document).pngFix();
    });
    </script>

Недостатки jquery.pngFix.js

— Не всегда корректно позиционируется в IE
— забирает себе событие document.ready
Преимущества jquery.pngFix.js

+ легек в использовании и установке
+ с помощью селекторов в jQuery плагину можно указать чтоб он обрабатывал только картинки
ie7-js — Google JavaScript библиотека

Свойства плагина jquery.pngFix.js

  • Работает только с изображениями
  • Работает с кликабельными изображениями
  • Работает с изображениями, которые имеют вид *-trans.png

Установка:

  1. Скачать Google ie7-js
  2. Подключить в заголовке head скаченный файл


  3. Переименовать необходимые файлы в такой вид *-trans.png

Недостатки jie7-js Google

— большой размер (72 Кб)
— не работает с повторяющимся фоновым изображением
Преимущества jie7-js Google

+ очень прост в установке
IE PNG Alpha Fix

Свойства библиотеки IE PNG Alpha Fix

  • Автоматическая активация прозрачности
  • Работает с картинками
  • Работает с фоновыми изображениями
  • Поддерживает ролловеры
  • Работает на основе .htc файла
  • вставляет если нужно ссылку для кликабельности

Установка IE PNG Alpha Fix

  1. Скачиваем и разархивируем архив iepngfix.zip
  2. Копируем iepngfix.htc в любое место
  3. Прозрачный gif из архива копируем в корень сайта. Если же копируем в какую-то папку /folder/, тогда в файле iepngfix.htc нужно указать путь к прозрачному гифу

    var blankImg = '/folder/blank.gif';
  4. Указываем или в css или в html, какие контейнеры буду содержать png графику. Путь должен быть относительным к html фалу.

    <style type=«text/css»>
    img, div { behavior: url(folder2/iepngfix.htc); }
    </style>

Недостатки IE PNG Alpha Fix

— работает на основе .htc
Преимущества IE PNG Alpha Fix

+ прост в установке и использовании
+ широкие возможности

IE и PNG: php


Вся обработка страници по замене png записей происходит на стороне сервера с помощью php или другого языка. Примеров много. Вот одни из них:
replacePngTags.php от koivi.com

Установка

  1. Скачиваем архив http://koivi.com/ie-png-transparency.zip
  2. Копируем на сервер replacePngTags.php
  3. В файле в котором нужно работать с png графикой вставляем инициализируем функцию
    <?php ob_start(); ?>
  4. В конце этого файла вставляем такой код:

    <?php
    include_once 'replacePngTags.php';
    echo replacePngTags(ob_get_clean());
    ?>

  5. + не нужно править html код, только добавить подключение функции в движок

История XML — коротко о главном.

Очень краткая история языков разметки, или что было до XML



Для кого я писал этот пост про XML? Для тех, кто много и хорошо пишет — статьи, книги, техническую документацию. Не так важно, что пишет, как то, сколько времени на это тратит. Этот текст для тех, кто старается экономить свое время и ищет для этого новые эффективные методы. А XML при умелом обращении на 75% сокращает время и деньги на создание документов.

За границей ружья кирпичом не чистят © Левша



Занимаясь долгое время разработкой XML приложений, я как-то привык не замечать, что этот язык практически полностью обойден вниманием в рунете. Нет, конечно, многие знают про Atom, XML-RPC и SOAP, но сейчас речь совсем не об этом. Создание документов — вот какой аспект XML до сих пор незаслуженно остается в тени.

Достаточно взглянуть на статистику поисковых запросов:

Запросов в Google/Яндекс «XML editor»/«XML редактор» «XML»
в англоязычном интернете 2'740'000 90'000
в Рунете 93'000 чуть более 2'000


Прямо скажем — факты не в пользу 1/6 части суши. Мне кажется, что одной из причин этого является привычка откладывать на завтра то, что можно сделать сегодня, и нежелание инвестировать свои силы и время в перспективные решения своих проблем.

Тот, кто хочет — ищет способ, кто не хочет — ищет причину.



Я не хочу сейчас ковыряться в причинах. Я хочу поделиться своим энтузиазмом с теми, кто хочет побороться с двигателем прогресса — ленью — и разорвать замкнутый круг рутинной работы. А лучшим стимулом для преодоления трудностей является чужой пример их успешного преодоления.

Усложнять — просто, упрощать — сложно (инженерная мудрость)


С давних пор пишущая братия мается проблемами написания текстов и распространения написанного. Если взглянуть внимательнее, то основная маета происходит из-за оформления текстов. Во времена глиняных табличек это было неизбежным злом. Но вот с появлением машинной обработки текстов стало возможным отделить наконец семантику (смысл) документов от их оформления. И, надо сказать, определенные успехи в этом сделаны. Так зачем цепляться за клинопись, когда можно попробовать воспользоваться изобретенными удобствами в личных корыстных целях?

GML — первый шаг к упрощению



GML (англ. Generalized Markup Language — обобщенный язык разметки) был разработан в 1969 году в компании IBM как набор макросов для текстового процессора SCRIPT/VS. Язык GML был разработан Чарльзом Гольдфарбом (Charles Goldfarb), Эдвардом Мошером (Edward Mosher) и Рэймондом Лори (Raymond Lorie), чьи инициалы и были использованы в названии языка.

GML освободил писателей от необходимости напрямую использовать возможности процессора SCRIPT/VS, касающиеся размера шрифта, межстрочных интервалов, размеров страниц и т.д. Синтаксическая разметка (или теги) языка GML описывала текст документа в терминах глав, разделов разной степени важности, параграфов, списков, таблиц и прочего.

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

Пример документа с разметкой GML



:h1.Глава 1: Вступление
:p.GML поддерживает иерархические структуры, такие как
:ol
:li.Нумерованные списки, такие, как этот,
:li.Маркированные списки и
:li.Списки определений,
:eol.
а также просто текст.
:p.Упрощенная разметка (обобщенная и формализованная позднее в языке SGML)
позволяет не вставлять закрывающие теги для элементов "h1" (заголовок) и "p" (параграф).


GML предшествовал и послужил одним из источников появления языка SGML — набора правил для создания языков описания структурированных документов.

SGML — колосс на глиняных ногах



В 1986 году появился SGML (англ. Standard Generalized Markup Language — стандартный обобщённый язык разметки) — метаязык, с помощью которого можно было создавать конкретные языки разметки документов. Изначально SGML был разработан для использования машинно-читаемых документов в правительственных и аэрокосмических проектах. Он и сейчас там используется, хотя прошло уже более 30 лет — огромный срок по меркам ИТ.

Пример разметки SGML документа:



<QUOTE TYPE="example">
typically something like <ITALICS>this</ITALICS>
</QUOTE>


Язык SGML предоставляет абстрактный синтаксис, который можно применять в конкретных сценариях. Например, можно использовать любой символ как разделитель тегов, вместо стандартных угловых скобок. Это было сделано, в частности, для совместимости с GML документами — то, что в GML выглядит как :xmp.Hello, world:exmp, в стандартном синтаксисе SGML выглядит как <xmp>Hello, world</xmp>.

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

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

HTML — у семи нянек дитя без глазу



Хотя, не все так плохо, если говорить о применениях SGML как метаязыка. Ведь именно он послужил в 1992 году родителем языка HTML, который формально является приложением SGML (формально он сделался таковым только в версии 2.0). HTML даже унаследовал от SGML его синтаксис по умолчанию — угловые скобки, нечувствительность к регистру в именах элементов и расслабленность синтаксиса тегов.

Ключевая особенность HTML — его расслабленность — сыграла злую шутку с языком и его пользователями. Простота HTML позволила ему быстро распространиться по всему интернету, а потом, как ни дико это звучит, стала основным недостатком и тормозящим фактором в его развитии. Отсутствие расширяемости (фиксированный набор элементов) и четкой структуры документов привели к необходимости вновь вернуться к поискам философского камня для писателей.

Ограниченность количества тегов и полное безразличие к структуре документа побудили разработчиков в лице консорциума W3C к созданию такого языка разметки, который был бы не столь сложен, как SGML, и не настолько примитивен, как HTML. В результате, сочетая в себе простоту HTML, логику разметки SGML и удовлетворяя требованиям Интернета, появился на свет язык XML.

XML — назад в будущее!



XML (англ. eXtensible Markup Language — расширяемый язык разметки) был создан в феврале 1998 года как подмножество SGML. Расширяемым он называется потому, что позволяет своим пользователям изобретать элементы по необходимости.

XML был разработан рабочей группой из 11 человек при поддержке около 150 заинтересованных разработчиков. Члены рабочей группы никогда не встречались лицом к лицу — все технические дискуссии происходили в почтовой переписке, а вопросы решались поиском компромисса и, в сложных случаях, голосованием рабочей группы. Основные технические решения были найдены в течение 20 недель интенсивной работы с июля по ноябрь 1996 года, когда был опубликован рабочий черновик спецификации XML. В дальнейшем работа была продолжена, и 10 февраля 1998 года XML обрел статус рекомендованного стандарта.

Простота XML (по сравнению с SGML) позволила создавать гораздо более простые парсеры (программы синтаксического разбора документов). Как следствие, XML гораздо шире распространен, чем SGML, хотя появился на 12 лет позднее.

Кроме того, XML проще поддается интернационализации — XML напрямую поддерживает Юникод практически во всем его великолепии — в именах элементов, атрибутов, комментариях, текстовом контенте. Приведенный ниже пример показывает это нагляднее всех слов:

<?xmlversion="1.0" encoding="UTF-8"?>
<俄語>Китайский язык</俄語>


Применение XML не ограничивается документами в обычном смысле этого слова — он используется в ряде приложений общего назначения, таких как Semantic Web, XHTML, SVG, RSS, Atom, XML-RPC и SOAP.



Ну вот и все



С момента создания XML прошло 11 лет его успешного применения в различных сферах человеческой деятельности, и это хороший показатель качества языка. За это время он породил множество сопутствующих форматов, также XML-ных: XML Schema, XSLT, XSL-FO, XPath, XInclude, XML Catalogs, XQuery, Docbook (не путать с SGML Docbook), DITA (не ищите по такому названию, чтобы не удивляться результатам поиска, лучше — «DITA XML»). И это — только те стандарты, которые непосредственно интересны при написании документов.

О них можно написать отдельно, если вы не заснули, читая этот краткий экскурс в историю XML.

_________
Текст подготовлен в ХабраРедакторе

Идея → Малоимущие помогают себе подобным. Или рациональное использование трафика.

Доброго времени суток Вам.



Я хочу вам поведать отду свою идею. Которая возможно смогла бы решить проблему низкой пропускной способности интернета, а может и поможет кому-то достичь скорости в 100 и > Мегабит, при помощи локальной сети.
Я думаю многие из нас так поступают, например: оставляют компьютер включенным, а сами делают какую то работу по дому слушая музыку, ну или что то подобное…

Обрисую структуру сие программы: у нас есть локальная сеть по средству которой мы выходим в интернет, у нас есть юзеры активные (юзают WWW) и юзеры пассивные (не юзают WWW).

Я думаю многие из нас так поступают, например: оставляют компьютер включенным, а сами делают какую то работу по дому слушая музыку.

Когда юзер перестает работать в сети интернет, программа автоматически переключается (например через 1-у минуту) в режим «раздачи интернета», другие пользователи накидываються на «халяву» деля между собой не использованый трафик. Так сказать — «мини-провайдеры».

image

Это моя первая статья пожалуйста не цепляйтесь к словам. Нет во мне дара оратора…

Серверные контролы в ASP.Net MVC приложении

Казалось бы какие могут быть проблемы — по умолчанию MVC использует WebForms ViewEngine? Однако следующий простой эксперимент демонстрирует обратное:

1. Создадим новое ASP.Net MVC приложение.

2. Добавим на автоматически сгенерированную мастером Index.aspx серверную форму, назначив ей action при помощи метода RouteUrl UrlHelper'а:

<asp:Content ID="indexContent" ContentPlaceHolderID="MainContent" runat="server">
  <form id="DemoForm" runat="server" action='<%# Url.RouteUrl(new {controller="Home", action="Index"})%>'>
  </form>
</asp:Content>


* This source code was highlighted with Source Code Highlighter
.


3.Добавим в форму любой стандартный серверный контрол, пусть в нашем случае это будет
RadioButton и input, дабы засабмитить форму:

<asp:Content ID="indexContent" ContentPlaceHolderID="MainContent" runat="server">
  <form id="DemoForm" runat="server" action='<%# Url.RouteUrl(new {controller="Home", action="Index"})%>'>
    <asp:RadioButton runat="server" ID="DemoButton" Checked="true" />
    <input type="submit" value="Crash" />
  </form>
</asp:Content>


* This source code was highlighted with Source Code Highlighter
.


Теперь попробуем запустить наше веб приложение и нажать submit-кнопку и вот что мы получим в итоге:


Как видно из рисунка, проблема возникает при Mac-валидации PartialView. Вызвано это тем, что по какой-то непонятной причине разработчики MVC отнаследовали System.Web.Mvc.ViewUserControl от System.Web.UserControl не перекрыв код восстановления ContolState'а и ViewState'а. В результате input в серверной форме инициирует postback, что в свою очередь запускает стандартный механизм восстановления ViewState'а и, следовательно, к падению приложения.

Тут возможны два workaround'а:

1)Отключение Mac валидации в Web.config, что может привести к некорректной работе тех частей приложения, которые используют классический ASP.Net подход.

2)Изменение класса для PartialViews. В данном случае, не меняется ни поведение PartialViews, ни серверных контролов. Создадим следующий класс:

public class ViewUserControlWorkaround : ViewUserControl {
   protected override void LoadViewState(object savedState) { }
   protected override object SaveViewState() { return null; }
   protected override void LoadControlState(object savedState) { }
   protected override object SaveControlState() { return null; }

   public override void RenderView(ViewContext viewContext) {
     viewContext.HttpContext.Response.Cache.SetExpires(DateTime.Now);
     var containerPage = new ViewUserControlContainerPage(this);
     ID = Guid.NewGuid().ToString();
     RenderViewAndRestoreContentType(containerPage, viewContext);
   }

   public static void RenderViewAndRestoreContentType(ViewPage containerPage, ViewContext viewContext) {
     string contentType = viewContext.HttpContext.Response.ContentType;
     containerPage.RenderView(viewContext);
     viewContext.HttpContext.Response.ContentType = contentType;
   }

   sealed class ViewUserControlContainerPage : ViewPage {
     public ViewUserControlContainerPage(ViewUserControl userControl) {
       Controls.Add(userControl);
       EnableViewState = false;
     }

     protected override object LoadPageStateFromPersistenceMedium() { return null; }
     protected override void SavePageStateToPersistenceMedium(object state) { }
   }
 }

* This source code was highlighted with Source Code Highlighter
.


Теперь достаточно заменить класс контрола в .ascx файле и проблема будет решена:

<%@ Control Language="C#" Inherits="MyDemoApp.ViewUserControlWorkaround" %>

* This source code was highlighted with Source Code Highlighter
.


Другая проблема с которой пришлось столкнуться — это вызов Post — экшенов при callback'ах серверных контролов, что может привести к нежелательным последствиям.

Данная проблема легко решается добавлением следующего property в базовый контроллер вашего приложения(если таковой имеется) или же непосредственно в контроллер экшеном, которого оно будет использоваться:

protected bool IsServerControlCallback {
  get { return !string.IsNullOrEmpty(Request.Params["__CALLBACKPARAM"]); }
}


* This source code was highlighted with Source Code Highlighter
.


Теперь, делая каждый раз проверку в Post-экшене можно избежать исполнения нежелательного кода при callback'ах серверных контролов:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index() {
  if(IsServerControlCallback) return View("~/Views/Home/Index.aspx", viewModel);
  //Do something useful here
}

* This source code was highlighted with Source Code Highlighter
.

Конечно при данном подходе возникают проблемы с ModelState'ом, в частности, если после callback'a засабмитить форму и при валидации введеных данных обнаружится некоторая ошибка, то при возврате клиенту страницы с сообщениями валидации значения эдиторов будут утеряны. Однако это решаемо клиентской валидацией.

Установка JDK & Tomcat 6.

Начал я изучать JSF и сразу же столкнулся c такой проблемой, для моих опытов мне нужен tomcat 6, jdk (вообще мне еще много чего нужно ;-)). Все опыты проводяться на системе Debian 5 lenny
Нам надо скачать:

1. jdk 1.6;
2. tomcat 6;

Начнем с установки явы:

sudo chmod 777 *.bin
sudo sh ./jdk*.bin


Теперь переименуем только что созданную директорию во что-то удобочитаемое «Java6.11» и перенесем в /usr/lib

sudo mv Java6.11 /usr/lib
sudo update-alternatives --install /usr/bin/java java /usr/lib/Java6.11/bin/java 300


Настроим переменные CLASSPATH и JAVA_HOME в файле /etc/enviroment:

nano /etc/environment

И впишем туда 2 строчки:

CLASSPATH=.:/usr/lib/Java6.11/bin
JAVA_HOME=/usr/lib/Java6.11


Забудем пока о яве и настроим Tomcat 6.18. Излекаем:
sudo tar zxvf apache-tomcat-6.0.18.tar.gz

Теперь переименуем только что созданную директорию во что-то удобочитаемое «tomcat6.18» и перенесем в /usr/share

sudo mv tomcat6.18 /usr/share

Поправим ~/.bashrc:

sudo nano .bashrc

Вписав в самое начало:
export JAVA_HOME=/usr/lib/Java6.11
export PATH=$PATH:$JAVA_HOME/bin


Отредактируем файл: /usr/share/tomcat6.18/conf/tomcat-users.xml
sudo nano /usr/share/tomcat6.18/conf/tomcat-users.xml

И исправим в нем имя для входа и пароль:

Настало время протестить, то что мы сейчас сотворили :-). Запускаем так:
sudo /usr/share/tomcat6.18/bin/./startup.sh

Остановим так…
sudo /usr/share/tomcat6/bin/./shutdown.sh

Введем в строке браузера: localhost:8080
Если все получилось мы увидим страницу с томкатом.
Удачи всем!

Dlink 320 + Yota — дружба без флешки

К сожалению, лишних usb хабов и флэшек не было под рукой, а интернет хотелось сделать. Готовых решений найдено не было, поэтому был создан данный набор.

За основу взята инструкция описание установки прошивки с форума wl500g.info, описанная здесь, а также настройка драйвера madwimax, описанная здесь.
Читать дальше →

Способы монетизации интернет-ресурсов

Заработать деньги на собственном интернет-ресурсе – заветная мечта любого его создателя.
Попробуем разобраться, каким образом это можно сделать. Но сразу же оговоримся, речь пойдет не о каких-то экзотических, а о самых распространенных способах.

1. Платные или частично платные ресурсы.
Думаю, из самого названия уже ясно, о чем идет речь.
Другой вопрос, что интернет, по умолчанию, подразумевается как пространство безбрежной халявы, и надо очень постараться, чтобы найти такую услугу, за которую потребитель готов выложить свои кровные. Кроме этого, всегда существует опасность, что кто-то сделает то же самое, но бесплатно, надеясь на самоокупаемость за счет рекламных доходов.

2. Плата за дополнительные услуги.
Более легкий вариант п.1 весьма распространен на просторах сети. Вы вполне можете пользоваться ресурсом и бесплатно, но за больший функционал или выделение себя среди других уже придется платить.

3. Плата за отсутствие.
Еще один способ монетизации, придуманный пытливыми умами. Не хочешь видеть надоедливую рекламу – плати.

4. Реклама.
Можно выделить несколько подвидов рекламы в сети.
4.1. Плата за показ посетителям информации о продукте.
С точки зрения собственника товара – это не самый лучший вариант продвижения продукции, ибо аудитория в большинстве случаев бывает универсальной, а значит –процент потенциальных клиентов невелик. Обычно, эффективность достигается за счет большого количества показов.
4.2. Плата за клик.
Иными словами, плата за проявление интереса к информации о продукте. Увы, по оценкам консалтинговых компаний (например, «Outsell»), в последнее время лавинообразно нарастает доля фальшивых кликов.
4.3. Плата за направление на ресурс.
От п. 4.2. данный пункт отличается тем, что направление на ресурс собственника продукта происходит, когда потребитель ищет информацию по соответствующей тематике. По такой схеме работают «Яндекс.Директ», «Бегун» и т.д.
4.4. «Информационная» реклама.
При этом виде рекламы дается объем информации достаточный для принятия решения о приобретении. Обычно она имеет вид статей.
Согласно исследованиям компании «Adfusion» рекламу в информационных статьях предпочитает 51% опрошенных пользователей. В то время как на контекстную рекламу в результатах поиска обращают внимание 39%, баннеры – 25%, а на всплывающие окна –только 13%.

5. Продажа информации.
Данный вид доходов доступен далеко не всем. Плата берется за использование материалов сайта или за аналитические отчеты. Один из примеров такого подхода к монетизации – «РБК».

6. Синергия с off-line бизнесом.
На самом деле, заработать деньги, находясь только внутри интернета, не так уж и легко, по той простой причине, что человек привык к материальному потреблению. Интернет же по большей части может предоставить только потребление виртуальное.
Однако, интернет-ресурс может быть прекрасной надстройкой над off-line бизнесом, выполняя информационную и направляющую функции, и получая процент от продаж в реальном бизнесе.
В принципе, к этому пункту можно отнести большую часть интернет-магазинов.

Возможно, я что-то забыл или опустил и буду рад дополнениям.