Как стать автором
Поиск
Написать публикацию
Обновить

Немного о Kerio MailServer

Не так давно приобрел VPS'ку с gentoo на борту. Собственно хотелось её помучать, но не знал с чего начать. Для начала методом проб и ошибок был настроен Nginx. Потом задумался о настройке почты. Гуглил долго и упорно. Сначало смотрел на exim, который довольно популярен. Сам по себе почтовик хороший и с довольно хорошими возможностями, но чтобы его как следует «обточить», моих сил было явно маловато. И тут я вспомнил о Kerio.

Kerio MailServer

Почтовый сервер с довольно широкими возможностями.
Требования к системе: Windows 2000/XP/2003 для серверов и ПК, Red Hat Linux, SUSE Linux и Mac OS X.
Читать дальше →

Clip2Net = скриншот + видео + текст

Незаслуженно малоизвестной программой Clip2Net, я с удовольствием пользуюсь
уже второй год. При запуске, в трее появляется симпатичная стрелочка:
image
Кликнув по иконке «левой», мы активируем программу и указатель мыши
видоизменяется — к стрелке «приклеивается» прямоугольничек.
Подводим курсор к интересующему нас месту на экране и, удерживая левую
кнопку мыши формируем область нужного размера. Кстати, рядом
с курсором высвечиваются цифры — это размер будущего снимка в пикселях.
Отпускаем кнопочку и… открывается окно редактирования —

image
Результат редактирования — image
Читать дальше →

Семь пожеланий к Windows Seven от простого пользователя

Согласно некоторым источникам, Microsoft активно работает над следующей версией операционной системы Windows (для тех, кто не знает, пока её название — Windows Seven). Уже начались традиционные для сей поры всевозможные «фейки» (подделки), слухи, редкие скриншоты… В последнее время ходит всё больше кривотолков по поводу ожидаемого года релиза.

Не заостряя на них внимание, мы предлагаем вашему вниманию семь вещей, которые мы бы хотели видеть в Windows Seven. Давайте, игнорируя «наезды» Европейского союза на Microsoft, просто объективно посмотрим, что бы мы хотели видеть в новой ОС.

И не судите строго за возможный субъективизм.

1. Упрощённое издание

Выпустив Windows Vista в таком количестве версий, Microsoft некоторым образом ввела в заблуждение будущих пользователей операционной системы. Ну к чему, спрашивается, обычному пользователю столь большой набор? Это затрудняет выбор.

Поэтому, было бы хорошо, если бы Windows Seven вышел лишь в двух вариантах:
Полная версия (называйте её, как хотите, но она должна быть полной) со всеми возможностями;
Версия для геймеров. Это та версия ОС, в которой упор сделан на производительность, которая включает в себя всё, что необходимо заядлому игроку, включая последнюю версию DirectX, утилиты-оптимизаторы и тому подобное.

2. Стоимость

Вы бы заплатили $300 за операционную систему? Если да, значит Вы достаточно обеспеченный человек. Однако… Не все могут позволить себе такие затраты на ОС, если не сказать, что большинство. Посему, было бы замечательно, если бы полная версия стоила $150 и не больше, а «геймерская» версия — около $100. Я не специалист в маркетинге, но могу полагать, Microsoft и с такими ценами окупила бы все затраты.

3. Прекратите упрощение процесса установки!

Известно, что Microsoft попытались сделать процесс инсталляции операционной системы на компьютер пользователя проще и доступнее для людей с разными уровнями познаний (речь идёт о Windows Vista). Однако, это привело к множеству проблем, в частности невозможно настроить некоторые важные опции сразу при установке. Я против продолжения такой практики. Лучше один раз настроить всё при установке, чем потом полгода выискивать в дебрях панели управления нужные параметры.

4. Попридержите UAC — User Account Control

Многих раздражает, что Windows (имеется в виду Vista) всё время переспрашивает их о каждом шаге. Приходится отключать эту систему, так как выскакивающие по всякому поводу окошка UAC-а доводят до бешенства особо нервных пользователей.

Да, User Account Control — действительно система обеспечения безопасности, а не просто декорация, но вмешательство её по всякому поводу необходимо ограничить. Стало быть, стоит вводить в UAC некую систему обучения. К примеру сказать, после многократного односложного ответа на один и тот же запрос не отображать окна UAC в этом случае

5. Упростить оптимизацию

