Ычан: [d | b / bro / hr / l / m / med / mi / mu / o / ph / r / s / sci / tran / tu / tv / x | es / vg | au / tr | a / aa / abe / c / fi / jp / rm / tan / to / vn / vo]
[Назад] [Вся нить] [Первые 100 сообщений] [Последние 50 сообщений]
Ответ в нить [Последние 50 сообщений]
Имя
Animapcha image [@] [?]
Тема   ( ответ в 21641)
Сообщение flower
Файл 
Пароль  (для удаления файлов и сообщений)
Параметры   
  • Прежде чем постить, ознакомьтесь с правилами.
  • Поддерживаются файлы типов 7Z, BZ, BZ2, GIF, GZ, JPG, MO, MP3, MP4, OGG, OGV, PDF, PNG, PSD, RAR, SVG, SWF, TXT, WEBM, XCF, ZIP размером до 5000 кБ.
  • Ныне 3166 unique user posts. Посмотреть каталог
  • Максимальное количество бампов нити: 500
155344039867.png-(777.18KB, 720×720, junior_developer_kobayashi.png)
21641
No. 21641    
Здесь можно получить помощь и консультацию по любому языку программирования, в любой сфере разработки. Не важно, программируете ли вы собственного робота, пишете серверную приблуду, интегрируете чужие API, ковыряете игру, или пытаетесь сделать сайт на Wordpress - если аноним что-то об этом знает, он обязательно поможет.

Пополняемая база знаний: http://pastebin.com/AGhLZppH

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

Другие тематические нити (периодически обновляется): https://pastebin.com/psy43ibG

Примеры кода лучше выкладывать в виде ссылок на http://pastebin.com или http://ideone.com
Фронтендные вещи лучше выкладывать на http://jsfiddle.net

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

Чтобы не сбивать новичков с толку, а также не разбавлять полезную информацию мусором, беспредметные споры типа "какой язык / парадигма / библиотека / етц лучше" здесь запрещены. Для подобных вещей теперь есть отдельная диспутов нить >>/dev/21353

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

Архив нитей:
http://410chan.org/dev/arch/res/14160.html
http://410chan.org/dev/arch/res/15681.html
http://410chan.org/dev/arch/res/17424.html
http://410chan.org/dev/arch/res/19666.html

Прошлая нить пока тонет тут: >>/dev/19666
456 сообщений пропущено. Показаны 50 последних сообщений Развернуть все изображения
No. 23719    
>>23718
>собственно атак на корректно реализованный TLS 1.1 никто не продемонстрировал.
Всё так. На тему разницы между версиями протоколов также есть короткое резюме здесь: https://security.stackexchange.com/a/57883
No. 23720    
>>23717
Спасибо за ответ.
Сейчас почитал про ЛистВью. Он легаси, оказывается.

Что-то с ним гипермного java-сношений внутри файлов Активити. Получается, под каждую картинку и текст надо свой xml делать. Насколько я понял. Это что-то перебор.

Есть ли более адекватные способы создать вот такую галерею, как я описываю в >>23714 ?

Без загрузки картинок из интернета (потому что неоткуда загружать пока), такой способ тоже возможен, где-то видел обрывки такой информации.
No. 23721    
>>23720
Посмотри тогда в сторону RecyclerView оно вроде по-новее будет
No. 23722    
157572844923.png-(68.43KB, 1004×728, Image.png)
23722
>>23716
привет! пытаюсь обновить джаву (сейчас у меня 1.7.0_02-b13), но не могу найти версию которую ты указал для загрузки. попадаю только на какаие-то китайские сайты где загрузить файл не получается. также увидел надпись на сайте Оракл "Updates for Java SE 7 released after April 2015 are only available to Oracle Customers through My Oracle Support", а в архиве последняя версия это 7u80 (а мне 7u131 нужна, верно?)

также попробовал заменить mavenCentral() и смог продвинуться дальше. сейчас меня останавливает ошибка пикрелейтед. есть идеи как решить? (гугол предлагает обновить грейдл или студию, но я боюсь сделать еще хуже)
No. 23723    
157573185437.png-(21.33KB, 800×372, IMG_20191207_180645.png)
23723
У меня проблема с питоном. Вот скрин консоли.
В а находится строка '200mm'. Из а создал список b. Потом два пустых списка c и d. Потом в цикле я проверил является ли каждый элемент списка b цифрой. Если этот элемент цифра, то он добавляется в список c, иначе он добавляется в список d. Но получилось все не так. Все цифры и буквы попали в список c, а список d остался пустым. Я не могу понять где ошибка.
No. 23724    
>>23723
Скобки после isdigit().
Сейчас ты проверяешь, есть ли такой метод у x, и получается всегда истина.
No. 23725    
>>23722
>привет! пытаюсь обновить джаву
>также попробовал заменить mavenCentral() и смог продвинуться дальше.
Поскольку ты смог продвинуться дальше подменив ссылку на репозиторий, отложим пока тему апдейта джавы, до тех пор пока не столкнемся с проблемой связанной конкретно с джавой.

