суббота, 29 декабря 2012 г.

Проверка поля на null в шаблоне Django

Если поле в модели имеет значение Null, то при печати в шаблоне выводится значение «None». Если значение не пустое, то печатаем его, в противном случае — печатаем неразрывный пробел.

{% if doc.close_date %} 
    <p>{{ doc.close_date }}</p>
{% else %}
    <p>&nbsp;</p>
{% endif %}    

В примере выше: doc — класс в модели, close_date — поле в модели.

четверг, 27 декабря 2012 г.

Правильная покупка подписки на Lumosity.com

Наверное многие знакомы с сайтом по «прокачке» мозга Lumosity. Хотя и нет версии на русском языке, но всё интуитивно понятно и на английском! Это действительно качественный продукт, на который я решил оформить годовую подписку. До этого я оплачивал месяц, для «пробы», понял, что это действительно «моё» и вот теперь оформил подписку на более длительный срок. Надо сказать, что оплата за месяц является самой дорогой: порядка 14 долларов. Время от времени Lumosity присылает ненавязчивые предложения на годовую подписку со скидкой 35%. Но есть ещё более выгодный вариант: можно найти промо-код в Интернете. Я такой код нашел: (EXCELLENT40). В итоге годовая подписка обошлась мне всего в $47,97 (вместо $79,95), что конечно же стоит того.

Оплата через PayPal. После оплаты в настройках PayPal добавится автоматический ежегодный платёж в $79,95. Его необходимо сразу же отключить! Чтобы изменить или отменить соглашение с Lumosity.com, надо войти в свою учетную запись PayPal, перейти в раздел «Профиль» и нажать «Мои средства». Необходимо обновить соглашение в разделе «Мои предварительно подтвержденные платежи».

воскресенье, 23 декабря 2012 г.

Как из виртуальной машины получить доступ к папке на реальной машине?

В качестве программы для виртуализации я использую Virtual Box.

Для начала необходимо выполнить: Devices — Shared Folder. В появившемся окне добавляем папку с реальной машины, указываем краткое Folder Name (для примера, project) и необходимые права доступа.

На реальной машине нужно дать необходимые права на расшариваемую папку.

Далее запускаем терминал в виртуальной машине (Debian в моём случае). Вводим команду:

$ su

(для работы от имени суперпользователя). Переходим в каталог mnt:

# cd /mnt/

и создаем точку монтирования project:

# mkdir project

Даём полные права на папку:

# chmod -R 777 /mnt/project/

Выполням монтирование:

# mount -t vboxsf -o uid=1000,gid=1000 project /mnt/project/

Для размонтирования выполняем команду:

# umount /mnt/project/

Как в Xfce4 добавить раскладку клавиатуры на панель?

Почему-то по умолчанию привычная раскладка клавиатуры в xfce4 не отображается на панели.

Поискав в Интернете, я нашел решение. Во-первых должен стоять плагин xfce4-xkb-plugin. (Он должен стоять, если мы устанавливали примочки из xfce4-goodies).

Чтобы добавить раскладку клавиатуры на панель, необходимо щелкнуть правой кнопкой мыши по панели и выбрать пункт «Добавить новый элемент». В появившемся списке находим «Раскладки клавиатуры» и нажимаем на кнопку «Добавить». Вот вроде бы так просто, а сначала и не знаешь, как это сделать...

четверг, 20 декабря 2012 г.

Базовая подготовка рабочей станции на Debian

Решил я освоить новую для себя операционную систему — Debian. Почитал их принципы и философию. Понравился упор на качество и стабильность.

Для установки необходимо скачать маленький образ диска: http://www.debian.org/distrib/netinst (180 МБ). Создать загрузочную флешку, на основе данного образа я думаю проблем не составит (если вы читаете данную статью).

В ходе установки, в окне выбора программного обеспечения снимаем все галочки, кроме «Стандартные системные утилиты».

Когда установка минимальной системы завершится, ставим следующие пакеты:

  • Очень лёгкая и быстрая графическая среда Xfce. Среда в отличие от KDE сразу поставилась с русским языком, но без программы входа в систему...

    # aptitude install xfce4

  • Программа для входа в систему, жалко, что в xfce по умолчанию нет ничего подобного.

    # aptitude install gdm

  • Всякие дополнения и небольшие «полезняшки» для окружения рабочего стола Xfce4:

    # aptitude install xfce4-goodies

  • Теперь можно перезагрузиться:

    # reboot

  • Система должна загрузиться в графическом режиме. Теперь добавляем раскладку клавиатуры на панель.

  • Текстовый редактор:

    # aptitude install gedit

  • Браузер:

    # aptitude install iceweasel

  • Просмотровщик pdf и djvu:

    # aptitude install evince