Я бы советовал разработчикам перенести все возможности тонкой настройки ОС из TweakUI для Windows Seven в панель управления. Это намного проще для любого пользователя, можно также сделать возможность сокрытия этих настроек либо вынесения их в отдельный раздел «Для продвинутых пользователей» с соответствующим предупреждением о последствиях.

6. Ultimate Extras

Все помнят историю с выходом дополнений для Windows Vista Ultimate? Как сообщалось по различным информационным каналам, включая официальный сайт Microsoft, Ultimate Extras должны были представлять собой бесплатные дополнения и службы, предоставляемые пользователям по принципу «устанавливает каждый желающий». На деле же оказалось, что пользователи почти ни чего не получили. Хотя многих такая ситуация совсем не расстраивает, и они покупали Windows Vista Ultimate не ради этих дополнений, но что делать тем, кто купил эту версию только из-за этого? Ведь не всем нужны возможности Ultimate Extras… Шифрование BitLocker или карточная игра Texas Hold 'Em? А анимированный рабочий стол Dreamscene? Увольте…

Не хотелось бы видеть подобную ситуацию с Windows Seven. Когда она выйдет, лучше сделать бонус-релизы обычным явлением, в противном случае, не рекламировать их вообще.

7. И наконец, переработайте ядро Windows 7

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

Создаем собственный компонент в CMS Joomla 1.5 — Часть 1

Предисловие (читать не обязательно =) ).
Я далеко не гуру Joomla, но в качестве веб-мастера неплохо в ней разбираюсь. И так уж вышло, что среди всех четырех с половиной тысяч расширений для Joomla, опубликованных на их официальном сайте, я не нашел того, который бы в полной мере соответствовал необходимой функциональности разрабатываемого мною сайта. Хотя я и не исключаю, что просто плохо искал.
Ну что поделать, нет, так нет, придется разбираться и писать самому.

Что мне помогло и чем я хочу поделиться с вами.
Для начала немного о том, что можно нарыть в гугле на эту тему:
  1. http://www.webflasher.net/ru/webmasteru/joomla-1-5.html — статья в 4х уроках о том, как создать собственный компонент в Joomla 1.5. Судя по всему, автор особо не заморачивался, взял вот это http://docs.joomla.org/Developing_a_Model-View-Controller_Component_-_Part_1 загнал текст в промпт и разместил на вышеуказанной странице. И, честно говоря, мне не доставило особого удовольствия, сидеть и разбираться в непонятно как написанном тексте. Уж лучше тогда читать и разбираться с оригиналом на docs.joomla.org. Но все же, хоть какая то информация на родном мне языке была мне полезна на начальном этапе.
  2. Потом мне на глаза попалась вот такая статья — http://kjoomla.com/lessons/35-lessons/45-lesson1.html Чтение и разбор которой был для меня очень и очень полезным. Все достаточно грамотно описано, буквально разжевано. Респект автору. Хотя, в качестве примера взят все тот же, тестовый компонент hello.


Постановка задачи.
Кратко опишу какие задачи я перед собой ставил при создании собственного компонента. Хотя, по ряду причин, они, конечно, будут немного отличатся от реальных. ;)

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

Пример: Допустим у пользователя не заводится автомобиль. Он заходит на сайт, чтобы получить какие-нибудь рекомендации, переходит в эту систему. Далее он видит несколько предложенных вариантов для выбора:
  • ваша машина не заводится,
  • ваша машина заводится, но при трогании с места глохнет,
  • ваша машина заводится, но при движении иногда глохнет.


Пользователь, естественно выбирает первый вариант, и получает следующий список:
  • двигатель пытается завестись, но не заводится,
  • никаких движений в двигателе не слышно.


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

Описание нашего компонента.
  1. в базе данных должны быть созданы соответствующие таблицы, хранящие в себе необходимые данные для диагностики проблемы автомобиля,
  2. компонент должен иметь логику по обработке действий пользователя и выборке из БД необходимых данных,
  3. компонент должен иметь шаблон по отображению на странице данных, выбранных из БД.


Как видно по описанию, компонент на самом деле очень простой, но все-таки чуть по сложнее и по интереснее описываемого всеми компонента hello.

Наш компонент мы назовем — UserHelp.

