Как стать автором
Обновить

Впечатления от использования Windows 7 на нетбуке.

Хотя изначально при покупке Ежика я сидел на Linux (и Xandros, и EEEUbuntu), обстоятельства вынудили перейти меня на Windows. (пара программ ни в какую не крутящихся под Wine). Попользовавшись XP я заметил НЕХИЛЫЕ такие тормоза (и не надо про оптимизацию напоминать это само собой разумеется) я купил планку памяти на 2 гига — не помогло. Тогда я начал смотреть на другие системы от Microsoft.

Лирическое отступление:
Мой опыт работы с продуктами Microsoft насчитывает уже почти два десятилетия (начиная с MS-DOS 3.30). И этот опыт в большинстве случаев говорит о том, что ЛЮБАЯ Бета версия от Microsoft это жутко глючное, тормозное отстоище. Из операционных систем мимо меня прошли две — Windows ME и Windows Vista (виснет и будет виснуть). Их я не ставил из-за общей, на мой взгляд, недоработанности. И та и другая мертворожденные ублюдки. Ну да ладно это уже в сфере религиозных взглядов. XP я себе поставил после выхода SP1, а про Висту сказал, что установлю ее только после 3-го сервиспака, но скорее всего я перейду на Windows 7. Потому, что ее бета оказалась намного менее глючной чем та же Vista. Искренне надеюсь, что глюков в нее к выходу не добавят. :)))
Конец лирического отступления.

Итак, образ беты я взял отсюда. Сам процесс установки с карты памяти описывать не буду, упомяну только что занял он со всеми приготовлениями около пятнадцати минут. Почти все устройства кроме камеры и сетевых устройств система нашла сама. Все остальные были установлены мною из архва который лежит на том же форуме. Итог — работоспособная система за 30 минут. Да конечно, это специально порезанная под нетбуки версия, но все же. Занимает все это удовольствие где-то 2.5 гига на диске. Для меня приемлемо, хотя конечно после порезанной XP великовато.

В процессе эксплуатации я выяснил пока только один глюк с которым не справились — после выхода из режима сна пропадает звук.

Скорость работы системы меня поразила — с включенным Aero она летает быстрее чем та же XP. Хотя антивирус (Avast) навернут и работает в штатном режиме. Но впечатление такое, что рабтает в разы быстрее. Скорость реакции на запуск приложения быстрее чем в XP. Вопрос совместимости программ пока до конца не изучил, но из того что мне надо работает все. Opera, Total Commander, MS Office, пара очччень криво написаных на Delfi программ, которые ни в какую не хотели работать под Wine в Linux и еще кучка мелочей. Единственное, что является трудностью это эмулятор CD — привычный мне Daemon Tools работать не захотел, плюнул и поставил Ultra Iso (говорят еще VirtualCD работает).

Итак сутки работы системы полет нормальный. Загрузка процессора в среднем держится на 15-30 процентах. Загрузка памяти на 20-40. Скорость работы выше всяких похвал. Продолжу исследования… Ну не может же быть все так красиво у индийских программистов. :))

Самое интересное, что послушав восторги других пользователей я был не склонен им доверять. Но поставив, я понял — скорее всего эта система поселилась в моем Ежике надолго.
P.S.
Конфигурация моего Ежа — 901-й 2 гига памяти и 20 гигов харды.
P.P.S.
*шепотом в сторону:
Никогда не подумал бы, что опозорюсь постом про Мастдай. :)) Но факт есть факт. :)

Twitter и PHP

Недавно я наткнулся на статьи о Твиттере (Twitter+jQuery, загрузка последнего твита, PHP+Twitter). Эта тема меня очень заинтересовала, впрочем, как и многих других. Чтобы вытащить различную информацию из своего аккаунта лучше всего подходит способ, предложенный в статье «PHP+Twitter», но у меня проблема возникла на этапе подключения CURL'a. На многих бесплатных и недорогих хостингах поддержка CURL не включена, на некоторых из них запросы на подключение просто игнорируются. Тогда у меня возникла идея написать небольшой скрипт, который будет выуживать всю нужную информацию, используя лишь стандартные функции. Вот пример того, как можно использовать скрипт.
Подробности под катом

Перемещение координат в центр блока

