Все потоки
Поиск
Написать публикацию
Обновить
-2.1

Delphi *

Объектно-ориентированный язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

Отключение главной нити приложения от отладчика и уход от перехвата CreateFile()

Время на прочтение10 мин
Количество просмотров13K
Один из стандартных приемов, осложняющим изучение вашего приложения, являеться эмуляция выполнения API функций.
Читать дальше →

Аналог FreeAndNil с проверкой типа

Время на прочтение2 мин
Количество просмотров6.2K
Для борьбы с проблемой «висячих» ссылок на освобожденные объекты в Delphi обычно используется процедура SysUtils.FreeAndNil. Процедура FreeAndNil освобождает объект и устанавливает переменную в nil.
Но мне всегда не нравилось то, что в этой процедуре не типизированный параметр. И туда можно передать не только объект, но и строку, число и любую переменную. Естественно при вызове с таким некорректным параметром будут проблемы. Что самое неприятное проблемы могут вылезти совсем в другом месте.
Мне хотелось бы чтобы компилятор меня контролировал, желательно на этапе компиляции. Но увы найти решение при котором компилятор ругался на попытку вызвать процедуру освобождающую и обнуляющую, с параметром не совместимым с TObject мне не удалось. Зато я нашел метод при котором такая попытка обнаруживалась на этапе выполнения при первом вызове. В общем, лучше один раз увидеть. Вот код более безопасного аналога FreeAndNil.
Читать дальше →

Первая игра, которую я просто написал для себя

Время на прочтение11 мин
Количество просмотров75K
Пост ностальгии по игрушкам, которые мы сами для себя писали в детстве.
Лазая по просторам App Store ища очередную игрушку для своего айпада, наткнулся на старинную игрушку “Братья Пилоты”. Сразу купил, поставил и прошёл на одном дыхании (уже наверное в 3 раз). Но более всего задержался на эпизоде с холодильником. Уж больно меня прёт эта головоломка.



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

Подняв старые бекапы я нашёл исходную игру. Запустил её в dosbox и пропал для внешнего мира на пару часов.
Читать дальше →

Разговор с Бьерном Страуструпом, создателем C++

Время на прочтение1 мин
Количество просмотров13K
Запись в переводе на русский язык выступления Бьерна Страуструпа на оналайн-конференции Embarcadero 10 декабря 2012 г.

Расставляем точки над i в Delphi RAII

Время на прочтение5 мин
Количество просмотров19K
Тема RAII в Delphi обычно замалчивается или же информация по этому вопросу ограничивается обсуждением полезности интерфейсов. Но интерфейсы поодиночке не дают многих желаемых возможностей. Когда в Delphi 2006 появилась перегрузка операций, приватные поля записей, собственные конструкторы и методы в записях и, казалось, было бы логично увидеть и автоматически вызываемый деструктор. И run-time позволяет, и в разделе запроса новых фич Delphi на протяжении нескольких лет в ТОП–10 висит запрос №21729 «Record Operator Overloading: Please implement «Initialize» and «Finalize» operators». Наверное, не судьба. Ничего, я покажу, как обойтись без несостоявшихся фич. Так как Delphi 7 живее всех живых, будут рассмотрены решения, совместимые с Delphi 7 в том числе

Времени найти обходные пути было достаточно

JAVA библиотека padeg — новогодний подарок хабру

Время на прочтение4 мин
Количество просмотров26K
Да-да, это та самая библиотека padeg.dll, но работающая везде где есть java. Авторы Sergey V. Plahov aka Seer and Gennady Pokatashkin
Собственно, история простая. Началась она в 2007 году, когда мне срочно понадобилось склонять ФИО и должности для одного корпоративного проекта. В принципе, данный функционал не стоял в требованиях заказчика, но нужны были «плюшки», и автоматические склонения — это как раз одна из плюшек.
Довольно быстро удалось связаться с одним из авторов библиотеки, и после перечисления небольшой суммы были получены исходники на Delphi, которые затем портировались в JAVA. По первоначальной задумке java и delphi исходники должны были максимально совпадать, чтобы впоследствии можно было вносить параллельные правки. Делалось так: брались исходники на delphi, менялись расширения pas→java, и добавлялись в проект. Дальше шла правка синтаксиса. Но фактически delphi — код пришлось сильно рефакторизовать, поскольку он состоял в основном из многоэтажных if-ов и внутренних процедур, содержал глобальные переменные и не был приспособлен для многопоточной работы.
Как бы там ни было, библиотека портирована. На вопрос о копирайте мне было разрешено делать с результатом что угодно, но поскольку delphi-библиотека распространялась на условиях shareware, я не стал публиковать java-порт.
С тех пор прошло 5 лет, и я думаю, хватит одному пользоваться инструментом, которой найдется применение в хозяйстве отечественного java — разработчика. К тому же праздник на носу. Поэтому загружайте
Читать дальше →

