Pull to refresh
1
0
Send message

Хуки — это просто

Reading time7 min
Views134K


Хуки — это технология перехвата вызовов функций в чужих процессах. Хуки, как и любая достаточно мощная технология, могут быть использованы как в благих целях (снифферы, аудио\видеограбберы, расширения функционала закрытого ПО, логирование, багфиксинг) так и со злым умыслом (трояны, кряки, кейлоггеры). О хуках уже не раз писали и на Хабре и не на Хабре. Но вот в чём беда — почему-то каждая статья о хуках буквально со второго абзаца начинает рассказывать о «таблице виртуальных функций», «архитектуре памяти» и предлагает к изучению огромные блоки ассемблерного кода. Известно, что каждая формула в тексте снижает количество читателей вдвое, а уж такие вещи — так и вовсе вчетверо. Поэтому нужна статья, которая расскажет о хуках просто. Под катом нет ассемблера, нет сложных терминов и буквально два десятка строк очень простого кода на С++. Если вы давно хотели изучить хуки, но не знали с чего начать — начните с этой статьи.
Читать дальше →
Total votes 94: ↑84 and ↓10+74
Comments63

Специальность Software Engineering в Академическом Университете. Отзыв студента

Reading time4 min
Views17K
Тема высшего образования очень популярна на хабре. Есть много статей о том, как плохо у нас, и как хорошо за рубежом. Сегодня я бы хотел рассказать вам, как я искал высшее образование в России. И нашёл.
Читать дальше →
Total votes 65: ↑62 and ↓3+59
Comments82

Singleton (Одиночка) или статический класс?

Reading time6 min
Views194K
Статья будет полезна в первую очередь разработчикам, которые теряются на собеседованиях когда слышат вопрос «Назовите основные отличия синглтона от статического класса, и когда следует использовать один, а когда другой?». И безусловно будет полезна для тех разработчиков, которые при слове «паттерн» впадают в уныние или просят прекратить выражаться :)

Что такое статический класс?


Для начала вспомним что такое статический класс и для чего он нужен. В любом CLI-совместимом языке используется следующая парадигма инкапсуляции глобальных переменных: глобальных перменных нет. Все члены, в том числе и статические, могут быть объявлены только в рамках какого-либо класса, а сами классы могут (но не должны) быть сгруппированы в каком-либо пространстве имен. И если раньше приходилось иммитировать поведение статического класса с помощью закрытого конструктора, то в .NET Framework 2.0 была добавлена поддержка статических классов на уровне платформы. Основное отличие статического класса от обычного, нестатического, в том, что невозможно создать экземпляр этого класса с помощью оператора new. Статические классы по сути являются некой разновидностью простанства имен — только в отличие от последних предназначены для размещения статических переменных и методов а не типов.

Готовимся к собеседованию дальше?
Total votes 70: ↑58 and ↓12+46
Comments84

Паттерны ООП в метафорах

Reading time17 min
Views561K
Большинство литературы посвященной паттернам в ООП (объектно-ориентированном программировании), как правило, объясняются на примерах с самим кодом. И это правильный подход, так как паттерны ООП уже по-умолчанию предназначаются для людей, которые знают что такое программирование и суть ООП. Однако порой требуется заинтересовать этой темой людей, которые в этом совершенно ничего не понимают, например «не-программистов» или же просто начинающих «компьютерщиков». Именно с этой целью и был подготовлен данный материал, который призван объяснить человеку любого уровня знаний, что такое паттерн ООП и, возможно, привлечет в ряды программистов новых «адептов», ведь программирование это на самом деле очень интересно.
Статья предназначена исключительно для новичков, так что «старожилы» ничего нового для себя не узнают. В основном статья описывает известные паттерны из книги «Приемы объектно-ориентированного программирования. Шаблоны проектирования.», но более популярным и простым языком.
Читать дальше →
Total votes 214: ↑201 and ↓13+188
Comments86

Qt и SQLite и вообще, программирование БД в Qt

Reading time9 min
Views154K
Добрый день.

Ниже пойдет речь о том, как использовать SQLite в Qt. Автор постарался как можно подробнее рассматривать программирование баз данных в Qt.

