Russian Qt Forum

Программирование => Общий => Тема начата: Igors от Ноябрь 21, 2014, 16:26



Название: Изобретение велосипедов
Отправлено: Igors от Ноябрь 21, 2014, 16:26
Добрый день

Навеяно этим
Ну так посмотрите на реализацию в boost'е.. Boost всёже далеко не глупыми людьми разрабатывался.. И вообще, считаю, что нужно стремиться к этой философии заложенной там (в boost'е).. Во всяком случае, мне приходилось писать под себя нечто, аналогичное (что есть в boost'е),  лишь в очень-очень специфических задачах и то это па пальцам пересчитать..
Мораль в итоге такова:
Прежде чем изобретать свой велосипед (как рекомендуют тут асы 80 уровня) посмотрите на то, как это реализовано у тех, кто реально заслуживает авторитета  и уже потом, если в чём то объективно не согласны, создавайте своё, бессмертное)
Всё же, повторюсь,  boost далеко  не дураки писали..

Посмотрите как там, а потом уже делайте выводы) Надо оно вам али нет..)
Эта "парадигма" часто мелькает тут и там. Про "объективно не согласны" это автор из вежливости, сам он будет согласен с бустом во всем и всегда (что, на мой взгляд, плохо).  Вместо буста может быть нечто другое, напр крутой паттерн(ы), но суть то же самая: написание своего кода - это очень, очень плохо, программист ОБЯЗАН пользоваться готовыми решениями. Словом "велосипед" - это позор.

Я тоже хочу "воспользоваться готовым",  но почему-то редко получается. Вот задача (http://www.prog.org.ru/index.php?topic=27869.msg202936#msg202936) которой я занимаюсь сейчас. Мои действия были:

- полез в буст, да, там прекрасная polygons (немногое чем я оттуда пользовался), но она 2D
- в CGAL то же самое - только 2D
- накачал 3D-boolean open-sources. Есть хорошие, напр "cork". Правда там все на лямбдах, ну ничего. И есть зависимость от др либы "mpir" с которой связываться совсем не хотелось бы. Тут типовая проблема: задачи "похожи", но есть и существенная разница. Не вдаваясь в тех детали, после 2-3 дней изучения исходников и сомнений пришел к выводу - работы с их переделкой под свои нужды никак не меньше.

И вот, в очередной раз, - велосипед. Что впрочем мое нормальное состояние и никакой трагедии в этом не вижу :)  Что я делаю не так? Недостаточно упорно искал? Нужно было продолжать гуглить! Но сколько? Неделю? Две? (а время-то идет). И почему оно "должно найтись"?

Почему др так лихо только и делают что "пользуют готовое" (ну судя по их словам), а у меня так выходит редко?  :)

Спасибо


Название: Re: Изобретение велосипедов
Отправлено: Old от Ноябрь 21, 2014, 16:53
Словом "велосипед" - это позор.
В очередной раз не увидел, где m_ax говорит, что свой велосипед это позор. Покажите пожалуйста. :)

Вот я вижу, что он предлагает посмотреть, как уже люди делали.
Понимаете, сделать машину состояний это занятие на несколько минут. Самое важное и интересное, это придумать концепт, как диаграмму состояний удобно описать на C++, что бы все было понятно и легко расширяемо.
Если вы посмотрите, как сделано в предлагаемых библиотеках, то обнаружите, что описание диаграмм сильно отличаются. Где то удобней одно, где-то другое. Человеку предлагалось ознакомиться с опытом других и сделать так как ему будет удобно.


Название: Re: Изобретение велосипедов
Отправлено: Akon от Ноябрь 21, 2014, 21:33
Имхо, если вы пишете софт, с которым (хотя бы даже в перспектве) будут работать другие программисты, то велосипеды - это последнее дело, потому что это наименее стандартные решения. В отраслях промышленности, связанных с конструированием, есть такие понятия, как коэф. стандартизации и унификации. К софту это относится в полной мере. В общем случае, промышленный код, изобилующий велосипедами, - показатель непрофессионализма разработчиков. Даже если свелосипедить вам быстрее, чем изучить готовое решение (имеющее определенную степень распространенности, т.е. стандартности), то это все равно создаст проблемы другим разработчикам, которые будут работать с вашим кодом.

Конечно, если мыслить не с высоты всего жизненного цикла проекта, а с уровня отдельного разработчика в контексте его конкретных текущих задач, тогда - другое дело.

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


Название: Re: Изобретение велосипедов
Отправлено: Bepec от Ноябрь 21, 2014, 21:44
В добавку к Akon:
У всех фирм свои стандарты. И свои велосипеды. И велосипеды велосипедов партнёров. Так что с точки зрения одного разработчика нет разницы, с чьим велосипедом работать :D


Название: Re: Изобретение велосипедов
Отправлено: vulko от Ноябрь 21, 2014, 23:36
Словом "велосипед" - это позор.
В очередной раз не увидел, где m_ax говорит, что свой велосипед это позор. Покажите пожалуйста. :)

Вот я вижу, что он предлагает посмотреть, как уже люди делали.
Понимаете, сделать машину состояний это занятие на несколько минут. Самое важное и интересное, это придумать концепт, как диаграмму состояний удобно описать на C++, что бы все было понятно и легко расширяемо.
Если вы посмотрите, как сделано в предлагаемых библиотеках, то обнаружите, что описание диаграмм сильно отличаются. Где то удобней одно, где-то другое. Человеку предлагалось ознакомиться с опытом других и сделать так как ему будет удобно.

На самом деле, "супер макс" не предлагал сделать как человеку удобно, он предлагал взять готовое, т.к. это делали не дураки.
Действительно, изобретение велосипедов не лучшее занятие. Но в его словах четко прослеживается идея того, что надо пользоваться обязательно тем же бустом, т.к. он всяко лучше.
Да, быть может в плане структур данных он лучше. А в плане state machine... ?!

Но в одном я более чем уверен. Простые вещи иногда лучше сделать самому, при этом не изобретая велосипед, но делая все четко и ясно для любого программиста, читающего ваш код. Причина достаточно банальна - очень часто чужие реализации крайне нечитабельны, хоть и сделаны грамотно. Тот же буст сделан через жопу, в плане читабельности.
Если вам приходилось заниматься разработкой java кода, вы также согласитесь, что boost это полная Ж в плане восприятия кода.
Тут конечно не буст виноват, любые попытки сделать ООП апишки с красивыми интерфейсами на С++ в сравнении с аналогичными на жабе, выглядят крайне убого.

Подытоживая, хочу отметить, что велосипедить некоторые вещи глупо. К таким можно отнести стандартные структуры данных, например... тот же вектор, лист и т.п.

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


Название: Re: Изобретение велосипедов
Отправлено: kamre от Ноябрь 22, 2014, 01:47
Тут конечно не буст виноват, любые попытки сделать ООП апишки с красивыми интерфейсами на С++ в сравнении с аналогичными на жабе, выглядят крайне убого.
Это как раз в Java все убого с примитивными generics, type erasure и хранением всего подряд в куче. Такого уровня абстракции с сохранением эффективности как в boost в Java просто не может быть. Даже .NET и то может больше чем Java предложить в этом плане.


Название: Re: Изобретение велосипедов
Отправлено: Akon от Ноябрь 22, 2014, 11:33
Java много проще C++, отсюда более простое восприятие Java кода. Некоторые элегантные вещи, которые делаются на плюсах, на Jаva просто не мыслимы. Конечно, платой за эту элегантность является сложность.


Название: Re: Изобретение велосипедов
Отправлено: Igors от Ноябрь 22, 2014, 12:10
Имхо, если вы пишете софт, с которым (хотя бы даже в перспектве) будут работать другие программисты, то велосипеды - это последнее дело, потому что это наименее стандартные решения. В отраслях промышленности, связанных с конструированием, есть такие понятия, как коэф. стандартизации и унификации. К софту это относится в полной мере. В общем случае, промышленный код, изобилующий велосипедами, - показатель непрофессионализма разработчиков.
Вот напр 3D, возьмем самые простые вещи

- точка, вектор (x, y, z)
- операции с ними, алгебра операторов, скалярное и векторное произведения
- полигон (в общем случае facet)
- матрицы (3x3 и 4x4)

