суббота, 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).

вторник, 27 ноября 2012 г.

Удаление службы в Windows

Бывает, что программу удалили не корректно, и после неё остались висеть службы (в управлении компьютером). Чтобы их окончательно удалить оттуда, необходимо сначала их остановить, а потом запустить cmd от имени администратора и выполнить команду:

sc delete имя_службы

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

пятница, 23 ноября 2012 г.

Тонкости работы с Virtual Box

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

Если необходимо создать копию виртуальной машины на этом же компьютере, то не стоит копировать образ жесткого диска этой машины средствами файловой системы. Лучше воспользоваться менеджером жестких дисков (Файл — менеджер виртуальных носителей).

Установка Windows 7 с флешки

DVD-приводы вместе с различными дисками уходят на свалку истории. Установку операционной системы гораздо эффективней производить с загрузочной флешки.

Для создания загрузочной флешки необходимо скачать софтину от Microsoft: Windows 7 USB/DVD download tool. Также необходим ISO образ операционной системы и обычная флешка. Установка достаточно элементарная.

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

Подготовка рабочего места в Ubuntu 12.04 к web-разработке на Django

Подготовка рабочего места в Ubuntu 12.04 к web-разработке на Django

В качестве операционной системы я взял чистую Ubuntu 12.04. Накатив последние обновления приступаю к настройке рабочей станции.