Вот собственно и всё: на выходе имеем стабильную систему, в которой нет ничего лишнего. Усилий и «танцев с бубном» было приложено минимум.

вторник, 18 декабря 2012 г.

Как в KDE добавить русский язык в систему?

Чтобы включить поддержку русского языка в KDE (ОС — Debian) необходимо установить пакет kde-i18n-ru:

aptitude install kde-i18n-ru

Затем: System Settings — Regional & Language — Language — Add Language — Russian — Apply. После чего нужно выполнить перезагрузку системы.

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

понедельник, 17 декабря 2012 г.

Как в DataGridView сделать активной нужную строку?

«Выделенная» строка в DataGridView и «активная» строка — разные понятия. Выделенная строка может быть не активной. Для того, чтобы сделать активной нужную строку, необходимо записать:

this.grid.CurrentCell = this.grid.Rows[ i ].Cells[ 0 ];

где i — номер нужной строки.

Как узнать, когда была установлена Windows?

Команда командной строки systeminfo содержит кроме всего прочего и дату установки Windows.

Вывод сообщений об ошибках в PostgreSQL

При возникновении ошибок в PostgreSQL бывает, что вместо сообщения об ошибке выводятся знаки вопроса. Чтобы устранить эту неприятность необходимо в файле postgresql.conf установить:

lc_messages: en_us.utf-8

Теперь ошибки будут выводиться на английском. Ну а как же русский, спросите вы? К сожалению установка свойству lc_messages значения ru_RU.utf8 не приводит к нужному результату.

суббота, 15 декабря 2012 г.

Как получить id добавленной записи в PostgreSQL

В PostgreSQL это очень просто. Нужно всего лишь добавить к запросу returning id. Вот пример:

string sql = "insert into city (name) values('Нижний Новгород') returning id;"

NpgsqlCommand cmd = db.cn.CreateCommand ( );
cmd.CommandText = sql;

int id = Convert.ToInt32( cmd.ExecuteScalar() ); 

среда, 12 декабря 2012 г.

Автоподбор высоты строки в DataGridView

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

this.grid.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;

понедельник, 10 декабря 2012 г.

Личный опыт оформления пластиковой карты от Сбербанка

Решил значит я в один прекрасный день оформить карту Visa Electron от Сбербанка... Условия вполне устраивали: 300 рублей за годовое обслуживание, наличие cvv2 кода для покупок в Интернете. Мобильный банк — вроде не нужная штука, 30 рублей в месяц, но первые 2 месяца бесплатно. В отделении банка, который находится рядом с домом, я написал заявление. Первая же непонятка: а почему не договор? В котором бы были прописаны все условия оказываемых услуг, стояли четкие сроки, обязанности сторон. Ну да ладно: заявление так заявление. Мне сказали прийти ровно через 3 недели за картой. Ни смс-уведомления, ни телефонного звонка конечно же не полагалось.

Пришел ровно через 3 недели в офис «Сбербанка», взял талон, но оказалось, что карта ещё не пришла. Оно и понятно, путь из Москвы до Нижнего Новгорода не близкий...

Наконец, пришел через 1 месяц после написания заявления (7 декабря). Карта оказалась готовой, я получил карту и конверт с pin-кодом. Пошел сразу же в банкомат, ввёл pin-код, положил тестовую 1000 рублей. Активировал «Сбербанк-Online», получил идентификатор пользователя, постоянный пароль и 20 временных паролей.

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

Вошел в «Сбербанк-Online» на компьютере с убунтой. Я наивно полагал, что обращение Уважаемый(ая) давно осталось в прошлом. Да, это наверное очень трудно, в зависимости от пола человека выдать правильное приветствие...

В списке карт значилась моя карта, но рядом с ней был статус: «Карта не выдана». Причём деньги за годовое обслуживание благополучно списались! Отличное бизнес-правило: можно списывать деньги с невыданной карты!