Перемещение координат в центр блока Иногда очень хочется задать абсолютно позиционированному блоку координаты его центра а не углов. Например, мы хотим разместить блок в центре страницы (по обеим осям) и анимировать изменение его размеров. В обычном случае нам бы пришлось в каждом кадре менять его размеры и корректировать позицию, что не очень удобно, а иногда и просто не получается сделать это красиво.

Читать дальше →

Portaudit: безопастность ваших портов в FreeBSD

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

Начнем:

Что нового можно придумать в порядке установки портов в FreeBSD? Стандартная схема имеет такой вид:

whereis app
cd /usr/ports/.../app
make
make install clean
rehash


Но постойте, обращаете ли вы внимание, на вывод команды make install clean? Или вы только ждете сообщения об успешной установке приложения?

Наверняка многие из вас видели следующую строчку, пробегающую при выполнении команды make install clean:
(взято из первого найденного по гуглу топика)

cd /usr/ports/graphics/kdegraphics3/
#Make
===> Vulnerability check disabled, database not found <<<< Именно эту, я даже не знаю, как еще жирнее выделить
===> Found saved configuration for kdegraphics-3.5.3
===> Extracting for kdegraphics-3.5.3


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

Приступим:

test# whereis portaudit
portaudit: /usr/ports/ports-mgmt/portaudit
test# cd /usr/ports/ports-mgmt/portaudit
test# make
===> Vulnerability check disabled, database not found
===> Extracting for portaudit-0.5.12
===> Patching for portaudit-0.5.12
===> Configuring for portaudit-0.5.12
===> Building for portaudit-0.5.12
test# make install clean
===> Installing for portaudit-0.5.12
===> Generating temporary packing list //// Заметьте, система не выводит предупреждения =)
===> Checking if ports-mgmt/portaudit already installed

===> To check your installed ports for known vulnerabilities now, do:

/usr/local/sbin/portaudit -Fda

===> Compressing manual pages for portaudit-0.5.12
===> Registering installation for portaudit-0.5.12
===> Cleaning for portaudit-0.5.12
test# rehash



Теперь выполним, то что он просит. А именно, проверим все установленные порты на известные уязвимости:

test# /usr/local/sbin/portaudit -Fda
auditfile.tbz 100% of 54 kB 53 kBps
New database installed.
Database created: Mon Feb 23 03:40:01 MSK 2009
Affected package: perl-5.8.8_1
Type of problem: perl -- Directory Permissions Race Condition.
<<<< Опа, обнаружена уязвимость/баг
Reference: <www.FreeBSD.org/ports/portaudit/4a99d61c-f23a-11dd-9f55-0030843d3802.html
>

1 problem(s) in your installed packages found.

You are advised to update or deinstall the affected package(s) immediately.



Как видим при проверке была обнаружена уязвимость, а значит порт надо обновить. А это тема уже другой статьи, которую я напишу пожже. ( Сначала хочу закончить статью о монтировании SFTP дисков). Но для многих портов подойдет обычный pkg_delete и повторная установка.

Теперь при установке порта мы будем видеть:
/usr/ports/sysutils/php5-posix
===> php5-posix-5.2.6 has known vulnerabilities:
=> php -- input validation error in posix_access function.
Reference: < http://www.FreeBSD.org/ports/portaudit/ee6fa2bd-406a-11dd-936a-0015af872849.html >
=> Please update your ports tree and try again.
*** Error code 1

Stop in /usr/ports/sysutils/php5-posix.
*** Error code 1

Stop in /usr/ports/lang/php5-extensions.
*** Error code 1

Stop in /usr/ports/lang/php5-extensions.


Это означает, что порт с уязвимостью или багом. И ставить его вам не дадут. Вам надо либо обновить порты и попробовать снова, либо воспользоваться ключиком:

make -DDISABLE_VULNERABILITIES

Portaudit можно применять и в повседневной жизни: например для проверки уязвимостей в портах:

portaudit -a

Базу уязвимостей надо периодически обновлять(засуньте в крон, а иначе начнете получать предупреждения при установке портов о том, что database is out of date):
portaudit -F

Две предыдущие команды можно объединить в одну, что будет разумнее для разовой проверки:

portaudit -Fda

Остальные возможности можно прочитать в man