Какой стандарт для этих (совершенно базовых и неизбежных) вещей? Мне об этом ничего не известно. Можно пойти и чуть дальше: покажите мне хотя бы 2 приложения использующие идентичный класс "вектор 3D". В общем, профессионализмом и не пахнет :)

И почему разговор сразу переводится на state machine, контейнеры и др? Для таких общих/стандартных вещей есть широкий выбор, грех не воспользоваться. Вот только почему пользуются далеко не всегда? Почему QVector, а не std::vector? И этот QList - махровый велосипед! Они явно не поняли идейной красоты и философии буста!! :) Однако рез-т у них очень даже неплохой. И др уважающие себя либы поступают аналогично. И я так вижу соображения нестандартности/непрофессионализма их нисколько не волнуют. Но вот когда человек пишет свой контейнер - так сразу "велосипед, ату его!!!". Конечно должны быть резоны, а не просто "желание пооригинальничать".

Но тема совсем о другом. Вот у меня немало работы - найти все пересечения в сцене, перестроить топологию, причем определенным образом и много еще чего. Каким образом буст (или др "готовые решения") мне может помочь? Не вижу. Ну да, я могу заменить самопальный allocator (в бусте наверняка есть и лучше), ну может что-то еще такого плана. Но мне сейчас это не помощь, а "еще одна работа", т.к. и то что есть устраивает.

И вот я пыхтю и пишу велосипед - а что делать если постоянно не везет с "готовыми решениями"?  :)


Название: Re: Изобретение велосипедов
Отправлено: kambala от Ноябрь 22, 2014, 15:59
Какой стандарт для этих (совершенно базовых и неизбежных) вещей? Мне об этом ничего не известно. Можно пойти и чуть дальше: покажите мне хотя бы 2 приложения использующие идентичный класс "вектор 3D". В общем, профессионализмом и не пахнет :)
BLAS, разве нет?


Название: Re: Изобретение велосипедов
Отправлено: Igors от Ноябрь 22, 2014, 17:15
BLAS, разве нет?
По "содержанию" все реализации идентичны (во всяком случае практически), это одна и та же геометрия 18-го века (если не раньше). Но я ни разу не видел "по форме", грубо говоря базового класса который использовался бы в 2 и более приложениях. Напр недавно был вопрос по libQGLViewer. Ну казалось бы если на Qt, то и надо юзать имеющийся QVector3D, но http://www.libqglviewer.com/refManual/classqglviewer_1_1Vec.html (http://www.libqglviewer.com/refManual/classqglviewer_1_1Vec.html). И это правильное решение


Название: Re: Изобретение велосипедов
Отправлено: Old от Ноябрь 22, 2014, 18:19
покажите мне хотя бы 2 приложения использующие идентичный класс "вектор 3D". В общем, профессионализмом и не пахнет :)
Вот смотрите:
Здесь описаны проекты, которые используют вектор из ogre: http://www.ogre3d.org/tikiwiki/tiki-index.php?page=projects+using+ogre
А здесь из SFML: https://github.com/LaurentGomila/SFML/wiki/Projects
Это на вскидку, если вы пошаритесь на github, то найдете еще 100500 разных проектов, использующих одинаковые библиотеки.

И почему разговор сразу переводится на state machine, контейнеры и др?
Не знаю, это вы начали этот разговор.

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

И этот QList - махровый велосипед! Они явно не поняли идейной красоты и философии буста!! :)
Когда появился QList, о boost еще даже не мечтали.

Но вот когда человек пишет свой контейнер - так сразу "велосипед, ату его!!!".
Кто вас так обижает все время? Неужели m_ax?

Каким образом буст (или др "готовые решения") мне может помочь? Не вижу.
Вы постоянно путаете два понятия: решить за вас или помочь вам написать решение. От этого у вас возникает желание периодически начинать такие темы.

И вот я пыхтю и пишу велосипед
Как и все остальные.


Название: Re: Изобретение велосипедов
Отправлено: m_ax от Ноябрь 22, 2014, 19:51
Понимаете, сделать машину состояний это занятие на несколько минут. Самое важное и интересное, это придумать концепт...
Концепт.. Именно, я просто уже боюсь произносить здесь это слово, поэтому заменил его на "философия")

И да, я не против своих велосипедов, тогда, когда это оправдано и действительно актуально.. И да, это полезно, в образовательных целях (сам этим грешу), но это всё пустое, когда только своими поделками и заканчивается.. 

Почему, почему, всё что из вне, даже то, что действительно заслуживает внимания, воспринимается категорически в штыки? Что это вообще такое? Почему на буст такая реакция? Ведь я не заставляю/не принуждаю им пользоваться, просто рекомендую подсмотреть на то, как это реализовано там, тем более что это оправдано) Ведь это всегда полезно - сделать шаг назад и посмотреть на проблему с другой стороны..
Ну как же - подсмотрел, значит всё: лишил себя чего то творческого, обфусцировал своё сознание и способность к творческому мышлению.. Ну честно, смешно..(


Название: Re: Изобретение велосипедов
Отправлено: vulko от Ноябрь 22, 2014, 22:06
Тут конечно не буст виноват, любые попытки сделать ООП апишки с красивыми интерфейсами на С++ в сравнении с аналогичными на жабе, выглядят крайне убого.
Это как раз в Java все убого с примитивными generics, type erasure и хранением всего подряд в куче. Такого уровня абстракции с сохранением эффективности как в boost в Java просто не может быть. Даже .NET и то может больше чем Java предложить в этом плане.

убого?))
это называется продуманно!

да, для некоторых задач плюсы лучше, но что касается удобства разработчика, тут плюсам как медведю до олимпиады по фигурному катанию.

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


Название: Re: Изобретение велосипедов
Отправлено: vulko от Ноябрь 22, 2014, 22:13
Java много проще C++, отсюда более простое восприятие Java кода.  Конечно, платой за эту элегантность является сложность.

на жабе писать одно удовольствие.
состав jdk внушает. там есть все что нужно для любой задачи и все апишки там заточены на удобство их использования.
все очень продуманно и взаимосвязанно.

а что есть в плюсах? stl, boost... но все это очень разнородно. писалось разными людьми, и не воспринимается как единое целое.


Цитировать
Некоторые элегантные вещи, которые делаются на плюсах, на Jаva просто не мыслимы.

скорее наоборот. элегантные вещи, которые легко и непринужденно пишуться на жабе, на плюсах выглядят убого.


Название: Re: Изобретение велосипедов
Отправлено: kamre от Ноябрь 23, 2014, 07:50
убого?))
это называется продуманно!

Конечно, убого! Как только хоть какой-то performance из Java надо выжимать, сразу вся ее стандартная библиотека на помоечку идет: http://java-performance.info/use-case-optimizing-memory-footprint-of-read-only-csv-file-trove-unsafe-bytebuffer-data-compression/

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


Название: Re: Изобретение велосипедов
Отправлено: Igors от Ноябрь 23, 2014, 14:51
И да, я не против своих велосипедов, тогда, когда это оправдано и действительно актуально.. И да, это полезно, в образовательных целях (сам этим грешу), но это всё пустое, когда только своими поделками и заканчивается.. 
Дело вот в этом "только, когда". По-Вашему выходит что велосипед - случай редкий, даже исключительный, которого следует избегать. Нормальное состояние программиста - использование готовых, проверенных решений. А я считаю что до 90% (и более) работы программиста - изобретение велосипеда, и это нормально.

Когда Вы берете нечто "общее" - с готовыми решениями все прекрасно. Тот же слот-сигнал. Помню Вы сделали свой, действительно поделка (в хорошем смысле этого слова, я бы в жизни не написал такое), никакой конкуренции бусту и/или Qt она не составляет. Чисто в целях самосовершенствования (что хорошо).

Но как только мы отъедем (пару остановок на тролебусе) от "общих" вещей к более специфичным, конкретным - все по-другому. Какой уж там "выбор" - хоть что-то бы найти подобное! Но и это часто недостижимо (хотя я уже согласен и на витиеватый сынтаксыс буст и на что угодно). В той задаче что я упомянул неск подзадач - и по ним я ничего особенного не наскреб. Хотите расскажу подробнее.

