Блоги

Если у вас на сервере больше 10 сайтов, а иногда более 50, то команда массовых операций с сайтами в папке сборки /vas/aegir/platforms/drupal7/sites, вам как никогда будет кстати.

drush @sites updb - обновляет базы данных всех сайтов
drush @sites upс - обновляет проекты
drush @sites сс all - чистит кеш
 

заходим в папку sites и выполняем нужную команду
Также можно использовать другие команды drush при необходимости

Иногда бывает что свободное место на сервер заканчивается, и не всегда оно заполняечтся нужными файлами.

Найти файлы и директории которые занимают много места можно с помощью команды ncdu в ubuntu

для установки используем команду

sudo apt-get install ncdu

после чего заходим в директорию, где нужно найти большие файлы и директории вводим команду
ncdu

Список клавиш для работы с программой:

up, k — пеермещение по списку вверх;
down, j — перемещение по списку вниз;
enter — открывает выбраный каталог;
left, <, h — возвращает вывод родительского каталога;
n — сортирует по имени;
s — сортирует по размеру;
d — возможность удаления выделеного файла или каталога;
t — отображение папок перед файлами при сортировке;
g — режим отображения занятого места (в процентах, графически, комплексно);
a — режим отображения (размер файла, занятое место на жестком диске)
e — включает отображение скрытых файлов;
i — показывает информацию выделенного объекта;
r — вновь сделать пересчет занимаемого места;
q — выход из программы;

Не являясь большим любителем смартфонов я был обладателем Samsung Galaxy Note i717. И только недавно осознал, что нужен аппарат помощнее и этот уже не тянет :) На какое то время задумался о покупке iPhone 6+, но передумал, так как у меня создается впечатление, что обладатели айфонов вовсе не являются владельцами данного устройства.

Собственно решив попробовать что то новенькое я спонтанно нажал на кнопку Buy It Now в магазине ebay напротив китайского флагмана Meizu MX 4. О покупке я не пожалел. Китайцы действительно продумали каждую мелочь, и Flyme OS невероятная удобная модификация Android. Я не буду писать полный обзор данного смартфона, так как в этих ваших интернетах можно найти достаточно большое количество обзоров, в том числе и видео, но я постараюсь описать несколько плюсов и минусов:

Из плюсов

1. Отличное качество сборки. Рамка телефона сделана из авиаля (авиационный алюминий), задняя крышка сидит очень плотно, нет люфтов, ничего не скрипит и не шатается
2. Динамик телефона очень громкий, расположен непосредственно рядом с портом для зарядки, так что закрыть динамик рукой можно только играя в игры.
3. Просто шикарная (по моим меркам) 21 мегапиксельная камера, запись видео в 4K. Несколько фотографий по которым можно оценить качество камеры тут и тут
4. В настройках можно включать и отключать права суперпользователя (правда для этого необходимо будет создать аккаунт)
5. Очень понравилась Flyme OS, действительно красивая OC с функцией записи звонков (как в автоматическом режиме, так и в ручном). Нет дибильных надоедающих ненужных предустановленных приложений от производителя (как это обычно любит делать самсунг). Очень порадовал файловый менеджер, можно создать зашифрованную (запароленную) директорию.

Несколько скриншотов файлового менеджера:

Из минусов

1. Так как телефон китайский нет гарантии :))))
2. Мне все равно удалось найти дефект (хотя я в этом не уверен). Подобное https://www.youtube.com/watch?v=fCpLRYWeq2Q происходит и у меня, но продавец уверяет, что это нормальное поведение.

Кстати, именно этот телефон используется для демонстрации Ubuntu Touch :)

Это вроде все. Брал телефон за 392$ (32 Gb версия) без учета доставки.

И напоследок, тест производительности:

NeoVim представляет из себя форк текстового редактора Vim с новыми улучшениями. Основной упор сейчас делается на улучшение кодовой базы. Иными словами команда, которая работает над кодом производит его рефакторинг и покрытие тестами, что несомненно упростит процесс написания и применения новых патчей.

