20 Апрель 2009

Eclipse и удаленные проекты (sftp)

eclipse.png В веб-разработке часть бывает, что проект (PHP в моем случае) находится не у вас на жестком диске, а на удаленном веб-сервере. Например, несколько человек работают над проектом, у каждого своя рабочая копия кода, в своей директории на веб-сервере. Многие разработчики используют Eclipse и заинтересованы в том, чтоб работать в нем и над удаленными проектами. Я пробовал найти SFTP-плагин, но все те несколько, что я ставил — работать неудовлетворительно. Есть другой отличный способ в Linux — подмаунтить sftp директорию с помощью Fuse, а в Eclipse добавить новый проект.

Команды буду писать для Ubuntu (для Fedora то же самое, только вместо aptitude — yum 😉 )

Ставим пакет sshfs:
$ sudo aptitude install sshfs

Добавляем пользователя в группу fuse (если ее нет после установки fuse, то создайте — sudo groupadd fuse):
$ sudo adduser yourusername fuse

Создайте директорию, в которую вы будете маунтить удаленные файлы (например /mnt/remote):
$ cd /mnt
$ sudo mkdir remote

Не забудьте сделать эту директорию доступной для вашего пользователя:
$ sudo chown yourusername /mnt/remote

Теперь вы можете подмаунтить удаленные файлы (не под root, а под своим пользователем):
$ sshfs remoteusername@remoteserver:/path/on/remote/server /mnt/remote

введите свой пароль (к удаленному серверу)

После завершения работы не забудьте размаунтить:
fusermount -u /mnt/remote

В Eclipse создайте новый PHP-проект и укажите, что его файлы находятся в /mnt/remote. Теперь вы можете работать над проектом, как над локальным.

рубрики: PHP, Разработка, Софт | 6 комментариев

25 Март 2009

URL с названием JavaScript ф-ии для запуска

Было бы прикольно иметь в стандартах такую фишку:
как мы для anchor-ов определяем ссылку с # (http://example.org/index.html#part2) — примерно так же определять какую ф-ию JavaScript запустить при загрузке страницы.
Например, по ссылке http://example.org/index.html^myfunc() загрузился бы index.html и выполнилась JS функция myfunc().

рубрики: Разработка, Софт, Фантазии | 4 комментария

27 Февраль 2009

Поисковый плагин для Firefox

Недавно для своего проекта Обманщик я решил добавить поисковый плагин для Firefox. На этом сайте размещены статьи о мешенниках, раличных лохотронах. Имеется поиск, где введя адрес сайта, e-mail или номер icq можно увидеть информацию о «честности» владельцев. Этот плагин позволяет людям не заходя на сайт совершить проверку по базе мошенников. Довольно удобно, ведь не надо помнить адрес сайта (хотя он и довольно запоминающийся), не надо его вводить в адресную строку, просто нужно выбрать из списка нужную иконку и ввести текст для поиска.

Как создать плагин описано подробно тут в официальной документации. Приведу пример своего файла и в кратце расскажу что каждый параметр значит.

Файл с описанием поискового плагина — это XML (особый стандарт OpenSearch).

<opensearchdescription xmlns="http://a9.com/-/spec/opensearch/1.1/"
                       xmlns:moz="http://www.mozilla.org/2006/browser/search/">
