среда, марта 25, 2009

Удивительный мир шахмат

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

Сижу на http://freechess.org/, из всех клиентов использую BabasChess (http://www.babaschess.net/) - самый продвинутый клиент, с очень богатым GUI, очень шустрый и удобный, так что если кто решится войти в мир шахмат, лучше начать сразу же с него :)

Поводом для написания темы послужили те игры и ситуации, пару скриншотов которых выкладываю сейчас - впредь хочу "коллекционировать" интересные ситуации в шахматах и заливать сюда :) просто чтобы похвастаться :) ... иногда, рассматривая какие то ситуации на шазматном поле, понимаешь что вообщем-то безвыходные ситуации существуют :)

итак, для затравки:








Вот тоже интересная ситуация, когда ход белых, т.е. просто реально почти физическое давление на противника:





ps: если кто захочет со мной сыграть, welcom, мой fics username - dushes
pps: в основном специализируюсь :) на суперблитцах 3-0, когда дается всего 3 минуты каждому игроку на проведение игры, или 2-12, 2 минуты времени, с каждым ходом дается 12 секунд.




вторник, марта 24, 2009

Кастомизация стандартных валидаторов

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


В результате родился скрипт, текст которого приведен в конце топика.





В качестве примера покажу, как выглядит страница с использованием стандартных валидаторов:






И после применения javascript:









Чтобы добиться такого эффекта, мне требуется дописать в конце страницы или на событие pageLoaded (если использую на странице ScriptManager & PageRequestManager) следующий javascript-код:




<script language="javascript" type="text/javascript">
Web.Customization.validatorsStylingApply();
Web.Customization.invalidatedControlStyleName = "invalidatedControl";
Web.Customization.invalidatedSelectControlStyleName = "invalidatedSelectControl";
</script>





Свойство invalidatedControlStyleName используется для указания, какой стиль будет применен к валидируемому контролу в случае, если сам валидатор !isvalid; После того, как валидатор стал валидным - восстанавливается тот класс контрола, который был до применения стиля;

И описать соотвествующий стиль:

<style type="text/css">

.invalidatedControl {
border: 2px solid #DD0000;
}

</style>



Также поддерживается та ситуация, когда к контролу применяется несколько валидаторов, например:


<td>
<asp:TextBox ID="txtAdministrativeEmail" runat="server" Text="" Columns="40" MaxLength="40" Width="240px"></asp:TextBox>
<asp:RequiredFieldValidator ID="rfvEmail" runat="server"
ControlToValidate="txtAdministrativeEmail"
SetFocusOnError="false"
EnableClientScript="true"
Display="Dynamic"
ErrorMessage="Enter the correct administrative email"
Font-Size="12pt"></asp:RequiredFieldValidator>

<asp:RegularExpressionValidator ID="revEmail"
runat="server"
ControlToValidate="txtAdministrativeEmail"
Display="Dynamic"
SetFocusOnError="false"
EnableClientScript="true"
ErrorMessage="Invalid administrative email, please enter correct value..."
ValidationExpression=".*@.*\..*" ></asp:RegularExpressionValidator>
</td>






Собственно, сам код javascript-класса Web.Customization:



/* customization of validation controls */
var Web = {};
Web.Customization = function() {
///
///Helper class for the standart asp.net validators styling
///

this.invalidatedControlStyleName = "invalidatedControl";
this.invalidatedSelectControlStyleName = "invalidatedControl";
}

Web.Customization.prototype.validate = function() {
///
///Custom Validation proxy method
///

var hooked_result = false;
if (typeof Page_Validators != 'undefined' &&
Page_Validators != null) {

if (this["fwvalidator"] != null) {

var validator = this["fwvalidator"];
var fwevaluationfunction_object = eval("hooked_validator = " + this["fwevaluationfunction"]);
eval("hooked_result = hooked_validator(validator);")
validator.isvalid = hooked_result;
var object = $get(this["controltovalidate"]);
var controlstyle = "";

if (hooked_result) {
for (var i = 0; i < Page_Validators.length; i++) {
var previousValidator = Page_Validators[i];

if (previousValidator.controltovalidate == this.controltovalidate) {
if (previousValidator.id != this.id) {
hooked_result = previousValidator.isvalid;
}
else if (previousValidator.id == this.id) {
break;
}
}
}
}

if (hooked_result) {
if (this["controlstyle"] != null) {
controlstyle = this["controlstyle"];
object.className = controlstyle;

}
else
object.removeAttribute("className");

if (object.tagName == 'SELECT') {
var parentObj = object.parentElement;
if (parentObj.tagName == 'DIV') {
parentObj.removeAttribute("className");
}
}

}
else {
if (object.tagName == 'SELECT') {
var parentObj = object.parentElement;
if (parentObj.tagName == 'DIV') {
parentObj.className = Web.Customization.invalidatedSelectControlStyleName;
}
}
else {
object.className = Web.Customization.invalidatedControlStyleName;
}
}
}
}

return hooked_result;
};