Улучшение кодовой базы уже дает свои корни, произошло улучшение поддержки графической подсистемы, добавлен эмулятор терминала. Сейчас редактор можно интегрировать куда угодно. Вот небольшой список уже готовых проектов реализующих GUI для NeoVim:

GUI написанный на Coffee Script (с использованием Atom Shell UI)

https://github.com/coolwanglu/neovim.as

GUI для OSX

https://github.com/rogual/neovim-dot-app

Rust IDE

https://github.com/oakes/SolidOak

Встроенная поддержка терминала

Да, в NeoVim теперь встроена полноценная консоль, в которой можно запустить (внимание!) другой вим (сделано это лишь ради демонстрации):

Так как моим основным языком является Python, в соседнем буфере я теперь могу запустить IPython:

И кроме этого сделав set filetype=python у меня появится подсветка синтаксиса Python непосредственно в терминале!

Можно с легкостью скопировать текст кода из одного буфера в буфер консоли. Небольшая демонстрация:

На глаза попалась замечательная книга ("Python 3 Patterns and idioms") от известного среди Java программистов автора - Брюса Эккеля. Книга выложена в открытый доступ вместе с исходниками (чего и стоило ожидать от автора любимой книги). К сожалению многие главы не дописаны, но то, что уже есть - невероятный труд. Книга написано очень давно и сразу видно, что автор ее забросил. Многие вещи, которые описаны как для Python 3 уже имеются для Python 2.7. Сейчас я хочу сделать перевод тех глав, которые уже доступны, выкинуть главу с Jython и дополнить книгу теми разделами, которые там не дописаны. Все это дело буду переносить на платформу runestone, что бы сделать интерактивный учебник как это было с книгой "Решение задач через алгоритмы и структуры данных на Python"

Оглавление учебника

