This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2016-11-08
Channels
- # aws (3)
- # bangalore-clj (1)
- # beginners (47)
- # boot (137)
- # cider (1)
- # cljs-dev (67)
- # cljsrn (7)
- # clojure (122)
- # clojure-argentina (5)
- # clojure-berlin (4)
- # clojure-czech (12)
- # clojure-france (27)
- # clojure-italy (9)
- # clojure-russia (88)
- # clojure-spec (44)
- # clojure-uk (157)
- # clojurebridge (2)
- # clojurescript (236)
- # datomic (5)
- # devcards (3)
- # dirac (23)
- # emacs (13)
- # hoplon (29)
- # incanter (1)
- # leiningen (41)
- # microservices (1)
- # off-topic (78)
- # om (145)
- # onyx (13)
- # parinfer (8)
- # pedestal (4)
- # planck (15)
- # protorepl (1)
- # re-frame (72)
- # reagent (25)
- # ring (2)
- # specter (23)
- # test-check (9)
- # untangled (106)
- # vim (8)
- # yada (1)
@seryh ну как сказать, "мелкий", у меня, к примеру, дофигища всего на сервере, веб юае и в айос аппликейшене, и 8к до сих пор нет в сумме. И это с учетом того, что там тыщ 5 почти - реактовские компоненты – самый loc-прожорливый код. Я бы это всё и в 30 kloc питона не вписал бы, наверное
у меня в одном старом проекте только на фронте (backbonejs) 51k строк. и это новосибирский провинциальный сайтик. но все канеш относительно.
в любом случае интересно будет послушать почему они на руби переехать решили. последние года два о руби много критики слышал. странное решение так то
близится вот рефакторинг этого легаси. думаю на clojurescript с реагентом переехать все это дело
может народ не сумели найти - ну или первый прототип всегда же Г выходит, язык не важен 🙂
@misha: не приходилось решать задачу бекграунд сервисов(ios,andoid) для react native?
@laseray 5 лет костылей под постоянно меняющиеся бизнес процессы. и реализацию хотелок под каждого партнера
@a.espolov это каких? "альт-табнуться", и чтоб работало? пока нет
либо, может быть можно каких-то флажков в реакте понаставить, чтобы твой основной тред умел в бекграунде работать. но конкретней не посоветую, не столкнулся еще
у меня в нативном модуле в отдельной жс машине живет датаскрипт, который с сервером синкается
ты прям JavaScriptCore поднимал еще один или RCTBridge создал еще один @misha ?
т.е. там чисто datascript у тебя получается, без RN?
#import "DatascriptServer.h"
@implementation DatascriptServer
RCT_EXPORT_MODULE();
RCT_EXPORT_METHOD( execute:(NSString *)cljsFnName
callback:(RCTResponseSenderBlock)callback)
{...}
RCT_EXPORT_METHOD(executeWithArgs:(NSString *)cljsFnName
args:(NSString *)arg
callback:(RCTResponseSenderBlock)callback)
{...}
остальное - чисто заинитить жскор и датаскрипт в нем, + восстановить базу из файла/с сервера
#import <JavaScriptCore/JSContext.h>
#import <JavaScriptCore/JSValue.h>
#import "RCTBridgeModule.h"
@interface DatascriptServer : NSObject <RCTBridgeModule>
@property (atomic, strong) dispatch_queue_t interopQ;
@property (atomic, strong) dispatch_queue_t persistQ;
@property (atomic, strong) NSString *storageFilePath;
@property (atomic, strong) JSContext *context;
@property (atomic, strong) JSValue *ns;
- (instancetype)init;
@end
заопенсорси и я сам потом отвечу!:)
пока что - очень карявое апи. хочу как-то кошерно (кошернее) сделать, а потом показывать.
и чо как в итоге перформанс? не зря все это? Идея то классная как можно куски которые жрут много ускорить
сделать жскор, прочитать в нем отдельно скомпиленый файл с базой, и парой функций, и заинитить в AppDelegate.m
апи: string fn-name ;; которая определена в отдельном .cljs файле базы, типа pull-many string fn-args ;; запакованные транзитом аргументы
а на ведроиде ты не смотрел апи? там тоже свой жскор?
у меня и так ласты склеиваются по всему стеку раздупляться. да и ведра потестировать нет
о да, зато фуллстек 🙂
(def ReactNative (js/require "react-native"))
(def ^:private NativeModules (.-NativeModules ReactNative))
(def ^:private DSS (.-DatascriptServer NativeModules))
(defn- callback [on-success on-error]
(fn [err result]
(let [e (or on-error js/console.error)
s (or on-success js/console.log)]
(if err
(e err)
(s (t/from-string result))))))
(defn- execute [on-success on-error fn-name & args]
(if (nil? args)
(.execute DSS fn-name (callback on-success on-error))
(.executeWithArgs DSS fn-name (transit/to-string args) (callback on-success on-error))))
кароче там стыдобы много, но идея такая: - дс в отдельном жс-коре, с парой функций-обертов вокруг дс апи (q, pull, pull-many, etc.) - вызов ф-й через реактовское асин-апи - запаковка/распаковка аргументов транзитом
а чо транзит?
@misha я правильно понял у тебя все таки есть сервис(тот который с беком общается)?
@artemyarulin так а как без транзита? тебе ж надо передать аргументы из одного жскора в другой. edn будет медленнее, особенно для упаковки результатов pull-many
да я хз, edn/транзиты/жсоны, 100500 вариантов нынче - вот интересно просто почему транзит. Я если честно путаюсь уже в них
@artemyarulin так вроде ж не сложно
@a.espolov Единственное что могу сказать про бекграунд - RN работает, дергать его можно, я это делаю через свою обертку https://github.com/artemyarulin/react-native-eval
-(void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
if ([providerClassName isEqualToString:@"EWSProvider"])
{
ExecutorHandler executor = [JSEnvironment executorWithBridge:[JSEnvironment bridgeWithURL:[JSLoader mostRecentAppURL]]];
executor(@"window.wmr.ews_mail_checker.checkMail",
@[providerSettings[@"ewsURL"],
account.login,
account.password,
@(0)],
^(NSString* error, NSDictionary* resp) {
// handle new mail
}
}
но это опять же тебе нужно смотреть - какого рода ты хочешь background жобу делать. Геолокейшен там одно, background fetch там другое
@artemyarulin так бекграунд живет этот пока приложение свернуто?
ага https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html ну оно конечно не живет в бекграунде, иОС типа умный и запускает твой коллбек раз в N минут
в среднем раз в пол часа я бы сказал. На ведроиде хз - вроде можно сервис сделать чтоб 100% времени висел и жрал батарейку 🙂
на свифте норм, глаза не вытекают 🙂
I like this one. Very elegant
сука не могу каждый раз ржу 😄 Простите
ну так в этом вроде и есть преимущество RN перед похожими инструментами, всегда можешь спустится в нативку и делать там что хочешь)
даже не знаю, что больнее: количество строк в ответах, или горизонтальные скроллы в них
@savelichalex а где нельзя спуститься до нативки?
phonegap, cordova
native script еще
на сколько я помню phonegap, cordova это одно и тоже и там можно из js дергать нативный код и из нативного js
а чо кста кто-нить слыхал про native script? Даже полу-метрвый фонган/кордова упоминается чаще