Показ дописів із міткою программирование. Показати всі дописи
Показ дописів із міткою программирование. Показати всі дописи

вівторок, 15 березня 2011 р.

Apache: сайт временно недоступен

Очень красивое и простое решение — просто в самом начале описания VirtualHost прописываем:

        ErrorDocument 503 "Our website is temporarily closed for maintenance. It should reopen by..."
RewriteEngine On
RewriteRule .* - [R=503,L]

Есть ещё решение, но оно не работает, если основной сайт живёт в mod_php (что в принципе обычная ситуация).

VirtualBox + Unidentified network

Как оказалось, это решение нифига не работает - достаточно оказаться в другой сети (т.е. дома), как Windows 7 опять перестраивает сеть и вновь появляется unidentified network.

Но вроде есть более правильное решение - перевести VirtualBox Host-Only Ethernet Adapter в режим end-point.

Вот небольшой скриптик на PowerShell:

$devices = "HKLM:\SYSTEM\CurrentControlSet\Control\Class\*"
$adapters = Get-ItemProperty $devices | Where-Object {$_.Class -eq "Net"} | Foreach-Object { $_.PSPath }
Get-ChildItem $adapters -erroraction silentlycontinue | Foreach-Object { get-itemproperty -path $_.PSPath } | Where-Object {$_.ComponentId -eq "sun_vboxnetadp"} | Foreach-Object { Set-ItemProperty -path $_.PSPath -name "*NdisDeviceType" -Type DWORD -Value 1}
Get-WmiObject -Class Win32_NetworkAdapter | Where-Object {$_.Name -like "*Virtualbox Host*"} | Foreach-Object {$_.Disable(); $_.Enable()}

Пока вроде полет нормальный!

середа, 9 березня 2011 р.

VirtualBox + Unidentified network

В последнее время для web-разработки использую VirtualBox — у меня локально Win7x32 + Apache + PHP довольно часто шалят:
PHP Warning:  Unknown: open_basedir restriction in effect. File...is not within the allowed path(s): ...

(хотя open_basedir не выставлен вообще!)

Настроил VirtualBox согласно статье. А так как мой ноутбук может работать в разных сетях, завёл ещё одну через VirtualBox Host-Only Network адаптер.

Всё хорошо, пока мне не понадобилось использовать MySQL сервер основной системы. Вроде бы всё банально просто, но не получается! Win7 считает эту сеть как "неизвестная", блокирует входящие firewall-ом, поменять тип тоже не даёт.

Короче, вот тут нашёл "решение" — небольшой PowerShell скрипт поменяет тип у всех активных неизвестных сетей в "рабочая":

- запускаем виртуалку (т.е. адаптер имеет подключение)
- создаём PowerShell скрипт unidentified-to-work.ps1:

# 
# Name: ChangeCategory.ps1
# Copyright: Microsoft 2009
# Revision: 1.0
#
# This script can be used to change the network category of
# an 'Unidentified' network to Private to allow common network
# activity. This script should only be run when connected to
# a network that is trusted since it will also affect the
# firewall profile used.
# This script is provided as-is and Microsoft does not assume any
# liability. This script may be redistributed as long as the file
# contains these terms of use unmodified.
#
# Usage:
# Start an elevated Powershell command window and execute
# ChangeCategory.ps1
#
$NLMType = [Type]::GetTypeFromCLSID('DCB00C01-570F-4A9B-8D69-199FDBA5723B')
$INetworkListManager = [Activator]::CreateInstance($NLMType)

$NLM_ENUM_NETWORK_CONNECTED = 1
$NLM_NETWORK_CATEGORY_PUBLIC = 0x00
$NLM_NETWORK_CATEGORY_PRIVATE = 0x01
$UNIDENTIFIED = "Unidentified network"

$INetworks = $INetworkListManager.GetNetworks($NLM_ENUM_NETWORK_CONNECTED)

foreach ($INetwork in $INetworks)
{
$Name = $INetwork.GetName()
$Category = $INetwork.GetCategory()

if ($INetwork.IsConnected -and ($Category -eq $NLM_NETWORK_CATEGORY_PUBLIC) -and ($Name -eq $UNIDENTIFIED))
{
$INetwork.SetCategory($NLM_NETWORK_CATEGORY_PRIVATE)
}
}