Contributors
Thanks To
ToDo List
The remainder are from context, from the book.
A Note To Readers
Introduction
A Team Effort
Not an Introductory Book
The License
The Printed Book
Translations
My Motives
Teaching Support
Book Development Rules
Contribute What You Can
Don’t Get Attached
Credit
Mechanics
Diagrams
Developer Guide
Getting Started: The Easiest Approach
For Windows Users
Installing Sphinx
Getting the Development Branch of the Book
Building the Book
Building the PDF
Setting up Mercurial
Working with BitBucket and Mercurial
A Simple Overview Of Editing and Merging
Emacs for Editing Restructured Text
Part I: Foundations
Python for Programmers
Scripting vs. Programming
Built-In Containers
Functions
Strings
Classes
Inheritance
Useful Techniques
Further Reading
Initialization and Cleanup
Initialization
Constructor Calls
__new__() vs. __init__()
Static Fields
Cleanup
Further Reading
Unit Testing & Test-Driven Development
Write Tests First
Simple Python Testing
A Very Simple Framework
Writing Tests
White-Box & Black-Box Tests
Running tests
Automatically Executing Tests
Exercises
Python 3 Language Changes
Decorators
Decorators vs. the Decorator Pattern
History of Macros
The Goal of Macros
What Can You Do With Decorators?
Function Decorators
Slightly More Useful
Using Functions as Decorators
Review: Decorators without Arguments
Decorators with Arguments
Decorator Functions with Decorator Arguments
Further Reading
Metaprogramming
Basic Metaprogramming
The Metaclass Hook
The Metaclass Hook in Python 3
Example: Self-Registration of Subclasses
Using Class Decorators
Using the inspect module
Example: Making a Class “Final”
Using __init__ vs. __new__ in Metaclasses
Class Methods and Metamethods
Intercepting Class Creation
A Class Decorator Singleton
The __prepare__() Metamethod
Module-level __metaclass__ Assignment
Metaclass Conflicts
Further Reading
Generators, Iterators, and Itertools
Comprehensions
List Comprehensions
Nested Comprehensions
Techniques
A More Complex Example
Set Comprehensions
Dictionary Comprehensions
Coroutines, Concurrency & Distributed Systems
The GIL
Multiprocessing
Further Reading
Jython
Installation
Getting the Trunk
Scripting
Interpreter Motivation
Creating a Language
Using Java libraries
Inheriting from Java library Classes
Controlling Java from Jython
Inner Classes
Controlling the Interpreter
Putting Data In
Getting Data Out
Multiple Interpreters
Creating Java classes with Jython
Building Java Classes from Python
Summary
Exercises
Part II: Idioms
Discovering the Details About Your Platform
A Canonical Form for Command-Line Programs
Messenger/Data Transfer Object
Part III: Patterns
The Pattern Concept
What is a Pattern?
Classifying Patterns
Pattern Taxonomy
Design Structures
Design Principles
Further Reading
The Singleton
Exercises
Building Application Frameworks
Template Method
Exercises
Fronting for an Implementation
Proxy
State
StateMachine
Table-Driven State Machine
The State Class
Conditions for Transition
Transition Actions
The Table
The Basic Machine
Simple Vending Machine
Testing the Machine
Tools
Exercises
Decorator: Dynamic Type Selection
Basic Decorator Structure
A Coffee Example
Class for Each Combination
The Decorator Approach
Compromise
Other Considerations
Further Reading
Exercises
Iterators: Decoupling Algorithms from Containers
Type-Safe Iterators
Factory: Encapsulating Object Creation
Simple Factory Method
Preventing direct creation
Polymorphic Factories
Abstract Factories
Exercises
Function Objects
Command: Choosing the Operation at Runtime
Strategy: Choosing the Algorithm at Runtime
Chain of Responsibility
Exercises
Changing the Interface
Adapter
Façade
Exercises
Table-Driven Code: Configuration Flexibility
Table-Driven Code Using Anonymous Inner Classes
Observer
Observing Flowers
A Visual Example of Observers
Exercises
Multiple Dispatching
Visitor
Exercises
Pattern Refactoring
Simulating the Trash Recycler
Improving the Design
“Make More Objects”
A Pattern for Prototyping Creation
Trash Subclasses
Parsing Trash from an External File
Recycling with Prototyping
Abstracting Usage
Multiple Dispatching
Implementing the Double Dispatch
The Visitor Pattern
A Reflective Decorator
More Coupling?
RTTI Considered Harmful?
Summary
Exercises
Projects
Rats & Mazes
Other Maze Resources

Хочу представить вашему вниманию перевод замечательного интерактивного учебника по алгоритмам и структурам данных с примерами на языке программирования Python. Перевод всего учебника был сделан хабрапользователем AveNat. Исходные коды учебника доступны на GitHub. Принимаются пулл реквесты и улучшения в переводе. Читать можно тут.

Анонс на хабре

Установить gccgo достаточно просто двумя командами (естественно предварительно необходимо установить brew):

# добавляем правило для gcc 4.9
brew tap homebrew/versions
brew install gcc49

Добавляем необходимые нам языки, компилятором которых будет gcc:
`$(brew --repository)/Library/Formula/gcc49.rb`

Отредактируйте список с языками и добавьте в список go:

languages = %w[c c++ objc obj-c++]

Должно получиться что то вроде:

languages = %w[c c++ go objc obj-c++]

Теперь установим GCC 4.9 командой:

brew install gcc49

Компиляция может занять много времени, все зависит от мощности вашего процессора.

Кстати, есть способ уменьшить размер бинарника в Go, можно отключить информацию об отладке следующим образом:

➜  ~  cat name.go
package main
 
func main() {
    println("Hello, 世界")
}
➜  ~  /usr/local/go/bin/go build -ldflags "-s" name.go
➜  ~  du -sh name
500K	name
➜  ~

