Архивы: Январь 2011

Обновление iTunes 10.1.2

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

В iTunes 10.1 включены несколько новых функций и улучшений, например:

• использование AirPlay для мгновенной и беспроводной потоковой передачи видео из iTunes на полностью обновленный Apple TV;
• синхронизация с iPhone, iPad или iPod touch под управлением iOS 4.2.

Обновление iWork

Данное обновление содержит ряд исправлений и улучшений, включая следующие.

  • Поддержка воспроизведения презентаций Keynote, содержащих более 15 анимаций и эффектов, на iWork.com public beta при использовании новейшей версии Safari.
  • Поддержка Keynote Remote 1.2, включая отображение слайдов высокого разрешения на устройствах с дисплеем Retina.
  • Исправление ошибки, приводившей к неправильному отображению цифр линейки при перемещении или изменении размера фигур, а также при прокрутке.
  • Исправление ошибки, возникавшей при экспорте презентаций Keynote в iTunes/iPod при использовании iTunes 10.
  • Повышение удобства чтения документов ePub, экспортированных из Pages.
  • Функции загрузки документов Keynote, Pages и Numbers на iWork.com для общего и частного доступа.Данное обновление рекомендуется для установки всем пользователям iWork 9.0 и более поздних версий. Пользователи iWork.com могут протестировать различные варианты публикации и оставить отзывы. Подробнее о данном обновлении и изменениях отдельных программ см. на веб-странице:http://support.apple.com/kb/HT4386?viewlocale=ru_RU.
  • Создание виртуальных хостов в виртуальной машине Битрикс

    Предположим, у нас есть вебсервер с настроенной связкой Apache — Nginx, например, Bitrix Virtual Appliance, и мы хотим сделать на этом сервере дополнительный виртуальный хост (или несколько хостов).

    1. Заведём папку для нашего будущего виртуального хоста. Где она будет находиться — не принципиально. Мне удобнее держать виртуальные хосты в папке /var/vhosts. Допустим, мы создаём хост с именем virtualka1, это значит, что нам надо создать папку /var/vhosts/virtualka1. Внутри нам понадобятся еще 2 папки: www — содержимое этой папки будет доступно из браузера, и log — в этой папке будем держать логии нашей виртуалки. Разумеется все манипуляции делаются от root’а.
    2. Теперь созданную нами папку надо сделать доступной для пользователя bitrix, от которого обычно и осуществляется вся работа с сайтом. Для этого, находясь в папке /var/vhosts, мы выполняем команду
      chown –R bitrix:bitrix virtualka1/

      Теперь пользователь bitrix может делать с этой папкой всё. Для большего удобства, создадим символическую ссылку на эту папку в домашней директории пользователя:

      ln –s /var/vhosts/virtualka1 /home/bitrix
    3. Переходим к настройке серверов Nginx и Apache. Конфиги будем располагать таким образом, что насторйка каждого виртуального хоста будет храниться в отдельном файле в папке sites-available. А в папке sites-enabled будут лежать симлинки на конфиги тех виртуалок, которые нам нужны. Таким образом можно будет легко разобраться где какой конфиг лежит и, при необходимости, отключить ненужные путём удаления симлинка.Nginx

      Находим файл /etc/nginx/nginx.conf и добавляем в самый конец перед закрывающей скобкой } такую строчку:

      include /etc/nginx/sites-enabled/*;

      Это заставит nginx грузить конфиги из папки sites-enabled. Разуемеется папки sites-available и sites-enabled должны существовать в директории /etc/nginx, если их нет, то надо создать. Теперь в папке sites-available создаём файл virtualka1 с таким содержимым:

      server {
        listen 80;
        server_name virtualka1;
        server_name_in_redirect off;
        access_log /var/vhosts/virtualka1/log/nginx_access.log common;
        index index.php;
        error_page 500 502 503 504 /500.html;
        error_page 404 = /404.php;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host:80;
        client_max_body_size 1024M;
        client_body_buffer_size 4M;
        root /var/vhosts/virtualka1/www;
      
        location / {
          expires 3d;
          proxy_pass http://127.0.0.1:8888;
        }		
      
        location ~ (/|\.php)$ {
          proxy_pass http://127.0.0.1:8888;
        }
      
      }    

      Всё, осталось сделать симлинк на наш конфиг в папку /etc/nginx/sites-enabled/.

      Apache

      Проконтролируем, чтобы в конце файла /etc/apache2/apache2.conf была строчка Include /etc/apache2/sites-enabled/, а так же, чтобы были папки /etc/apache2/sites-available и/etc/apache2/sites-enabled. Если все хорошо, то в папке /etc/apache2/sites-available создаём файлvirtualka1 с таким содержимым:

      <VirtualHost *:8888>
      
        ServerName virtualka1
      
        ServerAdmin webmaster@localhost
      
        DocumentRoot /var/vhosts/virtualka1/www
      
        ErrorLog /var/vhosts/virtualka1/log/apache2_error.log
        CustomLog /var/vhosts/virtualka1/log/apache2_access.log combined
      
      </VirtualHost>
      

      Делаем симлинк на созданный конфиг в папку /etc/apache2/sites-enabled/.

    4. Осталось перезапустить сервера:
      /etc/init.d/nginx restart
      /etc/init.d/apache2 restart
      

    Всё, виртуалка должна работать. Проверялось на BVA 1.6.

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

    Для тех, кому лень вручную всё это делать

    Мне вот лень, поэтому я написал себе скриптик. В качестве единственного параметра он принимает название виртуалки, оно же название БД, оно же логин к БД и пароль к БД. Да, скрипт автоматически создаёт и базу тоже.

    Способ применения:

    crSite.sh virtualka1

    Не забываем разрешить скрипту исполняться.

    crSite

    (с)

    Сброс пароля пользователя root в mysql [Reset root password in mysql]

    1. Останавливаем mysql:
    service mysqld stop

    2. Запускаем mysql следующей командой:
    /usr/bin/mysqld_safe —skip-grant-tables —user=root &

    3. Запускаем клиента mysql:
    mysql -u root

    4. Выполняем sql запрос:
    UPDATE mysql.user SET Password=PASSWORD(‘new_password’) WHERE User=’root’;
    где new_password — новый пароль.

    5. Применяем изменения:
    FLUSH PRIVILEGES;

    6. Выходим из mysql клиента выполнив в нем команду
    exit

    7. Перегружаем mysql сервер:
    service mysqld restart

    10 способов стать хорошим программистом

    Хороший программист — это тот, кто смотрит в обе стороны, переходя дорогу с односторонним движением.
    Даг Линдер

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

    1. Учите основы
    Понимание основ — это ключ к успеху в любой индустрии и любой профессии. До тех пор, пока вы недостаточно хорошо знаете основы, вы не сможете стать хорошим программистом. Знание азов позволит вам разрабатывать и реализовывать лучшие решения наилучшим способом. Если вы ощущаете пробелы в своих знаниях, будь то основы computer science, или концепции языка, на котором вы пишете, то никогда не поздно вернуться назад и повторить забытое.

    2. Задавайте вопросы (как? почему?), когда пишете код
    Есть одна вещь, которая отличает хорошего программиста от всех остальных — это желание знать, что и как происходит. Есть люди, которые никогда не оставят в покое код, пока точно не будут знать, что именно происходит при его выполнении. Я понимаю, что это приближает дедлайн, что у нас не всегда есть на это время, и поэтому мы часто заканчиваем работать с кодом, как только он начинает выполнять свои функции. И хотя поведение в подобных ситуациях это тема для другого разговора, каждый программист может приложить как можно больше усилий для того, чтобы вникнуть в работу кода. И поверьте, со временем это войдет в привычку, и вы будете делать это уже неосознанно.

    3. Учите других — учитесь сами
    Большинство из нас обращаются к форумам и группам только тогда, когда нам нужна помощь. Еще одна вещь, которая отличает хорошего программиста от все остальных: хороший программист чаще заглядывает в такие места, чтобы помочь другим. Такая помощь учит больше, чем помощь, оказанная вам при решении вашей проблемы. Поверьте, после того как вы разберетесь в чужой проблеме и ее контексте, поразмышляете над ней и дадите решение, вы научитесь гораздо большему.

    4. Пишите простой, понятный, но в то же время логичный код
    Как и в других областях, формула KISS (Keep it simple and short — делай короче и проще) работает и в программировании. Пишите логичный код и избегайте усложнений. Иногда люди пишут сложный код только для того, чтобы доказать, что они умеют писать такой код. Мой опыт подсказывает, что простой и логичный код всегда работает хорошо, приносит меньше проблем и лучше поддается расширению. Вспоминается отличная фраза:

    Хороший код — это лучшая документация. Каждый раз, когда вы захотите добавить комментарий, спросите себя: «Как я могу улучшить этот код, чтобы он не требовал комментирования?»
    Стив МакКоннелл

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

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

    6. Будьте первым, кто проанализирует и оценит ваш код
    Хотя это трудно, но попробуйте «сломать» ваш код до того, как это сделает кто-то другой. Со временем вы научитесь писать почти безошибочный код. Всегда проводите подробную и беспристрастную оценку своего кода. И никогда не бойтесь спрашивать, что другие думают о вашем коде. Работайте с хорошими программистами и прислушивайтесь к их мнению — это поможет вам стать хорошим программистом.

    7. Не пугайтесь быстрой смены технологий
    За все время работы в области IT, я встречал множество людей, которых не устраивала их работа, и людей, которые меняли место работы, чтобы работать с новейшими технологиями. В таком стремлении нет ничего плохого, однако ошибка в «новейших технологиях». Каждый день появляются новые инструменты, API и фреймворки, призванные сделать разработку быстрой и простой. И эта тенденция не снизится. Однако следует понять одну вещь: фундаментальные знания и основы меняются значительно медленнее, чем фреймворки, новые инструменты и API. Можно провести аналогию с морем, на поверхности которого находятся быстрые течения, однако на глубине вода спокойна и она составляет большую часть объема. Поэтому держитесь «на глубине», поближе к основам. В мире Java приложений уровня enterprise существует много веб-фреймворков, а новые выходят каждые две недели. Однако основы клиент-серверной архитектуры, шаблона MVS (Model View Separation), фильтров/сервлетов/JSP, упаковки ресурсов, обработки XML и т.д. остаются неизменны. Поэтому лучше потратьте время на изучение этих основ, нежели на изучение вечно меняющихся фреймворков. Поверьте, зная основы, изучить новые API и фрейморки будет куда легче.

    8. «Костыли»* долго не работают
    Множество программистов используют «костыли»: от недостатка времени, понимания проблемы или опыта. Однако со временем такие решения делают код хуже: он становится менее расширяем и удобен в поддержке. Всегда старайтесь написать такую реализацию, о которой вы знаете все. Я понимаю, что «костыли» в некоторых ситуациях неизбежны, но тогда ситуация напоминает что-то вроде «всегда говори правду, но иногда можешь соврать».

    9. Читайте документацию
    Хорошие программисты читают много документации. Это могут быть спецификации, JSR, API, документы, туториалы и т.д. Чтение документации позволит вам понимать основы, и вы будете решать задачи наилучшим способом.

    10. Чужой код тоже может чему-то научить
    Я работал с двумя отличными программистами, которые постоянно в своих IDE держали исходники чужих проектов на Java, и обращались к ним каждый день. Они делали это не только из желания узнать, как работают базовые вещи, но и из желания научиться писать хорошие программы. Чтение исходных кодов известного open source проекта, или кодов, написанных вашим ведущим программистом, может помочь вам писать код лучше.

    И последнее: не сравнивайте себя с другими
    Сравнение себя с другими выльется только в плохое самочувствие и нездоровую конкуренцию. У всех есть свои сильные и слабые стороны. Важнее понять свои сильные и слабые стороны и работать над ними. Я много раз видел, как даже так называемые fundoo-программисты (программисты с хорошей фундаментальной подготовкой) делали глупые ошибки. Поэтому проанализируйте и запишите те вещи, которые вам стоит улучшить в себе, и за работу. Программируйте в удовольствие и наслаждайтесь этим.

    Любой дурак может написать код, понятный компьютеру. Хороший программист пишет код, понятный человеку.
    Мартин Фаулер

    (c)

    Mac OS X 10.6.6 Update

    Я долго ждал этого и вот оно :) Основная тема этого апжейта Mac App Store сокращенно MAS. От данного творения я ожидаю очень многого.

    The Mac OS X 10.6.6 Update is recommended for all users running Mac OS X Snow Leopard and includes general operating system fixes that enhance the stability, compatibility, and security of your Mac. It also includes the Mac App Store, the best way to discover and buy new apps for your Mac. The Mac App Store, a new application you’ll find in the Dock, includes the following features:

    Discover Mac apps: Browse featured apps, top charts, and categories, or search for something specific. Read detailed app descriptions and user reviews, and flip through screen shots.
    Buy and install: Easily purchase apps with your iTunes account. Apps install in one step and are quickly available from the Dock.
    App updates: The Mac App Store keeps track of all your purchased apps and notifies you when free updates are available.
    To learn more about the Mac App Store, visit: http://www.apple.com/mac/app-store.
    For detailed information on this update, please visit this website:http://support.apple.com/kb/HT4459.
    For information on the security content of this update, please visit:http://support.apple.com/kb/HT1222.