<shortname>Obmanshik.Ru</shortname>
<description>Обманщик.ру - база данных мошенников и кидал</description>
<inputencoding>WINDOWS-1251</inputencoding>
<image width="16" height="16" type="image/x-icon">data:image/x-icon;base64,/9j/4QDmRXhpZgAASUkqAAgAAAAFABIBAwABAAAAAQAAADEBAgAcAAAASgAAADIBAgAUAAAAZgAAABMCAwABAAAAAQAAAGmHBAABAAAAegAAAAAAAABBQ0QgU3lzdGVtcyBEaWdpdGFsIEltYWdpbmcAMjAwODowNjoxNSAxNzowNzowMQAFAACQBwAEAAAAMDIyMJCSAgAEAAAAODgwAAKgBAABAAAAEAAAAAOgBAABAAAAEAAAAAWgBAABAAAAvAAAAAAAAAACAAEAAgAEAAAAUjk4AAIABwAEAAAAMDEwMAAAAAAHEwsI/8AAEQgAEAAQAwEhAAIRAQMRAf/bAIQAAwICAgIBAwICAgMDAwMEBwQEBAQECQYGBQcKCQsLCgkKCgwNEQ4MDBAMCgoPFA8QERITExMLDhUWFRIWERITEgEEBQUGBQYNBwcNGxIPEhsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsb/8QAaQABAQAAAAAAAAAAAAAAAAAABQgQAAEDAwQCAwEAAAAAAAAAAAECAwQFBhEHCBIhADEJE0FRAQEBAQAAAAAAAAAAAAAAAAACBQYRAAEEAQQDAAAAAAAAAAAAAAECAwQRAAUhYfAxodH/2gAMAwEAAhEDEQA/AKi3f169KLpJbUe0bsqFtw5tXWKzPpjP3zFR22FrS022OyFrA5Eekp/h8L2rsXpSK/Lh3FqLctxU+qwlvsx7jZUiTFlsupCwyVZKmS0tH70R1nPUByQRLDY8fc0CIyTp5drck+sf3bai6W2JtjkIvqsRo1SlJWuiRhyXJdeSkhakBIyEBsuc1egnPs4HkmaQ/IXpZpXeBol2R35dPjqXTS9TwZDscDiouoJxzQSAkgYyRkZx23IqzKS8kWBse8Y48ho6cuO4qjdjvJvP/9k=</image>
<url type="text/html" method="GET" template="http://obmanshik.ru/index.php?option=com_search&amp;Itemid=29&amp;searchword={searchTerms}&amp;submit=%CF%EE%E8%F1%EA&amp;searchphrase=any&amp;ordering=newest">
</url>
<moz:searchform>http://obmanshik.ru/poisk.html</moz:searchform>
</opensearchdescription>

Читать полностью »

рубрики: Разработка | Комментарии (1)

26 Февраль 2009

Люди любят вставить свои 5 копеек

В наших приложениях I Am Green, I Am Nurse и т.п. в сегодняшнем релизе мы в наших feed stories (как «Мои новости» на ВКонтакте) сделали так, чтоб апдэйты статуса и новые записи в блог сортировались не только по дате публикации (послдение выше), но и по комментариям. То есть последние добавленные/комментируемые. Это позволит наиболее интересныым постам и статусам подольше задержаться на главной, в итоге люди производятбольше контента, причем качественного. После релиза много людей начали комментировать. Также заметно, что комментировать любят больше, чем что-то сесть и толковое написать 🙂 Люди любят вставить свои 5 копеек, потмоу надо давать им такую возможность 😉

ПС: показал нашему основателю сегодня вконтакте, шеф был удивлен увидев «первую версию» Facebook-a. Я также поделился с ним мои наблюдениями о том, тчо навигация Мордокниги нынче хуже, чем была. Я с трудом там нашел События, а к фотка вообще за пару кликов добирался. Ужас! Еще заметили, что где-то так полгода у ВКонтакта не растет траф. Он достигли охвата всей возможной аудитории?

рубрики: Разработка | 2 комментария

19 Февраль 2009

Facebook Developer Garage

В четверг вечером небезызвестная социальная сеть Facebook устроила в городке Пало Алто (где находится ее HQ) в уютном кафе Blue Chalk так называемый Developer Garage — небольшую конференцию, темой которой были Feed stories — то есть инструменты, благодаря которым мы можем оповестить пользователей наших Facebook приложений об определенный изменениях, действиях, которые касаются непосредственно их.

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



Также поставили штампик в виде иконки facebook тем, кому больше 21 года, чтоб можно было покупать алкогольные напитки. Наверху и внизу стояли большие телевизоры, на которых можно было видет все то что выступающие показывают на основном экране. Также стояли тарелки и посудины с халявной едой (я попробовал кальмаров в кляре — колечками, и две лепешки, между которыми сыр). Мы нашли местечко наверху, откуда можна было отлично видеть выступавших.

Вскоре началось со вступителного слова, успехов Фэйсбука, основных моментов в их развитии.

Далее всем рассказали о новшествах в feed stories, что теперь есть однострочные, короткие и полные истории, а также возможность добавить кнопки действия к ним. На огонек заглянул и основатель компании Марк Закерберг (или Цукерберг, как пишут в русскоязычных СМИ), тчо вызвало бурную реакцию у всех присутствующих.

Также было на примере с кодом показано создание виджетов под Facebook. Примером стал виджет комментариев.

После этого люди общались друг с другом, с разработчиками Фэйсбука, знакомились, обменивались контактами и визитками, обсуждали возможность взаимного сотрудничества. Довольно интересное мероприятие 🙂

рубрики: Новости, Разработка | 5 комментариев

12 Февраль 2009

Собеседование в Facebook

Тут был пост о телефонном техническом собеседовании в Facebook. Оно пройдено успешно, приглашен в офис на on-site interview.

