Автор: Андрей
Определяем инициатора события (jQuery)
Определить программно вызвано событие
$('#elem').trigger('clik')
или пользователь «кликнул» по элементу.
Варианты:
$( '#elem' ).on('click', function ( e ) { if ( e.originalEvent === undefined ) { alert( 'triggered programmatically' ); } else { alert( 'clicked by the user' ); } }) или $( '#elem' ).on('click', function ( e ) { if ( e.isTrigger !== undefined ) { alert( 'triggered programmatically' ); } else { alert( 'clicked by the user' ); } }) или $( '.elems' ).on('click', function ( e, a ) { if ( a !== undefined ) { alert( 'triggered programmatically ' + a.from ); } else { alert( 'clicked by the user' ); } }) $( '#elem' ).trigger('click',{'from':'test'});
Использование переменной окружения .htaccess
cat ./.htaccess
SetEnv APPLICATION_ENV production AddDefaultCharset UTF-8 RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?_url=/$1 [QSA,L]Используем в php (по умолчанию будет использоваться development):
defined('APPLICATION_ENV') || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'development'));Вся затея ради того, чтобы использую настройки окружения хоста переключаться между БД разработки и продакшн
public $db_our = '[Metrolog' . (APPLICATION_ENV!='production' ? 'Dev' : '') . '].[dbo].';И сразу, защитим .htaccess от нечаянного изменений даже в случае наличия рутовых прав, выставим атрибут файлу IMMUTABLE(Неизменяемый) (это для Linux)
# lsattr ./.htaccess -------------e-- ./.htaccess # chattr +i ./.htaccess # lsattr ./.htaccess ----i--------e-- ./.htaccess(a это для UNIX)
# ls -lo ./.htaccess -rw-r--r-- 1 rianvi wheel - 375 Feb 11 2013 ./.htaccess # chflags schg ./.htaccess # ls -lo ./.htaccess -rw-r--r-- 1 rianvi wheel schg 375 Feb 11 2013 ./.htaccess
Вставка изображения в форму из буфера
Возникла необходимость, вернее, усталость от неудобства. В багтрекер постоянно нужно вставлять скриншоты, и вот как раз сохранение в файл перед прикреплением в форму и достало.
Кроссбраузерностью и поддержкой старых версий не заморачивался, в компании повсеместно ИЕ, обновления приходят и устанавливаются постоянно. Сам я предпочитаю Хром. В итоге так и получилось, ИЕ > 9, Хром, ну и Опера, так как она сейчас на ВебКите, Лисицу чинить не стал.
В форму добавляю:
На сервере:
Стили:<input type="hidden" id="screenshot" name="screenshot" value="">
<div style="margin-top: 20px; position: relative;"> <img id="isimg" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNgYAAAAAMAASsJTYQAAAAASUVORK5CYII="></img> <div id="isforimg" contenteditable="true"> </div> </div>
<style>
#isimg {
margin-left: 100px;
padding: 5px;
width: 320px;
height: 220px;
border: none;
background: url(../images/screenshot-grey.png) no-repeat center center;
}
#isforimg {
position: absolute;
padding: 5px;
width: 70px;
height: 70px;
overflow: hidden;
border: 2px solid #eee;
top: -10px;
left: 370px;
text-align: center;
vertical-align: middle;
line-height: 60px;
background: url(../images/klipper.png) no-repeat center center;
}
</style>
На сервере:
if (!empty($_POST['screenshot']) && ($content_pos = strpos($_POST['screenshot'], ';base64,')) && $content_pos!==false) {
try { $filename = md5($issue->getIssueId().'screenshot'.microtime(1)); $file_path = $folderPath.DIRECTORY_SEPARATOR.$filename; $fcontent = base64_decode(substr($_POST['screenshot'], $content_pos + 8)); if (false !== file_put_contents($file_path, $fcontent)) {
И js (без jQuery):if(document.attachEvent) { document.attachEvent('paste', onPasteTriggered); // ie < 11 } else if(document.addEventListener) { document.addEventListener('paste', onPasteTriggered, false); // google chrome or ie >= 11 }
function onPasteTriggered(e) { if (e.srcElement.id != 'isforimg') return; if (e.clipboardData || e.view.clipboardData) { //google chrome or ie > 9 var copiedData = e.clipboardData ? e.clipboardData.items[0] : e.view.clipboardData.files[0]; //Get the clipboard data /*if the clipboard data is of type image, read the data*/ if(copiedData && copiedData.type && copiedData.type.indexOf('image') == 0) { var imageFile = e.clipboardData ? copiedData.getAsFile() : copiedData; /*HTML5 FileReader API to read the image file*/ var reader = new FileReader(); reader.onload = function (evt) { var result = evt.target.result; //base64 encoded image document.getElementById('screenshot').value = result; document.getElementById('isimg').src = result; }; reader.readAsDataURL(imageFile); document.getElementById('isforimg').setAttribute('contenteditable', 'false'); // for IE - for not insert img setTimeout(function(){document.getElementById('isforimg').setAttribute('contenteditable', 'true');}, 200); // } } setTimeout(function(){ document.getElementById('isforimg').innerHTML = ''; }, 100); //erase what inserted }
Настроим Exim4 на отправку через smarthost
# dpkg-reconfigure exim4-config
- Выбираем «mail sent by smarthost; received via SMTP or fetchmail»
- System mail name: «localhost»
- IP-addresses to listen on for incoming SMTP connections: «127.0.0.1» — не будем принимать входящие соединения
- Other destinations for which mail is accepted: отставляем пустым, можно для всех
- Machines to relay mail for: отставляем пустым, можно для всех
- IP address or host name of the outgoing smarthost: тут IP-адрес почтовика на который все будем отправлять
- Hide local mail name in outgoing mail: NO
- Keep number of DNS-queries minimal (Dial-on-Demand): NO — в моем случае нет доступа даже к DNS
- Delivery method for local mail: я выбрал «mbox format in /var/mail/»
- Split configuration into small files: я выбрал YES
Мелочь
А, редактор vi, сколько лет живу и все не судьба с ним подружиться, стараюсь обходить его стороной.
Команда выхода без сохранения :q!
Установим более удобный редактор по умолчанию
# export EDITOR='mcedit'или
# export EDITOR='nano'и например, редактируем кронтаб crontab -e
Выводим сообщение запроса о повышение привилегий
[IM008] [Microsoft][ODBC SQL Server Driver]Ошибка диалогового окна (0)
Попытка DSN ODBC подключения к MSSQL приводит к ошибке
[IM008] [Microsoft][ODBC SQL Server Driver]Ошибка диалогового окна (0)строка подключения, сервер 192.168.11.17, проверка подлинности SQL Server
strConnection = _T("DRIVER={SQL Server};SERVER=192.168.11.17;DATABASE=DatabaseName;UID=Username;PWD=myPassword;");Добавляем номер порта и все ок.
strConnection = _T("DRIVER={SQL Server};SERVER=192.168.11.17,1433;DATABASE=DatabaseName;UID=Username;PWD=myPassword;");При этом с драйвером «SQL Native Client» все работало и в первом варианте. На заметку, строка подключения может содержать Network=dbmssocn;
dbnmpntw Win32 Named Pipes
dbmssocn Win32 Winsock TCP/IP
dbmsspxn Win32 SPX/IPX
dbmsvinn Win32 Banyan Vines
dbmsrpcn Win32 Multi-Protocol (Windows RPC)
Skype, постоянно в сети
Проблема, контакт остается в статусе в сети, даже после отключения.
Решаем, вводим в окне скайпа:
/showplaces — показывает на каких устройствах авторизованы
затем
/remotelogout — выходит из Skype отовсюду, кроме текущего устройства
и еще раз проверяем /showplaces
Деградация производительности виртуальной машины VMware на медленных дисках
Очень узкое место это файл подкачки виртуальной машины, имеет расширение vmem и содержит часть оперативной памяти виртуальной машины.
Отключаем его использование, открываем в текстовом редакторе файл vmx, лежит в папке с виртуальной машиной и добавляем туда параметр mainMem.useNamedFile = «FALSE»
Теперь оперативная память гостевой машины будет располагаться в RAM хоста или его свопе.