>сейчас меня останавливает ошибка пикрелейтед. есть идеи как решить? (гугол предлагает обновить грейдл или студию, но я боюсь сделать еще хуже)
Выглядит так, что твоя студия 0.8 не может работать с грейдл-плагином 1.0 (и враппером 2.2.1)

Что можно сделать:
1. Попробовать открыть проект в более свежей студии, но вышедшей недалеко от последней даты изменения файлов проектов в примерах (январь 2015), т.е. в студии 1.0 или 1.1:
https://www.npackd.org/p/android-studio/1.0.1
https://www.npackd.org/p/android-studio/1.1
Они по идее уже должны справиться с грейдл плагином 1.0 и грейдл-враппером 2.2.1

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

Поскольку у тебя студия 0.8, то тебе нужны враппер 1.х версии и плагин 0.х версии.

Андройд студия 0.8 вышла в июне 2014, значит сначала найдем близкий к дате выхода плагин, помня что минимальная поддерживаемая версия - 0.12, попробуем начать с 0.12.2

dependencies {
    classpath 'com.android.tools.build:gradle:0.12.2'
}

Подбирать версии можно отсюда:
https://mvnrepository.com/artifact/com.amazon.device.tools.build/gradle

Теперь нам нужно подобрать враппер. Тут чуть сложнее, т.к. нужно сначала узнать, что до перехода на грейдл-плагин 1.x, андройд проекты использовали врапперы ветки тоже 1.х (хотя были доступны более свежие)
Инфа отсюда: http://tools.android.com/tech-docs/new-build-system/migrating-to-1-0-0

Попробуем начать с самой поздней версии из этой ветки, 1.12, выпущенной в том же июне 2014.

task wrapper(type: Wrapper) {
    gradleVersion = '1.12'
}

Подбирать версии можно отсюда:
https://mvnrepository.com/artifact/org.gradle/gradle-wrapper

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

Пиши, что получится.
No. 23726    
>>23724
Спасибо
No. 23737    
157615756247.png-(360.42KB, 720×1280, Screenshot_2019-12-12-16-10-57.png)
23737
Есть словарь d, его содержимое нужно превратить в строку. Для начала сделаю его списком. Создам пустой список l. Далее в цикле каждый элемент словаря (его ключ, он почему-то возвращается числом, хотя был строкой) сделаю строкой k. Создам временный список lt, куда помещу ключ k и значение этого ключа из словаря d[k]. Потом в список l добавлю элементы списка lt. И наконец создам из этого списка строку использовав в качестве разделителя пробел.
Это как-бы работает, но кажется мне немного наркоманией. Можно ли сделать тоже самое как-то более разумно?
No. 23738    
>>> d = { '1': 'devochka','2':'bulochka','3':'kot'}

>>> ' '.join(' '.join(i) for i in d.items())

'1 devochka 2 bulochka 3 kot'
No. 23739    
>>23738
Я не понимаю как это работает. for i in d.items() возвращает кортеж. Метод join возвращает строку, я не знал что это работает и с кортежами. Но дальше следующий join объединяет строку со строкой? Так же нельзя! Строки неизменяемы.
No. 23741    
>>23739
d.items() возвращает view object, который для простоты можно считать списком кортежей (key, value).
str.join(iterable), как видно из названия аргумента работает вообще со всеми итерируемыми типами.
i for i in x возвращает генератор.
' '.join(i) for i in d.items() возвращает генератор, который берет каждый кортеж из d.items() и делает его строкой. Для простоты можешь считать генератор списком.
На выходе получается список строк ['key1 value1', 'key2 value2', ...], его ты преобразуешь в одну строку.
No. 23742    
>>23739
> Так же нельзя! Строки неизменяемы.
А метод str.join() ничего не изменяет, кстати.
No. 23744    
157635772493.png-(52.51KB, 720×1280, Screenshot_2019-12-14-22-53-32[2].png)
23744
>>23725
не могу поверить, но это успех! после обновления андроид студии до версии 1.1 получилось сбилдить проект!

запустил примеры на телефоне, большинство из них с фичами СДК работают, но не работают те проекты, в которых используются объемные контролы. например, ZButton, ZCheckBox и другие, которые начинаются на Z. главный проект, который демонстрирует эти контроллы, называется "DynamicPrespectiveControls".