Инструментальные средства.
Начинающим очень рекомендую использовать компонент — EasyCreator. В структуре разрабатываемого вами компонента сразу многое станет понятнее, да и сама разработка будет проще. На рабочий сайт EasyCreator ставить не имеет смысла. По мне, так его стоит использовать только на локале для создания и тестирования своего компонента.
Данный компонент позволяет создавать собственные расширения. Считайте это IDE в веб-интерфейсе. Он вам сразу и все необходимые каталоги создаст и файлы контроллера, и модели, и представления, причем со всем базовым набором кода. Да и сам код будете писать в приятном редакторе. В общем крайне вкусный компонентик, правда бажный немного…
Ну да ладно, не об этом компоненте речь.

Необходимая информация.
Итак, что же есть такого интересного в Joomla 1.5, что нам необходимо знать, чтобы создать собственный компонент.
И это, конечно же, известная всем архитектура Joomla 1.5 — MVC — Model-View-Controller, что в переводе на русский означает — Модель-Представление-Контроллер.
Вообще говоря, когда я в полной мере осознал что это такое, я понял, что на Joomla 1.0 я не вернусь больше никогда.
Итак, что же из себя представляет эта MVC.
Модель, это часть компонента, которая оперирует данными и передает результат в Представление.
Представление, это часть компонента, которая отвечает за вывод данных, который получает из модели.
Контроллер, это часть компонента, которая отвечает за управление всем, реагирует на события, запускаемые пользователем, запускает нужные модели и обрабатывает полученные данные для представления.

Тем, кто читает это все в первый раз, наверное, будет не все понятно. Но на самом деле, все очень просто и удобно.

Хотя, некоторые моменты мне и самому до сих пор не совсем понятны. К примеру, куда лучше помещать логику — в Контроллер или в Модель? Кстати, если кто-нибудь мне сможет однозначно и обоснованно ответить на этот вопрос, буду очень благодарен. =)

Начнем.
Ну что, начнем создавать наш компонент.
Для нашего компонента в каталоге components создадим подкаталог com_userhelp.
В нем будут содержаться следующие файлы и каталоги:
  • userhelp.php — точка входа в компонент, этот файл вызывается самым первым.
  • controller.php — контроллер.
  • userhelp.xml — XML-файл, необходимый для установки компонента.
  • models/userhelp.php — модель.
  • views/userhelp/view.html.php — представление, получающее данные из модели или контроллера передающая их в шаблон.
  • views/userhelp/tmpl/default.php — файл стандартного шаблона, запускаемый автоматически при отображении данных.
  • css/userhelp.css — CSS-файл для стилизации отображения.


Собственно, все эти файлы (за исключением css) будут созданы автоматически, если в описанном мною выше компоненте EasyCreator, вы создадите новый проект, с соответствующим названием — UserHelp.

Надеюсь, что кто-нибудь из хабрачанов будет так любезен и подарит мне инвайт =), ибо очень хочется в своих последующих 2-х или 3-х частях полностью описать процесс создания данного компонента (в одну часть все не уместить). В следующих частях планирую рассказать, как используя Joomla API можно легко работать с БД и XML. А так же, еще в одной части расскажу о том как прикрутить AJAX к своему компоненту, и покажу это так же на примере рассматриваемого компонента UserHelp.

Мечты: удобные Width и Height

Однажды, во время разговора с моим другом наш разговор зашёл о CSS. И совершенно случайно, он предложил идею, которую, я считаю, вполне удачной, чтобы W3C использовали её для новой версии каскадных таблиц стилей. Это было некое правило, по написанию WIDTH и HEIGHT, которое, по аналогии, записывалось бы примерно как MARGIN и PADDING.

Все знают, что для записи ширины элемента мы используем параметр width, для записи минимальной ширины — min-width, а для записи максимальной ширины — max-width. Идея заключается в том, чтобы совместить все три параметра записи ширины одной строкой, так же, как это делается, к примеру, с параметром margin.

Всё просто и ясно, к примеру, вот такую запись:

width:1024px;
min-width:800px;
max-width:1600px;


Мы заменим на такую: (три значения выделены разными цветами, для более ясного восприятия)

width: 800px 1024px 1600px;

Которая имеет такую модель: width: min-width, width, max-width;

В случае если нужна обычная ширина то просто можно написать как привыкли:
width:1024px;

В случае если нужна ширина и максимальная ширина, то пишем:
width:none 1024px 1600px;

Аналогично можно поступить если нам нужна минимальная ширина и ширина:
width:800px 1024px none;

Такую же систему можно было бы использовать и с параметром height.

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

Отладка PHP приложений: XDebug + Vim

Введение