Об этих двух замечательных продуктах можно прочитать следуя приведенным выше ссылкам, а мы будем конкретно рассматривать программирование БД в Qt, в частности, на примере SQLite. Скажу только, что SQLite несколько отличается от «обычных» баз данных, таких как MySQL тем, что «не обладает» клиент-серверной архитектурой. То есть движок БД не является отдельно работающим процессом, с которым взаимодействует программа. SQLite представляет собой библиотеку, с которой компонуется ваша программа и, таким образом, движок становится составной частью программы. То есть представьте вы решили сохранять все данные, с которыми «сталкивается» ваша программа в обычный файл. В один прекрасный день вы решаете сохранять данные в файле, но организовав это с «реляционной» точки зрения. После этого вы поняли, что новая структура файла должна «распознаваться особым образом». С этого, как минимум, следует, что вам нужно предоставить некоторый API, обеспечивающий связь между этим файлом данных с приложением. В общем, следуя логической постановке приведенного сценария у вас рождается система БД, не требующая сервера БД и собственно, клиента. Получается достаточно быстрая по сравнению с «клиент-серверной» БД система, и сама программа упрощается.
Почему я рассматриваю именно SQLite?
Total votes 48: ↑43 and ↓5+38
Comments57

MySQL Performance real life Tips and Tricks. Part 3-rd.

Reading time14 min
Views23K
Решил продолжить цикл заметок по данной тематике. В данной статье особое место хотел уделить профайлингу MySQL запросов. Описать средства, которые предоставляются MySQL для профайлинга, и что нужно делать для определения узких мест запроса.

Также, после опубликования первых двух статей я получил пару отзывов и вопросов, связанных с проектированием БД / расстановкой индексов / составлением запросов. На многие вопросы старался отвечать. С некоторыми из них поделюсь и в этой статье.

Читать дальше →
Total votes 56: ↑54 and ↓2+52
Comments40

MySQL Performance real life Tips and Tricks. To be continued.

Reading time6 min
Views8K
По заявкам трудящихся решил написать еще одну статью, посвященную оптимизации запросов в MySQL.

В прошлой статье habrahabr.ru/blogs/mysql/38907 рассматривались вопросы оптимизации LIMIT, GROUP BY, COUNT.

В данной статье я немного вернусь к вышеописанному и опишу пару примеров, с которыми столкнулся на проекте недавно, после этого приведу еще пару небольших примеров относительно того что такое хорошо и что такое плохо в MySQL.
Читать дальше →
Total votes 84: ↑80 and ↓4+76
Comments65

MySQL Performance real life Tips and Tricks

Reading time9 min
Views37K
Пообещал вчера написать статью о реальных случаях оптимизации БД MySQL.
Пришлось сегодня вставать утром пораньше чтобы воплотить обещанное в жизнь.
Централизованное управление мыслями поддерживать еще сложно, поэтому не судите строго за казусы и ляпсусы в моей статье.

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

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

Читать дальше →
Total votes 143: ↑139 and ↓4+135
Comments93

Библиотека Qwt: как построить график функции на плоскости?

Reading time8 min
Views38K
Скриншот простейшей программы, демонстрирующей использование виджетов Qwt
Уже пять лет я не пишу приложения с GUI, потому предложение зав. кафедрой подготовить для его лекции программу, строящую некие графики, поначалу меня несколько расстроило.

Как настоящий программист я решил найти самый легкий (и полезный для саморазвития) путь.
А именно, это задание оказалось хорошим поводом для того, чтобы познакомиться с Qt и библиотекой Qwt. Заодно я узнал, что приложения с GUI, оказываются, могут быть кроссплатформенными, а их код не менее элегантным, чем у приложений с «интерфейсом в стиле Unix™».

Итак, Qwt — библиотека виджетов для программирования приложений, имеющих техническую направленность. Она содержит набор виджетов, представляющих собой всевозможные слайдеры и дисковые «номеронабиратели», виджеты для построение гистограмм. Но здесь я расскажу, как Qwt применить для построения самых обычных двумерных графиков функций вида y = f(x).

Дальше в данной заметке
  • приводится ссылка на исходный код моего простейшего примера (+ исполняемые файлы) и инструкция по его компиляции;
  • рассказывается, как же в этом примере всё устроено;
  • для новичков описывается компиляция и установка Qwt.

Читать дальше →
Total votes 51: ↑41 and ↓10+31
Comments41

Уводим чужие cookies c mail.ru