я не смог подключить телефон для дебага на виртуалке, но смог вывести ошибку пикрелейтед способом, хех (могу сбросить stack trace, если нужно). есть идеи как можно пофиксить? (если что, это я попытался открыть "\samples\DynamicPerspectiveControls\src\com\example\amazon\dpc\ZButtonDepthActivity.java" на телефоне)
No. 23747    
>>23744
Рад что у тебя получилось завести примеры.
Теперь по поводу твоей проблемы.
>могу сбросить stack trace, если нужно
Прикрепи его, пожалуйста, файлом к посту, или залей на тот же pastebin. Чем больше информации в стектрейсе, тем лучше. Надо понять, что именно случилось, т.к. сам InflateException может быть вызван другим эксепшоном который вылетел где-то еще.
No. 23749    
>>23747
Воть: https://pastebin.com/wbPGQ8ea
No. 23751    
>>23744
>>23749
Спасибо за стектрейс. Итак что, насколько я могу понять, происходит:
1. Ты инициализируешь запуск ZButtonDepthActivity в телефоне, и активити подхватывает свой файл layout'a:
DynamicPerspectiveControls/res/layout/activity_zbutton_depth.xml который в этот момент уже в сериализованом бинарном виде, внутри реусрсов в apk, это важно
2. Активити начинает собирать в рантайме компоненты layout'a в классы, согласно описанию.
3. Активити падает при попытке собрать первый же встретившийся ей класс ZContainer

        <com.amazon.euclid.widget.ZContainer
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            euclid:autoPadding="true"
            euclid:baseDepth="@euclid:dimen/globalLayerIn3" >

            <com.amazon.euclid.widget.ZImageButton
                android:id="@+id/zbutton01"
                android:layout_width="50dp"
                android:layout_height="50dp"
                euclid:layout_depth="match_parent"
                android:enabled="true"
                euclid:textDepth="0dp"
                euclid:vbl="glyphs"
                euclid:scene="@euclid:string/glyph_call" />
        </com.amazon.euclid.widget.ZContainer>

Падение происходит на попытке десериализовать по id значение одного из dimension'ов, после поиска его по xml в ресурсах.
В этом описании компонента layout'a я вижу только один такой нестандартный dimension, который надо так сериализовывать / десериализовывать:
>euclid:baseDepth="@euclid:dimen/globalLayerIn3"

В документации его описание можно найти по такому пути:
Fire_Phone/docs/reference/com/amazon/euclid/widget/ZContainer.html#attr_euclid:baseDepth
Fire_Phone/docs/reference/euclid/R.attr.html#baseDepth

>Constant value: 0x7b010068
Посмотрим значения в libs/euclid-api.jar прилагаемом к проекту, декомпилировав его resources.arsc я использовал androuguard arsc:
> androguard arsc euclid-api.jar
> <public type="attr" name="baseDepth" id="0x7b010068"/>
И заодно, возьмем id указывающее на значение globalLayerIn3:
> <public type="dimen" name="globalLayerIn3" id="0x7b070000"/>
Исходя из твоего стектрейса, самая главная ошибка вот эта
> Can't convert to dimension: type=0x7
И я предполагаю, что тут оно не смогло десериализовать именно значение, наткнувшись на айдишник 0x7b070000

Т.е. предположительно, студия во время упаковки ресурсов в apk и сериализации activity_zbutton_depth.xml в бинарный вид лезет в подключенную к проекту euclid-api, уже в её ресурсы, и видит там что значение "@euclid:dimen/globalLayerIn3" надо сериализовать как 0x7b070000, и так его бинарно и записывает. А затем телефон, создавая активити и наткнувшись на этот компонент, лезет в ту же библиотеку euclid-api, чтобы она создала класс с указанными в xml-параметрами, и натыкается на сериализованное значение. Только вот никакого значения с id 0x7b070000 внутри ресурсов euclid-api уже нет, из-за чего всё и вылетает.

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

Такое могло произойти, если:
  • Твоя версия библиотеки вообще не попала в итоговый apk, и её подсунул телефон может же быть, что у Fire Phone внутри есть своя её версия
  • Твоя версия попала в итоговый apk, но посредством андройд-магии была перекрыта той стандартной, что в телефоне если она существует
Исключить одну из версий можно разобрав итоговый apk, чтобы узнать что там внутри.

Возможные пути решения:
1. Если твоя версия euclid-api просто не попала в apk, добавить её туда насильно, и посмотреть что получится. Можно заодно сверить id ресурсов.
2. Вытащить из телефона euclid-api.jar нужной версии вроде так можно с помощью adb и прикрепить к проекту уже его, чтобы точно всё совпадало. Заодно и остальные библиотеки вытащить, на всякий случай.
3. Понадеяться на авось и позаменять все "проблемные" значения на стандартные, а потом посмотреть, запустится оно, или упадет уже на чем-то еще.
Это реально провернуть, т.к. мы точно так же можем узнать все стандартные значения, на которые ссылаются id ресурсов, снова декомпилировав resources.arsc из libs/euclid-api.jar

