00:00:01
| * ircretary | quit (Remote host closed the connection) |
00:00:08
| * ircretary | joined |
00:01:35
| * ins0mnia | quit (Remote host closed the connection) |
00:06:32
| * dstokes | quit (Quit: dstokes) |
00:14:20
| * DTrejo | quit (Remote host closed the connection) |
00:14:52
| * DTrejo | joined |
00:19:02
| * DTrejo | quit (Ping timeout: 240 seconds) |
00:19:13
| * DTrejo | joined |
00:19:14
| * DTrejo | quit (Remote host closed the connection) |
00:19:50
| * DTrejo | joined |
00:20:04
| * DTrejo | quit (Read error: Connection reset by peer) |
00:20:32
| * DTrejo | joined |
00:27:12
| * tilgovi | quit (Ping timeout: 248 seconds) |
00:29:11
| * rxgx | joined |
00:37:27
| * jcrugzz_ | changed nick to jcrugzz |
00:38:11
| * frankblizzard | joined |
00:42:34
| * frankblizzard | quit (Ping timeout: 246 seconds) |
00:44:20
| * AvianFlu_ | joined |
00:44:25
| * feross | quit (Quit: feross) |
00:44:27
| * fallsemo | joined |
00:45:00
| * fallsemo | quit (Client Quit) |
00:45:40
| * AvianFlu_ | quit (Remote host closed the connection) |
00:46:58
| * feross | joined |
00:49:11
| <mikolalysenko> | has anyone tried to implement fully persistent/functional data structures in javascript? |
00:49:16
| <mikolalysenko> | specifically binary search trees |
00:54:13
| * kenperkins | quit (Quit: Computer has gone to sleep.) |
00:59:02
| <kriskowal> | mikolalysenko: do you mean like a hash trie? |
00:59:52
| <kriskowal> | i mean, by "functional" do you mean pure and immutable? |
01:00:19
| <kriskowal> | because if you don't mean that, i'm maintaining idiomatic javascript data structures, including a binary search tree, https://github.com/montagejs/collections |
01:00:35
| <kriskowal> | they are mutable, but observable |
01:02:11
| <mikolalysenko> | well, persistent would be better but I think I could live with functional |
01:02:29
| <mikolalysenko> | basically persistent means you can maintain some history of updates to the tree |
01:02:41
| <mikolalysenko> | http://en.wikipedia.org/wiki/Persistent_data_structure |
01:02:57
| <mikolalysenko> | functional is a more extreme version of persistent, and it is usually less efficient/good |
01:03:08
| <mikolalysenko> | but it can be easier to implement |
01:03:45
| <mikolalysenko> | the dumbest version of functional is to just copy the whole data structure after each update, but you can often do a lot better |
01:04:01
| <mikolalysenko> | for example in a bst only copying the nodes along the path to the root |
01:04:37
| <mikolalysenko> | the key difference though is that in a bst, best known results for functional are O(log(n)) extra memory per update, while in a persistent tree you can do it in O(1) |
01:05:07
| <mikolalysenko> | also iterating over a persistent tree is a lot faster since you can use parent pointers/threading |
01:05:18
| <mikolalysenko> | but in a functional data structure those circular references are impossible to manage |
01:05:58
| <mikolalysenko> | the catch though is that persistent trees are way more complex to code, even though they are a lot more awesome |
01:06:31
| <mikolalysenko> | here is an example of a persistent treap written in C: http://cg.scs.carleton.ca/~dana/pbst/ |
01:12:25
| * thlorenz | joined |
01:17:14
| * thlorenz | quit (Ping timeout: 256 seconds) |
01:28:13
| * thlorenz | joined |
01:28:26
| * rxgx | quit (Quit: timeout) |
01:35:45
| * sorensen_ | quit (Quit: sorensen_) |
01:38:09
| * kenperkins | joined |
01:38:41
| * frankblizzard | joined |
01:41:44
| * dguttman | quit (Quit: dguttman) |
01:42:56
| * frankblizzard | quit (Ping timeout: 248 seconds) |
01:49:15
| * ins0mnia | joined |
01:49:41
| <ins0mnia> | mbalho: ping |
01:55:30
| * tilgovi | joined |
01:57:14
| * DTrejo | quit (Remote host closed the connection) |
01:57:50
| * DTrejo | joined |
01:59:14
| * ins0mnia | quit (Remote host closed the connection) |
02:00:07
| * rxgx | joined |
02:02:13
| * DTrejo | quit (Ping timeout: 248 seconds) |
02:06:34
| * thlorenz_ | joined |
02:07:10
| <mbalho> | who dat |
02:10:45
| * thlorenz_ | quit (Ping timeout: 248 seconds) |
02:10:56
| * ralphtheninja | quit (Read error: Operation timed out) |
02:10:57
| * rxgx | quit (Quit: rage quit) |
02:11:06
| * DTrejo | joined |
02:13:53
| <jesusabdullah> | mikolalysenko: object diffs? |
02:17:47
| <mikolalysenko> | jesusabdullah: kind of |
02:18:00
| <mikolalysenko> | jesusabdullah: basically it lets you keep track of versions of collections of objects with pointers |
02:19:20
| <jesusabdullah> | hmm |
02:19:22
| <jesusabdullah> | interesting |
02:20:14
| <mikolalysenko> | it also does it with very little overhead |
02:20:15
| * shama | quit (Remote host closed the connection) |
02:20:22
| <mikolalysenko> | only O(1) per modification |
02:21:02
| <mikolalysenko> | if you have time, this video does a good job explaining the basics |
02:21:29
| * shama | joined |
02:21:37
| <mikolalysenko> | skip 8:35 |
02:21:52
| <jesusabdullah> | hmm |
02:22:20
| <mikolalysenko> | basically persistence is a form of time travel for data structures |
02:22:40
| <mikolalysenko> | but you can use to implement efficient functional style data structures without making copies |
02:23:03
| <mikolalysenko> | persistence gives the illusion of functional behavior |
02:23:15
| <mikolalysenko> | but implements it using the dirty tricks that are available within an imperative computer |
02:23:32
| <mikolalysenko> | in general, a functional implementation achieves the same result though, it is just a lot slower |
02:30:08
| <jesusabdullah> | right |
02:32:17
| <tim_smart> | All I saw in that explanation was 'time travel'. That gets me excited. |
02:34:09
| * dstokes | joined |
02:35:22
| * thlorenz | quit (Remote host closed the connection) |
02:36:30
| * timoxley | joined |
02:39:11
| * frankblizzard | joined |
02:42:59
| * Maciek416 | joined |
02:43:40
| * frankblizzard | quit (Ping timeout: 246 seconds) |
02:55:46
| <jesusabdullah> | you never heard about process.prevTick did you? |
03:05:35
| * jergason | quit (Quit: jergason) |
03:11:21
| * st_luke | joined |
03:14:05
| * st_luke | quit (Remote host closed the connection) |
03:28:39
| <Raynos> | isaacs: ping |
03:29:09
| <isaacs> | pong |
03:31:25
| * st_luke | joined |
03:31:26
| * AvianFlu | quit (Read error: Connection reset by peer) |
03:31:59
| * AvianFlu | joined |
03:32:01
| <Raynos> | isaacs: would lunch of early coffee 12/12.30ish work as well ? |
03:32:26
| <isaacs> | sure |
03:32:29
| <isaacs> | any tiem after 12 i'm free |
03:32:52
| <Raynos> | sweet, 12.30 would be cool |
03:33:00
| <Raynos> | i dont mind whether you want to do lunch or coffee |
03:33:58
| <mikolalysenko> | mbalho: are you going to be in sf/oakland on oct. 22? |
03:35:30
| <mbalho> | mikolalysenko: from the 21st until the 24th, i'm free the 22nd and 23rd. in pdx until the 21st and then leaving for london on the 24th |
03:35:44
| <mbalho> | mikolalysenko: dominictarr and some other node peeps are in town at that time also |
03:35:50
| <mbalho> | mikolalysenko: so we should do a meetup or something |
03:35:57
| <mbalho> | also https://github.com/jtleek/rpackages |
03:36:02
| <mbalho> | we gotta get these peeps to switch to js + npm! |
03:36:06
| <mbalho> | cc substack |
03:36:37
| * DTrejo | quit (Remote host closed the connection) |
03:37:12
| * DTrejo | joined |
03:37:49
| <mikolalysenko> | mbalho: err.. just double checked my schedule and realized I am only free on the 21st |
03:38:17
| <mbalho> | ah |
03:38:23
| <mikolalysenko> | on the 22nd I am going to be flying back to madison, but could maybe do something in the morning |
03:39:05
| <mikolalysenko> | the 2 days that I can do something are the 18th and the 21st |
03:39:23
| <mikolalysenko> | though it might be too much if you have a flight from pdx in the same day |
03:39:41
| * frankblizzard | joined |
03:39:41
| <mbalho> | mikolalysenko: i get back to SFO at 8:45pm that day |
03:39:58
| <mikolalysenko> | yeah... |
03:40:55
| <mikolalysenko> | well, if you feel up to it we could maybe grab a beer or something and catch up |
03:41:20
| * DTrejo | quit (Ping timeout: 248 seconds) |
03:42:00
| <mikolalysenko> | also my girlfriend will be with me and she has a limited tolerance for programming stuff |
03:43:07
| * Maciek416 | quit (Remote host closed the connection) |
03:43:52
| * frankblizzard | quit (Ping timeout: 246 seconds) |
03:44:08
| <mikolalysenko> | also one of my friends from the netherlands is going to be there around the same time |
03:44:25
| <mikolalysenko> | he also dabbles a bit in javascript, though he mostly works on the inkscape project in his spare time |
03:48:33
| <mbalho> | mikolalysenko: are you staying in SF or Oak? |
03:48:53
| <mbalho> | mikolalysenko: cause i could probably grab a drink on my way through SF after i land at the airport |
03:49:28
| <mikolalysenko> | mbalho: not sure yet. probably get a place through airbnb in sf |
03:49:31
| * st_luke | quit (Remote host closed the connection) |
03:49:34
| <Wraithan> | mbalho: you are in pdx? |
03:49:38
| <mikolalysenko> | I'll look for something near the bart line though |
03:49:45
| <mbalho> | Wraithan: not yet but i will be from the 16th - 21st |
03:49:48
| <Wraithan> | oh ok |
03:50:06
| * st_luke | joined |
03:50:31
| <mikolalysenko> | or I can also be in that area around 9pm or so |
03:50:32
| <Wraithan> | mbalho: we should put together a hackday or 5 during that time :) |
03:50:48
| <mbalho> | Wraithan: muahaha yes. i'm there for realtimeconf, there might already be something like that goin on |
03:50:57
| * defunctzombie_zz | changed nick to defunctzombie |
03:51:03
| <Wraithan> | mbalho: oh yeah, rtc, not going to that |
03:51:24
| <Wraithan> | I am a free agent right now, so I am spending lots of time hacking |
03:51:40
| <mbalho> | nice |
03:52:03
| <mbalho> | i havent seen tylergillies in forever also |
03:52:10
| <Wraithan> | yeah, that dude |
03:52:24
| <Wraithan> | he doesn't really chat on IRC much anymore because of some issues |
03:52:30
| <Wraithan> | at least not in public channels |
03:52:53
| <mbalho> | haha what issues? |
03:53:00
| <Wraithan> | <3 him though, and he doesn't live far from me |
03:53:18
| <Wraithan> | mbalho: his co-workers are assholes and get all uptight aboutshit he says on the internet |
03:53:45
| <Wraithan> | he has been snitched on for saying/doing troll-y thing |
03:53:48
| <Wraithan> | things |
03:53:58
| <mbalho> | pshhh he wouldnt hurt a fly |
03:54:03
| <Wraithan> | exactly |
03:54:14
| <mbalho> | wheres he working these days? |
03:54:36
| * st_luke | quit (Ping timeout: 245 seconds) |
03:54:37
| <Wraithan> | http://getlittlebird.com/ |
03:54:40
| <Wraithan> | one of the founders |
03:55:05
| <mbalho> | oh yea cool, hes been working on that for a while then |
03:55:17
| <Wraithan> | yea |
03:55:57
| <Wraithan> | oh, right, he isn't a 'founder' was just the first programmer they had on staff. |
03:56:02
| <mbalho> | lol |
03:56:41
| <Wraithan> | marshel kirkpatrick is listed as the sole founder |
03:56:58
| * defunctzombie | changed nick to defunctzombie_zz |
03:57:24
| <Wraithan> | anyway, if there are hackdays/nights, let me know I am totally down |
03:57:27
| <mbalho> | cool |
03:57:31
| <Wraithan> | I'm mostly doing hardware stuff these days |
03:58:03
| <Wraithan> | In the process of building a system on top of dotc |
03:58:19
| <Wraithan> | to make hobbyist hardware not terrible |
03:59:10
| <mbalho> | whoa cool |
03:59:55
| <Wraithan> | I don'thave a background in hardware at all, but I am learning and I pretty much hate the current standard |
04:00:05
| * egradman | quit (Remote host closed the connection) |
04:00:22
| <Wraithan> | of 'here is a blog post, eat some delicious copypasta code and shit it into your own project!' |
04:00:41
| * egradman | joined |
04:05:02
| * egradman | quit (Ping timeout: 240 seconds) |
04:07:42
| * DTrejo | joined |
04:14:58
| * dstokes | quit (Quit: dstokes) |
04:16:00
| * DTrejo | quit (Ping timeout: 248 seconds) |
04:16:09
| * dstokes | joined |
04:22:23
| * kenperkins | quit (Quit: Computer has gone to sleep.) |
04:24:07
| * dstokes | quit (Quit: dstokes) |
04:24:27
| * shama | quit (Remote host closed the connection) |
04:25:00
| * shama | joined |
04:27:22
| * shama | quit (Read error: Connection reset by peer) |
04:27:24
| * jergason | joined |
04:28:25
| * timoxley | quit (Remote host closed the connection) |
04:31:14
| * AvianFlu | quit (Read error: Connection reset by peer) |
04:31:50
| * AvianFlu | joined |
04:38:12
| * dguttman | joined |
04:39:02
| * dguttman | quit (Client Quit) |
04:39:15
| * jxson_ | joined |
04:40:09
| * frankblizzard | joined |
04:42:00
| * jxson | quit (Ping timeout: 240 seconds) |
04:43:46
| * jxson_ | quit (Ping timeout: 245 seconds) |
04:44:36
| * frankblizzard | quit (Ping timeout: 245 seconds) |
04:45:12
| * AvianFlu | quit (Remote host closed the connection) |
04:45:56
| * AvianFlu | joined |
04:49:20
| * jxson | joined |
04:50:55
| * kenperkins | joined |
04:51:44
| * st_luke | joined |
04:52:20
| * kenperkins | quit (Client Quit) |
04:55:28
| * mikolalysenko | quit (Ping timeout: 240 seconds) |
05:12:19
| * jxson | quit (Remote host closed the connection) |
05:12:47
| * jxson | joined |
05:13:31
| * jxson | quit (Read error: Connection reset by peer) |
05:13:45
| * jxson | joined |
05:14:56
| * st_luke | quit (Remote host closed the connection) |
05:15:58
| * timoxley | joined |
05:27:37
| * egradman | joined |
05:40:40
| * frankblizzard | joined |
05:44:23
| * egradman | quit (Remote host closed the connection) |
05:44:59
| * egradman | joined |
05:45:42
| * frankblizzard | quit (Ping timeout: 264 seconds) |
05:46:48
| * jxson | quit (Remote host closed the connection) |
05:49:11
| * egradman | quit (Ping timeout: 246 seconds) |
05:52:31
| * mikolalysenko | joined |
05:56:14
| * calvinfo | joined |
05:57:42
| * calvinfo | quit (Client Quit) |
05:57:43
| * mikolalysenko | quit (Ping timeout: 268 seconds) |
06:00:32
| * AvianFlu_ | joined |
06:01:19
| * mikolalysenko | joined |
06:08:46
| * AvianFlu_ | quit (Ping timeout: 246 seconds) |
06:09:13
| * wolfeidau | quit (Remote host closed the connection) |
06:09:50
| * frankblizzard | joined |
06:09:54
| * frankblizzard | quit (Remote host closed the connection) |
06:11:34
| * egradman | joined |
06:42:14
| * mikolalysenko | quit (Ping timeout: 240 seconds) |
06:43:19
| * wolfeidau | joined |
06:45:44
| * wolfeidau | quit (Remote host closed the connection) |
06:50:42
| * hughsk | quit (Quit: Leaving.) |
06:52:10
| * calvinfo | joined |
06:56:36
| * timoxley | quit (Remote host closed the connection) |
06:57:09
| * timoxley | joined |
07:01:46
| * timoxley | quit (Ping timeout: 256 seconds) |
07:05:04
| * kriskowal | quit (Quit: kriskowal) |
07:10:22
| * frankblizzard | joined |
07:12:34
| * mmalecki_ | joined |
07:13:03
| * djcoin | joined |
07:13:16
| * pkrumins_ | joined |
07:13:23
| * pkrumins_ | quit (Changing host) |
07:13:23
| * pkrumins_ | joined |
07:15:52
| * jergason_ | joined |
07:16:25
| * sindresorhus_ | joined |
07:16:50
| * rpflo | joined |
07:17:04
| * jergason | quit (Ping timeout: 256 seconds) |
07:17:04
| * jergason_ | changed nick to jergason |
07:17:38
| * frankblizzard | quit (Ping timeout: 256 seconds) |
07:17:50
| * mmalecki | quit (*.net *.split) |
07:17:50
| * sindresorhus | quit (*.net *.split) |
07:17:51
| * sveisvei | quit (*.net *.split) |
07:17:51
| * farnsworth | quit (*.net *.split) |
07:17:51
| * pkrumins | quit (*.net *.split) |
07:17:51
| * ryanflorence | quit (*.net *.split) |
07:17:52
| * sindresorhus_ | changed nick to sindresorhus |
07:17:53
| * calvinfo | quit (Quit: Leaving.) |
07:27:24
| * timoxley | joined |
07:30:32
| * farnsworth | joined |
07:31:32
| * peutetre | joined |
07:38:13
| * mikolalysenko | joined |
07:42:18
| * fotoverite | quit (Quit: fotoverite) |
07:42:25
| * mikolalysenko | quit (Ping timeout: 240 seconds) |
07:50:13
| * frankblizzard | joined |
07:50:40
| * frankblizzard | quit (Remote host closed the connection) |
07:53:36
| * frankblizzard | joined |
08:01:55
| * damonoehlman | joined |
08:14:29
| * kanzure | quit (Ping timeout: 248 seconds) |
08:24:03
| <mmalecki_> | owen1: that does indeed look like it, thanks! |
08:24:05
| * mmalecki_ | changed nick to mmalecki |
08:24:10
| * egradman | quit (Remote host closed the connection) |
08:24:45
| * egradman | joined |
08:29:20
| * egradman | quit (Ping timeout: 248 seconds) |
08:37:26
| * ralphtheninja | joined |
08:54:57
| * kanzure | joined |
08:55:10
| <substack> | mmalecki: thinkpad x120e |
08:55:14
| <substack> | it's an older model |
09:00:55
| * dominictarr | joined |
09:07:22
| * sveisvei | joined |
09:11:27
| <mmalecki> | substack: word, thanks |
09:13:54
| * damonoehlman | quit (Quit: WeeChat 0.4.1) |
09:22:58
| * tilgovi | quit (Remote host closed the connection) |
09:38:38
| * kanzure | quit (Ping timeout: 240 seconds) |
09:41:34
| * jcrugzz | quit (Ping timeout: 256 seconds) |
09:43:14
| * feross | quit (Quit: feross) |
09:45:26
| * feross | joined |
09:49:22
| * mirkokiefer | joined |
09:54:02
| * kanzure | joined |
10:05:50
| * hij1nx | changed nick to rvaag |
10:07:11
| * fotoverite | joined |
10:09:29
| * jcrugzz | joined |
10:13:29
| * rvaag | changed nick to hij1nx |
10:16:50
| * jcrugzz | quit (Ping timeout: 240 seconds) |
10:17:08
| * djcoin | quit (Quit: WeeChat 0.4.1) |
10:23:56
| * maksimlin | quit (Remote host closed the connection) |
10:24:34
| * maksimlin | joined |
10:25:45
| * mirkokiefer | quit (Quit: mirkokiefer) |
10:29:28
| * mirkokiefer | joined |
10:34:17
| * wolfeidau | joined |
10:35:19
| * peutetre | quit (Quit: peutetre) |
10:39:10
| * mikolalysenko | joined |
10:41:41
| * dominictarr | quit (Quit: dominictarr) |
10:44:02
| * mikolalysenko | quit (Ping timeout: 264 seconds) |
11:00:59
| * barisbaris | joined |
11:07:48
| * mirkokiefer | quit (Quit: mirkokiefer) |
11:12:23
| <spion> | will ENV_VAR=val browserify a.js -o bundle.js cause process.env['ENV_VAR'] == 'val' ? Is it a good idea? :) |
11:29:18
| <rvagg> | no, that's not a good idea |
11:30:12
| * barisbaris | quit (Remote host closed the connection) |
11:54:37
| * peutetre | joined |
11:55:26
| * maksimlin | quit (Ping timeout: 245 seconds) |
12:42:21
| * djcoin | joined |
12:48:18
| * Maciek416 | joined |
12:49:03
| * AvianFlu | quit (Remote host closed the connection) |
12:56:57
| * kevino80 | joined |
13:10:30
| * defunctzombie_zz | changed nick to defunctzombie |
13:11:12
| * mikolalysenko | joined |
13:12:09
| * feross | quit (Quit: feross) |
13:15:55
| * mikolalysenko | quit (Ping timeout: 240 seconds) |
13:17:02
| * yorick | joined |
13:22:44
| * calvinfo | joined |
13:22:57
| * calvinfo | quit (Client Quit) |
13:31:29
| * mirkokiefer | joined |
13:42:43
| * peutetre | quit (Quit: peutetre) |
13:44:37
| * peutetre | joined |
13:47:17
| * AvianFlu | joined |
13:48:19
| * AvianFlu_ | joined |
13:51:36
| * AvianFlu | quit (Ping timeout: 241 seconds) |
13:52:32
| * AvianFlu_ | changed nick to AvianFlu |
13:55:46
| * defunctzombie | changed nick to defunctzombie_zz |
14:00:37
| * ednapiranha | joined |
14:03:54
| * tmcw | joined |
14:12:10
| * mikolalysenko | joined |
14:16:36
| * mikolalysenko | quit (Ping timeout: 268 seconds) |
14:23:59
| * pkrumins_ | changed nick to pkrumins |
14:24:55
| * mirkokiefer | quit (Quit: mirkokiefer) |
14:26:30
| * kenperkins | joined |
14:31:38
| * dguttman | joined |
14:31:43
| * ednapiranha | quit (Remote host closed the connection) |
14:33:04
| * ednapiranha | joined |
14:37:50
| * calvinfo | joined |
14:39:09
| * calvinfo | quit (Client Quit) |
14:43:26
| * dominictarr | joined |
14:44:33
| * fallsemo | joined |
14:45:56
| * mirkokiefer | joined |
14:51:41
| * thlorenz | joined |
14:54:24
| * shama | joined |
14:56:05
| * thlorenz | quit (Ping timeout: 248 seconds) |
15:02:41
| * jiangplus | joined |
15:05:58
| * calvinfo | joined |
15:10:36
| * mirkokiefer | quit (Ping timeout: 252 seconds) |
15:12:13
| * mikolalysenko | joined |
15:16:41
| <dominictarr> | jez0990: I'm thinking I'll organize a p2p meetup for when I'm in london! |
15:16:56
| * mikolalysenko | quit (Ping timeout: 265 seconds) |
15:16:59
| <jez0990> | dominictarr: YES |
15:17:14
| <jez0990> | we should try to get the redecentralise people there too |
15:17:20
| <jez0990> | I've been emailing them |
15:17:27
| <dominictarr> | definately! |
15:17:31
| <jez0990> | ...about arranging such a meet up |
15:17:36
| <jez0990> | cool |
15:17:39
| <jez0990> | which dates? |
15:20:07
| <jez0990> | dominictarr: I'm fairly up for doing logistics if you don't fancy it |
15:20:19
| <dominictarr> | I arrive on the 29th i ithnk |
15:20:22
| <dominictarr> | just checking |
15:21:32
| <dominictarr> | jez0990: yeah, arrive on the 29th, leave on the 4th |
15:22:00
| <jez0990> | dominictarr: noted |
15:22:26
| <jez0990> | there's an event happening that evening which I know at least of the redencentralise people will be going to: http://www.eventbrite.com/event/8266233527 |
15:28:14
| <dominictarr> | jez0990: I want to organize something pretty low key, just between people who are already working on this stuff |
15:28:25
| <dominictarr> | so we can have a highlevel discussion about this stuff |
15:31:53
| * mikolalysenko | joined |
15:33:20
| * rpflo | changed nick to ryanflorence |
15:41:04
| * frankblizzard | quit (Remote host closed the connection) |
15:46:14
| <jez0990> | dominictarr: are you here for a specific event that's happening? will other folk be around too? I figure mbalho will still be here following mozfest |
15:46:38
| <dominictarr> | jez0990: enroute between portland and beijing |
15:46:57
| <dominictarr> | … made flights go that way, so i could visit london peopel |
15:47:43
| <dominictarr> | jez0990: yeah, max will be there, plus there are a few london people who are into that stuff |
15:48:34
| * kriskowal | joined |
15:59:18
| * jiangplus | quit (Quit: leaving) |
15:59:38
| * jiangplus | joined |
15:59:53
| * jiangplus | quit (Client Quit) |
16:12:33
| * peutetre | quit (Quit: peutetre) |
16:14:21
| * lanec | quit (Ping timeout: 240 seconds) |
16:15:14
| * mikolalysenko | quit (Ping timeout: 264 seconds) |
16:15:26
| * dguttman | quit (Quit: dguttman) |
16:15:49
| * lanec | joined |
16:28:42
| * feross | joined |
16:47:05
| * mikolalysenko | joined |
16:49:41
| * feross | quit (Quit: feross) |
16:51:39
| * st_luke | joined |
16:57:04
| * st_luke | quit (Ping timeout: 248 seconds) |
16:58:49
| <AvianFlu> | CROSS BROWSER TESTING IS MY FAVORITE |
16:58:49
| <LOUDBOT> | PLZ ADD SOMETHING TO YOUR SOURCES.LIST |
17:00:01
| * st_luke | joined |
17:02:09
| * dguttman | joined |
17:05:23
| * st_luke | quit (Read error: Connection reset by peer) |
17:05:29
| * CoverSlide | & |
17:05:30
| <LOUDBOT> | JESUS CHRIST IT'S MEHMET ALI AÄžCA GET IN THE POPEMOBILE |
17:17:34
| * DTrejo | joined |
17:20:59
| * AvianFlu | quit (Remote host closed the connection) |
17:21:40
| * luk | joined |
17:21:41
| * DTrejo | quit (Ping timeout: 248 seconds) |
17:23:26
| * luk | changed nick to st_luke |
17:23:54
| * djcoin | quit (Quit: WeeChat 0.4.1) |
17:25:03
| * AvianFlu | joined |
17:31:28
| * mikolalysenko | quit (Ping timeout: 268 seconds) |
17:34:35
| <spion> | Still haven't published this article: http://spion.github.io/posts/why-i-am-switching-to-promises.html - wondering if I could do something to make it less confrontational |
17:35:18
| <dominictarr> | juliangruber: great progress on merkle today - needs more tests though |
17:35:30
| * dominictarr | quit (Quit: dominictarr) |
17:37:26
| * alessioalex | joined |
17:40:37
| * mikolalysenko | joined |
17:45:09
| * thlorenz | joined |
17:51:20
| <st_luke> | Domenic_: there are too many numbers in the promises a plus spec 2.3.3.3.3.3.3.3.3.1.1 |
17:53:18
| <st_luke> | spion: ending a process gracefully is not a crash |
17:54:13
| * mikolalysenko | quit (Ping timeout: 248 seconds) |
17:54:25
| <spion> | but its at least half of a crash - what if 10 users hit that error path? |
17:54:33
| * egradman | joined |
17:54:44
| <spion> | or one angry user simply starts refreshing? |
17:55:03
| <st_luke> | that doesn't make sense, what's half a crash? |
17:55:16
| <spion> | means a process dies. then the user refreshes, then another dies. |
17:55:26
| <spion> | the user refreshed 8 times, all the web processes have died. |
17:55:34
| * jcrugzz | joined |
17:56:24
| <st_luke> | you should catch those, stop accepting new requests on the process, and end it once the current ones are done |
17:56:34
| <st_luke> | you can fork a new worker in the meantime also |
17:56:37
| * mikolalysenko | joined |
17:56:47
| * DTrejo | joined |
17:57:19
| <st_luke> | but if your code has that many exceptions, then you've got another problem |
17:57:27
| <st_luke> | and promises aren't going to help you there |
17:57:29
| <spion> | no need to have that many exceptions. |
17:57:47
| <spion> | if my angry user, the one that hits that single exception starts refreshing - he is going to spawn lots of processes. |
17:58:17
| * DTrejo | quit (Remote host closed the connection) |
17:58:43
| <st_luke> | well, you need to make your code smarter than that |
17:58:49
| * DTrejo | joined |
17:58:59
| * DTrejo | quit (Read error: Connection reset by peer) |
17:59:27
| <st_luke> | but there's no such thing as a "half crash", and calling ending a process deliberately a crash is misleading |
17:59:29
| * DTrejo | joined |
17:59:48
| <spion> | its misleading to say that ending a process gracefully solves the exception problem |
17:59:51
| <st_luke> | domains dont have anything to do with ending the process |
18:00:14
| <st_luke> | spion: do you know why you would end a process on an uncaught exception? |
18:00:25
| * DTrejo | quit (Read error: Connection reset by peer) |
18:00:26
| <st_luke> | like what that's solves |
18:00:33
| <st_luke> | brb |
18:00:53
| <spion> | yes, it makes sure I'm not leaking resources (such as sockets, file handles etc) |
18:00:58
| * DTrejo | joined |
18:01:24
| <spion> | ... but I don't know if thats all. |
18:02:27
| * DTrejo | quit (Remote host closed the connection) |
18:03:00
| * DTrejo | joined |
18:03:07
| * mikolalysenko | quit (Ping timeout: 248 seconds) |
18:03:13
| * DTrejo | quit (Read error: Connection reset by peer) |
18:03:52
| <spion> | with promises I have .finally() and friends to make sure resources are cleaned up either way |
18:04:10
| * DTrejo | joined |
18:06:37
| * DTrejo_ | joined |
18:06:38
| <spion> | and closures aren't leaked anymore |
18:06:45
| * DTrejo_ | quit (Read error: Connection reset by peer) |
18:06:50
| <spion> | don't know if they're normally leaked though |
18:06:53
| * jxson | joined |
18:07:17
| * DTrejo_ | joined |
18:08:53
| <spion> | and "your code needs to be smarter than that" - thats only deciding the scope of the denial of service |
18:08:59
| <spion> | :) |
18:09:21
| * DTrejo_ | quit (Remote host closed the connection) |
18:09:27
| <spion> | will I block just that user (doesn't solve multiple users hitting the error)? just that url (could be too broad) |
18:09:55
| * DTrejo_ | joined |
18:10:27
| * alessioalex | quit (Quit: Page closed) |
18:10:32
| * DTrejo | quit (Read error: Connection reset by peer) |
18:10:36
| <Maciek416> | spion: who cares about the nitty gritty of the use case your critic outlined above? what's nice is taht your alternative proposes a pattern people can easily remember and adhere to |
18:10:55
| <st_luke> | is this #node.js |
18:11:06
| <jesusabdullah> | is this just fantasy |
18:11:16
| <jesusabdullah> | caught in a netspliit no escape from realityyyy |
18:11:32
| <Maciek416> | must resist urge to contribute |
18:11:38
| <spion> | Maciek416, not exactly debating the decision, and I did appreciate the correction |
18:11:48
| <jesusabdullah> | Open your browser, go to github and seeeeeeee |
18:11:49
| <spion> | that claim I make there is both harsh and not quite correct. |
18:11:49
| <st_luke> | Maciek416: im not "the critic", im pointing out that process.exit isn't a crash... |
18:12:09
| <jesusabdullah> | I'm just a sysooop I need no sympathyyyy |
18:12:50
| <Maciek416> | hm |
18:14:16
| <jesusabdullah> | aww nobody likes queen++ |
18:14:42
| <Maciek416> | jesusabdullah: problem is that it just gets in your head and doesn't go away |
18:15:47
| * fotoverite | quit (Quit: fotoverite) |
18:21:06
| <st_luke> | spion: you should post that |
18:21:42
| * thlorenz | quit (Remote host closed the connection) |
18:22:03
| <spion> | although I just got an idea for smarter-than-that code - monitor the number of open file handles and used resources, and beyond a certain limit shut down gracefully. |
18:22:20
| <spion> | that could work |
18:22:33
| <jesusabdullah> | Iiiiii'm coding awayyyyyyy |
18:22:38
| <jesusabdullah> | Set a course for the virgin repooooo |
18:28:54
| * thlorenz | joined |
18:29:00
| * AvianFlu | quit (Remote host closed the connection) |
18:30:15
| * defunctzombie_zz | changed nick to defunctzombie |
18:33:04
| * AvianFlu | joined |
18:39:02
| * thlorenz | quit (Remote host closed the connection) |
18:48:28
| <Domenic_> | st_luke: yeah not sure what to do about that... |
18:51:28
| * thlorenz | joined |
18:55:37
| <st_luke> | svn is so retarded |
18:55:44
| <st_luke> | literally for retarded people |
18:55:48
| <st_luke> | who like retarded stuff |
19:06:39
| * peutetre | joined |
19:11:08
| <mbalho> | bohemian freenodeirc |
19:21:28
| * thlorenz | quit (Remote host closed the connection) |
19:24:54
| * dstokes | joined |
19:25:24
| * mirkokiefer | joined |
19:28:15
| * thlorenz | joined |
19:34:55
| * mirkokiefer | quit (Ping timeout: 260 seconds) |
19:39:20
| * dstokes | quit (Quit: dstokes) |
19:39:21
| * AvianFlu | quit (Read error: Connection reset by peer) |
19:39:50
| * AvianFlu | joined |
19:42:22
| * AvianFlu | quit (Remote host closed the connection) |
19:43:24
| * AvianFlu | joined |
19:46:14
| * mirkokiefer | joined |
19:59:37
| * peutetre | quit (Quit: peutetre) |
20:09:48
| <st_luke> | isaacs: I think I see where a lot of the npm inspiration came from now |
20:10:06
| * AvianFlu | quit (Read error: Connection reset by peer) |
20:10:17
| * AvianFlu | joined |
20:10:49
| <isaacs> | st_luke: oh, from yinst you mean? |
20:10:52
| <isaacs> | yeah |
20:11:20
| <st_luke> | yeah |
20:11:26
| <st_luke> | except yinst does too much |
20:11:51
| * peutetre | joined |
20:12:30
| * mikolalysenko | joined |
20:13:12
| * thlorenz | quit (Remote host closed the connection) |
20:14:17
| <jesusabdullah> | st_luke: how's ynode? ;) |
20:14:33
| <jesusabdullah> | st_luke: also totally jelly you got to meet marissa mayer, so cool |
20:15:31
| <st_luke> | jesusabdullah: i havent used it yet |
20:15:36
| <st_luke> | i looked at the source |
20:15:37
| <st_luke> | its just node |
20:21:25
| * kanzure | quit (Ping timeout: 248 seconds) |
20:25:20
| * thlorenz | joined |
20:27:09
| * tilgovi | joined |
20:30:34
| * kanzure | joined |
20:36:26
| <isaacs> | jesusabdullah: yahoo likes its developers to constantly question everything |
20:36:30
| <isaacs> | why apache? why php? |
20:37:01
| <st_luke> | ok im skipping the rest of these trainings |
20:37:36
| <st_luke> | ytraining |
20:37:55
| <AvianFlu> | Y U NO TRAINING |
20:37:55
| <LOUDBOT> | I'VE GOT YOUR BALLS IN A SLING, KIND SIR. |
20:50:21
| * st_luke | quit (Remote host closed the connection) |
20:50:52
| * peutetre | quit (Quit: peutetre) |
20:54:28
| * mirkokiefer | quit (Quit: mirkokiefer) |
20:58:27
| * peutetre | joined |
20:59:32
| <jesusabdullah> | isaacs: that's good! |
21:04:27
| * AvianFlu | quit (Ping timeout: 248 seconds) |
21:04:54
| * mmckegg | quit (Ping timeout: 264 seconds) |
21:05:31
| * mirkokiefer | joined |
21:06:08
| * dstokes | joined |
21:06:42
| * nexxy | quit (Ping timeout: 264 seconds) |
21:07:14
| * mmckegg | joined |
21:07:15
| * nexxy | joined |
21:07:16
| * nexxy | quit (Changing host) |
21:07:16
| * nexxy | joined |
21:08:46
| * Maciek416 | quit (Remote host closed the connection) |
21:09:19
| * Maciek416 | joined |
21:12:48
| * kevino80 | quit (Remote host closed the connection) |
21:13:36
| * Maciek416 | quit (Ping timeout: 252 seconds) |
21:14:51
| <mikolalysenko> | I just googled ynode, and wtf |
21:15:05
| * Maciek416 | joined |
21:15:11
| <mikolalysenko> | is it basically crockford's fork of node.js? |
21:15:36
| <mikolalysenko> | what's he gonna do? go back and add a bunch of semicolons? |
21:22:00
| * maksimlin | joined |
21:22:51
| <jesusabdullah> | mikolalysenko: I mean, I really thought it was a hypothetical? He gave a talk where he said he thought node was cool but he didn't think Joyent was properly equipped to be a good steward or whatever |
21:23:12
| <jesusabdullah> | mikolalysenko: so he was like, "if I was ceo I would fork node jay ess and call it why-node" |
21:24:17
| * timoxley | quit (Remote host closed the connection) |
21:24:50
| * timoxley | joined |
21:25:03
| * dstokes | quit (Ping timeout: 260 seconds) |
21:26:43
| <mikolalysenko> | jesusabdullah: well, it is open source so I suppose if he wants to try it he is free to do it |
21:27:28
| <mikolalysenko> | jesusabdullah: though I didn't watch the speech, but did he actually articulate any specific reason why he thought that he could do a better job? |
21:29:08
| * timoxley | quit (Ping timeout: 240 seconds) |
21:29:38
| * gwenbell | joined |
21:30:21
| * timoxley | joined |
21:31:28
| * dstokes | joined |
21:45:39
| <isaacs> | mikolalysenko: no, none. |
21:45:56
| <isaacs> | mikolalysenko: also, i emailed him directly, and asked for clarification of how he thinks i'm doing an "amateurish" job |
21:46:17
| <isaacs> | mikolalysenko: no response. |
21:46:27
| <jesusabdullah> | mikolalysenko: not really, he basically was like, "those guys are young whippersnappers" |
21:46:34
| <isaacs> | mikolalysenko: also, i mean... you'd "fork" it? srsly? there are THOUSANDS of forks of node. |
21:46:36
| <jesusabdullah> | "don't trust anyone under 40" |
21:46:39
| <isaacs> | wtf does that even mean? |
21:46:45
| <jesusabdullah> | oh you know what it means |
21:47:03
| <jesusabdullah> | a spiritual, cultural fork |
21:48:53
| * peutetre | quit (Quit: peutetre) |
21:53:53
| <jcrugzz> | but hes big javascript man Doug Crockford, hes like a super hero right? his fork would be AMAZING |
21:54:14
| * egradman_ | joined |
21:54:16
| <jesusabdullah> | well like |
21:54:18
| <jesusabdullah> | two things |
21:54:50
| <jesusabdullah> | one, crockford's code is obvious but his APIs aren't fantastic---see jslint |
21:55:02
| <jesusabdullah> | two, presumably yahoo would put a whole bunch of smart people on it |
21:55:27
| * luk | joined |
21:57:15
| * egradman | quit (Ping timeout: 268 seconds) |
22:00:23
| * AvianFlu | joined |
22:02:32
| <jesusabdullah> | hello AvianFlu |
22:04:30
| <mikolalysenko> | I personally am not a huge fan of crockford's writings, especially on javascript. he comes off as very opinionated, trying to pass off somewhat arbitrary stylistic choices as some deeper truth than they really are |
22:05:04
| <mikolalysenko> | but he is very influential, and in the past he did contribute quite a lot to popularizing javascript |
22:05:14
| <AvianFlu> | jesusabdullah: SUP DAWG |
22:06:06
| <jesusabdullah> | AvianFlu: N2MU??!?! |
22:06:28
| <jesusabdullah> | AvianFlu: working on a big ol' data migration/cleanup cycle on some mongoes |
22:06:33
| <jesusabdullah> | AvianFlu: EXCITING STUFF |
22:06:45
| <AvianFlu> | yeahlol |
22:07:02
| <jesusabdullah> | "wait why is the end timestamp before the start timestamp" |
22:07:09
| <AvianFlu> | hahahahhaa |
22:07:28
| <AvianFlu> | yeah I've been there |
22:07:44
| <AvianFlu> | mikolalysenko: he's like javascript's cranky grandpa |
22:07:51
| <AvianFlu> | I tend to just let him yell and try to stay off his lawn |
22:08:29
| <luk> | crockford is a philosopher |
22:08:34
| <luk> | he doesnt build software for a living |
22:08:59
| <luk> | if you keep that in mind it makes more sense to take what he says with a grain of salt |
22:09:01
| * luk | changed nick to st_luke |
22:09:35
| * st_luke | quit (Remote host closed the connection) |
22:10:01
| * st_luke | joined |
22:10:09
| <jesusabdullah> | tru dat |
22:10:17
| <mikolalysenko> | I don't really know much about crockford's personality, but a lot of people take him really seriously |
22:10:32
| <st_luke> | a lot of people take al gore really seriously |
22:10:32
| <robertkowalski> | örx - i ate far too much sweets |
22:10:32
| <jesusabdullah> | I give him mad props for JSON though |
22:10:47
| <mikolalysenko> | jesusabdullah: yeah, that's true |
22:10:48
| <spion> | I don't like that he often takes a dogmatic approach to saying things |
22:10:59
| <spion> | like "X is evil", "don't do Y" |
22:10:59
| <spion> | like "X is evil", "don't do Y" |
22:10:59
| <jesusabdullah> | dogmatism is good |
22:11:02
| <spion> | with zero background |
22:11:06
| <mikolalysenko> | maybe... |
22:11:11
| <jesusabdullah> | er |
22:11:12
| <spion> | dogmatism is the worst thing. |
22:11:14
| <jesusabdullah> | dogmatism is not good |
22:11:15
| <spion> | :( |
22:11:18
| <jesusabdullah> | PRAGMATISM is good |
22:11:19
| <jesusabdullah> | my bad |
22:11:22
| <spion> | ah yes. |
22:11:24
| <mikolalysenko> | for example, there is that whole jslint business that I don't really get |
22:11:30
| <spion> | i always want to know why things are evil. |
22:11:35
| <spion> | not just that they're evil |
22:11:36
| <mikolalysenko> | it seems like that tool is vastly oversold for what it does |
22:11:40
| <mikolalysenko> | spion: yeah, exactly |
22:12:06
| <jesusabdullah> | well linting's not a terrible idea, it's just not well done or, well, at all satisfying, in this context/implementation |
22:12:08
| <st_luke> | jshint is a really good tool for when you work with a few different people on the same project |
22:12:09
| <mikolalysenko> | also jslint seems to recommend writing less efficient code in many places, warning against ordinary programming operations like bit operators |
22:12:25
| <st_luke> | you can configure them to warn you only on the things you want |
22:12:26
| <mmckegg> | substack pkrumins: there's something screwy going on with Testling and IE7/8. I made a baseline test: https://github.com/mmckegg/baseline - IE7 times out and IE8 never finishes. |
22:12:27
| <st_luke> | at least in jshint |
22:12:32
| <st_luke> | its flexible |
22:12:42
| <jesusabdullah> | with jshint it's nice to be able to be like, "ohey you forgot a semi" or something |
22:12:57
| <jesusabdullah> | as long as it's also culturally acceptable to tell jshint, "DONT CARE I KNOW MAOR THAN U" |
22:13:19
| <mikolalysenko> | ah.... the ancient holy semicolon war |
22:13:23
| <st_luke> | i like when jshint doesnt let the build pass unless you fix what its complaining about |
22:13:39
| <jesusabdullah> | yeah, not me |
22:13:46
| <jesusabdullah> | I'll set a threshhold on it though |
22:13:53
| <spion> | /* jshint shootmyfoot:true */ |
22:14:01
| <mikolalysenko> | I guess what bothers me about these lint tools is that they don't really don't that much at the end of the day |
22:14:02
| <jesusabdullah> | like, a 95% pass rate by line is very reasonable |
22:14:15
| <jesusabdullah> | but there might be that one case where, god damn it, I MEANT what I said |
22:14:19
| <st_luke> | yea if im using jshint and i dont pass 100% then theres a problem |
22:14:27
| * evbogue | part |
22:14:28
| <jesusabdullah> | with jshint |
22:14:35
| * lanec | quit (Quit: pasta la veesta) |
22:15:04
| <st_luke> | lol |
22:15:04
| <st_luke> | ok |
22:15:05
| <st_luke> | brb |
22:15:07
| * st_luke | quit (Remote host closed the connection) |
22:15:11
| <jesusabdullah> | huh |
22:15:45
| <mikolalysenko> | it would be pretty great if there were js static checkers that could detect semantic errors instead of places where syntax deviates from some convention |
22:16:01
| <jesusabdullah> | well like, I'm more than cool with detecting deviation from convention |
22:16:07
| <mikolalysenko> | like the tools for C/C++ that can detect null pointer derefs, double frees, and unintiailized data, etc. |
22:16:07
| <jesusabdullah> | I just believe I know better than my tool |
22:16:29
| <spion> | mikolalysenko, you mean deeper analysis? intellij idea / webstorm have an analyser that goes a bit deeper. |
22:16:44
| <mikolalysenko> | I mean stuff like this: http://research.microsoft.com/en-us/projects/slam/ |
22:17:12
| <mikolalysenko> | though ms has pored god knows how much research money into that project |
22:17:21
| <mikolalysenko> | but they do check every signed piece of driver code using that system |
22:20:04
| <mikolalysenko> | slam can do stuff like prove device drivers never get stuck in infinite loops, are free of buffer overflows, etc. |
22:20:09
| <spion> | what would the JS equivalents of those errors be? |
22:20:11
| <mikolalysenko> | of course it isn't 100% and so you get some false alarms |
22:20:18
| <mikolalysenko> | a UI button that hangs for example |
22:20:21
| <mikolalysenko> | or a memory leak |
22:20:59
| <spion> | also C and C++ at least have some type hints, JS has none :/ |
22:21:19
| <mikolalysenko> | I think you could work around that |
22:21:23
| <spion> | the number of combinations that tool will need to check will grow a lot |
22:21:42
| <mikolalysenko> | nah, you just do abstract interpretation on the routine and propagate inferred types |
22:21:52
| <mikolalysenko> | v8 does it at run time, a static tool should have no problem really |
22:22:15
| * gwenbell | quit (Quit: Lost terminal) |
22:22:28
| <mikolalysenko> | I think static type inference in js is quite possible |
22:22:57
| <tmcw> | mikolalysenko: ternjs might be the closest so far? |
22:23:01
| <spion> | sounds worthy of exploration to me :D |
22:23:38
| <mikolalysenko> | tmcw: probably. I'd be surprised if there weren't others out there |
22:23:49
| <tmcw> | it's tuned for a certain use case but at the core is a pretty well-developed type inference system, based off of... spidermonkey I think? |
22:24:05
| <mikolalysenko> | tmcw: pretty neat |
22:24:06
| <grncdr> | I was under the impression that TypeScript did some (limited) inference as well |
22:24:12
| <grncdr> | but I haven't really looked that closely |
22:24:30
| * st_luke | joined |
22:24:50
| <tmcw> | y, similar to spidermonkey: http://marijnhaverbeke.nl/blog/tern.html |
22:25:33
| <mikolalysenko> | though static verification is really about more than just type systems. it is about proving novel/useful properties about programs automatically |
22:25:52
| <mikolalysenko> | although type systems happen to be one of the more useful tools in realizing this |
22:26:28
| <grncdr> | yeah didn't mean to imply they were equivalent |
22:26:56
| <mikolalysenko> | though I bet you could probably write code to detect some classes of errors in javascript programs due to the bizarre type coercion behavior |
22:27:27
| <mikolalysenko> | for example detect situations where things are accidentally converted to strings, etc. |
22:27:45
| <grncdr> | I believe JShint already does some of that |
22:28:05
| <grncdr> | but not a lot |
22:28:36
| <grncdr> | personally I think core.typed is a more likely path to getting powerful static verification into JS |
22:28:48
| <grncdr> | but it's not really JS at that point ;) |
22:30:20
| <spion> | has anyone tried using typescript more seriously? |
22:31:33
| * AvianFlu_ | joined |
22:31:37
| <spion> | by more seriously I mean trying to write a module with a couple of non-TS dependencies, then write another TS module that depends on the first one... |
22:32:07
| <grncdr> | nope, I've been tempted to convert one of my modules just to give it a try, but I'm not motivated enough to fiddle with the tools |
22:32:21
| <mbalho> | relevant crockford link http://www.youtube.com/watch?v=8HzclYKz4yQ&feature=player_detailpage#t=1360s |
22:34:28
| * spion | part ("Leaving") |
22:34:31
| * spion | joined |
22:35:12
| * AvianFlu_ | quit (Remote host closed the connection) |
22:35:31
| <grncdr> | wait what? he gave a 30 minute long talk answering a rhetorical question that nobody would've asked? |
22:35:42
| <grncdr> | :| |
22:36:49
| <st_luke> | i mean its not like hes doing it for free |
22:36:55
| <st_luke> | people like him get paid to give talks like that |
22:37:43
| <grncdr> | as I said before..l |
22:37:45
| <grncdr> | :| |
22:38:07
| <mikolalysenko> | yeah... |
22:38:15
| <grncdr> | ah well, I'm probably just jealous |
22:38:26
| <st_luke> | i would totally give a talk if people paid me for it |
22:38:29
| <grncdr> | I'd talk for 30 minutes about what other people should do for airfare and food |
22:38:56
| <grncdr> | like, fly me somewhere warm, and I will tell you what I would do if I were the queen of England |
22:39:41
| <mikolalysenko> | honestly I'm not so bothered by the fact he gets paid to give talks about this sort of stuff |
22:40:01
| <jesusabdullah> | idk man, it's just a talk |
22:40:10
| <jesusabdullah> | there are all kinds of boring and/or shitty talks |
22:40:11
| <st_luke> | the guy is like 90 years old |
22:40:14
| <jesusabdullah> | that other people like |
22:40:33
| <mikolalysenko> | there are lots of 90 year olds with plenty of interesting things to say |
22:40:37
| <grncdr> | sorry, I think I'm coming across more harshly than I actually feel about it |
22:40:47
| <st_luke> | yeah, but I'm not even mad about it, I'm impressed |
22:41:04
| <grncdr> | fair enough |
22:41:10
| <mikolalysenko> | also on the topic of jshint, this line passes without any warning: function main() { return [2]*3; } |
22:41:23
| <mikolalysenko> | but if you take out that semicolon -- watch out! |
22:41:23
| <jesusabdullah> | <-- zero fucks given over here |
22:41:29
| <st_luke> | ive never used jshint so idk |
22:41:36
| <st_luke> | sorry I mean jslint |
22:41:55
| <jesusabdullah> | mikolalysenko: that's why I let jshint advise but never trust it |
22:42:15
| <st_luke> | the main reason i use jshint is to keep my code in a consistent style, which its pretty good at |
22:42:32
| <spion> | mikolalysenko, see that *is* a type problem :) |
22:42:36
| <mikolalysenko> | jesusabdullah: I was just trying to point out that linters really only enforce syntactic/stylistic cnventions |
22:42:42
| <mikolalysenko> | spion: yeah, but jshint misses it |
22:43:21
| <spion> | yeah I suppose it does. |
22:43:46
| <mikolalysenko> | the point is that the safety you get by running your code through a linter is very superficial |
22:44:01
| <mikolalysenko> | it is kind of a cargo-cult like ritual |
22:44:14
| <st_luke> | not really |
22:44:18
| <mikolalysenko> | now that said, enforcing convention is important |
22:44:30
| * thlorenz | quit (Remote host closed the connection) |
22:44:37
| <spion> | jshint does do some useful scope checking (existence) |
22:44:43
| <spion> | but nothing deeper |
22:45:02
| <mikolalysenko> | spion: fair enough, though you could also do "use strict" and get the same results |
22:46:15
| <mikolalysenko> | basically linters can be good for style, but they don't really help regarding correctness |
22:46:31
| <mikolalysenko> | or at least that is my view of it |
22:48:03
| <spion> | they don't help much, true. |
22:48:20
| <spion> | only with the most basic errors, like typos |
22:48:29
| <spion> | and even then a limited subset of those |
22:50:10
| <grncdr> | so this might be obvious but: if (more) static verification of correctness is important, why use JS? |
22:50:52
| <spion> | this is a very interesting read: http://marijnhaverbeke.nl/blog/tern.html |
22:52:12
| <mikolalysenko> | grncdr: runs in a browser, awesome module system via node.js, relatively easy async programming, etc. |
22:52:22
| <mikolalysenko> | also resulting code is more accessible and easier for novices to pick up |
22:52:37
| <spion> | i found typescript exciting because sometimes static verification is important, sometimes dynamic power is, and typescript tries to let you have both easily whenever possible |
22:53:18
| <spion> | and lets you choose whenever impossible |
22:54:59
| <grncdr> | mikolalysenko: hm, I agree re about the module system and maybe accessibility, but the module system isn't really a feature of JavaScript (e.g. dotc) |
22:55:22
| <grncdr> | spion: same here, still might try it out on something |
22:55:44
| <grncdr> | s/a feature of/limited to/ |
22:56:26
| <mikolalysenko> | spion: I kind of like the idea, but I am a bit worried that using typescript might slow things down unnecessarily and it also makes it a bit harder for new users to pick up and edit |
22:56:45
| * fallsemo | quit (Quit: Leaving.) |
22:56:45
| <grncdr> | mikolalysenko: do you mean slow like runtime? |
22:56:51
| <mikolalysenko> | grncdr: yeah |
22:56:55
| <grncdr> | pretty sure there is no runtime effect |
22:57:08
| <mikolalysenko> | grncdr: not completely sold on that yet |
22:57:14
| <grncdr> | ah |
22:57:21
| <spion> | compilation time? |
22:57:34
| <mikolalysenko> | no, execution time |
22:57:43
| * tmcw | quit (Remote host closed the connection) |
22:57:50
| <mikolalysenko> | and execution memory |
22:57:55
| <grncdr> | fair enough, from what I understand it supposedly doesn't modify your JS a lot |
22:57:57
| <spion> | oh. TS adds very little to JS beyond compile-time static types |
22:58:15
| * tmcw | joined |
22:58:21
| <spion> | some sugar for functions / classes and modules... thats about it |
22:58:34
| <mikolalysenko> | spion: fair enough. it is probably not a big cost if it has any at all |
22:58:35
| <grncdr> | it would be worth looking into the JS it generates for classes |
22:58:44
| <grncdr> | but I'd guess it's pretty optimal |
22:58:54
| <mikolalysenko> | what I would really like to get though is a system that makes run time generated javascript easier to write |
22:59:05
| <mikolalysenko> | so I could write modules that can use macro style programming |
22:59:07
| <spion> | the playground greets you with a class :) http://www.typescriptlang.org/Playground/ |
22:59:12
| <grncdr> | sweet.js |
22:59:23
| <grncdr> | mikolalysenko: ^^ |
22:59:23
| <mikolalysenko> | it would make things like this easier to maintain: https://github.com/mikolalysenko/cwise-compiler/blob/master/compiler.js |
22:59:25
| <spion> | pretty sure sweet.js is compile-time only |
22:59:39
| <spion> | or isn't it? |
22:59:44
| <grncdr> | no I guess it is |
22:59:48
| <mikolalysenko> | spion: does sweet.js run at compile time? |
22:59:51
| <mikolalysenko> | ah |
23:00:01
| <grncdr> | it *is* implemented in JS, so you could use it at runtime as well |
23:00:11
| <grncdr> | but only if you're willing to ship it to wherever your JS runs |
23:00:15
| <mikolalysenko> | take for example this thing: https://github.com/mikolalysenko/ndarray-sort/blob/master/lib/compile_sort.js |
23:00:32
| <spion> | yeah, I've seen that kind of code before :) |
23:00:34
| <mikolalysenko> | I would strongly consider using a compile-to-js language if it made writing that sort of code easier |
23:01:00
| * dominictarr | joined |
23:01:02
| <mikolalysenko> | unfortunately, I don't really know any good solution to writing modules like this other than hand tuning stuff... |
23:01:03
| <grncdr> | spion: that TS generated code is nice |
23:01:12
| <grncdr> | *exactly* what I would've written myself |
23:01:27
| <mikolalysenko> | hmm |
23:01:36
| <mikolalysenko> | the typescript raytracer is not very efficient... |
23:01:42
| <mikolalysenko> | at least the vector class is somewhat suboptimal |
23:02:26
| * mirkokiefer | quit (Quit: mirkokiefer) |
23:02:47
| <mikolalysenko> | on v8 you pay an overhead for calling across contexts, and the vector methods are stored in a subcontext for really no good reason |
23:02:52
| * tmcw | quit (Ping timeout: 264 seconds) |
23:02:58
| <mikolalysenko> | same with all the other virtual classes |
23:03:49
| * defunctzombie | changed nick to defunctzombie_zz |
23:06:29
| <grncdr> | mikolalysenko: I don't think I understand what you mean |
23:06:34
| <grncdr> | how would you change it |
23:06:51
| <mikolalysenko> | http://neversaw.us/2013/09/04/on-the-performance-of-closures-in-v8/ |
23:06:56
| <spion> | just unwrapping the constructors and prototype methods from those closures should be enough |
23:07:04
| <mikolalysenko> | just remove the closures around vector/color/etc. |
23:07:12
| <mikolalysenko> | no need for that stuff to be there really |
23:08:15
| <mikolalysenko> | basically calling across closure costs a little bit extra |
23:08:34
| <spion> | I think they do that because the target is the browser |
23:08:38
| <spion> | to avoid global functions |
23:08:42
| <mikolalysenko> | ah, got it |
23:08:49
| <mikolalysenko> | makes sense |
23:08:56
| <spion> | buuut... |
23:09:01
| <spion> | I think they had a couple of different targets |
23:09:03
| <spion> | let me check with tsc |
23:10:38
| <spion> | haha, you get that result if you use the target "amd" |
23:10:56
| <spion> | because it generates a code that it assumes will be wrapped inside an AMD wrapper |
23:11:02
| <spion> | (but isn't wrapped) |
23:11:16
| <spion> | no wait. nope |
23:11:25
| <spion> | i was completely wrong :| |
23:11:51
| <spion> | it always wraps the classes. |
23:18:01
| * dominictarr | quit (Quit: dominictarr) |
23:21:40
| * mikolalysenko | quit (Quit: Reconnecting) |
23:21:56
| * mikolalysenko | joined |
23:22:11
| <grncdr> | spion: it wraps them because static methods presumable have access to a scope inside the class? |
23:22:25
| <grncdr> | even if the static methods never access anything from that scope |
23:22:46
| <grncdr> | that would be my guess |
23:23:06
| <spion> | you mean to allow access to private properties? |
23:23:11
| <spion> | I think thats a compile-time check only |
23:23:24
| <grncdr> | I don't know TS that well |
23:23:36
| <grncdr> | does it have static properties? |
23:23:41
| <spion> | yes |
23:24:07
| <grncdr> | hm, still you'd think it would just assign them to the constructor... |
23:24:30
| <spion> | static methods have access to private members: Vector.dot = function(v1, v2) { return v1.x * v2.x + v1.y * v2.y + v1.z * v2.z; } |
23:24:50
| <grncdr> | I was thinking of private static members being implemented as closure variables |
23:24:51
| <grncdr> | maybe |
23:25:04
| <spion> | ah no, just compile-time checking :) |
23:25:28
| <grncdr> | I was thinking of how coffeescript allows class-methods to have access to arbitrary variables in the scope of the class |
23:26:03
| <grncdr> | like you can have 'class Blah\n\tx = 12' |
23:26:09
| <grncdr> | but it looks like TS doesn't do that |
23:26:17
| <grncdr> | so I have no idea why they have the closure there |
23:26:28
| <grncdr> | anyways, I need to jump on a train |
23:26:35
| <spion> | my theory is that var X = ... doesn't create a global |
23:26:39
| <spion> | but function X() { ... } does |
23:26:44
| <spion> | in a <script> tag |
23:27:18
| <spion> | wait. |
23:28:12
| <spion> | nope |
23:28:31
| <spion> | commonjs / browserify have spoiled me :) |
23:28:42
| <spion> | and I've completely forgotten |
23:29:09
| * spion | hides |
23:30:57
| * st_luke | quit (Remote host closed the connection) |
23:31:24
| * st_luke | joined |
23:35:59
| <spion> | i just installed the tern plugin for vim |
23:36:00
| * st_luke | quit (Ping timeout: 248 seconds) |
23:36:03
| <spion> | and its pretty amazing so far. |
23:36:44
| <mikolalysenko> | is it smart enough to understand node_modules/require? |
23:39:42
| <spion> | as-is, no. trying to find out if there is a configuration option |
23:42:00
| <spion> | there is a node plugin... |
23:42:37
| <jjjohnny> | when piping together streams is there a setting to keep one from closing when the other closes/ |
23:42:52
| * ednapiranha | quit (Remote host closed the connection) |
23:43:41
| <jjjohnny> | a.pipe(b).pipe(a) style |
23:44:38
| * Maciek416 | quit (Remote host closed the connection) |
23:46:29
| * egradman_ | quit (Remote host closed the connection) |
23:47:04
| * egradman | joined |
23:49:09
| <spion> | mikolalysenko, I made it understand require('./local') |
23:49:17
| <spion> | let me check if it knows about node_modules now |
23:50:01
| <spion> | yup. |
23:51:50
| <spion> | http://i.imgur.com/O0oJsjd.png |
23:52:04
| * egradman | quit (Ping timeout: 264 seconds) |
23:52:42
| <grncdr> | jjjohnny: second arg to pipe IIRC |
23:53:10
| <grncdr> | pipe(other, {end: false}) |
23:54:05
| <spion> | all it needed was a .tern-project file in the root directory with the content: `{"plugins": {"node": {}}}` |
23:54:34
| * spion | checks if a file in ~ will do... |
23:55:13
| <spion> | oh yeah, that worked. |
23:55:35
| * st_luke | joined |
23:55:47
| <spion> | wow, this is pretty amazing |
23:56:57
| <spion> | i gotta thank tmcw for mentioning it |