(401) Lokiy, При перевыборке данных из базы локальные данные становятся не актуальными и соответственно ссылки тоже, для того что бы остаться на той же строке, нужно использовать ключевые поля базы, и после выборке данных, в локальном наборе выполнять позиционирование по ключу. Если мне память не изменят SwapCursoк как раз реализовывает такой механизм.
(405) alex_sh2008, Ну я видел что google объявил cursor.requery() deprecated, потому что там какие-то проблемы с синхронизацией у него были. Но вникать некогда, работать надо :)))
(410) Lokiy, У тебя выборки данных не большие, по пробуй с большими данными работать. Использовать глобальные серверные курсоры не очень экономично, получается что у тебя в памяти одновременно два набора данных и серверный и локальный.
(411) alex_sh2008, Дак это понятно, я когда большие то выборки делал понятно делал по нормальному через cursorLoader и loadInBackground , а тут я в базе просто данные по разблокировке иконок храню в одной таблице и при появлении окна диалога их надо прочитать и показать какие разблокированы, какие нет, ну и для этого использовать асинхронную загрузку мне показалось странноватым.
(416) alex_sh2008, всмысле ? а разве ListView берет данные не из этого курсора ?
ну т.е. вот получил я курсор, передал его в адаптер, когда у меня появилось 2 набора данных ?
ну т.е. в следующий раз когда я перечитал курсор, то да, появилось, я согласен, дак а тут какие варианты то если я в тот же курсор не могу перечитать ? старый закрыл, перечитал, сделал swapcursor. Или я не догоняю чего-то ?
(417) Lokiy, Я тебе написал из той информации которую ты предоставил, смотри реализацию класса ListView, как он использует интерфейс связи с серверным курсором, подозреваю что закачивает в себя все данные или по странично, смотря как ты прописал ему.
(418) alex_sh2008, да ну ты гонишь, ListView вообще не хранит курсор, оно хранит вьюшки, а курсор хранит CursorAdapter а в CursorAdapter таже самая ссылка, пока я не перечитаю курсор в эту переменную.
вот что происходит в исходниках BaseAdapter
void init(Context context, Cursor c, int flags) {
mCursor = c;
}
взял да запомнил ссылку на переданный курсор, с ним и работает дальше.
я даже столкнулся с тем что прочитал курсор - передал в адаптер, произошел вывод на экран,
курсор который объявлен в глобально в диалоге, оказался прочитанным на последнюю запись, т.е. адаптер его прочитал до конца, пока вывод делал.
(420) Lokiy, Я не сказал что ListView хранит курсор, я сказал что ListView хранит у себя выборку данных из курсора, вот и получается два набора данных, 1 в курсоре, 2 в ListView, а адаптер служит для синхронизации этих двух наборов.
(422) alex_sh2008, да не, ListView хранит уже готовые вьюшки, которые на базе данных были построены. Ну дак если мне нужно обновлять данные из базы в процессе жизни ListView мне один фиг приходится хранить курсор, какие еще варианты то ? Причем сборщик мусора не убъет созданные курсор, пока он связан с адапретром потому что адаптер ссылку хранит.
ListView мне один фиг приходится хранить курсор, какие еще варианты то ?
Создать курсор, выгрузить данные в промежуточный массив, закрыть курсор и соединение с базой данных, а потом использовать локальный массив, тем самым ты высвободишь кучу памяти. И не забывай память для курсоров выделяется по умолчанию не в приложении а на сервере sql.
(425) alex_sh2008,в Android sql сервера то нету :) это же база sqlLite внутри приложения. я конечно не совсем уверен как sqlLite реализована на уровне dalvik, Но судя по тому что для работы Cursora И ListView Google специально сделали CursorAdapter и в принципе им все пользуются, то не так там все страшно, как ты описываешь.
(430) Lokiy, Для всех серверов есть реализация через курсоры,а sqlLite одна из реализаций сервера, у Microsoft ведь тоже есть такая же редакция, но это не отменяет того что это сервер. И да использование курсоров с адаптерами, это наиболее простой и быстрый способ написания приложений, не нужно думать об оптимизации и производительности, создал 3 объекта, связал их и в путь, даже не нужно знать как они работают.
ну т.е. в следующий раз когда я перечитал курсор, то да, появилось, я согласен, дак а тут какие варианты то если я в тот же курсор не могу перечитать ?
Если ты связал серверный курсор c ListView ты уже не можешь какие то операции делать над курсором, все операции делаются только на уровне ListView.
(421) Lokiy, Это реализовано во всех системах одинаково, вопрос в реализации, есть серверная реализация, а есть локальная, сами по себе курсоры делают только последовательную выборку, что бы использовать в списке ListView, нужно выгрузить все данные в промежуточный кэш, которые создает ListView. В локальной же реализации, создается курсор, данные качаются в промежуточный массив и курсор закрывается, тем самым высвобождая память, под соединение с базой данных.
(424) alex_sh2008, т.е. ты хочешь сказать что передавать в ListView данные через CursorAdapter это вообще неверно в корне, потому что курсор остается открытым пока адаптер живет.
Это один из вариантов реализации представления данных, и да в таком варианте курсор остается открытым пока есть связь через адаптер. Обычно такую реализацию используют когда необходимо изменять данные.
Прежде чем определять объем потребляемой памяти, следует разобраться, что же JVM хранит для каждого объекта:
Заголовок объекта;
Память для примитивных типов;
Память для ссылочных типов;
Смещение/выравнивание — по сути, это несколько неиспользуемых байт, что размещаются после данных самого объекта. Это сделано для того, чтобы адрес в памяти всегда был кратным машинному слову, для ускорения чтения из памяти + уменьшения количества бит для указателя на объект + предположительно для уменьшения фрагментации памяти. Стоит также отметить, что в java размер любого объекта кратен 8 байтам!
Структура заголовка объекта
Каждый экземпляр класса содержит заголовок. Каждый заголовок для большинства JVM(Hotspot, openJVM) состоит из двух машинных слов. Если речь идет о 32-х разрядной системе, то размер заголовка — 8 байт, если речь о 64-х разрядной системе, то соответственно — 16 байт. Каждый заголовок может содержать следующую информацию:
Маркировочное слово (mark word) — к сожалению мне так и не удалось найти назначение этой информации, подозреваю что это просто зарезервированная на будущее часть заголовка.
Hash Code — каждый объект имеет хеш код. По умолчанию результат вызова метода Object.hashCode() вернет адрес объекта в памяти, тем не менее некоторые сборщики мусора могут перемещать объекты в памяти, но хеш код всегда остается одним и тем же, так как место в заголовке объекта как раз может быть использовано для хранения оригинального значения хеш кода.
Garbage Collection Information — каждый java объект содержит информацию нужную для системы управления памятью. Зачастую это один или два бита-флага, но также это может быть, например, некая комбинация битов для хранения количества ссылок на объект.
Type Information Block Pointer — содержит информацию о типе объекта. Этот блок включает информацию о таблице виртуальных методов, указатель на объект, который представляет тип и указатели на некоторые дополнительные структуры, для более эффективных вызовов интерфейсов и динамической проверки типов.
Lock — каждый объект содержит информацию о состоянии блокировки. Это может быть указатель на объект блокировки или прямое представление блокировки.
Array Length — если объект — массив, то заголовок расширяется 4 байтами для хранения длины массива.
фигню всякую обсуждаете,
лучше скажите как Ссылку на Listener в DialogFragment при повороте экрана сохранить/восстановить. Вот это проблема из проблем.
Ну т.е. условно
Мы создали диалог, в нем описали интерфейс, в конструктор передали собственно того, кто диалог вызвал, применив ему интерфейс.
public class UnlockDialog extends DialogFragment {
public interface OnUnlockCallback {
void onLinkUnlock(String link);
}
public UnlockDialog(OnUnlockCallback callBack) {
this.callBack=callBack;
}
}
Показать
И вот тут этот гад пользователь - поворачивает мать его экран.
И диалог, создается вновь через пустой конструтор.
А сохранять в методе
public void onSaveInstanceState(Bundle outState) {
outState.putString("linkToPreview",linkToPreview);
super.onSaveInstanceState(outState);
}
Ну т.е. вот так, условно внутри Activity вызывается этот диалог, и внутрь него, передается ссылка на это активити (типа владельца диалога). А когда диалог закончит что-то там делать, об этом надо оповестить Acivity. Все это работает нормально, если экран не поворачивать. А вот если повернуть Экран, то Фрагменты в Android восстанавливают свою структуру сами типа, как были, но через пустой конструтор new UnlockDialog(), ну и соответственно туда ссылка на Acivity Не передается, и типа забывается...
public class TaskSettings extends ActionBarActivity implements OnUnlockCallback {
UnlockDialog dlg1 = new UnlockDialog(this);
dlg1.show(getFragmentManager(), "dlg1");
}
(506) alex_sh2008, хм...надо попробовать, угу... мысль верная. Хотя ведь ведь фрагменты восстановив структуру уже создадут этот диалог, как я его найду :(... надо подумать.
(508) Lokiy, Ну если по большому счету то вроде как менеджер окон Android, не восстанавливает модальные окна, они же не попадают в общей контейнер главного окна.
(511) alex_sh2008, восстанавливает восстанавливает. Это раньше в 2.2 не восстанавливал, потому что они были как бы отдельно открыты, а с 3.0 с появлением фрагментов внутри одной Activity, диалоги восстанавливаются, там в них даже нужно специально создавать пустой конструтор, иначе приложение падает в исключение при повороте экрана.
(521) Lokiy, Значит есть подозрение что вы где то с логикой что то напутали, может не в том событии открываете диалог, я не знаю библиотеки, которые вы используете сказать точно не могу.
(525) alex_sh2008, ты бы видел как я после 1С, написал первое приложение :))) это такой ад, я даже боюсь туда щас смотреть и что-то в нем дописывать :(
А потом попробовал написать текстовый квест, и вообще бросил, запутавшись в архитектуре :)))
щас уже значительно лучше стало :)))
(526) Lokiy, Создание на Java приложений требует архитектурных подходов, в 1С за нас думает фирма 1С. Очень сложно переходить с языка 1С на более структурированные и архитектурно жесткие языки программирования. Мне повезло я перешел на 1С после С++ (PowerBuilder) и C# (ASP.NET), после недели отменной матершины привык к стилю написания кода в 1С.
(527) alex_sh2008, Да это понятно. Еще для меня было открытием, что если ты хочешь формочку, которая будет интуитивно работать и не выглядеть, как адское ггг.., над ней сидеть приходится часами по 10ку раз переделывать :))) А зачастую еще и иконки перерисовывать :)
В 1С-то просто, редко такое бывает что ты сидишь и тупишь над формой, чтобы у тебя кнопка адекватно срабатывала :)
Хотя с другой стороны в 1С и не продукт делаешь, а формы для внутреннего пользователя.
(531) alex_sh2008, Я в последнем приложении, даже дизайн документ изначально составлял, со всеми формами, окнами, которые должны быть, но по итогу получилось вообще все другое :) Пробовал сделать как планировал, сделал, смотришь в живую, щупаешь, не нравится, переделываешь. Но вообще именно сам дизайн документ помогает поначалу, хотя бы сделать удобоваримую общую структуру.
(532) Lokiy, В чем и есть преимущество концепции интернет дизайна, разрабатываешь общий макет формы, а потом наполняешь его блоками, и в свою очередь эти блоки можно наследовать, тем самым меняя вид приложения в зависимости от условий, и программировать в целом приложение становится проще.
(533) alex_sh2008, мне вот так-то еще надо бы с кем-нибудь более опытным совместный проект пописать, но че-то пока не судьба видимо. Сам в своих мыслях варишься - это плохо.
(534) Lokiy, Это потому что ты программируешь свое приложение по принципу как в 1С, а надо выкинуть 1С из головы и писать приложение исходя из концепции создания приложение на OOП языках.
(535) alex_sh2008, Да не, я все равно уже от принципов 1С отошел на самом деле. Уже в 1С целый год ничего не писал :) Последнюю халтуру на 1С сделал в июле 2014. Я даже названия переменных с большой буквы перестал писать :)))
(536) Lokiy, Но создаешь приложение так же как в 1С, без обдумывания всего приложения целиком, а потом на определенном этапе переписываешь почти весь код приложения.
Для примера посмотри как реализовали свой движок здесь: http://www.orchardproject.net/ Хороший пример то как надо выстраивать архитектуру целого приложения, и кстати применить можно не только к сайтам.
Я кстати пару популярных библиотек для пикеров смотрел на Android, там таже проблема, никак не решена, если при вызванном диалоге повернуть экран приложения, то он не возвращает ничего.
Так что-то тут все заглохло, давайте я подкину простенькую задачку :)
Сел я тут разбираться с UV текстурированием, ладно с горем пополам в блендере я получил вот такую картинку:
http://www.dropbox.com/s/btof76k1prswc2b/uvtest.png?dl=0 Блендер на выходе мне дал условно 4 массива:
вертексы геометрии:
v -1.000000 1.000000 -1.000000
v -1.000000 -1.000000 -1.000000
по сути индексов на самом деле 3 массива, первая цифра на геометрию, вторая на текстуры, третья на нормали...
Но беда в том, что на вход в openGL я могу передать только один индекс, а тут 3.
stackoverflow говорит: You must reorder the texcoords and vertices such that they share the same index. You cannot use a separate index for different attributes.
т.е. нельзя мне чтоб индексы были 2/1/1 3/2/1 надо, чтоб были 2/2/2 3/3/3 и т.п. и вот тут че-то я не вкуриваю с какой стороны зайти... Пока только придумал тупо отказаться от индексов, тупо по индексам получить все координаты и ими пользоваться, но вроде как некошерно.
(538) Lokiy, Тогда есть вариант что при расчете матрицы вы задали условия не соответствующие исходному оборудованию, может задали не для матрицы смартфона, а матрицы компьютера.
(539) alex_sh2008, не не, там вообще оборудования не участвует еще, это небольшая нестыковка спецификаций форматов. Просто wavefront (obj) предполагает использования 3х массивов индексов, а openGL один, вот и все.
Я сделал без индексов работает в принципе , надо будет собраться пересчет индексов написать.
P.S. кстати ищу кого-нить кто мечтает посвятить время на копание с 3d графикой на Android без сторонних движков :) че-то так скучно одному :) могу там помочь сказать с чего начать, что курить... чтоб как я не пытаться воткнуть в мануалы в которых вообще мозг сломаешь, кое как сделаешь и ничего не поймешь :)
(540) Lokiy, Я бы и рад подключится но работы и так хватает, а вчера вносил изменения в программу на C#, и с дуру обновил библиотеки, дак пришлось код частично переписывать, вдруг инструкции которые раньше работали перестали работать)
(542) fzt,) я когда начинал ввел себе правило - день в неделю работы над android приложениями не взирая на спешность и срочность задач работодателя :) иногда, с 9 до 11 работа над андроид приложениями, с 11 до 18 по проектам :) И причем нормально, я даже скорость работы не упала, потому что в голове сидела мысль, что вместо того чтоб там расслаблятся, нужно выполнять хорошо и быстро основную работу, потому что на нее теперь меньше времени. Лишний раз мисту не пойдешь почитать, там лишний раз втыкать проакрастинировать себе не позволишь и нормально.
сегодня сгонял на собеседование http://www.rabota66.ru/vacancy/company/203479 че-то я не доволен результатом, так себе я показал, про многопоточные нагруженные системы ничего не знаю,
серьезных игр с огромными объемами текстур не писал :(
максимум предложат juniora :( а было бы неплохо окунуться в геймдев, но не за 45 тыщ в месяц :(
зато пока ездил, понял че у меня в машине стучит и починил за 100 рублей :) а жена все...тачка старая, то одно то другое, то там стучит то там... надо новую...100 рублей - и все...ездим дальше :) какая еще нафиг новая тачка :)
P.S. надо завести бложек.
(547) Семёныч, ну я вроде как перешел мобилки :) java + android sdk, в 1С с мая 2014 не заходил. Правда никуда пока по серьезному не устраивался, один работаю. Так ради прикола был на 3х собеседованиях.
На одном предложили 50к в месяц в ЕКБ (1сником 65 предлагали), я забил.
В одном месте сразу на собеседовании сказал что мне неинтересно, то что они делают - там специфическая разработка, под их подзаказ сделаный девай и нужно копаться на уровне железа , с++ и драйверов, я подумал , что потом эти навыки неприменимы больше нигде.
Ну и вот online игрушку делать не взяли :) потому что мало опыта обычной джавы и мало опыта по работе с графикой и текстурами.
Но я больше ради прикола на эти собеседования хожу... скучно... сидишь один как дурак в 4х стенах :) так хоть можно походить, людям попоказывать что умеешь, какую-то обратную связь получить :))) Ну и мало ли что-то очень интересное попадется, можно будет вписаться.
Вобщем я что имею в виду - в мобилках сейчас не такая прям сложность знаний и разработки требуется, чтобы ее невозможно было охватить, сфера достаточно новая, поэтому еще не такой катострофический объем наработанного существует, всяких там фреймворков и прочего... а базу азы java + Android SDK + Support library изучить за год реально. И цены ошибки/отсутствия опыта ниже, потому что все же это font end, нет тут высоконагруженных серверов и не требуется серьезная оптимизация (исключение - 3d графика, или 2d с огромным объемом текстур)
P.S. мне 33, ковырять Android Я начал где-то в 30.
P.S.2 Зацените какую я штуку на openGL сделал :) http://www.youtube.com/watch?v=MYjC9Bm3eVk
В этой статье мы расмотрим расширение для Visual Studio под наванием 'C#/XAML for HTML5'. Данное расширение позволяет транслировать имеющийся код на C# и XAML в код HTML5+JavaScript. Благодаря подобной трансляции мы сможем создавать на C# приложение, которое после трансляции в JavaScript будет запускаться и на тех платформах, где .NET по умолчанию не поддерживается и где есть поддержка HTML5 и Javascript - Android, iOS, Mac, Chromebooks, Linux, Windows и т.д. То есть по сути у нас получается гибридное приложение.
Visual Studio 2015 позволяет использовать единую кодовую базу для разных программно-аппаратных платформ. Таким образом, разработчик может писать код на C#, и он будет одинаково успешно выполняться на различных устройствах с разными операционными системами. Это стало возможно благодаря использованию инструментов Xamarin, теперь они интегрированы в Visual Studio 2015 в качестве расширения, имеющего соответствующее название — Xamarin for Visual Studio. Инструменты Xamarin скачиваются и устанавливаются во время создания проекта, его использующего.
На данный момент интеграция еще отсутствует, но ты зацени, насколько удобно все это в идеале должно получиться: GUI ты готовишь для каждой платформы отдельно, но код, несущий основную смысловую нагрузку (функциональность), пишется единожды, на языке C#. Твое приложение будет исполняться одновременно под Windows, Windows Phone, Android, iOS! Конечно, опять-таки в идеале — на данный момент Xamarin for Visual Studio обслуживает не все указанные платформы.
В числе дополнительно устанавливаемых компонентов Visual Studio 2015 Preview (выбирается на второй стадии инсталляции) есть Apache Cordova — инфраструктура для создания кросс-платформенных мобильных приложений, использующих HTML5 и JavaScript. Cordova представляет собой «контейнер» для веб-приложения, позволяющий последнему использовать системные API конкретной операционной системы, в которой он выполняется. Другими словами, Cordova предоставляет интерфейс для управления конкретной операционной системой из языка JavaScript. Это делает приложение кросс-платформенным: код на JavaScript, выполняющий полезную нагрузку, один, но в каждой системе для него используется своя инфраструктура. Такие условия прекрасно подошли для множества разных мобильных операционных систем, в том числе Windows Phone, iOS, Android, Bada, Tizen, BlackBerry, Symbian. Таким образом, Cordova для каждой платформы создает исключительный (предназначенный для конкретной операционной среды) исполняемый модуль, например для Windows Phone это архив XAP. Исполнение веб-контента из такого архива осуществляется встроенным в определенную систему веб-браузером. Как было упомянуто, Visual Studio 2015 поддерживает данную технологию из коробки, при условии установки соответствующего модуля. Visual Studio 2015 Preview послужит разработчикам при написании кода на JavaScript, тут имеются и соответствующий IntelliSense, проводник DOM, для отладки JavaScript-кода можно устанавливать точки останова, просматривать значения переменных и так далее.
Долго, т.к. 1С заставляет на себя обращать внимание постоянно. Кроме того пришлось изучать смежные технологии, такие как php, ajax
Как побочный продукт получился сервис по определению цепочек обновлений релизов 1С.
(575) Ibrogim, " Решил далеко от 1С пока не отплывать ) "
Я думаю что это твоя ошибка, ты этим жестко ограничил аудиторию своего приложения.
Я бы так сказал, ну не для того же ты изучаешь java и андроид, чтобы работать с теми же людьми и теми же пользователями :)
(577) Ibrogim, Самый простой способ - это сделать что-то что уже есть и востребовано, но в каком-то аспекте лучше. Это рабочий способ. Просто поищи что бы ты хотел сделать из существующего и в чем бы ты это изменил. А иногда работает просто сделать что-то что уже есть, но ты просто хочешь это сделать сам :) Это тоже нормальный подход :)
Это совсем как-то... ну ты и сам понимаешь ...в общем.
Короче регайся на степике, записывайся на всякие курсы по жабе. В конце получишь свои серты. В резюме пишешь тупо - "был инженером" (ведь программисты туда же), з/п скручивай 30% процентов, главное не упоминай 1С, только серты свои показывай. Вуаля - вот они предложения. Студенты не только тупые, они ведь еще и как дети, понимаешь?
(578) ture, да вроде ни кто к бывшим 1Сникам не относится с предубеждением :)
Я ходил по собеседованиям в ЕКБ на андроид разработчика - просто показывал свои приложения которые делал. В общем надо просто партфолио небольшое сделать да и все... вперед.
(581) Lokiy, уверен?
Я не мог пройти "работодатель не готов сделать вам предложение", пока не убрал упоминания 1С. Может и стечение обстоятельств, но я четко понял, что надо помалкивать об 1С... пою песенку про SQL и отчетность.
(583) ture, Ну как сказать уверен. Я видел по реакции собеседующего что он просто это не засчитывал в практический опыт :) Но такого чтобы фу бывший 1Сник не было :)
С другой стороны я по собеседованиям ходил просто прощупать спрос, в принципе отказался один раз, ходил на штуки 3 собеседования. На одном договорились на сдельную работу за проект, но потом они видимо нашли дешевле :) На втором я не потянул по серьезному собеседование потому что там чуваки серьезную ММО делали и как давай меня гонять по многопоточности в java, а я не бум бум...ну т.е. я в 2 потока конечно писал приложения :) а они спрашивали какие бывают проблемы когда файлы читают в 200 потоков :) На третьем в принципе готовы были взять, пришлось отказываться. Тут они хотели делать приложение для панарамной съемки для телефона собсбтвенной разработки под android.
Java - это хорошо. Работы в действительности много: и мобильная разработка, и фронтэнд-решения для бизнеса (и экономические знания не нужны совершенно, что для начинающих явный плюс). Мобильный сегмент сейчас самый быстрорастущий и темпы роста в нем будут только ускоряться, ибо количество проданных PC стремительно снижается, а вот количество проданных планшетов и телефонов только растет. Для любого устройства нужны программы и java для мобильной платформы на базе андорид-устройств - самое то. На Objective C++ можно и побольше заработать, разрабатывая под iOS, а доля Win Phone в 5% рынка заставляет усомнится в выгоде от изучения C#.
Также стоит отметить, что тенденции несколько смещаются. Для разработки iOS-приложений появился язык Swift от Apple, Google активно работает над языком Go. Оба с полностью открытым исходным кодом. Последний вообще работает на любой платформе, хотя, полагаю, первый тоже это может. Есть куда стремиться, да? ))
(564) Xershi, план в чем? А по поводу языков, то я мало различий между ними вижу, поэтому могу писать на любом околоклассическом языке: от паскаля до java-script. Ассемблеры для различных процессоров, для х86 на ассемблере почти 20 лет назад писал много, до этого на ассемблере Macro-11 тоже много было написано.
(566) Xershi, синтаксис всех чего? Языков или ассемблеров?))) Синтаксис -это лишь договоренность о том, как описать ту или иную операцию. Все программирование сводится к операциям присваивания, ветвлению и циклам. Вызрвы процедур и функций и объектная модель - это не более, чем дополнение доя повторного использования кода и его структурирования. Принципы везде одинаковые. Остальное упирается в типизацию. Для фугкциональной парадигмы существует свой набор договоренностей, отталкивающихся от того, что программа - это функция к входным данным.
Синтаксис -это лишь договоренность о том, как описать ту или иную операцию
В общем-то так и есть. В итоге все приведется к машинном коду. Только в зависимости от языка код будет разный. И у разных языков свои ограничения и возможности.
(569) Xershi, наработанные навыки сводятся к использованию тех или иных библиотек. Вот, например, разработка интерфейса на базе gtk, хранилища данных на базе библиотек доступа к СУБД, сетевого взаимодействия, прочего. Я на linux в с++ вполне данный момент освоил. Ну а зная плюсы легко делать что-то и на php или java - синтаксис у них похожий. По крайней мере что-то написать для андроид простое для меня труда не составляет. Мне труднее придумать идею, чем воплотить ее.
В конце 90-х я достаточно много софта писал на Borland Pascal под защищенный режим DOS. Там уже вся память была доступна, но было ограничение в 2^16 переменных. Все было написано на 100% в объектной модели, а пользовательский интерфейс на assembler'е (текстовый с псевдографикой и переопределением шрифтов, и графический на VESA 800х600х256), включая синхронизацию с экраном (команда wait) и звуковое сопровождение через sound blaster (или как его там?))).
Потом были разработки на delphi, где был в частности реализован прикладной объект, способный отображать себя в любом видимом списке - там в коллекциях listbox и прочих можно было хранить объекты с соответствующими методами для отображения себя на выделенной списком канве элемента.
Сейчас вот многопоточностью и исследованиями субд занимаюсь - тоже интересно. В основном на php и c++.
Вы всё строите планы? ...так можно вообще не рыпаться.
Да, стартовать с нуля, грызясь со студентами за место под солнцем и преодолевая выдурь HR. А вы что думали? сразу в дамки? ломать - не строить! Но ведь и ломаем мы не от хорошей жизни, т.ч. - дорогу осилит идущий!
Надо еще сходить :) хоть кому-нить расскажу какие я клевые приложения делал :))) посмотрю реакции :)))
А то просто так-то никому не интересно :(
А на собеседовании им придется меня выслушать :)))