Удачи и оставайтесь защищенными всегда!

Удобно управляем SSH туннелями: EasyTunnel

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

Однажды, когда я искал решение одной из моиих проблем ( а именно: я искал возможности подмонтировать сервера к своей системе через SFTP, но это уже другая, следущая статья ;) ), я наткнулся на такую простенькую програмку EasyTunnel. Если кто помнит пятничный обрыв магистрального интернет кабеля в Стокгольме, когда многие получили проблемы с доступом в зарубежку, я перевыложил програмку сюда: rghost.ru/125740. Програмка основа на одной из составных частей PuTTY (ну а куда без него :) ) — plink, имеет довольно простой и интуитивный интерфейс, позволяет подключать туннели при запуске или при автозагрузке системы, если добавить ссылочку на программу в автозагрузку, хранит пароли в зашифрованном файле, устанавливает пароль на вход в программу.

Например вот такие настройки можно использовать для подключения к серверу MySQL с помощью MySQL Administarator:

image

А потом следущим образом подключаться через MySQL Administarator:

image

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

Приятного использования!

Управляем Windows Mobile устройством по средством SMS-сообщений

Не так давно, в институте, преподаватели поставили задачу написать программу под WM, одной и возможностей которой было бы удаленное управление ею с помощью SMS-сообщений. Руководствуясь мыслью о том, что за нас все давно придумали, нашел изящное решение данной, на первый взгляд кажущейся трудной, проблемы.
Итак, действие по шагам:
1. Создаем экземпляр класса MessageInterceptor из Microsoft.WindowsMobile.PocketOutlook.
MessageInterceptor interceptor = new MessageInterceptor(InterceptionAction.NotifyAndDelete);
Параметр InterceptionAction позволяет выбрать последующее действие, после принятия SMS: либо мы обрабатываем его и кладем копию сообщения во Входящие(параметр InterceptionAction.Notify), либо не показывает сообщение пользователю и начинаем его обработку(параметр InterceptionAction.NotifyAndDelete)
2. Определяем условия «перехватчика» сообщения. Разумеется, нам не хочется, что бы наша программа, принимала, обрабатывала и удаляла, все входящие сообщения. Поэтому, мы будем выполнять SMS-сообщения только с определенным словом внутри.
interceptor.MessageCondition = new MessageCondition(MessageProperty.Body, MessagePropertyComparisonType.StartsWith, "CMD:");
В нашем случае, мы будем обрабатывать только SMS-сообщения, которые начинаются с комбинации «CMD:»
3. После того, как мы сконфигурировали «перехватчик» сообщений, создадим Event Handler, который будет следить за получением SMS-сообщений.
interceptor.MessageReceived += SmsInterceptor_MessageReceived;
Что бы отключить просмотр всех присылаемых сообщений пишем:
interceptor.MessageReceived -= SmsInterceptor_MessageReceived;
Теперь каждое, получаемое SMS-сообщение, будет просматриваться нашим Обработчиком Событий
void SmsInterceptor_MessageReceived(object sender, MessageInterceptorEventArgs e)
{
SmsMessage msg = e.Message as SmsMessage;
if (msg != null)
{
// Process the SMS text message
}
}

4. Для того, что бы наше приложение обрабатывало события и в фоновом режиме, мы воспользуемся методом EnableApplicationLauncher
string appId = "LAN_SMSControl_Sample";
interceptor.EnableApplicationLauncher(appId);

appId — параметр, который уникально определяется наше приложение в системе. Выполнение двух приложений с одинаковым Id не приемлемо, поэтому советую, придумать действительно уникальное ID или воспользоваться произвольно-сгенерированным GUID.
Для отключения программы пользуемся методом:
interceptor.DisableApplicationLauncher();
Для того что бы случайно не запустить дважды нашу программу, напишем:
if (MessageInterceptor.IsApplicationLauncherEnabled(appId))
{
//Если "перехватчик" уже активен, то просто получаем его свойства и работаем
interceptor = new MessageInterceptor(appId);
}
else
{
//Иначе создаем новый и прописываем заново.
interceptor = new MessageInterceptor(...);
interceptor.MessageCondition = new MessageCondition(...);
}