Разработчики любых программных продуктов тратят на устранение неполадок в собственных приложениях относительно большое количество времени. Поиск некоторых, особо назойливых “жучков”, способен вогнать любого программиста в тоску. Как оптимизировать этот процесс? Сходу писать на 100% стабильный код? К сожалению такой таблетки еще не придумали :(


И тут нам на помощь приходят всевозможные debugger-ы (отладчики). Многие платформы, имеют встроенные средства пошаговой отладки кода. Вместе с тем, PHP “из коробки” этим обделен. Но не стоит унывать раньше времени! В этой заметке я хочу показать: как, достаточно легко, используя подручные средства, собрать среду для отладки ваших скриптов.


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


Вот как это выглядит


Вы программируете в редакторе Vim. Нажимаете клавишу F5, Vim переходит в режим ожидания соединения от сервера приложений. Вы обновляете PHP страницу, над кодом которой идет работа и сервер создает соединение с Vim. Прямо в редакторе создается окружение для отладки кода. Вы можете пошагово перемещаться по нему, заходя внутрь пользовательских функций и возвращаясь обратно. Также вы можете налету выполнять (eval) собственные выражения, получать сведения о текущем контексте (состоянии всех видимых переменных), устанавливать и убирать контрольные точки, менять свойства объектов и переменные и т.п. (см рисунок 1)



Рисунок 1. Как выглядит отладка в Vim + Xdebug

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

Система охлаждения ноута за час (handmade)

Существовало два фактора, подтолкнувших меня на это:
1. я по дурости своей купил ноут Acer
2. шла летняя пора и за окном было 25-30 градусов

Захотелось как-то помочь своему непутёвому другу. Может кому будет интересно.

Приступим :)
Читать дальше →

CMS Drupal 6.x общая авторизация IPB

На протяжении нескольких лет, работаю и попутно изучаю CMS Drupal, я многому научился и чувствую предстоит научиться благодаря CMS Drupal. В целом как и любая бесплатная система Drupal имеет свои плюсы и минусы, но думаю рассказывать об этом не стоит.

Совсем недавно я получил заказ, на разработку небольшого ресурса. Как вы уже наверно догадались, для реализации я использовал Drupal. Дабы в очередной раз разочароваться и в тоже время порадоваться, узнав что-то новое о системе. Все было прекрасно. Но ни один из предложенных мною вариантов друпаловского форума, не подошел заказщику. В итоге был выбран отдельный, всеми известный движок под названием IPB. Далее возник вопрос, о единой системе авторизации имея две независимые БД. Погуглив и просмотрев опыт сообщества drupal.org, я сделал вывод, что инфы достаточно мало. Не буду томить, ниже FAQ по единой авторизации IPB + Drupal.

  • Устанваливаем форум ipb в корень сайта папка forum (версия непринципиальна) и в отдельную БД
  • Устанавливаем Drupal 6.х (drupal.org) в отдельную ДБ.
  • Устонавливаем два модуля интеграции в папку drupal modules, но не подключаем их. Скачать можно здесь
  • Сохраняемся и подключаем модули. Подключились без ошибок, прекрасно.
  • После чего в блоке логина, елси он у Вас выведен, ссылка на утерянный пароль меняеться автоматически, на ссылку утерянного пароля форума.


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

Я реализовал это проще всего, при регистрации на сайте, мы попадаем на регистрацию ipb и после регистрации нас редиректет снова на сайт, где мы уже залогинены и на сайте и на нашем форуме.

Редирект на главную после регистрации на форуме, я сделал так:

открываем
forum/sources/action_public/register.php

строка
2397

$this->ipsclass->boink_it($this->ipsclass->base_url.'&act=login&CODE=autologin&fromreg=1');

заменяеться на

$this->ipsclass->boink_it("http://syper_site.ru");

на url нашего сайта

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


Плюсы:
  • Нет необходимости регистрироваться дважды.
  • Смена пароля производиться и с сайта и с форума, данные обновляются в обеих базах.
  • Если Ваш проект достаточно серьезен, ему понадобиться мощный движок форума и Вы уже знаете, что делать.
  • Базы разделены, что облегчит работу проекта при больших нагрузках.


Всем спасибо.
С Ув. Претендент на инвайт.

автоматическое развертывание windows по сети на win2k3 c исполльзованием WDS

Вступление

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

Исходная ситуация


Есть 20 чистых компьютеров, сервер с вин2к3, сервер с freebsd.
Необходимо получить рабочий компьютерный класс, со всем софтом включенный в домен.

