2011-10-14

Как найти расстояние между двумя GPS точками

howto, программирование, PHP

Понадобилось посчитать дистанцию между двумя точками заданными в GPS координатах. В PHP реализация такой фунции выглядит следующим образом:

function calcMiles ($Lat1, $Lon1, $Lat2, $Lon2){
    return 3958.75 * acos(  sin($Lat1/57.2958) * sin($Lat2/57.2958) + cos($Lat1/57.2958) * cos($Lat2/57.2958) * cos($Lon2/57.2958 - $Lon1/57.2958));
}

Ответ получается в милях, для перевода в метры, полученное значение нужно ещё умножить на 1609.344.

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

 

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

 
  2011-10-11

Тень на плетень

howto, css

Создание тени средствами CSS:

Бой с тенью

<b style="font-size: 2em; color: silver; text-shadow: 2pt 2px 2px rgb(127, 127, 127);">Бой с тенью</b>

Работает в Firefox, Crome, Opera.

 

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

 
  2011-09-28

Как вводить японские иероглифы в Ubuntu

howto, языки

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

Здесь подробно написано как установить IME на Ubuntu 10.04 - у меня прекравсно все встало с первого раза.

お疲れさまです。

 

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

 
  2011-08-23

Как поставить dav_svn если у вас cpanel

howto

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

Скачиваеме исходники Subversion и распаковываем:

> wget http://subversion.tigris.org/downloads/subversion-1.6.17.tar.gz

> tar -xzf subversion-1.6.17.tar.gz

Скачиваем SQLite распаковываем и копируем в папку с Subversion:

> wget http://www.sqlite.org/sqlite-amalgamation-3.6.13.tar.gz

> tar -xzf sqlite-autoconf-3070701.tar.gz

> cp -r sqlite-3.6.13 subversion-1.6.17/sqlite-amalgamation

Теперь компилируем и устанавливаем:

> ./configure --with-ssl --with-apxs=/usr/local/apache/bin/apxs --with-apr=/usr/local/apache/bin/apr-config --with-apr-util=/home/cpeasyapache/src/httpd-2.0.63/srclib/apr-util

> make

> make install

Создаем репозиторий:

> mkdir /home/username/data

> mkdir /home/username/data/svn

> cd /home/username/data/svn

> svnadmin create --fs-type fsfs repo

Настраиваем конфигурационные файлы апача:

> vi /usr/local/apache/conf/userdata/std/2/username/svn.hostname.com/custom.conf

Содержимое файла:

LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
<Location /svn>
        DAV svn
        SVNParentPath /home/svncleve/data/svn
        SVNListParentPath on
        SVNPathAuthz off
        AuthType Basic
        AuthName "Private SVN repositories"
        AuthUserFile /home/username/svn.passw
        Require valid-user
</Location>

Задаем пароль для пользователя SVN:

/usr/local/apache/bin/htpasswd  /home/svncleve/svn.passw svnuser

Проверяем конфигурацию сервера, пересобираем конфиги и рестаруем сервер:

/scripts/verify_vhost_includes

/scripts/rebuildhttpdconf

/scripts/restartsrv_httpd

Делаем чистый чекаут на локальной машине:

> svn checkout http://hostname.com/svn/repo .

Если svn update работает хорошо а svn commit выдает 403 ошибку то проверьте .htaccess в document root - cpanel по умолчанию пишет в .htaccess правила, ограничивающие использование методов PUT и DELETE - а именно они как раз и используются в WEBDAW через который работает Subversion. Несколько раз уже на это напарывался.

 

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

 
  2011-08-12

DNS сервер на домашнем компьютере

howto

Собственный DNS сервер для веб-разработчиков очень удобная вещь. Если локальный компьютер используется для разработки и на нем установлен Apache с несколькими десятками виртуальных доменов то прописывать все виртуальные домены в файле hosts довольно кропотливо. Со временем hosts превращается в полнейшую свалку а собственный DNS сервер позволяет организовать все гораздо компактнее и удобнее.

