вторник, 27 декабря 2011 г.

FarColorer 1.0.3.6

По просьбам пользователей, версию для Far 2 не забрасываю. Буду исправлять ошибки. Остальные плюшки только в версии под Far 3.

Colorer 1.0.3.6 для Far 2

Изменения для Far 2

  1. исправлен ввод символов _ и ~ в outline
  2. при указании своего catalog.xml проверка наличия rgb стилей проверяется только при включенном режиме TrueMod
  3. при смене типа файла не очищались списки функций и ошибок.
  4. если в сохраненных настройках установлен отсутствующий на момент загрузки цветовой стиль, то вначале пытаемся загрузить стиль по умолчанию (default), затем первый в списке.
  5. ошибки при работе с меню выбора типа файла
  6. переменные окружения в путях до hrc файлов
  7. разные мелкие ошибки и оптимизации
Colorer 1.0.3.6 для Far 3

Изменения для Far 3
  1. исправлен ввод символов _ и ~ в outline
  2. при указании своего catalog.xml проверка наличия rgb стилей проверяется только при включенном режиме TrueMod
В следующей версии заставлю плагин работать под Win 2000. Надо только добраться до тестовой зоны. Решение у Far Team уже есть.

воскресенье, 25 декабря 2011 г.

FarColorer 1.0.3.5 для Far3

К выходу первых публичных сборок Far 3 адаптированная версия плагина.
Colorer 1.0.3.5 для Far 3

Изменения
  1. Плагин адаптирован под Far3 build 2328 API
  2. Настройки сохраняются и читаются через Far API
  3. Плагин именуется FarColorer
  4. ошибки при работе с меню выбора типа файла
  5. работа с TrueMod Far3
  6. переменные окружения в путях до hrc файлов
  7. "крест" работает на темных схемах и в TrueMod
  8. на отображение "креста" не влияет присутствие символа табуляции.
  9. при отображении в редакторе символов пробела/табуляции им задавался разный цвет
  10. если в сохраненных настройках установлен отсутсвующий на момент загрузки цветовой стиль, то вначале пытаемся загрузить стиль поумолчани (default), атем первый в списке.
  11. при смене типа файла не очищались списки функций и ошибок.

понедельник, 4 июля 2011 г.

FarColorer 1.0.3.4

Colorer 1.0.3.4 для Far2
Colorer 1.0.3.4 для Far 3.0.2095

Изменения
  1. откат "на некоторых схемах в far передавалась лишняя цветовая зона" - для схем типа php приводило к ошибкам раскраски 
  2. новое меню выбора типа файлов. теперь можно задавать горячие клавиши, список "Избранные".
  3.  для параметра FullBack и всех системных параметров схем в списке выбора
    значений отображались неверные значения для выбора.

четверг, 30 июня 2011 г.

FarColorer 1.0.3.3



Colorer 1.0.3.2 для Far2
Colorer 1.0.3.2 для Far 3.0.2085

Изменения
  1. ошибка чтения настроек при заданном пути до catalog.xml
Изменения схем
Fixed:
- Pascal - write characters with codes 0-31 in the format ^@, ^A, ^B (Igor Yudincev)
- file type detection

среда, 29 июня 2011 г.

FarColorer 1.0.3.2


Нова версия плагина для Far.  На этот раз добавлена очень требуемая возможность - замена стандартных prototype файлов на свои, с тем же именем. Например, теперь можно добавить свой прототип для языка C , создав его на основе стандартного, и он полностью заменит входящий в стандартный пакет прототип.
Ну и для тестеров еще не вышедшего Far3  версия под него.

Colorer 1.0.3.2 для Far2
Colorer 1.0.3.2 для Far 3.0.2085

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