Интервью с CYBERMANIAC

Время на прочтение38 мин
Количество просмотров30K
Если вы знаете, и помните человека под ником CYBERMANIAC, для вас этот разговор будет похож на внезапное обнаружение половины студенческой зарплаты во внутреннем кармане старой куртки. Для тех кто никогда не слышал о Станиславе, я думаю будет тоже интересно почитать о небольшой, но уникальной искре времени начал интернета в далеком от столиц городов России глазами CYBERMANIAC'а. Он мне показался неизменным с 00 годов да и настолько изолированным, что очень уж захотел написать о нем.

Мы осторожно поговорим о жизни программиста в глубинке, о языках программирования с момента появления их в России: Forth, Borland Pascal, Delphi ,C#, MegaBasic, Java, SQL, C++. о япоском языке, о змеях, о национальных напитках, о Сократе, о советских объективах, о звездах, человеческих страхах.

CYBERMANIAC носит в себе большой опыт в крекинге, написании утилит, автор Neo Sign 0f Misery, древней электронной книги “Теоретические основы крекинга”, а так же автор многим любимого windows scanner и большого фотолюбителя-звездочета. Интервью получилось многим больше, чем я рассчитывал. Но надеюсь, для вас будут звучать колокольчиками похожие мысли. Именно их мы и слушаем, когда читаем…
Читать дальше →

Красивые disabled иконки «малой кровью»

Время на прочтение4 мин
Количество просмотров13K
Delphi давно славится тем, что disabled иконки по умолчанию выглядят как-то так:



А хотелось бы, чтоб они выглядели вот как-то так:



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

Создавать такой список изображений мы будем в специальной функции CreateSpecialImageList(). В качестве аргумента нам понадобится список с оригинальными иконками, а в качестве возвращаемого значения уже будет нужный нам TImageList. Тогда подключить наши новые иконки мы сможем при создании формы следующей строчкой кода:

ActionManager.DisabledImages := CreateSpecialImageList(ImageList);

Но я думаю, мы должны пойти глубже...

Доступ к переменным Thread local storage (TLS) любого треда

Время на прочтение5 мин
Количество просмотров11K
Данная статья иллюстрирует, как получить доступ к переменным из блока Thread Local Storage в Delphi. Однако принципы нахождения «чужого» блока TLS одинаковы для всех компиляторов Windows и применимы для любых языков программирования, поддерживающих TLS в том виде, как это определяет Windows.

В Delphi, в отличии от глобальных переменных, переменные, объявленные в блоке threadvar, создаются для каждого потока (thread) с возможностью хранить независимые значения. Каждый поток читает и записывает свою копию значений.
Но иногда необходимо прочесть или даже изменить переменные, соответствующие другому треду.
Конечно, лучше изменить алгоритм, чтобы избежать такой необходимости, но решение этой задачи есть.
Все блоки данных (Thread local storage, TLS) находятся в памяти одновременно, но по разным адресам, каждый тред хранит указатель на свою область памяти, поэтому есть возможность найти блок переменных и конкретное значение, принадлежащее любому треду, созданному в пределах текущего процесса.
Читать дальше →

Бесконечные генераторы значений на Delphi + Ассемблер

Время на прочтение12 мин
Количество просмотров8.3K
В функциональных языках программирования есть возможность генерировать бесконечные последовательности значений (как правило чисел) и оперировать этими последовательностями. Реализуется это функцией, которая, не прерывая свою работу, генерирует значения одно за другим на основе своего внутреннего состояния.
Но, к сожалению, в обычных языках нет возможности «вернуть» значения в место вызова не выходя из функции. Один вызов — один результат.
Генераторы удобно было бы использовать совместно с возможностью Delphi по перечислению значений (GetEnumerator/MoveNext/GetCurrent). В этой статье мы создадим функцию-генератор (может даже бесконечную) и будем использовать ее с таким объектом для перечисления, чтобы всё работало прозрачно без необходимости вникать в реализацию.
Читать дальше →

Windows 8 Summit глазами программиста Delphi

Время на прочтение1 мин
Количество просмотров5.5K
Я посетил Windows 8 Summit 23 октября в Москве.
Предварительное текстовое описание Windows 8 с позиции прикладного разработчика содержал объективный анализ. Здесь, конечно, будет представлен взгляд через призму пропагандистской активности сотрудников Microsoft.

Metropolis или Windows 8 глазами программистов Delphi