Поискав в Интернете, обнаружил, что не у меня одного была такая проблема. Стал звонить в техподдержку. Набрал номер 8-800-555-555-0. Ожидание было небольшим — всего 7 минут музыки. Взявшая трубку девушка меня выслушала, спросила, вводил ли я pin-код карты в банкомате. Я сказал, что да. Девушка сказала, что карта должна была активироваться при первом вводе pin-кода. Также сказала, что это очень странно. Переключила меня на технического специалиста. Специалистом тоже оказалась девушка. Она спросила у меня всё, что только можно спросить: начиная от номера карты, паспортных данных, до места прописки. Девушка в перерывах между запросами у меня данных говорила фразу: «я анализирую ситуацию». В конце концом девушка убедилась, что проблема действительно есть. Предложила оформить обращение в какую-то ещё более крутую службу техподдержки. Спросила мой телефон, сказала, что как только проблема решится, мне перезвонят, либо в «Сбербанке-Online» с картой всё будет в порядке. На том и попрощались.

На следующий день, 8 декабря, конечно же, никто мне не позвонил и статус карты не изменился. Пошел в офис Сбербанка. В нём было просто зашкаливающее количество пенсионеров, пытающихся оплатить коммунальные платежи. Взял талон, постоял 15 минут, потом плюнул и пошел домой.

Вечером, 9 декабря позвонил опять в техподдержку. Опять описал проблему. На этот раз мне посоветовали обратиться в отделение Сбербанка, которое мне выдало карту.

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

11 декабря также «Сбербанк-Онлайн» работал в режиме ограниченной функциональности. Вечером, в очередной раз прихожу в Сбербанк, где мы, по словам сотрудника банка заключаем «Универсальный договор банковского обслуживания», при этом я никаких бумаг не получал и не подписывал. Потом мне сказали, что теперь всё в порядке, и всё должно работать как надо. Я вот только одного не понял: для чего мне нужно было приходить в отделение сегодня... Почему нельзя было решить проблемы без моего участия?

Дома зашел в «Сбербанк-Онлайн» и увидел интерфейс с полной функциональностью. Ну наконец-то! Всего 5 визитов в Сбербанк и рабочая карта на руках!

четверг, 6 декабря 2012 г.

ComboBox и значение null

Бывают случаи, когда в ComboBox'е необходимо отобразить значение типа null. Для этого нужно указать:

this.comboBox.SelectedIndex = -1;

Как удалить дубликаты значений в MS Excel?

Для удаления повторяющихся значений необходимо: Выделить столбец — Данные — Удалить дубликаты. Это работает в MS Excel 2007. Надо будет протестировать в других версиях офиса.

среда, 5 декабря 2012 г.

Как получить значения перечисления в PostgreSQL?

Следующий запрос возвращает значения перечисления (enum) с именем enum_name:

select enum_range( null::enum_name );

Имена таблиц и полей в PostgreSQL

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

string sql = "SELECT * FROM \"TABLE_NAME\""; 

Данная «фича» PostgreSQL конечно же кажется странной.

воскресенье, 2 декабря 2012 г.

Использование Django South

Команда syncdb имеет серьёзный недостаток: с её помощью можно легко создать схему базы данных, но вот изменять существующие объекты в базе данных с её помощью не получится. К примеру: добавлять новые поля к таблице можно, а вот изменять существующие — нельзя.

Приложение Django South лишено подобного недостатка.

Производим настройку приложения и начинаем работу:

  • Устанавливаем Django South:

    sudo easy_install South

  • Добавляем South в INSTALLED_APPS

  • Если приложение только что создано и команду syncdb ещё не применяли, то создаем начальную миграцию и применяем её к базе данных:

    ./manage.py syncdb
    python manage.py schemamigration app_name --initial
    python manage.py migrate app_name
    
  • Если до этого момента использовали syncdb, то необходимо сконвертировать схему, созданную syncdb, в схему под управлением Django South:

    python manage.py convert_to_south app_name

  • После очередного изменения схемы, выполняем последовательно 2 команды:

    • python manage.py schemamigration app_name --auto

    • python manage.py migrate app_name

Корректное удаление клиента Oracle

Иногда возникают трудности с деинсталляцией клиента Oracle. Почему-то в установке и удалении программ клиент Oracle отсутствует.

Предлагаю следующий способ удаления клиента Oracle:

  • запускаем инсталлятор — Deinstall Products. Деинсталлятор загасит службы, удалит большинство файлов;
  • подчищаем в Program Files и в Program Files (x86);
  • удаляем папку Oracle с корня диска C: (или с того места, куда Oracle был установлен);
  • в реестре удаляем ветку: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ORACLE (если Windows 7) и HKEY_LOCAL_MACHINE\SOFTWARE\Oracle (если Xp).