Обычно, чтобы отличать локальные сайты от всех других я им даю фиксированный суффикс по имени компьютера на котором они крутятся, например: ztools.maxhome - это локальная версия ztools.org на домашенем компьютере, maxistar.maxhome - локальная версия maxistar.ru, ztools.maxbook - версия ztools.org на ноутбуке и так далее.

Рассмотрим пример установки DNS сервера на локальный компьютер под управлением Linux, сделаем так, чтобы ВСЕ сайты с суффиксом .maxhome ссылались на локальный компьютер, с суффиксом .maxbook на ноутбук и так далее.

Итак, имеем машину с Ubuntu, устанавливаем на него DNS сервер:

> apt-get install bind9

добавляем в /etc/named.conf.local следующее:

zone "maxhome" {
     type master;
     file "/etc/bind/db.maxhome";
};

/etc/bind/db.maxhome - это файл зоны который нам предстоит создать, чтобы не создавать с нуля скопируем один из файлов в папке /etc/bind и отредактируем:

> cp db.local db.maxhome

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

; BIND data file for local loopback interface
;
$TTL    604800
@       IN      SOA     localhost. root.localhost. (
                             2         ; Serial
                        604800         ; Refresh
                         86400         ; Retry
                       2419200         ; Expire
                        604800 )       ; Negative Cache TTL
;
@       IN      NS      maxhome.
@       IN      A       192.168.1.101
@       IN      AAAA    ::1
*       IN      A       192.168.1.101

Обратите внимание на последнюю строку со звездочкой - она самая главная! Аналогичным образом создаём файлы зон для других компьютеров.

Теперь перегружаем наш DNS сервер:

maxim@maxim-desktop:~$ sudo /etc/init.d/bind9 restart
* Stopping domain name service... bind9                                 [ OK ]
* Starting domain name service... bind9                                 [ OK ]

На всех машинах на которых мы хотим иметь доступ к локальным ресурсам в свойствах сетевого подключения ставим IP адрес машины с установленным DNS сервером в качестве DNS сервера и проверяем как работает:

maxim@maxim-desktop:~$ ping dfdfd.maxhome
PING dfdfd.maxhome (192.168.1.101) 56(84) bytes of data.
64 bytes from 192.168.1.101: icmp_seq=1 ttl=64 time=0.044 ms
64 bytes from 192.168.1.101: icmp_seq=2 ttl=64 time=0.050 ms
64 bytes from 192.168.1.101: icmp_seq=3 ttl=64 time=0.044 ms
^C
--- dfdfd.maxhome ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2179ms
rtt min/avg/max/mdev = 0.044/0.046/0.050/0.003 ms

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

 

Коментариев: 1

 
  2011-08-07

Как поставить автомагнитолу в Hyundai Getz

howto

Штатная аудиоподготовка у Hyundai Getz имеет нестандартный разъем, поэтому, подключить в него магнитолу сразу не получится. Поиск в интернет подсказывает, что для этого лучше всего воспользоваться специальным переходником Hyundai-ISO, который можно купить на Митинском рынке, в Москве. К сожалению, в Саратове нет ни одного Митинского рынка а про переходник не знают даже в специализированных магазинах. Специалисты в сервисе, просто обрезают родные разъемы и скручивают провода как надо, за все удовольствие берут 650-1000 рублей.

Но мне вариант со скручиванием почему то не понравился, да и захотелось самому повозиться :)  Я поступил так:

Снял заглушку на месте автомагнитолы при помощи отвертки аккуратно поддев последнюю сверху.

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

Вот распиновка оригинального разъема на Hyundai Getz:

На всякий случай прозвонил разъем тестером - контакт 15 оказался не подсветкой дисплея (+) а скорее землей, поэтому его я не стал использовать.

Распиновка разъема ISO автомагнитолы:

После подключения всех контактов разъем стал выглядить вот так:

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

Все заработало с первого раза без проблем.