Вообще, почему хаять велосипедизм считается хорошим тоном?
Цитировать
..но боюсь что велосипед сей..
Цитировать
меня огорчает необходимость писать велосипеды..
И.т.д. И.т.п. Чего же хотелось бы? Вероятно нахватать готовых классов и слепить из них. Хорошо если такая возможность есть - но ее часто может и не быть. И что тогда будет делать хающий? И почему в голову не приходит простая мысль - масса людей тоже хотят "по-готовому", а значит и цена этому "рупь-ведро"


Название: Re: Изобретение велосипедов
Отправлено: vulko от Ноябрь 23, 2014, 17:22
убого?))
это называется продуманно!

Конечно, убого! Как только хоть какой-то performance из Java надо выжимать, сразу вся ее стандартная библиотека на помоечку идет: http://java-performance.info/use-case-optimizing-memory-footprint-of-read-only-csv-file-trove-unsafe-bytebuffer-data-compression/

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


Читаем summary по твоей ссылке:
Цитировать
If you want to keep a large number of read-only records in memory, consider storing them in the most possible compact form in a ByteBuffer (or using sun.misc.Unsafe).
Use Trove maps for indices.
Check if you need to keep your ID field values as maps keys (you can still check ID field stored in ByteBuffer) or hash code is sufficient as a key.
If you know the possible query keys in advance – don’t store IDs at all – hash code is sufficient replacement for map keys in a lot of situations.
это касается и плюсов тоже.

вообще хз че ты хотел этой ссылкой сказать, долго наверное гуглил её...))

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

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

далеко ходить не надо. сравни работу с сокетом на плюсах (не qt) и на жабе. попробуй распарсить xml на плюсах. таких примеров куча.
это называется продуманность.

а не подход в стиле икеи. купите склеенные опилки и соберите это говно сами.


Название: Re: Изобретение велосипедов
Отправлено: kamre от Ноябрь 23, 2014, 18:31
это касается и плюсов тоже.
вообще хз че ты хотел этой ссылкой сказать, долго наверное гуглил её...))
Конечно, и плюсов касается. Только в плюсах абстракции позволяют работать с одним сплошным куском памяти и не терять производительность как при работе с классами из JDK.
Ссылка давно в закладках )) Мне Java/Scala во многом нравятся, но в моих задачах, где performance важен, они не очень подходят.


Название: Re: Изобретение велосипедов
Отправлено: Old от Ноябрь 23, 2014, 19:56
далеко ходить не надо. сравни работу с сокетом на плюсах (не qt) и на жабе.
Давайте. Покажите как это делается в java, а я покажу как это красивенько сделать на boost.asio.

попробуй распарсить xml на плюсах. таких примеров куча.
Ой, давайте, давайте.
Вот примерный файл, покажите как вы достаете указанное значение и указанный атрибут. А я покажу, как это делается с помощью boost.
Код
XML
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE avset-list>
<avset-list ver="1.0">
<producer name="Fuck, Inc">
<item name="Good shit">
<v>79</v>
<d>8,0</d>
</item>
</producer>
</avset-list>
 
Как на java получить значение v и d, а так же атрибута name у тега item?

это называется продуманность.
Очень хочется увидеть эту продуманность.


Название: Re: Изобретение велосипедов
Отправлено: vulko от Ноябрь 24, 2014, 09:19
далеко ходить не надо. сравни работу с сокетом на плюсах (не qt) и на жабе.
Давайте. Покажите как это делается в java, а я покажу как это красивенько сделать на boost.asio.

попробуй распарсить xml на плюсах. таких примеров куча.
Ой, давайте, давайте.
Вот примерный файл, покажите как вы достаете указанное значение и указанный атрибут. А я покажу, как это делается с помощью boost.
Код
XML
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE avset-list>
<avset-list ver="1.0">
<producer name="Fuck, Inc">
<item name="Good shit">
<v>79</v>
<d>8,0</d>
</item>
</producer>
</avset-list>
 
Как на java получить значение v и d, а так же атрибута name у тега item?

это называется продуманность.
Очень хочется увидеть эту продуманность.


boost это 3rd party. давай лучше без буста ;)


На жабе способов много. Можно например вот так:
Код:
                parser = new XmlPullParcer();
String prodTag = "producer";
String itemTag = "item";
String vTag = "v";
String dTag = "d";
while ((event = parser.next()) != XmlPullParser.END_DOCUMENT) {
    if (event == XmlPullParser.START_TAG) {
        if (prodTag .equals(parser.getName())) {
        System.out.println("producer name:" + parser.getAttributeValue(null, "name"));
        } else if (itemTag.equals(parser.getName())) {
        System.out.println("item name:" + parser.getAttributeValue(null, "name"));
        } else if (vTag.equals(parser.getName())) {
        System.out.println("v: " + parser.nextText());
        } else if (dTag.equals(parser.getName())) {
        System.out.println("d: " + parser.nextText());
    }
}


Название: Re: Изобретение велосипедов
Отправлено: Old от Ноябрь 24, 2014, 09:40
boost это 3rd party. давай лучше без буста ;)
Вы хотите использовать всю мощь и красоту всех ява библиотек, и хотите ограничить меня в использовании boost, который по сути является песочницей для проверки решений, которые в будущем попадут в стандарт?

На жабе способов много. Можно например вот так:
Наверное это не самый лучший. Так же с xml можно работать с помощью того же QXmlStreamReader.
Совсем не удобное и не подходящее решение для обозначенной мной задачи.
Может есть что поудобней? Или это предел возможностей явы с ее чудо библиотекой. И что там с красивыми сокетами? Если в таком же стиле, как и работа с xml то остается только сожалеть за яву.



Название: Re: Изобретение велосипедов
Отправлено: vulko от Ноябрь 24, 2014, 10:00
Очень хочется увидеть эту продуманность.

чтобы увидеть, нужно изучить жабу, покодить на ней. и тогда станет ясно.
это повсюду и во всем.
ну взять те же коллекции, которые уже успели похаять тут...
продуманны:
- возможность сортировки любой коллекции с помощью интерфейса Comparator
- возможность простой и удобной сериализации/десереализации чего угодно
- удобное апи, в отличие от того же stl, где чтобы вставить элемент в мэп, нужно создавать какую-то там Pair... а чтобы получить значение из итератора, нужно делать танцы с бубном, т.к. перегруженный оператор -> не поддерживает автодополнения. почему нельзя было сделать методы T getValue() и void add(T key, T value) методы?

таких мелочей дикое множество.

в самом языке тоже есть няшки. тот же interface, это куда удобнее чем abstract class.
да даже эти говна остатки древних мамонтов в виде h и cpp... зачем?! кому?! для чего?!

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


Название: Re: Изобретение велосипедов
Отправлено: vulko от Ноябрь 24, 2014, 10:08
boost это 3rd party. давай лучше без буста ;)
Вы хотите использовать всю мощь и красоту всех ява библиотек, и хотите ограничить меня в использовании boost, который по сути является песочницей для проверки решений, которые в будущем попадут в стандарт?

чудо библиотека не идет отдельно от jdk или jre.
а вот буст не идет в комплекте со студией или qt. 3rd party оно и в африке 3rd party.

разницу чувствуешь?


Наверное это не самый лучший. Так же с xml можно работать с помощью того же QXmlStreamReader.
Совсем не удобное и не подходящее решение для обозначенной мной задачи.
Может есть что поудобней? Или это предел возможностей явы с ее чудо библиотекой. И что там с красивыми сокетами? Если в таком же стиле, как и работа с xml то остается только сожалеть за яву.
QXmlStreamReader это не с++. Это Qt. Ты на плюсах напиши то же самое.

Есть много чего. Для поставленной задачи это более чем подходит.
XmlPull API подразумевает много чего, те же nextTag() и т.п. Все что угодно можно найти в рамках одной итерации while(), если тебя это беспокоит.


Название: Re: Изобретение велосипедов
Отправлено: Old от Ноябрь 24, 2014, 10:40
чудо библиотека не идет отдельно от jdk или jre.
а вот буст не идет в комплекте со студией или qt. 3rd party оно и в африке 3rd party.

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

QXmlStreamReader это не с++. Это Qt. Ты на плюсах напиши то же самое.
А Qt это не C++?