- запускаем PowerShell с правами администратора
- меняем execution policy, чтобы скрипт мог работать: set-executionpolicy remotesigned
- выполняем скрипт unidentified-to-work.ps1
- возвращаем execution policy: set-executionpolicy restricted

вівторок, 22 лютого 2011 р.

PHP error_log + Apache

Потратил час в пустую, пытаясь настроить PHP под Apache так, чтоб ошибки в PHP складывались не в общий ErrorLog, а в отдельный файлик (параметр error_log в php.ini или в настройках виртуального хоста):


<VirtualHost *:80>
ErrorLog ${APACHE_LOG_DIR}/error-site.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog ${APACHE_LOG_DIR}/access-site.log combined
DocumentRoot /var/www/site

php_flag log_errors On
php_value error_log /var/log/apache2/php-site.log
</VirtualHost>


Но ошибки упорно продолжали сыпаться в ErrorLog сервера.

И вот нашёл решение:

Don't set error_log to where your syslog stuff goes, eg /var/log/apache2, because they errors will get intercepted by ErrorLog. Instead, create a subdir in your project folder for logs and do php_value error_log "/path/to/project/logs". This goes for both .htaccess files and vhosts. Also make sure you put php_flag log_errors on

вівторок, 7 грудня 2010 р.

phpbrowscap

С недавних пор мне начали сыпаться ошибки из серии:

exception 'Browscap_Exception' with message 'Bad datetime format from http://updates.browserproject.com/version-date.asp' in .../phpbrowscap/browscap/Browscap.php:485


Как выяснилось, file_get_contents не умеет обрабатывать redirect (302) и URL теперь нужно использовать другой: https://browsers.garykeith.com/versions/version-date.asp (ну или попробовать использовать CURL)

понеділок, 23 серпня 2010 р.

svn diff + vim

Ха, а ларчик просто открывался: очень легко можно настроить svn использовать vimdiff для отображения изменений в конкретном файле:

— Создать файлик (к примеру svnvimdiff) с содержимым:

#!/bin/sh
vimdiff "$6" "$7"


— Настроить svn (файлик ~/.subversion.config):

[helpers]
diff-cmd = svnvimdiff


Ну или
svn diff --diff-cmd svnvimdff file...


Содрано отсюда

четвер, 19 серпня 2010 р.

How to Enable CTRL+V Paste in the Windows Command Prompt (+Far)

Некоторые исправляния к первоначальному скрипту: поломалась вставка из буфера обмена в Far.

Поэтому вначале скрипта объявляем группу (все cmd за исключением Far):
GroupAdd, cmd, ahk_class ConsoleWindowClass,,, Far


(обычно до первого определения клавиш, убедитесь в логе AutoHotKey, что группа объявлена)

А затем уже привязка к группе:

#IfWinActive, ahk_group Cmd
^V::
+Insert::
SendInput {Raw}%clipboard%
return
#IfWinActive

вівторок, 17 серпня 2010 р.

How to Enable CTRL+V Paste in the Windows Command Prompt

Ванятка нашёл, за что ему большое спасибо.
CMD я не так часто пользуюсь, всё равно Far намного удобнее ;)

И всё же, если есть удобный и простой способ сделать жизнь проще, почему бы и нет?
Вот он, этот скриптик, единственное — я добавил ещё и комбинацию Shift-Insert:

#IfWinActive ahk_class ConsoleWindowClass
^V::
+Insert::
SendInput {Raw}%clipboard%
return
#IfWinActive

понеділок, 21 червня 2010 р.

Ubuntu 10.04 и PHP 5.2

Обновил один из живых серверов с Ubuntu до 10.04 — радостно обновился PHP до 5.3.
В следствие чего кучу сайтов, основанных на старом PHP (Joomla, CiviCRM и т.д.) отказались работать. Попытался поиграться с настройками PHP, но старый CiviCRM упорно отказывался дружить с новым PHP.