1) В принципе, ситуация не сильно уж страшная, компьютеров не так уж и много, можно с дисками побегать, но по времени получится весьма не дурственно(на одну рабочую станцию надо порядка 2-3 часа из-за большого количества софта), пусть одновременно ставится хотя бы 7 машинок, то понадобится порядка 9 часов чистого времени… многова-то получается.

2) Другой вариант это сделать эталонный образ, скопировать его по сети, банально используя dd, на такую операцию, в моих условиях, уйдёт порядка 3.5 часов на копирование образа по сети, по не загруженной сети… но зато вся система, относительно, легко восстанавливается.

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

4) использовать для установки технологию RIS, а софт устанавливать политикой групп

5) использовать технологию WDS

Вначале хотели использовать различные средства множения образов, например партишин, нортон хост, но там возникли проблемы с поддержкой сети, из-за не распространенности чипсета, пришлось искать другие пути. Был выбран паследний способ, по ряду причин, это технология является продолжением RIS, всё делается по сети с собой ничего носить не надо, образ жмется(у нас получилося в 2 раза), при установке на конечные машинки почти ничего делать не надо… ну и интерес познания нового…

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

Приступим

Как выглядит схема в общем и целом:
1) делается эталонный образ системы, в который инсталируется весь необходимый софт.
2) эталонный компьютер подготавливается к созданию образа
3) на сервере на страивается tftp сервер для загрузки по сети.
4) создаётся загрузочный образ, который занимается копированием эталонного образа на сервер.
5) создаётся загрузочный образ, который занимается установкой на конечную станцию образа с сервера.
6) непосредственно установка

теперь по шагам опишу происходящее
1) думаю здесь не надо комментариев

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

3) здесь тоже ничего страшного и сложного нету, дополнительно в настройках всех DHCP серверов указываются доп параметры это адрес tftp сервера и файл для загрузки.

4) а вот начиная с этого шага начались сложности…
На дисках с вин 2к8 и виста есть файл boot.wim на базе которого и строятся загрузочные обарзы(в образе для вин2к8, просто, несколько больше возможностей, например множественная установка по сети).
В моем случае в этом образе не было поддержки чипсета для сетевой карты, как следствие при загрузке сеть не виделась, что было весьма печально.
Но была описана, технология добавления драйвером. для этого надо было восползоваться набором утилит windows vista AIK(automatic installion kit), при помощи которых это всё реализовывалося. Тут и возник ступор, долгий ступор, ибо при попутке добавления выдавался ошибка о не возможности добавления, было использовано множество различных способов танцов с бубном, но всё бехысходно… а решение оказалось на поверхности, напомню что действо происходило, на вин 2к3, а как оказалось, утилиты для вин2к8… после драйвера были добавлены и всё заработало


5) т.к. проблемы с сетью были решены ранее, то здесь проблем не было

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

Результат

  • установка одной рабочей станции при не загруженной сети занимает 15-20 минут.
  • на 16 компьютеров была установлена win xp с полным пакетом программ, чуть менее, чем за 2 часа


P.S. будет интересно услышать варианты решения множественной установки windows подобных систем используя linux подобных, не пользуясь dd и иже с ним

Ответ на статью: Microsoft → Hyper-V Серверная виртуализация на базе Windows

Пишу ответ, т.к. нет аккаунта на Хабре.

Только что прочитал
habrahabr.ru/blogs/microsoft/51144

И спешу сообщить.
Что Hyper-V доступен для бесплатного использования, как самостоятельное приложение не требующие ОС. О чем на Хабре писалось 3 октября 2008года habrahabr.ru/blogs/os/41540

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

За статью СПАСИБО. Стало немного яснее. Но все же добавьте информацию о том что продукт так же доступен для бесплатного использования и не требует W2008

CakePHP — многоязычность

Здравствуй хабранарод! Хотелось бы поговорить на тему реализации многоязычного сайта на движке CakePHP. Совсем недавно пришлось с этим столкнуться, и я попробую описать как мне удалось сделать сайт на трёх языках. Если у кого-то есть какие-то идеи и реализации на данную тему буду очень рад почитать, потому как мой метод мне кажется не очень хорошим.

В общем дело было так…
Читать дальше →

.NET

Что надо знать, что правильно использовать F#.


Хотелось немного рассказать об особенностях программирования на F#. Как вы, наверное, читали – это язык функционального семейства и произошел он семейства ML и OCaml. Когда я увидел F# в первый раз и решил им воспользоваться, то был достаточно смущен странным синтаксисом, по сравнению с обычными императивными языками, Visual Studio постоянно ругалась чуть ли не на каждую строку кода. Поэтому хотелось рассказать о том, как «правильно» пользоваться этим языком.

