27 апреля 2011 г.

Disabled html-ссылки (a)

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


Для того, чтобы заблокировать объект в html есть свойство disabled.



<a href="mysite.com" disabled="disabled" />

После использования данного свойства ваша ссылка, да и любой другой объект будут заблокированы. Однака ссылка при этом будет все еще отвечать на событие OnClick. Чтобы этого не произошло необходимо немного JavaScript кода.



<a href="mysite.com" disabled="disabled" onclick="if(this.disabled) return false;" />

После этого больше не должно возникнуть проблем с заблокированными ссылками и кнопками

26 апреля 2011 г.

Lucene.Net и German Umlaute

При создании полнотекстового поиска по сайту главной задачей, конечно же, является качество поиска. Lucene.Net в этом случае очень хорошая библиотека для поиска, быстрота и главное качество поиска у неё отменное. За время работы с данной библиотекой мне пришлось столкнуться только с одно проблемой, а именно с невозможностью поиска немецких умляутов. Дело в том, что для нормального их поиска нужно использовать анализатор немецкого языка, но информация на сайте в большей степени была представлена на английском, поэтому данный способ не очень подходил. Немного порывшись в интернете в поисках хорошего решения данной задачи и ничего не найдя. Было найдено свое решение, быстрое и в то же время как показывает практика действенное.


Я поступил следующим образом. При индексации информации каждый умляут был заменен на его аналог, т.е. ä = a, ü = u. В конечном итоге вся наша информация представлена одним языком, при поиске мы должны так же если введен умляут заменить его на аналог английского языка.


Был написан метод, который использовался как при поиске, так и при индексации информации.



private string ReplaceUmlauteString(string strSearch)
{
return strSearch.Replace('ü', 'u').Replace('ö', 'o').Replace('ä', 'a');
}

После использования данного метода проблемы при поиске пропали. Если у Вас есть какое-то другое решение, которое намного действеннее моего напишите, его в комментарии, будет интересно попробовать.

12 апреля 2011 г.

Вход без права выхода

Только что меня попросили удалить анкету человека из одноклассников. Мне это было не сложно, так что попросив логин и пароль и смело полез на сайт. Авторизовался и по простоте душевной полез в настройки, где по моему разумению должна была быть кнопка или ссылка "Удалить профиль". В настройках сей фишки не оказалось О_о что меня самую малость озадачило. Едиственное, то предлагалось это заблокировать профиль, чтобы он остался на сайте и был доступен только друзьям, что тоже было не совсем правильно.


Пришлось, как это часто бывает в подобных случаях, воспользоваться поисковиком и поискать "Как же удалить эту страницу". Советов было несколько, один из них заключался в обыкновенном удалении всех данных из страницы, удалении друзей, изменении всего чего можно и в обыкновенном забывании пароля. В общем совет хороший, но долгий) И второй способ, это все же воспользоваться удалением, которое есть на Одноклассниках, но которое по какой-то причине скрыто от пользователей. Для второго способа нужно зайти на сайт, и в адресной строке после всего что там понакалякано вставить строку &st.layer.cmd=PopLayerDeleteUserProfile сразу же появится всплывающее окошко, которое и предложит удалить профиль, для чего нужно будет ввести пароль.


Остается загадкой, для чего все-таки была скрыта данная возможность? И как хорошо это удаление удаляет данные с сайта? Может стоило для начала воспользоваться первым способом, а потом сразу и вторым? Чтоб наверняка) Но, это я уже точно не узнаю, как минимум до того момента пока не буду удалять свою анкету, что я пока делать не собираюсь, хоть я там и бываю раз в месяц, но она у меня кушать не просит и карман не тянет.

А у нас землетресений и цунами нету

Ну вот я и добрался до этой темы. Конечно же этот пост связан с тем долбоебизмом, который отнял жизни наших сограждан и покалечил ни одного человека.

Очень часто за свою жизнь я слышал одну просто гениальную фразу "А у нас разве плохо? Вот ни цунами, ни землетресений, ни новоднений, ни террактов". Короче у нас просто тишь да благодать бля! А так ли все на самом деле? ИЛи мы просто научились себя успокаивать? Типа все хорошо, смотрим БТ.

И вот, пожалуйста, как раз в тот момент, когда страна уже явно входит, вернее, какое входит? Вошла уже и держит свой курс прямо в жопу, то бишь в кризис. КОгда народ озлобился на власти и не хочет им верить, когда люди в панике не знают, что делать. Тогда, когда каждый более менее умный человек начал реально задумываться о том, что же верно и правильно в этой стране? Именно в этот момент происходит взрыв. Люди по стенам, кровь, трупы, раненые. И вот, наши власти, некогда чуть ли не враги народа, превращаются в спасителей, которые не только разберутся со всем, но и накажут всех, отомстят и тому подобное и конечно же они знают кто это сделал. Это злостные иностранные спец-службы на кой-то ляд решили подорвать немного белорусинки, чтоб жизнь медом не казалось. Так вот! Не кажется ли Вам это бредом? Мне? Кажется! Я не вижу ни одной причине по которой кому-то нужно взрывать людей, кому-то внешнему, поправлю себя чуть-чуть.