Есть много чего. Для поставленной задачи это более чем подходит.
Но только для такой простой задачи это слишком многословно и очень сложно сопровождать, при изменении формата xml файла. И здесь еще нет проверки корректности всего xml файла.

Вот с помощью boost делаю так:
Код
C++ (Qt)
namespace pt = boost::property_tree;
 
pt::ptree xml;
pt::read_xml( "file.xml", xml );
 
string v = xml.get<string>( "producer.item.<xmlattr>.name" );
int v = xml.get<int>( "producer.item.v" );
double d = xml.data<double>( "producer.item.d" );
 
Причем файл уже проверен на валидность. Если где ошибка или чего-то нет - получим исключение.
Не хотим получать исключении при отсутствии поля, добавляем к параметрам метода get значение по умолчанию.

Вот это я называю удобно.
С ява сокетами и boost.asio думаю будет та же ситуация.

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


Название: Re: Изобретение велосипедов
Отправлено: vulko от Ноябрь 24, 2014, 11:01
Нет, не чувствую.
Я не вижу в этом проблемы. Если в проекте нужен boost (а он изумительно дополняет стандартную библиотеку), то его нужно использовать.
Ну тогда давай сюда ещё Java EE приплетем. Буст уже не спасет :)

А Qt это не C++?
Нет. Фреймворк и SDK это все таки разные вещи.

Но только для такой простой задачи это слишком многословно и очень сложно сопровождать, при изменении формата xml файла. И здесь еще нет проверки корректности всего xml файла.

Вот с помощью boost делаю так:
Код
C++ (Qt)
namespace pt = boost::property_tree;
 
pt::ptree xml;
pt::read_xml( "file.xml", xml );
 
string v = xml.get<string>( "producer.item.<xmlattr>.name" );
int v = xml.get<int>( "producer.item.v" );
double d = xml.data<double>( "producer.item.d" );
 

Причем файл уже проверен на валидность. Если где ошибка или чего-то нет - получим исключение.
Не хотим получать исключении при отсутствии поля, добавляем к параметрам метода get значение по умолчанию.

Ну если xml файл состоит из одного элемента producer/item, мой код можно сократить до тех же размеров.
Так то я написал конструкцию для распарсивания файла с любым количеством записей producer и item.
А для хранения одной записи можно и без xml обойтись.

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


Вот это я называю удобно.
С ява сокетами и boost.asio думаю будет та же ситуация.
какая?)


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

Ява это была первая попытка сделать на основе с++ нечто удобное для разработчика. Такое, где будет все ему нужное и этим будет удобно пользоваться.
Причем сделать хотели именно ООП язык, а не полу-ООП, как с++. Это сейчас С++11 слегка подрос, правда все это опять же не кроссплатформенно и не везде поддерживается.
Тогда никаких бустов и в помине не было.
Это огромный конструктор, где нет нужды в чужих деталях. Можно собрать что угодно, когда угодно и где угодно (run once, run anywhere ;) ).

Думать не требуется дворникам.
То что с++ это для умных а жаба для дебилов, это все холивар-срач "аргументы". Думать нужно всегда и везде.
В c# тоже думать не надо? Оно тоже для дебилов?

Тут люди на Qt пытаются под андройд кодить... это все потому что жаба говно, а плюсы круто?)) Или может потому что им лень изучить жабу, вместо дрочева с JNI? :)


Название: Re: Изобретение велосипедов
Отправлено: Old от Ноябрь 24, 2014, 11:17
Ну тогда давай сюда ещё Java EE приплетем. Буст уже не спасет :)
Давайте. Это что? :)

Нет. Фреймворк и SDK это все таки разные вещи.
Можно выдернуть класс QXmlStreamReader из Qt и использовать в обычном C++. Только это никому не надо, потому что есть средства поудобней.

Так то я написал конструкцию для распарсивания файла с любым количеством записей producer и item.
Здесь с этим тоже нет проблем:
Код
C++ (Qt)
for( const pt::ptree::value_type &it : xml.get_child( "producer" ) )
{
   if( it.first == "item" )
   {
       const pt::ptree &item = it.second;
       string v = item.get<string>( "<xmlattr>.name" );
       int v = item.get<int>( "v" );
       double d = item.data<double>( "d" );
   }
}
 

какая?)
Как с обработкой xml. :)
Думаю там работа с сокетами такая как в Qt. У asio с этим получше.

То что с++ это для умных а жаба для дебилов, это все холивар-срач "аргументы".
Я такого не говори. Я хотел сказать что не корректно сравнивать яву и с++, цели у них разные.
И, как вы видите сами, ява со всем ее счастьем, не смогла заменить с++. Она заняла свою нишу, о которой я и написал.


Название: Re: Изобретение велосипедов
Отправлено: vulko от Ноябрь 24, 2014, 12:23
Ну тогда давай сюда ещё Java EE приплетем. Буст уже не спасет :)
Давайте. Это что? :)

Нет. Фреймворк и SDK это все таки разные вещи.
Можно выдернуть класс QXmlStreamReader из Qt и использовать в обычном C++. Только это никому не надо, потому что есть средства поудобней.

Так то я написал конструкцию для распарсивания файла с любым количеством записей producer и item.
Здесь с этим тоже нет проблем:
Код
C++ (Qt)
for( const pt::ptree::value_type &it : xml.get_child( "producer" ) )
{
   if( it.first == "item" )
   {
       const pt::ptree &item = it.second;
       string v = item.get<string>( "<xmlattr>.name" );
       int v = item.get<int>( "v" );
       double d = item.data<double>( "d" );
   }
}
 

какая?)
Как с обработкой xml. :)
Думаю там работа с сокетами такая как в Qt. У asio с этим получше.

То что с++ это для умных а жаба для дебилов, это все холивар-срач "аргументы".
Я такого не говори. Я хотел сказать что не корректно сравнивать яву и с++, цели у них разные.
И, как вы видите сами, ява со всем ее счастьем, не смогла заменить с++. Она заняла свою нишу, о которой я и написал.

нишу?) она заняла огромное количество ниш.
даже винда с переходом на .нет ушла от плюсов. правда юзать жабу для такого гиганта как мелкософт конечно не комильфо, поэтому они взяли жабу и добавили пару "приколюх" поверх.
теперь плюсы окончательно ушли в область *nix и железа. вот у плюсов как раз ниша осталась.

java ee это расширение java se (standart edition) как раз для клиент-серверных бизнес решений где нужно быстро накидать софт.
https://ru.wikipedia.org/wiki/Java_Platform,_Enterprise_Edition

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

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

ну а буста как я уже говорил и в помине не было, когда была жаба со всеми ништяками.
да буст умеет многое.
но вот этим многое сказано:
Код:
const pt::ptree &item = [b]it.second[/b];

почему second? кто придумал такую хрень?
почему нельзя сделать it.value? или ещё что-то понятное?

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

но вот такой код читать куда приятнее. И писать его приятнее.
Код:
for( const ValueType &it : xml.getChild("producer") )
{
    if( it.getKey == "item" )
    {
        XmlItem &item = it.getValue();
        String v = item.getName("name");
        int v = item.getInt("v");
        double d = item.getDouble("d");
    }
}


Название: Re: Изобретение велосипедов
Отправлено: Old от Ноябрь 24, 2014, 12:36
почему second? кто придумал такую хрень?
почему нельзя сделать it.value? или ещё что-то понятное?
Это пара - std::pair. Там есть first и second. Они равноправны. Какой из них предлагаете назвать value?

но вот такой код читать куда приятнее. И писать его приятнее.
Точно. Он практически ничем не отличается от моего бустовского и очень далек от вашего явовского.
И это я еще не предлагаю поменять структуру xml, как это часто бывает при эволюции проекта.


Название: Re: Изобретение велосипедов
Отправлено: vulko от Ноябрь 24, 2014, 12:47
почему second? кто придумал такую хрень?
почему нельзя сделать it.value? или ещё что-то понятное?
Это пара - std::pair. Там есть first и second. Они равноправны. Какой из них предлагаете назвать value?

но вот такой код читать куда приятнее. И писать его приятнее.
Точно. Он практически ничем не отличается от моего бустовского и очень далек от вашего явовского.
И это я еще не предлагаю поменять структуру xml, как это часто бывает при эволюции проекта.

