DynamicObject, JSON и ближайшее будущее
Опубликовано: 21 сентября, 2009 Filed under: .net, DLR, dynamic, JSON | Tags: .net, .NET 4.0, DLR, dynamic, DynamicObject, JSON 1 комментарийВведение
В данной статье хочу ознакомить вас с небольшим приложением для работы с JSON данными, демонстрирующим возможности, доступные нам в .NET 4.0. Поверхностно будут рассмотрены вопросы JSON-формата, а так же работы с динамическими типами данных.
JSON
Есть такая классная шутка, известная широким массам:
JSON (JavaScript Object Notation) — простой формат обмена данными, удобный для чтения и написания как человеком, так и компьютером. Он основан на подмножестве языка программирования JavaScript, определенного в стандарте ECMA-262 3rd Edition — December 1999. JSON — текстовый формат, полностью независимый от языка реализации, но он использует соглашения, знакомые программистам C-подобных языков, таких как C, C++, C#, Java, JavaScript, Perl, Python и многих других. Эти свойства делают JSON идеальным языком обмена данными. далее…
JSON и ваше приложение
Ну так вот, обычно, получая объекты по JSON в наших приложениях мы должны подготовить инфраструктуру для их поддержки (к примеру с помощью DataContractJsonSerializer и решения на типа этого). Однако это занимает значительное время у разработчика. В связи с этим у меня появилось страстное желание поставить JSON механизмы на рельсы динамических возможностей .NET 4.0 и получать от работы с ним одно удовольствие 😉
DynamicObject
DynamicObject — Предоставляет нам простой класс, наследуясь от которого мы можем получить динамическое поведение объекта на этапе исполнения. Наследуясь от этого класса и переопределяя некоторые его методы реализуется вся основная логика необходимая нам для этого.
Если хостинг DLR и прочие прелести вас заинтересовали и вы хотите ознакомиться немного поглубже с вопросом, то можно посмотреть наше выступление здесь, а так же слайды (здесь и здесь).
К разработке
Для того, чтобы не испытывать неудобств при работе с JSON, я предлагаю воспользоваться (слить и зареференсить) решением от James Newton под названием JSON.NET, данный проект свободен и удовлетворяет всем основным требованиям работы с JSON в рамках .NET-стека (в том числе и LINQ).
Да, к тому же нам понадобится IDE, умеющая работать с .NET 4.0b1, к примеру Visual Studio 2010 Beta 1 (кстати #develop не отстает).
Создаем наше приложение, которое будет выглядеть примерно следующим образом:
«»500 gigabyte hard drive»» ]}»;
dynamic computer = new DynamicJSON(input);
И пробуем посмотреть, какие же свойства обнаружатся у нашего компьютера:
«Intel»
>> computer.Drives
[
»DVD read/writer»,
»500 gigabyte hard drive»
]
>> computer.Drives[0]
«DVD read/writer»
Пока ничего необычного, учитывая, что мы не знаем, что же из себя представляет DynamicJSON, к реализации которого мы и обратимся за впечатлениями:
public class DynamicJSON : DynamicObject
{
private JObject _data;
public DynamicJSON(string data)
{
_data = JObject.Parse(data);
}
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
result = _data[binder.Name];
return true;
}
}
И это всё, что потребуется от нас для работы данного примера, меня подобные вещи радуют чрезмерно, в связи с чем рекомендую и вам использовать подобную практику в своих решениях.
Как забыть про ярлыки на рабочем столе?
Опубликовано: 7 сентября, 2009 Filed under: Productive, Python | Tags: Enso, Humanized, launcher, Productive, Python 3 комментарияВведение
Раньше у меня довольно часто возникала проблема захламления рабочего стола огромным количеством ярлыков, и я начинал теряться в них, соответственно терять время при поиске необходимых мне приложений. В дальнейшем я научился пользоваться сочетанием клавиш win+r, создавая ярлыки с короткими именами в system32. С приходом Windows Vista (7) теперь только кнопки win, однако гибкость и настройка данных методов весьма ограниченна. Имеется так же огромное количество hotkey-менеджеров, однако не с одним из них я так и не сдружился.
Лаунчеры
Недавно (по-моему после прочтения книги «Продуктивный программист. Как сделать сложное простым, а невозможное – возможным» Нила Форда) мой интерес пал на launcher’ы. Для windows-платформы я нашёл несколько:
- SlickRun http://www.bayden.com/SlickRun/
- slimCODE http://www.slimcode.com/
- Colibri http://colibri.leetspeak.org/ – некоторый аналог небезызвестного Quicksilver для Mac OS X
- Launchy http://www.launchy.net/
Ну и герой этого поста:
Немного истории
Изложу настолько, насколько я сумел разобраться в ней. Первоначально Enso был строго коммерческим проектом, разрабатываемым компанией Humanized (основанной Джеффри Раскиным, в котрой в последующем работал его сын). В дальнейшем компания начала работу над Mozilla Ubiquity (аналог Enso, являющийся плагином для FireFox), что позволило ей сделать Enso бесплатным.
Enso
Лучше 1 раз увидеть, чем 7 раз прочитать, базовые возможности представлены в следующих роликах:
На настоящий момент на сайте компании есть две версии продукта:
- Версия 1 http://humanized.com/enso/
удобна в эксплуатации, но умеет делать лишь базовые вещи.
настройка (как и во второй версии) происходит через embeded веб-сервер
- Версия 2 http://humanized.com/enso/beta/all/ (остальное на данной странице является плагинами для Enso)
в данной версии появилось огромное количество очень полезных плагинов (к примеру поиск в google, генерация объектов-карт по выделенному адресу) однако юзабили немного упало (с моей точки зрения) в плане того, что после ввода команды начала открываться отдельная строка для ввода параметров, на что уходило время, и приходилось нажимать лишний раз enter
Все отлично, за исключением того, что проект на данном сайте вроде как заброшен, что не совсем воодушевляло к использованию, однако слазив внутрь и посмотрев реализацию, обнаружилось, что всё написано на Python (межплатформенность?), а так же исходники доступны в свободном доступе, что немного приободрило.
В дальнейших поисках упоминаний о Enso я наткнулся на коммунити http://www.ensowiki.com, а так же (самое главное) хостинг нынешей версии Enso https://launchpad.net/enso, итак, что же изменилось с тех времен:
- настройка больше не через веб-сервер
- межплатформенность (Windows, Linux, Mac OS X, etc)
- интерфейс первой версии
- практически все плагины из второй версии
Используем Enso
Для установки существует инсталлер, поэтому трудности вряд ли могут встретиться. Далее у меня возникла необходимость в настройке (теперь для совершения настроек существует файл enso\config.py) “основной” клавиши (Caps Lock) в режим залипания (Sticky в терминологии создателей программы), для этого я проделал следующее:
IS_QUASIMODE_MODAL = True
Расширяем Enso
Классно, мой питомец (Enso) теперь стал послушным и ласковым, однако хочется научить его понимать новые команды, ну что ж, пускай это будет Enso hello world.
Я отправился в папку commands в корне, куда добавил файл butaji.py со следующим содержимым:
from enso.messages import displayMessage
def cmd_butaji(ensoapi, cmd):
if cmd == «time»:
ensoapi.display_message(«Hello world»)
cmd_butaji.valid_args = [‘time’]
И у меня получилось следующее:
Великолепно! я думаю, что мы с Enso очень сдружимся.
Ещё раз о SharePoint Guidance
Опубликовано: 3 сентября, 2009 Filed under: sharepoint | Tags: patterns & practices, sharepoint, SharePoint guidance, spg Оставьте комментарийНебольшая заметка, в которой я в очередной раз хотел бы обратить внимание на следующий документ:
patterns & practices SharePoint Guidance
исключительно рекомендую всем разработчикам SharePoint
А так же вчера на http://channel9.msdn.com/ вышло несколько роликов, о работе с эти проектом:
How to use the logging components? — p & p Developing SharePoint Applications guidance
How to use the configuration component? — p & p Developing SharePoint Applications guidance
How to use the SharePoint Service Locator? — p & p Developing SharePoint Applications guidance
Приятного просмотра.