Reading time4 min
Views95K
Не так давно прочитал на Хабре пост, в котором предлагалось посетить бесплатное мероприятие, посвященное вопросам информационной безопасности. Так как мероприятие проходило в моем городе, я решил, что мне нужно непременно туда сходить. Первое занятие было посвящено уязвимостям на сайтах типа XSS. После занятия я решил, что нужно закрепить полученные знания в реальных условиях. Выбрал для себя несколько сайтов, которые относятся к моему городу и начал во все формы пытаться воткнуть свой скрипт. В большинстве случаев скрипт отфильтровывался. Но бывало так, что «алерт» и срабатывал, и появлялось мое сообщение. О найденной уязвимости сообщал администраторам, и они быстро все исправляли.

В один из таких дней проверяя свежую почту на mail.ru мне на глаза попалась форма для поиска писем в почтовом ящике. Изредка я пользовался этим поиском, чтобы найти что-то нужное в куче своих старых писем. Ну, а так как я в последние пару дней вставлял свой «алерт» практически везде куда только можно было, рука рефлекторно потянулась к этой форме поиска. Набрал код своего скрипта и нажал Enter. Каково же было мое удивление, когда на экране я увидел до боли знакомое сообщение…

image

Читать дальше →
Total votes 276: ↑261 and ↓15+246
Comments80

Полевые транзисторы. For dummies

Reading time8 min
Views592K

Введение


А теперь давайте поговорим о полевых транзисторах. Что можно предположить уже по одному их названию? Во-первых, поскольку они транзисторы, то с их помощью можно как-то управлять выходным током. Во-вторых, у них предполагается наличие трех контактов. И в-третьих, в основе их работы лежит p-n переход. Что нам на это скажут официальные источники?
Полевыми транзисторами называют активные полупроводниковые приборы, обычно с тремя выводами, в которых выходным током управляют с помощью электрического поля. (electrono.ru)

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

Еще один факт о полевых транзисторах можно узнать, обратив внимание на их другое название — униполярные. Это значит, что в процессе протекания тока у них участвует только один вид носителей заряда (или электроны, или дырки).

Три контакта полевых транзисторов называются исток (источник носителей тока), затвор (управляющий электрод) и сток (электрод, куда стекают носители). Структура кажется простой и очень похожей на устройство биполярного транзистора. Но реализовать ее можно как минимум двумя способами. Поэтому различают полевые транзисторы с управляющим p-n переходом и с изолированным затвором.

Вообще, идея последних появилась еще в 20-х годах XX века, задолго до изобретения биполярных транзисторов. Но уровень технологии позволили реализовать ее лишь в 1960 году. В 50-х же был сначала теоретически описан, а затем получил воплощение полевой транзистор с управляющим p-n переходом. И, как и их биполярные «собратья», полевые транзисторы до сих пор играют в электронике огромную роль.

Перед тем, как перейти к рассказу о физике работы униполярных транзисторов, хочу напомнить ссылки, по которым можно освежить свои знания о p-n переходе: раз и два.
Читать дальше →
Total votes 44: ↑40 and ↓4+36
Comments25

Делаем приватный монитор из старого LCD монитора

Reading time2 min
Views972K


Вы наконец-то можете сделать кое-что со своим старым LCD монитором, который завалялся у Вас в гараже. Превратите его в шпионский монитор! Для всех вокруг он будет выглядеть просто белым экраном, но не для Вас, потому что у Вас будут специальные «волшебные» очки.

Всё что Вам нужно – это пара старых очков, нож для бумаги и растворитель для краски.

Читать дальше →
Total votes 1486: ↑1468 and ↓18+1450
Comments327

Биполярные транзисторы. For dummies

Reading time10 min
Views948K

Предисловие


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

Транзистор, как и диод, основан на явлении p-n перехода. Желающие могут освежить в памяти физику протекающих в нем процессов здесь или здесь.

Необходимые пояснения даны, переходим к сути.
Читать дальше →
Total votes 76: ↑73 and ↓3+70
Comments26

Qt+OpenGL — Основы. Часть 1

Reading time5 min
Views125K
Данная cтатья вводная, рассчитана на знакомство с Qt+OpenGL для новичков, которые планируют изучать Qt (как кросс-платформенный инструментарий разработки ПО на языке программирования C++) + OpenGL (как графическую библиотеку).

