Добро пожаловать к весёлому программеру!

Простой Event Bus на JS

Автор: Александр Первушкин
Все, кто разрабатывает приложения на JavaScript, кто хочет использовать в своих творениях шину событий, предлагаю вашему вниманию простой и рабочий вариант глобального Event Bus.

Итак, рассмотрим:
simple-event-bus.js

var EventBus = function () {
var $bus = $({});
this.subscribe = function (eventHandler) {
$bus.bind(eventHandler.name, eventHandler.handler);
};

this.unsubscribe = function (eventHandler) {
$bus.unbind(eventHandler.name);
};

this.throwEvent = function (event) {
setTimeout(function () {
$bus.trigger(event.name, [event.args]);
}, 0);
};
};

var Event = function (name, args) {
this.name = name;
this.args = args;
};

var EventHandler = function (name, handler) {
this.name = name;
this.handler = handler;
};

document.eventBus = new EventBus();
var EVENT_BUS = document.eventBus;
var EVENTS = {};

JavaScript, jQuery, Events, события

Записки по JavaScript 2

Автор: Олег Кабанов
Это продолжение первой части

9. Обход массива/объекта
Если мы обходим массив, то самым простым и стабильным вариантом будет обычный цикл for, но.. он подходит только для массивов

var array = [5,3,7];
for(var i = 0; i < array.length; i++) { console.log(array[i]);}

Также отработает each у jQuery, плюс - не надо выбирать элемент по индексу каждый раз, но немного громоздко

var array = [5,3,7];
$(array).each(function(index, element){console.log("array[" + index + "] = " + element);})

Есть в JS ещё и внутренний each "for(index in array)", он может перебирать как массивы, так и объекты, но тут есть опасность: если мы расширим prototype, то в индексах появятся все поля из prototype, чтобы от этого избавиться - надо использовать hasOwnProperty:

var array = [5,3,7];
var index = 0;
for(index in array) {
if (!array.hasOwnProperty(index))
continue;
console.log("array[" + index + "] = " + (array[index]));
}
JavaScript, jQuery, заметки

Как написать плагин для jQuery

Автор: Андрей Кабанов
Многие осознают, что такое плагин для jQuery, но почему-то создают их единицы, как, впрочем и я. В этой статье я опишу пример создания полноценного плагина с событиями и настройками.

Цель тестового плагина: выводить абстрактный опросник в процентах.
jQuery, plugins, event bus

JavaScript EventBus на jQuery, как создавать собственные события

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

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

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

Рассмотрим как генерировать и отлавливать такие события на jQuery (допустим что событие принимает вся страница, т.е. объект document):

// таким образом выбросится событие onChangeCountry - смена страны
// в параметре передаётся countryId - id страны, на которую указал пользователь
// этот метод генерируется где-то внутри виджета
$(document).trigger("onChangeCountry", {countryId: countryId});

//Такой код пишется внутри любого виджета, которому важно отреагировать на смену страны.
$(document).on("onChangeCountry", function(event, data) {alert(data.countryId);});

При применении такого подхода - код получается слабосвязанным, что упрощает поддержку и доработки.
JavaScript, jQuery, Events, события, заметки

JSP scopes - ограничение видимости переменных

Автор: Олег Кабанов
При выводе переменной (к примеру "test") с помощью JSP, переменная ищется в нескольких областях видимости и при совпадении имён, мы можем получить совсем другое значение, которое допустим лежит в сессии или создано с помощью тега "set" на jsp. Вот стандартные JSP переменные для сужения области поиска:


${param.test} --> request.getParameter("test")
${requestScope.test} --> request.getAttribute("test");
${sessionScope.test} --> session.getAttribute("test");
${applicationScope.test} --> application.getAttribute("test"};
${pageScope.test} --> pageContext.getAttribute("test"};
${test} --> pageContext.findAttribute("test");
Java, JSP, Scopes

Записки по JavaScript

Автор: Олег Кабанов
Со временем в голове копятся полезные заметки по JavaScript. Этот пост я буду пополнять по мере появления новых идей или, когда посчитаю новый приём очень полезным.