Нахрена мне в xml std::pair? Какая равноценность, когда пара тэг-значение никогда не равноценна!
Даже first и second не равноценны, т.к. один первый, другой второй.

просто когда человеку, как в жабе, "думать не надо", он делает такую хрень.

если бы те кто делал std, boost и прочее думали бы головой, а не другим местом, то не было бы никаких .first и .second.
были бы .key .value, либо .tag .value...

и такое дерьмо повсюду в std и бусте.
видимо потому-что писалось жопорукими супер продумывальщиками, которым даже интелекта не хватает назвать элементы пары ключ-значение в каком-нибудь map соответсвующими key и value.


Название: Re: Изобретение велосипедов
Отправлено: Old от Ноябрь 24, 2014, 12:58
Нахрена мне в xml std::pair? Какая равноценность, когда пара тэг-значение никогда не равноценна!
Т.е. других претензий не осталось. Это же прекрасно. :)
С сокетами из Java EE что нибудь покажите?
Или там примерно как и здесь все просто и эффективно?
Код
C++ (Qt)
               parser = new XmlPullParcer();
String prodTag = "producer";
String itemTag = "item";
String vTag = "v";
String dTag = "d";
while ((event = parser.next()) != XmlPullParser.END_DOCUMENT) {
   if (event == XmlPullParser.START_TAG) {
       if (prodTag .equals(parser.getName())) {
        System.out.println("producer name:" + parser.getAttributeValue(null, "name"));
       } else if (itemTag.equals(parser.getName())) {
        System.out.println("item name:" + parser.getAttributeValue(null, "name"));
       } else if (vTag.equals(parser.getName())) {
        System.out.println("v: " + parser.nextText());
       } else if (dTag.equals(parser.getName())) {
        System.out.println("d: " + parser.nextText());
   }
}
 


Название: Re: Изобретение велосипедов
Отправлено: vulko от Ноябрь 24, 2014, 12:59
Он практически ничем не отличается от моего бустовского и очень далек от вашего явовского.

мой код написан с помощью xmlpull api. парсилок есть 3 или 4 только в jdk. можно ещё и сторонние поискать, т.к. буст это сторонняя библиотека.

Что, прямо таки никаких отличий?))
Код:
const pt::ptree::value_type &it : xml.get_child( "producer" )
const ValueType &it : xml.getChild("producer")

может дело в for-each цикле? в жабе он кстати был задолго до того как его включили в очередной с++ стандарт.

или может value_type это клевое именование типов? может ValueType прятнее читается и воспринимается как тип, а не хрен пойми что угодно?)))
также как называть методы get_child?)) ещё классно делать вот так getchild. потому что для с++ кодеров обычно побарабану все, они же умнее всех остальных)))


Название: Re: Изобретение велосипедов
Отправлено: Old от Ноябрь 24, 2014, 13:01
или может value_type это клевое именование типов? может ValueType прятнее читается и воспринимается как тип, а не хрен пойми что угодно?)))
Ээээ.

Код
C++ (Qt)
typedef pt::ptree::value_type MySuperXmlValueType;


Название: Re: Изобретение велосипедов
Отправлено: vulko от Ноябрь 24, 2014, 13:10
Нахрена мне в xml std::pair? Какая равноценность, когда пара тэг-значение никогда не равноценна!
Т.е. других претензий не осталось. Это же прекрасно. :)
С сокетами из Java EE что нибудь покажите?
Или там примерно как и здесь все просто и эффективно?
Код
C++ (Qt)
               parser = new XmlPullParcer();
String prodTag = "producer";
String itemTag = "item";
String vTag = "v";
String dTag = "d";
while ((event = parser.next()) != XmlPullParser.END_DOCUMENT) {
   if (event == XmlPullParser.START_TAG) {
       if (prodTag .equals(parser.getName())) {
        System.out.println("producer name:" + parser.getAttributeValue(null, "name"));
       } else if (itemTag.equals(parser.getName())) {
        System.out.println("item name:" + parser.getAttributeValue(null, "name"));
       } else if (vTag.equals(parser.getName())) {
        System.out.println("v: " + parser.nextText());
       } else if (dTag.equals(parser.getName())) {
        System.out.println("d: " + parser.nextText());
   }
}
 


может ты покажешь свой код на жабе?
а если такого нет, то твои истории о "крутости" плюсов и рассуждения на тему того что для чего придумано, просто неадекватны.

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


Название: Re: Изобретение велосипедов
Отправлено: vulko от Ноябрь 24, 2014, 13:13
или может value_type это клевое именование типов? может ValueType прятнее читается и воспринимается как тип, а не хрен пойми что угодно?)))
Ээээ.

Код
C++ (Qt)
typedef pt::ptree::value_type MySuperXmlValueType;


а толку?)

если потом все это превращается в MySuperXmlValueType.first и MySuperXmlValueType.second?)))
из говна не сделать конфетку. надо было изначально в упаковку конфету засовывать, а не говно.


Название: Re: Изобретение велосипедов
Отправлено: Old от Ноябрь 24, 2014, 14:03
если потом все это превращается в MySuperXmlValueType.first и MySuperXmlValueType.second?)))
Все кто знает про pair знает и про first/secont. Это лучше, чем для каждого нового кортежа заводить свой тип с понятными полями. Здесь один раз запомнил и пользуйся, а не лазь по документации в поисках "А как там автор исхитрился назвать...".
В яве, кстате, есть Pair (http://commons.apache.org/proper/commons-lang/javadocs/api-release/org/apache/commons/lang3/tuple/Pair.html), там вместо first/second - left/right, что еще более странно.

Резюмируя: Неудобства от pair минимальны, по сравнению с приведенным вами неудобным и плохо расширяемым кодом на яве для разбора xml.


Название: Re: Изобретение велосипедов
Отправлено: vulko от Ноябрь 24, 2014, 14:59
если потом все это превращается в MySuperXmlValueType.first и MySuperXmlValueType.second?)))
Все кто знает про pair знает и про first/secont. Это лучше, чем для каждого нового кортежа заводить свой тип с понятными полями. Здесь один раз запомнил и пользуйся, а не лазь по документации в поисках "А как там автор исхитрился назвать...".
В яве, кстате, есть Pair (http://commons.apache.org/proper/commons-lang/javadocs/api-release/org/apache/commons/lang3/tuple/Pair.html), там вместо first/second - left/right, что еще более странно.

Резюмируя: Неудобства от pair минимальны, по сравнению с приведенным вами неудобным и плохо расширяемым кодом на яве для разбора xml.


Ну во-первых, это не Java.
Это экстеншн:
Цитировать
The standard Java libraries fail to provide enough methods for manipulation of its core classes. Apache Commons Lang provides these extra methods.


Во-вторых:

Код:
[b]L	getKey()[/b]
Gets the key from this pair.

abstract L getLeft()
Gets the left element from this pair.

abstract R getRight()
Gets the right element from this pair.

[b]R getValue()[/b]
Gets the value from this pair.

Так что оно никак не смущает, т.к. есть getKey() и getValue() методы, поскольку этот класс Pair имплементирует Map.Entry интерфейс.


Название: Re: Изобретение велосипедов
Отправлено: vulko от Ноябрь 24, 2014, 15:00
Резюмируя: Неудобства от pair минимальны, по сравнению с приведенным вами неудобным и плохо расширяемым кодом на яве для разбора xml.

резюмируя, в с++ вообще нет ничего высокоуровнего для работы с xml ;)

boost это 3rd party как я уже не раз говорил. или может я не прав?))


Название: Re: Изобретение велосипедов
Отправлено: vulko от Ноябрь 24, 2014, 15:03
Old, есть у тебя опыт разработки на жабе?


Название: Re: Изобретение велосипедов
Отправлено: Old от Ноябрь 24, 2014, 15:46
Old, есть у тебя опыт разработки на жабе?
Нет.
Но это не важно, я могу оценить красоту решения на многих языках и ява не намного отличается от тех же плюсов.
Разговор начался с того, что вы сказали как замечательно работать на яве с xml документами и сокетами, и как это не удобно делать в полюсах. Я попросил вас показать это в коде и увидел жуть аналогичную QXmlStreamReader. Сокетов не увидел вообще. Как я могу оценить удобство явы по этому?
Я вовсе не оспаривают достоинства явы, хотелось просто увидеть обещанные удобства.


