Сообщения

Сообщения за апрель, 2012

Поиск дублей в базе данных. Очень быстрый способ

Появилась задача найти все дубли в базе данных и удалить их. Единственное решение видел только в написании php скрипта с вложенными друг в друга циклами и проверки значения нужных полей и неравенства id, но скрипт работает очень медленно. В sql есть много возможностей кроме основных операций и решил попробовать найти решение в самом языке. select Поле_для_проверки_на_дубль, count(*) from имя_базы group by Поле_для_проверки_на_дубль having count(*) > 1; Этот способ работает очень быстро, 11000 записей переваривает за пару секунд и нашел 320 дублей. После этого осталось только выполнить запрос скриптом и удалить $result = mysql_query("select Поле_для_проверки_на_дубль, count(*) from имя_базы group by Поле_для_проверки_на_дубль having count(*) > 1;"); while ($row = mysql_fetch_assoc($result)) {     echo "Есть дубль ".$row['id']." - ".$row['Поле_для_проверки_на_дубль']."<br/>";     $result2 = mysql_query(...

Как не навредить сайту при проведении технических работ

При переносе серверов на выделенный сервер потребовалось использовать оповещение поискового робота о том, что сайт временно недоступен и требуется зайти позже. Данная операция возможно с помощью небольшого php скрипта: <?php header ( 'HTTP/1.0 503 Service Unavailable' ); header ( 'Retry-After: ' .( 14 * 60 * 60 ));  // заходите через 14 часов ?>  Эта операция позволяет не потерять проиндексированные страницы.  После того как сайт поднялся можно прогнать сайт в твиттере с помощью сервиса твиттерсток например чтобы быстророботы сразу же зашли на сайт, обычно через 20 минут робот уже проиндексирует страницу, которую вы запостили.

Samsung Galaxy Note N7000: Первые впечатления

Девайс супер! Этот вывод я делаю через недельного его использования. В первый и второй день очень пугал размер. Сейчас не могу и представить как люди могут пользоваться меньшими устройствами. Я сам человек среднего роста и не особо большой рукой, но держать его мне удобно. Само собой больше удобнее будет с ним работать именно мужской половине человечества, для дам он действительно будет не удобным. Фотокамера меня порадовала, сравнивать правда было особо не с чем, до этого был HTC Touch Diamond 2  c 5-ю мегапикселами. Сколько тут реальных не знаю, но написано 8. Главное отличие, что есть встроенная вспышка. Автовспышка работает очень качественно и корректно для меня. Хотя я не фотограф мне судить сложно. Аккумулятор работает отлично, держит очень долго. При интенсивном использовании на целый день вполне хватит. В данный момент заказал себе держатель для авто + комплект зарядки, аккумулятор, 4 чехла, пленки на ebay. GPS ловит быстро, буквально за 10 секунд можно начать пр...

Samsung Galaxy Note N7000: Софт маст хайв

AdSense Dashboard отображает статистику заработка в системе Google Adsense. Имеет удобный интерфейс где отображается доход на сегодняшний и вчерашний день, а также за месяц и с начала работы в системе. Обновление происходит автоматически раз в полчаса. DailyRoads Voyager делает из телефона видеорегистратор. По отзывам самый лучший из бесплатных и многих платных решений. Dropbox кто пользуется, тот оценит преимущества данного клиента для Андроид устройств. После установки появляется в контекстном меню для быстрой отправки различного контента в облако. Позволяет очень удобно синхронизировать приложение keepass. ES Проводник проводник для работы с файловой системой. При получении root прав становится вообще незаменимой вещью для установки не официального софта и патчей. Evernote пока не оценил достоинств на коммуникаторе, отзывы о нем очень хорошие. Надеюсь смогу его приспособить для своих задач. KeePassDroid версия хранилища паролей для андройда. Синхронизируется через d...

Ошибка: failed with exit status 255

Эта ошибка возникает из за указания относительного пути в исполняемом файле php скрипта при запуске его по cron. То есть внутри указан путь в виде "../config/func.conf.php", а для исполнения нужно указать полный путь /var/www/site/config/func.conf.php . Также если вдруг не происходит исполнения скрипта, то нужно проверить указан ли полный путь к интерпретатору php и выставленны ли правильные права на скрипт.

Ошибка: bad protocol version identification

Полез я однажды на сервер по ssh через putty и получил вместо запроса логина полную версию своего ssh сервера. После нажатия кнопки Enter просто завершалась сессия. Первая мысль появилась, что сервак наконец то хакнули, залез на сайт, но сайт работал. Так как доступа по ssh не было пришлось лезть через клиента vsphere мониторить виртуалку. Перезапуск сервера проблему не решил. Полез смотреть кто ко мне логинился в /var/log/auth.log Вроде ничего страшного не было, но обнаружил такую ошибку: bad protocol version identification '' бла... бла... бла... мои ip Полез в гугл, оказалась, что подобная проблема возникала у человека который пытался подключится telnet ом к SSH. Так и оказалось, не так давно правил настройки для соединения со своим сервером, правил настройки кодировки и сохранял изменения и видать нечаянно переключил протокол вместо ssh стоял raw. Переключил тип протокола, указал правильный порт сохранил и все заработало.

Apache2 + subversion установка на Debian

Предполагаю что apache2 у вас уже стоит ставим subversion + дополнительный модуль для apache apt - get install subversion libapache2 - svn Для самого репозитория понадобиться указать домашний каталог. Его можно указать абсолютно в любом месте. Я указал в качестве рабочего домашний каталог пользователя user. Создаем там каталог repos: cd /home/user mkdir repos Далее создаем тестовый репозиторий svnadmin create / home/user / repos / test   Меняем права для возможности доступа вэбсервера к каталогу chown - R www - data : / home/user / repos   Копируем настройки модуля apache в бак и создаем файл со своими настройками cp /etc/apache2/mods-available/dav_svn.conf /etc/apache2/mods-available/dav_svn.bak nano  /etc/apache2/mods-available/dav_svn.conf < Location / svn > DAV svn SVNParentPath / home/user /repos/ AuthType Basic AuthName "My Repository" AuthUserFile / home/user /passwd Require valid-user </ Location >     Далее создаем ...