Facebook попросил подписать DNA (соглашение о неразглашении), а потому пост я потер. Ждите новостей по этому поводу 🙂

рубрики: Новости, Разработка | Комментарии (0)

27 Январь 2009

Plugin для Joomla 1.5 постинга в ЖЖ

Прошлым летом я сделал на заказ мамбот для Joomla 1.0 с условием, что я имею все права на этот мамбот и имею право его продавать и другим. А потому я вывесил его у себя в портфолио с предложением купить тех, кто заинтересуется. На прошлой неделе ко мне на мыло пришло письмо от некоего Винсента, который заинтересовался мамботом. Винсент купил его, но к сожалению из-за особенностей моего мамбота он не заработал даже в Legacy-mode, а потому было решено создать плагин для Joomla 1.5. Проблема была в том, что у меня iframe, и я напрямую лезу в конфигурационный файл, который теперь совершенно другой. Если в Joomla 1.0 был и переменные, то в 1.5 их переделали в поля класса. Причем этот класс ничего не делает, а только является контейнером для настроек. Второе — теперь нет переменной, в которой находится корневой URL сайта на Joomla, зато есть метод, который вам его вернет.

Немного «поработав напильником» плагин для Joomla 1.5 был готов. Если вы хотите приобрести такой плагин, обращайтесь.

рубрики: Разработка | Комментарии (0)

21 Январь 2009

unix/linux — замена строки в файлах

Для замены сроки в одном файле можно использовать команду sed:

sed '/s/старое/новое/g' file.txt > file2.txt
и потом mv file2.txt file.txt

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

sed -i '/s/старое/новое/g' file.txt

Чтоб сделать одинаковую замену вов сех файлах, скажем текущей директории, необходимо написать небольшой скриптик, назовем его strreplace.sh


for FILE in $@; do
sed -i 's/old/new/g' $FILE
done

теперь запустим strreplace.sh с параметром — списком файлов.
для текущей директории это будет: strreplace.sh *

рубрики: Разработка, Софт | 8 комментариев

20 Январь 2009

MYSQL: show table status — полезная информация

Небольшая полезная фишка для тех, кто не в курсе:
в коммандной строке mysql> вначале выбираем нужную базу данных (USE dbname;), а потом «show table status;» и получаем подробную статистику по всем таблицам: размер индекса, значение автоинкремента, комментарий, размер, когда создана таблица, когда последний раз менялась. Особенно полезно это при восстановлении из дампа — можно увидеть, сколько по времени занимает восстановление той или иной таблицы.

рубрики: Разработка | Комментарии (0)

19 Январь 2009

nohup — фоновый запуск команд unix/linux

Переезжали мы на новый сервак и узнал я такую классную фишку в unix/linux, как nohup. Это сокращенно от NO HangUP — «не висни». Эта штука запускает процесс в фоновом режиме, то есть теперь можно вылогиниться и процесс будет себе выполняться. Очень удобно при дампе баз данных и их восстановлении из дампа:

nohup mysql -u dbuser -p -D dbname -h localhost < dump.sql

рубрики: Разработка, Софт | Комментарии (0)

14 Январь 2009

В Контакте — я дабавыл адын друг

В «новостях» на В Контакте:
Василий Пупкин добавил 1 друг
Петр Сидоров добавил 2 друга

Неужели это так сложно поставить тут существительное «друг» в нужном падеже, а не лепить в именительном падеже? Вроде не дураки, а такие ляпы.

upd: на 0:14 по киевскому времени эту штуку видимо пофиксили
Кристина *** добавила 1 друга:
Александр *** добавил 3 друзей:

рубрики: Разработка | Комментарии (0)

11 Январь 2009

Опера — уверенное лидерство в тупости среди браузеров

В дебильной Опере нет обработки нажатия правой кнопки мыши.

Делаю блокировку в textarea нажатия стрелок и кнопки [backspace] — стоит return false; все браузеры нормал — опере пофиг: она ловит, что были нажаты стрелки или бэкспэйс, но ей насрать на return false; и операции по этим кнопкам выполняются.

В общем, вспомнил свою старую цитату времен работы в «Ольвии».
письмо разработчикам Оперы: «наш сайт криво отображается в вашем браузере, поэтому ПЕРЕПИСЫВАЙТЕ К ЕБЕНЯМ ВАШ БРАУЗЕР»

рубрики: Разработка, Софт | 3 комментария

7 Январь 2009

PHP — проверка файла на наличие / существование

