Pull to refresh

Comments 42

Как у вас с совместимостью с Mono? Или вопрос неуместен?
Сложно сказать, ибо с Mono я не знаком. Если исключить класс WinInet, который вызывает функции WinAPI, то всё должно работать.
А чего именно в .net не хватило что понадобился WinAPI?
Да, в общем-то, ничего особенного. Возможность узнать, подключён ли компьютер к интернету и возможность получить прокси-сервер IE.

1. Можно попробовать самому подключиться к какому-нибудь ресурсу и узнать, есть ли подключение к интернету. Но я решил проще будет использовать именно WinAPI, да и это даёт побольше возможностей. Кто-то может предложить — NetworkInterface.GetIsNetworkAvailable, но это не то.

2. В старых версиях я получал прокси IE так:
WebRequest.DefaultWebProxy.GetProxy(new Uri("http://www.microsoft.com"))
// Далее пару проверок.


Мне этот способ не нравился и я использовал WinAPI, который, опять же, дал побольше возможностей.

Когда я выложу исходники, можно будет от этого избавиться, если есть предложения.
Хммм а почему бы вам не сделать отдельный репозиторий на гитхабе? К примеру я бы не стал использовать вашу библиотеку не посмотрев на реализацию того же HttpRequestа.
Посмотреть реализацию того или иного класса можно с помощью Reflector'а. А исходный код я могу потом выложить, если у кого-то будет желание его как-то развивать.
Я бы не рискнул использовать подобную библиотеку без исходников в настоящем проекте. Если обнаружатся баги (а они наверняка обнаружатся), то возникнет очень неприятная зависимость от создателя библиотеки. Да и сами баги легче обнаружить, имея исходники.

Поэтому, если вы действительно хотите поделиться своей библиотекой, то лучше выложить ее куда-нибудь (лучше на гитхаб или аналогичный сервис). Так и людям пользы будет и вы большую известность получите.
Понимаете, в чём проблема. Вам не достаточно будет посмотреть исходники. Как вы определите, правильно ли я реализовал работу с HTTP-протоколом? Или с Socks5-протоколом? Вам для начала нужно будет проникнутся их описанием. После уже нужно будет изучить сам код, понять, почему я сделал или не сделал так. Это затратит слишком много времени, а библиотека для того и предназначена, чтобы ты её скачал и использовал, прочитав документацию.
«Как вы определите, правильно ли я реализовал работу с HTTP-протоколом?»
Элементарно. Посмотреть на ваши модульные тесты.
А кто будет тестировать модульные тесты? Вдруг там неправильная проверка.
Я и не буду смотреть исходники, пока все будет работать как надо. А вот если что-то пойдет не так, то буду смотреть и отлаживать код.

Если не хотите отдавать библиотеку в open source, то так и скажите. Я понимаю, что у вас могут быть другие планы, в этом нет ничего плохого. Но только не надо убеждать, что никому, кроме автора, исходники не нужны.
Не знаю, насколько будет семантически правильно, но, может, стоит вместо ToText() использовать всем знакомый ToString()?
Чем ваша библиотека лучше System.Net.Http?
Я не работал с новой версией .NET, поэтому не могу объективно оценить, чем лучше/хуже. Первая версии библиотеки вышла ещё в начале 2011, когда этого не было.

У меня есть поддержка Socks. В основном классе больше различных настроек. В общем, это всё, что я могу на данный момент привести в сравнение.
Проблема в том, что анонсируете вы это сейчас, когда уже все есть. И зачем?
Мне вот клиентскую часть пары сервисов приходится держать совместимой с .NET 2.0. Для поддержки того же LINQ приходится таскать за собой библиотечку, куда включены реализации нужных мне классов из Mono.
Такая ситуация (у меня кое-где была схожая) не отменяет того факта, что автор библиотеки должен понимать, что с переходом на такою-то версии фреймворка его библиотека теряет смысл.
LINQ кстати тянется на раз из .net35-ого… работает вполне себе.
А либы из дотнета разве лицензия позволяет распространять без установщика?
UFO just landed and posted this here
>>С помощью него можно узнать, подключён ли компьютер к интернету или получить значение прокси-сервера Internet Explorer'а.
Это можно получить и без api, через WebRequest.GetSystemWebProxy() и CredentialCache.DefaultCredentials;

>>Классы для работы с многопоточностью: многопоточный обход коллекции, асинхронные события и другое.
Все это есть в стандартном C# 4

Поэтому я присоединяюсь к вопросу lair: зачем нужна ваша библиотека и чем она лучше стандартных средств?
>> Это можно получить и без api, через WebRequest.GetSystemWebProxy() и CredentialCache.DefaultCredentials;
Мой класс завязан именно на моей библиотеки. Да и там его можно получить в виде строки, или задать.

>> Все это есть в стандартном C# 4
У меня другой принцип работы и больше возможностей.

Можете посмотреть документацию, там всё описано. Тогда, надеюсь, станет понятней.
У меня другой принцип работы и больше возможностей.

Например? Для многопоточного обхода коллекций.
Мой класс не использует пул потоков. Так что, его можно использовать в длительных операциях и устанавливать большое количество потоков.

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

[ЗДЕСЬ] можно узнать подробней и в документации.
Мой класс не использует пул потоков.

