четверг, 24 января 2013 г.

Ubuntu. Убить процессы по имени.

Для того чтобы убить все процессы по части имени нужно сделать так:
ps aux | grep -e 'somename' | grep -v grep | awk '{print $2}' | xargs -i kill {}

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

Запуск приложений Ubuntu с правами администратора

Если нужно запустить приложение из под терминала, используем команду sudo:
$ sudo mc

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

Чтобы не держать для каждого приложения параллельно открытую консоль, есть простое решение.

Команда gksu. Это "графический" аналог sudo. Разница только в том, что пароль суперпользователя вас попросят ввести не в консоли, а в диалоговом окне. Можно использовать в настройках команд запуска ярлыков (я думаю, вы уже пробовали писать там sudo и ничего не получилось). Пример команды:
$ gksu gedit

"Графический" пример, научим ярлык приложение Sublime Text запускать приложение с правами администратора:


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

Как узнать версию ejabberd

ejabberd - XMPP сервер, написанный на Erlang. Узнать версию установленную в системе можно так:
1. Если остались файлы дистрибутива, то версию можно узнать по имени пакета ejabberd-x.x.x
2. Найти в системе файл ejabberd.app и найти там строку вида: {vsn, "x.x.x"}
3. Если у вас нет доступа к системе, но нужно открыть в XML-консоль (например в QIP, Miranda) и послать серверу команду:

  

Сервер он вам ответит приблизительно так:

  
    ejabberd
    2.1.10
  unix/linux 3.2.0
  

четверг, 25 октября 2012 г.

XML Viewer. Удобный просмотр XML

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

1. Если вы уже используете какую-то из JetBrains IDE, то нажмите Ctrl+Alt+L (или через меню: Code->Reformat Code)

2 . Еще есть простая бесплатная программа Free XML Editor:

Пример просмотра документа:

Для форматирования документа, нужно нажать F8.

Предварительно нужно открыть пункт меню Tools->Preferense, и там выбрать форматирование табуляцией:




Очень просто и удобно.

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

VirtualBox. Настройка общих папок для Ubuntu

Основная ОС: Windows 7
VirtualBox ОС: Ubuntu 12.04
Задача: настроить общие папки

1. Создаем папку "d:/share" под Windows 7.

2. Открываем настройки VirtualBox, находим в меню пункт "Общие папки" и добавляем там нужную:

3. Заходим на виртуальную машину, и в папке вашего пользователя, создаем новую папку, ставим нужный уровень доступа:
username@your_server:~# mkdir shared
username@your_server:~# chmod 0777 shared

4. Монтируем папку:
username@your_server:~# sudo mount -t vboxsf share shared

!!! Есть неприятный баг: когда имена папок в обоих системах совпадают - команда mount вернет ошибку, именно потому, папки специально названы share и shared


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

Javascript. Реализация Singleton и статического класса

Реализовать статический класс в js очень просто, это будет простой объект:
var obj = {
  field: 'value',
  fnTest: function(){
    return 'res: '+ this.field;
  }
};

// Использование:
console.log( obj.field ); // 'value'
console.log( obj.fnTest() ); // 'res: value'
Если нам нужна предварительная инициализация, то добавим некий метод init, который может устанавливать значение полей объекта:
var obj = {
  field: 'value',
  options: {},
  init: function(o){
    this.options = $.extend(true, {}, o);
  },
  fnTest: function(){
     return this.field;
  }
};

// Использование:
obj.init({o:4,test:2});
console.log( obj.options ); //{o:4,test:2}
Этого функционала, в большинстве случаев, должно хватить, но бывает нужен и синглетон (Singleton): например важно иметь приватные данный и методы (статический класс полностью публичен) Один из демонстрационных вариантов реализации синглетона :
var cSingleton = (function(){
  // Class instance:
  var _instance = null;

  // Private:
  var test = 1;
  var options = {};
 
  var fnPrivate = function(){
    // some code
  }
 
  // Constructor:
  function Init(o){
    options = $.extend(true, options, o || {});
  }
  
  // Public:
  Init.prototype = {
    pub: 0,
    fnTest: function(){
       return test;
    },
    getOptions: function(){
      return options;
    }
  }

  return function(args){
    if(!_instance){
       _instance = new Init(args);
    }
    return _instance;
  }
}());

ob = new cSingleton({x:1});

console.log('1:', ob.fnTest());
console.log('opts:', ob.getOptions());

ob2 = new cSingleton({x:2});

console.log('2:', ob2.fnTest());
console.log('opts:', ob.getOptions());

// Результат:
1: 1
opts: Object { x=1}
2: 1
opts: Object { x=1}
Так мы гарантируем, что класс вернет только одно значение. Возможно это и "синтетическая" задача, но возможно кому-то и пригодиться

среда, 13 июня 2012 г.

jQuery. Reverse each. Обратный перебор

Встречаются задачи, когда было бы удобно осуществлять перебор коллекции jQuery в обратном порядке. Ниже привожу функцию которая дает такую возможность:
jQuery.fn.reverseEach = (function () {
 var list = jQuery([1]);
 return function (c) {
  var el, i=this.length;
  try {
   while (i-->0 && (el=list[0]=this[i]) && c.call(list,i,el)!==false);
  }
  catch(e) {
   delete list[0];
   throw e;
  }
  delete list[0];
  return this;
 };
}());

$("li.classname").reverseEach(function(){
  // this сразу содержит объект jQuery
  console.log( 'id:', this.attr('id') );
  //return false; - Если в каком-то случае вернем false - обход прервется в этом месте
});
Если нужно поведение аналогичное .each(), когда к элементу обращаемся через $(this), нужно заменить 13 строчку на:
  return this.get(0); // Вместо: return this;