Перейти к содержимому

Последние записи

28
Ноя

Как устроен Oracle RAC 11gR2

Всем привет! В процессе поиска в инете информации об отказоустойчивости ораклового кластера с точки зрения клиентских запросов к SCAN-адресам, наткнулся на вот эту просто офигительную оракловую презентацию. В ней очень подробно показана архитектура кластера, как устроены и взаимодействуют компоненты кластера, как происходит heartbeat между нодами кластера, как устроен процесс выкидывания ноды из кластера в случае выхода ноды из строя. Помимо всего прочего, в презентации много отсылок на конкретные металинковские документы, что тоже очень приятно. Презентация выложена на slideshare, так что можно посмотреть ее прям здесь, или же перейти на slideshare.com и посмотреть или скачать там.
ПодробнееRead more

22
Ноя

iOS 6: очистка кэша Safari

Столкнулся тут с проблемой очистки кэша в Safari на 6-й iOS. Раньше, до пятой версии в системных настройках Safari был отдельный пункт «очистить кэш». В шестерке, впрочем как и в пятерке там осталось всего 2 пункта: очистить куки и удалить историю. Если открывать сайт непосредственно в Сафари, проблем с кэшем не возникало — достаточно просто обновить страницу. А вот если вы вынесли сайт на Home Screen, то вот тут возможны проблемы. Причем удаление приложения со стола, заход и обновление страницы в Сафари и вновь добавление иконки на рабочий стол не помогло. Оказывается есть способ это исправить.
ПодробнееRead more

10
Сен

Самые необычные машины на Московском автосалоне 2012

Ну что ж, я все-таки добрался до Московского автомобильного салона ММАС-2012. А поскольку, буквально за день до этого, у меня появился новый фотик :), то я не мог не взять его с собой дабы поснимать машинки. Поскольку снимать все подряд — скучно, да и кто не видел обычные серийные машины, пусть и идеально чистые и в самых нафаршированных комплектациях, я решил показать самые необычные машинки с этой выставки, а именно — концепткары и прочие прототипы.

ПодробнееRead more

27
Авг

Задвоенные приложения в меню «open with» в MacOS Finder

Всем привет!
Давно я что-то не писал в блог. Вот небольшая заметка для тех, у кого список приложений «Open with» в Finder содержит кучу хлама в виде кучи старых версий программ и/или вообще программы, которых на маке уже нет.
Лечится это одной магической командочкой в терминале. Вот она (обратные слеши в конце написаны просто для переноса строк, а так, командочка одна):

kostik@KOsTIK: ~> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/\
> LaunchServices.framework/Versions/A/Support/lsregister \
> -kill -r -domain local -domain system -domain user
ThrottleProcessIO: throttling disk i/o

ПодробнееRead more

23
Июл

Профилирование и отладка php-приложений с помощью xhprof & FirePHP.

Всем веб-разработчикам, особенно в высоконагруженных проектах, рано или поздно приходится сталкиваться с профилированием своих приложений. Конечно, все мы знаем xdebug, с помощью которого можно проводить отладку серверной части. Однако, в тяжелых RIA-приложениях значительно чаще приходится отлаживаться в связке фронтенда+бэкэнд, всякие ajax-запросы, скорость отработки конкретных скриптов и все такое прочее. И для этих задач есть довольно-таки не плохой набор инструментов. Это xhprof и firephp.

ПодробнееRead more

18
Июн

OAuth — это хорошо, или почему у меня стопицот аккаунтов на разных сайтах.

Недавно, регистрируясь на одном сайте поймал себя на мысли, что OAuth — это конечно хорошо и круто, но почему-то у меня не уменьшается количество всяких разных аккаунтов/логинов на разных ресурсах. Хочу высказать свои соображения на этот счет. Если кому интересно — велкам!

ПодробнееRead more

23
Апр

Настройка Ораклового двух-нодового кластера базы данных Oracle RAC 11gR2.

В этой статье, или серии статей, я расскажу, как поднять оракловый кластер 11gR2 из двух нод, и затем поднять на этом кластере базу данных и настроить отказоустойчивый сервис. В качестве основной ОС будем использовать Linux CentOS 5 x86_64.
Вся процедура состоит из нескольких последовательных этапов:

  1. Настройка окружения: настройка dns-сервера, выделение ip-адресов.
  2. Подготовка железа: серверы, массивы/хранилища. /* Опустим этот этап, ибо он будет специфичен в каждом случае */
  3. Подготовка операционной системы: установка необходимых пакетов, создание необходимых юзверей и структуры каталогов.
  4. Подготовка и конфигурирование ASM.
  5. Установка Oracle Grid Infrastructure 11gR2.
  6. Установка сервера базы данных Oracle RDBMS Server 11gR2.
  7. Создание cluster-based сервиса базы данных с TAF (Transparent-Application-Failover) и FAN (Fast Application Notification).
  8. Радость по поводу успешной настройки 🙂

