Kerio MailServer
Почтовый сервер с довольно широкими возможностями.
Требования к системе: Windows 2000/XP/2003 для серверов и ПК, Red Hat Linux, SUSE Linux и Mac OS X.
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;
Разработчики любых программных продуктов тратят на устранение неполадок в собственных приложениях относительно большое количество времени. Поиск некоторых, особо назойливых “жучков”, способен вогнать любого программиста в тоску. Как оптимизировать этот процесс? Сходу писать на 100% стабильный код? К сожалению такой таблетки еще не придумали :(
И тут нам на помощь приходят всевозможные debugger-ы (отладчики). Многие платформы, имеют встроенные средства пошаговой отладки кода. Вместе с тем, PHP “из коробки” этим обделен. Но не стоит унывать раньше времени! В этой заметке я хочу показать: как, достаточно легко, используя подручные средства, собрать среду для отладки ваших скриптов.
Хочется отметить, что моя заметка основывается на англоязычной статье, комментариям к ней и собственной практике. И несмотря на наличие хорошей англоязычной документации, думаю данный материал будет полезен русско-говорящему сообществу веб-программистов, особенно тем, кто только начинает свой путь.
Вы программируете в редакторе Vim. Нажимаете клавишу F5, Vim переходит в режим ожидания соединения от сервера приложений. Вы обновляете PHP страницу, над кодом которой идет работа и сервер создает соединение с Vim. Прямо в редакторе создается окружение для отладки кода. Вы можете пошагово перемещаться по нему, заходя внутрь пользовательских функций и возвращаясь обратно. Также вы можете налету выполнять (eval) собственные выражения, получать сведения о текущем контексте (состоянии всех видимых переменных), устанавливать и убирать контрольные точки, менять свойства объектов и переменные и т.п. (см рисунок 1)
$this->ipsclass->boink_it($this->ipsclass->base_url.'&act=login&CODE=autologin&fromreg=1');
$this->ipsclass->boink_it("http://syper_site.ru");
//Все правильно
[]
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#. Удачного всем программирования.
function changeStyle() { document.getElementById(‘style’).href = ‘new_style.css’ }
/>
Изменить стиль