четверг, 29 октября 2009 г.

Как отправлять почту через Google Mail с сайта ASP.NET

Грабли, которые подстерегают человека, которому надо отправить почту через почтовый домен, хостящийся на google apps из .net-сайта. Грабли описаны на примере встроенных в фреймворк классов из пространства System.Net.Mail.

1) Надо обязательно использовать TLS/SSL. В web.config это выглядит так:

<system.net>
    <mailSettings>
        <smtp from=from_person@domain.com deliveryMethod="network">
            <network host="smtp.gmail.com." port="587" userName=from_person@domain.com password="PASSWORD"/>
        </smtp>
    </mailSettings>
</system.net>

2) Кроме того что в конфиге надо правильный порт сказать, в коде надо проставить свойство EnableSsl у SmtpClient (не знаю, почему это не вынесено в <mailSettings>

private static void internalSend(SmtpClient smtp, string email, MailMessage mm)
{


smtp.EnableSsl = true;
smtp.Send(mm);

}

3) На хостинговом сервере может не пройти проверка сертификата SMTP сервера. Я решил этот вопрос радикально – отключил проверку:

public static bool ValidateServerCertificate(Object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
    return true;
}

private static SmtpClient getSmtpClient()
{
    ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate);

    return new SmtpClient();
}

4) Сам почтовый аккакунт, из-под которого отправляется почта, должен быть активирован в гугле. Это значит, что

  • запись для аккаунта создана в контрольной панели google mail
  • под самим аккакнтом на gmail заходили хоть раз
  • в свойствах аккаунта стоит разрешение подключаться по POP3/SMTP

И даже после этого у вас может получиться отправлять почту совсем не сразу. У меня например гугль начал отсылать письма где-то через день после того как я под аккаунтом залогинился в gmail. Наверное, что-то обсчитывал :-)

пятница, 23 октября 2009 г.

Adventures in JSF 2.0: Hello World Tutorial using Maven 2, JSF 2, Facelets 2, and Weld

Link: http://info.rmatics.org/2009/10/17/jsf2_tutorial_0/

себе, почитать.

четверг, 22 октября 2009 г.

Con10uum

На Кулере нашел – концепт нового оконного менеджера будущего, используюшего десятипальцовый touch pad.


10/GUI from C. Miller on Vimeo.


Всем юзабелистам однозначно смотреть


Остается правда вопрос – что делать одноруким :-)

понедельник, 19 октября 2009 г.

RUB и RUR

Век живи, век учись:

Оказывается, международный код (по ISO 4217) рубля - это RUB а не RUR. Код RUR использовался для означения рубля до деноминации 1998 года.

таким образом, "по правильному" 1 RUB эквивалентен 1000 RUR.

"The ISO 4217 code is RUB; the former code, RUR, refers to the Russian ruble prior to the 1998 denomination (1 RUB = 1000 RUR)."

Источники:

воскресенье, 18 октября 2009 г.

.Net 3 - Сила методов расширения

Методы расширения (Extension Methods) это простой такой трюк компилятора, который позволяет программисту добавлять свои собственные методы к уже существующим классам.
Естесственно, чтобы не нарушить защиту класса, методам расширения недоступны “кишки” класса, к которому они пристраиваются. Метод расширение обязан пользоваться существующим публичным контрактом.
Фактически, это такой способ подстроить синтаксис уже существующей библиотеки/фреймворка “под себя”, уменьшив количество кода, которое нужно написать для реализации требуемой функциональности (любители Nemerle меня поймут :-)
Передо мной недавно встала следующая задача: во множестве пользовательских контролов ASP.NET приложения нужно было анализировать дерево контролов страницы и выцепить из него самый первый контрол, который реализовал определенный интерфейс.
Метод FindControl для этого не подходил – я не имел возможности задавать имя контрола. В результате были написаны пара методов-раширений, которые добавляли требуемую функциональность


вторник, 13 октября 2009 г.

ReSharper 5 Overview

Парни из JetBrains в своем блоге рассказывают о том, что будет в 5-м ReSharper-е.

Выглядит о-очень вкусно, один только Call Tracking это какая офигенная штука. Она, я так понимаю в design time анализирует откуда указанный метод может быть вызван и разворачивает это дерево вызовов. То есть – больше никаких веерных Find Usages :)