ПодробнееRead more

31
Мар

50 лучших мотивирующих фильмов

Наткнулся тут где-то, на вот такой список из 50 лучших мотивирующих фильмов. Некоторые из фильмов я уже смотрел, и да, могу подтвердить, они правда достойные быть упомянутыми тут. «Достучаться до небес» — это вообще один из моих самых любимых! Я смотрел его уже неоднократно, и с удовольствием посмотрю еще не один раз.

Сегодня посмотрел еще «Несколько хороших парней» — тоже не пустой фильм, хотя я и не очень люблю Тома Круза.
Поэтому если вам наскучили эти дурацкие современные блок-бастеры и просто фильмы-однодневки, то вот список хороших фильмов. Не уверен насчет нескольких позиций, ну да в любом случае, фильмы хорошие, так что пусть список будет такой, какой есть.

ПодробнееRead more

26
Мар

KWCount — jQuery-плагин для подсчета количества символов/слов в полях input и textarea

Всем привет!

В одном из проектов потребовалось подсчитывать количество символов, введенных в поля типа input[type=text] и textarea. В беглом анализе гугла ничего не приглянулось и решил написать такой плагинчик сам. В результате появился плагин под названием KWCount.

Данный плагин может быть полезен когда, например, у вас есть некоторые поля с ограниченной длинной, ну, скажем, название товара, которое не должно быть длинее 100 символов, или краткое описание для тега meta description, которое не должно превышать 160 символов. В админке, при заполнении этих полей было бы здорово видеть, сколько уже символов введено и сколько еще можно ввести.

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

В плагине есть некоторые настройки, которые могут помочь сконфигурировать поведение плагина.
Посмотреть подробнее и почитать можно тут. Исходники лежат на github’е, так что если кому понравился — форкайте, скачивайте и пользуйтесь на здоровье 🙂

22
Фев

Git sugar for ur bash

Решил написать небольшую заметку о том, как сделать работу с git’ом из консоли немного удобнее и приятнее.
Хочу осветить 3 небольших момента:

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

Отображение текущей ветки в приглашении.

Не знаю, кому как, а я привык работать с git из консоли. Поэтому у меня всегда открыт шелл с директорией проекта. И порой забываешь, в какой ты сейчас ветке находишься, и надо писать git status, чтобы это увидеть. Крайне удобно было бы сразу видеть текущую ветку, да и вообще статус рабочей директории. Без проблем! Все что нужно, это немного подправить свой .bash_profile|.bashrc. Меняем приглашение шелла слендующим образом:

[11:47] cmd#:5003
kostik@KOsTIK: ~> vim .bash_profile

# Для начала определить некоторые цвета:
red='\033[0;31m'
RED='\033[1;31m'
blue='\033[0;34m'
BLUE='\033[1;34m'
cyan='\033[0;36m'
CYAN='\033[1;36m'
green='\033[0;32m'
GREEN='\033[1;32m'
yellow='\033[0;33m'
YELLOW='\033[1;33m'
purple='\033[0;35m'
PURPLE='\033[1;35m'
NC='\033[0m'              # No Color (нет цвета)



## Добавим неско полезных функций
# Статус репозитория
function git_dirty_flag() {
    fl=`git status 2>/dev/null | grep -c :`
    if [ $fl -gt 0 ]; then
        fl="\[${PURPLE}\]*"
        echo $fl
    fi
}

# Ветка
function parse_git_branch() {
    br=`git branch --no-color 2>/dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'`
    if [ "$br" != "" ];   then
        br="\[${RED}\] {\[${CYAN}\]$br\[${RED}\]}"
        echo $br
    fi
}


# Настроим само приглашение. Поскольку в приглашении используются функции, нельзя просто написать
# PS1="\[${GREEN}\][\[${CYAN}\]\A\[${GREEN}\]] cmd#:\[${PURPLE}\]\!\n\[${GREEN}\]\u\[${RED}\]@\[${green}\]\h\[${GREEN}\]: \[${PURPLE}\]\w$(parse_git_branch)$(git_dirty_flag)\[${GREEN}\]>\[${NC}\] "
# Оно не будет работать.
# Но это легко поправить если использовать в качестве приглашения функцию, которая автоматически будет вызываться каждый раз для отображения приглашения, а следовательно она же будет вычисляться и все будет хорошо. Поэтому делаем так:
function powerprompt()
{
   PS1="\[${GREEN}\][\[${CYAN}\]\A\[${GREEN}\]] cmd#:\[${PURPLE}\]\!\n\[${GREEN}\]\u\[${RED}\]@\[${green}\]\h\[${GREEN}\]: \[${PURPLE}\]\w$(parse_git_branch)$(git_dirty_flag)\[${GREEN}\]>\[${NC}\] "

}