Название: Re: Изобретение велосипедов
Отправлено: Old от Ноябрь 24, 2014, 15:57
резюмируя, в с++ вообще нет ничего высокоуровнего для работы с xml ;)

boost это 3rd party как я уже не раз говорил. или может я не прав?))
Ну и что? Это никак не мешает её использовать. :)


Название: Re: Изобретение велосипедов
Отправлено: vulko от Ноябрь 24, 2014, 16:48
Old, есть у тебя опыт разработки на жабе?
Нет.
Но это не важно, я могу оценить красоту решения на многих языках и ява не намного отличается от тех же плюсов.
Разговор начался с того, что вы сказали как замечательно работать на яве с xml документами и сокетами, и как это не удобно делать в полюсах. Я попросил вас показать это в коде и увидел жуть аналогичную QXmlStreamReader. Сокетов не увидел вообще. Как я могу оценить удобство явы по этому?
Я вовсе не оспаривают достоинства явы, хотелось просто увидеть обещанные удобства.

Я не обещал никаких удобств! И ничего тебе не должен.
Я лишь констатировал тот факт, что они там есть.

Удивительно, как человек не имеющий опыта жаба разработки, так смело утверждает, приправляя все это чудесным "понимаете"...)))
Цитировать
Понимаете, ява это комплекс средств, что бы быстро разрабатывать корпоративный софт и разработчики там всего лишь  ресурс. От них не требуется думать, проводить изыскания, находить эффективные решения - от них требуется гнать код.


Посмотрим на волшебный asio... почему кстати такое название? типа async io?)

Код:
int main(int argc, char* argv[])
{
  try
  {
    if (argc != 3)
    {
      std::cout << "Usage: sync_client <server> <path>\n";
      std::cout << "Example:\n";
      std::cout << "  sync_client www.boost.org /LICENSE_1_0.txt\n";
      return 1;
    }

    boost::asio::io_service io_service;

    // Get a list of endpoints corresponding to the server name.
    tcp::resolver resolver(io_service);
    tcp::resolver::query query(argv[1], "http");
    tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);

    // Try each endpoint until we successfully establish a connection.
    tcp::socket socket(io_service);
    boost::asio::connect(socket, endpoint_iterator);

    // Form the request. We specify the "Connection: close" header so that the
    // server will close the socket after transmitting the response. This will
    // allow us to treat all data up until the EOF as the content.
    boost::asio::streambuf request;
    std::ostream request_stream(&request);
    request_stream << "GET " << argv[2] << " HTTP/1.0\r\n";
    request_stream << "Host: " << argv[1] << "\r\n";
    request_stream << "Accept: */*\r\n";
    request_stream << "Connection: close\r\n\r\n";

    // Send the request.
    boost::asio::write(socket, request);

    // Read the response status line. The response streambuf will automatically
    // grow to accommodate the entire line. The growth may be limited by passing
    // a maximum size to the streambuf constructor.
    boost::asio::streambuf response;
    boost::asio::read_until(socket, response, "\r\n");

    // Check that response is OK.
    std::istream response_stream(&response);
    std::string http_version;
    response_stream >> http_version;
    unsigned int status_code;
    response_stream >> status_code;
    std::string status_message;
    std::getline(response_stream, status_message);
    if (!response_stream || http_version.substr(0, 5) != "HTTP/")
    {
      std::cout << "Invalid response\n";
      return 1;
    }
    if (status_code != 200)
    {
      std::cout << "Response returned with status code " << status_code << "\n";
      return 1;
    }

    // Read the response headers, which are terminated by a blank line.
    boost::asio::read_until(socket, response, "\r\n\r\n");

    // Process the response headers.
    std::string header;
    while (std::getline(response_stream, header) && header != "\r")
      std::cout << header << "\n";
    std::cout << "\n";

    // Write whatever content we already have to output.
    if (response.size() > 0)
      std::cout << &response;

    // Read until EOF, writing data to output as we go.
    boost::system::error_code error;
    while (boost::asio::read(socket, response,
          boost::asio::transfer_at_least(1), error))
      std::cout << &response;
    if (error != boost::asio::error::eof)
      throw boost::system::system_error(error);
  }
  catch (std::exception& e)
  {
    std::cout << "Exception: " << e.what() << "\n";
  }

  return 0;
}

Много двоеточий вижу... прямо глаза в глазах рябит.
Ещё ни одной большой буквы не вижу, кроме комментов и плэйн текста в консоль.
Ах да, ещё это нифига не высокоуровневое апи.
Ну да, клево же по буквам читать http responce... :)

Ещё интересно, такой http client, наверное не умеет сохранять куки. Да и вообще никакого куки менеджера в волшебном asio наверное нет?! М?

Ну и аналогичный код на жабе.

Код:
public class HttpClientTutorial {
 
  private static String url = "http://www.apache.org/";

  public static void main(String[] args) {
    // Create an instance of HttpClient.
    HttpClient client = new HttpClient();

    // Create a method instance.
    GetMethod method = new GetMethod(url);
   
    // Provide custom retry handler is necessary
    method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
    new DefaultHttpMethodRetryHandler(3, false));

    try {
      // Execute the method.
      int statusCode = client.executeMethod(method);

      if (statusCode != HttpStatus.SC_OK) {
        System.err.println("Method failed: " + method.getStatusLine());
      }

      // Read the response body.
      byte[] responseBody = method.getResponseBody();

      // Deal with the response.
      // Use caution: ensure correct character encoding and is not binary data
      System.out.println(new String(responseBody));

    } catch (HttpException e) {
      System.err.println("Fatal protocol violation: " + e.getMessage());
      e.printStackTrace();
    } catch (IOException e) {
      System.err.println("Fatal transport error: " + e.getMessage());
      e.printStackTrace();
    } finally {
      // Release the connection.
      method.releaseConnection();
    } 
  }
}

Никакого колдунства с хедерами и т.п. делать не нужно.
Все обернуто высокоуровневыми интерфейсами. HttpRequest, HttpResponce, HttpClient. Все это имеет огромный функционал, начиная от поддержки всяких https, удобного логина, удобных POST/GET запросов, возможности легко впихнуть внутрь JSON и распарсить...
Куки поддерживает, причем сохраняет их автоматически для инстанса HttpClient. Можно их легко сохранять и подгружать.

Функционал очень широкий. Я не профессионал в бусте, но думаю что многого там нет.


Название: Re: Изобретение велосипедов
Отправлено: vulko от Ноябрь 24, 2014, 17:01
резюмируя, в с++ вообще нет ничего высокоуровнего для работы с xml ;)

boost это 3rd party как я уже не раз говорил. или может я не прав?))
Ну и что? Это никак не мешает её использовать. :)

Да, но тогда некорректно сравнивать жабу с с++ и бустом.
Это все равно что сравнить жабу се + ее против просто плюсов с стл.

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

А так да, никто не мешает её использовать.

Кстати возвращаясь к теме удобства, наверное про инлайн классы ты тоже не в курсе?
Невероятно удобно.
Ещё невероятно удобно то, что нет хедеров, нет множества классов в одном файле и файл называется точно также как и класс! ещё есть удобное разделение по пакетам, соотв. структуре на файловой системе.


Название: Re: Изобретение велосипедов
Отправлено: vulko от Ноябрь 24, 2014, 17:04
Ах да... ну добавить вишенку на вершину торта забыл... =)

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

Да и библиотеки тоже приходиться компилировать под разные платформы...


Название: Re: Изобретение велосипедов
Отправлено: Old от Ноябрь 24, 2014, 17:08
Я не обещал никаких удобств! И ничего тебе не должен.
Я лишь констатировал тот факт, что они там есть.
Чем этот факт подкреплен?

Удивительно, как человек не имеющий опыта жаба разработки, так смело утверждает, приправляя все это чудесным "понимаете"...)))
А с чем вы не согласны?

Ещё интересно, такой http client, наверное не умеет сохранять куки. Да и вообще никакого куки менеджера в волшебном asio наверное нет?! М?
Конечно не умеет, asio это самый низкий уровень. Он работа с сокетами, а вы показали работу с протоколом http. Это разные вещи.