Далее я привожу некоторые свои изыскания, при использовании F#:

1. Пишите код с использование директивы #light — это позволит избежать ненужных синтаксических конструкций, котороые достались в наследство от OCaml.

2. Язык F# чувствителен к способу отступов в коде (чем-то это похоже на питон), если вы используете символы табуляции вместо пробелов, то необходимо поменять их на пробелы.
Пример:
//Все правильно
[]
let main(args) =
Console.ReadKey() |> ignore
(0)

//Ошибка компиляции - нет отступов
[]
let main(args)=
Console.ReadKey() |> ignore
(0)


3. В F# не классического понятия переменной, поэтому операция присваивания "=" отсутствует, а есть оператор связывания let, после которого измениние объекто по-умалчанию запрещено (read-only). Пример:
#light

open System

let a = 5

a = 5 //Это обыкновенное сравнение двух чисел на равенство,
//а не присвоение (как может показаться)
//let a = 5 //Была бы ошибка компиляции - a уже определена выше

Console.WriteLine a
Console.ReadKey true

В консли будет 5.

4. При необходимости не только read-only "переменных", можно воспользоваться модификатором mutable. Пример:
#light
open System

let mutable x: int = 0
let mutable y: int = 0

x <- int(Console.ReadLine())
y <- int(Console.ReadLine())

Console.WriteLine(x + y)
Console.ReadKey true


Запись let mutable x: int = 0 – объявление mutable переменной x (необходимо начальное значение x, в данном случае 0) .
Запись x <- int(Console.ReadLine()) – присвоение переменной целочисленного типа, вводимого с консоли.

5. Второй способ использовать не read-only "переменные" - использовать ссылочный тип ref. Пример использования ref типов:
#light

open System

let a = ref 0
a := 10

Console.WriteLine !a
Console.ReadKey true


На консоль выводится число 10.

Запись let a = ref 0 – объявление (связывание) переменной, которая ссылается на целочисленный тип. стоит отметить, что в F# всегда требуется инициализировать ссылочный(ref) тип каким-либо значение уже при объявлении.
Запись a := 10 – обозначает присвоение ссылочной переменной а значения 10.
Console.WriteLine !a – вывод на консоль содержимого перенной a. Оператор ! – оператор извлечения значения ссылочной переменной.
Использование ref типа в F# сильно похоже на использование указателей в C.

Заключение

Надеюсь, что бы полезен тем, кто решил познакомиться с новым языком F#. Удачного всем программирования.

Google Chrome — Privoxy — Корпоративный Proxy

Привет всем. =) Думаю этот маленький топик будет по душе всем любителям браузера Google Chrome.

Столкнулся на работе с проблемой. Поставил себе Google Chrome. Уже обрадовался, НО… но возникла проблема. Для настроек proxy «Хромированный» использует базовые настройки Windows. Соответственно как и положено прописал туда адрес proxy. Пробую… Ура! Все работает… для внешних адресов. Но поскольку я разработчик мне важно было иметь возможность работать как с внешними так и с локальными хостами.

Тут напрашивается опция, называемая в настройках как «исключения». Вбиваю сюда адреса, которые не идут через proxy… и тут загвоздка. «Хромированный» отказался принимать их за локальные. ((

Я нашел такое решение… поставил себе Privoxy 3.0.10… и настроил его так:

в main configuration (config.txt) вписал:

forward / адрес прокси: порт #перенаправляем все запросы на прокси
forward *.mine 127.0.0.1:80 #а вот локальные на localhost

тут все хорошо… но у меня корпоративная прокся и мне нужно авторизоваться… для этого я беру base64 от строки вида login:password получаю такое значение:

Z2stdHVsYVxzdGF2c2tpeV9rdjpsZGlzb3VyZQ==

далее захожу в default actions и ищу строки такого вида:

{ \
+hide-forwarded-for-headers \
+hide-from-header{block} \
+set-image-blocker{pattern} \
}
/ # Match all URLs

вот тут добавляю свой заголовок для прокси и получаю вот такую запись:

{ \
+hide-forwarded-for-headers \
+hide-from-header{block} \
+set-image-blocker{pattern} \
+add-header{Proxy-Authorization: Basic Z2stdHVsYVxzdGF2c2tpeV9rdjpsZGlzb3VyZQ==} \
}
/ # Match all URLs

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

пробуем =) вуаля… все работает.

по крайней мере у меня точно =)