> androguard arsc euclid-api.jar --type dimen

> <dimen name="globalLayerIn3">6.0mm</dimen>
> <dimen name="globalLayerIn2">4.0mm</dimen>
> <dimen name="globalLayerIn1">2.0mm</dimen>
> <dimen name="globalLayerScreen">0.0mm</dimen>
> <dimen name="globalLayerOut1">16777214.0mm</dimen>
> <dimen name="globalLayerOut2">16777212.0mm</dimen>
> <dimen name="globalLayerOut3">16777210.0mm</dimen>

> androguard arsc euclid-api.jar --type string
> <string name="glyph_call">ic_call_amazon_3d.scene</string>

После чего заменить в DynamicPerspectiveControls/res/layout/activity_zbutton_depth.xml
> euclid:baseDepth="@euclid:dimen/globalLayerIn3"
на
> euclid:baseDepth="6.0mm"
и аналогично по списку значений, т.к. в том layout используются все 7.

если оно потом вылетит со схожим эксепшоном на строке, заменить:
euclid:scene="@euclid:string/glyph_call"
на
euclid:scene="ic_call_amazon_3d.scene"


Не забывай бекапить файлы перед такими изменениями.
После замены надо сделать чистую сборку apk, загрузить на телефон, и попробовать запустить ту же активити.
Надеюсь, смог понятно всё объяснить.
No. 23752    
157661119259.png-(175.30KB, 1400×952, Clipboard01.png)
23752
Рекурсивный спуск всё может. А вы говорите...
No. 23759    
157676272679.png-(130.54KB, 720×1280, Screenshot_2019-12-19-16-19-10.png)
23759
Начал про ооп читать. Вроде бы и понятно, но что-то ничего не работает. Видимо что-то не так понял. В общем создал класс и подкласс. Два объекта. Свои имена и цвета они показывают, вот бибикать и ехать не хотят.
No. 23760    
>>23759
Проблема в том же, что и в >>23723: для вызова метода после него нужны скобки, то есть в коде с твоего скриншота это car.honk(), car.drive().
No. 23763    
157678298444.png-(346.86KB, 1000×859, Phosphophyllite_(Houseki_no_Kuni)_full_2276026_low.png)
23763
>>23752
Интересные дизайн-поинты:
—? К классическим токенам '^W' и '^H' нужны токены для оставшихся стилей, но как они должны выглядеть?
—! Парсер не должен съедать разметку, которую он не смог разобрать.
—! Разметка (% % a b _ _ c d % % e f _ _) — абсолютно валидная разметка, — однако (
 
a b _ _ c d
 
e f _ _) — нет.
—! Разметка (a b ^ W c d ^ W) — двойное зачёркивание первых двух символов. Про зачёркивание не знаю, а вот вложенные спойлеры вполне себе есть.
—? Если допускаются вложенные стили одного типа, надо как-то решить вопрос с разметкой таких стилей. Можно сделать разметку вида (% % a b % % % c d % % % e f % %). Однако разметка (% % % % % a b % % c d % % e f % % % % %) — тоже абсолютно валидная разметка, которую, однако, можно разобрать несколькими способами.
—! В токенах стилей нет порядка вложенности, поэтому их можно тасовать как угодно и сортировать по позиции в тексте, типу и классу. За порядком расстановки открывающих и закрывающих тегов должен следить рендерер.
—? Существует маркер продолжения текста блока с новой строки: BOL (space)+ (text)* EOL ; применяемый к блоку списка. Его можно применить и для блока цитаты.
No. 23764    
>>23760
Спасибо. Почему когда добавляю скобки к вызовам name и color происходит исключение?
No. 23765    
>>23764
Вестимо потому, что name и color, будучи лишь полями класса, не являются исполняемым кодом (функциями, методами) или ссылками на него.
No. 23766    
>>23751
привет! спасибо за объяснение!

для начала я попробовал просто заменить значение, как ты написал в конце поста, но теперь я получил такую ошибку: https://pastebin.com/FLTJ2Wnj

еще я заметил, що во время сборки апк я получаю довольно много ошибок. думаю, это может быть важно. для генерации апк я использую этот способ: https://stackoverflow.com/a/16709979
а вот output генерации, где можно увидеть ошибки: https://pastebin.com/2eMApQ2g

