Dmitry
Могу посоветовать не юзать realm, у меня был опыт только с ним и он очень горький
На самом деле тоже не срослось. По напутствию @gblack9 начал работать с файловой системой
Anastas
привет народ! как быстро открыть эмулятор андроид через командную строку? а то каждый раз приходиться запускать андроид студио, и потом его закрывать
Anastas
оо спасибо! скоро пойду проверю )
Anastas
да, сработало 👍🏻👍🏻👍🏻 я немного улучшил команду ))) emulator -avd Pixel_3_API_28 & эта папка в PATH уже добавлена как оказалось )
Андрей
Итог здравствуйте 9
Anatoliy
Есть ли способ разрешить WebView видеть локальные файлы? Я использую react-native-cached-image чтобы кэшировать картинки, создаю WebView вот с такими свойствами: allowFileAccess={ true } allowUniversalAccessFromFileURLs= { true }
Anatoliy
файл который хочу показать находится по пути вида /data/user/0/com.appid/cache/imagesCacheDir/image.jpg
🔥
ребята
🔥
а как создавать альбомы в галерее
Vasyl
Vasyl
"dependencies": { "@babel/runtime": "^7.0.0", "@builderx/utils": "^0.1.6", "@ptomasroos/react-native-multi-slider": "^1.0.0", "@react-native-community/async-storage": "^1.4.2", "color": "^3.1.0", "google-libphonenumber": "^3.2.2", "i18n-js": "^3.2.1", "lodash": "^4.17.11", "lz-string": "^1.4.4", "lzjs": "^1.3.0", "moment": "^2.24.0", "patch-package": "^6.1.0", "prop-types": "^15.6.2", "ramda": "^0.25.0", "react": "16.5.0", "react-multistep": "^3.2.4", "react-native": "^0.59.9", "react-native-accessibility": "^1.0.7", "react-native-animatable": "^1.3.2", "react-native-card-stack-swiper": "^1.1.0", "react-native-contacts": "^4.0.2", "react-native-country-picker-modal": "^0.7.1", "react-native-custom-picker": "^0.3.1", "react-native-deck-swiper": "^1.5.26", "react-native-device-info": "^2.1.2", "react-native-draggable-grid": "^1.0.5", "react-native-elements": "^0.19.1", "react-native-facebook-account-kit": "^1.1.0", "react-native-fast-image": "^5.1.2", "react-native-fbsdk": "^0.8.0", "react-native-firebase": "^5.3.1", "react-native-fs": "^2.13.3", "react-native-geolocation-service": "^2.0.0", "react-native-gesture-handler": "^1.1.0", "react-native-gifted-chat": "^0.7.3", "react-native-gradient-buttons": "^1.2.9", "react-native-image-picker": "^0.27.2", "react-native-indicator": "^1.0.0", "react-native-iphone-x-helper": "^1.2.0", "react-native-keyboard-aware-scroll-view": "^0.8.0", "react-native-languages": "^3.0.2", "react-native-linear-gradient": "^2.5.3", "react-native-loading-spinner-overlay": "^1.0.1", "react-native-modal": "^7.0.2", "react-native-modal-datetime-picker": "^6.0.0", "react-native-multistep-wizard": "0.0.1", "react-native-permissions": "^1.1.1", "react-native-phone-input": "^0.2.1", "react-native-pose": "^0.9.0", "react-native-reanimated": "^1.0.0-alpha.12", "react-native-search-box": "0.0.19", "react-native-settings": "^0.1.0", "react-native-share": "^1.1.3", "react-native-simple-markdown": "^1.1.0", "react-native-simple-modal": "^9.0.1", "react-native-smooth-pincode-input": "^1.0.3", "react-native-sort-grid": "^1.0.1", "react-native-sound": "^0.10.12", "react-native-splash-screen": "^3.2.0", "react-native-svg": "^9.3.7", "react-native-switch": "^1.5.0", "react-native-textarea": "^1.0.2", "react-native-vector-icons": "^6.4.2", "react-native-view-shot": "^2.5.0", "react-native-webview": "^5.3.1", "react-navigation": "^3.9.0", "react-navigation-fluid-transitions": "^0.3.1", "react-redux": "^5.1.0", "redux": "^4.0.1", "redux-logger": "^3.0.6", "redux-persist": "5.6.12", "redux-thunk": "^2.3.0", "socket.io-client": "^2.1.1", "sockette": "^2.0.5", "svg-path-properties": "^0.4.5", "ws": "^7.0.0" }, "devDependencies": { "@babel/core": "7.0.0", "@babel/preset-env": "^7.4.5", "@jest/reporters": "^24.8.0", "@types/jasmine": "^3.3.13", "babel-eslint": "^10.0.1", "babel-jest": "23.6.0", "babel-plugin-transform-remove-console": "^6.9.4", "babel-preset-latest": "^6.24.1", "babel-preset-react-native": "^4.0.1", "detox": "^12.11.2", "detox-expo-helpers": "^0.6.0", "eslint": "^5.3.0", "eslint-config-airbnb": "17.1.0", "eslint-config-google": "^0.11.0", "eslint-plugin-import": "^2.14.0", "eslint-plugin-jsx-a11y": "^6.1.1", "eslint-plugin-react": "^7.11.0", "expo-detox-hook": "^1.0.10", "jest": "^24.8.0", "metro-react-native-babel-preset": "^0.46.0", "react-test-renderer": "16.5.0" }, "rnpm": { "assets": [ "./assets/fonts/" ] }, "jest": { "preset": "react-native", "transform": { "^.+\\.js$": "babel-jest" } }, "detox": { "test-runner": "jest", "specs": "./e2e/", "configurations": { "ios.sim.debug": {
Vasyl
"binaryPath": "ios/build/Build/Products/Debug-iphonesimulator/PlayDate.app", "build": "xcodebuild -project ios/PlayDate.xcodeproj -scheme PlayDate -configuration Debug -sdk iphonesimulator -derivedDataPath ios/build", "type": "ios.simulator", "name": "iPhone Xʀ" } } } }
Vasyl
Vasyl
Vasyl
другой вариант
Vasyl
Dmitriy (Dima)
Всем привет. Подскажите канал с вакансиями для поиска фронтэнд разработчиков
Никита
в описании канала. @javascript_jobs Может кстати правила в закреп вернуть?
Kir
Привет Подскажите как "нажать" кнопку под modal?
Dmitry
Привет Подскажите как "нажать" кнопку под modal?
В смысле? Модалка перекрывает все, что под ней же
Artem
Как делается оценка приложения в AppStore и Google Play? Какая механика вообще для пользователя ? Что со стороны UI должно быть ?
Vladimir
Как делается оценка приложения в AppStore и Google Play? Какая механика вообще для пользователя ? Что со стороны UI должно быть ?
любая. Обычно диалог "Нравится? Поставьте нам 5 в сторе" и по клику на ок, надо отправить в стор
Denis
Если мне нравится я сам пойду поставлю
Denis
И я не один такой
Vladimir
не спорю)
Vladimir
я вот вообще оценки не ставлю, но люди разные
Artem
любая. Обычно диалог "Нравится? Поставьте нам 5 в сторе" и по клику на ок, надо отправить в стор
А как принято отслеживать что юзеру показывалось уже сообщение об этом, нужно ли повторно показывать и такие ньюансы. Ведь сразу при первом входе не дело просить оценку
Gena
А как принято отслеживать что юзеру показывалось уже сообщение об этом, нужно ли повторно показывать и такие ньюансы. Ведь сразу при первом входе не дело просить оценку
По разному. Для iOS был когда-то нативный модуль очень популярный, посмотрите на его конфигурацию в описании, думаю будет полезно: https://github.com/nicklockwood/iRate
Artem
Спасибо за помощь
Vladimir
А как принято отслеживать что юзеру показывалось уже сообщение об этом, нужно ли повторно показывать и такие ньюансы. Ведь сразу при первом входе не дело просить оценку
Наверняка есть готовые, но логика обычно нетривиальная, не раньше недкли, не раньше, чем юзнул несколько фич и так двлее
Артем
Есть кто-нибудь кто хорошо шарит в realm js?
Anonymous
Есть кто-нибудь кто хорошо шарит в realm js?
ха, вот собирался вникнуть после pouchDb...
Dmitry
Артем
сча распишу
Артем
делаю мессенджер, есть диалоги и есть и в каждом диалоге есть список сообщений. Можно сделать чтобы у каждого диалога был список сообщений, а можно чтобы сообщения были сами по себе. Вопрос: что будет по производительности быстрей, получение сообщений из списка сообщений(их может быть десятки тысяч) или получение сообщений через диалог(сделать чтобы у каждого диалога были свои сообщения)?
Артем
если непонятно расписал могу перефразировать
Anonymous
эммм
Anonymous
а частями получать? зачем сразу то всё подргужать?
Артем
сразу получать я не собираюсь
Anonymous
тогда не понял
Артем
1) можно хранить все сообщения для всех диалогов в одном списке собщений и потом отсеивать сообщения по диалогу 2) можно хранить сообщения в каждом диалоге отдельно и из диалога получать список сообщений(придется сначала диалог найти)
Артем
первый вариант
Артем
class MessageSchema { public static schema: Realm.ObjectSchema = { name: 'Message', primaryKey: 'id', properties: { id: 'int', message: 'string', userCreator: 'UserPreview' } }; public id: number; public message: string; public userCreator?: UserPreview; } class DialogSchema { public static schema: Realm.ObjectSchema = { name: 'Dialog', primaryKey: 'interlocutorId', properties: { lastMessage: 'Message?', unreadMessagesCount: 'int?', interlocutor: 'UserPreview?', } }; public lastMessage: Message; public unreadMessagesCount: number; public interlocutor: UserPreview; }
Артем
второй вариант
Артем
class MessageSchema { public static schema: Realm.ObjectSchema = { name: 'Message', primaryKey: 'id', properties: { id: 'int', message: 'string', userCreator: 'UserPreview' } }; public id: number; public message: string; public userCreator?: UserPreview; } class DialogSchema { public static schema: Realm.ObjectSchema = { name: 'Dialog', primaryKey: 'interlocutorId', properties: { lastMessage: 'Message?', unreadMessagesCount: 'int?', interlocutor: 'UserPreview?', messages: 'Message[]' } }; public lastMessage: Message; public unreadMessagesCount: number; public interlocutor: UserPreview; public messages: Message[]; }
Артем
боюсь что если хранить все сообщения для всех диалогов в одном списке(сообщений может быть очень много), то при получении сообщений по кокретному диалогу производительность может быть не очень
Артем
понятно выразился?
Anonymous
так ты цепляй за неделю например, если потребуется тащи еще с сервака, зачем локально всё хранить?
Anonymous
или в настройках поставь за какое время хранить локально
Артем
😂
Артем
надо чтобы при получении сообщений с сервака они все в бд записывались чтобы в оффлайне можно было читать
Артем
телега же работает в оффлайне, так же нужно
Anonymous
да она черех жопу работает, половина диалогов есть, половины нет
Anonymous
ну 10 000 сообщений в текстовом формате это не много же
Anonymous
тыж не файлы хранишь
Anonymous
и 1 000 000 не много
Anonymous
устройства щас увсех вместительные
Артем
в общем походу пойду в гитхаб у них спрашивать
Артем
нужно самый производительный вариант найти
Anonymous
отпиши тут потом)
Артем
окей)
Anonymous
а то я тоже с ним поработать планирую
Vlad
нужно самый производительный вариант найти
Посчитай по скорости выполнения операций (O-нотация и все такое)
Артем
https://github.com/realm/realm-js/issues/2421
Артем
Вот еще раз здесь расписал, если выше описанное непонятно кому-либо)
Dmitry
Вот еще раз здесь расписал, если выше описанное непонятно кому-либо)
Ну я тебе могу сразу сказать, так как изучал этот вопрос, что телега не хранит все сообщения, а только часть последних
Dmitry
То есть, даже так, они новые сообщения записывают в кэш, поверх сообщений в старых диалогах, в которых ты давно ничего не писал
Dmitry
ты все равно не сможешь хранить все сообщения оффлайн, все ресурсы телефона конечны, поэтому можешь смело хранить 100-300 сообщений, каждого диалога, а при скроле, когда они закончатся подгружать с сервера не кладя в кэш.
Kir
В смысле? Модалка перекрывает все, что под ней же
Да, это так. Но при условии, что Modal transparent=true и отступе, скажем, сверху, можно увидеть, что находится под modal. Обычно вверху элементы управления, кнопки. Вот к ним доступ и необходим.
Dmitry
Да, это так. Но при условии, что Modal transparent=true и отступе, скажем, сверху, можно увидеть, что находится под modal. Обычно вверху элементы управления, кнопки. Вот к ним доступ и необходим.
Нет, не так. Модалка перекрывает все, что под ней. Отступы позволяют корректировать положение содержимого модального окна, но не самой модалки
Dmitry
Вопрос был в другом
Храни данные плоско
Kir
Нет, не так. Модалка перекрывает все, что под ней. Отступы позволяют корректировать положение содержимого модального окна, но не самой модалки
Да, все так... Скажем есть контейнер самой модалки, его фон прозрачный, сверху идет слой со всеми элементами. Так вот КАК пробить контейнер, чтоб нажать кнопку под ним? Или как "выдвинуть" кнопку НАД этим контейром?
Vasiliy
Доброго дня может кто-то подскажет, где можно толковое почитать про реверс ipa ? что-то я нагуглил только совсем базовые вещи
Dmitry
Да, все так... Скажем есть контейнер самой модалки, его фон прозрачный, сверху идет слой со всеми элементами. Так вот КАК пробить контейнер, чтоб нажать кнопку под ним? Или как "выдвинуть" кнопку НАД этим контейром?
Я же говорю никак, только костылями, это же противоречит логике даже, либо это не должна быть модалка, либо у неё должна быть своя кнопка закрытия
Ivan
Да, все так... Скажем есть контейнер самой модалки, его фон прозрачный, сверху идет слой со всеми элементами. Так вот КАК пробить контейнер, чтоб нажать кнопку под ним? Или как "выдвинуть" кнопку НАД этим контейром?
когда-то был кейс с подсказками, нужно было затемнять весь экран и высветить над этим активный элемент с подсказкой, пришлось заморачиваться с клонированием элементов, отслеживанием их onLayout и костылями с таймерами для дополнительной точности позиционирования клона при анимациях навигации.. и... лучше так не делать)
Kir
Спасибо... Пойду пилить анимированый View 😏
Vladislav