alhames.ru
Друзья, я вот уже лет 5 занимаюсь программированием на PHP, и по совместительству иногда пишу на Javasсript.
Но вы наверное сами понимаете что в силу специфики языка круг задач, которые на нем можно решить весьма ограничен.
Так вот, уже давно возникла необходимость изучения чего-либо еще.

К примеру, 2 задачи:
- есть сервер, на котором размещено некоторое количество изображений (например, 1 млн). Пользователь загружает произвольное изображение и нужно найти все совпадения с ним на сервере (аналогия - поиск по картинке на гугле).
- приложение под андройд для чтения RSS-лент.

Соответственно, в первом случае ОСью будет CentOS 6.4 (к примеру), а во втором Android 4.1.
Вопрос: чем бы вы воспользовались для реализации данных задач? Какие ресурсы использовали бы? Где можно найти справочные материалы, причем желательно чтобы в них было освещено большинство нюансов, а не пришлось бы потом судорожно гуглить решение проблем, которые обязательно вылезут (а как же без этого).
Вообщем, хочется услышать ваше мнение. В первую очередь тех, кто пишет приложения под андройд, либо под высоконагруженные веб-серверы.

@темы: Вопрос, Точка зрения

Комментарии
05.04.2013 в 14:57

There I was on a July morning, Looking for love
alhames
Поиск похожих картинок - как я понимаю, это будет так, что загружая картинку человек указаывает теги для нее, а потом подтягиваются картинки с такими же тегами ?
Если так, что я бы решал задачу на Sphinx - при поиске похожих картинок чтобы он возвращал картинки, имеющие те же теги или совпадения по тегам в виде их айдишников.
Ну или на Мемкешеде - держать в нем с ключем по ID тега список айдишников картинок имеющих этот тег. Надо думать короче.
05.04.2013 в 15:18

この世界は。。。いいですか?
SpiritEagle, да нет, похоже, дело не в тегах а в анализе самого изображения.

alhames, С++ в обоих случаях. Под Андроид - с библиотекой Qt, под центос можно и на чистом.
05.04.2013 в 15:26

alhames.ru
SpiritEagle, не, не так =)
Вот так - tineye.com
Как я вижу примерный алгоритм:
- пользователь загружает изображение (к примеру, JPEG)
- скрипт анализирует изображение и вычисляет некие хэши
- по этим хешам происходит поиск по базе
- в базе хранятся пути к этому самому миллиону картинок, и если что-то совпало, то мы показываем найденное пользователю.

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

Скажем так - возможно сам поиск я никогда и не сделаю, но тем не менее хотелось бы полностью понимать как его реализовать, скажем, на C++
05.04.2013 в 15:43

alhames.ru
nio, С++ в обоих случаях. Под Андроид - с библиотекой Qt, под центос можно и на чистом.
Вот, собственно, я и склоняюсь к C++. Во многом потому что что-то пытался делать на нем в студенческие годы. Хотя говорят Pyton тоже неплох..

Собственно, где найти справочную информацию? Что в первую очередь стоит прочесть?
Если провести аналогию с PHP, то прежде чем на нем начинать что-то делать, нужно как минимум знать как устроен веб-сервер, как передаются данные и т.д.
Синтаксис языка - это уже дело десятое. С ним то как правило проблем не бывает.
05.04.2013 в 16:55

この世界は。。。いいですか?
Бьярн Страуструп.
Макс Шлее.

Этого хватит на первое время.
Конечно же, что-нибудь по алгоритмам надо будет почитать, но это уже потом.

Python
Интерпретаторы? Фи.
05.04.2013 в 17:39

alhames.ru
nio, спасибо! После прочтения я к вам скорее всего еще обращусь :)
05.04.2013 в 18:03

IDDQD - Команда молодости нашей, команда, без которой мне не жить.
Под андроид все-таки лучше Java. Из ресурсов - лично я для старта пользовался developer.android.com и stack overflow.
05.04.2013 в 18:19

Пау-чок
С++ в обоих случаях.
А если не C++, то следующий на очереди - haxe в обоих случаях.
05.04.2013 в 18:31

alhames.ru
Flex Ferrum, Под андроид все-таки лучше Java.
Охватить сразу несколько языков не удастся, поэтому хотелось бы писать и под веб-сервервер и под андройд на одном. По крайней мере для начала.
Java, насколько я знаю, далеко не самый быстрый язык, потому не очень хочется за нее браться :)

O, А если не C++, то следующий на очереди - haxe в обоих случаях.
с haxe ни разу не сталкивался, поэтому даже не знаю что это за зверь :)
05.04.2013 в 19:44

Пау-чок
alhames, тогда советую хотя бы мельком взглянуть: haxe.org/doc/intro
05.04.2013 в 20:20

IDDQD - Команда молодости нашей, команда, без которой мне не жить.
Охватить сразу несколько языков не удастся, поэтому хотелось бы писать и под веб-сервервер и под андройд на одном. По крайней мере для начала.
Java, насколько я знаю, далеко не самый быстрый язык, потому не очень хочется за нее браться :)

alhames, на самом деле, обе задачи - достаточно нетривиальны. Подходить к выбору языка и платформы для них нужно достаточно осторожно. И если в первом случае C++ ещё может подойти, то вот начинать изучать программирование под Android на C++ - это устраивать себе головную боль. Потому что "нативной" (и рекомендуемой) платформой для разработки под Android является связка Eclipse + Java SE + Android SDK. Примеры в гайдах и туториалах - на Java. Поскольку писать вы решили не игру (где скорость кода может стать проблемой), а приложение с богатым пользовательским интерфейсом и логикой, то C++ тут сможет вызвать скорее проблемы, чем поможет "быстро начать". В целом, на "бытовом уровне" Java и C++ в достаточной степени похожи, чтобы это вызвало проблемы в освоении новых языков и технологий.

Кроме того, вы уже выбрали две весьма далёкие друг от друга области - высоконагруженный веб-сервис, где вы с головой погрязните в алгоритмах, многопоточности, распределении нагрузки и т. п. И мобильную платформу, где основной фокус - на GUI и юзабилити.
05.04.2013 в 21:07

alhames.ru
O, ок )

Flex Ferrum, хорошо, учту, когда доберусь до Андройда. Всеже приоритетной задачей является разработка серверного ПО.
RSS-ридер - это был просто банальный пример программы, которую можно было бы написать в ознакомительных целях. Да, планов игры писать у меня нет, и тут андройд по большей части нужен для полного понимания всего механизма клиент (планшет/телефон на дройде) - сервер. Соответственно и с GUI заморачиваться врятли буду.
05.04.2013 в 21:22

IDDQD - Команда молодости нашей, команда, без которой мне не жить.
RSS-ридер - это был просто банальный пример программы, которую можно было бы написать в ознакомительных целях.
Я тут вот тоже решил написать простую программулину под Android "в ознакомительных целях". :) Суть - небольшая БД + GUI для доступа. Думал, справлюсь за день-два. Эстимейшен оказался сильно заниженным.
05.04.2013 в 22:04

alhames.ru
Думал, справлюсь за день-два.
xD Я не настолько скорописный, мне понадобится дня 3.. )))
На самом деле торопиться особо некуда - это тот самый редкий случай, когда важнее качество, чем скорость :)
05.04.2013 в 22:08

IDDQD - Команда молодости нашей, команда, без которой мне не жить.
На самом деле торопиться особо некуда - это тот самый редкий случай, когда важнее качество, чем скорость :)
Вот и я тоже так решил. :D