Кстати для работы с http на с++ есть куча годных библиотек, с поддержкой всех указанных вами кайфов. Например, это есть в Qt или в cpp-netlib. Последнее использует asio и реализует верхний уровень для http.
Вот пример простого клиента:
Код
C++ (Qt)
using namespace boost::network;
using namespace boost::network::http;
 
client::request request_("http://127.0.0.1:8000/");
request_ << header("Connection", "close");
client client_;
client::response response_ = client_.get(request_);
std::string body_ = body(response_);
 

Все обернуто высокоуровневыми интерфейсами. HttpRequest, HttpResponce, HttpClient. Все это имеет огромный функционал, начиная от поддержки всяких https, удобного логина, удобных POST/GET запросов, возможности легко впихнуть внутрь JSON и распарсить...
Куки поддерживает, причем сохраняет их автоматически для инстанса HttpClient. Можно их легко сохранять и подгружать.
Это все можно в cpp-netlib, cCURL, POCO C++ и еще 100500 разных библиотеках на C++, много из которых позволяют это делать очень удобно.


Название: Re: Изобретение велосипедов
Отправлено: Old от Ноябрь 24, 2014, 17:21
Да, но тогда некорректно сравнивать жабу с с++ и бустом.
Я это уже писал.
Я не хочу их сравнивать, я хотел увидеть красивое решение задачи на яве, против ее некрасивого решения на С++. Пока получается обратное.
Причем, вы начали разговоры про красоту одного и убогость другого.


Название: Re: Изобретение велосипедов
Отправлено: Old от Ноябрь 24, 2014, 17:22
Ах да... ну добавить вишенку на вершину торта забыл... =)

Откомпилированный байт код можно запускать на любой машине с JRE.
И именно по этому, он не так быстр как нативный. Да.

НО!!! Мы не сравниваем яву и с++, мы сравниваем решения в коде, где для решения на яве должно получиться красивей, чем на С++.
Как здесь обещалось:
Цитировать
далеко ходить не надо. сравни работу с сокетом на плюсах (не qt) и на жабе. попробуй распарсить xml на плюсах. таких примеров куча.
это называется продуманность.

Вот эту продуманность и хотелось бы наконец увидеть. Пока в boost продуманности больше.


Название: Re: Изобретение велосипедов
Отправлено: vulko от Ноябрь 25, 2014, 00:23
Я не обещал никаких удобств! И ничего тебе не должен.
Я лишь констатировал тот факт, что они там есть.
Чем этот факт подкреплен?

Удивительно, как человек не имеющий опыта жаба разработки, так смело утверждает, приправляя все это чудесным "понимаете"...)))
А с чем вы не согласны?

Ещё интересно, такой http client, наверное не умеет сохранять куки. Да и вообще никакого куки менеджера в волшебном asio наверное нет?! М?
Конечно не умеет, asio это самый низкий уровень. Он работа с сокетами, а вы показали работу с протоколом http. Это разные вещи.

Кстати для работы с http на с++ есть куча годных библиотек, с поддержкой всех указанных вами кайфов. Например, это есть в Qt или в cpp-netlib. Последнее использует asio и реализует верхний уровень для http.
Вот пример простого клиента:
Код
C++ (Qt)
using namespace boost::network;
using namespace boost::network::http;
 
client::request request_("http://127.0.0.1:8000/");
request_ << header("Connection", "close");
client client_;
client::response response_ = client_.get(request_);
std::string body_ = body(response_);
 

Все обернуто высокоуровневыми интерфейсами. HttpRequest, HttpResponce, HttpClient. Все это имеет огромный функционал, начиная от поддержки всяких https, удобного логина, удобных POST/GET запросов, возможности легко впихнуть внутрь JSON и распарсить...
Куки поддерживает, причем сохраняет их автоматически для инстанса HttpClient. Можно их легко сохранять и подгружать.
Это все можно в cpp-netlib, cCURL, POCO C++ и еще 100500 разных библиотеках на C++, много из которых позволяют это делать очень удобно.


ну вот, начиналось все с плюсов, потом буст оказался частью плюсов, потом ещё 25 левых библиотек там появилось откуда-то...
все эти библиотеки полная хрень, потому что это лишний хлам в проекте, тонны документации, разные интерфейсы...

ты дальше своего огорода нихрена не знаешь, но почему-то считаешь что плюсы спасут мир... удивительное толстолобие...

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

Цитировать
Причем, вы начали разговоры про красоту одного и убогость другого.
да, я не просто начал, я ещё и много аргументов привел. а какой у тебя аргумент?
для этого есть либа...
для того есть либа...
а в плюсах нет ни**я!


Название: Re: Изобретение велосипедов
Отправлено: Old от Ноябрь 25, 2014, 00:31
Скорее слов вы привели много, к сожалению ничего не доказывающих.
А вот красивых решений на яве мы так и не увидили.


Название: Re: Изобретение велосипедов
Отправлено: m_ax от Ноябрь 25, 2014, 00:45
Скорее слов вы привели много, к сожалению ничего не доказывающих.
А вот красивых решений на яве мы так и не увидили.

Ой, Old, оставьте, с кем вы спорите) Там дальше слов не уйдёт) Бесполезно ждать адеквата от того, кого учили понемножку: хоть как-нибудь, чему-нибудь..( Не удивлюсь, если он вас ещё в пятнах на солнце обвинит) 

 


Название: Re: Изобретение велосипедов
Отправлено: Old от Ноябрь 25, 2014, 00:59
Ой, Old, оставьте, с кем вы спорите) Там дальше слов не уйдёт) Бесполезно ждать адеквата от того, кого учили понемножку: хоть как-нибудь, чему-нибудь..( Не удивлюсь, если он вас ещё в пятнах на солнце обвинит)  
Да я уже ничего и не жду. :)
Думаю, что других аргументов кроме "в библиотеке явы много всего и оно такое офигенное" мы не услышим.
Так же как и не увидим обещанного красивого и удобного ява-кода.


Название: Re: Изобретение велосипедов
Отправлено: m_ax от Ноябрь 25, 2014, 01:14
Ой, Old, оставьте, с кем вы спорите) Там дальше слов не уйдёт) Бесполезно ждать адеквата от того, кого учили понемножку: хоть как-нибудь, чему-нибудь..( Не удивлюсь, если он вас ещё в пятнах на солнце обвинит)  
Да я уже ничего и не жду. :)
Думаю, что других аргументов кроме "в библиотеке явы много всего и оно такое офигенное" мы не услышим.
Так же как и не увидим обещанного красивого и удобного ява-кода.
Угу.. Уже предчувствую N-ую волну троллинга о том, что буст и stl писали одни самозванцы одним неприличным местом.. Но vulko, конечно, как эксперту, лучше знать) Жаль, что его забыли спросить( Плюсы явно много потеряли без его авторитетного мнения(       


Название: Re: Изобретение велосипедов
Отправлено: m_ax от Ноябрь 25, 2014, 01:32
Дело вот в этом "только, когда". По-Вашему выходит что велосипед - случай редкий, даже исключительный, которого следует избегать. Нормальное состояние программиста - использование готовых, проверенных решений. А я считаю что до 90% (и более) работы программиста - изобретение велосипеда, и это нормально.
Нет, я говорю именно о концепте.. Это нечто больше чем просто в лоб переписывать какие то решения..
Когда я говорю о бусте, я в первую очередь подразумеваю именно саму ту идеологию, которая там заложена.. Ну помните пример с токенайзером, со спиритом и т.д..? Я именно об этом..

И потом я не согласен с этим:
Цитировать
А я считаю что до 90% (и более) работы программиста - изобретение велосипеда, и это нормально.
   
Нет, когда вы пишите конечный продукт (как уже отмечалось ранее в комментах) на велосипеды вы будете тратить больше времени и это будет сложнее в сопровождении.. И не факт, что ваши велосипеды будут эффективнее.. ну хорошо, будут, но это исключительные ситуации, о которых я и говорил..


Название: Re: Изобретение велосипедов
Отправлено: vulko от Ноябрь 25, 2014, 10:01
Скорее слов вы привели много, к сожалению ничего не доказывающих.
А вот красивых решений на яве мы так и не увидили.

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

речь шла о плюсах и жабе. о разнице в них.

далее все скатилось в плоскость:
- а я плоскогубцами забиваю гвозди. а че, это удобнее, т.к. ими можно ещё и выдергивать гвозди.
- молотком забивать гвозди удобнее. молоток придумали специально для забивания гвоздей.
- нет, молоток шняга. плоскогубцы всяко удобнее. тем более что к плоскогубцам можно приварить завалявшийся ржавый молоток и будет вообще збс!
- так это же не плоскогубцы!
- мне пох, они удобнее.

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

с баранами спорить бесполезно, так что успехов и не пукайте ;)


Название: Re: Изобретение велосипедов
Отправлено: vulko от Ноябрь 25, 2014, 10:13
Ой, Old, оставьте, с кем вы спорите) Там дальше слов не уйдёт) Бесполезно ждать адеквата от того, кого учили понемножку: хоть как-нибудь, чему-нибудь..( Не удивлюсь, если он вас ещё в пятнах на солнце обвинит)  
Да я уже ничего и не жду. :)
Думаю, что других аргументов кроме "в библиотеке явы много всего и оно такое офигенное" мы не услышим.
Так же как и не увидим обещанного красивого и удобного ява-кода.
Угу.. Уже предчувствую N-ую волну троллинга о том, что буст и stl писали одни самозванцы одним неприличным местом.. Но vulko, конечно, как эксперту, лучше знать) Жаль, что его забыли спросить( Плюсы явно много потеряли без его авторитетного мнения(       

максимка, ты решил свое авторитетное мнение выразить по поводу жабы, с которой не знаком?))


