понедельник, 27 октября 2008 г.

Про создание COM-объектов без регистрации DLL в системе

Как известно, чтобы создать некий COM-объект, надо прежде всего зарегистрировать DLL в которой этот объект реализован. И делается это примерно так

regsvr32.exe SomeCOMObjects.dll

Дальше можно вызывать CoCreateInstance, получать экземпляр объекта и работать с ним.

Однако, иногда возникает желание, пользовать объекты не регистрируя библиотеку, например, когда хочется получить portable версию программы. Один способ я описывал вот здесь. Но к сожалению на Vista этот вариант у меня не прошел или я просто не слишком активно пытался.

Второй вариант создавать объект, загружая соответствующую длл-ку при помощи функции LoadLibrary. Выглядит это следующим образом:

показать код

class CCOMDll
{
typedef HRESULT (__stdcall *DllGetClassObjectProc)(REFCLSID rclsid, REFIID riid, LPVOID * ppvObj);
public :
CCOMDll()
: m_sDLLFilePath(_T(""))
, m_hLib(NULL)
, m_pDllGetClassObjectProc(NULL)
, m_pDllCanUnloadNowProc(NULL)
{
}
virtual ~CCOMDll()
{
if (NULL!=m_hLib)
::FreeLibrary(m_hLib);
}
BOOL LoadLibrary(const CString &sDLLFilePath)
{
m_sDLLFilePath = sDLLFilePath;
m_hLib = ::LoadLibrary(m_sDLLFilePath);

m_pDllGetClassObjectProc = (DllGetClassObjectProc)::GetProcAddress(m_hLib, "DllGetClassObject");
return (NULL!=m_hLib);
}
BOOL IsValid() const
{
return (NULL!=m_hLib);
}
//
HRESULT CoCreateInstance(REFCLSID rclsid, REFIID riid, LPVOID* ppvObj)
{
*ppvObj = NULL;
if (NULL==m_pDllGetClassObjectProc)
return S_FALSE;

IClassFactory *pFactory = NULL;
HRESULT hr = (m_pDllGetClassObjectProc)(rclsid, IID_IClassFactory, (void**)&pFactory);
if (S_OK!=hr)
return hr;

hr = pFactory->CreateInstance(NULL, riid, ppvObj);
if (NULL!=pFactory)
pFactory->Release();
return hr;
}
protected :
CString m_sDLLFilePath;
HINSTANCE m_hLib;

DllGetClassObjectProc m_pDllGetClassObjectProc;
};



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

Про переезд

Наука доказала, что административное здание может достичь совершенства только к тому времени, когда учреждение приходит в упадок. Эта, казалось бы, нелепая мысль основана на исторических и археологических исследованиях. Опуская чисто профессиональные подробности, скажем, что главный метод заключается в следующем: ученые определяют дату постройки особенно удачных зданий, а потом исследуют и сопоставляют эти данные. Как выяснилось, совершенное устройство - симптом упадка. Пока работа кипит, всем не до того. Об идеальном расположении комнат начинают думать позже, когда главное сделано. Совершенство - это завершенность, а завершенность это смерть.

Сирил Н. Паркинсон. "Законы Паркинсона".



Контора, в которой я работаю, переехала в новое здание. Высокие потолки, большие окна, кондиционеры во всех комнатах (интересно они работают?), здоровые предбанники в туалетах (на взгляд, комната в которой из полезного два унитаза и две раковины, наверное, побольше той где в старом здании мы сидели в вчетвером, а иногда и в впятером), большая столовая (сегодня первый раз за последние полгода удалось прийти в столовую и там было свободное место). Чудесное, чудесное новое здание.

В целом, думаю, это реальный шаг конторы на встречу своей судьбе.

воскресенье, 19 октября 2008 г.

Про хостинг

Перетащил свой DjVu and PDF-ный сайт на новый хостинг. Предыдущий провайдер, который x5x.ru, оказался, мягко говоря, со странностями. Понятно, что сам виноват, в силу слабого понимания всех процессов выбрал не то, что надо, так еще и со знающими людями не посоветовался.

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

Ладно, пришлось обходиться awstat плюс добавил google analitycs, которая вполне себе ничего, хотя и не показывает скачки дистрибутивов (или просто я недоразобрался как это правильно сделать).

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

Последняя капля капнула в понедельник (как не странно 13-го). В половине девятого по Москве, сайт просто отключили, с радостным сообщением:

"Аккаунт ... заблокирован за создание нагрузки на сервер.
Скачивание stduviewer.exe производилось в десятки потоков."

Сказать, что я удивился это ничего не сказать. Да как раз в выходные обновились версии всех программ, соответственно обновились pad файлы и появилось сообщение в rss. Да, без вопросов, нагрузка возросла, народ пришел скачать новую версию фришной программы, но, во-первых, к девяти то вечера напор однозначно должен был спасть (ибо пока основная масса посетителей Россия + Украина, которые приходят с 8 утра до 9-10 вечера), во-вторых, ладно, сервер мегахостера не выдержал напор качающих полуторомегабайтный файл, но для чего же отключили почту и фтп? А отключили все целиком, хттп, почту, фтп, и контрольную панель сайта. На вопрос "отчего так?" Ответ был такой: "Блокируется весь аккаунт, а не что-то конкретное." Считаю правильная придумка.

В целом стало понятно, что нормальных технических специалистов у провайдера нет, потому что нормальные, и нагрузку бы разрегулировали, и отключали бы частями. Так же понятно, что и с бизнесом у граждан сильно так себе, ибо раз клиент жиреет его логично доить, а не посылать на хер. Хотя про последнее оставались сомнения. Может, думаю это такая фишка отключить, и самим более дорогой тариф не предлагать, а выморить клиента чуть-чуть, чтобы дошел. Задаю вопрос: "Вы можете перевести мой сайт на более дорогой тариф и разблокировать?" ответа не воспоследовало, пишут какую-то муть про "нагрузку на дисковую подсистему". Ну, они все время любили поделиться своими проблемами, то у них диск сгорел, то вот две с половиной тысячи посетителей за день создали большую нагрузку на дисковую систему.

Спрашиваю второй раз тоже самое - ответа опять нет. Может гражданам просто на фиг не упал весь этот бизнес, Может схема работы у них такая, хостить сайты из пяти страниц и тремя посетителями в месяц. Я недопонял. По бритве Оккама склоняюсь к варианту, что просто туповаты они для бизнеса (кому не рассказывал про данный случай, первый вопрос был "они дебилы?").

В конечном итоге со стороны "технической поддержки" поступило предложение

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

Вариант сам по себе отличный, а если учесть, что и фтп и контрольная панель у сайта отключены, то скрипты я по всей видимости должен был залить телепатически, ибо вариант с "записать на флешку и выдвинуться штурмовать датацентр в САСШ" я сразу отмел как не конструктивный.

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

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

пятница, 10 октября 2008 г.

Про Opera 9.6

Поставил новую Oper-у, наверное, что-то изменилось в лучщую стороны... но похоже скрипты в этом блоге лучше работать не стали, жаль.