Вот все, что нам было необходимо. Понятного, наверное, мало, поэтому привожу пример цельного приложения.
using System;
using System.Diagnostics;
using System.Windows.Forms;
using Microsoft.WindowsMobile.PocketOutlook;
using Microsoft.WindowsMobile.PocketOutlook.MessageInterception;
namespace SMSDeviceControl
{
public partial class MainForm : Form
{
protected MessageInterceptor smsInterceptor = null;
protected int messageCount = 0;

// An ID which uniquiely identifies this application.
protected readonly string appId = "LAN_SMSControl_Sample";

public MainForm()
{
InitializeComponent();
}

private void MainForm_Load(object sender, EventArgs e)
{
if (MessageInterceptor.IsApplicationLauncherEnabled(appId))
{
smsInterceptor = new MessageInterceptor(appId);
}
else
{
smsInterceptor = new MessageInterceptor(InterceptionAction.NotifyAndDelete);
smsInterceptor.MessageCondition = new MessageCondition(MessageProperty.Body,
MessagePropertyComparisonType.StartsWith, "CMD:");
}
//На форме присутсвует чекбокс chkEnabled, который активирует и деактивирует "перехватчик" сообщений
chkEnabled.Checked = MessageInterceptor.IsApplicationLauncherEnabled(appId);
}
private void MainForm_Closed(object sender, EventArgs e)
{
if (smsInterceptor != null)
{
smsInterceptor.Dispose();
smsInterceptor = null;
}
}

private void chkEnabled_CheckStateChanged(object sender, EventArgs e)
{
if (chkEnabled.Checked)
{
smsInterceptor.EnableApplicationLauncher(appId);
smsInterceptor.MessageReceived += SmsInterceptor_MessageReceived;
}
else
{
smsInterceptor.DisableApplicationLauncher();
smsInterceptor.MessageReceived -= SmsInterceptor_MessageReceived;
}
}

void SmsInterceptor_MessageReceived(object sender, MessageInterceptorEventArgs e)
{
//Выделяем слова, которые находятся после "кодового" слова "CMD:" Они и есть слова-команды сообщения
SmsMessage request = e.Message as SmsMessage;
if (request != null)
{
int idx = cmd.IndexOf(" ");
if (idx != -1)
{
parameters = cmd.Substring(idx).Trim();
cmd = cmd.Substring(0, idx).Trim();
}
//Для примера возьмем два слова-команды: "GAME"(будет запускать карты) и "HELLO"(высветит MessageBox с сообщением)
switch (cmd.ToUpper())
{
case "GAME":
Process.Start(@"\windows\solitare.exe", "");
break;
case "HELLO":
MessageBox.Show("Hello World!");
break;
default:
//Если была прислана неопознанная команда, то возвращаем ее отправителю
SmsMessage msg = new SmsMessage(request.From.Address, String.Format("'{0}' is an unknown command", cmd));
msg.Send();
break;
}}}}}

Бритиш подкаст

Бритиш подкаст

Идея записать первый Бритиш подкаст пришла три года назад, в 2006 году, после прослушивания подкастов Василия Стрельникова. Загорелся идеей вещать по-русски о Британии, так как сам там учился и начал выкладывать свои записи на rpod.ru.

Подкаст пережил два «перерождения» и, вот, в декабре 2008 я начал записывать принципиально новый, третий сезон Бритиш подкаста и постарался сделать всё «по уму», запустил официальный сайт, RSS ленту, хранилище фалов и настроил подходящий звук.

Буду рад новым слушателям с Хабра-хабра. Хотелось бы получить инвайт.

Сайт: Бритиш подкаст
Интернет-почта: info@parkin.me

Статистика используемых антивирусов

Здравствуй ХАБР! Решил написать статью, точнее опубликовать собственную статистику. В связи с тем, что работаю у московского интернет провайдера, то через меня проходит информация о абонентах. И решил я как-то составить статистику о используемых пользователями антивирусами, информацию собирал достаточно долго, порядка двух месяцев, для теста взял информацию о 100 абонентах.

В общем вот моя статистика:


image
в цифрах:
  • nod32 — 35%
  • антивирус Касперского — 24%
  • Avast — 17%
  • dr. Web — 6%
  • Avira — 5%
  • Norton antivirus — 5%
  • Symantec — 4%
  • Avira — 5%
  • Panda — 2%
  • Avg — 2%

