Pull to refresh

Comments 57

if Task.Status = tsReady then // Ожидание закачки
            Item.ImageIndex := 0;         
          if Task.Status = tsQueue then // В очереди
            Item.ImageIndex := 1;         
          if Task.Status = tsError then // Ошибка завершена
            Item.ImageIndex := 2;         
          if Task.Status = tsErroring then // Ошибка не завершена
            Item.ImageIndex := 2;        
          if Task.Status = tsLoading then  // Закачка
            Item.ImageIndex := 3;         
          if Task.Status = tsStoping then // Остановка
            Item.ImageIndex := 4;         
          if Task.Status = tsStoped then // Пауза
            Item.ImageIndex := 5;         
          if Task.Status = tsLoad then // Закачено
            Item.ImageIndex := 6;         
          if Task.Status = tsGetUrl then // Получение ссылки
            Item.ImageIndex := 7;         
          if Task.Status = tsProcessing then // Поиск
            Item.ImageIndex := 8;         
          if Task.Status = tsSeeding then // Раздача
            Item.ImageIndex := 9;         
          if Task.Status = tsBittorrentMagnetDiscovery then // Обработка магнет
            Item.ImageIndex := 10;         
          if (Task.Status = tsDelete) or (Task.Status = tsDeleted) then // Удален
            Item.ImageIndex := 11;


я не знаком с делфи, но там конструкции switch разве нет?
Тем более что там явно же enum нужно отобразить в число, а еще точнее, в ID картинки. Поскольку мы полностю контроллируем и именование/нумерацию наших картинок, и enum, думаю легко можно было бы весь этот код превратить в одну строчку преобразования из одного в другое.
Вместо switch имеется Case. Суть статьи не в написании идеального кода на Delphi, а показать возможности Delphi в создании программ на подобии торрент-клиента.
Простите, вы действительно считаете, что оператор управления используется только в идеальном коде?
Может всё таки по теме обсуждение вести?
Ранее были сомнения на этот счёт. Ещё одно подтверждение возможности не будет лишним )
Эта статья является продолжением серии статей, написанной Игорем Антоновым ещё в 2007-2008 г. Он сам попросил написать новую статью. Если почитаете эту серию, то поймёте, что после прочтения может сложиться впечатление, что на delphi писать клиент сложнее чем на других яп. Многие дельфисты, да и не только дельфисты до сих пор наталкиваются на старые статьи и как вы думаете, у них не будет возникать сомнений по поводу Delphi?
У вашей логики две проблемы: первая — сложнее != невозможно. Даже «сложнее» вызывает сомнения (не уж то делфи настолько не приспособлен к работе с сетью и файловой системой?).
Второе — вы ничего данным примером не показали. Кто знает, как внутри эта библиотека устроена кроме вас? Может там часть написана на другом языке, а на делфи только обертка?
upd. Что-то сначала не увидел исходников, только dll. Вторая проблема снимается.

Какое-то ненаучное доказательство несуществующей проблемы.
У вашей логики две проблемы: первая — сложнее != невозможно. Даже «сложнее» вызывает сомнения (не уж то делфи настолько не приспособлен к работе с сетью и файловой системой?).
Второе — вы ничего данным примером не показали. Кто знает, как внутри эта библиотека устроена кроме вас? Может там часть написана на другом языке, а на делфи только обертка?

Какое-то ненаучное доказательство несуществующей проблемы.


Благодарю за критику. Согласен, что не всё гладко, но не согласен, что нет доказательства. Исходный код, как и бинарники приложены.
Ок. Я нашел эти статьи (статьи выходили в журнале Хакер — уже дурной признак):
iantonov.me/page/programmiruem-torrent-klient-na-delphi
iantonov.me/page/programmiruem-torrent-klient-na-sdelphis-c

Процитирую отрывок из первой
Уже не первый раз убеждаешься в том, что все нервные крики в сторону Delphi – это просто бред и комплексы фанатов С++ (данная фраза проверена этическим комитетом; выдана справка о том, что провокационной она не является, будучи написанной автором в состоянии аффекта – Прим. ред). На Delphi можно написать практически любую программу, будь то компактная хакерская тулза или продвинутая программа для работы с БД.

И второй:
Для первой части статьи я писал пример на моем любимом Delphi, но сегодня мне предстоит ему изменить и воспользоваться великим и могучим C#. Многие Delphi-ненавистники возрадуются и громко закричат: «Неужели на Delphi нельзя создать полноценный клиент?». Вовсе нет, на Delphi можно написать практически любое приложение и торрент-клиент – не исключение, но есть одно но. Как ты понимаешь, протокол BitTorrent – это не хухры-мухры и просто так реализовать его в приложении не удастся. В настоящее время для дельфина не существует ни одной нормальной библиотеки/модуля для упрощения взаимодействия с этим протоколом. Все те библиотеки, которые мне попадались на глаза, морально устарели и требовали переписывания до 60% кода.