UPD. На схеме разъема M16 изображена ответная часть а не сам разъём - реальный разъем соответственно имеет зеркальное расположение контактов, что без труда видно по форме выемок на разъеме - мне было лень зеркалить изображение разъема - думал это очевидно :) Будьте внимательнее!

 

Коментариев: 5

 
  2011-07-09

Как пережать видео из MiniDV

howto

Друг скинул видео с камеры MiniDV на жесткий диск - всего оказалось несколько файлов в формате AVI общим объемом около пятидесяти гигабайт - встала задача собрать это все в один файл и пережать до более вменяемого размера.

Сначала собираем несколько файлов в один:

> mencoder -oac copy -ovc copy -o output.avi Видео1.avi Видео2.avi Видео3.avi

Пережимаем получившийся файл:

> ffmpeg -i output.avi -vcodec mpeg4 -acodec libmp3lame -b 700K -deinterlace video.avi

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

 

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

 
  2011-06-28

Как собрать идеальное IDE для себя

howto

Всякий знает, что от того, какую IDE использует разработчик, напрямую зависит его продуктивность. Используя блокнот или Far - много не сделаешь.

Из доступных средств разработки на сегодняшний момент, не побоюсь этого слова — лучшей, является Eclipse. Все дело в том, что Eclipse является совершенно бесплатной и очень гибкой в настройке. Именно на базе Eclipse создано огромное количество "фиремнных" средств разработки таких как: Zend Studio, Flash Studio, Spring Source, Aptana Studio и еще куча других "студий". При внимательном рассмотрении все они оказываются старым добрым Eclipse. Какой еще проект может похвастаться таким большим количеством инкарнаций? Все дело в удивительной гибкости Eclipse и его модульности а также в удачном выборе программной платформы.

Eclipse совмещает в себе удобный язык программирования и быстрый нативный интерфейс. Eclipse написан на Java с использованием SWF. Язык Java используется миллионами разработчиков, а это значит большое количество людей могут писать под него плагины. SWF - делает его интерфейс гораздо быстрее, чем решения написанные с использованием, например, Swing - тот же NetBeans. Дело в том, что Swing попиксельно отрисовывает элементы управления средствами Java на чистом листе, в то время как SWF использует "родные" элементы управления операционной системы. Конечно, это накладывает ограничения на управление их внешним видом, но разработчикам нужно быстрое средство разработки а не красивый но медленный интерфейс.

Одной из самых интересных особенностей Eclipse является возможность собрать IDE под себя — установить на него только то, что необходимо здесь и сейчас. Причем, можно сделать несколько сборок под свои нужны и все эти сборки будут отлично работать на компьютере одновременно не конфликтуя. Например, можно собрать среду для программирования на PHP, среду для программирования на Си, среду для программирования под Android и так далее.

Что мне обычно нужно для комфортной работы с PHP проектами? Подсветка синтаксиса и подсказки для HTML, PHP, CSS, JavaScript, редактирование SQL файлов — не так уж и много.

Сборка отличного IDE для разработки под PHP на базе Eclipse займёт всего несколько минут:

1. Скачиваем Eclipse Classic под вашу операционную систему, распаковываем и запускаем Eclipse. На момент написания этого поста это версия 3.7 Indigo.

2. Идем в меню Help -> Install New Software, в появившемся диалоговом окне выбираем Work with: Indigo - http://download.eclipse.org/releases/indigo

3. В появившемся внизу списке компонентов выбираем:

- Database Development -> Data Tools Platform Enablement Extender SDK- позволит нам редактировать SQL файлы.
- Programming Languages -> PHP Development Tools (PDT) SDK Feature - набор для работы с PHP
- Web, XML, JavaEE and OSGi Enterprise Development ->Eclipse Web Development Tools - редактирование HTML, CSS файлов.
- Web, XML, JavaEE and OSGi Enterprise Development ->JavaScript Developemnt Tools - редактирование JavaScript файлов.
 
 
 