Лучший друг разработчика среда и инструментарий, с которыми он работает. Самое главное преимущество в PyCharm и других продуктах JetBrains большой спектр возможностей, которые предоставляет данная IDE. Я не большой любитель "комбайнов", которые тормозят систему и мешают работе своим лишним функционалом. Именно поэтому я полностью отказался от vagrant, и отключил данное расширение в пользу "настроенного с нуля" виртуалбокса. Что бы эта статья не затянулась предполагается, что вы уже примонтировали директорию свого проекта к гостевой операционной системе, настроили и установили свой любимый дистрибутив линукса и установили драйвара для гостевой операционной системы, которые предоставляет VirtualBox. Мы сразу перейдем к настройке PyCharm-а, в картинках :)

Для начала нам необходимо установить путь к удаленному интерпретатору Python. Самый лучший способ это сделать использовать собственные public и private ключи, сгенерированные утилитой ssh-keygen, что бы заходить на development сервер без пароля. Создайте virtualenv окружение где нибудь в директории с вашим проектом на стороне гостевой операционной системе и укажите путь к нему в настройках PyCharm. Открываем настройки PyCharm и выбираем пункт Project Interpreter, выбираем пункт Show All, жмем на крестик добавить, далее Add remote, откроется окно настроек подключения к удаленному серверу:

Тут необходимо выбрать авторизацию используя учетные данные, или private key я использую второй вариант. Далее нажав на кнопку Python Interpreter Path мы попадем в окно с директориями удаленного сервера, для выбора путь к нашему интерпретатору. Если вы используете virtualenv, путь к интерпретатору будет следующий: env_directory_path/bin/python. Сохранив наши настройки перейдем в меню настроек Run/Debug Configuration. Окно будет выглядеть так:

Опять жмем на крестик, и выбираем Django Server. После выбора откроется форма настроек путей к вашему проекту. Как я уже сообщал ранее наш проект будет находиться локально, а в VirtualBox директория проекта будет примонтирована, что бы не осуществлять синхронизацию между локальным и удаленным проектом.

В пункте Environment Variables небходимо установить переменную окружения DJANGO_SETTINGS_MODULE, значение данной переменной будет следующего вида: "название_вашего_проекта.settings", в моем случае просто project. Добавляем переменную окружения django_settings_module:

Далее выбираем путь к рабочей директории, где корень проекта (опция Working Directory). Самая главная опция, которая нам нужна для корректной работы с удаленным сервром - опция Path Mappings, она позволяет установить пути локальные и удаленные. Эта опция у меня установлена следующим образом:

В итоге получаем после применения настроек:

Последнее что нам нужно сделать на данном этапе, это установить Host. Можно просто выставить значение в "0.0.0.0". Тут больше нам ничего не понадобится, заходим обратно в настройки PyCharm, и выбираем пункт Project Settings -> Django, ставим галочку Enable Django Support. Указыем путь к settings джанги (Settings) и обязательно Django Project Root, выбираем наш Manage Script (manage.py):

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

# Запуск виртуальной машины (в фоновом режиме, безо всяких окошек)
alias vmstart='vboxmanage startvm "Python apps" --type headless'
# Вырубить виртуальную машину
alias vmstop='vboxmanage controlvm "Python apps" poweroff'
# Показать список запущенных виртуальных машин
alias vmls='vboxmanage list runningvms'
# Вход на сервер по ssh
alias vmssh='ssh development'

Вот пожалуй и все, подведу итоги настроек:

Django Server:

Environment Variables: DJANGO_SETTINGS_MODULE = myproject.settings(.py)
Path Mappings: /path/to/local/project/root = /path/to/remote/project/root
Host: 0.0.0.0

Django Test:

Тут разница в настройках лишь в том, что обязательно необходимо установить опцию Custom Settings, и указать путь к settings.py файлу или settings директории проекта.