Web.Customization.prototype.validatorsStylingApply = function() {
///
///Applies the custom styling logic into the all validators on the current page
///

if (typeof Page_Validators != 'undefined' &&
Page_Validators != null) {
var validators = Page_Validators;

for (var i = 0; i < validators.length; i++) {
if (validators[i].attributes["evaluationfunction"] != null) {

if (validators[i].attributes["display"] != null) {
validators[i].attributes.removeNamedItem("display");
}

var displayAttribute = document.createAttribute("display");
displayAttribute.value = "None";
validators[i].attributes.setNamedItem(displayAttribute);

if (validators[i]["fwvalidator"] == null) {
validators[i]["fwvalidator"] = validators[i];
validators[i]["fwevaluationfunction"] = validators[i].attributes["evaluationfunction"].value;
validators[i]["controltovalidate"] = validators[i].attributes["controltovalidate"].value;

var control = $get(validators[i]["controltovalidate"]);
if (control != null &&
control.className != null &&
control.className != '')
validators[i]["controlstyle"] = control.className;

validators[i].attributes["evaluationfunction"].nodeValue = Web.Customization.validate;
}
}
}
}
}

/* global objects initialization */
Web.Customization = new Web.Customization();





удачи в использовании, надеюсь, сама идея решения кому-нить пригодится...



Так и не нашел полный текст - Это я, добрый ЭЭх, а это мое ээхо...



...
- КТО ТАМ?

- Это я, добрый Ээх. Я здесь.
- И я здесь!
- А ты кто такой? Откуда взялся?
- С того берега моря.
- На чем приехал?
- Оседлал хромую блоху, сел и приехал.
- Море, что, лужа?
- Может и лужа, да только ту лужу орел не перелетел.
- Значит, орел - птенец!
- Наверно, птенец. Да только тень от его крыльев город закрывает, в городе ночь настает.
- Город-то, небось, крооохотный!
- Через тот город заяц бежал - не перебежал.
- Выходит, заяц маааленький!
- Заяц – как заяц. Из его шкуры тулуп вышел.
- Куда вышел?
- Вышел из того города, где заяц бежал, на который тень от орла упала, и пошел, куда глаза глядят.
- Чьи глаза???
- Глаза того тулупа, который из шкуры зайца вышел, в городе, где ночь настает, когда над ним птенец пролетает верхом на хромой блохе.
- ЧЕГО?!!!!
- Чего-чего. На хромой блохе с того берега моря, которое зайцу не перелететь, орлу не перебежать, хоть море - не море, а так - лужа посреди города, где тень от блохи на зайца упала и насмерть убила, а из шкуры зайца тулуп вышел и пошел, куда глаза глядят. Тут заяц кааак прыгнет!
- КАКОЙ ЗАЯЦ???
- Насмерть убитый – как прыгнет, куда глаза глядят, аж на тот берег моря, которое ни перелететь, ни перебежать, из которого тулуп вышел, на который тень от блохи упала и зайца убила, хоть заяц – не заяц, а орел!
- КАКОЙ ЗАЯЦ??? КАКОЙ ОРЕЛ??? КАКАЯ БЛОХА?????
- Повторить? Ну, значит, та самая блоха с того берега лужи…
...



ps: Какие мульты мы смотрели :)... ностальгия..

среда, марта 18, 2009

Курю

и читаю:
http://ru.wikipedia.org/wiki/Python


http://www.ibm.com/developerworks/ru/library/l-cpdecor/index.html




ну и собственно bdfl:
http://www.python.org/~guido/



ps: занимаюсь пайтоном второй месяц ... сказать, что сильно полюбил язык пока не могу, но и многих фишек языка уже не хватает :)




судя по отзывам в инете - основной бич это отсутствие вменяемой IDE, сам юзаю Wing - из всех рассматриваемых наиболее достойная




pps: a, b = b, a + b :)

пятница, марта 06, 2009

Удалить????






Курю

четверг, марта 05, 2009

Вот что значит правильно выбрать имя....Gooooooooooooooo!L!e

Альбом: Blog
Ps: стоило ошибиться в одной букве и мы получаем совсем другой поисковик :)