Соболезную тем людям, которых затронул так или иначе этот взрыв. Будьте сильными и держитесь. А тем, кто это сделал - ЧТОБ ТЫ СДОХ СУКА!

8 апреля 2011 г.

ФСБ РФ vs Skype, Gmail

Последнее время от всего, что происходит в мире мои волосы непременно хотят встать! И самое интересное, что просто от осознавания того бреда, который творится. Я не хочу говорить про свою республику так как в ней я чего-то разумного вообще не вижу, ну вот простите меня, не вижу и все тут. Да у нас есть куча умных людей, но они настолько умные, что понимают: "Лезть куда-то и что-то менять просто глупо! Не поймут и затопчут к чертовой матери!"

Но как показывает время, мы действительно с Россиянами один народ, как ни крути, что одни, что вторые отжигают по полной! Чего только стоит сегодняшняя новость о том, что ФСБ РФ хочет запретить Skype и Gmail. Причина? Они не могут их взломать :) не правда ли мило? Так получается, что сообщения в Gmail и Skype шифруются "иностранными" алгоритмами. Ну уж явно не по советскому ГОСТу подбирались алгоритмы шифрования. И вот потому, нужно оградить их использование, так как эти сервисы грозят государственной безопасности.

Порадовало, что в итоге в РФ решили собрать некую группу, которая до 1 октября должна выработать предложения по использованию алгоритмов криптографии в сетях общего использования. Вот мне интересно: "Как они будут вырабатывать эти самые предложения?" Будут сидеть и дружноо пытаться расшифровать сообщения? Как говорится: "Сломаем - не запретим. не сломаем - запретить нахер."

Если так подумать, то ФСБ должны тогда обратить внимание еще и на Microsoft-овский MSN, Twitter. Что там еще есть? А вообще мое предложение. это завести всем спец. службам аккаунты в 4SQ, добавить всех террористов в друзья и тогдап все будет оооочень хорошо. Сразу видно кто, где и что делает! Например Джамшут: "Прилетел в Домодедово, скорей бы пройти осмотр, опаздываю на фейерверк на ст.м. Стадион Ильича." Неправда ли здорово?

А вообще не нужно сразу говорить о своей беспомощности. Ничего хорошего в запретах сервисов нету! И пользы обществу точно не принесет.

10 марта 2011 г.

ASP.NET поисковый движок

На днях встала передо мной задача: "Найти и установить на уже готовый сайт поиск". Сайт скажу сразу достаточно большой, не одна таблица в базе, огромное количество данных. Поиск на нем есть, но его даже тормознутым нельзя назвать, он вообще никакой. Результатов поиска можно ожидать не только минут 5, но и пол часа. Есть ли пользователи, которые будут столько ждать? Не думаю, что есть такие! Потому начался долгий и упорный поиск движка. Мысль реализовать поисковый механизма самим отпала сразу, так как для реализации, чего-то нормального потребуется не один день и не факт, что с нашим количеством данных, это сразу будет работать быстро и верно.


Сказать честно бесплатных движков под .NET я почти не нашел. Есть решения платные, которые позволяют искать по БД, файловой системе и еще у черта на куличках. Но все это не подходило по одной причине - слишком дорого! Порывшись примерно день я все же натолкнулся на то, что хотел. Lucene.NET поисковый движок портированный с Java, бесплатный и, насколько можно судить по куче отзывов, достаточно мощный. Единственный недостаток, это малое количество документации и примеров. Хотя книги все же есть, на английском, но есть. Сейчас я занимаюсь тем, что интегрирую данную библиотеку с сайтом и могу сказать, что все проходит достаточно гладко и поиск работает отменно.


PS. В ближайшее время постараюсь найти время и написать пару статей по использованию данного движка.

15 февраля 2011 г.

Русский twitter

Вроде как где-то до Нового года пробежалась информация, что в twitter хотят забабахать русский язык. Эту новость лично я воспринял просто и не сильно обратил на это внимание.


Мне русский язык там не надо, все что мне надо я знаю. И вообще я на сам сайт даже не залажу и все делаю, через свой клиент Tween который вообще японский и только с выходом в релиз прошлой версии у меня английский в нем нормальный стал, так что какой уж тут русский.


Как-то непонятна обеспокоенность некоторой части twitter-сообщества, которые против русского языка. Одна из причин, которых мне сегодня привели, это то, что сразу будет наплыв мальчиков-девочек 13-16 лет, плакающих о своей жестокой судьбе и жизни. Но господа и дамы я не думаю, что таким мальчикам и девочкам будете интересны Вы, да и это как-то по лучше бездушных ботов, от отжигов, которых иногда плакать от смеха хочется. Да и вообще, не фоловишь их и все. Не видишь даже это огромное скопления "Жизнь говно, солнце гребанный фонарь".


