вторник, 5 февраля 2013 г.

Chromium постоянно просит пароль

Как же меня достал этот Chromium! Постоянно просит пароль!
Вначале я терпел. Пытался вводить пароль. А ему плевать.

В общем нашёл ключик как это отключить -  запускать его с параметром --password-store=basic
Командная строка будет выглядеть примерно так
/opt/google/chrome/google-chrome --password-store=basic %U
Что это означает не искал. Возможно не самое правильное решение, но он перестал меня доставать. 

четверг, 8 ноября 2012 г.

Групповая обработка файлов в bash (цикл for)

Есть две папки
  1. bin - куда собирается программа
  2. 10y - папка с материалами, с которыми должна работать программа.
Раньше я просто копировал папку с материалами в bin. Однако настало время что я узнал, что мой винт не резиновый а материалов там пол Гига.

В общем решил симлинки положить в bin. Но создавать в ручную около 50 симлинков лень. Решил поискать как это дело можно автоматизировать.
Нашел.

Итак, структура каталогов следующая

project
├── 10y
├── bin
...
└── src


for file in 10y/*; do ln -s ../10y/$file ../bin/$file; done
  1. Заходим в каталог project
  2. Пишем выше приведенную строчку и жмем ентер
  3. Наслаждаемся результатом ))
следующая строка ищет все файлы и каталоги в папке 10y
for file in 10y/*;
где  file - это переменная итератор

далее создает для каждого выбранного файла или каталога относительный симлинк в папке bin
do ln -s ../10y/$file ../bin/$file;
значение переменной извлекается через  $, поэтому пишем не просто file, а $file

В общем виде цикл организован так
for <переменная итератор> in <маска>; do <действие>; done
Обратите внимание на точки с запятыми do и done - это обязательно

суббота, 18 февраля 2012 г.

Как убрать закладки у PageControl?

Уже много раз нужно было убрать у TPageControl эти закладки. Не TabSheet,  а именно сам заголовок. Мне нужно было для визарда, для формы настроек, где слева дерево, а справа страница с контролами.
Как сделать это с TPageControl сразу не понятно и поэтому как я только не изголялся - использовал и TFrame, и TNoteBook. Всё неудобно. Но как это сделать с TPageControl я долго не искал, потомучто нужно было делать срочно.
И вот настал момент, когда сказали переделать существующий PageControl, у которого около 20 страниц, на каждой из которых может быть до 20 контролов. Переделывать все это заново как-то не хотелось.
Правду люди говорят:
"Лень -  двигатель прогресса"
Нашел как это сделать. И все оказалось очень просто. И так.

  1. Кидаем на форму TPageControl.
  2. Устанавливаем  TPageControl.Style := tsButtons.
  3. Заполняем его TTabSheet-ами
  4. У каждого табшита устанавливаем TabVisible := False;
  5. Потом присваиваем TPageControl.ActivePage := TabSheet1;
В моем случае я сделал при создании формы
 pcMain.Style := tsButtons;
 for I := 0 to pcMain.PageCount-1 do
    pcMain.Pages[I].TabVisible := False;
 pcMain.ActivePage := tsBasic;

Заполнил TreeView нодами с заданными значениями SelectedIndex. Потом в TTreeView.OnChange 

procedure TfrmMain.PropTreeChange(Sender: TObject; Node: TTreeNode);
begin
  case Node.SelectedIndex of
    10  : pcMain.ActivePage := tsBasic;
    20  : pcMain.ActivePage := tsDocs;
    30,
    31  : pcMain.ActivePage := tsTextsOffer;
    32  : pcMain.ActivePage := tsTextsInfo;
...

где tsBasic и тому подобные - это TTabSheet


Вот и все

пятница, 17 февраля 2012 г.

Проблемы с наследниками TFrame

Добавил в проект фрейм  TCustomTextFrame = class (TFrame). Визуальных контролов на него не ложил. Просто добавил нужные свойства, методы, объявил абстракные...
Добавить наследника TCustomTextFrame  через File/Add New/Other/Inherited не получилось.
Добавил простой фрейм и вручную в коде поменял ему предка с TFrame на TCustomTextFrame 
TframeTextsOffer = class(TCustomTextFrame)
Всё  нормально подхватилось и заработало.

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

Оказалось что делфи почемуто добавляет внуку, так сказать, фрейма в *.dfm свойства ClientHeigh, ClientWidth и ещё кучу всякого. Но у фрейма такого нет. Вот и ругается.
Но простое удаление не дает результатов -  делфи при открытии TframeTextsOffer  в дизайнтайме упорно добавляет эти свойства, на которые потом сама же и ругается.

Помогло только изменение вручную в *.dfm object frameTextsOffer: TframeTextsOffer  на inherited frameTextsOffer: TframeTextsOffer.

Не знаю насколько это правильно, но пока работает.

вторник, 24 января 2012 г.

Delphi и дескрипшены к полям MS Access

Задача: Получить коментарии (описания) полей в MS Access и сделать их хинтами к контролам.


Итак что нужно сделать
  1. Получить комментарии к полям
  2. Список Таблица.Поле=Коментарий
  3. Обновить хинты контролов.
Первое.
В DataModule делаю 


private
  FFieldsComments: TStrings;
  ...

  procedure UpdateFieldsComments;
published
  property FieldsComments: TStrings read FFieldsComments;


FFieldsComments создается в DataModuleCreate и разрушается в DataModuleDestroy.


procedure TdmMain.UpdateFieldsComments;
var
  ADODataSet: TADODataSet;
begin
  if Assigned(FFieldsComments) and ADOConnection1.Connected then
  begin
    FFieldsComments.Clear;
    ADODataSet := TADODataSet.Create(Self);
    try
      ADOConnection1.OpenSchema(siColumns, VarArrayOf([Unassigned, Unassigned, tblDeviceCharacteristics.TableName]), EmptyParam, ADODataSet);
      ADODataSet.Open;
      ADODataSet.First;
      while not ADODataSet.Eof do
      begin
        if ADODataSet.FieldByName('DESCRIPTION').AsWideString <> '' then
          FFieldsComments.Append(ADODataSet.FieldByName('TABLE_NAME').AsWideString + '.' +ADODataSet.FieldByName('COLUMN_NAME').AsWideString + '=' +ADODataSet.FieldByName('DESCRIPTION').AsWideString);
        ADODataSet.Next;
      end;
    finally
       FreeAndNil(ADODataSet)
    end;
  end;
end;



Всё делается методом OpenSchema.Самый мне непонятный параметр это второй. Туда передаю VarArrayOf(...), но я пока не нашел описания что есть что в этом масиве. Я просто подставил то что нашёл в инете и получил, что хотел. Может, если найду описание дополню статью. 
Процедуру UpdateFieldsComments вызываю в ADOConnection.OnAfterConnect.

Теперь в форме нужно обновить хинты.


procedure TfrmMain.UpdateHitnsFromDB;
var
  i: integer;
  procedure UpdateDBEditHint( AControl: TDBEdit);
  begin
    if AControl.DataSource.DataSet is TADOTable then
      AControl.Hint := dmMain.FieldsComments.Values[TADOTable(AControl.DataSource.DataSet).TableName + '.' + AControl.DataField];
  end;

  procedure UpdateDBLinkEditHint( AControl: TDBLinkEdit);
  begin
    if AControl.DataSource.DataSet is TADOTable then
      AControl.Hint := dmMain.FieldsComments.Values[TADOTable(AControl.DataSource.DataSet).TableName + '.' + AControl.DataField];
  end;

  procedure UpdateDBLookupComboBoxHint( AControl: TDBLookupComboBox);
  begin
    if AControl.DataSource.DataSet is TADOTable then
      AControl.Hint := dmMain.FieldsComments.Values[TADOTable(AControl.DataSource.DataSet).TableName + '.' + AControl.DataField];
  end;

begin
  for I := 0 to ComponentCount-1 do
    if Components[I] is TDBEdit then
      UpdateDBEditHint(Components[I] as TDBEdit)
    else if Components[I] is TDBLinkEdit then
       UpdateDBLinkEditHint(Components[I] as TDBLinkEdit)
    else if Components[I] is TDBLookupComboBox then
       UpdateDBLookupComboBoxHint(Components[I] as TDBLookupComboBox)
end;

UpdateHitnsFromDB вызываю в actConnectExecute
Вот и все.  


среда, 18 января 2012 г.

Delphi и Диалог выбора папки

Сколько себя помню у Delphi никогда не было своего компонента выбора папки типа TOpenDialog и каждый раз когда нужно было выбирать именно папку искал как это делается.
Вот теперь решил записать то что я нашел и немного переделал для себя.
Это пока функция, возможно когда-то сделаю компонент типа TOpenFolder.

И так всё эавязано на функции ShBrowseForFolder из модуля ShlObj или по новому Winapi.ShlObj.
Но множество примеров, которые я видел были без кнопки Create New Folder и без возможности установки пути по умолчанию.
И так код:
...
function SelectFolder(hWnd: HWND; const Caption: WideString; var Folder: WideString): boolean;
...
implementation
uses  ShlObj, ActiveX, Forms;
var
  DefaultPath: widestring = '';
...
//Эта функция нужна для установки пути по умолчанию
function BrowseCallbackProc(hwnd: HWND; uMsg: UINT; lParam: LPARAM; lpData: LPARAM): integer; stdcall;
begin
  Result := 0;
  if uMsg = BFFM_INITIALIZED then
    SendMessage(hwnd, BFFM_SETSELECTION, 1, LongInt(PWideChar(DefaultPath)));
end;

function SelectFolder(hWnd: HWND; const Caption: WideString; var Folder: WideString): boolean;
var
  WindowList: Pointer;
  BrowseInfo : TBrowseInfo;
  Buffer: PChar;
  RootItemIDList, ItemIDList: PItemIDList;
  ShellMalloc: IMalloc;
  IDesktopFolder: IShellFolder;
  Eaten, Flags: LongWord;
begin
  FillChar(BrowseInfo, SizeOf(BrowseInfo), 0);
  if (ShGetMalloc(ShellMalloc) = S_OK) and (ShellMalloc <> nil) then
  begin
    Buffer := ShellMalloc.Alloc(MAX_PATH);
    try
      DefaultPath := Folder;
      RootItemIDList := nil;
      with BrowseInfo do
      begin
        hwndOwner := hWnd;
        pidlRoot := RootItemIDList;
        pszDisplayName := Buffer;
        lpfn := @BrowseCallbackProc;
        lpszTitle := PWideChar(Caption);
        ulFlags := BIF_RETURNONLYFSDIRS or $0040 or BIF_EDITBOX or BIF_STATUSTEXT;
      end;
      WindowList := DisableTaskWindows(0);
      try
        ItemIDList := ShBrowseForFolder(BrowseInfo);
      finally
        EnableTaskWindows(WindowList);
      end;
      Result :=  ItemIDList <> nil;
      if Result then
      begin
        ShGetPathFromIDList(ItemIDList, Buffer);
        ShellMalloc.Free(ItemIDList);
        Folder := Buffer
      end;
    finally
      ShellMalloc.Free(Buffer);
      DefaultPath := '';
    end;
  end;
end;



Теперь пример использования:
procedure TframeGeneralSettings.Button1Click(Sender: TObject);
var
  Value: WideString;
begin
  Value := edtImagesFolder.Text;
  if SelectFolder(Handle,  'Select ' + lblImagesFolder.Caption, Value) and (Value <> edtImagesFolder.Text) then
    edtImagesFolder.Text := Value;
end;




пятница, 9 декабря 2011 г.

Delphi не загружает мои компоненты

Появилась необходимость написать свой компонет потомок TCustomLabel. Написал. Может в будущем сделаю заметочку, что и как писал

Так вот. Создал пакет, создал компонент и с дефотными настройками собрал и поставил. Стало без проблем. Заменил в основном проекте все лабелы на свои.

Всё работает отлично. Настроение хорошее...

Пока делфу не перегрузил. Тут оказалось, что оно не видит мой пакетик, мою бэпээлочку. Разбираюсь. Оказалось если не указать, куда ставить пакет, то  оно его ставит в 
С:\Documents and Settings\All Users\Documents\RAD Studio\5.0\Bpl\
С:\Documents and Settings\All Users\Documents\RAD Studio\5.0\Dcp\
И при загрузке от туда не поднимает. Т.к. я буду отдавать этот компонент людям, что бы они дальше с ним работали, то я не надаюсь, что каждый додумается добавить эти папки в пути поиска.

Полез в настройки делфы и подсмотрел как она обзывает папку с собой и  в настройках пакета прописал пути Output directory и DCP output directory



Теперь пакет ставится в 
С:\Program Files\CodeGear\RAD Studio\5.0\bin\
С:\Program Files\CodeGear\RAD Studio\5.0\lib\
Может я что-то сделал не канонично. Но по крайней мере работает.

вторник, 29 ноября 2011 г.

Archlinux & VirtualBox перекомпиляция модуля ядра

На данный момент пользую на хосте ArchLinux, а для работы пользую виртуалки под VirtualBox. Но иногда обновляю систему на хосте и когда обновляется ядро, VirtualBox отказывается работать и проси пересобрать ядро такой командой
/etc/rc.d/vboxdrv setup
Она то и сбивала меня с толку. Дело в том, что в Арче не команды /etc/rc.d/vboxdrv. А так как это обнаруживалось во время рабочего дня - искать каноничных решений времени обычно небыло. Просто переставлял VirtualBox.

Но вот нашлось время более внимательнее посмотреть на проблему и вот что оказалось нужно было запускать
/etc/rc.d/rc.vboxdrv setup

пятница, 21 октября 2011 г.

Samba 3.6.0: В windows не работают симлинки

Т.к. я в основном работю в сетях с машинами на которых стоит Windows, то часто бывает нужно дать кому-то что-то переписать.

Но все данные (аудио, видео, книги...) у меня лежат посортированные по папочкам (мечтаю сеть и до конца все посортировать :)). А открывать доступ на кучу папок не есть Ъ. Поэтому в линуксе я открываю одну папочку для людей, а туда кидаю симлинки на нужную мне информацию.

Получается что открывать ничего не надо. А что бы дать доступ нужно только проверить права на сам файл\папку (должны иметь право чтения для группы самбы или для всех) и кинуть туда симлинк.

Так вот. Давно никому ничего не надо было открывать. Система переставилась. Теперь у меня Archlinux. Обновился пару раз. И тут оказалось что из под винды нельзя ходить по симлинкам.

Погуглив нашел решение: в /etc/samba/smb.conf дописать

[global] 
follow symlinks = yes 
wide links = yes 
unix extensions = no

пятница, 17 июня 2011 г.

Virtualbox, Could not load the Host USB Proxy Service (VERR_FILE_NOT_FOUND)

Could not load the Host USB Proxy Service (VERR_FILE_NOT_FOUND).The service might be not installed on the host computer.

Код ошибки: 0x80004005
Компонент: Host Интерфейс: IHost {81729c26-1aec-46f5-b7c0-cc7364738fdb} Вызванный объект: IMachine {0332de0e-ce75-461f-8c6f-0fa42616404a} 

Решение:
Добавить в /etc/fstab следующую строку
none /proc/bus/usb usbfs devgid=46,devmode=664 0 0 
И перемонтировать
mount -a 
Подробнее тут
Взято здесь

вторник, 17 мая 2011 г.

KDE не выключает комп

Некоторое время назад мой KDE4 перестал выключать комп. Я ему выключить, а он вырубает графику и переходит в консоль. В конце концов надоело каждый раз заходить и писать sudo poweroff. Погуглив тему, увидел, что не только у меня такая проблема. И сразу выискалось решение
kdesu systemsettings -> Вход в систему -> Выключение -> Команды завершения работы, "Выключение:"
У меня там было
/sbin/shutdown -p now 
Я поменял на
/sbin/poweroff 
И всё заработало.
 

суббота, 14 мая 2011 г.

Nepomukservises - пожиратель процессорного времени

Если у вас KDE4 и комп что-то тормозит гляньте список процессов. Возможно и у вас злобствует сабж.
Список процессов можно посмотреть в консоли командой top или в KDE4 по хоткею Ctrl+Esc 
Это оказалась поисковая система типа GoogleDesctop. Когда-то я сталкивался уже с этим поделием, но разобравшись с проблемой не записал её сюда. Поэтому пришлось искать решение ещё раз.
Пакета с именем Nepomuk в моём текущем дистрибутиве (Archlinux x64) не нашлось. Поэтому если не удалить, то, погуглив, нашёл хоть как отключить сабж.
Оказалось проще простого.
1. Открываем Параметры системы

2. Открываем поиск по меткам и содержимому

 3. Отключаем этот Nepomuk


Ну и убить уже запущенный процесс. Для этого нам нужно получить PID запущенного процесса. Его можно узнать в списке запущенных процессов (см. выше) а потом просто
kill -9 ПолученныйPID
-9 это убить без суда и следствия.

суббота, 23 апреля 2011 г.

Nmap: Сканирование сети

Надо было выключить свой нотик, который остался в офисе за был за шлюзом. Помнил свой IP который получал серваком в офсисе, так что думал что проблем нет. Зашел на сервак через ssh. Но тут оказалось что именно в этот раз нотик я не подключал через eth, а через wlan. IP wlan я конечно не знал. Как найти свой нотик среди других компов? Оказалось очень просто:
nmap 192.168.1.1-255
И по списку открытых постов уже легко определил, свой нотик, т.к. я знаю что у меня там запущено и какие порты открыты.
nmap очень полезный инструмент. Стоит почитать про него подробнее. Возможно когда-то напишу более развернуто про него

понедельник, 4 апреля 2011 г.

Создание дерева каталогов

Периодически появляется потребность создавать дерево каталогов. Например нужно создать /tmp/dir1/subdir1/subdir2/subdir3. Обычно для этого я писал:

mkdir /tmp/dir1
mkdir /tmp/dir1/subdir1
mkdir /tmp/dir1/subdir1/subdir2
mkdir /tmp/dir1/subdir1/subdir2/subdir3

Немного покопавшись нашёл как это делать одной командой:

mkdir -p /tmp/dir1/subdir1/subdir2/subdir3

Так. Это была создана линейная структура каталогов, если её можно так назвать. А часто на практике нужна разветвлённая. У каждого программиста есть своя структура каталогов для проектов. И всякий раз создавать вручную каждый каталог не очень интересно. Например нужно создать следующую структуру каталогов:

Poject1
Poject1\bin
Poject1\bin\x64
Poject1\bin\x32
Poject1\lib
Poject1\src
Poject1\doc
Poject1\doc\html
Poject1\doc\pdf
Poject1\doc\man
Poject1\doc\info

В данном случае нам поможет таже команда mkdir. Это можно записать так:

mkdir -p Poject1/{bin/{x64,x32},lib,src,doc/{html,pdf,man,info}}

Разобраться с этой командой думаю не составит труда.

вторник, 7 сентября 2010 г.

bash: Кто самый большой у нас в каталоге?

Проблема: пришло к концу место на разделе /home.
Задача: Найти замый жирный каталог

Решение:
du -m --max-depth=1 | sort -n

,где du - Disk Usage - утилита для определения занимаемого места файлом или каталогом.
параметры: 
-m выдавать информацию в мегабайтах, а то по умолчанию оно выдаем в понятном для человека виде - цифра и символ килобайт, мегабайт или гигабайт. Но так как сортировать будем не мы, а утилитка sort, то эти символы будут только мешать. В данном примере я указал в мегабайтах, т.к. размер раздела в гигабайтах, но можно указать и в килобайтах -k, и в байтах -b. В битах почемуто не хочет показывать :)
--max-depth=1  показывать файлы и каталоги только текущего уровня, не выдавая нагора все их внутренности

| перенаправляет результат работы du команде sort

sort сортирует данные полученные от du по первой колонке по убыванию по умолчанию.
параметры: 
-n указываем, что воспринимать первую колонку как цифры, а не как строки

Вот и все. Остальные параметры смотрите в манах

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

Установка и настройка Subversion на базе ALTLinux 5.1

Недавно была мной мне поставлена задача установить и настроить такую систему контроля версий как Subversion. Оказалось что всё не так очевидно и сразу поднимаемо. Вот и решил сделать заметочку на память.

Итак есть машина под ALTLinux 5.1. На ней и будем экспериментировать.

Установка и настройка сервера.

Первым делом скачиваем и устанавливаем сам сервер subversion.
В линуксе это легко и просто сделать через утилиту synaptic или в консоли с помощью apt-get
apt-get install subversion-server-common subversion-server-standalone

эти пакеты я доставил, т.к. кое-какие уже были установлены с разными IDE.
Все репозитарии должны находиться в папке /var/lib/subversion или хотя бы линк туда кинуть надо.
У меня раздел для хранения файлов находится в home. Поэтому под рутом создаем каталог для всех репозитариев SVNa.
mkdir /home/svn 

Создаём сам репозитарий с причудливым именем test02
svnadmin create /home/svn/test02

Эта комманда создаст всю структуру репозитария с базой, конфигами и прочей необходимой всячиной. Сделаем первое вливание. Како-нить файлик
svn import /var/www/apache2/html/ file:///home/cvsroot/ -m "initial import"

Теперь настроим сам репозитарий. Для этого нам нужен каталог /home/svn/test02/conf. В нем содержаться 3 файла
svnserve.conf - общие настройки репозитария
passwd   - пользователи репозиратия 
authz  - тут назначение доступа к каталогам в самом репозитарии

ВНИМАНИЕ! Все параметры в этих файлах не должны начинаться с пробелов. А то когда я просто раскоментировал то, что мне нужно, оно не заработало - ругалось на стороне клиента, что в такой-то строке svnserve.conf нехватает чего-то.

svnserve.conf 
Тут все настройки уже есть, их нужно только раскоментировать и по необходимости изменить. Нас интересует только секция general. В конце концов приведите ее к виду:
[general]
# Запрещаем доступ анонимным пользователям
anon-access = none
#Авторизированным разрешаем запись
auth-access = write

#Здесь указываем где хранится список пользователей и паролей. passwd - это имя файла
password-db = passwd

#Если вам нужно разделить доступ к каталогам внутри репозитария для пользователей, то нам нужна следующая опция. authz  - это имя файла.
authz-db = authz


#Здесь задаем имя репозитария. Это и будет идентификатором репозитария.
realm = test02

Не разкоментируйте authz-db = authz, если не собираетесь сразу менять назначать права на определённые каталоги разным пользователям в файле authz.  А то получаеться указали читать права из файла  authz, а в нем все ничего не назначено. Результат - Access denied для всех, даром, и пусть никто не уйдёт обиженным!

passwd
Тут определяем пользователей и пароли к ним. Пароли хранятся тут в открытом виде, но при грамотном администрировании это не проблема. Итак секция users.
[users]
boss = b0sP@ssw0rD
user01 = useR01P@ssw0rD
user02 = userR2P@ssw0rD


authz
Если вам нужно разделить права доступа к разным каталогам внутри репозитария, то поправьте этот файл. Зачем это нужно? Ну например, есть группа программстов они имеют право писать в девелопмент ветку, а релиз имеют право только читать. В нее иммеет право вносить изменения только бос. Ну и может быть, если это комерческая разработка, то наверняка тут будет еще и чать репозитария, к исходникам которой, никто не должен иметь доступа, кроме боса. Ну вот примерно так.
[groups]
# В этой секции определяем группы пользователей
developers = user01,user02
admins = bos

[test02:/]
# Название этой секции означает корень репозитария test02.
# В ней мы указываем, что все пользователи имеют достутп на чтение в корне. 
# Без этого у меня не давало доступа вообще ни к чему.
* = r

[test02:/branch]
# На папочку branch даем доступ на чтение и запись разработчикам и админам.
@developers = rw
@admins = rw

[test02:/trunk]
# На папочку trunk даем доступ на чтение разработчикам на запись админам.
@developers = r
@admins = rw

[test02:/secret]
# На папочку secret даем доступ на чтение только user01, на запись только bos. А все остальные не имеют права просматривать эту папку.
bos = rw
user01 = r
* =


Так как мы все эти действия делали от пользователя root, то и все правана папку /home/svn/test02 имеет только он. А репозитарий работает от пользователя subversion. Если вы ставили Subversion альтовый, то у вас уже есть  этот пользоватетль. Просто установите его владельцем папки /home/svn и всего её содержимого и дать права чтение/записть только ему, а всем остальным убрать даже чтение.(Вспомните незашифрованные пароли в /home/svn/test02/conf/passwd)
chown -R subversion /home/svn
chmod u=rwX  /home/svn
chmod oa-rwX  /home/svn

Теперь нужно запустить сервер subversion. В ALTLinux это делается простой коммандой
service svnserve start

И укажите ему стартовать при запуске системы
chkconfig svnserve on

Вроде всё. Если что забыл пишите.

суббота, 28 августа 2010 г.

Обустройство FireFox: Смена поисковика по умолчанию

Я как-то привык использовать Google поисковиком по умолчанию. А вот с некоторого времени Firefox пошла мода у всяких посисковых систем ставить себя по умолчанию. Это меня раздражало очень сильно. И наконец вот достало. Добрые люди подсказали как исправить ситуацию.

Шаг 1.Запускаем ФФ и в адресной строке пишем about:config
Жмем ентер и соглашаемся с тем, что если мы что-то поломаем, то это наши проблемы.

Шаг 2. Ищем ключ keyword.URL. Он содержит запрос к поисковому серверу
Шаг 3. Кликаем на нем и в открывшемся диалоговом окне заменяем строку поискового заспроса. См. в таблице 1
шаг 4. Жмем Ок и наслаждаемся


Таблица 1. Поисковые запросы
Googlehttp://www.google.com.ua/search?q=
Yandexhttp://yandex.ru/yandsearch?stype=first&clid=46511&text=
Mail.ruhttp://go.mail.ru/search?utf8in=1&fr=fftbUFix&q=

Все это выглядит так
Вот и всё.

пятница, 7 мая 2010 г.

Flash Player для linux x64

На данный момент официального релиза флеш плеера для 64 битных линуксов от  Adobe нет.
Есть какие то решения, но  они нормально не работают. Одни флешки играют другие нет.

Но погуглив тему нашел что релиза действительно нет. Но есть бета.
Ее скачать можно отсюда. Этот архив содержит только один файл libflashplayer.so
Теперь нужно подключить этот плагин к веб браузерам

Mozilla Firefox
  1. Распаковываем архив
  2. Создаем папку ~/.mozilla/plugins
  3. Копируем в ~/.mozilla/plugins плагин libflashplayer.so
  4. Перегружаем Firefox
Google Chrome
  1. Распаковываем архив
  2. Создаем папку /opt/google/chrome/plugins
  3. Копируем в /opt/google/chrome/plugins плагин libflashplayer.so
  4. Создаем символическую ссылку в папке /opt/google/chrome на плагин libflashplayer.so потому что в некоторых случаях пункт 3 не сработает
  5. Перегружаем Chrome
Для остальных браузеров пока не нужно было. 

суббота, 17 апреля 2010 г.

Шаблоны Гнома

Наверное каждый пользователь хоть раз в жизни пользовался контектным меню "Создать ..." для создания папки или какого либо документа. Я довольно часто и просто привык к этому. И у меня сложилось такое впечатление что это неотъемлемая часть графического рабочего стола.

Но когда я впервые начал серьезно пользоваться Гномом, то оказалось что в нем пунктик пустой. Нет там ничего. И это не в каком нибудь новом развивающемся дистрибутиве, у которого времени не хватает на разные мелочи. Это в Убунте!!

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

  1. Создать папку для шаблонов. Я сделал ~/.templates (точка вначале имени означает, что папка будет скрытая) 
  2. Прописать папку шаблонов в фале ~/.config/user-dirs.dirs в строке XDG_TEMPLATES_DIR="$HOME/.templates"
  3. Создать в папке ~/.templates необходимые шаблоны. Например, создаем в OpenOffice Writer новый пустой документ и сохраняем в нашу папку шаблонов с тем именем, которе хотите видеть в меню. И так для каждого нужного вам шаблона.


Всё довольно просто.

А теперь для тех, кто не совсем понимает что там за закорлючки в названии папок и файлов.

~ - сокращение, означает домашний каталог пользователя. Системой разворачивается  в строку /home/имяпользователя

.templates - точка в начале имени файла или папки означает, что это скрытый файл или скрытая папка. Поэтому если вы не нашли в своем каталоге папку ~/.config просто включите в меню Вид показывать скрытые файлы или нажмите Ctrl+H

Вот и всё

воскресенье, 4 апреля 2010 г.

Включение\выключение демонов

Чтобы не лазить ручками в /etc/init.d люди придумали более менее удобные утилиты для управления автоматическим стартом\остановкой демонов.
Я уже знаю целыйх две такие утилиты

chkconfig Это простая консольная програмулька, которая работает только с командной строкой. (ALTLinux)

sysv-rc-conf Это тоже консольная программа, но в ней уже есть довольно интуитивный интерфейс.  (Ubuntu)

Если найду еще какие. Буду сюда писать.