О качестве кода (PHP)

Когда-то я думал, что пишу довольно хороший PHP-код. Пока не прочитал Макконнела и его «Совершенный код». Я понял, что нужно делать «ребут» и «очищаться». И практически достиг свечения ауры но… этого оказалось мало. Окружающий (PHP) мир упорно не хотел становится «чище и добрее» вместе со мной. И вот я пишу эти буквы в надежде найти ответы на вопросы.
Читать дальше →

Модифицируем View в ASP.NET MVC

Не всегда нам необходимо, чтобы по Http GET-запросу пользователю возвращалась обычная html-страница.
Например, мы хотим создать текстбокс с автозаполнением (как у Google) — для этого нам потребуется jQuery (+ плагин autocomplete) и специализированный Http-ответ.
Рассмотрим как это сделать на ASP.NET MVC.
Читать дальше →

Умные указатели

В последнее время много говорят о том что C++ — умирающий язык, и что в самом скором времени его полностью вытеснят такие языки как Java и C#. В качестве основного аргумента обычно приводят то, что в C++ нет автоматического сборщика мусора и в связи с этим программы получаются глючными, тяжелыми в разработке и последующей поддержке кода.

Позвольте с этим не согласиться. Конечно, неопытный программист более защищен от ошибок работы с памятью в C# и Java, но эта защита достигается слишком дорогим путем — потерей контроля над работой с памятью. Сборщик мусора запускается не тогда когда нужно, а часто — и вовсе когда его совсем не ждали. Это приводит в том числе и к чрезмерному расходу памяти.

Вернемся к C++. Неужели здесь нет механизма, позволяющего с такой же легкостью, как на управляемых языках, работать с динамически созданными объектами? Есть. Это так называемые «умные» указатели. Чтобы объяснить суть «умного» указателя, приведу пример.

template< class T >
class CMySmartPtr
{
  T* m_pT;

public:
  explicit CMySmartPtr( T* pT )
  {
    m_pT = pT;
  }

  ~CMySmartPtr()
  {
    delete m_pT;
  }

public:
  T* operator*() const
  {
    return *m_pT;
  }

  T* operator->() const
  {
    return m_pT;
  }
};


* This source code was highlighted with Source Code Highlighter
.

Это — простейший вид «умного» указателя. Но даже с ним уже можно писать программу, не заботясь об освобождении памяти после себя. Чтобы было понятнее, приведу пример — без его использования и с ним.

{
  CMySmartPtr< int > spSmartPointerToInt( new int( 100 ) );  //Создаем "умный" указатель

  int* pPointerToInt = new int( 100 );  //Создаем обычный указатель

  delete pPointerToInt;  //Если не вызвать delete для pPointerToInt, то
              //это приведет к утечке памяти

  //при выходе из блока кода( области видимости ) в котором был объявлен
  //"умный" указатель, он автоматически вызовет delete для своего содержимого.
}


* This source code was highlighted with Source Code Highlighter
.

То есть получается, что при использовании «умных» указателей вам вдруг стало не нужно заботиться об освобождении памяти, что намного приближает вас к простоте разработке на управляемых языках, но при этом не лишает всех возможностей, предоставляемых C++. И в плане поддержки, код становится легче, ведь труднее всего искать баги, связанные с утечками памяти, а данный подход их полностью исключает.

Это была простейшая форма «умного» указателя, видов которых существует очень много, и в зависимости от текущей задачи можно использовать «умные» указатели с подсчетом ссылок, фениксы, и так далее. Если будет интересно, позже расскажу и о них.

Javascript — самодостаточный язык программирования на стороне клиента. Не хватало графики. Но появился SVG…

Javascript — самодостаточный язык программирования на стороне клиента.


Раньше, в 70-е, 80-е годы в ВУЗах обучали инженеров (непрограммистов) программированию на Фортране. В результате было делом чести для нормального инженера решать свои задачи самостоятельно, а при необходимости участвовать в больших проектах в качестве исполнителя или постановщика задач на своём участке.


В распоряжении таких инженеров были библиотеки подпрограмм и функций для решения практически любой инженерной задачи путем составления программ из модулей, содержащихся в этих библиотеках. Были, в том числе и библиотеки графических подпрограмм: ГРАФОР и т.п.


