z****e 发帖数: 54598 | 1 红果果地打那些说前后端一起做的脸
你说的这些,那些前端程序员能看懂么?
像金字塔一样的callback陷阱真是让人无语
都说try catch恶心,callback陷阱没几个前端程序员能绕开的 |
|
z****e 发帖数: 54598 | 2 需要汇总数据,所以用vert.x比较容易解决这个需求
其他server的话,汇总数据要自己写,bus要自己建,vert.x自己就有bus
可以直接用
然后latency这个需求,这个用异步可以很容易解决
看看rxjava的subscribe,把你需要callback的部分放到subscribe中去就好了
这样一旦建模完成就可以callback回来,然后你要怎么弄就怎么弄了
唯一的问题是这两个刚做出来没多久,可以参考的文档不多
不过本身你这个需求就比较另类,没有太多的轮子可以直接用
所以如果不怕文档少的话,就放手做吧
spark用起来比vertx麻烦不少,而且spark主要是建模容易
跟hdfs等数据源的接口比较容易做
如果你是自己建模的话,不用spark也没啥大不了的
做吧
N |
|
z****e 发帖数: 54598 | 3 但是fp会带来callback陷阱
为了解决callback陷阱而引入了reactivex
也就是subscribe或者说是observer模式
用了reactivex之后,感觉fp其实也没啥必需的
除了lambda以外,如果不怕麻烦加多一层其实也没啥
lambda就省去了外面那一层class
wdong不是在问下一个big thing吗?
rxjava咯,rxjava发布1.0的时候可是thx了一堆人
并触发了一堆新项目,什么rxjdbc之类的
这是里程碑式的存在,这里一堆开源的项目大有可为
炮灰们可以上了 |
|
z****e 发帖数: 54598 | 4 container.deployVerticle("foo.ChildVerticle", new AsyncResultHandler
() {
public void handle(AsyncResult asyncResult) {
if (asyncResult.succeeded()) {
System.out.println("The verticle has been deployed, deployment
ID is " + asyncResult.result());
} else {
asyncResult.cause().printStackTrace();
}
}
});
你说的是这种吧?
这个其实不是,verticle的名字放在第一个参数里面,也就是那个foo.ChildVerticle
这个才是verticle,后面那个handler是异步时候需要做的,其实就是一个lambda
文档为了向后兼容,所以用老的方式写,... 阅读全帖 |
|
z****e 发帖数: 54598 | 5 实话说,handler这个部分用fp会比较容易搞
也就是callback,异步这些概念,理解下再弄比较好
很开就会遇到callback hell,那一层层的金字塔
rxjava就是你要找的救星 |
|
z****e 发帖数: 54598 | 6 会依次对比node.js, fp, spring, ejb和vert.x的解决方案,然后自己看哪个最好
从最基本的说起,所有语言都一定会有两个东西
一个是变量,我们用var(variable)来表示
另外一个是方法/函数,用func(function)表示
假设有一个函数和一个变量
var var1;
func func1(){
var1 = 0;
return var1+1;//应该是1
}
那现在如果有多个线程并发
那结果会怎样?
那在func1执行完var1 = 0;之后
就有可能有其他线程插入,把var1改成其他值
比如改成var1 = 2; 或者var1 = "goodbug乱入";
那瞬间func1返回值不再是1了,那这个显然是不可接受的
那怎么办?
第一种是fp的做法,fp说,把变量做成immutable
也就是var -> val(value),把var1改成
val1 = 0;
return val1+1;//就一定是1鸟
但是这样为了多线程把所有的参数都搞成immutable鸟
然后你写代码时候,需要时刻提醒自己
常量啊,常量啊,常量啊……
第二种是node.js等... 阅读全帖 |
|
z****e 发帖数: 54598 | 7 async还要库?
只要有lambda,什么都可以轻易做到async
为什么要库?
即便没有lambda,reflection也同样可以做到完全的async
话说async完全不完全其实就是看你有没有block thread
只要你能让你的组件不block thread,你就能做到完全的async
而且对于多线程来说,一个最最最简单的做到async的方法
就是对于某些特别耗时的step,额外启动独立的线程就好了
所谓worker只是增加了callback func进去而已
如果不需要callback的话,直接new thread().start(),搞定
这个就是最简单的async |
|
z****e 发帖数: 54598 | 8 会依次对比node.js, fp, spring, ejb和vert.x的解决方案,然后自己看哪个最好
从最基本的说起,所有语言都一定会有两个东西
一个是变量,我们用var(variable)来表示
另外一个是方法/函数,用func(function)表示
假设有一个函数和一个变量
var var1;
func func1(){
var1 = 0;
return var1+1;//应该是1
}
那现在如果有多个线程并发
那结果会怎样?
那在func1执行完var1 = 0;之后
就有可能有其他线程插入,把var1改成其他值
比如改成var1 = 2; 或者var1 = "goodbug乱入";
那瞬间func1返回值不再是1了,那这个显然是不可接受的
那怎么办?
第一种是fp的做法,fp说,把变量做成immutable
也就是var -> val(value),把var1改成
val1 = 0;
return val1+1;//就一定是1鸟
但是这样为了多线程把所有的参数都搞成immutable鸟
然后你写代码时候,需要时刻提醒自己
常量啊,常量啊,常量啊……
第二种是node.js等... 阅读全帖 |
|
z****e 发帖数: 54598 | 9 async还要库?
只要有lambda,什么都可以轻易做到async
为什么要库?
即便没有lambda,reflection也同样可以做到完全的async
话说async完全不完全其实就是看你有没有block thread
只要你能让你的组件不block thread,你就能做到完全的async
而且对于多线程来说,一个最最最简单的做到async的方法
就是对于某些特别耗时的step,额外启动独立的线程就好了
所谓worker只是增加了callback func进去而已
如果不需要callback的话,直接new thread().start(),搞定
这个就是最简单的async |
|
z****e 发帖数: 54598 | 10 future并不是真正的异步
callback的时候会block
当然wwzz说了completefuture那个我不知道
没有用过,不知道运作原理如何
但是最原始的future还是容易block住
而用了lambda之后就可以不用future
直接把callback func扔进去就好了
java8之所以需要弄lambda多少也是为了这个考虑
否则弄个匿名类放进去就有些怪异了
但是lambda层层嵌套还是会造成灾难
所以要用rxjava |
|
N********n 发帖数: 8363 | 11
C# has had many asynchronous patterns for a while but old patterns
required callbacks leading to goto-like code. Finally async/await
came along to get rid of callbacks so now it's no longer painful
to write & maintain asynchronous code. |
|
B********r 发帖数: 397 | 12 恩,callback比future要好,不过容易callback hell, 最近流行的reactive
programming貌似解决了这个问题,而且不需要long polling?
比如 akka, 不过akka真正牛逼的是multi-thread可以直接变成multi-nodes |
|
A*******e 发帖数: 2419 | 13 用functor是更清楚,但本质问题是一样的。
struct GetFoo {
void operator()(Foo foo) {
v.emplace_back(std::move(foo));
}
vector v;
};
using Callback = std::function;
这里GetFoo可以当Callback用吗?
引入std::move之后,call-by-value和call-by-ref用法有区别了。只读时用ref,需要
复制时用value+move。但编译器似乎还是认为这是同一个函数,故有此疑惑。 |
|
c*********e 发帖数: 16335 | 14 en,可能是没写callback.
但是,我在angularjs的controller里写的这段代码,怎么把callback传到sails那边呢? |
|
p*a 发帖数: 592 | 15 sails没用过,不清楚。不过你这个问题问得不对吧,callback不需要传到server端,
你在server写了success或者error response,angular里应该相应的callback就会被
call啊。
呢? |
|
d****n 发帖数: 1637 | 16 lock 不lock就是个通用的比喻。Node lock 一个tick是时间感念,别的语言是空间概
念。
别说你不懂啥叫double callback。
你这个避免不了callback hell |
|
W***o 发帖数: 6519 | 17 以前写过一个类似的,就是先找儿子,再给每个儿子找儿子:
var async = require('async');
var parentLaoWang = "Lao Wang"
if (parentLaoWang) {
var laoWangFamily = {"laoWang": []};
var findKidByParent = function(parent, callback) {
//findKidsByParent is a custom function on Kids collection
Kids.findKidsByParent(parent, function (err, foundKids) {
//foundKids is Array
if (foundKids) {
var currParentAndKids = {"parent" : parent, "kids" :
foundKids};
la... 阅读全帖 |
|
d****n 发帖数: 1637 | 18 Notable changes
This list of changes is relative to the last io.js v3.x branch release, v3.3
.0. Please see the list of notable changes in the v3.x, v2.x and v1.x
releases compiled in unified CHANGELOG for a more complete list of changes
from 0.12.x. Note, that some changes in the v3.x series as well as major
breaking changes in this release constitute changes required for full
convergence of the Node.js and io.js projects.
child_process: ChildProcess.prototype.send() and process.send() operate
... 阅读全帖 |
|
n*****t 发帖数: 22014 | 19 https://docs.angularjs.org/api/ng/service/$http
The response object has these properties:
data – {string|Object} – The response body transformed with the transform
functions.
status – {number} – HTTP status code of the response.
headers – {function([headerName])} – Header getter function.
config – {Object} – The configuration object that was used to generate the
request.
statusText – {string} – HTTP status text of the response.
A response status code between 200 and 299 is considered a success s... 阅读全帖 |
|
n*****t 发帖数: 22014 | 20 我把 $http 包成了 $ajax,callback = function (err, data ...), 两个 callback
实在太丑了。
现在又多个好处,这帮二货以后再改 interface,我就不用满世界 grep $http 了。 |
|
N********n 发帖数: 8363 | 21
啥语言都能写ASYNC。但要是因为写ASYNC导致遍地CALLBACK有如GOTO泛滥,
这个代码质量可想而知。所以才需要C#的ASYNC/AWAIT机制,写的代码像
SYNC风格,编译器幕后整编成ASYNC模式,无CALLBACK,也不用observer/
subscriber, 这才是正解。JAVA目前只能呵呵了,属于门还没摸着呢。 |
|
n*****t 发帖数: 22014 | 22 大哥,正因为玩 node,所以才狠不习惯 catch 啊,callback 不就行了吗?try catch
白白增加了好几行代码,强迫症的我受不了啊 。。。
我现在看到需要 catch 的就先戴个套,省得闹心。还有啊,promise 也不咋滴,阿拉
也要戴个套,用一个 callback 做 resolve reject。 |
|
n******7 发帖数: 12463 | 23 基本就是试了一堆方法,最后只能password
然后chdir /home/nowhere7/失败
ssh -vvvv [email protected]/* */
OpenSSH_6.7p1 Debian-5, OpenSSL 1.0.1t 3 May 2016
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to ftp.mitbbs.com [8.8.8.8] port 22.
debug1: Connection established.
debug1: identity file /home/nowhere7/.ssh/id_rsa type 1
debug1: key_load_public: No such file or directory
debug1: identity f... 阅读全帖 |
|
w*s 发帖数: 7227 | 24 i have a sqlite3 nested query case. Was hoping to push each query result to
a json array and return it back. But always get "Error: SQLITE_MISUSE:
Database handle is closed" for the 2nd select call. Seems the db.close()
gets called before the 2nd query.
Why is this, i thought serialize can take care of this. How to fix it please
?
var getMyDbInfo = function(callback) {
var db = new sqlite3.Database("MyDB.sqlite3");
db.serialize(function() {
var myJsonObj = {};
db.each("se... 阅读全帖 |
|
w*s 发帖数: 7227 | 25 i have a sqlite3 nested query case. Was hoping to push each query result to
a json array and return it back. But always get "Error: SQLITE_MISUSE:
Database handle is closed" for the 2nd select call. Seems the db.close()
gets called before the 2nd query.
Why is this, i thought serialize can take care of this. How to fix it please
?
var getMyDbInfo = function(callback) {
var db = new sqlite3.Database("MyDB.sqlite3");
db.serialize(function() {
var myJsonObj = {};
db.each("se... 阅读全帖 |
|
w*s 发帖数: 7227 | 26 在node.js里,我这么凑合的,
if(config.mode === case1) {
var myFunc = function(req, res, arg1, callback) {
...
}
} else {
var myFunc = function(req, res, arg1, arg2, callback) {
...
}
}
大家有何建议? |
|
s*i 发帖数: 5025 | 27 Javascript里function的参数不需要特别指出或者定义。传入的参数,一律用
arguments 这个假的Array。
比如你的情况,即便写成没有参数,完全可以在runtime传入任何多的参数:
var myFunc = function() {
req = arguments[0];
res = arguments[1];
// ... other args except callback
callback = arguments[arguments.length - 1];
...
} |
|
b***i 发帖数: 3043 | 28 我学用Amazon Lambda来做网站,测试时使用{"key3":"value3",...}不知道这是干嘛用
的。然后,测试结果正常,显示"Hi, from Lamba"。
如果我直接用个链接看显示一个"Message: internal error"。这个到底怎样做才能直
接做网站啊?
看起来那个测试是要把一个JSON串post?而我要的是get
样板代码如下
exports.handler = (event, context, callback) => {
// TODO implement
callback(null, 'Hi from Lambda');
};
那么,这里面,我怎么改才能变成是响应一般的http get request?语言不限,我这是
随便拿一个样本语言做例子。 |
|
p*******d 发帖数: 359 | 29 三个帖子都没回答问题啊。
这个{"key3":"value3",...}就是event object.
比如
exports.handler = (event, context, callback) => {
// TODO implement
callback(null, 'Hi from ' + event.key3);
};
测试结果就是打印 Hi from value3
做网站或者app就是用前端(angular, ios, android)调用lambda, 用aws-sdk。 也可以
再加一层api gateway,如果需要restful的话。 |
|
|
c*********e 发帖数: 16335 | 31 2个的不同,在于出现error之後的处理方式:promise更灵活一些。
1. async.waterfall
if any of the tasks pass an error to their own callback, the next function
is not executed, and the main callback is immediately called with the error.
2. promise chaining
function myAsyncFunction(url) {
return new Promise((resolve, reject) => {
const xhr = new XMLHttpRequest();
xhr.open("GET", url);
xhr.onload = () => resolve(xhr.responseText);
xhr.onerror = () => reject(xhr.statusText);
xhr.send();
});
}); |
|
z****e 发帖数: 54598 | 32 其实一路走来
同步转异步,lock free,减少线程数,不要乱开线程,这很重要
遇到callback hell
解决callback hell,通过promise/future方式->高阶函数
高阶函数->reactivex,感觉不方便
coroutine出现,改进写法
这么一串下来,理解起来就很容易
还是要跟着vert.x一起成长 |
|
z****e 发帖数: 54598 | 33
vert.x过去两年大发展啊,早已今非昔比了
这两年错过vert.x的是一个巨大的损失,不是我说
准备技术输出了,然后噱头就是
比spring mvc快几十倍
生态比go好几十倍
市场买不买这个账,不知道,管他呢,反正就是宣传
至于kotlin对vert.x的促进作用,看上面讲的coroutine部分
这个中国人贡献的代码已经merge进官方库了
马上就release了,就能用了
3.5的新增功能包括
kotlin的coroutine原生支持
rxjava 2.0的升级
jdbc client的callback的简化
强烈建议马上升级
ceylon贡献给了eclipse之后,也会加入coroutine
java这个还需要时间
现在项目中,java, kotlin, groovy都有,因为idea社区版加入了scala的滋持
所以准备上scala了,至于js本来就有,但是gradle里面一般都放在resources目录下
最近搞了下ruby,感觉挺好玩的,拿ruby和另外一个中国人写的脚本到时候来做演示
展示一下这个随便选一个脚本就能用来开发项目是怎样一番光景
太有趣了
vert.x最... 阅读全帖 |
|
z****e 发帖数: 54598 | 34 coroutine之后,所有的语言都在跟fp对着干
高阶函数太难用了,map,flatmap,reduce之类的没几个能搞懂的
immutable能搞懂就谢天谢地了
最简单的future和promise那种写法已经有很多人搞不定了
就是用java一样看挂掉很多人
最后还是coroutine,async,await这种同步的,oop的写法会prevail
其实能把io的同步转异步解决,这事就解决了99%
榨取机器性能的目的就已经达到了
fp没戏,当初记得谁说过
fp这一波,也就是知道一下
什么是lambda,什么是1st class citizen,什么是immutable
就行了,剩下的monad,currying这些,不用纠结
果不其然,没有coroutine,为了对付callback hell,木有办法,只能上高阶函数
有了coroutine,那就不需要了,原来同步怎么写就怎么写
可以开开心心用循环而不是诡异的递归了
否则每次loop都要写成递归,好诡异啊
一大堆人问,callback里面怎么return啊?
其实脚本这种东西举了个fp的大旗往前冲本身就是很诡异的一件事
写个脚本天... 阅读全帖 |
|
a*****e 发帖数: 1700 | 35 FP 对 coroutine 的研究早很多年,而且里面其实也没有什么好说的,一句
话可以总结:cooperative threading 和 event driven 可以等价转换。下面这篇论文
是 99 年的,而且只是 functional pearl,也就是说,其实不够 paper 的级别。
http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.39.8039
什么 async/await(或者 fork/join)用 callcc (或者 continuation monad)几句
话就实现了,不需要任何语言层面的支持。
这些年也就是 nodejs 把路带歪了去弄 callback,正统的 FP 语言没一个尿这壶的。
所以不要以为 写个 callback 或者 lambda 就等于写 FP 了。
一个 coroutine 能弄这么 high,也是叹为观止。 |
|
m****o 发帖数: 182 | 36 说句公道话,SAM type出现以前,Scala的lambda其实就是java object,从Function0
到Function22。至于system programming我不熟悉,但是JVM上解决callback hell在不
touch system fundamentals的前提下最好的途径是reactive stream programming。
callback hell被转化成了stream,再依仗fp,这些stream还可以被transform和
compose,大大增强了程序本身能够表达的能力。
actor model我个人认为最大的问题是处境很尴尬。不管是OO programmer还是FP
programmer都不会太喜欢。用不好还会出现死锁。 |
|
w***g 发帖数: 5958 | 37 上次搞DPDK还是几年前,恍若隔世啊。 我记得上次看的时候唯一能用的user-space
stack是seastar。 据说f-stack性能不如seastar,但是在公网环境下稳定性更好。
差别应该在于seastar是custom stack,f-stack用的是freebsd的stack。
刚刚看了一眼,DPDK自己的TCP/IP stack好像也起来了。
这货应该没啥threading model。就是一个core上pin一个process,
每个process配置好以后跑一个event loop。然后有状态后触发
callback。callback里面是一个用巨大的switch实现的状态机。
扫了一眼范例感觉就是这样,没仔细看。
我觉得用10GB以太网配上DPDK来做deep learning训练的
parameter server或许能卖钱, 如果能做出来的话。 |
|
T********i 发帖数: 2416 | 38 根据我对有限文档的理解,根本不是你说的那回事。
这货有一个primary process。就是busy polling。实现一个bsd的socket栈。
你的程序是另外一个process。要link它那个socket库。Api都改名了。你这个process
的socket操作要通过primary。通信是shared memory。
貌似他们保留了huge page内存。给dpdk和他们自己的框架使用。我一般用huge page保
留我自己的numa memory pool。被他们用了,我自己就用不着了。
: 上次搞DPDK还是几年前,恍若隔世啊。 我记得上次看的时候唯一能用的user-
space
: stack是seastar。 据说f-stack性能不如seastar,但是在公网环境下稳定性更
好。
: 差别应该在于seastar是custom stack,f-stack用的是freebsd的stack。
: 刚刚看了一眼,DPDK自己的TCP/IP stack好像也起来了。
: 这货应该没啥threading model。就是一个core... 阅读全帖 |
|
w***g 发帖数: 5958 | 39 最终还是没有真正的multi-thread支持。
我希望在C++中支持python callback,然后用multithread并行跑
这个callback的想法毕竟还是不行。
python3最终也还是一些cosmetic improvement,真正的痛点还是
一点改进都没有。
如果不是ecosystem这么强大,我肯定不会用的。
Lua就没有问题。 |
|
s**u 发帖数: 91 | 40 Thanks, guys!
I was too lazy with job hunting and busy with school. After I got my callback
from the interview, I laid on that and did not do the callback interview till
late.
I need keep my eyes really open now..........
1.
early
try
probably
很
或 |
|
p*********y 发帖数: 2741 | 41 Over the weekend, the hashtag #NotYourAsianSidekick exploded on Twitter,
trending for more than 24 hours, with over 45,000 tweets in less than a day.
This hashtag, started by writer Suey Park (@suey_park), inspired Asian
Americans and others to share their thoughts on the multiple ways Asians are
marginalized.
People tweeted about diversity within the Asian community, language,
stereotypes, body image, immigration, media representation, and other topics
. Although the conversation was initially ... 阅读全帖 |
|
l*******s 发帖数: 7316 | 42 voice +, Gvoice Callback, Voice Callback 三个软件都不能登陆。
GV的网页上也没有打电话的界面了。 |
|
发帖数: 1 | 43 里面有个选项: phone number for outgoing calls
如果你选择use your google voice number 那个虽然打出去也是显示你的GV号 但是那
个不是callback 所以是会收钱的
不过用在tello这种的计划就刚好了 不需要voice+或者网页版的callback |
|
O*****n 发帖数: 78 | 44 装个GVoice Callback,用Callback就可以了。
现在有很多的low-cost选项:Sprint, Virgin Mobile一年免费(付点税),Xfinity,
都可以提供很好的Cellular Voice。再不济了,FP还有4刀200分钟的Premium Voice,
应该可以保证接电话没问题的。打出去的话,用Hangout Dialer, Vonage, ... 选项很
多。 |
|
c*b 发帖数: 3126 | 45 【 以下文字转载自 PDA 讨论区 】
发信人: cyb (葱油饼|无药可救), 信区: PDA
标 题: Re: android手机怎么用google voice不算计划分钟? (转载)
发信站: BBS 未名空间站 (Sat Oct 9 00:35:06 2010, 美东)
1,http://www.whistlephone.com/
注册whistle用户,得到一个phone number
2,手机上安装Sipdroid,用上述信息登录
用户名:whistle phone number
密码:whistle账户密码
SIP server:proxy.whistlephone.com
到此其实已经可以用Sipdroid拨打和接听电话
使用的号码就是注册的whistle phone number
实现了free calls on wifi/3g,问题是:
a, 每次拨出时whistle要播放一段10s的语音广告
b,call id是whistle phone number
3,追求完美的,再加上Google voice
GV里面设置forward到whistle phone nu... 阅读全帖 |
|
a9 发帖数: 21638 | 46 搞成g723干嘛?
sip:1747000xxx@gizmo_003.
@proxy01.sipphone.com.
outbound proxy of udp:69.59.142.213:5060.
com:5060 via udp:69.59.142.213:5060.
socket 216.80.155.90:16406.
1********[email protected].
. for sip:1********[email protected].
mangled, RTP socket 216.80.144.30:16406.
successfully.
successfully retrieved for b*****[email protected], proceeding with callback.
call to user sipking01 as udp:69.59.142.213:5070.
17470003322 successfully initiated, callback timeout=30s.
of 200.
142.213:5060 f |
|
z****e 发帖数: 54598 | 47 callback没做好
结果发帖时候,发是发了
但是cb没有handle清楚
导致整个流程乱了
看来老邢的破程序员水平不行 |
|
发帖数: 1 | 48 DoT asked to block low-cost calling app WePhone for spoofing caller ID
The Intelligence Bureau (IB) has asked the Department of Telecom (DoT) to
block the Skype-like low-cost international calling app WePhone as it allows
spoofing of caller ID making it difficult to identify or locate the actual
caller, reports PTI. The app requires users to verify their phone numbers at
the time of installation, but later provides an option to disable or hide
the number so that it doesn’t reflect on Caller Line... 阅读全帖 |
|
m******1 发帖数: 19713 | 49 By Winston Gieseke
OFFICE THUMBS DOWN JOB X390 (PHOTOS) | ADVOCATE.COM
According to a study published today in the American Journal of Sociology,
men whose resumes indicate that they’re gay are 40% less likely to be
called in for job interviews, especially in the south or Midwest.
Pink News reports that Harvard University researcher Andras Tilcsik
submitted two “realistic but fictitious” resumes to 1,700 white collar job
openings. One indicated that the applicant had served as a treasurer of his... 阅读全帖 |
|
c*******o 发帖数: 8869 | 50 少个屁。三分之一的黑人或多或少有犯罪记录,A criminal record can reduce the
likelihood of a callback or job offer by nearly 50 percent. The negative
impact of a criminal record is twice as large for African American
applicants. |
|