возможно, мне нужно билдить апк каким-то другим способом? посмотри пожалуйста, можно ли с этих ошибок извлечь что-то полезное. я пока попробую декомпилировать resources.arsc и разобрать апк
No. 23771    
>>23766
>посмотри пожалуйста, можно ли с этих ошибок извлечь что-то полезное

Учитывая, что проблема у нас в том, что не резолвятся референсы к ресурсам амазоновских библиотек, вот это предупреждение

>AMAZON INFO [Project: :DynamicPerspectiveControls]
>Amazon Fire Phone Build Tools not found.
>References to Amazon resources may fail to resolve.

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

>AMAZON INFO [Project: :DynamicPerspectiveControls] Please use Android SDK Manager to download the Amazon Fire Phone Build Tools extra.
>For details, see https://developer.amazon.com/public/solutions/devices/fire-phone/docs/setup#Installing the Fire Phone SDK Add-on.

Как обычно, ссылка давно умерла, но нас выручает архив:
https://web.archive.org/web/20140701075615/https://developer.amazon.com/public/solutions/devices/fire-phone/docs/setup

При этом насколько я вижу, ссылки на нужный аддон и сопутствующие файлы еще живы:
https://s3.amazonaws.com/android-sdk-manager/redist/addon.xml

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

Читая логи дальше, вижу что после пачки этих предупреждений оно пишет, что не может замаппить те самые ресурсы, которые потом вызывают проблемы:
>:DynamicPerspectiveControls:processDebugResourcesE/ResourceType( 2184): DynamicRefTable(0x7b): No mapping for build-time package ID 0x7b.

Думаю, если получится установить аддон в твою студию, проблемы с этими примерами закончатся.
Сообщай о результатах.
No. 23773    
157702213724.png-(5.41KB, 90×50, faptcha_php.png)
23773
Дано: php, массив, пользовательская ф-ция сравнения элементов.
Нужен: аналог in_array с использованием этой самой ф-ции.

Т.е. надо проверить, что наше значение совпадает с каким-либо элементом массива — в том смысле, в каком мы определим понятие "совпадает".

Как это лучше сделать?
Тупо пробегать по всему массиву через foreach? Использовать array_filter и смотреть, возвращает ли она пустой массив? Что-то еще?
No. 23774    
>>23773
А почему просто не воспользоваться фукцией array_map? Скармливаешь ей массив и свою функцию сравнения и смотришь что получил в ответе. Ну или можно упороться и написать свою функцию подобного поиска, используя foreach, call_user_func и пару if'ов.
No. 23775    
>>23771
да, я действительно не установил Amazon Fire Phone Build Tools, которое было спрятано в папке Extras. теперь примеры запускаются и я так счастлив! спасибо огромное за то что помогал мне все это время, я бы сам не справился. завтра начну разрабатывать приложение с этими фичами! спасибо еще раз♥
No. 23776    
>>23775
Не за что, рад что всё наконец-то заработало и негодую что амазон или убрал, или попереносил куда-то туториалы. Обращайся если надо будет совет по разработке приложения.
No. 23777    
>>23774
>почему просто не воспользоваться фукцией array_map?
Чем array_map в данном случае лучше array_filter?
>пару if'ов.
Не понял, зачем второй if?

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

Если более конкретно то в массиве — список подсетей в формате XXX.YYY.ZZZ.TTT/NN, значение с которым сравнивается — конкретный IP. Может есть какие хитрости, позволяющие оптимизировать проверку именно для этого случая?

А впрочем, подозреваю, что занимаюсь ерундой и загрузка этого массива из файла займет куда больше времени. Если так, то правильной оптимизацией будет загнать его базу данных, а проверку делать на SQL.
No. 23778    
157708535471.png-(106.34KB, 1400×950, Clipboard01.png)
23778
Не выходит каменный цветок... Нужна идея какая-то, как разбирать эту разметку.

>>23777
>Если более конкретно
Для Джавы я бинарный поиск на RandomAccessFile использовала для подобной задачи (поиск строки по данному префиксу в файле с примерно 60 тысячами строк) — очень быстро ищет O (lb (n)), только надо, чтобы строки в файле были отсортированы, и соответственно, вставлять новые записи надо аккуратно. Может выложу на днях на гит пруф, так сказать, оф концепт, если интересно будет.
No. 23779    
>>23777
Если проверять предполагается много раз и массив предполагается статичным и неизменяемым для всех задач определения длины, то тогда, наверное, лучше посортировать и искать бинпоиском.

Если предполагается часто производить операции удаления/добавления элементов, то обязательно ли хранить данные именно в массиве? Нужен ли доступ по индексу быстрее чем за O(log(n))? Страшно ли хранить ещё где-то [16 n, 32 n] байт памяти? Если нет, то для задачи быстрой проверки наличия лучше подойдут деревья. Если при этом доступ по индексу и порядок не нужен или требуется делать очень-очень много максимально быстрых запросов на наличие элемента, то ещё лучше подойдут реализации set'ов.