Пропускаем время разрухи, «дурного наследия» в виде псевдореляционных СУБД, «кнопочного» обучения программированию в ВУЗах и т.п.

Пришли, наконец, времена технологий Web 2.0, это в т.ч. когда «клиенту-клиентово, а серверу-серверово», Аякс и т.п.


Из вышесказанного, если ограничиться лишь программированием на стороне клиента, можно кратко резюмировать, что Javascript сейчас готов к использованию для массового обучения программированию в ВУЗах студентов непрограммистских специальностей.


Недостаток — мало библиотек. Библиотек именно для инженеров-непрограммистов. И, конечно, в рамках «Открытого кода».

В частности, не хватало графических средств отображения результатов решения инженерных задач. Появился SVG и положение начало меняться. Но медленнее, чем хотелось бы.
Продолжение следует.

Структурная верстка сайта — радикальное упрощение html — css верстки

Все, изложенное здесь — просто. Почему до этого еще никто не додумался?
Программирование из искусства стало технологией после внедрения концепции «структурного программирования». А верстка сайтов была и остается искусством — запутанным бредом многочисленных гуру, басней о кроссбраузерной совместимости.
А ведь нынеча браузеры — совсем не то, что давеча — связка xhtml — css в основных современных браузерах работает практически ОДИНАКОВО. Есть некие различия в неких частных случаях. Возникает вопрос — а нужны ли нам эти частные случаи?
Применим основную идею структурного программирования — сокращение используемых программных структур к верстке. Можно выделить основные визуальные элементы web-страницы — заголовок web-страницы(title), гиперссылка, перечисление ( список ), меню, заголовки (h1-h6), параграф, выделенный текст, колонки, области, окна, картинки, таблицы, ввод данных (формы).
Для реализации этих элементов нужно отобрать связки тегов html — стилей css, работающие одинаково во всех браузерах. Все остальные теги «ф топку».
К примеру, есть тег ul и тег ol. В css существует list-style, делающее ol ненужным. Так зачем мне вообще знать о его существовании?
Для стилей css можно предложить следующее — максимально использовать сокращенные формы записи, упорядочивать их по вложенности визуальных элементов и по атрибутам.
Такая вот идея простой верстки сайтов, даже в сегодняшнем не до конца проработанном виде уже очень существенно облегчила мне жизнь.

О том, как подружить приложения в GNOME с proxy-сервером локальной сети

Задача: Ваш компьютер с Linux и GNOME находится в локальной сети за proxy-сервером.
Вопрос: Как заставить GNOME-приложения, «ходить» в Internet через прокси?