# говорим, что наше приглашение - это то, что делает функция powerprompt
PROMPT_COMMAND=powerprompt

После этого надо или перезайти в консоль или просто применить новые изменения:

[11:47] cmd#:5003
kostik@KOsTIK: ~> . .bash_profile

Теперь наша консоль будет выглядеть вот так:

# Это приглашение в обычном каталоге
[11:57] cmd#:5004
kostik@KOsTIK: ~> 

# Это приглашение в папке с git репозиторием с чистым деревом
[11:58] cmd#:5164
kostik@KOsTIK: ~/Projects/VISION_Admin {dev}> git status
# On branch dev
nothing to commit (working directory clean)

# Это приглашение в папке с git репозиторием, где есть незакоммитенные данные
[12:00] cmd#:5166
kostik@KOsTIK: ~/Projects/VISION_Admin {dev}*> git st
# On branch dev
# Untracked files:
#   (use "git add ..." to include in what will be committed)
#
#     src/1.qwe
nothing added to commit but untracked files present (use "git add" to track)

Так как Syntax Highlighter все раскрасил по своему, то вот скриншотик как это выглядит на самом деле.

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

Автодополнение веток и тэгов.

Такс, текущую ветку в шелле мы уже видим. Но ведь довольно часто приходится переключаться на другие ветки или тэги. Было бы крайне удобно, если бы шелл подсказывал названия веток так же как и имена директорий и команд. В OS X токого по умолчанию нет. Бинарные пакеты с git’ом ставят только сам git. В Убунтах, кажется, автодополнение есть сразу. Но тем не менее, всем кому это актуально, вот как это легко сделать:

# Качаем вот этот файлик с гитхаба
[12:12] cmd#:5010
kostik@KOsTIK: ~> curl https://github.com/git/git/raw/master/contrib/completion/git-completion.bash -OL


# Прописываем следующую строчку в своем bash_profile
[12:13] cmd#:5011
kostik@KOsTIK: ~> vim .bash_profile

source ~/git-completion.bash

# Перезаходим в консоль или сразу применяем изменения
[12:14] cmd#:5012
kostik@KOsTIK: ~> . .bash_profile

Все. После этого по табу у вас будут дополнятся ветки и тэги, как локальные так и удаленные.

[12:12] cmd#:5170
kostik@KOsTIK: ~/Projects/VISION_Admin {dev}> git br -a
  cam-group_hardware_setting
* dev
  js-refac
  master
  position_camgroup
  processes
  remotes/origin/cam-group_hardware_setting
  remotes/origin/dev
  remotes/origin/ext_backup_upload
  remotes/origin/fix2032
  remotes/origin/js-refac
  remotes/origin/master
  remotes/origin/position_camgroup
  remotes/origin/processes
[12:17] cmd#:5171
kostik@KOsTIK: ~/Projects/VISION_Admin {dev}> git co
1.0.0a                              1.1.1                               cam-group_hardware_setting          js-refac                            origin/ext_backup_upload            origin/position_camgroup           
1.0.10                              FETCH_HEAD                          dev                                 master                              origin/fix2032                      origin/processes                   
1.0.7                               HEAD                                ext_backup_upload                   origin/cam-group_hardware_setting   origin/js-refac                     position_camgroup                  
1.1.0                               ORIG_HEAD                           fix2032                             origin/dev                          origin/master                       processes                          
[12:17] cmd#:5171
kostik@KOsTIK: ~/Projects/VISION_Admin {dev}> git co p
position_camgroup   processes           

Настройка алиасов.

Ну и последний маленький кусочек оптимизации работы с git — настройка алиасов. Программисты — вообще народ ленивый, собственно именно по этому они пишут программы, а не делают все руками 🙂 И мне вот каждый раз набирать git checkout или git commit очень длинно и лень. Благо в git есть замечательные алиасы. Добавляем в свой gitconfig алиасы на свой вкус. У меня например забиты вот такие:

[12:16] cmd#:5012
kostik@KOsTIK: ~> vim .gitconfig 
[alias]
····logp = log --pretty=format:\"%h — %an: %s\"
····remotes = remote -v
····co = checkout
····st = status
····ci = commit
····br = branch
····logpg = log --pretty=format:\"%h — %an: %s\" --graph
····logg = log --graph
    hist = log --pretty=format:\"%h %ad | %s%d [%an]\" --graph --date=short

После этого достаточно написать в консоли git logpg и гит превратит это в git log —pretty=format:\»%h — %an: %s\» —graph

Ну вот и все. Если кому интересно, вот мой bash_profile на гитхабе.