Вызвав терминал по Alt+Ctrl+T начинаю «шаманить»:

  1. Устанавливаю Aptitude — оболочку для программы установки пакетов:
    sudo apt-get install aptitude

  2. Устанавливаю сервер MySql:

    • sudo aptitude install mysql-server

      В ходе установки будет необходимо ввести пароль root'a.

    • Изменяю файл /etc/mysql/my.cnf для того, чтобы не было проблем с кодировками:

      sudo gedit /etc/mysql/my.cnf

      Вставляю в секцию [mysqld] следующие строки:

      character_set_server = utf8
      collation_server = utf8_general_ci
    • Проверяю, что кодировка MySql правильная:

      mysql> show variables like 'char%';

      Должны получить следующий результат:

      +--------------------------+----------------------------+
      | Variable_name            | Value                      |
      +--------------------------+----------------------------+
      | character_set_client     | utf8                       |
      | character_set_connection | utf8                       |
      | character_set_database   | utf8                       |
      | character_set_filesystem | binary                     |
      | character_set_results    | utf8                       |
      | character_set_server     | utf8                       |
      | character_set_system     | utf8                       |
      | character_sets_dir       | /usr/share/mysql/charsets/ |
      +--------------------------+----------------------------+
      8 rows in set (0.01 sec)
      
    • После этого можно перезагрузить компьютер.

  3. Устанавливаю Java:

    sudo add-apt-repository ppa:webupd8team/java
    sudo apt-get update
    sudo apt-get install oracle-java7-installer
    
  4. Устанавливаю Django:

    • Скачиваю последнюю версию Django: https://www.djangoproject.com/download/, помещаю скаченный архив в свой домашний каталог, затем последовательно выполняю:

      tar xzvf Django-1.4.2.tar.gz
      sudo mv Django-1.4.2 /opt/
      cd /opt/Django-1.4.2/
      sudo python setup.py install
      
    • Проверяю корректность установки:

      python
      >>> import django
      >>> django.VERSION
      

      Результат должен быть следующим:

      (1, 4, 2, 'final', 0)
      
  5. Устанавливаю MySQL for Python:

    sudo aptitude install python-mysqldb
    
  6. Устанавливаю Eclipse:

    • Скачиваю последнюю версию Eclipse Classic отсюда: http://eclipse.org/downloads/, помещаю скаченный архив в свой домашний каталог, затем последовательно выполняю:

      tar xzvf eclipse-SDK-4.2.1-linux-gtk-x86_64.tar.gz
      sudo mv eclipse /opt/eclipse
      
    • Перехожу в каталог /opt/eclipse/ и запускаю одноименный файл.

    • Регистрирую Eclipse в системе:

      sudo gedit /usr/share/applications/eclipse.desktop
      
    • Вставляю в файл следующее содержимое:

      [Desktop Entry]
      Version=1.0
      Name=Eclipse
      Exec=/opt/eclipse/eclipse
      Terminal=false
      Type=Application
      Icon=/opt/eclipse/icon.xpm
      
    • После перезагрузки Eclipse появится в поиске. Запустив первый раз прикрепляю его к панели Unity Launcher.

  7. Устанавливаю Mercurial:

    sudo aptitude install mercurial
    
  8. Устанавливаю различные «примочки» для Eclipse:

    • PyDev for Eclipse:

      Help — Install New Software — Add — Location: http://pydev.org/updates. Примочка позволит использовать Python в Eclipse.

    • Mercurial for Eclipse:

      Help — Install New Software — Add — Location: http://cbes.javaforge.com/update. Примочка позволит использовать систему контроля версий Mercurial в Eclipse.

    • Web Page Editor:

      Help — Install New Software — Add — Location: http://download.eclipse.org/releases/juno/. Примочка позволит создавать и редактировать web-документы в Eclipse.

  9. Различные настройки Eclipse. Почему они по умолчанию не установлены — совершенно не понятно.

    • Указываю интерпретатор Python:

      Window — Preferences — PyDev — Interpreter-Python — Auto Config — Ok

    • Убираю раздражающие подчёркивания:

      Window — Preferences — General — Editors — Text Editors — Spelling — Enable spell checking — убираю галочку.

    • Показываю Project Explorer, по умолчанию он почему-то скрыт:

      Windows — Show View — Other — General — Project Explorer.

  10. Создаю базу данных MySQL, пользователя и назначаю ему права:

    • Подключаюсь к MySQL под root'ом:

      mysql -u root -p

    • Создаю базу данных:

      CREATE DATABASE db_name;

    • Создаю пользователя:

      CREATE USER 'user_name'@'localhost' IDENTIFIED BY 'user_password';

    • Назначаю пользователю права на базу данных:

      GRANT ALL PRIVILEGES ON db_name.* TO 'user_name'@'localhost' WITH GRANT OPTION;

  11. Если проекта ещё нет, то необходимо его создать:

    • File — New — Project — PyDev — PyDev Django Project

    • Ввожу имя проекта, проверяю путь создания проекта.

    • На странице Basic Django Settings указываю параметры подключения к базе данных.

    • Добавляю проект в систему контроля версий: в Project Explorer щелкаю правой кнопкой по проекту: Team — Share Project — Mercurial — Next — Finish.

    • Выбираю файлы, которые необходимо добавить в систему контроля версий: Team — Add.

    • После добавления файлов можно сделать первый «Commit»: Team — Commit. Указываю сообщение для первой фиксации.

    • Будет полезно зарегистрироваться на веб-сервисе для хостинга проектов. Я выбрал https://bitbucket.org.

      На хостинге создаю новый репозиторий, задаю имя, язык «Python».

    • Добавляю проект на внешний хостинг:

      Team — Push. В качестве URL указываю: https://bitbucket.org/user_name/project_name/. Указываю имя и пароль, полученные при регистрации, Next — Finish.

    • Для получения измененных данных с внешнего хостинга необходимо выбрать команду: Team — Pull.
  12. Если проект уже есть где-то на внешнем хостинге, то его необходимо импортировать:

    • File — Mercurial — Clone Existing Mercurial Repository.
  13. Запускаю сервер:

    • Перейдя в каталог проекта в терминале выполняю команду:

      python manage.py runserver

    • Запустив браузер, перехожу на страницу по адресу http://127.0.0.1:8000. Если появилась страница с текстом «It worked!», то это значит, что всё установили корректно.