Из этого сделать вывод, что «на делфи невозможно написать торрент-клиент» может сделать только «программист», руководствующийся принципом «это невозможно сделать, если для этого не написано готового компонента/библиотеки».

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

PS. И да, обзор архитектуры и особенностей библиотеки для торрента, писанной на Delphi был бы намного интересней, чем статья про лепления гуйни к готовой уже библиотеки. Уж что лепка гуйни на делфи возможна, думаю, знают даже делфисты.
Не думал что делфисты, в массе своей, имеют настолько низкую квалификацию. Что они настолько не знают инструмент которым пользуются, и его возможности, что могут из подобных вот статеек сделать такие вот выводы.

Начинающие программисты (не только дельфисты) вполне могут.

PS. И да, обзор архитектуры и особенностей библиотеки для торрента, писанной на Delphi был бы намного интересней, чем статья про лепления гуйни к готовой уже библиотеки. Уж что лепка гуйни на делфи возможна, думаю, знают даже делфисты.

В следующей статье вопрос архитектуры постараюсь раскрыть.
Начинающие программисты будут скорее читать хабр, или rsdn сегодняшний, нежели статьи в Хакере которые выходили 7 лет назад.
Статьи не только в хакере, а также на VR и на сайте Игоря.
Кстати, если статья рассчитана на начинающих программистов, то код в статье должен быть вылизан идеально.

Таким же кодом как в статье (ComboBox1, вот этот вот унылый if и прчее) вы прививаете начинающему делфипрограммеру дурные манеры. Вы ему как бы говорите — смотри, парень, так прокатывает даже в статье! Так что к тебе то спросу и вовсе не будет! Так писать — норма!

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

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

Таким образом, статья в нынешнем виде является антирекламой делфи.
Кроме того, у библиотеки BTService имеются возможности написания торрент-клиента и на других ЯП. Если кому интересно, то читайте про систему плагинов Александра Алексеева, (ссылка на блок Александра имеется в статье).
Эм. Нет, суть статьи «смотрите, я нашел библиотеку для делфи, с помощью которой можно скачивать торренты, зацените».

Я думаю, тут все догадываются, что качалку торрента можно написать даже на бреинфаке, если сильно постараться (хотя я удивлен, что еще никто не постарался или я, по крайней мере, не нашел).

Вообще по стилю кода — все ужасно. Просто ужасно. Последний раз я описывал бизнес-логику в хандлере кнопки на первом курсе, наверное.
Библиотека писалась мною. Это не реклама, бизнесменам — проходите мимо… или самостоятельно пилите…
Мне кажется, что гораздо интереснее было бы здесь привести участки кода библиотеки, как соединяетесь с пирами и прочее. Как подключить библиотеку, думаю, понять не очень сложно.

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

Кроме того, у библиотеки BTService имеются возможности написания торрент-клиента и на других ЯП.

Есть такое ощущение, что это свойство dll, не зависить от языка, на котором его подключают.

Начав разбираться в исходниках Ares Galaxy, выяснил, что многие операции выполняются в одном потоке, что в результате кратковременно останавливает процесс закачки всех торрентов в списке. Потому я решил исправить недостатки и вынес процедуры, которые замедляют выполнение кода, в отдельные потоки.

Вы уж определитесь, писалась она вами или же только правилась? Я ни в коем случае не сомневаюсь в ваших способностях, может в делфи заведено не пользоваться switch-case, но как-то сложно поверить в высокое качество библиотеки после увиденного в ваших примерах, уж простите.
Мне кажется, что гораздо интереснее было бы здесь привести участки кода библиотеки, как соединяетесь с пирами и прочее. Как подключить библиотеку, думаю, понять не очень сложно.

Учту при написании следующей статьи.
Есть такое ощущение, что это свойство dll, не зависить от языка, на котором его подключают.

Не так. Если использовать не тот тип данных при обмене м/у ядром и библиотекой, то получится моноязычная библиотека.
Вы уж определитесь, писалась она вами или же только правилась? Я ни в коем случае не сомневаюсь в ваших способностях, может в делфи заведено не пользоваться switch-case, но как-то сложно поверить в высокое качество библиотеки после увиденного в ваших примерах, уж простите.