Время на прочтение7 мин
Количество просмотров14K

Что есть истина?


Истина – первая страница выдачи поисковика по запросу. Компания может изо всех своих маркетинговых сил тужиться и пыжиться, пытаясь «продать» технологию широким массам трудящихся, но первые 10 ссылок (+ Википедия) есть механизм взвешивания конкретного решения. Но пока о решениях говорить рано, им должны предшествовать впечатления. Вооружившись подобранными с пола линками, поговорим о «дизайне интерфейса Windows 8».

Эй, а почему так однобоко? Почему только интерфейс? Прикладная разработка, прежде всего, основывается на программировании в компонентах. Большим заблуждением является мнение, что мы используем язык программирования. Конечно же, нет. Мы применяем компонентный язык ручной генерации требуемого функционала с различной степенью вариативности относительно предопределенных шаблонов построения системы. Наши пользователи привыкли рассуждать в терминах интерфейсной функциональности типа «Петрович, дорогой, добавь мне кнопку, при нажатии на которую должно появляться окошко, в котором я увижу договора, контрагенты которых потеряли совесть…».

Корпорация Microsoft долгое (очень долгое) время баловала разработчиков тщательно культивируемой стабильностью интерфейса (похоже, дизайнерам отрубали руки). Но с массовым появлением планшетов культяшки пришли в движение, а миру (почти) явилась новая Windows. Эстетически дремлющие толпы Delphi -разработчиков встрепенулись с различной долей интенсивности. Что это за новая ОС, куда девали кнопку «Пуск», можно ли использовать Delphi для разработки под Windows 8? Казалось бы, что вопросы чисто риторические, но они требуют некого пояснения.

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

Простая модель планировщика ОС

Время на прочтение8 мин
Количество просмотров41K
Не так давно пытался найти здесь какую-нибудь информацию о планировщике Windows и к своему удивлению не нашёл ничего конкретного о планировщиках вообще, поэтому решил запостить вот этот пример планировщика, надеюсь кому-то он окажется полезен. Код написан на Turbo Pascal со вставками ассемблера 8086.

Что собственно планирует планировщик?

Планировщик — часть операционной системы, которая отвечает за (псевдо)параллельное выполнения задач, потоков, процессов. Планировщик выделяет потокам процессорное время, память, стек и прочие ресурсы. Планировщик может принудительно забирать управление у потока (например по таймеру или при появлении потока с большим приоритетом), либо просто ожидать пока поток сам явно(вызовом некой системной процедуры) или неявно(по завершении) отдаст управление планировщику.
Первый вариант работы планировщика называется реальным или вытесняющим(preemptive), второй, соответственно, не вытесняющим (non-preemptive).
Читать дальше →

Ближайшие события

Embarcadero: нас не интересуют мелкие разработчики (по итогам «мирового турне»)

Время на прочтение2 мин
Количество просмотров53K
С 1995-го года я программирую на Делфи, всегда всячески пропагандировал Делфи, в общем — ярый сторонник Делфи. Но, посетив «Мировое турне Ebarcadero» я пришел к выводу, что всем программистам нужно переучиваться с Делфи на Си. Потому, что Делфи — это все таки тупиковый путь. Много лет мне пытались доказать это противники Делфи. А удалось доказать людям, которые Делфи продвигают в массы.

Прежде всего: компания Ebarcadero не любит мелких разработчиков.
Читать дальше →

Автообновление программы через MSSQL server

Время на прочтение4 мин
Количество просмотров4.3K
Дабы не бегать по своей работе к каждому человеку который использует мою программу разумно сделать автообновление, которое будет обновлять программу, если загрузить новую версию на сервер. Испробовав множество способов, нашел самый простой в использовании (хотя и не самый правильный)
Итак алгоритм:
  1. Программа при включении проверяет на сервере последнюю версию.
  2. Если на сервере выше текушей то скачиваем Zip-архив c программой.
  3. Переименовываем файл приложения на другое (ради бэкапа и доступности к файлу), например с program.exe на program.backup.
  4. Распаковываем архив заменяя файлы в папке.
  5. Удаляем архив с обновлением.
  6. Перезапускам программу.

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

Моя «парадигма» работы с потоками

Время на прочтение6 мин
Количество просмотров46K
Когда я учился писать многопоточные приложения — я перечитал кучу литературы и справочной информации по этой области. Но между теорией и практикой — огромная пропасть. Я набил кучу шишек, и до сих пор иногда получаю по голове от собственных потоков. Для себя я выработал набор некоторых правил, которым стараюсь строго следовать, и это значительно помогает мне в написании многопоточного кода.

