пятница, 10 апреля 2009 г.

Как сделать из домашней линукс машины простейший роутер за 5 минут

Исходные условия
  • Машина с ОС Linux, c двумя сетевыми адаптерами (первый будет смотреть на ADSL модем раздающий интернет, второй - на вторую машину)
  • Машина которая желает подключится в интернет через Linux машину.
  • Настроенный ADSL роутер.
Настройка сетевых интерфейсов Linux - маршрутизатора
  • Выполняем ifconfig и смотрим название наших сетевых интерфейсов. Вероятнее всего это будет eth0 и eth1.
  • Правим конфигурационный файл интерфейсов /etc/network/interfaces вашим любимым редактором. Должно получится что-то вроде этого:

    auto lo eth0 eth1
    iface lo inet loopback

    iface eth0 inet static # интерфейс смотрящий на ADSL роутер
    address 192.168.1.3 # IP адрес
    netmask 255.255.255.0 # маска подсети
    gateway 192.168.1.1 # адрес ADSL модема(роутера)

    iface eth1 inet static # интерфейс смотрящий на внутренюю сеть
    address 192.168.10.1 # IP адрес
    netmask 255.255.255.0 # маска подсети
  • Теперь делаем рестарт коммандой
    sudo /etc/init.d/network restart
Настройка сетевого интерфейса машины в сети
  1. Для Windows
    • Создаем новое сетевое подключение
    • Используем слудующие настройки
      • IP: 192.168.10.2
      • Netmask: 255.255.255.0
      • Route: 192.168.10.1
      • DNS: настройки DNS берем от линукс машины- роутера, они записаны в файле /etc/resolv.conf (см. строчки начинающиеся с nameserver)
  2. Для Linux
    • Прописываем в /etc/network/interfaces
      auto lo eth0
      iface lo inet loopback

      iface eth0 inet static
      address 192.168.10.2
      netmask 255.255.255.0
      gateway 192.168.10.1
    • Копируем в /etc/resolv.conf строчки начинающиеся с nameserver из такого же файла роутер-машины.
    • sudo /etc/init.d/network restart
  3. Теперь роутер-машина должна пинговаться (ping 192.168.10.1)
Включение маршрутизации на Linux-роутере
  1. Создаем скрипт следующего содержания
    #!/bin/sh
    INET="eth0"
    INETIP="192.168.1.3"

    iptables -F INPUT
    iptables -F FORWARD
    iptables -F OUTPUT

    iptables -P INPUT ACCEPT
    iptables -P OUTPUT ACCEPT
    iptables -P FORWARD ACCEPT

    iptables -t nat -A POSTROUTING -o $INET -j SNAT --to-source $INETIP
    echo "1" > /proc/sys/net/ipv4/ip_forward
  2. Даем ему права на выполнение
    chmod +x <имя скрипта>
  3. Копируем в удобное место
    sudo cp <
    имя скрипта> /root/.
  4. Ставим для выполнения при загрузке, для этого добавляем следущую строчку в /etc/rc.local перед exit 0
    /root/<имя скрипта>
  5. Первый раз запускаем скрипт вручную
    sudo /root/<
    имя скрипта>

четверг, 5 марта 2009 г.

Николай Луганский играет Рахманинова



Причем очень хорошо играет как по мне

вторник, 8 июля 2008 г.

Сегодня должны запустить БАК

Блин, ловлю себя на мысли, что все таки хочу чтобы запуск LHC накрылся концом света. Чисто чтоб поржать :) Если какой-нить ученый говорит про то что все херня и никаких черных дыр не будет у меня все же крутится мысль: "Чувак, да что ты знаешь про бозоны Хиггса". И видимо я не один такой. Стоит в гугле набрать: "когда за" и по автодополнению сразу видно что всем интересно когда ж его наконец запустят (кроме девочек которые вбивали "когда забеременеть").

UPD: Судя по сайту http://www.lhcountdown.com запуск опять перенесли на месяц. Так что ждемс :)
UPD: Мне кажется коллайдер все же втихаря запустили. Потому что все вопросы, заданные нашему проджект менеджеру, пропадают в черной дыре.

среда, 18 июня 2008 г.

Я знаю русский язык!!! :)

Результаты тестирования
8 из 8 - Поздравляем, вы - вымирающий вид россиянина, отлично знающего свой родной русский язык. Вы один из немногих носителей элитарного знания, доступного в наше время единицам (4% от общего числа опрошенных). Второй вариант: вы - выпускник, которого хорошо натаскали на сдачу экзамена по русскому языку. Третий вариант: вы – репетитор. Или просто закончили филологический факультет и пошли работать не по специальности.

Я проверил свои знания русского языка и получил пятерку.



Сходи, проверься?

суббота, 1 марта 2008 г.

tskeleton плагин для vim

Еще одна полезность для vim — это плагин tskeleton.
При разработке вам часто приходится открывать новый файл и писать все по новой, эти ненависные гарды (#ifndef #define #endif), одну и ту же шапку документации, один и тот же заученный кусок кода для главной функции, одни и те же строки для реализации конструктора и деструктора класса. (ну или на чем вы там программируете? ;)). А еще можно написать готовые скелеты для циклов for, условий if... и.т.д.

Берусь вам в этом помочь ;)

1. Качаем и устанавливаем плагин.

Взять его нужно вот здесь.
Для установки качаем его себе, открываем vim-ом, далее набираем
:so %
Думаете все заработает? Ах нет :) Еще как оказалось необходимо таким же образом скачать и установить tlib здесь.

2. Качаем и устанавливаем "заготовочки" для шаблонов.

Даже если вы и не программируете на предлагаемом наборе


  • batch.bat

  • deplate.txt

  • latex.tex

  • php.inc.php

  • php.php

  • plugin.vim

  • ruby.rb

  • shell.sh

  • text.txt


...то в любом случае они пригодятся для того чтобы лучше разобраться как написать шаблон для вашего любимого языка ( если ваш оказался здесь и это виндовский bat файл - то помните: "Any machine that doesn't have Perl on it is a sad machine indeed (c)").

Экзамплы можно найти в zip архиве на вышеуказаном сайте tskeleton (tSkeleton-Samples.zip).

Распаковываем и кладем в директорию ~/.vim ( если вы не знаете что означает тильда перед наклонной палочкой, может не стоит дальше читать?). В общем случае на нужную директорию указывает переменная g:tskelDir. Для того чтобы посмотреть куда она указывает наберите в vimе :echo g:tskelDir.

Шаблоны плагин подгружает прямо из корня директории skeletons, в то время как скачанные экзамплы хранятся в папке prefabs этой директории. Поэтому для эксперемента представим что мы пхп программеры и перенесем/скопируем 3 файла

php.class.php
php.inc.php
php.php

из ~/.vim/skeletons/prefabs в ~/.vim/skeletons/

Далее набираем vim ~/.vimrc и добавляем 3 строчки

let g:tskelUserName="Vadim\ Khandus"
let g:tskelUserEmail="vkhandus@gmail.com"
let g:tskelUserWWW="http://vkhandus.blogspot.com"

вставив туда вместо моих свои данные (прошу вас сделайте это - я не хочу краснеть за ваш код ;)).

Вроде все !!!!!


Тестируем:

vim <имя>.php
vim <имя>.class.php
vim <имя>.inc.php

<имя> возьмите на ваш вкус (только без пошлостей, медведов и первонахов!!!)

Остальное читайте в :h tSkeleton
И вот еще видео пример использования:

пятница, 29 февраля 2008 г.

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

1. Что такое ctags?

Это утилита которая умеет генерировать специальный индексный файл (файл с тегами) сканируя исходные файлы и выделяя из них объекты, типичные для различного множества языков.

2. Для чего нужен ctags?

Этот файл с тегами позволяет редактору быстро и легко локализовать нужный объект. Вот примерный список редакторов, умеющих
ctags:
Vi и его наследники (Elvis, Vim, Vile, Lemmy), CRiSP, Emacs, FTE (Folding Text Editor), JED, jEdit, Mined, NEdit (Nirvana Edit), TSE (The SemWare Editor), UltraEdit, WorkSpace, X2, Zeus.
В моем случае мы кроме прямого назначения будем использовать эту утилиту для "умного" авто дополнения. Но об этом позже.

3. Где взять ctags?

Ну это не проблема, умей вы пользоваться гуглем :). Для моего дистрибутива похоже что
ctags шел вместе со стандартной поставкой пакета vim-full (ubuntu 7.10). И отлично работал вместе с vim даже когда я о нем не подозревал :).
В любом случае для дебианоподобных дистров можно выполнить команду
sudo apt-get install ctags
которая установит пакет с нужными зависимостями.

4. Как мне создать теговый файл для моего С\С++ проекта?

Простой способ:
ctags -R
создаст файл tags рекурсивно обойдя файлы текущей директории.

Я предпочитаю способ посложнее:
ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .
Разберемся в опциях:

--c++-kinds=+p - добавляет прототипы к базе тэгов для С\С++ файлов

--fields=+iaS - используемые поля: наследование (i), доступ (a), сигнатура функции (S)
--extra=+q - добавляет контекстную информацию к тегу. (без этой опции скрипт не может получить методы класса (Without this option, the script cannot get class members.))

5. Как добавить тег файл к текущей сессии vim?

:set tags+=/path/to/file
Некоторые пути сканируются по умолчанию, это:
./tags,./TAGS,tags,TAGS


6. Как использовать
ctags в моем коде?

Я приведу самые распространенные комбинации, все остальное можно прочитать набрав в vim :h ctags

CTRL-] - перейти на определение тега(в новом буфере)
CTRL-t - возвратиться назад по стеку вызовов
[i - показать первую строку содержащую слово под курсором, поиск с начала файла.
]i -
показать первую строку содержащую слово под курсором, поиск с текущей позиции.
[I - показать все вхождения данного тега
]I -
показать все вхождения данного тега с текущей позиции курсора
[ CTRL-I - перейти на определение тега(в новом буфере)
] CTRL-I - перейти на определение тега(в новом буфере) с текущей позиции курсора
CTRL-W i - открыть новое окно с курсором на строке ключевого слова.

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

Рекомендую добавить такую строчку в ваш ~/.vimrc
map <F4> [I:let nr = input("Which one: ")<Bar>exe "normal " . nr ."[\t"<CR>

Это позволит увидеть все вхождение тега, выбрать нужное и отрыть его в новом окне по нажатию F4