Теперь у нас работает: удаленная отладка проекта, запуск тестов, запуск сервера.

Спасибо за внимание!

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

Всплывающая подсказка, уведомляющая о новых сообщениях потерпела изменения, теперь она светло-желтого цвета.

Окно отправки письма

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

Установка

sudo add-apt-repository ppa:yorba/ppa 
sudo apt-get update
sudo apt-get install geary

Вышла новая версия Shotwell 0.15. Новых функций не так и много, добавлена функция настройки цвета, исправлены некоторые ошибки, расширение YouTube теперь использует авторизацию OAuth / OpenID, улучшение миниатюр видео.

Установка

Shotwell 0.15 по умолчанию включен в Ubuntu 13.10. Установка в Ubuntu 12.10 и 13.04:

sudo add-apt-repository ppa:yorba/ppa
sudo apt-get update && sudo apt-get install shotwell

Компания Canonical решила не использовать xMir по умолчанию в Ubuntu 13.10. Напомню, xMir это дисплейный сервер, который должен был заменить XWindows в Ubuntu. Отличия Mir от xMir в том, что у последнего есть возможность запускать приложения работающие на XWindows. Еще в июне, было решено использовать Mir + xMir по умолчанию в Ubuntu 13.10 (только для открытых драйверов видеокарт), к сожалению в связи с возникшими техническими трудностями переход на xMir решили перенести.

Sphere - креативные нетрадиционные конки, которые представляют из себя круглые контейнеры похожие на сферы. Они прекрасно сочетаются с рабочим столом Unity, и придают уют.

Для установки Sphere 1.2.5 скачайте архив отсюда и распакуйте директорию (sphere 1.2.5 -v5) в ~/.icons или /usr/share/icons

Для установки Sphere Sphere 1.3 скачайте архив отсюда, распакуйте архив и скопируйте директории apps и devices в .icons/sphere 1.2.5 -v5 или /usr/share/icons/sphere 1.2.5 -v5

Написать данную статью меня подтолкнул пост на хабре. В Python есть конструкции, которые ведут себя не так как хотелось бы. Основная причина - ссылки, которые очень похожи на указатели в языках C/C++. Давайте взглянем на первый пример:

tmp = {}
for i in range(10):
    tmp[i] = lambda: i
 
>>> tmp[0]()
9
>>> tmp[1]()
9

Странное поведение данной конструкции связано с тем, что в питоне функции являются замыканиями (в том числе и lambda - выражение). Известно что замыкание это функция, которая хранит в себе ссылки на переменные вне своего блока. Получается что переменная i в пределах lambda функции является ссылкой на переменную i в цикле for. Поэтому в данном случае, когда меняется значение в переменной i в цикле for, во всех созданных lambda функциях значение переменной i в пределах lambda функции поменяется (в нашем случае вернется значение i-1). Что бы этого избежать можно явно передать в качестве параметра lambda функции переменную i:

tmp = {}
for i in range(10):
    tmp[i] = lambda i=i: i
 
>>> tmp[0]()
0
>>> tmp[1]()
1

Второй пример немного проще (взято отсюда)

>>> a = [[]] * 3 # создаем три вложенных списка
# хотим добавить в каждый вложенный список по букве
>>> a[0].append('a')
>>> a[1].append('b')
>>> a[2].append('c')
>>> print a
[['a', 'b', 'c'], ['a', 'b', 'c'], ['a', 'b', 'c']] # WAT?!

Почему так происходит? Опять же из-за ссылок. Давайте разберем еще два примера:

>>> a = [[], [], []]
>>> print [hex(id(i)) for i in a]
['0x10c04c9e0', '0x10c04c950', '0x10c04ca70']
 
>>> a = [[]] * 3
>>> print [hex(id(i)) for i in a]
['0x10c04c710', '0x10c04c710', '0x10c04c710']

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

Дополнительный материал

Python. Неочевидное поведение некоторых конструкций
Неочевидное поведение некоторых конструкций