Поскольку ошибки, связанные с синхронизацией потоков крайне сложно отлаживать, то самым эффективным способом тут является предупреждение этих самых ошибок. Для этого используются различные парадигмы программирования на разных уровнях абстракции. Нижним уровнем абстракции будем считать работу с объектами синхронизации (критические секции, мьютексы, семафоры). Верхним — такие парадигмы программирования, как Futures and promises, STM (software transactional memory), обмен асинхронными сообщениями и т.п. Верхний уровень абстракции зачастую всегда основан на нижнем.

В данной статье я поделюсь своим стилем написания кода на нижнем уровне абстракции. Поскольку я дельфист, то все примеры будут на Delphi, однако все нижесказанное справедливо и для других языков программирования (позволяющих работать с объектами синхронизации конечно)
Читать дальше →

Обновление VirtualTreeView 5.01

Время на прочтение1 мин
Количество просмотров15K
VirtualTreeViewVirtualTreeView — это замечательный бесплатный компонент для вывода деревьев, списков и таблиц.
Компонент позволяет настраивать вывод данных практически как угодно — вы ограничены только задачей и фантазией.

Разработчики MySQL Query Browser for Windows,The Bat!, Smart Inspect и многих других продуктов используют его.
Компонент отличается высокой скоростью работы с узлами и широкими возможностями по настройке оформления, поддерживает Unicode.

Обновление 5.01 вышло 3 дня назад, теперь VirtualTreeView поддерживает:
  • Delphi XE3
  • C++ Builder XE2!

Полный список изменений смотрите под катом.
Читать дальше →

Lazarus как он есть

Время на прочтение3 мин
Количество просмотров31K
Довольно часто наше нежелание разбираться в вопросе и уверенность в собственной логике рождает неверные предположения. Эти предположения, высказанные как утверждения на публичной площадке, могут прочно осесть в чужих головах и сформировать ложные отрицательные представления.

Так в комментариях к недавней теме «Lazarus 1.0 увидел свет!» были высказаны некоторые неверные утверждения, а также задан ряд вопросов оставшихся без ответов. Являясь разработчиком Lazarus и FPC уже довольно продолжительное время, я могу и хочу дать ответ на большинство связанных с этими продуктами вопросов и развеять некоторые неверные предположения.

Утверждение: Размер исполняемых файлов оставляет желать лучшего. Виноват компилятор, компоновщик и др.
Читать дальше →

Куда стоило бы развиваться Delphi вместо того, куда оно развивается сейчас

Время на прочтение3 мин
Количество просмотров33K


Вот что нам, разработчикам, действительно нужно? Я тут как раз сегодня задумался — накидал несколько букв, сначала комментом, а потом решил, что оно на пост тянет:

Во-первых, меня ужасно раздражает, что всю разработку под винды уже который раз пытаются пересадить подальше уровнем от железа. Побольше толстых прокладок напихать между прикладным софтом и процессором, между пригладным софтом и ОС. ИМХО, ближе к native коду нужно стремиться, ближе к железу, ближе к ОС! К любому железу, к любой ОС. Нужно развивать Object Pascal как альтернативу C++, отличающуюся развитыми средствами ООП, синтаксическим сахаром, за который мы Паскаль любим, мощным IDE и родным быстрым однопроходным компилятором.

Кроме того, нужны развитые возможности интеграции со сторонними библиотеками. Этого, по сравнению с C, очень не хватает. Вокруг множество библиотек, всякие интерпретаторы чего только не умеют, а для Delphi библиотеки нынче фиг найдёшь, и в итоге с известным трудом сам делаешь. А потом переделываешь при обновлении API. Для этого — генераторы тонких обёрток нужны. У Лазаруса есть поделка под названием h2pas, но её ж развивать нужно, а то и интегрировать! Занялись бы они, а?.. А ещё лучше — попробовать осмыслить и сделать прозрачное использование в одном проекте модулей на разных языках — в частности, прямое подключение h-файлов библиотек. Уверен, что линкер можно сделать так, что бы он с этим справлялся.
Читать дальше →

Как завести свой Web-сервис скриншотов — версия 1.1

Время на прочтение1 мин
Количество просмотров7.5K
В конце прошлого года мне для целей поддержки пользователей Windows-программ потребовалось организовать Web-сервис скриншотов с клиентской программой, позволяющей выделять для размещения нужный прямоугольный фрагмент экрана. Сторонние сервисы вроде Gyazo удовлетворять перестали ввиду чрезмерного объёма рекламы и невозможности своими силами контролировать мероприятия по обеспечению надёжности вроде резервного копирования, поэтому были написаны свои сервис скриншотов и клиентская программа.
Читать дальше →

Вклад авторов