Итак, сами приёмы/заметки, которые я частенько использую:

1. удаление элемента по определённому правилу (2 варианта):
// изменяет текущий массив
for(var index = array.length - 1; index >= 0; index--) {
if(array[index].forRemove) {
array.splice(index, 1);
}
}

// возвращает новый
array.filter(function(val){ return val > 3; })

2. создание функции и выполнение

// используется для изолирования пространства имён
(function() {
// Тело функции
var a = 10; // переменная a не будет видна больше никому, за пределами этой функции
})();

// можно будет вызывать повторно
(function fun1(page) {
// Тело функции
})(1);

// Часто так пишу на выпадающие списки
$("#id").change(function(e) {
// Тело функции
}).change();

JavaScript, jQuery, заметки

Java RSS ROM

Автор: Андрей Кабанов
Для написания RSS лент на Java очень часто используют framework ROM, которым я и воспользовался при разработке блога.
RSS состоит из заголовка сайта, краткого описания ленты, ссылки на саму ленту и списка элементов, например:
<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
<channel>
<title>Блог весёлого программера</title>
<link>http://java.kabit.ru/ru/feed.html</link>
<description>Интересные заметки программера</description>
<item>
<title>Java RSS на ROM</title>
<link>http://java.kabit.ru/ru/post/....html</link>
<content:encoded>HTML text</content:encoded>
<pubDate>Sun, 11 Dec 2011 20:00:00 GMT</pubDate>
</item>
</channel>
</rss>

Java, RSS, Rome

Подсветка вывода для GIT

Автор: Андрей Кабанов
Для того чтобы включить подсветку вывода в консоли для GIT, необходимо выполнить команды:
git config --global color.diff true
git config --global color.status true
git config --global color.branch true
git config --global color.interactive true
GIT, console

PAE - простое решение большого ограничения

Автор: Олег Кабанов
В этой статье я хотел бы рассказать, как увеличить объём поддерживаемой оперативной памяти на 32 битной операционной системе до 64 ГБ. Такая потребность не редко возникает последнее время у людей, которые не могут перейти на 64 битную платформу.
PAE, Windows, Linux, 64 бит

C++ без галстука (часть 1 : Final class )

Автор: Андрей Грачёв
Сейчас моя деятельность плотно связана с языком C++. По моему мнению этот язык очень гибкий и мощный, хотя у него есть недостатки перед java и C#. Некоторые из недостатков я постараюсь устранить воспользовавшись тем, что предоставляет мне язык.

Подразумевается целый цикл заметок, в которых я покажу, что многие фичи java и C# могут быть реализованы на С++.

В первой части я хотел бы начать с модификатора final из java применительно к классам.
С++, Final class

Rspec для Ruby On Rails часть 1

Автор: Олег Кабанов
Хочется поделиться своим опытом работы с rspec, в том числе для Ruby On Rails.

Rspec - это инструмент, помогающий программистам на Ruby писать тесты для своего кода. В этой части я хотел бы показать несколько базовых примеров как им пользоваться, надеюсь вам будет интересно.
rspec, ruby, для начинающих

Что бы поделать?

Автор: Олег Кабанов
Хочется обсудить тему проекта. Стоп! Кто же обсуждает тему проекта в открытую? Ведь могут украсть и сделать раньше! А мне не жалко, я хочу поделиться одной идеей, пусть я её никогда не разработаю, время ведь не хватает очень часто, но вдруг идея моего проекта когда-то вырастет и будет большой сервис, вот здорово!
Идеи

N-мерный динамический массив

Автор: Андрей Грачёв
На днях перед мной встала задача, в которой использовался n-мерный гиперкуб. Как известно, в C++ динамический n-мерный массив создать не получиться при неизвестном n. Ну что же, тогда напишем его!
С++, Динамический массив

Пример работы с cURL php

Автор: Олег Кабанов
cURL — это свободная, кроссплатформенная служебная программа/библиотека для передачи файлов по различным протоколам с синтаксисом URL. Официальный сайт: http://curl.haxx.se/ , с полной документацией и самим продуктом.
curl, php, для начинающих