среда, 28 апреля 2010 г.
вторник, 27 апреля 2010 г.
Менеджер запущенных приложений 1С
Иногда возникает ситуация, когда необходимо завершить работу какого-либо процесса 1С, но, если пользоваться стандартным диспетчером задач, то есть риск убить совсем не то.
Решить эту проблему призван Task manager 1C.
Программа показывает с какой базой работает процесс, также отображает список файлов, используемых процессом, список подгруженных модулей (dll) и заголовок окна программы.
Пути не определяются для серверных баз 8.х.
При работе программы используется приложение Handle, разработчик Mark Russinovich., поэтому при первом запуске необходимо согласится с условиями его использования, иначе определение путей к базам данных будет невозможным.
Для работы необходим установленный Microsoft .NET Framework 3.5.
Ссылка на Инфостарт
Решить эту проблему призван Task manager 1C.
Программа показывает с какой базой работает процесс, также отображает список файлов, используемых процессом, список подгруженных модулей (dll) и заголовок окна программы.
Пути не определяются для серверных баз 8.х.
При работе программы используется приложение Handle, разработчик Mark Russinovich., поэтому при первом запуске необходимо согласится с условиями его использования, иначе определение путей к базам данных будет невозможным.
Для работы необходим установленный Microsoft .NET Framework 3.5.
Ссылка на Инфостарт
понедельник, 26 апреля 2010 г.
LaTeX в блоге
На сайте советы.блогспот.ком нашел хорошую статью о том, как можно вставлять формулы в формате LaTeX на HTML-страницу. Для сообщений blogspot, как вы видите, это тоже подходит.
Вот так, например, работает первый способ:
Вот так, например, работает первый способ:
(a + b)^2 = a^2 + 2ab + b^2
Всё, что может понадобиться
Недавно я начал преподавать программирование. На самом деле говоря "преподавать программирование" это я так шучу. Слишком уж громко и пафосно это звучит. На самом деле просто я решил поделиться своими знаниями с одним человеком.
Вначале я подумал:
- Черт возьми! Программирование настолько огромная и сложная область знания, что совершенно непонятно с чего начать. Как же быть? Может, быть стоит начинать с двоичной системы (и разных систем счисления), ведь это основа работы компьютера (есть сигнал/нет сигнала). Или, может быть нужно внимательно рассмотреть аппаратную часть, познакомиться с принципом работы процессора? А возможно это должен быть какой-то язык и его синтаксис, чтобы можно было сразу приводить примеры и учить базовые алгоритмы? А, может быть вообще взять какой-нибудь визуальный редактор вроде Delphi, так как с помощью его можно быстро создавать маленькие, но полностью функциональные приложения?
Отчаявшись я сделал самый простой выбор, и решил начать с того с чего начинал я сам: с базового представлении об алгоритме и самых банальных блок-схем.
Через пару часов, когда мы разобрались как построить блок-схему, как представить задачу в виде последовательности действий и условий, как детализировать, я сказал:
- Пожалуй, это все, что может тебе пригодиться. На самом деле в этом и заключается все программирование и теперь у тебя есть все, что нужно.
И только на следующий день я понял, что в этом и был ответ на мой вопрос о том, что самое главноев танке в программировании. Ни синтаксис языка, ни понимание каких-то особенных вещей и технологий, ни двоичная система не имеют никакого значения, когда нет умения представить задачу и решение как алгоритм, как последовательность действий.
Хорошими друзьями алгоритма я бы назвал глубокое понимание парадигмы языка на котором пишешь и гибкий ум, позволяющий "догадываться" о новых вещах. Вот, пожалуй и все.
P.S.: Алгоритмы алгоритмами, но язык нам все-таки понадобится. И это будет C++ несмотря на то, что я сам его почти не знаю. Мы уже купили толстую книгу с названием "Базовый курс" и теперь будем учиться вместе.
Вначале я подумал:
- Черт возьми! Программирование настолько огромная и сложная область знания, что совершенно непонятно с чего начать. Как же быть? Может, быть стоит начинать с двоичной системы (и разных систем счисления), ведь это основа работы компьютера (есть сигнал/нет сигнала). Или, может быть нужно внимательно рассмотреть аппаратную часть, познакомиться с принципом работы процессора? А возможно это должен быть какой-то язык и его синтаксис, чтобы можно было сразу приводить примеры и учить базовые алгоритмы? А, может быть вообще взять какой-нибудь визуальный редактор вроде Delphi, так как с помощью его можно быстро создавать маленькие, но полностью функциональные приложения?
Отчаявшись я сделал самый простой выбор, и решил начать с того с чего начинал я сам: с базового представлении об алгоритме и самых банальных блок-схем.
Через пару часов, когда мы разобрались как построить блок-схему, как представить задачу в виде последовательности действий и условий, как детализировать, я сказал:
- Пожалуй, это все, что может тебе пригодиться. На самом деле в этом и заключается все программирование и теперь у тебя есть все, что нужно.
И только на следующий день я понял, что в этом и был ответ на мой вопрос о том, что самое главное
Хорошими друзьями алгоритма я бы назвал глубокое понимание парадигмы языка на котором пишешь и гибкий ум, позволяющий "догадываться" о новых вещах. Вот, пожалуй и все.
P.S.: Алгоритмы алгоритмами, но язык нам все-таки понадобится. И это будет C++ несмотря на то, что я сам его почти не знаю. Мы уже купили толстую книгу с названием "Базовый курс" и теперь будем учиться вместе.
пятница, 23 апреля 2010 г.
Виртуализация сервера приложений 1С с аппаратным ключом
Интересная статья на ITLand (от рассылки с которого я никак не могу отписаться!) о виртуализации и HASP.
http://itband.ru/2010/04/hyper-v1c/
http://itband.ru/2010/04/hyper-v1c/
четверг, 22 апреля 2010 г.
Microsoft Visual Studio 2010 и TFS 2010
В Киеве прошел запуск Visual Studio 2010. Ну, что можно сказать... За что я люблю Microsoft-овские сборища, так это за то, что там хорошо кормят и кофе бесплатно. ;-)
Это, как вы понимаете, шутка. А теперь серьезно.
Лично я был на серии докладов о VS и TFS (большой зал) и меня очень удивило, насколько сама Microsoft и ее продукты agile-ready. Надеюсь, они скоро выложат видео-запись, а пока скажу, что в самом начале серии докладов они сказали: "Сегодня не будет показано ни одного слайда. Мы прямо перед вами "в живую" отработаем один спринт (второй в проекте, если быть точным)". Обещание было сдержано - слайдов не было. Они действительно отработали одну scrum-итерацию распределив между собой роли (заказчик, скрам-мастер, pm, архитектор, разработчик, qa), полноценно от UserStory's до тестирования, демо и ретроспективы. Конечно, было много "домашних заготовок", вся инфраструктура уже была развернута и задачи были не сложными, но все же это было интересно и очень удивительно для меня. Да, глюки тоже были. ;-)
О самой VS. Что можно сказать. Это монстр. Нет. Это МОНСТР! Оно, как вы догадываетесь, интегрируется со всем чем можно и полноценно использует развернутую ms-инфраструктуру. О разных новых фичах можно рассказывать долго, но лучше вы почитайте обзоры, а я расскажу о том, что мне особенно понравилось.
Первое - это архитектурный контроль. Архитектор может построить некую диаграмму объектов проекта, где в качестве объектов могут выступать классы, модули, библиотеки и пр. И установить между ними связи. При вызове функции архитектурного контроля VS проверяет насколько существующий код соответствует диаграмме. Например, если у вас есть UI, который обращается к классу DBIntreface, который в свою очередь должен работать с БД, то построив диаграмму связей вы сразу же можете обнаружить где разработчик напрямую из UI дергает БД в обход DBIntreface, и указать ему на ошибку.
Второе, что очень запомнилось это "Центр тестирования". Интересный продукт, позволяющий проводить автоматическое и ручное тестирование приложений. Удобные инструменты, плюс опять-таки интеграция. Тест-кейсы с привязкой к юерз-сториз и все-такое.
Это была положительная сторона. О слабых моментах и негативе писать не буду, потому что, те, кто реально будет работать с Visual Studio 2010 найдут их сами, а общие о том, что "продукты MS слишком "толстые", что "нормально интегрируются только с другими продуктами MS" и т.д. и так все знают.
Конечно, доклады от Microsoft теперь все меньше похожи на доклады для технических специалистов, а скорее напоминают театрализованное представление, но в целом от продукта впечатление приятное, а главное, что я теперь как-то глубже и нагляднее представляю себе scrum. Вот уж чего не ожидал! =)
Это, как вы понимаете, шутка. А теперь серьезно.
Лично я был на серии докладов о VS и TFS (большой зал) и меня очень удивило, насколько сама Microsoft и ее продукты agile-ready. Надеюсь, они скоро выложат видео-запись, а пока скажу, что в самом начале серии докладов они сказали: "Сегодня не будет показано ни одного слайда. Мы прямо перед вами "в живую" отработаем один спринт (второй в проекте, если быть точным)". Обещание было сдержано - слайдов не было. Они действительно отработали одну scrum-итерацию распределив между собой роли (заказчик, скрам-мастер, pm, архитектор, разработчик, qa), полноценно от UserStory's до тестирования, демо и ретроспективы. Конечно, было много "домашних заготовок", вся инфраструктура уже была развернута и задачи были не сложными, но все же это было интересно и очень удивительно для меня. Да, глюки тоже были. ;-)
О самой VS. Что можно сказать. Это монстр. Нет. Это МОНСТР! Оно, как вы догадываетесь, интегрируется со всем чем можно и полноценно использует развернутую ms-инфраструктуру. О разных новых фичах можно рассказывать долго, но лучше вы почитайте обзоры, а я расскажу о том, что мне особенно понравилось.
Первое - это архитектурный контроль. Архитектор может построить некую диаграмму объектов проекта, где в качестве объектов могут выступать классы, модули, библиотеки и пр. И установить между ними связи. При вызове функции архитектурного контроля VS проверяет насколько существующий код соответствует диаграмме. Например, если у вас есть UI, который обращается к классу DBIntreface, который в свою очередь должен работать с БД, то построив диаграмму связей вы сразу же можете обнаружить где разработчик напрямую из UI дергает БД в обход DBIntreface, и указать ему на ошибку.
Второе, что очень запомнилось это "Центр тестирования". Интересный продукт, позволяющий проводить автоматическое и ручное тестирование приложений. Удобные инструменты, плюс опять-таки интеграция. Тест-кейсы с привязкой к юерз-сториз и все-такое.
Это была положительная сторона. О слабых моментах и негативе писать не буду, потому что, те, кто реально будет работать с Visual Studio 2010 найдут их сами, а общие о том, что "продукты MS слишком "толстые", что "нормально интегрируются только с другими продуктами MS" и т.д. и так все знают.
Конечно, доклады от Microsoft теперь все меньше похожи на доклады для технических специалистов, а скорее напоминают театрализованное представление, но в целом от продукта впечатление приятное, а главное, что я теперь как-то глубже и нагляднее представляю себе scrum. Вот уж чего не ожидал! =)
среда, 21 апреля 2010 г.
Волшебство n &= (n - 1);
Как всегда уважаемый Александр радует интересными вопросами. На этот раз это формализованное доказательство того, что следующая функция вернет количество единиц в числе переведенном в двоичную систему:
Т.е. фактически количество итераций цикла, равно количеству единичных (не нулевых) бит.
Хоть я и не математик, но попробуем внимательнее взглянуть на код...
int bitcount (unsigned int n) { int count = 0 ; while (n) { count++ ; n &= (n - 1) ; } return count ; }
Т.е. фактически количество итераций цикла, равно количеству единичных (не нулевых) бит.
Хоть я и не математик, но попробуем внимательнее взглянуть на код...
Выполнение цикла будет прервано когда n станет равным нулю. Я считаю что формула
n &= (n - 1);
вызванная в цикле, убирает из n единицы (в двоичном представлении) до тех пор пока их совсем не останется.
Попробую доказать.
Для начала рассмотрим операцию n-1. Что будет происходить с числом в двоичном представлении? При вычитании единицы с числом в двоичном виде произойдет следующее: первый с правого края единичный бит будет обнулен, а предшествующие ему нули инвертированы. Вот так:
xx...xx100...00 - 1 = xx...xx011...11
где x -произвольные биты в левой части числа.
Это можно доказать следующим образом (если это нужно). Любое число A можно представить в виде:
А = bx*2x+bx-1*2x-1+...+b1*21+b0*20
где x - порядок бита в двоичном представлении числа,
а bx - сам бит в позиции x.
Значит и единицу можно представить следующим образом:
1=(1*20)=(1*21-1*20)=(1*22-1*21-1*20)...
Предположим, что b0=1, тогда:
A - 1 = (bx*2x+bx-1*2x-1+...+b1*21+1*20) - (1*20) = (bx*2x+bx-1*2x-1+...+b1*21+0*20)
Т.е. мы видим, что на место b0 подставился ноль, т.е. первый единичный бит справа был обнулен. (желтым я подсветил части выражения, которые взаимоуничтожаются из за разности знаков)
Если же первый единичный бит справа это b1 то можно сделать другую подстановку:
A - 1 = (bx*2x+bx-1*2x-1+...+1*21+0*20) - (1*21-1*20) = (bx*2x+bx-1*2x-1+...+1*21+0*20) - 1*21 + 1*20 = (bx*2x+bx-1*2x-1+...+0*21+1*20+0*20) = (bx*2x+bx-1*2x-1+...+0*21+1*20)
Теперь в позиции b1 ноль, зато в позиции b0 - единица.
Для предположения, когда первый единичный бит это b2:
A - 1 = (bx*2x+bx-1*2x-1+...+1*22+0*21+0*20) - (1*22-1*21-1*20) = (bx*2x+bx-1*2x-1+...+1*22+0*21+0*20) - 1*22+1*21+1*20 = (bx*2x+bx-1*2x-1+...+0*22+1*21+1*20)
И так далее и тому подобное.
Не знаю, считаются ли мои корявые рассуждения доказательством у настоящих математиков, но отсюда во-всяком случае понятно что происходит: в битовом представлении числа самая правая единица превращается в ноль, а все остальное за ней превращается в единицы.
Следующая операция это побитовый И.
Что произойдет с числами А и B когда с ним будет произведена побитовая операция И, если мы знаем, что:
1. B = A - 1, а значит, что
2. До бита с номером Y эти числа совпадают.
3. Бит с номером Y - самая правая единица в числе A, за которым идут нули.
4. Сам бит с номером Y в числе A равен единице, а в B равен нулю и
5. далее в числе A все последующие символы равны нулю, а в B - единице.
Очевидно, что часть числа ДО бита с номером Y останется неизменной, так как a&a=a.
Бит с номером Y будет обнулен и так же будут обнулены все последующие за ним, так как там один из операндов равен нулю.
Т.е. мы видим, что в результате этой операции самый правый единичный бит в байте превратился в ноль.
Мы сможем повторять эту операцию и результат не будет равен нулю до тех пор, пока последний единичный бит не станет нулевым. Очевидно, что количество итераций и будет равно количеству единиц в числе.
Извините, если мое описание немного сумбурное, буду благодарен за подсказки о том "как правильно".
n &= (n - 1);
вызванная в цикле, убирает из n единицы (в двоичном представлении) до тех пор пока их совсем не останется.
Попробую доказать.
Для начала рассмотрим операцию n-1. Что будет происходить с числом в двоичном представлении? При вычитании единицы с числом в двоичном виде произойдет следующее: первый с правого края единичный бит будет обнулен, а предшествующие ему нули инвертированы. Вот так:
xx...xx100...00 - 1 = xx...xx011...11
где x -произвольные биты в левой части числа.
Это можно доказать следующим образом (если это нужно). Любое число A можно представить в виде:
А = bx*2x+bx-1*2x-1+...+b1*21+b0*20
где x - порядок бита в двоичном представлении числа,
а bx - сам бит в позиции x.
Значит и единицу можно представить следующим образом:
1=(1*20)=(1*21-1*20)=(1*22-1*21-1*20)...
Предположим, что b0=1, тогда:
A - 1 = (bx*2x+bx-1*2x-1+...+b1*21+1*20) - (1*20) = (bx*2x+bx-1*2x-1+...+b1*21+0*20)
Т.е. мы видим, что на место b0 подставился ноль, т.е. первый единичный бит справа был обнулен. (желтым я подсветил части выражения, которые взаимоуничтожаются из за разности знаков)
Если же первый единичный бит справа это b1 то можно сделать другую подстановку:
A - 1 = (bx*2x+bx-1*2x-1+...+1*21+0*20) - (1*21-1*20) = (bx*2x+bx-1*2x-1+...+1*21+0*20) - 1*21 + 1*20 = (bx*2x+bx-1*2x-1+...+0*21+1*20+0*20) = (bx*2x+bx-1*2x-1+...+0*21+1*20)
Теперь в позиции b1 ноль, зато в позиции b0 - единица.
Для предположения, когда первый единичный бит это b2:
A - 1 = (bx*2x+bx-1*2x-1+...+1*22+0*21+0*20) - (1*22-1*21-1*20) = (bx*2x+bx-1*2x-1+...+1*22+0*21+0*20) - 1*22+1*21+1*20 = (bx*2x+bx-1*2x-1+...+0*22+1*21+1*20)
И так далее и тому подобное.
Не знаю, считаются ли мои корявые рассуждения доказательством у настоящих математиков, но отсюда во-всяком случае понятно что происходит: в битовом представлении числа самая правая единица превращается в ноль, а все остальное за ней превращается в единицы.
Следующая операция это побитовый И.
Что произойдет с числами А и B когда с ним будет произведена побитовая операция И, если мы знаем, что:
1. B = A - 1, а значит, что
2. До бита с номером Y эти числа совпадают.
3. Бит с номером Y - самая правая единица в числе A, за которым идут нули.
4. Сам бит с номером Y в числе A равен единице, а в B равен нулю и
5. далее в числе A все последующие символы равны нулю, а в B - единице.
Очевидно, что часть числа ДО бита с номером Y останется неизменной, так как a&a=a.
Бит с номером Y будет обнулен и так же будут обнулены все последующие за ним, так как там один из операндов равен нулю.
xx...xx100...00 & xx...xx011...11 =
---------------
xx...xx000...00
Т.е. мы видим, что в результате этой операции самый правый единичный бит в байте превратился в ноль.
Мы сможем повторять эту операцию и результат не будет равен нулю до тех пор, пока последний единичный бит не станет нулевым. Очевидно, что количество итераций и будет равно количеству единиц в числе.
Извините, если мое описание немного сумбурное, буду благодарен за подсказки о том "как правильно".
четверг, 8 апреля 2010 г.
Решение задачи о гномиках в разноцветных шапках
Александр выложил интересную задачу про гномиков.
Не придумал как вставить картинку к нему в каменты, поэтому решение привожу здесь.
Итак, вот схема:
В первой строке отмечены номера гномиков (для удобства), во второй их реальное расположение. Гномики смотрят вправо, т.е. номер первый видит всех, последний никого. Далее идут шаги которые гномикам нужно предпринять, чтобы всем спастись (в колонках отмечено кто и что делает).
Итак, первый гномик делает операцию последовательного XOR-а. Т.е. он берет 2-го и 3-го гномика и проводит XOR, результат я записал в колонку G (под третьего гномика). После чего он берет результат и XOR-ти с 4-м (результат под 4-го), потом этот результат XOR-ит c 5-ым и т.д. В итоге он получает значение, которое и называет (отмечено желтым). В зависимости от того совпало оно или нет людоед его съедает или нет и тут работает чистая удача.
Но дальше, все уже знают конечный XOR последовательности и могут понять кто они. Например на шаге 3 второй гномик предполагает, что он 0 (отмечено голубым). Исходя из этого он проводит последовательный XOR (шаг 4) и получает в результате 0 (отмечено красным). Поскольку его результат не совпадает с начальным, который посчитал 1-й гномик (желтым) он понимает, что предположение о том, что он 0 было не верным, а значит он 1. И на 5-м шаге говорит: 1. Дальше аналогично третий гномик делает предположение и считает XOR и т.д.
UPD.: (извините, нужно было убегать, потому набросал саму идею, теперь формализую)
Или, говоря строгим языком математики:
Обозначим состояние шапки каждого гномика как X. Тогда состояние шапки n-го гномика будет Xn. Пусть, для определенности, у черных шапок X=1, а для белых X=0.
Так же для определенности, пусть общее количество гномиков равно m.
Вначале первый гномик (который видит всех) должен вычислить "общий XOR" (обозначим его Z) последовательности гномиков по формуле:
Z1=(((X2 XOR X3) XOR X4) XOR X5) ... XOR Xm)
Полученный результат он называет и в зависимости от удачи людоед его съедает, либо нет. (Если Z1 совпало с X1, то, соответственно не съедает). Однако таким образом всем становится известно состояние X1.
Дальше каждый гномик делает предположение о своем состоянии (Xn) и вычисляет собственный "общий XOR" (Zn) по формуле:
Zn=(((Xn-1 XOR Xn) XOR Xn+1) XOR Xn+2) XOR Xn+3) ... XOR Xm)
Если Zn отличается от Z1 то это означает, что предположение гномика о собственном состоянии было ошибочным и он называет противоположное. При совпадении, соответственно, предположение считается верным и называется именно оно.
Таким образом все гномики начиная со 2-го назовут заведомо верные собственные состояния.
Задача решена.
Не придумал как вставить картинку к нему в каменты, поэтому решение привожу здесь.
Итак, вот схема:
В первой строке отмечены номера гномиков (для удобства), во второй их реальное расположение. Гномики смотрят вправо, т.е. номер первый видит всех, последний никого. Далее идут шаги которые гномикам нужно предпринять, чтобы всем спастись (в колонках отмечено кто и что делает).
Итак, первый гномик делает операцию последовательного XOR-а. Т.е. он берет 2-го и 3-го гномика и проводит XOR, результат я записал в колонку G (под третьего гномика). После чего он берет результат и XOR-ти с 4-м (результат под 4-го), потом этот результат XOR-ит c 5-ым и т.д. В итоге он получает значение, которое и называет (отмечено желтым). В зависимости от того совпало оно или нет людоед его съедает или нет и тут работает чистая удача.
Но дальше, все уже знают конечный XOR последовательности и могут понять кто они. Например на шаге 3 второй гномик предполагает, что он 0 (отмечено голубым). Исходя из этого он проводит последовательный XOR (шаг 4) и получает в результате 0 (отмечено красным). Поскольку его результат не совпадает с начальным, который посчитал 1-й гномик (желтым) он понимает, что предположение о том, что он 0 было не верным, а значит он 1. И на 5-м шаге говорит: 1. Дальше аналогично третий гномик делает предположение и считает XOR и т.д.
UPD.: (извините, нужно было убегать, потому набросал саму идею, теперь формализую)
Или, говоря строгим языком математики:
Обозначим состояние шапки каждого гномика как X. Тогда состояние шапки n-го гномика будет Xn. Пусть, для определенности, у черных шапок X=1, а для белых X=0.
Так же для определенности, пусть общее количество гномиков равно m.
Вначале первый гномик (который видит всех) должен вычислить "общий XOR" (обозначим его Z) последовательности гномиков по формуле:
Z1=(((X2 XOR X3) XOR X4) XOR X5) ... XOR Xm)
Полученный результат он называет и в зависимости от удачи людоед его съедает, либо нет. (Если Z1 совпало с X1, то, соответственно не съедает). Однако таким образом всем становится известно состояние X1.
Дальше каждый гномик делает предположение о своем состоянии (Xn) и вычисляет собственный "общий XOR" (Zn) по формуле:
Zn=(((Xn-1 XOR Xn) XOR Xn+1) XOR Xn+2) XOR Xn+3) ... XOR Xm)
Если Zn отличается от Z1 то это означает, что предположение гномика о собственном состоянии было ошибочным и он называет противоположное. При совпадении, соответственно, предположение считается верным и называется именно оно.
Таким образом все гномики начиная со 2-го назовут заведомо верные собственные состояния.
Задача решена.
воскресенье, 4 апреля 2010 г.
1Cv8 и gource
Раньше я уже приводил пример, как может быть красиво визуализирована работа с любым проектом при помощи утилиты Gource, если он хранится в системе контроля версий, например svn или git.
Платформа 1С версии восемь имеет собственную систему контроля версий из которой тоже можно получить визуализацию и сейчас я покажу как это можно сделать.
Для начала сохраним лог изменений из хранилища конфигурации. Для этого зайдите в 1С в режиме конфигуртора. Естественно, при входе вы должны будете подключиться к вашему хранилищу:
Теперь выберите в меню пункт "Конфигурация - Хранилище конфигурации - История хранилища":
В открывшемся окне нажмите кнопку "Отчет по истории хранилища" или аналогичный пункт в меню действия:
Дальше откроется окно настройки лога. Выберите отчет по версиям хранилища, с выводом в текстовый документ и нажмите "Ок":
А полученный текстовый файл сохраните на диск (например с именем conf_report.log):
К сожалению эту операцию нельзя сделать из командной строки, потому что в параметрах отсутствует режим получения изменений по версиям.
Теперь, когда мы сохранили лог изменений его нужно преобразовать в формат понятный gource. Для этого я написал небольшую утилиту на С++, которую назвал log-1c-to-gource.
Скачайте ее и сконвертируйте файл лога:
Теперь осталось только "подсунуть" этот лог gource:
Естественно, вы можете поиграться с параметрами gource как вам нужно и т.д.
А вот несколько скринов, которые получились у меня.
Это скрин с первого комита, когда в хранилище разворачивается вся конфигурация (УТП, если интересно):
Действительно "взрыв" объектов.
А вот конфигурация уже развернута:
Здоровенный "одуванчик" слева это документы (с формами и пр.). Их действительно много.
И вот работа с некоторыми объектами (я предварительно почистил лог, убрав из него первый комит и теперь огромное дерево не строится):
К сожалению у меня не нашлось хранилища с длиной историей, чтобы записать красивое видео. Если у кого-то такое есть, было бы интересно посмотреть. К тому-же есть несколько идей о том, как можно подправить конвертер, но нужно смотреть как он ведет себя на визуализации больших и долгих проектов. Так что буду благодарен за ваши логи.
Эта статья на Инфостарт
Платформа 1С версии восемь имеет собственную систему контроля версий из которой тоже можно получить визуализацию и сейчас я покажу как это можно сделать.
Для начала сохраним лог изменений из хранилища конфигурации. Для этого зайдите в 1С в режиме конфигуртора. Естественно, при входе вы должны будете подключиться к вашему хранилищу:
Теперь выберите в меню пункт "Конфигурация - Хранилище конфигурации - История хранилища":
В открывшемся окне нажмите кнопку "Отчет по истории хранилища" или аналогичный пункт в меню действия:
Дальше откроется окно настройки лога. Выберите отчет по версиям хранилища, с выводом в текстовый документ и нажмите "Ок":
А полученный текстовый файл сохраните на диск (например с именем conf_report.log):
К сожалению эту операцию нельзя сделать из командной строки, потому что в параметрах отсутствует режим получения изменений по версиям.
Теперь, когда мы сохранили лог изменений его нужно преобразовать в формат понятный gource. Для этого я написал небольшую утилиту на С++, которую назвал log-1c-to-gource.
Скачайте ее и сконвертируйте файл лога:
log-1c-to-gource.exe conf_report.log conf_report_gource.log
Теперь осталось только "подсунуть" этот лог gource:
gource.exe --log-format custom conf_report_gource.log
Естественно, вы можете поиграться с параметрами gource как вам нужно и т.д.
А вот несколько скринов, которые получились у меня.
Это скрин с первого комита, когда в хранилище разворачивается вся конфигурация (УТП, если интересно):
Действительно "взрыв" объектов.
А вот конфигурация уже развернута:
Здоровенный "одуванчик" слева это документы (с формами и пр.). Их действительно много.
И вот работа с некоторыми объектами (я предварительно почистил лог, убрав из него первый комит и теперь огромное дерево не строится):
К сожалению у меня не нашлось хранилища с длиной историей, чтобы записать красивое видео. Если у кого-то такое есть, было бы интересно посмотреть. К тому-же есть несколько идей о том, как можно подправить конвертер, но нужно смотреть как он ведет себя на визуализации больших и долгих проектов. Так что буду благодарен за ваши логи.
Эта статья на Инфостарт
четверг, 1 апреля 2010 г.
Первоапрельское мироздание и его чувство юмора
Сегодня мне снилось, что меня рекрутили в GameDev и предлагали вдвое больше того, что я получаю сейчас.
среда, 31 марта 2010 г.
1С + JavaScript
Интересная публикация появилась на InfoStart. Технология шифрования кода 1С (а это пока скорее только технология) Golden Key 8.1 Prototype.
Основной смысл заключается в том, что часть кода 1С преобразуется в html-код (а если быть точнее в JavaScript), который хранится в соответствующих контейнерах внутри конфигурации (обработки). А сам html-код "шифруется" известными преобразователями кода, которые делаю его не читаемым, но с сохранением функциональности.
Конечно, как сторонник OpenSource, я не поощряю такие методы, однако надо отметить, что вызов JavaScript, а главное работа с объектами метаданных 1С из JavaScript это сам по себе достаточно интересный ход.
Основной смысл заключается в том, что часть кода 1С преобразуется в html-код (а если быть точнее в JavaScript), который хранится в соответствующих контейнерах внутри конфигурации (обработки). А сам html-код "шифруется" известными преобразователями кода, которые делаю его не читаемым, но с сохранением функциональности.
Конечно, как сторонник OpenSource, я не поощряю такие методы, однако надо отметить, что вызов JavaScript, а главное работа с объектами метаданных 1С из JavaScript это сам по себе достаточно интересный ход.
воскресенье, 28 марта 2010 г.
Старый хлам в картонной коробке
Знаете, как обычно бывает, когда делаешь уборку и находишь коробку с разным старым хламом.
"Ну, вот я ее щас выкину, - думаешь. - Только погляжу что там лежит".
И вот тут уборка останавливается. Начинаешь доставать, разглядывать. А потом задвинешь ее обратно как есть, потому что жалко же выбрасывать, столько воспоминаний. Примерно тоже происходит и со старыми исходниками, разными файлами, старыми проектами. Набрел сегодня на такую свою "коробку" и кое-чем поделюсь с вами.
Lab_5_18
Когда-то я зарабатывал карманные деньги тем, что делал лабораторки для старшекурсников. Все это было, конечно, примитивно и скучно: работа с массивами, списками, основы языка... Но одна лабораторка мне нравится до сих пор. Каждый раз как запускаю умиляюсь, до чего хорошо получилось. Это парсер, который раскладывает арифметическое выражение в дерево:
Кстати, тут видно, что он не только строил дерево, но и немного сжимал его, избавляясь от сложения с нулем и подобных операций. Конечно, когда формула уже лежит в дереве, то работать с ней становится легко и приятно, можно применять разные шаблоны, тасовать узлы как угодно и получать просто восхитительные результаты. Например, формульный калькулятор в компилируемых языках. Думаю, что именно такой способ представления формул используется в каком-нибудь MathLab.
DemoAsm
Первая программа на ассемблере. Скомпилирована еще тогда, но до сих пор работает. Чего бы ей не работать. Собственно включает режим 0x13h и рисует желтую точку на экране. Управлять точкой можно с помощью клавиш q,a,o,p, выход - Esc. Скриншот, к сожалению, не делается. Кстати! Размер EXE-шника всего 956 байт.Т.е. меньше килобайта. Нет, все-таки в ассемблере что-то есть.
Патчер примечателен тем, что в нем переопределялся знакогенератор для режима 0x03h и менялась палитра. За счет этого достигался эффект плавной бегущей строки (в текстовом режиме) и плавного появления/исчезновения звезд на фоне. Тут я тоже не осилил сделать скриншот, но вы можете посмотреть сами.
Вообще-то Poin1 это часть общей задачи которая изначально решалась в 3D для точек и многогранника. Это же ее разновидность для плоскости.
Вот, собственно, и все что нашлось из интересного. А еще больше было потеряно, стерто и отформатировано. Мои эксперименты с 3D, куча разных мелких утилит под Windows и еще много чего.
Естественно, выкладываю все файлы (с исходниками) в архиве: old_prog.zip
"Ну, вот я ее щас выкину, - думаешь. - Только погляжу что там лежит".
И вот тут уборка останавливается. Начинаешь доставать, разглядывать. А потом задвинешь ее обратно как есть, потому что жалко же выбрасывать, столько воспоминаний. Примерно тоже происходит и со старыми исходниками, разными файлами, старыми проектами. Набрел сегодня на такую свою "коробку" и кое-чем поделюсь с вами.
Lab_5_18
Когда-то я зарабатывал карманные деньги тем, что делал лабораторки для старшекурсников. Все это было, конечно, примитивно и скучно: работа с массивами, списками, основы языка... Но одна лабораторка мне нравится до сих пор. Каждый раз как запускаю умиляюсь, до чего хорошо получилось. Это парсер, который раскладывает арифметическое выражение в дерево:
Кстати, тут видно, что он не только строил дерево, но и немного сжимал его, избавляясь от сложения с нулем и подобных операций. Конечно, когда формула уже лежит в дереве, то работать с ней становится легко и приятно, можно применять разные шаблоны, тасовать узлы как угодно и получать просто восхитительные результаты. Например, формульный калькулятор в компилируемых языках. Думаю, что именно такой способ представления формул используется в каком-нибудь MathLab.
DemoAsm
Первая программа на ассемблере. Скомпилирована еще тогда, но до сих пор работает. Чего бы ей не работать. Собственно включает режим 0x13h и рисует желтую точку на экране. Управлять точкой можно с помощью клавиш q,a,o,p, выход - Esc. Скриншот, к сожалению, не делается. Кстати! Размер EXE-шника всего 956 байт.Т.е. меньше килобайта. Нет, все-таки в ассемблере что-то есть.
Fistpath
Патчер для какой-то из версий игры "Элита" (кажется First Encounters). Добавлял произвольное количество денег. Кажется, речь шла о "стартовых" деньгах.Патчер примечателен тем, что в нем переопределялся знакогенератор для режима 0x03h и менялась палитра. За счет этого достигался эффект плавной бегущей строки (в текстовом режиме) и плавного появления/исчезновения звезд на фоне. Тут я тоже не осилил сделать скриншот, но вы можете посмотреть сами.
WinKley
Софтина задумывалась как "клей" для windows-программ. По-идее должна была "склеивать" два EXE-шника в один таким образом, чтобы сначала загружался один, а за ним другой. Сам клей реализован так и не был, но зато получился симпатичный интерфейс (нужно помнить, что речь идет о времени, когда WinXP с ее красивыми темами еще не вышла). Он весь подсвечивается и подзвучивается при наведениях и нажатиях. Кстати, что-то оно с EXE-шниками все же делает, во всяком случае мой антивирус ругается на Output file.Kt
Электронный камертон. Ничего необычного, просто пищит через PC-спикер. Замечательно то, что тут используется библиотека sCrt. Это моя собственная библиотека (очень примитивная надо отметить, были намного профессиональнее) упрощающая построение интерфейса в стиле Norton. Тогда это, был самый популярный пользовательский интерфейс для DOS-приложений. Кажется это было одно из последних приложений под DOS. Все-таки 2001-год, я уже писал под Windows.Poin1
После запуска на экран будет выведено несколько точек, а после нажатия клавиши точки будут обведены в многоугольник, причем так, что крайние точки станут его вершинами, а все остальные окажутся внутри. Т.е. многоугольник как бы "обтянет" эти точки. Такой же эффект, как если бы вы бегали с ниткой вокруг группы деревьев, некоторые оказались бы внутри ниточного ограждения, а на некоторые (самые внешние) оказались бы в вершинах ниточного многоугольника.Вообще-то Poin1 это часть общей задачи которая изначально решалась в 3D для точек и многогранника. Это же ее разновидность для плоскости.
Matrix
Не думаю, что нужно объяснять что именно делает эта программа. Совершенно ничего особенного. Обычный Screen saver. Таких были сотни разновидностей. Вот еще один для DOS-а. Да, я немного подправил его сегодня, поставлял задержек, чтобы на современной машине можно было хоть что-то разглядеть.Вот, собственно, и все что нашлось из интересного. А еще больше было потеряно, стерто и отформатировано. Мои эксперименты с 3D, куча разных мелких утилит под Windows и еще много чего.
Естественно, выкладываю все файлы (с исходниками) в архиве: old_prog.zip
суббота, 27 марта 2010 г.
rlinkf v1.0
Ура! Ура! Я закончил первую версию моего скрипта-редиректора и теперь я смогу быстро и просто делать всякие короткие ссылки вроде http://zfilin.org.ua/link/how-to-read (оригинальная ссылка: дли-и-и-и-и-и-инная ссылка)
Если вы хотите себе такое-же, то скрипт можно скачать по адресу http://zfilin.org.ua/link/rlinkf в разделе Downloads
Если вы хотите себе такое-же, то скрипт можно скачать по адресу http://zfilin.org.ua/link/rlinkf в разделе Downloads
четверг, 25 марта 2010 г.
среда, 24 марта 2010 г.
Подписаться на:
Сообщения (Atom)