Недавно я написал небольшой обзор о Gnome 3.10. Сегодня поговорим о процессе установки новой версии на Ubuntu 13.10.

Процесс установки

Для начала переключаемся на GDM. Известно, что GDM по умолчанию не установлен (его уже давно заменили LightDM):

sudo apt-get install gdm

Добавляем PPA репозитории Gnome

sudo add-apt-repository ppa:gnome3-team/gnome3-next
sudo add-apt-repository ppa:gnome3-team/gnome3-staging
sudo apt-get update
sudo apt-get dist-upgrade

Важно заметить что перед тем как вы нажали dist-upgrade обратите внимание что вы прочитали список удаляемых пакетов, что бы нужные пакеты не были удалены.

Gnome 3.10 не будет работать с Unity, поэтому поставим gnome-shell:

sudo apt-get install gnome-shell

Для установки приложений Gnome (и расширений Gnome shell) запустите команду:

sudo apt-get install gnome-documents gnome-contacts epiphany-browser gnome-boxes gnome-shell-extensions gnome-tweak-tool bijiben gnome-clocks

Что бы избежать проблем с различными элементами удалите overlay-scrollbars

sudo apt-get remove overlay-scrollbar

Осталось перезагрузить компьютер и мы готовы к использованию Gnome 3.10.

Откат изменений

Что бы вернуть все как было выполните следующий набор команд:

sudo apt-get install ppa-purge
sudo ppa-purge ppa:gnome3-team/gnome3-staging
sudo ppa-purge ppa:gnome3-team/gnome3-next
sudo apt-get install overlay-scrollbar

Для любителей гнома есть отличная новость, вышел GNOME 3.10 с экспериментальной поддержкой Wayland и новыми приложениями. О новых изменениях мы поговорим в этой статье.

Новое системное меню

Команда дизайнеров Gnome всегда заботилась о создании интуитивно понятного интерфейса для пользователей. Обновленное системное меню нам как раз говорит об этом. Новое системное меню объединяет и группирует в себе все индикаторы и аплеты, что бы к ним можно было "достучаться" из одного места. Теперь регулятор громкости, wi-fi, bluetooth, и т.д. находятся в одном месте.

У нового выпадающего меню конечно же есть и свои минусы (конечно же об этом уже осведомлены дизайнеры):

Слишком мелки значки, трудно по ним попасть мыщью
Глючный индикатор яркости экрана
Отображается имя пользователя (надо же, некоторых это волнует)

Изменения в GTK

Наиболее заметным изменением является GNOME ‘Header Bars’. Header Bars складывают заголовки и панели инструментов, что экономит больше пространства


Software Centre Preview

Software Centre Preview позволяет вам устанавливать и удалять приложения, устанавливать обновления, искать приложение по названию, просматривать приложения по категориям.

Application Pager

В новом обновлении Application Pager стали доступны две дополнительные вкладки - Частые приложения и все (Frequent, All)

GNOME Music

Пока еще не совсем готовое приложение Gnome Music, представляет из себя музыкальный плеер похожий на Rhytmbox. Приложение позволяет просматривать музыкальные файлы по исполнителям или по альбомам. Пока что приложение на стадии разработки, поэтому это обычный плеер с приятным интерфейсом, ничего лишнего.

Дата и время

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

GNOME Maps

Опять же Gnome Maps это новое приложение, которое находится на стадии разработки. На данный момент доступен следующий функционал - поиск мест и достопримечательностей, возможность строить маршруты, добавление любимых мест, просмотр собственного расположения, места которые находятся рядом. Приложение использует данные OpenStreetMap.

GNOME Photos

Приложение позволит собирать воедино вашу коллекцию фотографий. Приложение не является заменой Shotwell, оно позволяет просматривать в более удобном виде директории с фотографиями. Поддерживается так же Flickr и обмен файлами через UPnP.

RSS-материал