Что потребуется новичку:
1) Qt Creator (имеет хорошую встроенную документацию и подсказки во время набора кода). Скчаать
2) doc.qt.nokia.com — официальная документация на английском языке
3) doc.crossplatform.ru — документация на русском языке
4) Обязательно прочесть про Qt и OpenGL
5) Отличная статья для начала изучения

Что мы будем делать
Поскольку данная статья посвящена конкретно основам, в нашей задаче будет следующее:
1) Разобрать как создается приложение
2) Как рисовать объекты
3) Как работать с указателем мыши и событиями(нажатие клавиш на клавиатуре и на мышке)
4) Работа с таймером
5) Создадим нашу первую банальную игру. Будем с помощью таймера, случайным образом перемещать квадрат. После наведения на квадрат указателя и кликнув по нему левой кнопки мышки, в случае попадания по квадрату, будем прибавлять к полученным очкам +1.

Этапы построения
Total votes 59: ↑47 and ↓12+35
Comments51

Диоды. For dummies

Reading time8 min
Views168K

Введение


Диод — двухэлектродный электронный прибор, обладает различной проводимостью в зависимости от направления электрического тока. Электрод диода, подключённый к положительному полюсу источника тока, когда диод открыт (то есть имеет маленькое сопротивление), называют анодом, подключённый к отрицательному полюсу — катодом. (wikipedia)

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

В основе полупроводникового диода лежит такая известная штука, как p-n переход. Думаю, что большинству читателей о нем рассказывали на уроках физики в школе, а кому-то более подробно еще и в институте. Однако, на всякий случай приведу общий принцип его работы.
Читать дальше →
Total votes 124: ↑122 and ↓2+120
Comments42

История интернет-магазина, ставшего мировым монополистом за $5 000

Reading time10 min
Views85K
Прочитав много литературы по истории бизнеса и наблюдая рост популярности Интернет-торговли, автору этих строк хотелось реализовать свои знания на практике. Искали подходящую тему для проекта. Необходимыми условиями были:

1) Вложение не более $10 000
2) Прибыль не менее $1 000 в месяц
3) Минимальная рутина

По первым двум пунктам все понятно. А вот по третьему пункту поясню. К тому моменту я уже работал в собственной компании (сфера финансов). Это был 2009 год. Последствия кризиса еще сильно влияли на основной бизнес и работы было непочатый край. Много времени отвлекать на сторонний бизнес автор не мог.
Подходящий случай подвернулся в октябре 2009 года.
Читать дальше →
Total votes 646: ↑641 and ↓5+636
Comments189

Полупроводниковые приборы — диод

Reading time3 min
Views82K
полупроводниковые приборы

Введение

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

Читать дальше →
Total votes 136: ↑109 and ↓27+82
Comments47

Генерация псевдослучайных чисел

Reading time5 min
Views134K
Довольно часто программисты в своей работе встречаются с необходимостью работать со случайными числами. Чаще всего случайные числа требуются в задачах моделирования, численного анализа и тестирования, но существует и множество других весьма специфических задач.
Конечно, во всех современных языках программирования есть функция random или её аналоги. Эти функции чаще всего дают действительно хорошие псевдослучайные числа, но мне всегда было интересно, как эти функции работают.
В этом топике я постараюсь объяснить, как работает линейный конгруэнтный метод (который чаще всего используется в функции random), и метод получения случайных чисел с помощью полиномиального счётчика (который часто используется для тестирования аппаратуры).
Читать дальше →
Total votes 39: ↑34 and ↓5+29
Comments36

Перегрузка операторов в C++

Reading time6 min
Views767K
Доброго времени суток!

Желание написать данную статью появилось после прочтения поста Перегрузка C++ операторов, потому что в нём не были раскрыты многие важные темы.

Самое главное, что необходимо помнить — перегрузка операторов, это всего лишь более удобный способ вызова функций, поэтому не стоит увлекаться перегрузкой операторов. Использовать её следует только тогда, когда это упростит написание кода. Но, не настолько, чтобы это затрудняло чтение. Ведь, как известно, код читается намного чаще, чем пишется. И не забывайте, что вам никогда не дадут перегрузить операторы в тандеме со встроенными типами, возможность перегрузки есть только для пользовательских типов/классов.
Читать дальше →
Total votes 48: ↑34 and ↓14+20
Comments42
12 ...
8

Information

Rating
Does not participate
Location
Украина
Date of birth
Registered
Activity