В этом месте я хочу спросить три вещи.

Во-первых, знаете ли вы, что TPL позволяет использовать любой шедулер для задач, а не только на основе ThreadPool?
Во-вторых, что мешает использовать тредпул для длительных операций?
В-третьих, вы осознаете, какие накладные расходы возникают в вашей реализации? (если, конечно, вы не реализовали свой собственный пул потоков, а тогда в чем смысл)
Просто, насколько я знаю, ThreadPool используется другими классами для выполнения асинхронных операций. Да и он же предназначен для того, чтобы в нём можно было быстренько выполнить задачку и освободить поток. А если вам нужно выполнять несколько десятков длительных операций для, допустим, анализа данных, то будет нехорошо его забивать.

А что вы предлагаете? Как нужно его правильно реализовать? Или нужно его вообще удалить из библиотеки?
Просто, насколько я знаю, ThreadPool используется другими классами для выполнения асинхронных операций.

И что?

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

Из чего вы делаете такие выводы?

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

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

А что вы предлагаете? Как нужно его правильно реализовать? Или нужно его вообще удалить из библиотеки?

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

Я вам это говорю, помимо всего прочего, на основе собственного опыта, когда я сначала реализовал сложную многопоточную очередь для .net 3.5, а потом полностью ее выкинул в .net 4.
>>Можете посмотреть документацию, там всё описано. Тогда, надеюсь, станет понятней.
Адекватного описания я у вас не нашел на сайте.

>>Мой класс завязан именно на моей библиотеке. Да и там его можно получить в виде строки, или задать.
В этом я не сомневаюсь, но объясните, зачем мне использовать вашу библиотеку, если я могу это сделать и без нее, тем более без прямого вызова системного апи, что еще и требует повышенных привилегий для приложения?

Что касается >>У меня другой принцип работы и больше возможностей. — сомневаюсь я что вы умнее целого Майкрасофт, а тем более вы говорите что не работали с новыми версиями платформы — как же вам знать что там меньше возможностей? А если даже и вы круче всего штата мелкомягких — ох уж я сомневаюсь что вы бы тогда брала фриланс заказы от 1000 рублей (пруф с вашего сайта).

Поймите, такие библиотеки имеют право жить, да я верю что они действительно помогают вам лично при решении задач когда вы клепаете ваши программы, но они совершенно не нужны обществу, ибо тот кто хочет решать подобные задачи и знает как это делать скорее всего сделает свою такую небольшую библиотеку, а чаще просто класс, а кто не умеет-не знает как — погуглит и найдет хотя бы более популярную сборку. Типовые задачи, которые вы обвернули можно решить не более затратно, но менее рискованно стандартными средствами .Net, а тащить закрытую чужую вилами писанную библиотеку (а не откажитесь ли вы завтра-послезавтра от ее поддержки и развития? что я тогда буду делать дальше?).
>> В этом я не сомневаюсь, но объясните, зачем мне использовать вашу библиотеку, если я могу это сделать и без нее, тем более без прямого вызова системного апи, что еще и требует повышенных привилегий для приложения?

Я не знаю, зачем вообще использовать библиотеку только для получения прокси-сервера IE. Это просто дополнительный класс для моей библиотеки, который упростит жизнь её пользователю.

>> сомневаюсь я что вы умнее целого Майкрасофт

Да и я не говорю, что умней их хоть они и своровали у меня идеи для .NET 4.5. У меня другой класс, для других целей. Да, он запускает задачу в потоках, но у него есть и другое. С ним можно работать в оконном приложение. Может кому пригодится, может нет.
UFO just landed and posted this here
Библиотека распространяется абсолютно свободно.

>> И если можно, то, пожалуйста, сорц
Хорошо, в ближайшем будущем залью на гитхаб.
UFO just landed and posted this here
New BSD License
Copyright © 2012, X-rus
All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS «AS IS» AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Лично меня сразу напрягло обилие слов static и helper на диаграмме, а так же отсутствие интерфейсов. А вообще начинание хорошее, если отрефакторить и написать тесты.
P.S. Для общего развития (начиная с .Net 1.1): WebClient, HttpRequest, HttpResponse. Да и вообще System.Net Namespace.

Правда, рекомендую ознакомиться с более свежими версиями.

P.P.S. Научиться программировать можно только программируя. Я бы рассматривал эту библиотеку как старт лично для автора, но ни в коем случае как нечто, что могут использовать другие люди.
P.P.S. Научиться программировать можно только программируя. Я бы рассматривал эту библиотеку как старт лично для автора, но ни в коем случае как нечто, что могут использовать другие люди.

Золотые слова!
>> P.S. Для общего развития (начиная с .Net 1.1): WebClient, HttpRequest, HttpResponse. Да и вообще System.Net Namespace.

Спасибо, не знал о их существовании. Посмотрю на досуге.
Прошу прощения, не HttpRequest, HttpResponse, а HttpWebRequest, HttpWebResponse
Возможно ли интеграция с MVC платформой?
Моя сайт сделан на MVC платформе и там я использовал xNet (сетевую часть). Никаких проблем.
Хотелось бы видеть Вашу бибилиотеку в Nuget.
Sign up to leave a comment.

Articles