Изменения схем
Fixed:
- add missing words for c, cpp, jscript, qmake, sql, vbscript, email (from HaRT)
- add C function outlining for C# (from Vladimir Panteleev)
- major improvements to D syntax file (from Vladimir Panteleev)
- minor fix proto.hrc (from Vladimir Panteleev)
- Pascal - write characters with codes 0-31 in the format ^@, ^A, ^B (Igor Yudincev)
- far.hrc - add support verbatim string; new functions
- c.hrc - shows #include and #define in the outline list is closed by key
- csharp.hrc - add support verbatim string;

    четверг, 16 июня 2011 г.

    Хранение backup`ов

    В мае, после поломки одного из компьютеров,  озаботился проблемой резервного хранения важных данных. Компьютеру своему доверять не стоит, сегодня работает, завтра нет. сегодня он есть , а завтра (не дай бог) сперли/потерял. Флешки и переносные или съемные жесткие тоже не вариант, причина что и выше. Запись на диски  - опять все что выше, плюс их нужно хранить отдельно от кипы других одноразовых болванок. Но вышеприведенные методы не исключаются как дополнительные.  Нужно что то более надежное.
    Сейчас стали популярно хранить backup и просто нужные файлы в сети, в сервисах на подобие DropBox. Оно удобно - везде, где есть интернет, ты можешь получить доступ к хранилищу; надежность хранения на таких сервисах выше, чем на домашнем компьютере (raid, backup и т.п.) Оно конечно не исключает вероятность хорошего такого сбоя, когда все ёк.  Но все же в разы надежнее. Плюс программки , которые делают резервные копии и закачивают их на сервер в сети. Минусы у них тоже есть. бесплано дается ограниченное место. нарастить можно но платно (суммы может и не очень большие, но за небольшой перерасход бесплатного места это много). твои данные могут еще и просматривать (привет dropbox). и многое другое.
    А еще  сейчас очень популярна темя облачных вычислений. (Облака, Белогривые лошадки. Облака, Что вы мчитесь без оглядки? (с)Сергей Козлов). Ресурсы на них стоят сравнительно недорого. (Кстати, онлайн хранилища зачастую используют как раз их. ) Можно выбрать оптимальные для себя настройки по ресурсам.
    Для себя, как наверное уже догадались, выбрал онлайн хранилище в облаке. Начитавшись хабрахабры выбрал облако от Selectel. Создал себе сервер с конфигурацией Mini (32) (Debian), оперативки в минимум (зачем нам она ? ), жесткий пока на 5 гб. И понеслась. Залил статичные старые данные , которые не предвидится изменять по ssh (надо бы придумать систему какую-нибудь хитрую по backup, но опять же надо ли ? ). и теперь храню их там. По деньгам выходит очень недорого. За 40 дней использования, в которые входила заливка данных (а это отдельные ресурсы сети) потратилось 92,13 рубля.
    Машинное время 1,63 руб. / 1.630 час.
    Потребление памяти 62,44 руб. / 125.683 ГБ * час.
    Диск: запросов на чтение 0,23 руб. / 0.069 млн. шт.
    Диск: запросов на запись 2,01 руб. / 0.603 млн. шт.
    Диск: прочитанный объём 0,16 руб. / 1.600 ГБ
    Диск: записанный объём 0,53 руб. / 5.300 ГБ
    Диск: хранение 24,53 руб. / 4.909 ТБ * час
    Сеть: получено 0,52 руб. / 2.600 ГБ
    Сеть: отправлено 0,08 руб. / 0.080 ГБ
    Итого 92,13 руб.
    Так это еще с учетом , что машина была все время включена. Если данные заливаются руками (не скрипты), да и редко, то можно выключать машину. А это исключает оплату за оперативку, только за хранение.  В итоге очень даже неплохое и недорогое решение по хранению файлов. Нарастить текущие 5 гб можно из админки, правда потребуется подшаманить после этого в ос. на крайняк можно слить данные к себе, удалить машину, создать новую с уже новым размером пространства, и залить обратно.

    среда, 15 июня 2011 г.

    Переезд на blogspot

    В целях оптимизации расходов, и пропавшей необходимости в vds перенес блог на Blogspot.
    Процесс переезда с WordPress на Blogspot неплохо описан у Umputun`а . По нему собственно и делал.

    Если что не так отображается, пишите, будем править. 

    суббота, 19 марта 2011 г.

    FarColorer для Far 1.75 и Far 2

    Поборов рекурсию и падения, можно выпустить новую версию плагина. Да и не просто для Far2 , а и еще для Far 1.75. Судя по сайту проекта, спрос на 1.75 большой.

    Эти версии особенные еще и тем, что скорее всего они последние в своих линейках. Что-то дорабатывать для Far 1.75 желания нет, разве что баги поправить.  А Far2 умер в непотребном состоянии, надо сразу на 3 версию переходить.

    Да и с Colorer надо что то делать. Хотя бы нумерацию версий привести к какому то порядку. Что-то типа   первая цифра - это версия фара, а остальное как получится. Бардак иначе получается.

    Ну хватит слов, перейдем к делу.

    Изменения схем
    New:
    - Python scheme completely rewritten (anatoly techtonik)
    - add support Expect
    Fixed:
    - remove .cgi from Perl extensions, use first line for detection
    - fix firstline of Python prototype to allow spaces in shebang
    - fix comments in Tcl ( Nikita Retunsky)
    - c# add #region/#endregion , get, set, yield

    Colorer 1.0.3.1 для Far2

    Изменения
    1. Работа с очень длинными строками. Ранее падали или недокрашивали длинные строки.
      Если нужно ограничить длину строки для раскраски используйте параметр maxlinelength в настройках схем.
    2. оптимизации и борьба с утечками в библиотеке.

    Colorer 1.0.2.2 для Far 1.75 x86
    Colorer 1.0.2.2 для Far 1.75 x64

    Изменения
    1. Работа с очень длинными строками. Ранее падали или недокрашивали длинные строки.
      Если нужно ограничить длину строки для раскраски используйте параметр maxlinelength в proto.hrc.
    2. оптимизации и борьба с утечками в библиотеке.
    3. увеличена скорость работы за счет хака far
    4. убрана не используемая опция "Время до показа диалога отмены"
    5. меню "Список функций" нормально вводятся в фильтр клавиши ":;-_~" , цифры с цифровой клавиатуры
    6. исправлено отображение неверного числа схем в меню выбора схемы
    7. исправлена ошибка работы "креста" при выборе типа раскраски
    8. ошибка работы с диалогом настроек плагина в 64-битной версии, приводящая к падению Far
    9. всякие мелочи

    Опыт отказа от рекурсии. Happy end

    Как оказалось, я был не прав по поводу того, что устранить потерю скорости не получится. При более внимательном рассмотрении увидел, что переменных класса CRegExp довольно таки много, а не одна. Соответственно им создавался отдельный стек. А это бага .... Ну ты лошара (с).

    В общем после исправления этого момента потеря производительности стала незначительной. Так что Happy End

    Попробовать изменения можно будет в новой версии плагина FarColorer 1.0.3.1

    четверг, 17 марта 2011 г.

    Опыт отказа от рекурсии

    В интернете практически не освещена тема отказа от рекурсии в алгоритмах. Много статей и книг где рассказывается, что такое рекурсия, как ей пользоваться. Но вот как от неё избавится - почти ничего нет.

    Итак, рекурсия - это вызов функцией самой себя. Всем известен алгоритм вычисления факториала, классика книг. Все красиво и элегантно, хоть циклом кажется и проще. А уж всевозможные алгоритмы анализа строки и работы с регулярными выражениями. Казалось бы, используй и радуйся.
    Но не все так просто. Глубина рекурсии (как много раз функция может вызвать саму себя ) ограничена. Ограничена размером стека. Дело в том, что перед вызовом функцией самой себя, нужно сохранить значения всех локальных переменных, чтобы ими можно было воспользоваться после возвращения. А сохраняется это все в стек. И вот пока в стеке есть место, мы можем углубляться в рекурсию. Все глубже , глубже. Пока не выскочит ошибка - Stack overflow. И все , тушите свет.
    Стандартная величина стека примерно 2 мб (для windows программ). Так давайте увеличим размер стека опциями компилятора, делов то. А на сколько увеличить, так чтобы было и не много и не мало? а если запросы растут со временем , постоянно перекомпилировать? А если у вас библиотека, которая использует стек вызвавшей её программы ? И вот тут то и понимаешь, что это не наш метод. Надо как то избавляться от рекурсии.
    Вот с этим я и столкнулся в поддерживаемой мной библиотеке Colorer. Алгоритм разбора строки по регулярному выражению был рекурсивный. Так же был красив и пах. Но на длинных строках любил падать. Дай строку в 3000 символов и все, приехали. Надо было что то делать.
    Единственным методом ликвидации рекурсии, который я нашел , это избавление от хвостовой рекурсии. Суть его в следующем - если рекурсивный вызов идет последним в функции, то функцию можно заменить на цикл. Факториал как раз является примером для этого.
    Но у меня рекурсивных вызовов было очень много в функции. Часть можно было развернуть в цикл, но это совсем малая часть. Да и кстати, код был построен так, что в зависимости от результата вызова (функция возвращала bool значение) функция могла завершится или продолжить работу далее. А сама функция была циклом внутри которого switch.
    Вот тут то приходит единственное оставшееся решение - а почему бы нам не воспроизвести рекурсивный вызов с помощью цикла и сохранения параметров? т.е. сделать это все вместо компилятора. Что нам для этого нужно:
    1. список локальных переменных, которые нужно сохранить.
    2. динамический список типа стека, в который мы будем сохранять значения локальных переменных, и извлекать от туда
    3. после-рекурсионные действия , или action (не знаю как назвать это лучше)
    4. цикл 
    В начале остановимся на action. Каждый рекурсионный вызов в зависимости от результат приводил к return true, или return false, или return результат_функции, или к продолжению работы функции многими строками кода. Т.к. мы избавляемся от рекурсии в пользу цикла, то этот код нужно выполнить после завершения цикла для этого рекурсионного вызова. Т.е. когда цикл придет к return ... Потому все такие ситуации выделяем в один switch, присваивая  им свой код action.

    Создаем функцию, которая сохраняет локальные переменные,а на их место задает новые (если есть параметры при вызове рекурсии). Как их сохранять, это отдельная песня. У меня было их мало, и я передавал их по ссылке.  Помимо переменных нужно сохранить и действие (action) которое нужно сделать в зависимости от результат функции. Эта функция заменяет нам рекурсионный вызов - сохраняем текущие значения, заменяем их на новые.  После сохранения мы должны вернутся в начало цикла, как будто мы только зашли в функцию.
    Далее, создаем функцию проверки нашего стека на наличие там записей и извлечения их из него. Она нам потребуется для замены строк return чего_то_там. Передаем в неё это чего_то_там. И если стек пустой, возвращаем action = чего_то_там, иначе извлекаем из стека данные, обновляем локальные переменные и возвращаем action в зависимости от чего_то_там. По этому action выполняем код.
    Ну а дальше это все объединяем в один цикл и работаем.

    В общем описание получилось очень сумбурное, малопонятное.  Но объяснить тяжело. Проще показать результат. Правилась функция CRegExp::lowParse. До изменений файлы были следующими cregexp.cpp, cregexp.h. После применения данного метода cregexp.cpp, cregexp.h .

    В ходе испытаний, подтвердилась стабильная работа на длинных строках. Код работает корректно. Но немного упала скорость. На тестовых файлах скорость работы упала на 1 секунду (на моем компьютере). После анализа в профайлере, выяснилось , что узким местом стала работа с памятью в нашем стеке. Оптимизированный вариант приведен выше, как финальный. В нем падение скорости составляет уже примерно 0.4 секунды. Но это уже не устранимо. Зато мы не падаем на рекурсии.

    В новой версии FarColorer будет применен этот патч. И проблема, зафиксированная во многих баг-репортах , наконец таки уйдет.

    Happy end ?

    суббота, 26 февраля 2011 г.

    Добрым словом по 3g Мегафона

    Уже больше половины года пользуюсь 3g модемом Мегафона. Интернет на работе по талонам, на определенные сайты только можно ходить. Ну и в общем подключил безлимитку на 512 кб. Пользуюсь, работает и работает.

    А в последние месяцы приходится часто работать у заказчика в офисе. Они, редиски, то вообще не могут предоставить интернет, то работает все, кроме удаленного доступа в "нашу" сеть. И вот тут то меня удивил модем то, по 2 недели подряд в рабочее время через RDP по модему в нашу сеть. И ведь нормально работает. Скорости хватает,  вполне комфортно работается через RDP. В общем выручает сильно.
    Тут еще обратил внимание - ни одного обрыва за 4 суток, пока сам не оборвал связь. Для сотовой связи очень удивительно. Бывают конечно деньки, когда обрывы идут, но от сотовой связи такое ожидаемо. По крайней мере для меня.