Далее, жмем на кнопку Finish и следуем инструкциям программы. Eclipse сама скачает и установит нужные компоненты и зависимости. По завершениии установки попросит перезапустить IDE и, вуаля - у нас есть все, что нужно для нормальной работы.
Конечно, данный список компонентов может быть расширен в соответствии с вашими персональными пристрастиями, тут каждый сам решает, что ему нужно.
 

Коментариев: 1

 
  2011-06-04

Как изменить кодировку базы данных на UTF-8

howto

Встала задача сконвертировать базу данных из latin1 в utf8. В интернете есть множестово рецептов как это сделать. Наиболее часто встречается PHP скрипт, который генерирует последовательность из ALTER TABLE комманд.

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

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

#!/bin/sh

DBNAME="yourdbname"
DBUSER="yourdbuser"
DBPASS="yourdbpassword"

mysqldump -u$DBUSER -p$DBPASS $DBNAME > $DBNAME.sql
sed 's/DEFAULT CHARSET=latin1//' $DBNAME.sql > ${DBNAME}_converted.sql
sed 's/CHARACTER SET latin1//' ${DBNAME}_converted.sql > ${DBNAME}_converted1.sql

mysql -u$DBUSER -p$DBPASS $DBNAME <<EOFMYSQL
ALTER DATABASE $DBNAME DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
EOFMYSQL

mysql -u$DBUSER -p$DBPASS $DBNAME < ${DBNAME}_converted1.sql

Исходная база была в latin1, если у вас другая кодировка, скрипт легко подправить.

 

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

 
  2011-04-26

Leverage browser caching

howto, вебмастеринг

Для того чтобы проверить есть ли у сайта узкие места можно воспользоваться мега полезной штукой Page Speed Plugin. Работает в chrome и firefox. Оказывается на большинстве сайтов по умолчанию не выводятся заголовки которые говорят браузеру как правильно кешировать ресурсы

На linode.com для решение проблемы добавил в httpd.conf следующее:

<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresByType image/x-icon "access plus 2 weeks"
    ExpiresByType image/png "access plus 2 weeks"
    ExpiresByType image/jpeg "access plus 2 weeks"
    ExpiresByType image/gif "access plus 2 weeks"
    ExpiresByType text/javascript "access plus 1 week"
    ExpiresByType text/css "access plus 1 week"
</IfModule>

На другом сервере указанное действо оказалось недостаточным пришлось добавить:

Header unset Pragma
FileETag None
Header unset ETag

И еще включил сжатие для некоторых файлов:
AddOutputFilterByType DEFLATE text/css application/x-javascript application/javascript

 

 

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

разное (183)
howto (124)
программирование (108)
гад-же-ты (75)
мысли (42)
PHP (41)
JavaScript (39)
вебмастеринг (37)
linux (28)
гондураша (28)
юмор (25)
полезное (21)
движок (17)
Android (16)
софт (15)
деньги (14)
видео (13)
кино (13)
музыка (10)
беспредел (10)
путешествия (10)
интернет (9)
diy (9)
ztools (8)
книги (8)
умный дом (8)
занимательная физика (8)
языки (7)
хостинг (7)
Nokia 5800 (7)
lifehack (6)
css (6)
вебдизайн (6)
apple (5)
arduino (5)
связной (5)
прелоадер (5)
козлы (5)
oDesk (5)
занимательная юриспруденция (4)
svn (4)
кухня (4)
Python (4)
энергия (3)
рестораны (3)
software (3)
synphony (3)
Java (2)
webmastering (2)
фото на документы (2)
Ruby on Rails (2)
спорт (2)
bash (2)
движек (2)
гитара (2)
аниме (2)
дурдом (1)
C++ (1)
годнурас (1)
микросервисы (1)
SEO (1)
programming (1)
технологии (1)
наука (1)
сайты (1)
авторское право (1)
восстановить (1)
Поиск по блогу:

Valid XHTML 1.0 Strict