Админам (IMPORTANT)
Чуть ниже данного поста всегда находится рекламный блок. Сейчас нет времени заниматься Web-дизайном, но (IMHO) как только появится изображение в img - рекламный блок должен отобразиться. Чтобы не наблюдать здоровый белый прямоугольник в стилях я изменил:
- width: 1px;
- height: 1px;
- background-color: #000000;
- border-color: #000000;
- text-align: left !important;
Сцылы
Н.Тесла(патенты)
Подсветка синтаксиса.
Русский RFC2068 (описание HTTP протокола)
О чем расскажет браузер
ID-шники различных браузеров. Как дополнение к тяжелой артилерии может неслабо помочь их определить.
ФИГ ВАМ!
Иногда есть чего почитать
Начало
Утро (в пол-второго дня) не предвещало ничего плохого. Кофе, сигареты, отсутствие головной боли после "вчерашнего", выход на финишную прямую перед стартапом одного проекта... Угу. Захожу в тырнет... нету тырнета. Ладна. В общем Фринет меня не успел огорчить к этому времени. На качество не жалуюсь, связь пропадала пару раз, но на короткое время что в условиях нашей необъятной родины большое достижение. Ну ок. Есть у них такая функция... "кредит доверия". Т.е. закончился у тебя тырнет - да пожалуйста. Нажимай кнопу и 3 дня у тебя есть чтобы соизволить подорвать задницу и пополнить. Да. Я так думал. Оказываецо эта услуга ПЛАТНАЯ. т.е. воспользовавшись один раз, нужно ее заново активировать за какой-то там количество единиц капусты. Ладна. У меня же есть утел ! Хех. Подключил модем... получил ответ "лаве закончилось, адыхай братан". Ха ! "Не для того я купил карточку пополнения чтобы адыхать" сказал братан и гордо стер защитное покрытие.
Облом
"И как же тебя пополнить ?", теряя уверенность спросил я. А вот хрен. В мануале черным-по-белому написано что нужно позвонить на номер... . Ок. Фринет запрещает доступ к иностранному сегменту, но родной ua - то работает ! Дадада. От сайтов в зоне ua меня раздирают противоречивые чувства. С одной стороны представляя такой сайт бросает в дрожь и хочецо блевать, с другой - операторы мобильной связи же в этой зоне, а мне нужно две факин-строчки из FAQ на тему "как пополнить тырнет через модем/смс" !!! Значит заххооодим на сайт укртелекома.... заахххооодимм... уже 5 минут прошло.... сходил покурить... не заходит. Хм. вот везде с...ка заходит а туда - нет. Выбираем мтс. Захоооодим... та же картина. Хех :) Чтобы обезумевший юзер нечайно не сменил себе провайдера было принято решение ОТРУБИТЬ к чертовой матери сайты других провайдеров, но тихонько так.... не писать что он недоступен, или нет доступа... просто сделать так чтобы туда никто нихрена не зашел :) Весело блять ! :)
Хакерские секреты простых вещей (да простят меня провайдеры)
1. Что значит "иметь доступ к компьютеру, который подключен к интернет ?" А ? Кто сказал незнаю ? Выйди вон из класса !!! Это значит что вы тоже имеете доступ к интернет, только не знаете как им пользоваться :) Вобщем конкретно с Фринетом все ООЧЕНЬ просто. Надеюсь этим постом я не спалю такую штуку как "http://anonim.com.ua/", ибо удобно и без гемора. В общем в украинском сегменте вам нужен проксик/анонимайзер. Вбиваем в эти слова в гугле, курим маны, учимся юзать... Все :) Не знаю как быстро вас пропалят, но какое-то время вы вполне можете использовать иностранный сегмент. Ок. Юзаю anonom.com.ua, захожу на сайт утела.... Грхм. Ну FAQ нормального не нашел. Все те же инструкции где нужно позвонить. С чего я по вашему позвоню ??? Блять. Обращаемся в тех-поддержку онлайн. Хрен. Куча адресов, из которых 2 не сработало, больше я не пробовал. Ок. Щамыих !!!
2. Что значит иметь usb модем ? Это значит что уж позвонить на какой-то там номер вы вполне в состоянии. Клиент созрел, будем оперировать (под Windows 7). Ищем на каком порту повис наш модем. Открываем "диспетчер устройств":
- Правой кнопой на моем компьютере->Свойства
- Открывается окошко в котором с левой стороны ищем Диспетчер устройств и нажимаем на нем. Должно вылезти окно с диспетчером устройств.
- Мы же помним как этот модем называется ? Переходим к категории "Порты (COM и LPT)" и ищем модем. Рядом с названием в круглых скобочках будет замечена надпись COMцифра. Вот эта надпись собссно и нужна
Ок. Порт мы нашли... и чо ? Нужно как-то с ним общаться. Для этого вполне подойдет гипертерминал, однако насколько я знаю в 7-ке его выпиляли злобные Мелкомягкие (черти бы их драли ! хотя... есле бы не их ошибки, что бы мы кушали ? :)) Вот отсюда можно спереть триал-версию сего чуда. Инсталлим, соглашаемся со всем, запускаем.... грхм. Тому гаду который писал это безобразие неплохо бы пересадить руки обратно в плечи... хотя... лучше его просто пристрелить. Будет время и желание (хех... может быть :) ) зафигачу свой и сюда брошу ссылку... но пожжже... . Ок. На вопросы типа хотим ли мы ЭТО зарегистрировать и еще и заплатить ? Ну... кому-как, я думаю отвечаем нет. 30 дней хватит :). Угу. Закрываем весь бред который сваливается на голову с подачи бухих разработчиков лишь-бы главное окно стало выглядеть чисто и девственно (при этом, есле появляется окно где нужно выбрать место проживания... какие-то номера телефонов поступаем просто: пишем всякий бред, лишь-бы отвязались). Фу. Окно запущено. Поциент вскрыт. Отключаем управляющую программу модема, чтобы не занимала порт. Выбираем file->Newconnection. В поле Name вводим "как вы все заибали". В поле Connect using: выбираем тот ком-порт который мы с таким трудом достали в диспетчере устройств. Давим кнопку Configure и и в поле "скорость (бит/с)" ставим 115200 и нажимаем Ок в обоих окнах. Хм. Можно вводить команды. Охххх. Незнаю как у кого, но у меня нихрена не видно этих самых команд, поэтому я набирал вслепую. Вобщем делаем так: в ноутпаде или где-бы то ни было вводим, выделяем и копируем в буфер обмена: AT. Переходим в терминал, нажимаем правой кнопкой и выбираем Paste to Host (ctrl+V) в этой поделке у меня нихрена не срабатывает. После этого нажимаем ентер. Может быть много раз. Если все хорошо вы должны получить крайне информативное сообщение такого содержания "ОК". Ну и теперь главное: команды которые можно выполнить (добавил только две, кому нужно - дальше сам найдет):
- Проверить счет: AT+CUSD=1,"*121#",15
- Пополнить счет: AT+CUSD=1,"*111*07184533873759#",15
*121# и *111*07184533873759# будут отличаться для разных операторов, но ведь смысл вы уловили ? :)
Блять... афтару респект. Сам читал "новые" учебники. Подташнивало настолько, что асилил страниц 100 в сумме...
Вчера, моя б...цкая натура решило погулять. Угу. Слово "погулять" прочно ассоциируется со смертельными дозами спиртного, приставанию к рекордным количествам ОЖП, причем почему-то послан не оказался (насколько помню) но ТАКОЙ ХЕРНИ ИМ НАЛЕЧИЛ !!!! О_о ! Собсно щас сидим - ржем :)
Угу. Еще коврик для крысы взял... за 80 отечественных. Ну заманался я наматывать одеяло на сумку из-под ноута чтобы по нему крысой возить. Охуенный такой коврик. У него только одна проблема... КРЫСА СОВСЕМ НЕ РЕАГИРУЕТ КОГДА ПО НЕМУ ВОДИШЬ ! Ну... НУ СОВСЕМ ",kznm" НЕ РЕАГИРУЕТ ! Это копец :(И еще ждет МорталКомбат с парой мужей, ибо процесс приставания к самкам того требует. Бл*.... Вот низя мне пить :) Лошадиные дозы решительности, похуизма и откровенной бухой тупости делают свое дело... ААААА ! Спасите ! Помогите ! Хехехе :)
Ога. Работа... Работа, это сцуко круто. Только не тогда, когда на нее забиваешь !!! Все что должен сделать - распределил по "фрилансерам" т.е. нашел людей, которые это сделают а сам сижу и тупо страдаю херней. Блин. Еще один совет себе-же... НИКОГДА НЕ ЗАНИМАЙСУ ДЕЛАМИ, КОГДА СМЕРТЕЛЬНО ПЬЯН !!!! Хм. Щас перечитал... выглядит вышесказанное круто если не учесть подсчет финансов. Просто оказалось что мне после такого распределения едва хватает на пиво/похавать_и.т.д....
Типа фабула: ЙА - ТАЛПАЙОП :) Странно, но меня это не огорчает :)1) копируешь procexp.exe и procexp64.exe(просто делаешь копию оригинала с именем procexp64.exe) в одну папку
2) запускаешь procexp.exe и устанавливаешь Правильную Галочку (replace task manager)
3) Наслаждаешься, собссна :)
Кстате применительно к моей темной личности даже процентаж похож оказался :) :
# Иудаизм: 44%
# Буддизм: 40%
# Агностицизм: 100%
Вы - агностик. Агностики не верят в бога (богов), но при этом не отрицают, что бог или боги существуют. Многие считают агностицизм одной из веток атеизма, хотя не все агностики любят, когда их называют атеистами. Вполне очевидно, что не все атеисты являются агностиками (в частности, агностиками не являются так называемые "позитивные атеисты", которые утверждают, что бога не существует). Агностики полагают, что существование или несуществование бога не может быть доказано.
# Атеизм: 57%
# Христианство: 36%
# Сатанизм: 71%
# Ислам: 53%
# Язычество: 54%
# Индуизм: 41%
# Пастафарианство: 33%
О повалки дуба
(До сих пор улыбает пост IceCrashLdr на васме :))"SomeMan" стоит возле дуба с палкой отпавшой от этого дуба или от друго(уточнения нет). Обходя круг, зацикленно проговаривает: Как же тебя ударить что бы ты сволился ... Через промежуток времени последовало не сколько горизонтальных ударов, но дум стоит, и не шатается. Переведя дух, "SomeMan" продолжел махать палкой. На звуки, сбежались несколько селян. "SomeMan" - продолжал бить палкой. Селяни начали переговариватся между собой. Наверное дуб сволить нельзя. Дажет "SomeMan" не может сволить дуб. Дуб сволить нельзя. SomeMan отчаенно продолжал бить, после чего удары начали затихать ... Черный Экран. Белая надпись "Человек не может сволить .. "
В общем и писать-то нечего.
Уже не помню сколько лет пользуюсь разработкой Руссиновича, и теперь один вид бортового taskmgr переводит мою темную личность в режим неконтролируемой ярости. Собственно на свежезакупленный ноут с предустановленной 7-кой (сам бы в жизни ее не поставил...) был залит Process Explorer, и привычным жестом (Options->Replace Task Manager) установлен по умолчанию. И все бы хорошо... но радостно нажимая Ctrl+Esc я получил абсолютный игнор со стороны Винды (ну хоть бы матюкнулась чтоле...). Собственно выплеснув гнев в форме грязных ругательств в адрес окружающей действительности занялся поиском солюшна. Все как всегда просто :)
Собссна фиксим
Заходим в regedit -> HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Wi
- Музыка:Ленинград
Нужно как-то начать... :)
Собцтвенно появилась необходимость из COM-сервера передавать массив структур в C#. "В лоб" решить не удалось. После нескольких часов поиска в гугле (да-да, я с COM не очень дружу собцтвенно как и с C#) было найдено решение, которое я и выкладываю.1. Объявляем структуру в idl файле
- [uuid(8DD089EB-418B-41a6-803A-2A26313B4EB7)]
- struct USERSLIST
- {
- int ObjectID;
- BSTR Description;
2. Реализация функции GetUsersList
- STDMETHODIMP CMyInterface::GetUsersList(SAFEARRAY **UsersList)
- {
- GUID GUID_USERSLIST = __uuidof(USERSLIST);
- IRecordInfo *pInfo;
- HRESULT hr = GetRecordInfoFromGuids(LIBID_VPluginLib, 1, 0, 0,
- GUID_USERSLIST, &pInfo);
- // Устанавливаем размер будущего массива
- *UsersList = SafeArrayCreateVectorEx(VT_RECORD, 0, 4, pInfo);
- pInfo->Release();
- USERSLIST *pTS = NULL;
- // Устанавливаем pTS на переданный UsersList и заполняем
- hr = SafeArrayAccessData(*UsersList, (PVOID*)&pTS);
- pTS[0].Description = SysAllocString(L"Test1");
- pTS[0].ObjectID = 1;
- pTS[1].Description = SysAllocString(L"Test2");
- pTS[1].ObjectID = 2;
- pTS[2].Description = SysAllocString(L"Test3");
- pTS[2].ObjectID = 3;
- pTS[3].Description = SysAllocString(L"Test4");
- pTS[3].ObjectID = 4;
- // Все :)
- SafeArrayUnaccessData(*UsersList);
- return S_OK;
3. Пользуемся из C#
(предварительно использовал Add reference чтобы использовать свой интерфейс)
VPluginLib.USERSLIST[] arr;
arr = (VPluginLib.USERSLIST[])vk.GetUsersList();
string OutStr = "";
foreach (VPluginLib.USERSLIST Current in arr)
OutStr += Current.ObjectID + ") " + Current.Description + "\n";
MessageBox.Show(OutStr);Syhi-подсветка кода
Флуд :)
Много лет идет непримиримая война между сторонниками и противниками .NET. В последнее время кодеры самостоятельными исследованиями занимаются крайне редко, а проверкой существующих гипотез и подавно. Кто-то верит в одну гипотезу, кто-то в другую, а кто-то видел как на форуме вязальщиц-мотористок один дядька сказал что все они глупые, потому что Язык Всех Языков - VisualBasic. При встрече на просторах Сети противоборствующие группировки объединяются по религиозным признакам и поливают друг-друга грязью до тех пор, пока злобный модератор не прикроет тред или не перебанит половину участников. Обычно, спор носит ЧистаСпортивный характер. Ну что-то вроде "А !!! Йес !!! Пацаны мы их уделали !!!". Да... холивар страшная штука :) Потрепаться-то конечно интересно, но когда доходит до дела, возникают вопросы: "Я вроди так же писал на Си, а на шарпе - тормозит дико ?", "Раньше мой любимый Toad загружался раньше чем я второй раз крысой по иконке нажму, а теперь я успеваю попить кофе, сбегать за пивом и стать отцом 3-х детей(и мужем троих самок из разных частей города). А в перерывах между зависаниями и вылетами я бьюсь головой об стенку. Почему ?".
Сначала я хочу воткнуть свои 5 копеек и попытаться со стороны (на самом деле я тоже в религиозной группировке, токо тс-с-с :) ) посмотреть на предмет, и задать вопросы не особо пытаясь разобраться в тонкостях программирования вообще.
- Откуда у .NET столько противников ? Нет, я понимаю что Мелкомягких не все готовы на руках носить, но все-же !
- Неужели все хотят изгадить перспективную технологию просто так ? Всему есть причина... может не все так безоблачно как рисует любимая и заботливая корпорация ?
- Грхм. Очень странный вопрос, но на него ответ я знаю: "Почему мне
хочется нелюбить .NET (и собственно я нет-нет да иногда отстаиваю
религиозные убеждения по этому поводу) ?
-
Все очень просто
1) у меня было немало именно .NET'овских приложений (сказать "все" не могу, вот с VisualStudio, например, все нормально) которые дико тормозили и вылетали, чем естественно вызывали негодование.
2) Несколько попыток написания программ на C# оказались неудачными. Тут уж склоня голову вполне могу признать криворукость, но насколько мне казалось в момент написания... никакого особо "тяжкого" преступления я не совершал.
3) Писями по воде виляно, но тот факт что процессор СиШарпов не знает означает что все-равно выполняется машинный код, а значит приложение может быть написано эффективнее, т.к. не нужно никакое постороннее вмешательство.
Ближе к телу.
Грхм... К чему это я...
А ! Ну да ! Это безобразие нужно проверить ! Собцтвенно вооружившись банкой пива, чипсами и IDE начнем...
Значит сегодня, уж не помню во сколько здесь была найдена ссылка:http://blogs.msdn.com/b/ricom/archive/2005/05/10/416151.aspx. Коротко говоря меня удивила такая табличка:
| Version | Execution Time (seconds) |
| Unmanaged v1 | 1.328 |
| Unmanaged v2 | 0.828 |
| Unmanaged v3 | 0.343 |
| Unmanaged v4 | 0.187 |
| Unmanaged v5 With Bug | 0.296 |
| Unmanaged v5 Corrected | 0.124 |
| Unoptimized Managed port of v1 | 0.124 |
| Optimized Managed port of v1 | 0.093 |
| Unmanaged v6 | 0.062 |
Больше всего поразила разница между Unmanaged v1 и Unoptimized Managed port of v1. "Неужели он настолько лучше ?". Хм. Может быть я плохо смотрел, исходника Unmanaged v1 я не увидел, но такая разница в скорости повергла меня в шок. Целый день занимаясь делами думал "а не перейти-ли на С# под юзермодом ?". Хм. Все-таки решил проверить... Код оказался так-себе, и что меня всегда поражает когда смотришь на подобные тесты, так это то что он как обычно набит циклами. Есть у меня одно подозрение, что это сильно увеличивает скорость в C#, но его подтвердить/опровергнуть пока не могу.
В общем решил не перебирать, а переписать(точнее подогнать) это безобразие под C++ так, чтобы сделать минимум изменений (если самому заняться оптимизацией того что есть, то... ээээ... что с чем сравнивать ? Скилы кодеров ?)
Консольное приложение (С#)
Program.cs
using System; using System.IO; using System.Text; using System.Collections; namespace KillThemAllManaged { class Program { [System.Runtime.InteropServices.DllImport("Kernel32.dll")] private static extern bool QueryPerformanceCounter(out long lpPerformanceCount); [System.Runtime.InteropServices.DllImport("Kernel32.dll")] private static extern bool QueryPerformanceFrequency(out long lpFrequency); public static long StartTime, EndTime, Freq; static void Main(string[] args) { QueryPerformanceFrequency(out Freq); QueryPerformanceCounter(out StartTime); Dictionary dict = new Dictionary(); QueryPerformanceCounter(out EndTime); Console.WriteLine("Length: {0}", dict.Length()); Console.WriteLine("Frequency: {0:n0}", Freq); Console.WriteLine("Time: {0:n5}s", (EndTime - StartTime)/(double)Freq); } class DictionaryEntry { private string trad; private string pinyin; public string english; static public DictionaryEntry ParseBuffer(char[] line, int ibIn, int ibMax, out int ibOut) { DictionaryEntry de = new DictionaryEntry(); int state = 0; char chTrans = ' '; int start = ibIn; int end = 0; int i; for (i = ibIn; line[i] != '\n'; i++) { if (line[i] != chTrans) continue; switch (state) { case 0://Китайское грамото de.trad = new String(line, start, i - start); state = 1; chTrans = '['; break; case 1: start = i + 1; chTrans = ']'; state = 2; break; case 2: // Записать "транскрипцию" и искать перевод de.pinyin = new String(line, start, i - start); chTrans = '/'; state = 3; break; case 3: // Перевод собссна start = i + 1; state = 4; break; case 4: end = i; state = 5; break; case 5: // Где заканчивается перевод... end = i; break; } } ibOut = i; if (state == 5) { de.english = new String(line, start, end - start); return de; } return null; } } class Dictionary { ArrayList dict; public Dictionary() { StreamReader src = new StreamReader("cedict.b5", System.Text.Encoding.GetEncoding(950)); DictionaryEntry de; dict = new ArrayList(); char[] buffer = new char[40960]; int cb = src.Read(buffer, 0, buffer.Length); while (cb != 0) { int ibLastNewLine = cb - 1; // Если в буфере нет Enter'а и ibLastNewLine > 0 (проверка "завершенности" последней строки) ) while (buffer[ibLastNewLine] != '\n' && ibLastNewLine > 0) ibLastNewLine--; if (ibLastNewLine == 0) return; int ib = 0; // Считает символы while (ib < ibLastNewLine) { // Решетка - знак комментария в факин-файле if (buffer[ib] == '#') { while (buffer[ib] != '\n') ib++; } else { int ibOut; // Превращаем строку в запись словаря de = DictionaryEntry.ParseBuffer(buffer, ib, ibLastNewLine, out ibOut); ib = ibOut; // И добавляем запись (если, конечно, есть чего добавить) if (de != null) dict.Add(de); } ib++; } int ibCopy = ibLastNewLine + 1; // Все счастливы... часть файла обработали беремся за следующую ib = 0; while (ibCopy < cb) buffer[ib++] = buffer[ibCopy++]; int cbNew = src.Read(buffer, ib, buffer.Length - ib); cb = ib + cbNew; } } public int Length() { return dict.Count; } } } }
Ссылка на "словарь" для теста:http://www.mdbg.net/chindict/export/cedict/cedict_1_0_t_big5_mdbg.zip
Post too large. Как мило :)
Комментарии
А ютуб тоже ?
+1 к стимулу. Сегодня все-таки поставлю :)