Порой мы отображаем на сайтах контент с других ресурсов: картинки или фавиконы. Некоторе браузеры просто оставят пустое место (Firefox), другие же отобразят уродский прямоугольник, явно указывая, что чего-то не хватает (IE). Как же можно средствами PHP проверить существование файла.

Есть функция file_exists(), но она хороша только для файлов в пределах нашей файловой системы, а с удаленным сервером не пройдет.

Есть вариант открывать файл на чтение и в случие ошибки констатировать факт, что файла не существует:

< ?
// файл, который мы проверяем
$url = "http://url.to/favicon.ico";

// пробуем открыть файл для чтения
if (@fopen($url, "r")) {
    echo "Файл существует";
} else {
    echo "Файл не найден";
}
?>

Однако такой прием занимает достаточно много времени.

Есть вариант еще лучше — использовать функцию get_headers():
Читать полностью »

рубрики: PHP, Разработка | 7 комментариев

25 Декабрь 2008

Facebook хак — выполнение FBJS по клику на fb:prompt-permission

facebook Как многие знают, работаю я в компании i2we, которая занимается созданием приложений под социальную сеть Facebook. У фэйсбука есть свои теги, которые называются FBML, своя JavaScript библиотека FBJS (причем весь ваш JS-код приводится именно к ней, потому есть определенные ограничения). Есть также так называемые «расширенные права доступа» (extended permissions) — пользователь разрешает приложению совершать те или иные действия (менять его статус, отсылать email и sms). Попросить у него определенные права можно с помощью FBML тега <fb:prompt-permission>, его обязательный параметр — perms, в котором и заключается название «extended permission», например, «email» или «sms». Есть еще необязательный параметр next_fbjs — в нем задается название функции, которая запустится после того, как пользователь в диалоге подтвердит приложению расширенное право доступа. Диалог этот вызывается тегом <fb:prompt-permission>, текст который в нем заключен является ссылкой, при клике на которую и выскакивает диалог с двумя кнопками «Подтвердить» и «Отмена».

Так вот у нас была задача, чтоб засчитывать пользователю определенное действие, даже если он нажал Cancel, а соответствующего события, как next_fbjs нет. Было решено вызывать AJAX запрос при клике на ссылку вызова диалога, но опять таки у этого FBML тега нет события onclick. Решение следующее — поместить внутрь fb:prompt-permission тег <div>, а уже div-у навешать на onclick требуемую JavaScript функцию.

Ниже тестовый пример:

<form>
<input type="text" name="test" id="test" />
</form>

<fb:prompt-permission perms="email"><div onclick="testjs();">Gimme permission</div></fb:prompt-permission>

<script type="text/javascript">
function testjs() {
     document.getElementById('test').setValue('Yes!');
     //AJAX here
     return false;
}
</script>

рубрики: Разработка | 2 комментария

11 Декабрь 2008

Пагинация на PHP

Частенько приходится разбивать контент на сайтах постранично и выводить «менюшку» со списком номеров страниц, плюс ссылочки для перехода на предыдущую, следующую, первую и последнюю страницы.

С этим можно справиться таким кодом:

< ?php
$itemscount=123; // количество элементов (статей)
$itemsperpage=10; // кол-во эл-в на странице
if (isset($_REQUEST&#91;'page'&#93;))
    { $cpage=$_REQUEST&#91;'page'&#93;; }
    else { $cpage=1; }
// если странца не задана, то будем на 1й
$pagescount=ceil($itemscount/$itemsperpage); //кол-во страниц
if ($cpage>1) {
    // первая
    echo '<a href="?page=1">< <</a> ';
    // предыдущая
    echo '</a><a href="?page='.($cpage-1).'">< </a> ';
}
if ($stpage>1) echo '... ';
for ($i=$stpage;$i< =$endpage;$i++) {
	if ($i==$cpage) { echo '<strong>'.$i.' '; }
	else { echo '</a><a href="?page='.$i.'">'.$i.'</a> '; }
}
if ($endpage< $pagescount) echo '... ';
if ($cpage<$pagescount) {
    // след.
    echo '<a href="?page='.($cpage+1).'">> ';
    // последняя
    echo '<a href="?page='.$pagescount.'">>></a> ';
}
?>

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

< < < ... 10 11 12 13 14 15 16 … > >>

Сейчас мы его «сбацаем»
Читать полностью »

рубрики: PHP, Разработка | 7 комментариев

  • Календарь

  • Декабрь 2019
    Пн Вт Ср Чт Пт Сб Вс
    « Ноя    
     1
    2345678
    9101112131415
    16171819202122
    23242526272829
    3031