Введение русского языка, как мне кажется, хороший шаг. Так как действительно привлечет к хорошему сервису много людей. Для компании это деньги, а для twitter-сообщества, это расширение. Ведь не только девочки и мальчики лет 13-16 полезут=) Вообще я только за переводы нормальных интернет сервисов на русский язык, это их популяризирует для обычных русских людей.

26 января 2011 г.

Загадочный DataGrid

Представьте ситуацию, когда у Вас страница, на которой ничего толком-то и нету грузится 15 секунд. Что делать? Оптимизировать конечно!


Сначала я проверил как быстро выполняются запросы к БД, оказалось очень быстро, просто мгновенно. Далее тестам подверглись некоторые куски кода, которые тоже показали хорошие результаты. Пришлось включить трассировку для страницы, увидеть и ужаснуться. Render страницы порядка 14-16 секунд. Как Вам?


Идем дальше и выясняем, что рендерится так долго исключительно DataGrid в который мы передаем порядка 25 записей. Но что оказалось самым удивительным, это тот факт, что отрисовка контролов LinkButton и ImageButton, как раз и давала нам наши тормоза. Потратив кучу времени на поиски хоть чего-то по этой проблеме в Интернете, я ничего не нашел. А проблема была решена простым переименованием контролов. Никаких скриптов на данные контролы не накручено, ничто с ними не работает. Вот так вот! Если получится докопаться до истины, то чуть позже напишу, из-за чего так получилось?

1 декабря 2010 г.

Google Chrome: Отображение полос прокрутки

Проблемы с разной поддержкой стандартов CSS в браузерах не нова, ей столько же сколько и самим браузерам. Потому каждый день приходится сталкиваться с проблемами, когда в одном браузере наша страница отображается корректно в другом нет. Вот одна из таких проблем.

Страница сайта вызывалась в отдельном окне с обязательной полосой прокрутки слева. Для того, чтобы полоса прокрутки всегда была видна был написан вот такой CSS стиль.

div.main-window {
width:250px;
height: 200px;
overflow-y: scroll;
overflow:auto;
overflow: -moz-scrollbars-vertical;
position:absolute
}

По идее все должно работать в этом стиле есть элементы которые должны воздействовать как на все браузеры, так и на отдельные, такие как Chrome и Safari. Но не все оказалось так просто, Chrome ни в какую не хочет отображать полосу прокрутки, пока содержимое окна нормально в него влазит. Решение оказалось достаточно простое. После приведенного выше стиля, нужно добавить еще один, как показано ниже.

html div.main-window { overflow-y: scroll; }

10 ноября 2010 г.

Валидация с использованием JQuery и Web-сервисов ASP.NET

Валидация данных одна из самых больших проблем, каждого приложения. Записать данные нужно корректно, от этого зависит как будет работать ваше приложение. И часто с проверкой на корректность данных и происходит много проблем, так как часто нам нужно не только проверить, чтобы данные были, но и так же проверить, чтобы они имели необходимый нам формат.
Для проверки введенных пользователем данных в ASP.NET приложениях нам помогают контролы находящиеся в группе Validation в панели Toolbox в Visual Studio, но часто бывает, что мы их не используем или их возможностей не хватает для необходимой нам проверки, тогда приходится или искать контролы сторонних производителей, которые чаще всего стоят денег или изобретать что-то самому. Чем мы сегодня и займемся.

У нас есть список городов, который хранится в базе данных в таблице Towns.
Напишем web-сервис, который будет проверять, есть ли город в таблице.

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1), ScriptService, WebService(Namespace = "http://microsoft.com/webservices/")]
public class ValidationService : WebService
{
[WebMethod]
public bool VerifyTown(string inputTown)
{
using(dbDataContext db = new dbDataContext)
{
Town town = db.Towns.Where(t=>t.TownName == inputTown).FirstOrDefault();
return town != null ? true : false;
}
}
}

Как видно, это обыкновенный web-сервис. Едиственное, что он помечен атрибутом ScriptService, который говорит, что к данному веб сервису можно обращаться используя JavaScript или другие скриптовые языки.

Зарегистрируем наш web-сервис на странице и разместим необходимые нам элементы управления.
В txtTown вводится название города. lblErrorTown показывает сообщение об ошибке, если город введен неверно.

< script language="javascript" src="js/jquery.js" type="text/javascript" />










А вот и сам JQuery скрипт проверки.




Вот собственно и все. Единственный недостаток данного примера, что он не учитывает свойство ValidationGroup, но при желании его можно усовершенствовать и и на работу со своим ValidationGroup. Так же не будет лишним добавить спроверки при сабмите формы.