думаю кому нибудь топик пригодился =)

Инициализация переменных

Провёл очень интересный эксперимент, взял два языка программирование С и Java и написал простенькие программы:

С:
#include <stdio.h>

int _tmain(int argc, _TCHAR* argv[])
{
int a;
char b;
bool c;
float d;

printf("%d \n",a);
printf("%c \n",b);
if (c==true)
{
printf(«bool=true\n»);
}
else
{
printf(«bool=false\n»);
}
printf("%l \n",d);

return 0;
}

Java:

public class Main {

public static void main(String[] args) {

boolean a;
int b;
char c;
float d;
System.out.println(a);
System.out.println(b);
System.out.println©;
System.out.println(d);

}
}

Суть этих программ, проверить, что будет показывать, если я не инициализирую переменные. Старый добрый С разочаровал, он начал показывать разную гадость. Интересно, что по умолчание в булевском типе переменная с была обьявлена как true. А тип float вообще не вывел… Что ж показала Java? Ошибки! Она требовала, чтобы мы инициализировали переменные.

Мораль это басни такова: инициализируйте переменные :)

p.s.
C — Microsoft Visual C++ 2008 Express Edition
Java — NetBeans IDE 6.1

Концентратор информации

Многие может и не встречали, но есть такой способ передачи информации через специализированный софт, называемый Концентратором информации (далее КИ). Вот хочу пару слов, скажем так вводную о его применении и принцыпе работы…
пдробнее

Эффекты во Flash на примере создания огня

Эффекты во Flash на примере создания огня.

Рано или поздно, к этому моменту приходит любой разработчик под Flash, не важно, программист ли вы, аниматор или веб-дизайнер. Как сделать тот или иной эффект? То ли незнание, то ли природная лень вынуждает многих товарищей создавать такие отвратительные вещи, при взгляде на которые хочется немедленно закрыть браузер и больше никогда не заходить на ту страничку. А ведь сделать красиво не так уж и сложно! Существует три основных способа, которые должен знать каждый.

1) Самое очевидное решение — векторная анимация. Минус такого подхода очевиден: потребуется довольно много времени, чтобы красиво анимировать детальные изменения эффектов (в нашем случае, языки пламени). Двухкадровое изменение, конечно, не устроит. Мы же хорошие флэшеры, не правда ли? :) Нарисуем хотя бы 6 последовательных кадров горящего пламени, установив в качестве частоты приличные для плавной анимации 24 fps. Рядом для примера разместим тот же самый Movie Clip, с увеличенным в два раза количеством кадров (не ключевых). То есть мы фактически получим тот же эффект на скорости 12 fps.

Первый костер – слишком медленно, да и его частота не подошла бы для анимации остальной части проекта. Стандартные 12 fps — это очень мало для качественной анимации большинства объектов.

Второй костер горит слишком быстро, дергано. Если увеличить количество ключевых кадров хотя бы в два раза, получится уже вполне приятный и плавный огонь, но временные затраты с каждым кадром растут в геометрической прогрессии. Шурик, вы – профессионал? Шурик, это не наши методы. Конечно, здесь есть свои оговорки. Например, если к стилистике мультфильма подходит только векторный, «мультяшный» огонь, то деваться некуда, но в остальных случаях логичнее будет обратить внимание на другие способы создания огня.

2) Битмапный метод. Суть этого способа сводится к тому, что эффект создается в какой-нибудь серьезной программе вроде Adobe After Effects или particleIllusion, а потом экспортируется в качестве последовательности битмап-изображений или (о, ужас!) видео. Последним особенно любят баловаться иностранные коллеги, даром, что у них с шириной канала дела обстоят гораздо лучше, чем в России и СНГ. Здесь есть много плюсов: простота и скорость создания нужного эффекта, многовариантность в пару кликов, низкая нагрузка на процессор в процессе воспроизведения (особенно актуально в играх, когда кремниевый мозг и без того сильно занят скриптами). Из минусов можно отметить разве что больший (но зачастую не очень большой!) объем скомпилированного файла, чем в других методах и некоторую размытость изображения. Все-таки сглаженный вектор выглядит более достойно. Красивый огонь, кстати, попадается редко. Например, удачное сочетание статичной картинки и анимированного битмапа можно посмотреть здесь: saizenmedia.com/gracia
Жаль у меня не осталось хорошего примера в отдельном файле

