Задать вопрос
  • Почему свойства наследуемого класса сохраняются в базовом?

    Компилятор выделяет под new A память для хранения всех производных классов?

    конечно нет, он не знает всех производных классов, если вы напишете new A то вам и выделят память под объект типа A.

    Другое дело что в вашем примере вы выделяете память под объект типа B, а не A:
    A* a = new B(2);

    так что не очень понимаю ваше удивление, вы выделили памяти достаточно.
    Ответ написан
    Комментировать
  • В чем отличие forward_list::iterator от _Fwd_list_iterator?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Дело в том, что по конструкции
    std::_Fwd_list_const_iterator<T> cur
    компилятору понятно, что перед cur -- имя типа. Во втором случае что такое const_iterator можно будет понять только в точке инстанцирования cur. Поэтому компилятор просит добавить строгости, в виде ключевого слова typename. Всё правильно делает.
    Ответ написан
    1 комментарий
  • В чем отличие forward_list::iterator от _Fwd_list_iterator?

    @malerix
    Компилятор вам подсказывает: нужно добавить "typename".
    Вот тут можно почитать об этом.
    Это работает:
    #include <forward_list>
    template<typename T>
    class Foo
    {
        typename std::forward_list<T>::const_iterator cur;
    };
    Ответ написан
    1 комментарий
  • Есть сервис для того, чтобы научиться бегло понимать английскую речь?

    Мне очень нравится duolingo.com. Он бесплатен, у него отличный дизайн и хорошая идея:
    1. Проходите ряд бесплатных курсов с интерактивными упражнениями.
    2. Участвуете в краудсорсинговом переводе текстов, улучшая свой навык языка.

    Если же говорить именно о восприятии на слух, то у меня всё сложилось следующим образом:

    а. Начал с просмотра фильмов строго на английском. Смотрим с субтитрами, ставим на паузу и переводим. Да, неприятно поначалу, но вы решите: вы учите или ищете "новые способы". Если учите, то смиритесь с напрягом на первые несколько фильмов. Уже на 5-м, скажем, увидите прогресс: останавливать надо будет заметно реже. Довольно быстро вы начнёте получать новое удовольствие от просмотра в оригинале. Мне иногда говорят: но я же не понимаю по английски, как смотреть? А я отвечаю: что за проблема, если вы не поймёте половину фраз в фильме? Вам хоть один просмотренный фильм хоть что-то дал, при полном понимании сказанного в нём? То-то.

    б. Дальше пошло чтение, начиная с простого и увеличивая сложность. На андроиде удобно читать, есть интеграция со словарём. Я использую FBReader + GoldenDict.

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

    г. Аудиокниги и подкасты - это шикарно. Потому, что вы можете учить язык каждый день часами: в дороге, во время пробежки и так далее. Аудиокниги качайте на торрентах. Ну, можете взять одну бесплатно в Audible. Клёвые подкасты: 99% Invisible, Freakonomics, NPR Planet Money, NPR Ted Radio Hour, The Moth. Тысячи их.

    Вообще, советую не париться и слушать речь. Вы будете волноваться оттого, что ничего не понимаете. Не волнуйтесь и продолжайте слушать. Понимание придёт со временем, сами удивитесь. Собственно, дети именно так и учат, что даже потом становятся теми самыми "носителями", а нам, взрослым, проще, есть жизненный опыт.

    P.S. Я свободно говорю и пишу на англйиском, в ряде контекстов мне вообще всё равно, на каком языке говорить. Таким же способом учу немецкий, на котором могу изъясняться через пень-колоду. Английский начинал с типичного для наших широт "intermediate" (что-то учили в институте). Немецкий начал с нуля.
    Ответ написан
    3 комментария
  • Хранить php-код в базе данных MySQL - насколько это корректно?

    begemot_sun
    @begemot_sun
    Программист в душе.
    В целом хранить PHP-код в БД не корректно. MODx, например, страдает этим. Я не знаю куда смотрели авторы.

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

    @vans239
    Прочитайте внимательно 70 строчку. Такие вещи надо самому решать!
    Ответ написан
    3 комментария
  • C++ - как правильно объявить конструктор?

    @encyclopedist
    Ещё способ показать что это именно вызов конструктора - использовать синтаксис с фигурными скобками:
    list{a} = arr;
    Ответ написан
    Комментировать
  • C++ - как правильно объявить конструктор?

    @xandox
    Заверни struct list в приватный нэймспэс и разреши конструктор копирования
    в глобальном нэймспэсе сделай так
    template <class ...Args>
    _p::list list(Args&& ...args) {
        return _p::list(args...);
    }
    Ответ написан
    4 комментария
  • Как спроектировать архитектуру простого форума на PHP?

    Anonym
    @Anonym
    Программирую немного )
    Если это не "работа мечты" - посылайте их подальше.
    Ответ написан
    6 комментариев
  • Как спроектировать архитектуру простого форума на PHP?

    MegaMufa
    @MegaMufa
    Простите, это вам при устройстве на работу такое тестовое задание дали?
    Ответ написан
    1 комментарий
  • Почему колеблется приток трафика от Яндекса?

    @encyclopedist
    Это недельные колебания. В выходные трафика меньше, чем в будни.
    Ответ написан
    2 комментария
  • Bash - for и find

    @inkvizitor68sl
    Linux-сисадмин с 8 летним стажем.
    А вы зачем вопрос задали? чтобы за вас задачу из универа решили? Гнать вас в шею оттуда.
    Это ресурс не о том, чтобы решать чужие задачи. Это ресурс о вопросах и знаниях.
    Ответ написан
    1 комментарий
  • Android: Qt vs Java. Что лучше использовать?

    @dplsoft
    Посмею оспорить ход рассуждений lorus ( Android: Qt vs Java. Что лучше использовать? ).
    Итог у нас почти один, но как в математике - когда ход рассуждений ошибочен - даже если ответ верен - то задача не решена. Возможно во много субъективно, но выскажусь, на правах личного мнения человека, который любит и писал и на Qt, и на Android с его "родным" Java тоже.
    На Qt для Android не писал, потому что на момент начала последнего проекта технология была сырая.

    И так: Не агитка за Qt но несколько слов в защиту Qt.

    Забегая вперед скажу: топикстартеру - если есть небольшой опыт разработки под Андроид, вы не работали ранее с Qt, и вам не важна переносимость исходного кода между всем и вся - продолжайте осваивать Android SDK ( Java ) .
    По крайней мере, сейчас.
    Хорошее знание хотя бы одного инструмента, лучше чем посредственное знание двух. ;)
    C Qt под Андроид потом разберетесь. Да и "пообкатаннее" оно будет.


    1. Qt - это всё-таки C++. Разрабатывать на нём существенно сложнее, чем на Java. То есть дольше и с большим количеством ошибок.

    Надо отличать "просто С++" и С++\Qt. В первую очередь, Qt - это фактически диалект языка С++. Например в объявлении Qt-класса появляются дополнительные секции signal и slots, а в процессе сборки существует фаза мета-компиляции, которая делает C++ код под вашу платформу. Не удивлюсь, если для андроида генерируется сместь Java и C++ кода которая потом скармливается Android NDK.

    Во вторых, Qt - это _самодостаточный_ фреймворк. Никаких STL или "чего-что-ещё что представляют себе в комплекте с C++" типичные сторонние разработчики.
    Многих проблем, которые приводят к сложности разработки "на простом C++" в "С++\Qt" просто нет "by design".

    Например в Qt заложен замечательный механизм предотвращения от выхватывания "null-poiunter" - "сигнал-слоты". Это в разы упрощает и делает надежнее работу как с GUI, так и с например, объектами, работающими в разных потоках. В Qt это все сделать разы проще, чем городить аналогичные стандартные механизмы на Java. Я не говорю в итоге оно будет эффективнее - тут надо выяснять и можно поспорить - но вот то, что в Qt многие вопросы работы с потоками и межпоточным взаимодействием продуманы лучше а механизмы удобнее - на мой вгляд это факт.
    (Хотя вот такого классного механизма аки runnable, в Qt нет. Но ждем 11-го стандарта С++.)

    В третьих - "С++\Qt" - это хорошо продуманный фреймворк едва-ли не с лучшим дизайном классов, продуманными методлами, единым стилем решения проблем.

    Как человек писавший на Qt 4.0-4.6 и сейчас закончивший первывый коммерческий проект для Android - могу выставить в сторону Java много минусов (в сравнении с Qt4/Qt5.) Просто потому, что Java - как в первую очередь коммерческая технология, был вынужден набирать нелогичности ради совместимости с предыдущими версиями - едва-ли не из первых версий Java. Посомтрите вопросы к сертификации - много вопросов, которые когда начинаешь разбирать "почему так" - уходят корнями в далекое темное прошлое развития Java. И в итоге - современная Java - это часто нелогичное, лоскутное одеяло, где в разных классах для решения одной и той-же задачи применяется если не разный подход и стиль, то как минимум разные имена методов. Ну вот зачем это?)))

    Да Java детально описан, и в технически прогнозируем - но его надо зубрить, тупо зубрить все исключения и проблемы наследования логики первых версий, и зубрить где используется put(), а где add()....
    ... а Qt-можно _понять_ и не зубрить, понять и только изредка заглядывать в документацию. И в итоге писать на нем - легче.

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

    Ещё к слову про миф "на Java писать проще чем на C++"(если сравнивается Java под DalvikVM и C++\Qt5):
    Не забывайте - DalvikVM - это вам не JavaVM.
    В DalvikVM вы легко отхватите "null-pointer-exception" если вы вдруг наивно думаете, что коли у вас есть в локальной переменной ссылка на фрагмент, активити или вью - то машина не уничтожит объект "когда ей вздумается", а у вас ваша переменная не об-null-ится.

    На понимание того, какие привычки десктопного написания и дизайна приложений нельзя переносить во фреймворки Android SDK и на перестройку собственного мышления - у вас уйдет несколько месяцев. А вы _начнете_ это понимать и отхватывать такие проблемы - как только начнете писать что-то бОольшее, чем набор разрозненных активити да пары фрагментов из учебных курсов.
    И в итоге - первый ваш серьезный проект на Андроиде - может влететь вам в хорошие переработки.
    Например, в том числе и потому что нет в Android SDK v17 жизненного цикла для класса Application. Нет механизмов для созранения состояния singleton-окружения и тд.и тп.

    А когда вы пишете на Qt - у вас гарантирована поддержка единых механизмов для всех платформ.
    Вам не надо перекраивать мозг, выработанные решения и отлаженные и проверенные паттерны.
    В итоге - писать на Qt - может статься и будет быстрее. В ряде случаев.
    Но из Qt - может быть сложно поиметь доступ к сугубо-андроидным сервисам типа поставщика данных.

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

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

    Простите, но тоже малообоснованное утверждение. См пункт 1.

    Кроме того, отмечу:
    Qt-шный инструментарий позволяет вам получать одинаковое поведение на всех поддерживаемых платформах. Включая поведение GUI, Форм и одинаковую для всех систем архитектуру приложения. В идеале - с Qt - вы можете писать под Андроид так, как будто вы пишете под десктоп - не меняя архитектуру и структуру приложения.

    А когда вы пишете под Android на Java - вы всегда пишете кусок кода работающий в колнтексте DalvikVM и должны жить по предусмотренным данной машиной паттернам и сценариям, причем многие аспекты того "как это работает" - явно мало где прописаны. И если вдруг вы отсутпаете от стандартных шаблонов фреймворка Dalvik-машины - вы рискуете отгрести непонятные, трудно отловимые косяки, причем _вне_ вашего контроля, которые вы не можете корректно перехватить и обработать. Кто не знает - попробуйте уничтожить ViewGroup, id которого вы использовали как контейнер для размещения внутри него фрагмента. Как только вы делаете FragmentTransaction.commit() - вы ставите машине задачу, которую она будет выполнять "когда-то позже", вне вашего контроля, и не соизволит позволить вам корректно обработать исключение. Вплоть до возникновения ситуации, когда фрагмент пытается быть добавленным в Activity который уже отработал стандартные процедуры по Activity.finush(). Ладно бы оно выкинуло код ошибки куда, и тихо проигнорило - но это же Java - она выкинет исключение. А обернуть это дело в try...catch - вы не сможете - это не ваш кусок кода. Максимум что вы сможете - это "поймать перед смертью" Thread.UncaughtExceptionHandler. И все.
    (если я не прав - поправляйте меня, я же тоже не инженер гугля)

    3. Java - родная платформа для Android. Отсюда потенциальные проблемы с совместимостью у Qt.

    Вот зачем вы занимаетесь запугиванием?
    Android NDK (для разработки на С++) такой же родной как как и Android SDK (для разработки на Java).

    И с совместимостью у Qt с платформой Android проблем не больше, чем у любого другого приложения, которое использует вставки C++ кода и разработано с использованием стандартного Android NDK.

    --------------------------------------------
    Резюмируя: автору надо просто взвесить что зачем и как он собирается использовать.
    Если автору нужно одинаковое поведение на различных платформах - включая огрызочные поделия, Linux, разные Windows RT недопланшеты - то выбор ознозначен - курите Qt. Это возхитительнейший, ясный, хорошо продуманный и максимально логичный фреймворк, который не побоялись пересоздать с нуля ради устранения накопленных сложностей (вспоминайте переход с Qt3 на Qt4) Лично я приходил в восторг, когда работал с ним (2005-2009 гг)

    Но - в части Андроидного приклада : подозреваю, могут быть "технические риски" с использованием каких-либо особых "мобильных кусков" типа "работа со звонками, "работа с контактами", "работа с почтой" или "поставщиками контента", и пр.
    Я отошел от мира Qt когда Qt был 4.8 и я не искал там классы которые этим занимаются. Думаю что-то потомки троллей должны были создать в 5.2, но лучше проверить.
    В крайнем случае - может потребоваться стыковка с джава-объектами, и тут вам потребуется изучать Android NDK, и возможно даже писать немного оберточного кода на Java.

    Если же вам _нужна_ обязательная работа с описанными выше функциями, а на переносимость исполняемого кода - наплевать, или же у вас _уже_ есть опыт разработки с Android SDK - то конечно писать лучше на Java.

    Но в этом случае бутьте готовы к тому, что это не JavaVM, и сохранности ссылок _для_ряда_классов_ вам никто не обещает, а т.к. Java не предполагает наличия деструктора - вы _будете_ иметь определенные архитектурные сложности при построении сложных приложений.
    Например то, что в десктоп-приложении вы решили бы "простым" "синглтон-объектом" с простой функциональностью типа записал-прочитал из файла - тут вам _придется_ решать путем построения "поставщика контента" и т.п. - что значительно повышает "порог входа" для тех кто погруждается в разработку для Android.

    Но - надо отдать должное инженерам гугля - у них _были_ весомые основания поступать итак, и они максимально вас обезопасили от попадания в многие проблемы - если, конечно, вы используете фреймворк именно так, как это предполагается. И сделали многие механизмы достаточно элегантными, и приятными в использовании. Дизайн гуглековских классов мне в большей части нравится. В общем не забывайте понимать почему в примерах делается именно так как делается, а не иначе.
    Ответ написан
    5 комментариев
  • Почему веб языки интерпретируемые?

    afiskon
    @afiskon
    Erlang, Go, OCaml, Haskell, Clojure, Common Lisp, Java и Scala можно отнести к веб языкам, и они компилируемые. Почему PHP / Perl / Python / Ruby чаще используются для веба? Видимо это из-за более низкого порога вхождения.
    Ответ написан
    Комментировать
  • Софт для веб-дизайнера в linux

    @Masterme

    Запускаю фотошоп CS6 под вайном. Работает не очень стабильно, но в целом позволяет пользоваться рисовать и верстать. Скорость работы нормальная. Системные шрифты подхватывает. Если нужна более подробная инфа - пишите в личку на хабре, никнейм такой же как здесь.

    Ответ написан
    Комментировать
  • Софт для веб-дизайнера в linux

    Попробуйте через вайн запускать, работает боле-менее вменяемо, но есть свои глюки, которые иногда бесят. Exfool выше предложил еще Playonlinux, тоже вариант, может даже лучше чем вайн. Так же можно параллельно пытаться глубже изучить Гимп, может со всременем скилл дорастет до нормального уровня (рисуют же люди в нем). Но что то сильно впечетляющее врят ли скоро получиться сделать. Для виртуалки нужно ИМХО хотябы 8гиг оперативки.

    Ответ написан
    Комментировать
  • Софт для веб-дизайнера в linux

    Exfool
    @Exfool

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

    Ответ написан
    1 комментарий
  • My WebMoney Linux хранит пароль в открытом виде

    nochkin
    @nochkin
    Возможно, идёт рассчёт на то, что права доступа на файл должны быть только у владельца аккаунта (например, права 0400 или 0600).
    Многие системы так хранят пароли. Ведь файл нельзя прочитать извне стандартными методами кому-то другому.

    А иначе даже зашифрованный пароль можно расшифровать, ведь ключ надо будет хранить на той же машине в бинарнике webmoney. То есть, ключ потенциально можно извлечь и тогда шифрованность пароля сильной разницы не будет делать.
    Ответ написан
    2 комментария
  • Забытый пароль присылают на почту открытым текстом

    GavriKos
    @GavriKos
    Если пароль совпадает с вашим старым — это значит что сайт либо не использует шифрования вообще, либо использует тот метод шифрования, который подлежит быстрой обратной дешифровке. Первое — однозначно плохо. Второе — тоже не сильно хорошо — если будет слита база или получен доступ к сайту — получить пароли можно будет легко. В случае же шифрования тем же MD5 — слив базы не гарантирует восстановления именно вашего пароля.

    Если пароль не совпадает со старым — значит скорее всего сайт его сгенерировал, отправил вам, зашифровал и уже в зашифрованном виде записал в базу. Хотя вариант с нешифрованием или некачественным шифрование мне исключен.
    Ответ написан
    4 комментария