Если задачу предполагается выполнять немного раз на сильно разнящихся неотсортированных данных, то, возможно, лучше будет банальный перебор.
No. 23780    
>>23779
>>23778
Так, похоже я реально стормозил. Уперся в перебор по массиву, а о других вариантах вообще не думал.
Хотя, действительно, тот же двоичный поиск будет значительно быстрее, чем все эти тупые переборы, хоть через array_bla-bla-bla с каллбаками, хоть без них. А если юзать всякие хитрые структуры, то может и еще выиграть удастся (хотя скорее всего этого уже и не понадобится).
Спасибо всем за советы, буду смотреть.

И да, затратами на изменение/сортировку списка можно пренебречь. Этим будет заниматься совсем другой процесс, запускаемый не так, чтобы особо часто.
No. 23781    
157719372238.png-(516.11KB, 696×899, Phosphophyllite_(Houseki_no_Kuni)_full_2280475.png)
23781
>>23778
>бинарный поиск на RandomAccessFile
https://bitbucket.org/snippets/Milfie/LrG6bz — собственно, вот. Префиксный поиск по key-value хранилищу с повторяющимися ключами, поэтому всегда чистое lb (n) + 1. По сути, решается задача о нахождении равновесия из механики (ну или задача о взвешивании Тартальи). Сделано только чтение, поскольку запись в этот файл вообще не предполагалась, однако поиск при отсутствии искомого ключа укажет на предшествующую ему запись, т.е. место вставки довольно легко вычислить. Единственная недоделка — он первую запись не читает, но у меня там копирайт стоит.
No. 23789    
157774835213.png-(461.52KB, 720×720, junior_developer_kobayashi_new_year.png)
23789
Всех с наступающим Новым Годом!

Спасибо всем, кто помогал, советовал, и подсказывал начинающим программистам в этом году.
Успехов всем начинающим программистам в их проектах и экспериментах.

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

Всем хорошего кода в Новом Году.
No. 23796    
пытаюсь разобраться с Amazon Fire Phone SDK за одно изучая разработку под андроид по курсу гугла. сейчас прохожу ScrollView и у меня есть проблема, которую никак не могу решить. если я попытаюсь засунуть элемент ZTextView в ScrollView, то получаю ошибку "java.lang.RuntimeException: 3D views (com.amazon.euclid.widget.ZTextViewDelegate@41c262c8) are not allowed to be attached directly to a 2D view hierarchy (android.widget.ScrollView{41c21b58 VFED.V.. ......I. 0,0-0,0}). Please wrap 3D views in a ZViewHost."

окей, заверну ZTextView в ZViewHost. теперь стурктура выглядит как ScrollView => ZViewHost => ZTextView. но теперь я получаю другую ошибку! "java.lang.RuntimeException: You cannot allocate a buffer of size greater than 2048"

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

layout: https://pastebin.com/4Xb2urmk
stack trace: https://pastebin.com/fzFAhFPb
No. 23801    
>>23796
Итак, что мы имеем по стек-трейсу.
1. Вылетает оно на ходу, прямо при попытке отрисовать вьюху
2. Вылетает оно из класса внутреннего API телефона (в SDK я указанных классов не нашел)
3. Оно вылетает на попытке выделить память под текстуру (очевидно, чтобы отобразить какой-то элемент Z-UI, оно делает полигон и накладывает на него текстурку)
4. При этом известно, что телефон где-то там внутри использует OpenGL для отрисовки
5. При этом мы получаем ошибку максимального размера буфера, 2048.

Это может указывать на то, что каким-то образом, мы упёрлись в максимальный размер текстуры (2048 х 2048, предоположительно из-за конкретного GL_MAX_TEXTURE_SIZE). Можно убедиться так ли это, спросив у телефона, и выведя куда-то GL_MAX_TEXTURE_SIZE По-хорошему надо бы достать и декомпилировать ZRenderTextureAllocator.class из телефона, чтобы узнать что там ему не нравится точно. А поcле декомпиляции понять, что оно там такого генерировало, что не уместилось в этот размер.

Но поскольку это всё околопамять проблемы, у меня есть подозрение, что это проблема ScrollView, такая же с которой столкнулся >>23714 кун (вылет при открытии ScrollView), и решением будет попробовать заменить её на RecyclerView или ListView, как советуют >>23717 и >>23721