Еще из понравившегося – Move String to Resource, то есть интернационализация по одному клику, почти так же удобно как и в XCode.

С новыми технологиями тоже неплохо, обещают поддержку .Net 4.0, VS 2010, ASPNET MVC

C HighLoad++

Сейчас разработчиков с mail.ru спросили
- А как вы деплоите изменения ваших проектов?
- Как-как... отделом эксплуатации

пятница, 9 октября 2009 г.

Идеальный менеджер пакетов для .Net

Буду собирать ссылки и мысли по поводу идеального менеджера пакетов для .Net

Преамбула

.Net разработка исторически была не очень “опен сорсовой”, то есть базировалась на проприетарных библиотеках.
Microsoft делает некоторые подвижки в этом направлении – открыл исходники .Net Framework, хостит opensource проекты на CodePlex, но до совершенства еще далеко – например, в VS нет удобного способа при отладке, к примеру, NHibernate, просматривать исходный код этой бибилиотеки.
При этом OpenSource проектов для .Net просто завались – например NHibernate, Spring.Net, майкрософтовские Pattern&Practices Building Blocks etc.
Есть еще и The Mono Project, который мало того, что  сам opensource, так еще и порождает множество проектов с открытым исходным кодом.

Зачем?

Если я подключаю внешнюю библиотеку (тот же NHibernate) то мне нужно руками следить за всеми зависимостями, котоые она тянет за собой, следить за их версиями, следить за конфликтом версий и тп.

Вместе с тем в Java мире это уже все давно пройденный этап – есть Maven, который поддерживается всеми основными IDE, есть Bulildr, есть opensource репозитории, которые подцепляются без проблем. Есть Ivy the package manager в конце концов.

В Java если ты хочешь разработать проект с использованием например Hibernate или Spring Framework, ты пишешь .pom файл из пяти строчек) – и тот же Maven скачивает тебе нужные версии всех нужных библиотек, со всеми их зависимостями, со всеми документациями и пр.

Что же делать?

Ну, есть NMaven (который суть плагин для Maven), есть Byldan, есть предложенный в Хабровской статье менеджер, но как-то оно все не складывается в единую картину.
Я вижу, что идеальный менеджер пакетов должен быть:
  • Клоном хорошо зарекомендовавшей себя Java-вской библиотеки (например, того же Maven);
  • Совместимым с Visual Studio (т.е иметь плагин, аналогичный Maven integration например в IntelliJ IDEA);
  • Использоваться как в .Net так и в Mono – технологии практически идентичные, надо дружить;
  • Иметь репозиторий проектов, куда любой уважаемый разработчик сможет залить свой проект для публичного доступа. CodeHaus и Sonatype Nexus – идеалы для подражания.
Но самое главное, как обычно, не технологии. Самое главное – показать .Net сообществу, что подход, принятый в Java мире, отлично подходит и для мира дотнетовского.
Вообщем, тема для размышлений богатейшая.

PS - Вот обсуждение на Хабре (комментарии тоже интересные)
http://habrahabr.ru/blogs/net/68453/
PS2 - Сравнение подходов Java/.Net на RSDN - http://rsdn.ru/forum/flame.comp/3275597.aspx
PS3 - посмотреть NPanday
PS4 - обсужение на stack overflow

Полезно? Интересно? Скучно?

Нашел в Блоггере (и с радостью установил к себе) кнопки обратной связи (я вообще большой любитель любой обратной связи )

Так что теперь у каждой статьи появился такой вот блок с галками:

image

Захочется поставить отзыв – не отказывайте себе :-)

среда, 7 октября 2009 г.

Несколько советов начинающему eBay-щику

… и владельцу карты Альфа-банка

image

  1. Если у вас карта Альфа-банка, не пытайтесь привязать аккаунт PayPal к обычной карте! PayPal делает пробную транзакцию на доллар, потом говорит

    “We were unable to verify this credit card. Please check if the information you entered is correct. If the problem persists, please try to enter a different credit card.”

    Вообще, дальше надо вводить код из референса транзакции, но код ввести нельзя.

    При этом, доллар-то списан! Я вчера таких долларов несколько уже списал, буду писать в paypal и требовать их обратно :)
  2. Виртуальная карта Альфабанка привязывается идеально, по факту с ней все получилось. Единстенное “но” – код для привязки в Альфа-Клике не показывается, нужно звонить к ним в техподдержку, вводить телефонный пароль (если нет, они его вам по телефону выдадут), объяснять ситуацию – и милая девушка скажет код по телефону. Код в результате подошел :)