Мною писался плагин на основе исходников Ares Galaxy, который пришлось корректировать в силу его недостатков. А точнее зависание основного потока, который останавливает работу всех торрентов списка.
Целые игры Age of wonders были написаны на Делфи, с чего вдруг торрент клиент стал непосильной задачей?
Считаю критику обоснованной. Код подправил
Только нужно учесть, что эта либа распространяется под GPL v2 или выше так как оригинальный код Ares Galaxy был под GPL 2. Следовательно и, например, клиент описанный в данной статье, также будет под GPL, равно как и любая другая программа которая будет использовать эту либу.

PS. Кстати, автору неплохо бы указать лицензию на sf.net явным образом.
PS. Кстати, автору неплохо бы указать лицензию на sf.net явным образом.

Спасибо, что заметили. Указал.
UFO just landed and posted this here
Из реально не решённых проблем современности в торрентостроении можно отметить одну весьма актуальную:
есть папка с .torrent файлами и папка с файлами (и подпапками) скачанными, и нужно чтобы торрент клиент сам мог сохрать торрент файлы а потом найти, прочекать и подхватить все файлы из помойки на диске.
Проблема клиента на дельфи и как он работает с комбобоксом не интересуют современное человечество :)

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

Это вообще было известно сразу после появления делфи — там же есть полный (или почти полный) биндинг к WinAPI. В том числе и к сети. А если вдруг биндинга нужного нет, то всегда можно сделать — биндинги к сишному добру там делаются элементарно (как и в куче других ЯП).

В каком месте тут можно было усомниться в возможности на делфи написать торрент-качалку, не ясно.
Вот лучше бы библиотеку BTService описали: Как протокол PEX работает, как DHT запустить.
Ну почему в каждой статье про Delphi я вижу что-то типа «ComboBox1»? (вопрос риторический)
              try
                try
                  BTCreateTorrent.StopCreateTorrentThread(Id); // остановка создания торрент-файла
                except
                end;
              finally
                LeaveCriticalSection(TorrentSection);
              end;

Это что за конструкция?
Автор понимает, как работает try / finally / except?

Автор не понимает даже банальных конструкций языка, отмахиваясь благой целью показать «возможности делфи». Вас десятиэтажные ифы, в которых даже else нет никак не заставили задуматься, а только обработка исключений? :) Хрен с ним, с case'ом, но где else хотя бы?
А тут все просто. Подразумевается, что если AV вывалится в BTCreateTorrent.StopCreateTorrentThread(Id), то дальнейший участок кода(в данном случае секция finally..end и все, что после finally..end) пройдет без проблем. Если ж выдать просто:
try
  BTCreateTorrent.StopCreateTorrentThread(Id); // остановка создания торрент-файла
finally
  LeaveCriticalSection(TorrentSection);
end;

то при AV в BTCreateTorrent.StopCreateTorrentThread(Id), оно выполнит секцию finally..end и вывалится из метода, ЕМНИП
Хотя с другой стороны, можно было нашлепать просто:
try
  BTCreateTorrent.StopCreateTorrentThread(Id); // остановка создания торрент-файла
except
end;

LeaveCriticalSection(TorrentSection);


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

Статья хорошо подходит, чтобы отбить любое желание писать на, в общем-то, неплохом инструменте.
Это «корован» последовательных ифов, а не вложенных
От этого не легче. Обидно все же за язык.
Это ещё хуже, т.к. все условия проверятся.
а мужики-то и не знали =)
Вы ошиблись по Фрейду или по грамматике?
Я не ошибался.
Последовательность одинаковых вещей обычно назавается «кАрАван».

А вот кОрОван наверное как то связан с коровами. Но я не знаю как.
lurkmore.to/%D0%9A%D0%BE%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D1%8B
спасибо за ссылку. Обычно на такие сайты не хватает времени, что бы быть всегда в тренде.
Так ведь слово даже в кавычки взяли.
Это должно было навести на мысль, что «корован»-то не обычный ;)
Замечательно, просто замечательно. Но! Еще остались отдельные несознательные граждане, которые не верят, что на Дельфи можно написать: браузер с поддержкой последних стандартов, поисковик, АвтоКАД, Фотошоп, Скайп и т.д. и т.п. Надеемся, что вы не остановитесь на достигнутом, продолжите свое доказательство, и поэтому с нетерпением ждем следующих статей и реализаций. ;)
Вроде как в Скайпе UI как раз написан на Делфи.
Сколько времени развивается проект Skype, и сколько времени он принадлежит Microsoft-у? Думаете они сразу возьмут и всё перепишут, ну скажем, на C#? :)
уже не использует давно
где-то я такое вычитал. Хотя по SpyXX названия классов по-прежнему делфинские — TChatBanner, TDivider и т д.
UFO just landed and posted this here
Sign up to leave a comment.

Articles