Попробуй и сообщи о результатах.
No. 23802    
>>23796
оказывается, все работает как ожидается если уменьшить количество текста в ZTextView с ~1800 символов до ~800. возможно, отображать огромное количество текста в 3д плохая идея т.к. это может сказаться на производительности. поэтому буду использовать обычный TextView
No. 23803    
>>23802
Тогда получается, что оно генерит текстуру на базе введенного текста, и при определенном количестве символов вылазит за допустимый размер.
No. 23804    
>>23801
>>23803
спасибо за наводку! если понадобится - попробую использовать RecyclerView или ListView. о них должны похже рассказывать в курсах по андроид разработе которые я прохожу, тогда обязательно попробую повтроить
No. 23807    
157816552995.png-(71.88KB, 720×1280, Screenshot_2020-01-04-20-57-15.png)
23807
снова не понимаю как работать с амазоновскими вью. просто попытался добавить стандратный 2Д элемент (EditText) внутрь ZLinearLayout, чтобы рядом с ним отобразить ZButton, но EditText не отображается, хотя он есть. можно даже ввести текст (которого не будет видно) - на скриншоте можно увидеть курсор на невидемом инпуте.

инпут отобразится лишь в случае, если я вынесу его за пределы ZContainer.

из того, что я попробовал - порылся в документации и пересмотрел layout-ы официальных примерчиков в надежде найти где 2Д вью находятся внутри 3Д вью-групп (нигде). также попробовал заменить ZLinearLayout на LinearLayout, но ничего не изменилось

layout: https://pastebin.com/e9R3GZvQ
No. 23808    
>>23807
> EditText не отображается, хотя он есть. можно даже ввести текст (которого не будет видно)
>инпут отобразится лишь в случае, если я вынесу его за пределы ZContainer.

Есть подозрение, что авторы API не подразумевали что инпут редактирования текста может быть 3D-элементом, и придётся или сооружать свой, реализуя нужные интерфейсы, или имитировать нужное поведение. На возможность этой ситуации указывает тот факт, что в документации некоторые стандартные android-вьюхи имеют свои 3D-адаптированные версии с приставкой Z, например TextView <-> ZTextView: /Fire_Phone/docs/reference/com/amazon/euclid/widget/ZTextView.html

Полный список таких можно увидеть в package summary пакета widget: /Fire_Phone/docs/reference/com/amazon/euclid/widget/package-summary.html

Я подозреваю, что ни одна "обычная" вьюха не отобразится нормально внутри ZContainer'а, и надо использовать / сооружать свою Z-версию, реализуя одновременно стандартные необходимые для этого интерфейсы андройда и интерфейс ZViewInterface: /Fire_Phone/docs/reference/com/amazon/euclid/view/ZViewInterface.html

Т.е. у тебя должно быть что-то вроде
>public class ZEditText extends EditText implements ZViewInterface