Теперь про собственно покупки – среди продавцов электроникой, бесплатно доставляющих в Россию, несметное множество китайцев и тайваньцев. Судя по всему все они накручивают себе рейтинг, отправляя друг другу фидбеки вида “Excellen transaction, great seller, A+!”.

image 

Рабочая теория: не надо смотреть на позитивные отклики, надо смотреть (и читать) отрицательные и нейтральные.

image

Лучше страницу откликов развернуть на максимальные 200 откликов/page (фильтра по типу там нет) и смотреть, чем люди были недовольны и как продавец реагировал

Совсем нет отрицательных (и нейтиральных) откликов – странно. Может вообще человек не торгует?

Если плохих отзывов много (например, >5 за месяц) – я бы поостерегся у такого покупать.

 

Батарею к ноуту я заказал, посмотрим что будет, когда ее пришлют через две недели…

Debugging Tools – как открывать дампы из Explorer-а (.Net Framework 2.0+)

Всем хорошего дня!

Недавно пришлось опять плотно поработать в дампами ASP.NET-овского сайта, снятыми при помощи UserDump.

Дампов было несколько, мы многократно открывали их на разных машинах, каждый раз, открывая дамп приходилось набирать мантру:

  • Open WinDbg
  • Copy длиннючий путь к sos.dll, сказать .load …\sos.dll
  • Open в WinDbg файл с дампом через control-d

Как результат, я начал гуглить на тему скриптов для дебаггера, и нашел чудную статью Carlo Cardella под названием “Never Doubt My Debugger”.

В статье было написано, как настроить WinDbg так, чтобы открывать файлы дампов .dmp в Эксплорере одним кликом (при этом, самостоятельно загрузив еще и sos.dll (sic!):

dbgexp

К сожалению, один-в-один его скрипты не запустились, поэтому я их чуть-чуть подправил, и выкладываю здесь для всеобщей пользы:

Установка

Все что нужно, это скопировать скрипты в каталог C:\Program Files\Debugging Tools for Windows (x86)\scripts (каталог надо создать) и запустить файл register.reg, который добавить в реестр правильнуб команду на открытие .dmp файлов.

Внимание!

Скрипт расчитывает на следующее:

  • Debugging Tools установлены в каталонг C:\Program Files\Debugging Tools for Windows (x86)
  • используется sos.dll из .Net Framework 2.0 или выше по пути c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\

Соответственно, если вы установили отладчик в другой каталог или у вас другой номер сборки .Net Framework, нужно подправить файлы dbgnet20.txt и/или register.dbg

вторник, 6 октября 2009 г.

Мигрирую на feedburner

Играюсь с фидбернером, adsense и фидовой отчетностью. Настроил редирект на FeedBurner

Читатели! Если у кого появятся проблемы с RSS, дайте пожалуйста знать.

Рабочее место Юры Скалецкого

image
Наконец собрался рассказать о том, как устроено мое рабочее место. Относительно недавно – с полгода назад – я, как мне сейчас кажется, пришел наконец к идеалу.
Я настроил мое рабочее место так, что мне все в нем нравится.
Самое главное, чего мне удалось достичь – я теперь могу быстро выполнять рутинные задачи. Я быстро могу запустить нужную мне программу, быстро открыть плейер, быстро включить или выключить музыку, изменить громкость звука, залезть на какой-нибудь сайт. Больше компьютер в повседневных задачах меня не тормозит.
При выборе часто используемых программах я отказался от мегакрасивости и суперуниверсальности в сторону минимального размера в памяти и быстрого старта. Это сильно улучшило мое настроение.

Ноутбук

Все мое рабочее место умещается в одном Lenovo ThinkPad T-61. До этого я жил на ASUS-ах, но после перехода на IBM/Lenovo я понял, что ASUS ноутбуки делать не умеет. А IBM вот умел и Lenovo не разучилась еще, к счастью.
Самое прекрасно в Lenovo – правильный предустановленный софт. В нем практически все правильно: