over 5 years ago

My current science research (in pursue of Ph.D degree) is in field of mathematical
physics. I am doing some cool stuff with representing the processes of explosion,
filtration and electrochemistry as flows of ideal liquid. There are some hard-boiled
math with Complex Complex-value functions. Project is a program in Haskell
to be able to set initial parameters and get a schematic chart representing
the final area and edges of process. Finding precise form of edges (coordinates
of points at edges) is the current goal.

To make my work public I set up a project at GitHub. Just updated it with READMEs
and such. You may look at draft theses in article/ directory. They are in
Russian, however. I plan to make an international version when there will be
enough material.

Project is here: AFCALC at GitHub.

 
over 5 years ago

Иногда связок логин/пароль становится так много, что даже записанные на отдельной бумажке (в отдельном текстовом файле) они занимают больше экрана места. Вчера меня это достало и я воспользовался тем, что на моей машине работает MySQL сервер. Сегодня мы с вами делаем простую систему для учёта учётных записей в MySQL базе данных.

Создание базы данных и таблицы логинов

CREATE DATABASE my DEFAULT CHARACTER SET UTF8;
USE my;
CREATE TABLE logins (
  id INT UNIQUE AUTO_INCREMENT PRIMARY KEY,
  hostname VARCHAR(255) CHARACTER SET UTF8,
  type VARCHAR(255),
  address VARCHAR(255),
  login VARCHAR(255) CHARACTER SET UTF8,
  password VARCHAR(255) CHARACTER SET UTF8,
  alias VARCHAR(255) CHARACTER SET UTF8
);

Теперь у нас есть база данных my (подошла бы любая, но я решил создать отдельную для подобных игр с SQL). В этой базе есть таблица logins, поля которой имеют следующее назначение (id я пропускаю, такое поле должно быть в любой таблице).

  • hostname
    Адрес сервера, к которому относится логин. Лично я для простоты пишу без http://, и указываю https:// перед адресом только если подключение явно осуществляется по HTTPS

  • type
    Тип подключения. В моей ментальной модели учётных записей существуют следующие типы подключений:

    • http Подключение к веб-сайту через браузер, обычно такие пароли — от админских панелей веб-сайтов
    • ftp FTP подключение.
    • panel Это подключения к админской панели учётной записи на хостинге.
    • mysql Пароли от MySQL серверов напрямую
    • phpmyadmin Подключение к phpMyAdmin. Бывает, что напрямую подключение к MySQL серверу запрещено, а взаимодействие с БД осуществляется через интерфейс phpMyAdmin. В таком случае получается, что логины/пароли — от базы данных, а адрес относится к Сети, а не к Интернету. :)
    • address Адрес на сервере [hostname], который относится к учётной записи. Я пишу сюда путь до админской панели в случае [type] == "http", и название каталога на FTP сервере в случае [type] == "ftp". Для [type] == "mysql" и [type] == "phpmyadmin" сюда можно писать название базы данных. В общем, полезное поле.
    • alias Вряд ли вы веб-сайты, к которым у вас есть учётные записи, называете по [hostname]. Это поле содержит запоминающееся название этого веб-сайта. Оно очень важно, потому что поиск, который мы сделаем в сделующем разделе, будет искать по альясам.

Поиск по базе

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

INSERT INTO logins (alias, hostname, type, login, password, address)
  VALUES ('Рога и Копыта', 'kopyt.xx', 'http', 'batras', 'TOPSECRET', '/bx/admpanel');

Извлечение из таблицы сведений делается, например, так:

SELECT type, hostname, login, password, address FROM logins WHERE alias like '%Копыт%'; 

Однако, это, конечно, ужасно. Я всегда ищу по альясам, а типов не так уж и много, переживу, если СУБД мне выдаст не одну строчку, а пять. Поэтому воспользуемся PL-SQL и создадим процедуру, которая уменьшит требуемое количество набираемых символов.

DELIMITER //
CREATE PROCEDURE find_login(IN alias_str VARCHAR(255))
BEGIN
  SELECT type, hostname, login, password, address FROM logins
    WHERE alias LIKE CONCAT('%', alias_str, '%');
END// 

Использовали подмену разделителя команд, чтобы можно было вставить в тело процедуры точку с запятой. Теперь можно искать учётные записи по части альяса:

CALL find_login('Копыт');

Здесь я DELIMITER вернул обратно, конечно же. :) Всё, теперь жить можно. Аналогично можно сделать процедуру для укорочения INSERT INTO, но я думаю, что это уже жлобство.

 
almost 6 years ago

Решил написать тебе список кое-каких ресурсов, откуда можно почерпнуть кое-какие сведения. :)

Исхожу от предпосылок, что тебя интересует:

  1. Разработка компьютерных игр
  2. Веб-разработка

Как и меня.

По веб-разработке.

Верстать HTML+CSS+JS можно легко научиться по Opera Web Standards Curriculum. Там учат только best practices, ты будешь в хороших руках. :)

Справочник по HTML+CSS, который я считаю нормативным, это htmlbook.ru

Умение аккуратно пользоваться CSS приходит только с опытом.

По яваскрипту есть замечательный сайт учебного характера javascript.ru. Кроме этого, только сегодня нашёл огромный гайд по Javascript от Mozilla Foundation,  он такой огромный, что я уверен, дочитав его до конца, становишься гуру жабоскрипта. :) Справочник по яваскрипту как таковой отсутствует, потому что большая часть функций берётся из DOM, здоровенного трёхуровневого словаря функций, предназначенных для работы с HTML-страницей.

Сам я чистым яваскриптом почти никогда не пользуюсь, пользуюсь jQuery. Вот справочник функций jQuery. К jQuery написаны также две дополнительные большие библиотеки -- это jQuery UI, и jQuery Tools. jQuery Tools используется в моей работе постоянно, потому что всем нужны слайдеры и всплывающие диалоговые окна. :)

Только после полноценного знакомства с традиционным HTML десятилетней давности, рекомендую переходить на чтение HTML5 — Edition for Web Developers. Сам я только ещё готовлюсь к этому шагу в будущее, потому что IE 6, 7 и 8 и даже 9 поддерживают HTML5 никак. :(

Для работы на бэк-энде тебе настоятельно мною рекомендуется язык PHP, и, соответственно, "официальный" гайд по PHP (сам я его никогда не читал полностью, только частями). Если у тебя уже развёрнут XAMPP и ты можешь добраться до index.php в каталоге сервера через http://localhost/index.php, то уже можешь начинать кодить на PHP, всё нужное уже настроено и работает. :)

В качестве каркаса для веб-приложений на PHP я очень-очень рекомендую Yii, это зверский очень удобный, но очень хардкорный каркас. Нахрен Джумлу. Вот руководство по Юи, в виде туториала от простого к сложному. Хотя предупреждаю, что Юи --- это не система управления контентом, а каркас веб-приложения (одним предложением: админку придётся делать самостоятельно).

Впрочем, в России огромное количество коммерческих сайтов сделано на 1С-Битриксе. Кучу денег может принести одно только сопровождение веб-сайтов, построенных на 1С-Битриксе. Поэтому, становятся крайне полезными два справочника: документация для разработчиков и пользовательская документация. В этих священных писаниях собрано описание всех внутренностей Битрикса.

Возможно, для настройки веб-сайта в XAMPP тебе пригодится моя статья про настройку локального Apache на виртуальные хосты. ;) Хотя вряд ли, если честно.

До сих пор при вёрстке веб-сайтов приходится учитывать особенности Интернет Эксплорера, вот статья про то, как справляться с некоторыми самыми частыми багами IE6, вот полная коллекция багов IE6,7&8. Кстати, само по себе зрелище то ещё. :)

По созданию дизайна веб-сайта в Фотошопе вот тебе три сборника ссылок (с картинками): первый набор туториалов по рисованию сайтов, второй набор туториалов, третий набор. Это я ещё сам не читал, будете с Ингой меня превосходить. :)

Про веб-разработку вроде всё вспомнил.

По разработке компьютерных игр.

Здесь пойду в обратную сторону.

Недавно в Сети нашёл замороженный проект perfectstorm --- один парень делал RTS на Common Lisp с использованием OpenGL. Я выпросил у чувака исходники и успешно их скомпилировал. В моей голове роятся мысли о том, чтобы изучить эти исходники и понять, как оно вообще работает --- там в проге по полю двигаются юниты, стреляют друг в друга, выделяются рамочкой и есть рудиментарный AI с pathfinding'ом, вполне себе RTS.

Для понимания того, как это работает, надо знать две технологии. Первая это сам язык Common Lisp, вторая это OpenGL.

Для понимания того, зачем именно Common Lisp, рекомендуется вот эта статья и вот эта статья и вот эта самая большая и подробная статья. Для изучения Common Lisp рекомендуется книга Practical Common Lisp, доступна вся онлайн, я прочитал уже 19 глав.

Для изучения OpenGL я нашёл для себя OpenGLBook.com, это сборник из 4 огромных статей, показывающих "на пальцах", каково это --- программировать компьютерную графику с использованием OpenGL.

Вообще я так понял, что в первую очередь нужно знать, как делается графика в играх, потому что это самое сложное и комплексное (и востребованное), а потом уже всё остальное.

Есть две технологии работы с компьютерной графикой: использование OpenGL и использование DirectX. DirectX, понятное дело, работает только на Windows. Однако, для него есть такая штука, как DirectX Software Development Kit (DirectX SDK), который свободно можно скачать и пользоваться. Там должен быть компилятор сразу, куча туториалов, документация --- всё, что хочешь. У фирмы Nvidia есть Nvidia Graphics SDK, он, должно быть, учитывает особенности их видеокарт, но я думаю, можно покопаться в коде и запустить его и под ATI'шной видюхой.Есть и Nvidia SDK для DirectX и Nvidia SDK для OpenGL. У ATI(AMD) ничего подобного не нашёл.

Собственно, пока только эти две книги по кодингу читаю. Когда вкурю, что к чему, дам больше ссылок.

Так как я хочу делать мультиплатформенные игры и вообще программы, то возникает вопрос ещё о том, как выводить GUI (есть разные библиотеки) и звук. :)

Пока всё, успехов там.

Марк

29 июня 2011

04:11

 
almost 6 years ago

Работая с коллегами, пользующимися альтернативными операционными системами,
:) временами приходится иметь дело с файлами, имена которых повредились после
передачи через Сеть. Моя Debian-система работает на LANG=ru_RU.UTF-8, так
что самая частая головная боль — это кодировка cp1251, тяжёлое наследие Windows98
в России.

К моему личному великому удовольствию, в Debian присутствует утилита, которая
позволяет изменить кодировку имён файлов, которые уже лежат на вашем жёстком
диске. Она называется convmv.

Дополнительно, бывает проблема получить читаемый список файлов на FTP-ресурсах,
где выставлена кодировка, отличающаяся от UTF-8. Для Krusader, которым я пользуюсь
в качестве FTP-менеджера по умолчанию, всё решается элементарным пунктом меню
«Вид» -> «Выбрать кодировку».

convmv to the rescue

Присутствует в репозитариях для squeeze:

# aptitude install convmv

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

$ convmv -f cp1251 -t UTF-8 *

В случае, если файлы повредились насмерть, то звёздочка может оказаться единственным
выходом.

По умолчанию convmv не меняет имена файлов после своего запуска — только
пишет результат, который получится при заданных настройках. Как и всегда с
кодировками, надо тыкать почти наугад, пока на экране не появится что-то читаемое.
:) Для того, чтобы изменение произошло, convmv надо будет запустить ещё раз
с флагом --notest:

$ convmv --notest -f cp1251 -t UTF-8 *

При общении с Windows-системами в России самые частые кодировки, которые будут
попадаться, это cp1251, cp866 и koi8-r.

 
almost 6 years ago

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

Общие представления

Конфиг состоит из следующих частей:

  1. Настройка отступов
  2. Настройка прокрутки
  3. Включение повышающих продуктивность режимов
  4. Отключение некоторых элементов интерфейса
  5. Изменение горячих клавиш
  6. Ещё немного дополнительных изменений

После того, как я прочитаю монструозный полный перечень возможностей EMACS
Lisp, конфиг я, пожалуй, изменю.

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

;;; To set the mod-2 indentation used when you hit the TAB key
(setq c-basic-offset 2)
;;; To cause the TAB file-character to be interpreted as mod-4 indentation
(setq tab-width 4)
;;; To cause TAB characters to not be used in the file for compression, and for only spaces to be used
(setq indent-tabs-mode nil)   

Во-вторых, так называемый «aggressive scrolling» лично мне только мешает, так
что отключаем его.

(setq scroll-conservatively 5)
(setq scroll-margin 5)
(setq scroll-preserve-screen-position 1)   

В-третьих, для меня безумно удобен viper-mode, поэтому включаем его по умолчанию
везде.

(setq viper-mode t)
(require 'viper)

Также для веб-разработки включаем nXHTML-mode, который надо перед этим скачать
и распаковать куда-нибудь (неважно куда, лишь бы файлы там и оставались и были
доступны). Допустим, я распаковал пакет nXHTML-mode в каталог ""~/.emacs.d/nxhtml/",
тогда в .emacs надо вписать:

(load "~/.emacs.d/nxhtml/autostart.el")

Теперь адский трюк: когда я хочу открыть файл через диалоговое окно, а не через
минибуфер, я хочу нажать C-x M-f, а не ползать мышкой по кнопкам и менюшкам.

;;; To enable hotkeys for find-file-dialog
(defadvice find-file-read-args (around find-file-read-args-always-use-dialog-box act)
  "Simulate invoking menu item as if by the mouse; see `use-dialog-box'."
  (let ((last-nonmenu-event nil))
    ad-do-it))
(global-set-key (kbd "C-x M-f") 'menu-find-file-existing)  

После этого трюка можно и отключить тулбар насовсем.

(tool-bar-mode -1)

Наконец, делаем всякие косметические улучшения. Первые установлены через меню
настроек внутри EMACS, они тоже работают, но я уверен, что можно более лаконично.

(custom-set-variables
  ;; custom-set-variables was added by Custom.
 '(initial-scratch-message nil))
;;; Клёвые шрифты некрупным кеглем
(custom-set-faces
  ;; custom-set-faces was added by Custom.
 '(default ((t (:inherit nil :stipple nil :background "#ffffff" :foreground "#000000" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :height 87 :width normal :foundry "unknown" :family "Liberation Mono")))))

;; Column & line numbers in mode bar
(column-number-mode t)
(line-number-mode t)

;;; No startup message
(setq inhibit-startup-message t)  

Пока всё, и так неплохо — прямо скажем, намного лучше, чем было. :)

 
almost 6 years ago

Для веб-разработки, особенно если ты фрилансер, бывает необходимо вести одновременно
несколько веб-сайтов, и держать, соответственно, их девелопмент-версии на локальной
машине. Настроить локальный Апач в Debian 6.0 довольно просто, надо только
догадаться, как. :)

Общий план

Настраивать многосайтовость будем на основе name-based virtual hosts, в документации к Apache2 это находится здесь: Name-based Virtual Host Support. План работы такой:

  1. Создаём каталог для веб-сайта
  2. Создаём новый файл конфигурации для этого веб-сайта
  3. Прописываем сайт в файле /etc/hosts

Создание виртуального хоста

В Apache2 все виртуальные хосты расписаны отдельными конфигами в каталоге /etc/apache2/sites-available/.

Этот каталог неудобен тем, что доступ в него есть только у рута, а нам может понадобиться несколько раз править конфиг в процессе разработки.
Поэтому создаём новый текстовый файл в домашнем каталоге и вписываем в него буквально следующее (этого будет достаточно):

<VirtualHost *:80> 
    ServerName <имя сервера> 
  DocumentRoot <абсолютный путь к каталогу> 
  <Directory /> 
    Options FollowSymLinks 
    AllowOverride All 
  </Directory> 
</VirtualHost>

Имя сервера будет тем именем, которое мы будем в итоге набирать в адресной
строке браузера, чтобы добраться до локального сайта, например, «mysite.localhost».

После того, как конфиг создан, делаем на него симлинк с каким-нибудь именем в каталоге

/etc/apache2/sites-enabled/

Создание локального доменного имени

Для того, чтобы name-based virtual hosts работали, надо, чтобы Апач получал
запрос к конкретному доменному имени, пусть даже запросы на разные доменные
имена идут на один и тот же IP-адрес.

Пишем в /etc/hosts следующую строчку:

127.0.0.1 <имя сервера>

Где «имя сервера» — это в точности ServerName нашего веб-сайта, для которого мы писали конфиг на предыдущем этапе.

Всё, перезапускаем Апач.

 
almost 6 years ago

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

При попытке залогиниться на blogger или даже просто открыть картинку из выдачи результатов поиска по изображениям в Гугле (!) браузер спотыкается на шаге ожидания результатов с сервера. Выводит «waiting for google.com» в строке состояния и всё. Иногда по тайм-ауту дело кончается тем, что Фаерфокс показывает белый экран и всё. Те же симптомы проявляются при попытке загрузить какое-нибудь изображение куда-либо, вообще любой файл. Отправка сообщений в дурацком Вконтакте так же «виснет».

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

Проблема в значении MTU (Maximum Transmit Unit) для передаваемых пакетов. Если на маршрутизаторе на провайдере стоит, скажем, 1460, а у вас отправляются по 1498 (традиционно для ADSL), то вы, как говорится, out of luck. Поэтому надо указать в настройках сетевой карты, что отправлять данные мы будем теперь более маленькими кусочками.

MTU указывается как для непосредственно сетевого интерфейса, так и для PPPoE подключения. У меня лично на домашнюю сеть роутер раздаёт интернет, поэтому настройки MTU указаны в его веб-интерфейсе, и здесь я о них говорить не буду.

Для сетевого интерфейса надо сделать так:

# ifconfig eth0 mtu 1400

Вместо eth0 указать ваш сетевой интерфейс, мало ли, может, у вас eth1. :) 1400 лично для меня оказалось достаточно.

Эти изменения временны. Для того, чтобы они зафиксировались и восстанавливались после перезагрузки, надо добавить вышеприведённую строчку в файл /etc/rc.local.

Если PPPoE соединение устанавливается не роутером, как у меня, а непосредственно компьютером, то надо добавить в файл /etc/ppp/options, где, собственно, и хранятся настройки PPP соединения, строчку

mtu 1400

В принципе, строчка «mtu» там уже есть, достаточно раскомментировать её и поменять на 1400.

На этом всё, автомагия сработает даже без перезагрузки компьютера. Перепроверять не хочу, но для уверенности я перезапустил сетевой интерфейс после внесения изменений.

За решение проблемы спасибо офигенным чувакам с Линуксфорума, которых я успешно нагуглил: http://linuxforum.ru/viewtopic.php?id=12026.

 
almost 6 years ago

Если честно, ничего особенно страшного нет в том, чтобы установить в Debian
Stable (на данный момент это 6.0, «Squeeze») драйвера NVIDIA с официального
сайта, а не с репозитариев.

Расскажу более-менее подробно о ручной установке драйверов. Предлагаю сначала
прочитать рассказ целиком, потому что это совсем не пошаговая инструкция. У
меня никаких сложностей при установке не возникло, по-моему, достаточно быть
готовым, что придётся кое-какие действия выполнять в консольном режиме.

Ручная установка драйверов

Драйвера на данный момент (май 2011 года) раздаются на официальном сайте по
ссылке Download NVIDIA Drivers. Там веб-интерфейс, в котором надо выбрать
модель видеокарты и операционку. NVIDIA держит марку, и наличествует даже Linux
64-bit.

Драйвера для Linux поставляются в виде многомегабайтного шелл-скрипта с расширением «run». Его надо запустить от рута через интерпретатор sh (наверное, сойдёт даже новомодный dash, но я думаю, надо пускать, как сказано в официальном гайде по установке):

# sudo sh NVIDIA-Linux-<arch>-<ver>.run

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

  1. разлогиниться из окружения рабочего стола (чтобы сохранить свою работу, буде таковая имеется),
  2. перейти на первый виртуальный терминал (Ctrl+Alt+F1 в KDE, может быть, в вашем окружении рабочего стола хоткей стандартный Alt+F1)
  3. залогиниться рутом или своей учёткой, тогда придётся работать через sudo
  4. погасить иксы через /etc/init.d/kdm stopили /etc/init.d/gdm stopили /etc/init.d/xdm stop
  5. запустить инсталлятор
  6. после инсталляции или перезагрузиться, как во времена винды, или запустить иксы заново: /etc/init.d/kdm startаналогично для gdm или xdm

Во-вторых, установленный в системе gcc может отличаться по версии от того,
с которым были скомпиляны нужные для установки дров компоненты. Инсталлятор
об этом скажет, и скажет, какая версия gcc ему нужна.

Если такое случилось, то надо установить gcc нужной версии (в моём случае это был gcc 4.2) и запускать инсталлятор с переопределением переменной окружения CC:

# CC=gcc-4.2 sudo sh NVIDIA-Linux-<arch>-<ver>.run

Да, достаточно всего лишь такой короткой строки в CC. :)

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

По окончанию установки скрипт предложит перегенерировать xorg.conf, я думаю,
что лучше согласиться, на современной системе этот файл и так весь состоит
из значений по умолчанию, испортить что-то сложно. Однако, после генерации
xorg.conf, достаточно важно внести в него сведения о герцовке монитора.

Для этого добываем техническую спецификацию на монитор, и ищем там значения для следующих полей xorg.conf:

Section "Monitor"
    *** Что-то ещё ***
    HorizSync       30.0 - 85.0
    VertRefresh     50.0 - 160.0
    *** Что-то ещё ***
EndSection

В данный момент вписаны значения для LG Flatron ez T710PH. Правильная герцовка нужна для того, чтобы потом можно было корректно выставить разрешение экрана и ещё чтобы драйвера правильно определили DPI для вывода, а то может быть глюк с размерами шрифта.

Кроме этого, единственное, что потребует установщик драйверов — это согласиться
с лицензией NVIDIA.

После установки драйверов в меню KDE появляется пункт «Настройка» -> «NVIDIA
X Server Settings». Это простой и понятный гуй, в котором можно сделать одну
очень важную вещь: выставить удобное для работы разрешение и частоту обновления
экрана. Что появляется в GNOME или в других DE, увы, не знаю.

 
almost 6 years ago

Да-да, я толстый тролль, вы совершенно правы. :) Мне физиологически не нравится
Firefox как он есть, и к моему большому сожалению, в Debian предполагается
использование только его (под названием Iceweasel, но это совершенно неважно).

В эпоху пользования Виндой я сёрфил в Сети исключительно при помощи Оперы,
и переезд на Фаерфокс оказался достаточно горьким впечатлением. Однако, Фаерфокс
можно допилить при помощи плагинов, установить которые --- пара пустяков, поэтому
всё не так уж страшно.

Разберёмся, какие плагины действительно нужны в Firefox как веб-браузере.

  • Omnibar
    Объединяет строку адреса и строку поиска в одно поле ввода, с suggestions'ами по истории и поиску Гугла, всё как у людей.

  • Adblock Plus
    Скрывает рекламу на веб-страницах. Предлагает несколько готовых баз источников рекламы на выбор.

  • Element Hiding Helper for Adblock Plus

    Возможность указать пальцем (курсором) на конкретный баннер, который нужно скрыть. Добавляется в контекстное меню самого AdBlock Plus.

  • NoScript

    Отключает весь javascript на веб-страницах. Скрипты включаются только по явному разрешению пользователя, через менюшку в углу экрана. Основная цель — защита от вредоносного кода. Довольно спорная вещь, но, как веб-разработчику, мне он всё же адски полезен.

  • Download Statusbar

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

  • Tab Mix Plus

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

  • Session Manager

    Работа с «сессиями» — по сути, возможность, сохранять «закладки» на целые пачки открытых вкладок и даже на несколько открытых окон. Опять же, в Опере работало из коробки. Стоит заметить, что этот плагин по возможностям ещё круче, чем функционал Оперы.

Как веб-разработчику, мне нужны ещё два плагина, Firebug и Web Developer
Toolbar
(с дополнительной кнопочкой Toggle Web Developer Toolbar).
Они покрывают 99.(9)% всех потребностей при вёрстке веб-страниц.

 
almost 6 years ago

Сабж лежит здесь: Титульная страница дипломной работы [.tex] [1 KB]

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

Принципы вёрстки титульного листа в LaTeX

Используется, на самом деле, не так уж и много приёмов.

Во-первых, это окружение center:

\begin{center}
  Специальность: 010501.65 --- Прикладная математика и информатика
\end{center}

Оно выравнивает текст по центру.

Во-вторых, это команда вертикальной отбивки \vspace:

\vspace{1.5em}

Отбивка может быть указана и в cm, но лично я убеждён в необходимости em, потому что 1 em по высоте — это ровно одна пустая строчка.

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

\newcommand{\hrf}[1]{\hbox to #1{\hrulefill}}

Теперь в тексте набираем

\hrf{3cm}

и получаем горизонтальную линейку по базовой линии текущей строки длиной в 3 сантиметра.

В целом оборачиваем титульник в окружение titlepage:

\begin{titlepage}
\end{titlepage}

После закрытия окружения titlepage ставим

% Хак для того, чтобы страница, следующая за титульником, нумеровалась с 2

\setcounter{page}{2}

Дополнительно

Ещё полезны следующие команды (в моём примере они используются):

  • \hspace{1cm} — горизонтальный отступ 1 сантиметр длиной
  • \noindent — следующий абзац без отступа
  • \\ — принудительный перенос строки
  • {\Large ###} — текст ### большими буквами
  • \textsc{###} — текст ### капителью
  • \textbf{###} — текст ### жирным шрифтом
 
almost 6 years ago

Выкладываю преамбулу документа, которую использовал при наборе моей дипломной
работы.

% размер бумаги и кегль шрифта, класс документа --- ``отчёт''

\documentclass[a4paper,14pt]{extreport} 
  % используем cp1251 ТОЛЬКО потому, что bibtex 

  %   умеет сортировать только ASCII-строки, увы

\usepackage[cp1251]{inputenc} 
  % ещё можно T1, но пусть будет T2A

\usepackage[T2A]{fontenc} 
  % переносы и типографские правила для русского 

  %   _затем_ английского языков

\usepackage[english,russian]{babel} 
  % ядро для научной статьи

\usepackage{amssymb,amsfonts,amsmath,mathtext}

Пакеты amssymb, amsfonts, amsmath и mathtext нужны для того, чтобы в полной
мере пользоваться возможностями набора формул в LaTeX. Это, соответственно,
поддержка специальных символов, цивильные математические шрифты, новые environment'ы
для удобства набора формул и возможность включать в формулы произвольный текст.

% цитирование и нумерованные списки \usepackage{cite,enumerate}

Если честно, я не имею ни малейшего представления, почему для поддержки таких
элементарных вещей надо подключать дополнительный пакет. Тем более, если
TeX изначально разрабатывался как средство typesetting'а для книг.

% красная строка

\usepackage{indentfirst} 
  % подписи к рисункам  

\usepackage[labelsep=period]{caption}
  % диаграммы и черчение

\usepackage{pstricks,pst-plot,pb-diagram} 
  % оформление листингов программ

\usepackage{listings}
  % поддержка .eps-графики

\usepackage{graphicx} 
\graphicspath{{images/}} %путь к рисункам

Заканчиваем вставлять вещи «из коробки». Теперь начинаем кастомизацию.

% меняем поля

\usepackage{geometry}
\geometry{left=3cm}
\geometry{right=2cm}
\geometry{top=2cm}
\geometry{bottom=2cm}

 % изменяем оформление заголовков

\usepackage{titlesec}
% Формат записи: \titleformat{command}[shape]{format}{label}{sep}{before}[after]

\titleformat{\chapter}[block]{\raggedright\huge\bfseries}{\chaptertitlename\ \thechapter.}{0.5em}{}
\titleformat{\section} {\raggedright\Large\bfseries}{\thesection}{1em}{}
\titleformat{\subsection} {\raggedright\large\bfseries}{\thesubsection}{1em}{}
\titleformat{\subsubsection} {\raggedright\normalsize\bfseries}{\thesubsubsection}{1em}{}
% Формат записи: \titlespacing*{command}{left}{beforesep}{aftersep}[right]

\titlespacing*{\chapter} {0pt}{0pt}{2em}
\titlespacing*{\section} {0pt}{3.5ex plus 1ex minus .2ex}{2.3ex plus .2ex}
\titlespacing*{\subsection} {0pt}{3.25ex plus 1ex minus .2ex}{1.5ex plus .2ex}

  % формулы нумеруются внутри каждой главы

\numberwithin{equation}{chapter} 

  % Заменяем библиографию с квадратных скобок на точку:

\makeatletter
\renewcommand{\@biblabel}[1]{#1.} 
\makeatother

  % Меняем везде перечисления на цифра.цифра

\renewcommand{\theenumi}{\arabic{enumi}}
\renewcommand{\labelenumi}{\arabic{enumi}}
\renewcommand{\theenumii}{.\arabic{enumii}}
\renewcommand{\labelenumii}{\arabic{enumi}.\arabic{enumii}.}
\renewcommand{\theenumiii}{.\arabic{enumiii}}
\renewcommand{\labelenumiii}{\arabic{enumi}.\arabic{enumii}.\arabic{enumiii}.}

На всякий случай пара сниппетов для математиков

% Операции извлечения мнимой части и действительной части 

%   согласно русской типографской традиции (иначе будут набраны готическим шрифтом)

\renewcommand{\Im}{\mathop{\text{Im}}}
\renewcommand{\Re}{\mathop{\text{Re}}}

% Операторы дивергенции и градиента

\DeclareMathOperator{\Divergence}{div}
\DeclareMathOperator{\Gradient}{grad}

Раздел «Содержание» вставляем так:

% это оглавление, которое генерируется автоматически

\renewcommand{\contentsname}{Содержание}
\tableofcontents 
\newpage  

Дальше работа разбивается на кусочки, каждый из которых вставляется командой \include{}:

% Математический аппарат

\include{mathematics}

% Программная реализация

\include{programming}

% Анализ результатов

\include{results}  

Список литературы вставляем следующим образом, при условии, что библиография у нас в BibTex в файле bibliography.bib:

% Список использованной литературы 

\renewcommand{\bibname}{Список литературы} % для \documentclass{book} и ниже, ``Литература''

\renewcommand{\refname}{Список литературы} % для \documentclass{article} и ниже, ``Источники''

\addcontentsline{toc}{chapter}{Список литературы}
\bibliographystyle{gost780s}
\bibliography{bibliography}{}

Про титульник отдельно расскажу, он только для дипломной актуален (потому что это полный маразм — оформление титульного листа, вот что я скажу, и только в универах им занимаются).

 
almost 6 years ago

В Firefox наличествует крайне удобный тулбар, на который можно перетаскивать
закладки и потом вызывать их нажатием одной кнопки. Это всё очень круто, но
с этим тулбаром связана одна проблема: даже в режиме «отображать только иконки»
на этом тулбаре отображаются подписи к иконкам. Когда ссылок становится больше
10, место кончается, вместе с удобствами.

Собственно, эта проблема решается очень просто, главное знать, как. :)

Решение

Создаём файл

/home//.mozilla/firefox//chrome/userChrome.css

В этот файл добавляем правило:

toolbar[mode="icons"] .toolbarbutton-text { display: none !important; }

Собственно, всё — в режиме «только иконки» на тулбаре закладок будут отображаться
только иконки.

Следует заметить, что отключаются также подписи к кнопкам на Гуглопанели. Лично
мне это не мешает, но всё равно beware.

 
almost 6 years ago

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

Контекст

Начиная с Emacs 23, появилась возможность запускать его в режиме демона. Для
этого вызываем его так:

$ emacs --daemon

Emacs запускается в фоне и становится точкой доступа для вызовов emacsclient.
Теперь мы вместо запуска нового инстанса Emacs запускаем

$ emacsclient -c

Клиентская часть подключается к демону практически мгновенно, и демон хранит
открытые буфера, историю правок, всё, самостоятельно. Память также расходуется
только как бы на один инстанс Emacs. Короче, именно так должен работать Емакс
на машине, где он используется в качестве основного и единственного текстового
редактора.

Реализация

Теперь о том, как заменить дефолтный запуск Emacs в Debian Squeeze + KDE.

Вообще можно обойтись тем, что вместо

$ emacs

пользоваться

$ emacsclient --alternate-editor "" -c

Если в качестве alternate-editor указана пустая строка, emacsclient самостоятельно
запустит демона emacs (!) и подконнектится к нему.

Однако, хочется гуёвых удобств.

По умолчанию в плазмоиде Kickoff (меню запуска приложений) находится пункт
меню, запускающий Emacs в обычном режиме. Нажав на Kickoff правой лапой, можно
добраться до "редактора меню", в котором найти пункт меню для Emacs, и заменить
его строку вызова с emacs на вышеупомянутое emacsclient --alternate-editor
"" -c.

Это всё, никаких дополнительных телодвижений типа настройки автозапуска emacs
--daemon
не надо.