Всё просто, скажете Вы, в GNOME имеется куча релевантных настроек. Есть даже графическая утилита `gnome-network-preferences', которая позволяет задать эти настройки. Но, к сожалению, далеко не все приложения, часто используемые вместе со средой GNOME, умеют их подключать. Если, например, Вы запустите rhythmbox в таких условиях, то, без приложения дополнительных усилий, не сможете услышать в наушниках звуки любимого Internet-радио.

Присылайте приглашение и мы вместе подумаем о том, как можно изящнее решить эту проблему, приложив как можно меньше «дополнительных усилий».

как победить ребят в погонах, которые прибыли изымать серверное оборудование с бесценными данными и при этом не парализовать работу кампании

исходные данные:
В условиях уменьшения налоговых поступлений органы получили кард бланш на «усиленную проверку злостных неплатильщиков налогов». И всё бы хорошо, если бы мы не были родом из СССР. Чаще всего вопрос ставится шире: мы будем вас проверять до тех пор, пока что нибуть не найдём, либо пока не получим утешительный приз в виде конверта вечнозелёных.

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

Идея:
— Используем виртуализацию
— все данные, включая образы операционных систем храним на криптованнном NAS сервере
— запускаем инкрементную реплькацию «всего» на внешнее хранилище с возможностью запуска центра обработки данных вне офиса (с потерей производительности, но без потери функциональности и без потери конфиденциальных данных)
— автоматическое управление этим хозяйством через телефон с тоновым донабором, либо через WEB морду

Как это сделали мы, обязуюсь описать более подробно, после получения нуждного «тикета». Всех праздниками, продолжение следует (надеюсь)

Нужен ли еще один гипервизор?

Вступление



В настоящее время только глухой и слепой IT-шник спустившийся с гор может не знать про виртуализацию, ну а рядовые юзеры могут пользоваться ей даже сами об этом не ведая. Сейчас в этом секторе рынка предлагается множество решений на любой вкус и цвет и под разные задачи — свободные и проприетарные, с разными технологическими подходами (эмуляция, паравиртуализация, полная виртуализациия), ориентированные на серверы или десктопы и работающие под разным окружением (OS-hosted и bare-metal).
Вот о последнем различии я и хотел поговорить. Насколько я понимаю, оно заключается в использовании на хосте ОС общего назначения либо специализированной системы, заточенной под работу именно в качестве ОС для гипервизора. Самый типичный пример такого продукта — VMware ESX(i), который использует переработанный RHEL. С точки зрения производительности и удобства управления это лидирующий продукт (адепты Xen's CLI, без флейма!), вот только использовать его на десктопе не получится вследствие его привязанности к серверным платформам (поддерживает в основном серверное железо, работать с гостевыми ОС можно только удаленно).

А вот если бы...

Читать дальше →

Советы по увеличению скорости загрузки веб-страниц

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

Увеличение скорости загрузки веб страниц можно образно поделить на такие четыре пункта:
1. Увеличение скорости генерации (отдачи) страницы и файлов
2. Уменьшение размера файлов
3. Уменьшения количества файлов
4. Загружать javascript по загрузке страницы

Далее я попытаюсь более подробно расписать все по пунктам, но так как эта статья является ознакомительной то веб-мастер может (и должен) сам найти более подробную информацию по интересующим пунктам.

И так:

1) Нужно кешировать все запросы до базы-данных и тяжелые вычисления. Это поможет увеличить скорость отдачи файлов и нагрузку на веб-сервер.

2) Нужно уменьшить размер текстовых файлов. Это можно достичь использованием gzip, но сжимать можно (но и нужно), не только саму страницу а сss и javasсript-файлы. Gzip может уменьшить размер файлов в 2-10 раз!

3) Также нужно, уменьшить количество загружаемый пользователем css и javascript-файлов до 1-2 для каждого типа. Это можно сделать ручным обеднением.

4) Изображений иногда лучше сжимаются gif а не png, по этому можно поэкспериментировать и достичь меньшего размера изображений.

5) Очень часто дизайнеры разбивают дизайн на множество меленьких изображений, а загрузка большого количества файлов плохо сказывается на общей времени загрузки страницы. Реализацию объединения файлов дизайна можно посмотреть на www.youtube.com. Если еще кто-то не знает как с помощью css разделять склеенные файлы, то навожу простой пример:

Допустим у нас есть 2 изображение размером 20х20 и мы их склеили горизонтально, в результате получилась картинка 40х20, для разделения через сss нужно написать накой код:

.image1
{
background: url(image.gif) no-repeat 0px 0px;
width: 20px;
height: 20px;
}

.image2
{
background: url(image.gif) no-repeat -20px 0px;
width: 20px;
height: 20px;
}


background: url("адрес файла") no-repeat -Хpx -Ypx;
X и У, отступы по координатам, заметьте что перед значением ставится минус.

в результате изображение можно вставить через

6) Если имеется много маленьких картинок, на сайте, которые генерируют юзеры или автоматически, то можно написать скрипт склейки изображений и код выводить через style.

7) Желательно в head как можно меньше оставить файлов javascript и загружать и сразу после того как загрузится страница пользователя. Это можно сделать так:

Сайт
/>


Текст




8) Также можно вынести код рекламы (Adsense или другую которая на javascript) в фрейм, и по загрузке страницы с помощью javascript добавлять код фрейма в элемент, в котором должна быть реклама.



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

Пишем свой класс по работе с MySQL на PHP

В наше время очень многие программисты начали ценить свое время, лень – двигатель процесса!
Есть большое количество готовых классов для работы с базами данных, но все равно попробовать написать свой – это уже хорошо, хотя — бы для тренировки, хотя — бы для саморазвития.


Класс, который я когда-то написал и использую по сей день, очень прост.
Смысл заключается в том, что меньше символов – меньше кода.


Сразу приведу пример работы с классом:


<?<br>$Q = new db;<br>$Q->connect($host,$user,$pass,$base);<br>$Q->_table='test_table';<br><br>$arr['name'] = 'Вася';<br>$arr['mail'] = 'pupkin@mail.ru';<br><br>$Q->_arr = $arr;<br>$last_id = $Q->QI();<br>?><br><br>* This source code was highlighted with Source Code Highlighter.


Вот таким способом мы выполнили INSERT в таблицу «test_table», в чем простота – спросите вы? Представьте что в таблице 50 полей… Запрос будет очень длинным и «неюзабельным».



Читать дальше →

Задела увереность продавцов в наших магазинах.

Сейчас я попробую кратко рассказать, как вопреки серьёзным и столь продвинутым, высоко квалифицированным, продавцам магазинов «техносила», «эльдорадо»(Воронеж) всё-таки возможно завести форточку на нетбуках без привода, поставляемых с linux. По их утверждению это невозможно=/.
Для начала определимся с необходимым.
1. Поддержка загрузки в биос с usb, в случае отсутсвия идём на офф сайт производителя биос и качаем прошивку. Прошиваем.
2. Утилита flashboot для установки freedos.
3. Пара файликов Xmsmmgr.exe Smartdrv.exe (но не критично, необходимо для подгрузки свопа при установке (влияет на скорость установки)), ntfsdos.exe (гугл в помощь, найти их можно без труда).
4. Дистрибутив винды.
5. Volcov Commander
6. Консольный PowerQuest PartitionMagic.
Поехали.
Делаем загрузочную флэшку: Форматируем в фат. Запускаем утилиту flashboot. Выбираем: «Create bootable flash disk with minimal set of DOS system file» -> «Use built-in freedos». Далее выбираем нашу флэш, и собственно получаем загрузочную флэш с фридосом=/. Теперь неоходимо на неё скинуть: PowerQuest PartitionMagic, Volcov Commander, файлы Xmsmmgr. exe, Smartdrv. exe и дистрибутив винды в частности папочка i386/ (по необходимости ntfsdos.exe см.далее). На этом основа заложена переходим к следующему этапу.

Подготовка жёсткого диска для установки:
Загрузившись в фридос заходим в папочку pqm запускаем «PowerQuest PartitionMagic» форматируем хард в фат32, если захотите в нтфс, но для того чтобы DOS его видел необходимо будет подгрузить дровишки ntfsdos.exe (всё можно скачать с офф сайтов).

Установка:
Для удобного (не вспомню как в фридос реализовать рекурсивное копирование) в том числе рекурсивного копирования запускаем волков командер и копируем i386/, xmsmmgr.exe, smartdrv.exe в корень готового диска. Далее последовательно запускаем наши экзешки xmsmmgr.exe, smartdrv.exe, i386/winnt.exe. По сути дела завелась стандартная установка. В течении, установки флешка будет аналогом болванки с виндой. При запуске конфигурирования винды возможна следующая бага: «Не удается запустить Windows из-за аппаратных ошибок настройки диска». Для устранения грузимся опять с флешки и в редакторе волков коммандера редактируем boot.ini (Необходимо будет изменить значение rdisk() (к примеру rdisk(1) на rdisk(0)). После установки осталось только удалить ненужные инструменты это i386/,xmsmmgr.exe, smartdrv.exe. На этом всё.

P.S. В случае установке линукс/юникс поможет утилита unetbootin. Если возникнут вопросы, помогу icq#490674

Удачи Steaven Qain ака mundane_lady

Простой скрипт мониторинга связи и рестарт ADLS-модема

На АДСЛ-линии периодически, по пока невыявленным и потому необъяснимым причинам пропадает связь. Соединение в тот же момент на модеме не рвется, и он продолжает «думать», что все в порядке, а интернет же отсутствует.

Так как для меня плотное изучение *nix систем только начинается, было решено поэксперементировать и написать скрипт проверяющий наличие откликов от определенных узлов в Интернете, и при их отсутствиии посылающий команду модему на переподключение.

Вооружаемся мануалами, гуглом, кофем, бутербродом с колбасой и приступаем