Название: Re: Изобретение велосипедов
Отправлено: vulko от Ноябрь 25, 2014, 10:15
олд, и ещё. всё познается в сравнении.
ты можешь быть каким угодно специалистом в плюсах, но поскольку с жабой опыта нет, то и твои фразы типа в бусте все равно удобнее не имеют под собой никакого основания.


Название: Re: Изобретение велосипедов
Отправлено: Igors от Ноябрь 25, 2014, 12:40
Нет, когда вы пишите конечный продукт (как уже отмечалось ранее в комментах) на велосипеды вы будете тратить больше времени и это будет сложнее в сопровождении.. И не факт, что ваши велосипеды будут эффективнее.. ну хорошо, будут, но это исключительные ситуации, о которых я и говорил..
Почему Вы исходите из предположения что есть выбор? У меня его часто (в большинстве случаев) просто нет. Вот первая (и самая простая) подзадача:

Найти все пересечения полигонов в сцене. Не рассматриваем более сложный случай пересечения "с запасом". Также полагаем полигон = треугольник (хоть это и не так). Но число исходных полигонов ограничено только размерами RAM, т.е. может быть сколь угодно большим. Поэтому задействовать все ядра обязательно, и, конечно, скорость критична. Пересечение 2-х полигонов есть отрезок. В результате мы должны иметь/знать для каждого полигона какие отрезки его пересекают. Что с ними дальше делать - то уже следующая подзадача. 

Какие бустовские классы/инструментарий Вы для этого привлечете? Какова здесь роль концепта, философии буста? Вообще что можно использовать чтобы облегчить себе жизнь (неважно буст или нет)


Название: Re: Изобретение велосипедов
Отправлено: VPS от Ноябрь 25, 2014, 15:07
Вот с помощью boost делаю так:
Код
C++ (Qt)
namespace pt = boost::property_tree;
 
pt::ptree xml;
pt::read_xml( "file.xml", xml );
 
string v = xml.get<string>( "producer.item.<xmlattr>.name" );
int v = xml.get<int>( "producer.item.v" );
double d = xml.data<double>( "producer.item.d" );
 

Причем файл уже проверен на валидность. Если где ошибка или чего-то нет - получим исключение.
Не хотим получать исключении при отсутствии поля, добавляем к параметрам метода get значение по умолчанию.

Код
Java
import org.w3c.dom.Document;
import org.xml.sax.SAXException;
 
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
 
public class Solution
{
  public static void main(String[] args) throws ParserConfigurationException,
                                                IOException,
                                                SAXException,
                                                XPathExpressionException
  {
     String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
                  "<!DOCTYPE avset-list>" +
                  "<avset-list ver=\"1.0\">" +
                     "<producer name=\"Fuck, Inc\">" +
                        "<item name=\"Good shit\">" +
                           "<v>79</v>" +
                           "<d>8,0</d>" +
                        "</item>" +
                     "</producer>" +
                  "</avset-list>";
 
     try(InputStream is = new ByteArrayInputStream(xml.getBytes()))
     {
        DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
 
        Document doc = documentBuilder.parse(is);
 
        XPath xpath = XPathFactory.newInstance().newXPath();
 
        Object elements[]  = {
           xpath.evaluate("/avset-list/producer/item/@name", doc),
           xpath.evaluate("/avset-list/producer/item/v", doc),
           xpath.evaluate("/avset-list/producer/item/d", doc)
        };
 
        for(Object element : elements)
        {
           System.out.println(element);
        }
     }
  }
}
 

П.С.: немного потренировался на java.  :)


Название: Re: Изобретение велосипедов
Отправлено: Old от Ноябрь 25, 2014, 15:13
П.С.: немного потренировался на java.  :)
Вот же. Вот это и хотелось увидеть. :)
Спасибо.

Это не намного удобней boost, но хоть не тот трешак. :)


Название: Re: Изобретение велосипедов
Отправлено: kambala от Декабрь 04, 2014, 23:05
воскресим тему: http://s4.pikabu.ru/post_img/2014/12/04/11/1417719716_402585821.jpg


Название: Re: Изобретение велосипедов
Отправлено: m_ax от Декабрь 05, 2014, 00:53
воскресим тему: http://s4.pikabu.ru/post_img/2014/12/04/11/1417719716_402585821.jpg

Помню случай из жизни.. Сидим мы как то на ДР одной прекрасной дамы: вино, водка, закуска, тосты: всё как полагается, одним словом.. Но, чувствую, мне там скучно (не в своей тарелке, вообщем) и единственный человек, с которым мне там было интересно, в чьей квартире всё это и происходило - прозжённый меломан, а в прошлом ещё и тот ещё оверклокер - т.е. у них там доходило до такого, что чуть ли не до скальпирования процессоров.. Короче, в этом плане, чел для меня просто Бог.. И вот, зашёл у меня с ним разговор о порно.. Ну и конечно, я не мог не упомянуть о Саше Грэй.. Ну и конечно, первая реакция была: Фи.. мля.. и всё такое..
Но когда, я сказал, что у неё в прошлом была своя индастриал группа.. Всё изменилось)       


Название: Re: Изобретение велосипедов
Отправлено: kuzulis от Декабрь 05, 2014, 14:00
Цитировать
Ну и конечно, я не мог не упомянуть о Саше Грэй.. Ну и конечно, первая реакция была: Фи.. мля.. и всё такое..

Ой, да все они такие. Просто ищут "того самого".. Когда находят - вроде успокаиваются.. (до следующего того самого - единстенного). Да и деньжат подбить - тоже дело (10 мин позора и накормлена на неделю)! :)
И ничего такого "фи" нету - "это норма" (с)..


Название: Re: Изобретение велосипедов
Отправлено: Пантер от Декабрь 05, 2014, 14:06
kuzulis, а может, он выразил "Фи" ей, как актрисе порно. Типа, плохо играет свою роль.


Название: Re: Изобретение велосипедов
Отправлено: kuzulis от Декабрь 05, 2014, 14:09
Не, нормально она играет.. Плохо бы играла - никто бы о ней не грезил. :)


Название: Re: Изобретение велосипедов
Отправлено: Igors от Декабрь 05, 2014, 17:19
Вот чем заканчиваются попытки поговорить концептуально.

- удивленное пожимание плечами
- пережевывание разбора XML (это близко и понятно)
- холивар кто лучше: плюсы или жаба (с всеми вытекающими)
- и в конце-концов просто свалились а порнуху

Мда  :)   


Название: Re: Изобретение велосипедов
Отправлено: kambala от Декабрь 05, 2014, 18:39
для хэппи энда можно добавить котят


Название: Re: Изобретение велосипедов
Отправлено: Old от Декабрь 05, 2014, 18:41
для хэппи энда можно добавить котят
Тема сисек не раскрыта же.