Попробуй разобраться, в этом ли дело.
No. 23822    
157865866353.jpg-(119.11KB, 1440×913, Screenshot_20200110-151113.jpg)
23822
Хотелось показать Стиву один крутой сервис, если ещё не видел (недавно его интегрировали с GitHub).
Это Jupyter (ipython notebook) в облаке.
Называется Binder (https://mybinder.org/).
Бесплатный, анонимный, полностью open source-инфраструткура.
Можно играться с кодом в браузере. Можно открывать произвольные ipynb (и не только, а также загружать/просматривать разные другие файлы в файловой системе), подсунуть свой Dockerfile. Можно делать этакие stateless cloud-hosted web apps.
Через некоторое время неактивности докер-контейнер уничтожается, так что сохраняйтесь.
Ссылки:
Запустить python 3:
https://mybinder.org/v2/gh/binder-examples/jupyter-extension/master?filepath=index.ipynb
Запустить Ruby:
https://mybinder.org/v2/gh/RubyData/docker-stacks/master?filepath=README.ipynb

Доки:
https://mybinder.readthedocs.io/en/latest/sample_repos.html
https://mybinder.readthedocs.io/en/latest/using.html
https://mybinder.readthedocs.io/en/latest/config_files.html
https://binderhub.readthedocs.io/en/latest/developer/repoproviders.html
https://ipywidgets.readthedocs.io/en/latest/examples/Using Interact.html
https://jupyter.org/widgets
No. 23824    
>>23808
попробовал вот сделать как ты сказал, в итоге получилось такое: https://pastebin.com/1U8RWv77

пролема в том, что совершенно ничего не изменилось. вью функционирует так же и не отображается. и я не пойму как мне что-то отрисовать используя метод, который я как-то имплементировал. попытался оверрайднуть onDraw примером из интернетов, но ничего не изменилось, кроме того, в описанни ZDelegate я наткнулся на это:
> It is also traditional to override the onDraw method to raise an exception; in a Euclid hierarchy, the onDraw method should never be called

также попробовал имплементировать ZDepthLayoutParams, посмотрел доки, а еще поискал по всему гитхабу ZViewInterface, надеясь найти пример - 0 результатов (в гугле 7), воть

нужно понять как с помощью данных мне методов хотя бы нарисовать бордер, изменить background и отобразить текст, сохранив при этом функционал EditText
No. 23825    
>>23824
>нужно понять как с помощью данных мне методов хотя бы нарисовать бордер, изменить background и отобразить текст, сохранив при этом функционал EditText

Это всё, конечно, не очень простой процесс.
Отталкиваясь от цели - редактируемое поле в Z-варианте, у тебя есть три пути:
1. Создать имитацию элемента доступными средствами.
2. Создать настоящую реализацию (наобум)
3. Создать настоящую реализацию (на базе оригинального кода амазон)

Путь 1. Сделать имитацию EditText. Например, набросать в лейауте картинку-бэкграунд (например ZImageView, или любой подходящий визуально элемент), поверх неё поместить ZTextView, и поверх них твой "невидимый", но рабочий EditTextView. Затем сделать так, чтобы содержимое твоей ZTextView обновлялось текстом введенным в EditTextView. Если всё срастется и всё сделать правильно, получится удовлетворительная имитация нужного элемента.

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

Поэтому, чтобы понять как в этой штуке хоть что-то нарисовать, предлагаю пойти обратным путём - создать класс MyZTextView / MyZTextViewDelegate, отпочковавшись от ZTextView / ZTextViewDelegate (вроде они оба не final), и засунуть их в тестовую вьюху. А затем начать экспериментально подменять реализацию тех методов, которые, как ты подозреваешь, отвечают за отрисовку, и смотреть на результат. Так ты сможешь найти какой именно из методов что-то рисует, и подменить отрисовкой того, что ты хочешь.

Если всё получится, ты сможешь затем перенести рабочий код в свой ZEditText.
И если даже известный рабочий код не станет там ничего рисовать, значит дело в неполной / неправильной имплементации интерфейса, и надо будет её доделывать.

Ниже будет Путь 3, который и самый простой, и самый сложный одновременно.
No. 23826    
>>23824
>>23825
Путь 3. Просто посмотреть как сами авторы это делают. По логике это можно сделать, распаковав и декомпилировав ZTextView и ZTextViewDelegate, и подсматривая в них, воссоздать их в виде своих MyZTextView и MyZTextViewDelegate, это дало бы понимание сразу всего процесса отрисовки. После чего, уже с этим пониманием, можно было бы сделать наконец-то ZEditTextView.

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


public class ZTextViewDelegate extends ZViewDelegate
{
    public ZTextViewDelegate(final View view, final Context context, final AttributeSet set, final int n) {
        super((View)null, (Context)null, (AttributeSet)null, 0);
        throw new RuntimeException("Stub! You are bundling a stubbed jar in the apk! Please move it to the classpath instead.");
    }
    ...
}


И чтобы узнать, как же они там всё же внутри всё сделали, надо достать нужный jar, class, или dex непосредственно с устройства, и потом уже то что достали декомпилировать. Если ты сможешь найти и достать нужный класс с телефона, можно пойти этим путём.
No. 23827    
>>23824
На самом деле, если этот EditTextView не какой-то краеугольный камень, я бы рекомендовал отложить этот вопрос и двигаться пока дальше, потому что застрять тут можно прилично. А пока двигаешься дальше, можно попробовать найти и взять на заметку приложение на Fire Phone где нужная EditTextView есть, и подсмотреть потом как там у них сделано
No. 23828    
>>23825
>>23826
>>23827
спасибо что объяснил как это делается! похоже, все не так уж просто как я себе представлял. думаю, действительно, отложу это дело на потом, когда мне действительно очень-очень нужен будет свой ZView (а не из любопытства). или же когда будет желание разобраться как там все устроено.

кстати, в стоковых 3д приложениях я ZEditText не замечал. такие инпуты выглядят как обычные андроидовские и 3д фич в них нету. не откидают тень и никак не показывают себя в объеме. возможно, даже amazon в своих приложениях на fire phone использовала лишь обычный ExitText
No. 23829    
>>23828
>возможно, даже amazon в своих приложениях на fire phone использовала лишь обычный EditText
Учитывая, что элемент не включили в SDK, велика вероятность что так оно и есть.

Сообщай о дальнейших успехах, и спрашивай если будут какие-то непонятные проблемы снова.
No. 23832    
Наступил бамплимит, поэтому сделали новую нить >>/dev/23830
Закрепите её вместо этой, пожалуйста.
Удалить сообщение []
Пароль  
[Mod]