В итоге остановился на компромисном варианте — подключил репозиторий со старым PHP, но скомпилированным с текущими системными библиотеками. За подробностями сюда (вариант 3).

Как обычно, список не полон, некоторых пакетов не хватает. Связался с автором репозитария, ждём ответа.

субота, 1 травня 2010 р.

TinyMCE и Firefox

Столкнулись тут с одной весёлой проблемкой - tinymce на контенте вида:
<p>&nbsp;</p>

радостно падал и на любое действие выводил нечто вида:
Index or size is negative or greater than the allowed amount

Более того, даже от вида простого пустого параграфа ему тоже становилось плохо.
При этом шалил только Firefox, Chrome и даже IE8 молча и добросовестно выполняли свою работу.

Долго ковырялись, но решение оказалось вот таким:

tinyMCE.init({
cleanup_on_startup: true

четвер, 15 квітня 2010 р.

iframe и прозрачность

Столкнулся я сегодня с одной проблемкой - понадобилось мне фон области редактора TinyMCE сделать прозрачным. Довольно легко и просто добился стилями в Chrome/Firefox, но как обычно Internet Explorer (даже 8-й) решил пошалить. Шалил он где-то час, пока я не нашёл вот эту статью. Но даже и с таким оружием он (IE8) не сдавался могучему jQuery. Оказалось, что регистр атрибута важен и выглядит результат вот так:


if ($.browser.msie)
$('#banner_box_ifr').attr('allowTransparency', true);

пʼятниця, 19 березня 2010 р.

Fatal error: Class 'Debug' not found..

В какой-то момент сайт на основе SilverStripe вдруг перестал работать.
В конце страницы появляется вот такой текст (FF в таком случае вообще перестаёт отображать страницу, IE и Chrome более дружелюбнее):
<br /> 
<b>Fatal error</b>: Class 'Debug' not found in <b>/var/www/bamba/public_html/sapphire/dev/Debug.php</b> on line <b>676</b><br />


Google мне не помог совершенно, форум пестрит сообщениями на эту тему без единого решения (кроме вот этого, но мне кажется, что оно не имеет отношения к этой проблеме).

error_log нам в руки! Причина ошибки оказалась весьма банальна:


/usr/local/etc/php.ini:session.save_path = "/tmp/php"


А каталога-то этого и нет!
Решения два:
- исправить на системном уровне
- прописать в .htaccess:


php_value session.save_path '..../public_html/sessions'

пʼятниця, 4 вересня 2009 р.

Немножко об image map

Столкнулся я тут с одной проблемой.
Клиентка захотела показать для всех картинку с персоналом, а когда указатель мышки над конкретным человеком — имя его показать под картинкой (над картинкой, не важно короче).
Вначале я подумал про image map, но почему-то мне эта идея показалась слишком сложной, старомодной и т.д.

(Отмечу, что сайт основан на Joomla и редактор JCE радостно упрощает и выбрасывает лишнее в редактируемом тексте страницы, в том числе и image map, и атрибуты id и проч.)

Посему я решил просто — отображаем картинку, у неё выставляем класс вида perons-XX, где XX выступает идентификатором для группы людей, отображённых на этой картинке, а у каждого параграфа, ответственного за конкретного человека, выставляем класс вида "persons-XX rect-X1-Y1-X2-Y2".

Вначале всё было хорошо (с помощью jQuery), но.. выяснилось, что определить координаты точки картинки, над которой сейчас находится мышка, средствами jQuery не так-то просто: offset() возвращал различные значения под разными бразуерами (отличились Chrome/Safari, Opera, FF2).

В следующий раз я решил использовать стандартные image maps, но с одним "но" — формировать их динамически. Эврика! (Я оставляю в силе JCE и клиент сам может редактировать страницы). Но, как говорится, враг подкрался незаметно: под IE7 код совершенно не хотел работать. Все остальные браузеры, включая IE8, работали прекрасно!

Дальнейшее копание показало, что IE7 совершенно не воспринимает динамически создаваемый <map />, более того, такой фокус не прокатывал:

$("<map />").attr("name", "map1");


Точнее говоря, он вроде бы строил image map, но события мыши на эти области не подключались и всё тут. Обидно, что потрачено кучу времени и что в итоге я вернулся к статическому коду (картинка и image map расписаны в тексте статьи, пришлось отключить JCE), динамически лишь события подключаются. Этот вариант работает везде!

Немного ссылок:

вівторок, 25 серпня 2009 р.

Мышь или клавиатура?

Забыл дома мышку к ноуту, а тачпадом работать никогда удобно не было, особенно перетаскивать окна или менять их размер.

И вспомнил я, что в бытность Линуксов всяких имел я настройки в оконных менеджерах разнообразные, жизнь мне всяко облегчающие!
И подправил я себе чуток Autohotkey.ini нижеследующим:


WMove(dx, dy) {
WinGetPos, X, Y, , , A
WinMove, A, , (X + dx), (Y + dy)
}

WResize(dw, dh) {
WinGetPos, , , W, H, A
WinMove, A, , , , (W + dw), (H + dh)
}
+^#Up::WResize(0, -10)
+^#Down::WResize(0, 10)
+^#Left::WResize(-10, 0)
+^#Right::WResize(10, 0)
+#Up::WResize(0, -50)
+#Down::WResize(0, 50)
+#Left::WResize(-50, 0)
+#Right::WResize(50, 0)
^#Up::WMove(0, -10)
^#Down::WMove(0, 10)
^#Left::WMove(-10, 0)
^#Right::WMove(10, 0)
#Up::WMove(0, -50)
#Down::WMove(0, 50)
#Left::WMove(-50, 0)
#Right::WMove(50, 0)



Расшифрую префиксы несведущим:
# - Win
^ - Control
+ - Shift

Остальное, думаю, и так понятно.
А, вот это ещё полезно:

SetWinDelay, 2


PS: А реглировку громкости в foobar я перенёс на Ctrl + MM Volume Up/Down.

пʼятниця, 31 липня 2009 р.

ad-hoc reporting

После двухнедельной возни с ними прихожу к мысли, что весьма часто проще нарисовать новый отчёт с нуля, чем пытаться доделать старый :(

середа, 8 липня 2009 р.

Dell, возрождение

Ура, железяка опять в ходу.
К чести Dell надо отметить - поменяли по гарантии и материнскую плату, и оптический привод.
Ну и я на радостях решил сделать всё правильно:
- x64 и я полностью вижу все 4GB RAM
- я ни в Power Users, ни в Administrators - пользуемся sudowin

Субъективно бегает быстрее.
Но проблем я огрёб ещё больше ;)

Sudowin всё равно UAC не обходит (хотя вроде свежая версия должна дружить) - до unix-ов далеко ещё, x64 софта мало, и возиться приходится слишком много.

Едем дальше! ;)

середа, 10 червня 2009 р.

Чёрт, Vista! (или Long live the Spectrum!)

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



Что-то начала система на моём ноуте радостно падать (вроде ж и крутой бренд Dell?!).
Похоже, что-то не так с драйверами видео-карты, ибо было весьма удивительно увидеть такое радостное сообщение из трея:


Видеодрайвер nvlddmkm перестал отвечать и был успешно восстановлен.


PS: Обновил bios, поставил более свежие драйвера и обрадовался было... но вчера аккурат мозаика вновь. Такое впечатление, что оно от жары?

PPS: а вот ещё одно забавное сообщение я нашёл:


Системное время изменено на 07.06.2009 22:31:01 с 07.06.2009 22:31:01.

вівторок, 9 червня 2009 р.

пʼятниця, 27 лютого 2009 р.

О, Vista!

Делай раз и два:
- пущаем nslookup
- говорим ему: server 198.41.0.4 (это корневой a.root-servers.net)
- говорим ему любое имя, к примеру nn.net.ua (это мой домашний inet-провайдер)
- получаем: *** a.root-servers.net can't find nn.net.ua: BAD ERROR VALUE

Под Windows XP всё нормально:

> nn.net.ua
Server: a.root-servers.net
Address: 198.41.0.4

Name: nn.net.ua
Served by:
- NS2.NIC.FR
192.93.0.4
ua
- NS-UA.RIPE.NET
193.0.12.232
ua

Почему?