3) И, наконец, страшная, ужасная, вгоняющая в священный трепет новичков, программная реализация! Идеально подходит для игр (во многих случаях просто невозможно использовать зацикленный клип), но можно использовать и в анимационных клипах, только не очень удобно. Судите сами – весь эффект будет виден только при компиляции, редактировать скрипты приходится вслепую. Зато рисовать для этого нужно по минимуму — буквально один Movie Clip, как частичку эффекта. Она будет многократно дублироваться, а ее поведение — задаваться физическими законами. В сети много подобных примеров, но я хочу продемонстрировать вам настоящее ниндзитсу в ActionScript-кодинге. Каких-то 23 строчки AS3-кода и один нарисованный градиент творят настоящие чудеса.


Вот код:

import flash.filters.*;
import flash.display.*;
var my_btm = new BitmapData(200, 200, true, 0xFFFFFF);
gradient_mc.start_offset = [];
gradient_mc.finish_offset = [];
var c = 0;
while (c<3)>
gradient_mc.start_offset[c] = {x:0, y:0};
gradient_mc.finish_offset[c] = {x:Math.random()*4-2, y:Math.random()*3+4};
c++;
}
gradient_mc.onEnterFrame = function() {
var c = 0;
while (c<3)>
this.start_offset[c].x += this.finish_offset[c].x;
this.start_offset[c].y += this.finish_offset[c].y;
c++;
}
my_btm.perlinNoise(15, 50, 3, 5, false, false, 1, true, this.start_offset);
var dmf = new DisplacementMapFilter(my_btm, new flash.geom.Point(0, 0), 1, 1, 10, 200, «clamp»);
this.filters = [dmf];
};

— Какой способ выбрать, решайте сами для каждого конкретного проекта. Я описал основные области применения каждого способа, их плюсы и минусы. Надеюсь, ваши работы станут еще немного красивее ;) Не бойтесь экспериментировать и удачи!

Антивирусная утилита против вирусов типа Autorun

На выходных накнопал программку для защиты флэшэк, от вирусов типа Авторан. Эта утилита чисто для защиты флэш. Следуйщая утилита будет, как для защиты флэш, так и для защиты ПК от вирусов этого типа. Утилиту вылаживаю в бат файле. Фишка заключается в том что когда вы подключите флэшку к зараженному компьютеру, вирус копируется на флэшку, как и раньше :) а вот файл который его запускает нет ( Auturun.inf) Это говорит о том, что когда вы, уже свою флэш подключаете к чистому компьютеру, то он не заражается, так как файл который запускает вирус при вставке флэш отсутствует. Вот так он беднягя (вирус) и будет жить на флэшке пока его не увидит ближайший антивирус. :) Зачастую, вирусы этого типа скрытые, в 99% поэтому не бойтесь что нечаянно нажмете на него :) Антивирусную утилиту скачать здесь www.rapidshare.ru/912043 Прошу Вас протестировать мою утилиту. Прошу Вас посетить мою страничку посвященную Антивирусной безопастности.

antivirusfagot.blogspot.com

Учимся говорить по русски.

Наверняка, те кто заинтересовался созданием приложений с использованием XNA, столкнулись с проблемой вывода текста в кириллице. Дело в том, что XNA — инструмент, а не набор готовых средств и многие решения придется реализовывать самому. Как писалось в предыдущей статье XNA/XNA 3.0 – Быстрый старт для профи есть возможность создания своего контент процессора, чем мы и займемся.

Для начала создадим новый проект WindowsGameN. Думаю в картинках нет смысла показывать ).
Далее в дереве проекта добавим выбираем папку Content и добавляем новый объект SpriteFont1.spritefont, его можно открыть любым текстовым редакторов и внести изменения типа размер шрифта, наклон,… с этим разберетесь сами, ничего сложного простой xml файл.
Теперь создаем экземпляр класса SpriteFont на основе нашего SpriteFont1
Читать дальше →

Постраничная навигация и вывод новостей в php

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

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

Смена стилей веб страницы «на лету»

Здравствуйте, уважаемые хабраграждане!

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

Одна строка JavaScript кода:
function changeStyle() { document.getElementById(‘style’).href = ‘new_style.css’ }

и строке подключения стилей зададим идентификатор:
/>

Теперь в любом месте документа можно задать вызов смена стилей.
Например как-нибудь вот так:

Изменить стиль



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

Буду рад, если кто-нибудь возьмет на заметку при разработке в своем проекте.