• Почему в Java наследование реализовано именно так?

    @popov654 Автор вопроса
    Александр Мовчан, да я не говорю, что базовый класс должен знать о наследниках. Я говорю - почему бы методу из базового класса не поработать с приватным полем объекта-наследника, у которого метод вызван (а не обращаться к полю базового класса, которое лежит на одном уровне иерархии с вызванной реализацией метода)?
  • Почему в Java наследование реализовано именно так?

    @popov654 Автор вопроса
    В вашем примере вы просто определили новое поле с таким же именем, что привело к так называемому name shadowing

    Это не объясняет, почему реализация из A не хочет работать с полем, определённым в B с таким же именем. Ведь объект, у которого вызван метод - экземпляр B. Да и ссылка на него имеет тип класса B (хотя в Java, как мои эксперименты показывали, тип ссылки ну вот вообще не влияет ни на что практически)...
  • Почему в Java наследование реализовано именно так?

    @popov654 Автор вопроса
    Нельзя переопределить значения поля, как это работает с методами.

    И это очень печально...

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

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

    Опять же, по поводу конструктора - было бы логично его создать, если бы значение этого поля должно было определяться динамически (например, по значению параметра в конструкторе, как Вы сказали, или сделать несколько конструкторов - один полный и несколько с сокращённым набором аргументов, при этом сокращённые будут иметь некоторые дефолты для ряда этих аргументов, и могут вызывать полный внутри себя). Или даже ещё сложнее - вычислять значение этого поля на основе других параметров, переданных в конструктор, состояния каких-то объектов, переданных в тот же конструктор... Но в случае, когда я для всех объектов класса Item хочу сделать поле type, имеющее значение "item", и других полей, требующих определения, нет - то только ради этого создавать конструктор несколько не с руки...
  • Дает ли .net/java преимущества для небольших веб-сервисов?

    А что такое биндинг, кстати, не объясните пожалуйста? Тоже вот заинтересовало
  • Как грамотно написать интерпретатор?

    @popov654 Автор вопроса
    Даниил Колесниченко, статью прочитал, спасибо. Очень проясняет многие моменты.

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


    Однако вот с этим ты не прав, имхо. Только что проверил в Хроме, это не работает. Да и в тексте по ссылке на это нет никаких намёков.

    скриншот
    5a6335f8effa3831811291.png
  • Как грамотно написать интерпретатор?

    @popov654 Автор вопроса
    Даниил Колесниченко, так идея замыкания ведь в чём? Если я правильно помню - обернуть функцию в ещё одну функцию, передав внешней функции часть аргументов, таких образом "заморозив" их значения для внутренней функции путём использования промежуточного скоупа. Вообще я понял, в чём несостыковка: скоуп надо учитывать тот, который был при объявлении функции, а не при вызове. Окей, тогда твой подход совершенно правильный. Насчёт того, что проходится дважды - да, это плохо. Код, в котором вообще нет замыканий - там эти две цепочки скоупов временами будут совпадать, временами же цепочка скоупов вызова будет содержать цепочку скоупов объявления (наоборот быть не может, мы не можем вызвать снаружи что-то, что объявлено в более вложенном скоупе, например функцию, вложенную в другую функцию). Может, стоит рассматривать сценарий с замыканиями вообще отдельно? В любом случае, есть ещё bind, который занимается тем же самым (может "прибить" к функции контекст, может "прибить" контекст и переменные). И его тоже хорошо бы реализовать.
    UPD: Пардон, мы можем вызвать то, что внутри. Но только не напрямую, а если нам кто-то вернёт ссылку на эту функцию внутри переменной :)
    UPD2: Как идея найти более длинную из цепочек и пройтись по ней? Ведь когда мы создаём замыкание (через "function(args) { return function ... }(...)"), мы это делаем уже внутри какого-то скоупа. И функция, которую мы получим, при своём вызове всё равно пойдёт вверх по всей этой цепочке. Из этого я делаю вывод, что достаточно лишь посмотреть, где функция была объявлена, и обойти лишь эту цепочку, этого будет достаточно. А эта информация, вроде как, неизменна. Можно один раз сохранить её вместе с функцией в момент её создания как сущности.
  • Как грамотно написать интерпретатор?

    @popov654 Автор вопроса
    Даниил Колесниченко, а, вон оно что... Учебники, по которым я учил JS, явно не очень написаны. Там говорилось про запись в window, подразумевая поведение внутри функций, которые оюбъявлены прямо в window scope. Спасибо.
    Насчёт оверрайдинга - можно так, а можно просто при исполнении разобранной цепочки выражения в этом случае кидать эксепшен или просто писать ошибку юзеру, что обнаружена синтаксическая ошибка. Я на самом деле ещё не очень понял, как следует хранить операторы вызова. С бинарными арифметическими и побитовыми операторами всё ясно: у нас цепочка (в инфиксной или постфиксной форме, не важно) где лежат вперемешку значения и операторы (это разные сущности). Мы с этой цепочкой работаем, исполняя её по частям, с учётом приоритета операторов. А вот как быть с вызовом функции ("выражение(аргументы)"), я вот реально без понятия. Можно считать это таким особым оператором на произвольное число операндов, где важен их порядок (и между собой, и кто будет самым первым (имя функции, по которому её искать)). Но это какой-то вообще кривой и сложно реализуемый подход. Может, проще через какой-то костыль это сделать? Лишь бы он был простым и легко поддерживался :)
  • Как грамотно написать интерпретатор?

    @popov654 Автор вопроса
    Не знал даже, что такое есть, интересно. То есть можно использовать готовый интерпретатор от Sun/Oracle в своём проекте, если лень писать свой?
  • Как грамотно написать интерпретатор?

    @popov654 Автор вопроса
    Спасибо за ответ)

    1. Сделать метод call у всех (в базовом классе), а не только у функций - интересная идея, надо будет подумать. Хотя наверное смысла нет, я собираюсь не динамически менять тип сущностей через поле, а создавать каждый раз новую нужного класса (а тип проверять через instanceOf). Они очень легковесные, мне кажется, падения производительности сильного не будет.
    2. Нормальный вариант, но вектор наверное лучше тем, что есть ссылка на root scope (он часто нужен, когда какая-нибудь плохо написанная функция пишет переменные в глобальную область без var). Ну или просто ссылку на первый элемент списка хранить в переменной
    3. Ну да, в самом деле, вы правы. Просто передавать ссылку на объект надо будет аргументом дополнительно в call
  • Прокси с поддержкой HTTPS?

    @popov654 Автор вопроса
    Moris Haos, спасибо! А вы не могли бы проанализировать результаты захвата трафика, которые я провёл? Просто я не смог понять причину, почему сервер (на самом деле, вероятно, один из коммутаторов на пути следования) даёт отлуп Firefox (RST пакет), но не даёт его Opera. В Opera версия TLS - 1.0, шифр - 128 bit AES (2048 bit DHE_RSA/SHA). В Firefox попробовал выставить максимальную версию TLS равную 1.0. В перехвате это отразилось, но результат не изменился...
    Могу скинуть файлы, они совсем немного весят. Если у вас конечно стоит Wireshark
  • Прокси с поддержкой HTTPS?

    @popov654 Автор вопроса
    Мне бы хотя бы софт, который проанализирует используемую версию протокола. Смотрите, я пытаюсь разобраться, каким образом старой Opera удаётся открывать заблокированный сайт (известный торрент-трекер). При этом по HTTP я получаю редирект на страницу-заглушку от провайдера, а по HTTPS всё работает. Хочется найти способ точно так же "хакнуть" и остальные браузеры, чтобы в них заработало тоже. Так что интересна версия протокола и используемый шифр в первую очередь. Либо же некая особенность хендшейка, которая позволяет браузеру обойти системы защиты.
  • Как грамотно написать интерпретатор?

    @popov654 Автор вопроса
    Antonio Solo, мне же подмножество только нужно. Арифметические операции, строки, массивы, объекты. Basic я во-первых не изучал, а JS знаю весьма неплохо. Плюс я делаю это как заделку к потенциально большему проекту (изначально свой браузерный движок планировался, потом понял, что слишком сложно для меня).
  • Прокси с поддержкой HTTPS?

    @popov654 Автор вопроса
    Он 6-ой уровень OSI отображает?) Или на каком там SSL, забыл
  • Как грамотно написать интерпретатор?

    @popov654 Автор вопроса
    А по остальным пунктам не посоветуете ничего?
  • Как грамотно написать интерпретатор?

    @popov654 Автор вопроса
    Прочитал, разобрался. Спасибо
  • Какая есть альтернатива VK Audio API (закрывается 16 декабря)?

    Даниил Лепке,
    но Вы прямо указываете ВКонтакте, что Вы не их приложение, а явный самозванец, использующий данные от официальных приложений


    почему сразу самозванец? Я же могу быть неофициальным приложением (я токен брал не от официального клиента даже, а от стороннего). Видимо, меня сгубил левый User-Agent (а как узнать настоящий я без понятия, надо поднимать прокси с поддержкой HTTPS и пускать эмулятор Android через него каким-то образом...

    Возможно, этот сервис использует так называемые аналоги Audio API (1, 2), тогда достаточно, авторизовывая пользователя даже через собственное Standalone-приложение, получить его ID и, отправив запрос на выше приведённые сервисы, получить распарсерную музыку.


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

    P.S. Да, можно, если вопрос ещё актуален. Мне вот нравится идея попытаться поковырять авторизацию через мобильную версию, имитируя браузер. Учитывая, что до мобильной версии все изменения доходят с очень большой задержкой (редактирование сообщений ми удаление для всех так и не пришли спустя месяц в неё), есть шанс, что получится.
  • Почему textarea не подстраивает ширину автоматически?

    @popov654 Автор вопроса
    Я знаю, что так можно :)
    Но это не всегда хорошо. Например, пользователь может вставить много лишнего через буфер (картинки, форматирование), и это лишнее как минимум выведется у него в инпуте, а как максимум - ещё и попадёт в БД, если мы отправляем форму на сервер. Фильтровать всё равно по-хорошему конечно нужно, но а) в некоторых приложениях для 1-2 пользователей, где точно никаких тегов в textarea вводить не планируется - можно про фильтрацию случайно и позабыть, и б) это некрасиво смотрится в браузере при вставке. Например, фон страницы и полей ввода у нас фиолетовый, вставили текст с форматированием - получили чёрный текст на фиолетовом фоне с тёмно-синими ссылками :)
  • Какая есть альтернатива VK Audio API (закрывается 16 декабря)?

    Даниил Лепке, кстати, даже если мне удастся всё сделать идеально - это не решит мою проблему. Я хотел использовать прикрепление пользовательской музыки из вк в своём мессенджере (точнее, оно было сделано и прекрасно работало до всей этой ерунды). При этом я могу запрашивать у пользователей мессенджера доступ к информации на их странице в вк, это без проблем. Но при способе прямой авторизации - нужно запрашивать логин и пароль, а на это вряд ли кто-то из пользователей пойдёт. Если же авторизовать только сервисную страницу-бота - то доступ будет только к музыке бота и музыке его друзей. Доступ к музыке любого человека закрыли.

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

    Я однако видел веб-приложение, использующее обычную авторизацию (не по логину и паролю), и при этом получающее музыку (мою и друзей). Но я не знаю, как они это реализовали, а связаться с авторами к сожалению нельзя, контактов разработчики не оставили.
  • Какая есть альтернатива VK Audio API (закрывается 16 декабря)?

    Даниил Лепке, а если использовать не прямую авторизацию, а обычную, то со страницей всё ок, но при вызове метода audio.get получаю ошибку Flood control.
  • Какая есть альтернатива VK Audio API (закрывается 16 декабря)?

    Даниил Лепке, не подскажете, как именно его надо подтвердить? Мобильные клиенты как-то ведь это делают. Я могу конечно код посмотреть декомпилированный, но может вы знаете сразу :)

    Насчёт возможных причин: я не делал ни одного запроса. Страницу заблокировали сразу после авторизации через указанный Вами способ (через логин и пароль пользователя). Метод execute - не думаю, что дело в этом. Официальные приложения ведь делают первые запросы после авторизации прямо так, и страница не блокируется. Да и старые версии клиента (например, 2.х) далеко не все операции через execute делали, судя по коду, который я смотрел. Там правда сейчас почти ничего не работает, всё "зависает" при использовании этих версий, но страница, опять же, не блокируется. Насчёт лимита - тоже мимо, т.к. я вообще ни одного запроса сделать не успел, только лишь получил токен. Остаётся User-Agent, я уже сам об этом подумал. Но вдруг этого мало, и стоят ещё ступени защиты какие-то? Не хотелось бы вновь получать блокировки.

    Вообще, страницу заморозили потому, что вк решил, что это попытка взлома. А решить он мог так потому, что пришёл запрос на получение токена с моим паролем прямо в адресной строке. Там всё через HTTPS, это вполне безопасно, и любой мобильный клиент делает скорее всего такой же запрос. Но видимо тот же UA дал системе понять, что это не мобильный клиент, а некто, маскирующийся под него, и знающий мой пароль. В целом это разумно. Вопрос - как полностью замаскироваться, чтобы защита не срабатывала.