JavaScript → Reactive Extensions for JavaScript. Полное руководство
Хотите использовать Observable Collections? Слышали про Reactive Extensions? Нравится LINQ? Не нравится писать спагетти-код? Нужны монады? И все это на JavaScript?
.NET → Доступ к базе данных Oracle средствами ADO.NET Entity Framework из песочницы
Доброго времени суток.
При разработке программного обеспечения всегда руководствовался простым правилом, чем меньше в развивающемся проекте используется сторонних компонентов, платформ, технологий, тем лучше. Почти все гениальное — просто. К сожалению, у разработчика не всегда есть возможность свободного выбора средств и систем, с которыми он работает. Вот и мне достался проект Windows Forms + ODAC + Oracle DB Server.
С большой радостью узнал о выходе Oracle Data Access Components (ODAC) for Microsoft Entity Framework and LINQ to Entities (Beta2). Очень ждал этого момента и вот свершилось! Можно не использовать сторонние ORM — все под ключ.
Как научить приложение использовать Entity Framework через установленный на конечных машинах клиент ODAC — описано в пошаговой инструкции от Oracle. Кому интересно, как избавиться от необходимости установки клиента Oracle на машинах пользователей, прошу под кат.
.NET → Сложно о простом или особенности Linq to objects
LINQ to objects сейчас прочно вошел в нашу жизнь, победоносными шагами ступая по всему стеку .net приложений. В этой статье я бы хотел привести примеры нескольких не очевидных вещей, с которыми довелось столкнуться, работая с LINQ. Интересно — прошу под кат.
Функциональное программирование → Функциональное программирование в среде 1С: Предприятие 8 из песочницы
В последнее время наметилась тенденция прникновения идей функционального программирования в массы. Для меня, как программиста 1С, интереснее всего повышение уровня абстракции при работе с табличными данными. Одно дело кодировать циклы со множеством переменных, которые меняют свое значение от итерации к итерации, а через месяц надо проводить «отладку глазами» (а то и на самом деле отладчик запускать), чтобы понять как эти циклы работают. Гораздо изящнее использовать готовые отлаженные алгоритмы, которые можно применить к таблице в целом, и получить ожидаемый результат.
Год за годом кодируя похожие и не очень циклы, я проникался желанием изменить что-то к лучшему в этом унылом процессе. Первое время меня вдохновляли обощенные алгоритмы STL С++. Потом для общего развития я изучал Haskell — этот язык действительно переворачивает восприятие.
Примерно 2 года назад я начал писать библитеку универсальных функций, которые применял в повседневной работе. Практика убедила меня, что подход работает, и приносит ощутимую пользу. А совсем недавно я открыл для себя язык LINQ, который используется на платформе .NET для унифицированной работы с коллекциями, формирования SQL-запросов и других полезных вещей. Я завидую белой завистью шарперам, у которых есть такой замечательный инструмент!
Изучив библиотеку стандартных операторов запроса, которая составляет ядро LINQ, я решил написать аналогичную библиотеку для 1С Предприятия 8.
Год за годом кодируя похожие и не очень циклы, я проникался желанием изменить что-то к лучшему в этом унылом процессе. Первое время меня вдохновляли обощенные алгоритмы STL С++. Потом для общего развития я изучал Haskell — этот язык действительно переворачивает восприятие.
Примерно 2 года назад я начал писать библитеку универсальных функций, которые применял в повседневной работе. Практика убедила меня, что подход работает, и приносит ощутимую пользу. А совсем недавно я открыл для себя язык LINQ, который используется на платформе .NET для унифицированной работы с коллекциями, формирования SQL-запросов и других полезных вещей. Я завидую белой завистью шарперам, у которых есть такой замечательный инструмент!
Изучив библиотеку стандартных операторов запроса, которая составляет ядро LINQ, я решил написать аналогичную библиотеку для 1С Предприятия 8.
.NET → Linq To Entities vs. Linq To Objects на примере группировки
LINQ — удобная, красивая, но при этом довольно коварная абстракция. Самые неожиданные вещи обычно происходят на стыке какой-либо реализации LINQ и LINQ To Objects. Сегодня на одном примере я рассмотрю совместную работу LINQ To Entities (Entity Framework) и LINQ To Objects.
JAVA → LINQ for Java: LambdaJ
Как часто вам приходилось видеть или писать одни и те же несколько строчек кода, которые постоянно используются вместе для решения одной и той же задачи? Взять, например, перебор или сортировку (некоторую манипуляцию) коллекций. Такие участки кода программистам приходится писать каждый день. Конечно, есть различные IDE, в которых можно использовать snippet'ы и шаблоны. Тем не менее, подобные конструкции загромождают код, делая его более подходящим для обработки компьютером, а не для восприятия программистом.
Тут нам на помощь приходит библиотека LambdaJ. Её предназначением является упрощение процесса работы с коллекциями с целью уменьшения ошибок в коде и повышения его читабельности путём реализации некоторых техник функционального программирования без пренебрежения статической типизацией данных. Последний факт крайне важен, так как статическая типизация является преимуществом языка, значительно повышающим надёжность кода.
Рассмотрим пример использования LambdaJ. Найдём возраст самого юного покупателя, который совершил покупку более, чем на 50'000.
Классический (итеративный) способ:
LambdaJ способ:
Тут нам на помощь приходит библиотека LambdaJ. Её предназначением является упрощение процесса работы с коллекциями с целью уменьшения ошибок в коде и повышения его читабельности путём реализации некоторых техник функционального программирования без пренебрежения статической типизацией данных. Последний факт крайне важен, так как статическая типизация является преимуществом языка, значительно повышающим надёжность кода.
Рассмотрим пример использования LambdaJ. Найдём возраст самого юного покупателя, который совершил покупку более, чем на 50'000.
Классический (итеративный) способ:
int age = Integer.MAX_VALUE;
for (Sale sale : sales) {
if (sale.getCost() > 50000.00) {
int buyerAge = sale.getBuyer().getAge();
if (buyerAge < age)
age = buyerAge;
}
}
LambdaJ способ:
int age = min(forEach(select(sales, having(
on(Sale.class).getCost(), greaterThan(50000.00)).getBuyer()))),
on(Person.class).getAge());
JAVA → Jooq — «LINQ» для Java, типобезопасный построитель SQL запросов в Java коде
Недавно, в поисках золотой середины между JDBC и ORM, я натолкнулся на интересную open source библиотеку (лицензия Apache Software License), с помощью которой можно строить SQL прямо в Java-коде достаточно удобно и безопасно. Библиотека называется Jooq. Jooq включает в себя генератор кода, который парсит структуру вашей базы данных и создает необходимые Java-классы. На деле получается примерно такой код:
Как видите, конструирование запроса и его выполнение для простых типов занимает одну строку. Немного о jooq:
Integer taskId = sqlFactory.select(ID).from(TASK).where(STATUS.equal(TaskStatus.QUEUED)).
orderBy(LAST_UPDATED).limit(1).fetchOne(ID);
Как видите, конструирование запроса и его выполнение для простых типов занимает одну строку. Немного о jooq:
.NET → Linq To Tasks и монада продолжения
После анонса C# 5.0 с его async и await, у меня появился небольшой интерес к асинхронному программированию, копание в сторону которого и послужило возникновению данного текста.
В процессе чтения статьи вы узнаете/омните.
В процессе чтения статьи вы узнаете/омните.
- Что есть монада на примере Maybe.
- Что такое CPS и монада продолжения.
- Как это связать с классом Task из TPL.
.NET → Кеширование данных в LINQ-to-SQL, в т.ч. и NULL
Хочу поделиться с хабрасообществом парочкой классов, которые я использую в своих ASP.NET проектах. Один является обёрткой для объекта Cache, другой содержит расширяющие методы для кеширования результатов запросов LINQ-to-SQL.
Итак, задача: кешировать запросы LINQ-to-SQL.
Что должно быть в результате:
1) расширяющий метод для кеширования коллекции записей (после выполнения ToList())
2) расширяющий метод для кеширования одной записи (FirstOrDefault()),
3) обобщающий метод для работы с кешем, позволяющий доставать записи и приводить к указанному типу
3) возможность кеширования NULL.
Итак, задача: кешировать запросы LINQ-to-SQL.
Что должно быть в результате:
1) расширяющий метод для кеширования коллекции записей (после выполнения ToList())
2) расширяющий метод для кеширования одной записи (FirstOrDefault()),
3) обобщающий метод для работы с кешем, позволяющий доставать записи и приводить к указанному типу
3) возможность кеширования NULL.
Ruby → Выпущена новая версия IronRuby 1.1

IronRuby – opensource-реализация языка Ruby для платформы .NET получила обновление. Для загрузки доступна новая версия IronRuby 1.1 в которой присутствуют следующие изменения и нововведения:
- изменена лицензия IronRuby с MSPL на Apache License (Version 2) в связи с тем, что родственные проекты DLR и IronPython так же переведены под эту лицензию;
- IronRuby 1.1 больше не поддерживает .NET 2.0 SP1, минимальная версия платформы, которую поддерживает IronRuby — .NET 3.5, строго рекомендуется версия .NET 4.0;
- в этой версии IronRuby добавлена поддержка методов расширения (extension methods) в .NET, в том числе поддержка методов расширения LINQ.
Дополнительно, вы можете посмотреть примеры использования IronRuby в наборе LINQ 101 sampes ported to IronRuby.