00:00:00 | reactormonk | hm. I'm not sure if I like the ruby syntax with types stuffed on top |
00:00:34 | flaviu | reactormonk: The point is that you don't notice the type :) |
00:01:04 | flaviu | Everything is inferred, you can even do `foo = 1; foo = "asd"` |
00:01:18 | reactormonk | flaviu, yeah, but inferrence gan only go so far |
00:05:13 | * | hellonico joined #nim |
00:07:35 | * | replace-bot joined #nim |
00:07:47 | * | replace-bot quit (Remote host closed the connection) |
00:10:22 | * | BlaXpirit_UA quit (Remote host closed the connection) |
00:12:11 | * | drewsrem quit (Quit: Leaving) |
00:13:18 | * | tmku quit (Ping timeout: 265 seconds) |
00:13:50 | * | davidhq quit (Ping timeout: 250 seconds) |
00:19:34 | * | tmku joined #nim |
00:24:57 | * | fizzbooze joined #nim |
00:25:42 | * | tmku quit (Ping timeout: 272 seconds) |
00:27:55 | * | alex99 quit (Ping timeout: 246 seconds) |
00:31:43 | * | tmku joined #nim |
00:32:07 | * | saml_ joined #nim |
00:39:25 | * | wink-s joined #nim |
01:28:14 | * | HakanD____ joined #nim |
01:28:56 | * | Trustable quit (Quit: Leaving) |
01:30:18 | * | leonlee joined #nim |
01:33:03 | * | HakanD____ quit (Ping timeout: 265 seconds) |
01:38:42 | * | RandIter joined #nim |
01:40:41 | RandIter | https://en.wikipedia.org/wiki/Wikipedia:Articles_for_deletion/Nim_(programming_language) |
01:44:31 | * | gokr1 quit (Quit: Leaving.) |
01:48:22 | * | Kingsquee joined #nim |
01:50:17 | EXetoC | it has been going on for a long time |
01:58:27 | RandIter | This instance started on 2015-03-25. |
01:59:05 | RandIter | If anyone here is a pre-existing wp editor, they may wish to make their thoughts known. |
01:59:50 | * | arnetheduck quit (Ping timeout: 244 seconds) |
02:01:22 | * | wink-s quit (Ping timeout: 246 seconds) |
02:04:52 | * | darkf joined #nim |
02:12:07 | * | arnetheduck joined #nim |
02:25:17 | * | MagusOTB joined #nim |
02:25:33 | * | TEttinger joined #nim |
02:31:28 | * | brson quit (Ping timeout: 256 seconds) |
02:36:53 | * | leonlee quit (Ping timeout: 246 seconds) |
02:42:18 | * | Demon_Fox joined #nim |
02:44:30 | * | saml_ quit (Quit: Leaving) |
02:47:58 | * | brson joined #nim |
02:59:38 | * | brson quit (Quit: leaving) |
03:03:28 | * | reem quit (Read error: Connection reset by peer) |
03:05:54 | * | infinity0_ joined #nim |
03:05:54 | * | infinity0_ quit (Changing host) |
03:05:54 | * | infinity0_ joined #nim |
03:05:54 | * | infinity0 quit (Killed (barjavel.freenode.net (Nickname regained by services))) |
03:05:54 | * | infinity0_ is now known as infinity0 |
03:06:46 | * | reem joined #nim |
03:24:59 | * | wb joined #nim |
03:35:15 | * | hellonico quit (Remote host closed the connection) |
03:35:44 | * | hellonico joined #nim |
03:40:05 | * | hellonico quit (Ping timeout: 248 seconds) |
03:51:44 | * | hellonico joined #nim |
04:09:59 | * | ChrisMAN quit (Ping timeout: 252 seconds) |
04:12:26 | * | jasondotstar quit (Ping timeout: 272 seconds) |
04:14:06 | * | jasondotstar joined #nim |
04:21:01 | * | gsingh93 quit (Ping timeout: 250 seconds) |
05:04:30 | * | nande quit (Remote host closed the connection) |
05:32:14 | * | rektide quit (Ping timeout: 256 seconds) |
05:33:59 | * | gokr joined #nim |
05:34:29 | * | Demos quit (Read error: Connection reset by peer) |
06:08:28 | * | banister quit (Quit: My MacBook has gone to sleep. ZZZzzz…) |
06:12:23 | * | wb quit (Ping timeout: 250 seconds) |
06:22:10 | * | johnsoft quit (Ping timeout: 250 seconds) |
06:22:52 | * | johnsoft joined #nim |
06:23:05 | * | notfowl quit (Ping timeout: 252 seconds) |
06:26:21 | * | fowl joined #nim |
06:43:34 | * | reem quit (Remote host closed the connection) |
06:46:09 | * | reem joined #nim |
07:07:25 | * | hellonico quit (Remote host closed the connection) |
07:10:35 | * | hellonico joined #nim |
07:12:09 | gokr | Hey guys |
07:14:13 | * | wb joined #nim |
07:18:32 | * | BlaXpirit joined #nim |
07:19:23 | * | irrequietus joined #nim |
07:24:19 | * | fizzbooze quit (Ping timeout: 250 seconds) |
07:30:59 | * | hellonico quit (Remote host closed the connection) |
07:43:42 | * | hellonico joined #nim |
08:12:42 | * | HakanD____ joined #nim |
08:13:47 | * | reem quit (Remote host closed the connection) |
08:14:07 | * | Ven joined #nim |
08:17:17 | * | HakanD____ quit (Ping timeout: 256 seconds) |
08:22:13 | * | HakanD____ joined #nim |
08:26:51 | * | reem joined #nim |
08:36:14 | * | HakanD____ quit (Quit: Be back later ...) |
08:37:53 | * | HakanD____ joined #nim |
08:43:23 | * | reem quit (Remote host closed the connection) |
08:55:37 | * | milosn quit (Ping timeout: 264 seconds) |
09:01:41 | * | TEttinger quit (Ping timeout: 248 seconds) |
09:02:16 | * | reem joined #nim |
09:15:40 | * | HakanD____ quit (Quit: Be back later ...) |
09:19:20 | * | HakanD____ joined #nim |
09:19:48 | * | Tennis joined #nim |
09:19:48 | * | Tennis quit (Changing host) |
09:19:48 | * | Tennis joined #nim |
09:23:46 | * | jefus__ joined #nim |
09:24:22 | * | Ven quit (Quit: My MacBook has gone to sleep. ZZZzzz…) |
09:27:12 | * | jefus_ quit (Ping timeout: 250 seconds) |
09:28:04 | * | Strikecarl joined #nim |
09:28:10 | Strikecarl | Guys? |
09:28:17 | Strikecarl | I am messing around with osproc |
09:28:24 | Strikecarl | but when i do the Process = ref ProcessObj |
09:28:29 | Strikecarl | i get errors |
09:28:37 | * | davidhq joined #nim |
09:28:44 | Strikecarl | I have all imports correct. |
09:31:03 | LoneTech | that's a type declaration. your variables would look like var child : Process = startProcess("echo hello world") |
09:31:28 | LoneTech | (and since startProcess returns a Process, you don't need ": Process" in there) |
09:31:47 | Strikecarl | Oh. |
09:31:50 | Strikecarl | so for example |
09:31:58 | Strikecarl | if i wanted to make an program that shutdown steam.exe |
09:32:00 | Strikecarl | i would do |
09:32:09 | Strikecarl | Steam = ref ProcessObj |
09:32:12 | Strikecarl | Or? |
09:32:26 | Strikecarl | or like |
09:32:37 | Strikecarl | idk |
09:33:12 | LoneTech | you'd have to either find the steam process (I don't think osproc covers that) or run a separate command like kill (don't know the windows equivalent) to do so |
09:33:52 | Strikecarl | Could i just run the windows command "taskkill /mi Steam.exe" |
09:33:58 | LoneTech | sure |
09:34:02 | Strikecarl | what function allows me to run windows commands? |
09:34:21 | LoneTech | osproc.execCmd |
09:34:27 | Strikecarl | kk |
09:35:27 | Strikecarl | mhm weird. |
09:36:02 | Strikecarl | proc execCmd(command: string) |
09:36:08 | Strikecarl | "implementation of 'test.execCmd(command: string)' expected" |
09:36:27 | Strikecarl | What do i need to declare? |
09:36:29 | LoneTech | don't declare it. just import osproc |
09:36:38 | Strikecarl | oh kk. |
09:37:05 | LoneTech | all the declarations in the library documentation are things that are in the documented module |
09:37:23 | Strikecarl | Oh. Thanks! |
09:37:29 | Strikecarl | Thought i had to declare everything :3 |
09:37:37 | Strikecarl | Pretty new to nim :-P |
09:37:41 | * | hellonico quit (Remote host closed the connection) |
09:40:17 | LoneTech | welcome |
09:40:22 | Strikecarl | Can i do so when i run the program |
09:40:28 | Strikecarl | there is no box poup or anything? |
09:40:30 | Strikecarl | 100% silent? |
09:40:36 | Strikecarl | as i dont want to see an ugly cmd box popup |
09:40:41 | Strikecarl | when i run the taskkill |
09:41:11 | LoneTech | try building with --app:gui to make a nim program not open a console. don't know if taskkill will, though. |
09:42:04 | LoneTech | it's possible it will if using execCmd but not using execCmdEx, I am not well versed in Windows behaviour |
09:45:57 | Strikecarl | if i want to run taskkill |
09:46:03 | Strikecarl | why do i have to use echo |
09:46:12 | Strikecarl | {.discardable} doesnt seem to work |
09:47:42 | LoneTech | execCmd returns something, so Nim expects you to use the value (for instance, to know if the command failed). just put "discard execCmd(command)" to ignore the return value |
09:48:34 | * | Demon_Fox quit (Quit: Leaving) |
09:48:56 | LoneTech | the discardable pragma would fit in the proc declaration for procs where it's normal to not use the return value |
09:48:59 | Strikecarl | Thanks! |
09:50:26 | LoneTech | for instance http://nim-lang.org/macros.html#add,PNimrodNode,PNimrodNode is discardable because it returns its first argument; it's meant for nesting, not a new value. |
09:51:35 | Strikecarl | :) |
09:57:33 | * | Strikecarl quit (Quit: http://www.kiwiirc.com/ - A hand crafted IRC client) |
09:58:20 | * | milosn joined #nim |
10:01:18 | * | HakanD____ quit (Quit: Be back later ...) |
10:01:30 | * | reem quit (Remote host closed the connection) |
10:04:32 | * | Strikecarl joined #nim |
10:08:20 | * | Strikecarl quit (Client Quit) |
10:12:19 | * | milosn quit (Read error: Connection reset by peer) |
10:12:44 | * | milosn joined #nim |
10:27:13 | * | HakanD____ joined #nim |
10:34:45 | * | banister joined #nim |
10:44:45 | * | Ven joined #nim |
10:51:51 | * | Kingsquee quit (Quit: Konversation terminated!) |
10:57:53 | * | irrequietus quit () |
10:59:49 | * | milosn quit (Ping timeout: 245 seconds) |
11:01:53 | * | davidhq quit (Quit: My MacBook Pro has gone to sleep. ZZZzzz…) |
11:07:18 | * | milosn joined #nim |
11:16:24 | * | JinShil joined #nim |
11:21:25 | * | Trustable joined #nim |
11:23:04 | * | HakanD____ quit (Quit: Be back later ...) |
11:29:37 | * | davidhq joined #nim |
11:43:43 | * | irrequietus joined #nim |
11:47:23 | * | milosn quit (Ping timeout: 252 seconds) |
11:50:28 | * | Ven quit (Quit: My MacBook has gone to sleep. ZZZzzz…) |
12:02:00 | * | nulpunkt joined #nim |
12:07:48 | * | JinShil quit (Quit: Konversation terminated!) |
12:10:30 | * | milosn joined #nim |
12:15:32 | * | Etheco- quit (Quit: Leaving) |
12:21:51 | * | JinShil joined #nim |
12:24:30 | * | EXetoC quit (Ping timeout: 264 seconds) |
12:24:48 | * | davidhq quit (Quit: My MacBook Pro has gone to sleep. ZZZzzz…) |
12:26:34 | * | HakanD____ joined #nim |
12:33:44 | * | JinShil quit (Quit: Konversation terminated!) |
12:35:19 | * | Ven joined #nim |
12:35:44 | * | HakanD_____ joined #nim |
12:38:08 | * | HakanD______ joined #nim |
12:38:22 | * | HakanD____ quit (Ping timeout: 256 seconds) |
12:39:28 | * | HakanD_______ joined #nim |
12:41:04 | * | HakanD_____ quit (Ping timeout: 245 seconds) |
12:43:09 | * | HakanD______ quit (Ping timeout: 245 seconds) |
12:44:36 | * | Etheco joined #nim |
12:46:37 | * | no_name quit (Ping timeout: 252 seconds) |
12:46:43 | * | devzerp quit (Ping timeout: 250 seconds) |
12:50:42 | * | no_name joined #nim |
12:51:07 | * | devzerp joined #nim |
12:52:53 | * | mpthrapp joined #nim |
12:56:41 | * | milosn quit (Ping timeout: 250 seconds) |
13:02:09 | * | reem joined #nim |
13:06:33 | * | reem quit (Ping timeout: 246 seconds) |
13:07:21 | * | milosn joined #nim |
13:18:57 | * | milosn quit (Read error: Connection reset by peer) |
13:19:14 | * | milosn joined #nim |
13:24:01 | * | milosn quit (Ping timeout: 252 seconds) |
13:26:32 | * | BitPuffin joined #nim |
13:28:42 | * | HakanD_______ quit (Ping timeout: 264 seconds) |
13:29:08 | * | HakanD_______ joined #nim |
13:35:14 | * | davidhq joined #nim |
13:50:49 | * | pigeon_ quit (Ping timeout: 246 seconds) |
13:54:25 | * | davidhq quit (Ping timeout: 264 seconds) |
13:58:26 | * | davidhq joined #nim |
13:59:12 | * | itPuffinB joined #nim |
14:01:57 | * | BitPuffin quit (Ping timeout: 248 seconds) |
14:06:30 | * | milosn joined #nim |
14:07:48 | * | itPuffinB is now known as BitPuffin |
14:15:29 | * | rektide joined #nim |
14:19:23 | * | milosn quit (Ping timeout: 256 seconds) |
14:41:24 | * | devzerp quit (Ping timeout: 244 seconds) |
14:41:24 | * | no_name quit (Ping timeout: 244 seconds) |
14:42:51 | * | untitaker quit (Ping timeout: 250 seconds) |
14:48:09 | * | untitaker joined #nim |
14:51:55 | * | devzerp joined #nim |
14:53:36 | * | no_name joined #nim |
15:12:36 | * | Ven quit (Quit: My MacBook has gone to sleep. ZZZzzz…) |
15:16:43 | * | Ven joined #nim |
15:17:16 | * | milosn joined #nim |
15:35:32 | * | wb quit (Ping timeout: 250 seconds) |
15:39:23 | * | ChrisMAN joined #nim |
15:45:03 | * | darkf quit (Quit: Leaving) |
15:48:33 | * | arnetheduck quit (Ping timeout: 265 seconds) |
15:53:15 | * | davidhq quit (Quit: My MacBook Pro has gone to sleep. ZZZzzz…) |
15:53:18 | * | Ven quit (Quit: My MacBook has gone to sleep. ZZZzzz…) |
15:54:45 | * | wb joined #nim |
16:03:18 | * | Tennis quit (Quit: Leaving) |
16:09:48 | * | Strikecarl joined #nim |
16:10:02 | Strikecarl | var program = readLine(stdin) |
16:10:02 | Strikecarl | discard execCmd("taskkill /F /IM "program".exe /T") |
16:10:11 | Strikecarl | Cant i do something like this? |
16:10:12 | Strikecarl | :/ |
16:12:56 | * | banister quit (Read error: Connection reset by peer) |
16:13:42 | * | banister joined #nim |
16:19:44 | * | nimnoob joined #nim |
16:19:58 | nimnoob | hello |
16:34:06 | * | HakanD________ joined #nim |
16:37:24 | * | HakanD_______ quit (Ping timeout: 252 seconds) |
16:37:51 | * | HakanD_________ joined #nim |
16:38:40 | * | davidhq joined #nim |
16:38:53 | * | HakanD________ quit (Read error: No route to host) |
16:41:31 | * | HakanD__________ joined #nim |
16:45:30 | * | HakanD_________ quit (Ping timeout: 264 seconds) |
16:45:37 | BlaXpirit | Strikecarl pls |
16:45:39 | BlaXpirit | what do you want to do |
16:45:43 | Strikecarl | like |
16:45:46 | Strikecarl | i type in an string |
16:45:48 | BlaXpirit | don't use the goddamn execCmd |
16:45:49 | Strikecarl | like |
16:45:51 | Strikecarl | "Chrome" |
16:46:01 | Strikecarl | then it kills Chrome.exe |
16:46:04 | Strikecarl | pls |
16:46:09 | Strikecarl | its just some testerino |
16:46:28 | * | HakanD__________ quit (Read error: No route to host) |
16:50:59 | BlaXpirit | import osproc, rdstdin \\ let program = readLineFromStdin("") \\ discard execProcess("taskkill", ["/F", "/IM", program & ".exe", "/T"], options = {poUsePath}) |
16:51:01 | BlaXpirit | Strikecarl, |
16:52:31 | Strikecarl | Ty. |
16:53:04 | BlaXpirit | also your original example would work if you replace `program` with `&program&` |
16:53:05 | * | jefus__ is now known as jefus |
16:53:13 | Strikecarl | Ah. |
16:53:17 | Strikecarl | Thanks! |
16:53:52 | BlaXpirit | Strikecarl, problem is, i can write program name "; del C: ;" |
16:54:02 | BlaXpirit | or whatever destructive command |
16:58:10 | Strikecarl | How do i do |
16:58:17 | Strikecarl | --app:gui in Aporia IDE? |
17:00:24 | BlaXpirit | Strikecarl, go to settings>tools |
17:00:43 | BlaXpirit | maybe u can copy the first field into the 2nd field and add --app:gui |
17:01:08 | BlaXpirit | but then you'd also need -r |
17:01:31 | BlaXpirit | ah, Strikecarl, you can probably also make nim.cfg |
17:01:38 | BlaXpirit | much better solution |
17:03:50 | Strikecarl | I just fucked mine up real bad. |
17:04:15 | Strikecarl | Can i reset my compile settings somehow? |
17:04:28 | BlaXpirit | did u edit the main nim.cfg? |
17:04:33 | BlaXpirit | you're never supposed to |
17:04:50 | Strikecarl | No |
17:04:55 | Strikecarl | i edited in the "Tools" Thing |
17:05:01 | Strikecarl | but i accidently deleted the other important ones |
17:05:09 | Strikecarl | so i only have --app:gui |
17:05:15 | BlaXpirit | there is just this: |
17:05:16 | Strikecarl | and i cant remember my other ones :'( |
17:05:17 | BlaXpirit | $findExe(nim) c --listFullPaths $# |
17:05:19 | Strikecarl | yes |
17:05:19 | Strikecarl | TY |
17:08:17 | Strikecarl | (nimrod) |
17:08:23 | Strikecarl | its $findExe(nimrod) c --listFullPaths $# |
17:08:32 | Strikecarl | :') |
17:09:42 | Strikecarl | Even tho i get "execution of an external program failed |
17:09:42 | Strikecarl | > Process terminated with exit code 1" |
17:09:45 | Strikecarl | when i use --app:gui |
17:09:46 | Strikecarl | <.< |
17:28:47 | * | ChrisMAN quit (Remote host closed the connection) |
17:33:02 | * | gsingh93 joined #nim |
17:41:32 | nimnoob | is it possible to forward declare types? |
17:42:05 | onionhammer | nimnoob you can put them in the same type block |
17:42:43 | onionhammer | if types need to reference each other in a different order |
17:43:27 | nimnoob | onionhammer: so if there are circular references then the only option is to declare in the same block? i am ok with doing that, was just wondering if there were other options |
17:43:48 | onionhammer | I dont think you can forward declare a type, but im not 100% sure. |
17:44:00 | nimnoob | ok, np. thanks for that all the same |
17:45:03 | nimnoob | i guess another way i've gotten around this is using "interfaces" in C++ and using multiple inheritance |
17:45:22 | nimnoob | but nim doesn't support the concepts of interfaces or multiple inheritance, correct? |
17:45:48 | onionhammer | correct |
17:46:13 | nimnoob | ok. thanks again |
17:46:49 | onionhammer | nim doesnt have interfaces, it has type classes, which can be used in similar situations to when you'd want interfaces sometimes |
17:47:02 | onionhammer | they're experimental though |
17:48:59 | * | amaurea joined #nim |
17:49:39 | amaurea | What's the status of numpy-like (or fortran-like) multidimensional arrays for nimrod? |
17:52:55 | dom96 | amaurea: not aware of anybody implementing them, not sure what those style of multidim arrays look like actually. |
17:54:06 | * | mpthrapp_ joined #nim |
17:54:30 | * | mpthrapp quit (Ping timeout: 272 seconds) |
17:54:37 | nimnoob | onionhammer: i will take a look at type classes |
17:55:37 | * | brson joined #nim |
17:58:45 | amaurea | dom96: For example: a = zeros([2,3,4,5]) (create 2 by 3 by 4 by 5 array filled with zeros), a[1,1,:,:2] = 4 (set subset of array to 4). x=range(10) (create array [0,1,2,3,4,5,6,7,8,9]). table=x[:,None]*x[None,:] (create multiplication table, 10x10). table[table<50]*=-1 (invert sign of part of table matching condition), etc. |
17:59:22 | amaurea | dom96: And lots of other stuff, such as indexing arrays by arrays, etc. |
17:59:50 | amaurea | dom96: fortran arrays are basically the main reason why anybody would still use fortran rather than C++ or similar |
18:01:18 | dom96 | amaurea: With Nim's macros you could probably implement very similar syntax for arrays. But you should ask on the forum if anybody else has started working on something similar. |
18:01:52 | dom96 | If not then you can create a library for this yourself, if that is something you would like to pursue of course. |
18:04:11 | * | ChrisMAN joined #nim |
18:04:36 | * | reem joined #nim |
18:04:47 | amaurea | Creating a good array library is a lot of work. I don't have time to do that. But if nimrod were to get such arrays, that would make it a promising language for scientific computation. Most of us in astrophysics currently use python+fortran, but it would be nice to not have to choose between writing in a convenient language or a fast language. |
18:06:12 | amaurea | I found some posts on the forum, but it's hard to know if those represent the current status or not. They amounted to somebody declaring they planned to make such a library. |
18:12:16 | * | nimnoob quit (Ping timeout: 246 seconds) |
18:25:06 | dom96 | amaurea: If I may ask, what use cases would you have for this library? |
18:28:42 | * | Strikecarl quit (Quit: http://www.kiwiirc.com/ - A hand crafted IRC client) |
18:41:39 | * | Senketsu quit (Quit: Leaving) |
18:44:11 | * | davidhq quit (Quit: My MacBook Pro has gone to sleep. ZZZzzz…) |
18:49:54 | * | BlaXpirit_ joined #nim |
18:51:23 | * | BitPuffin quit (Ping timeout: 256 seconds) |
18:51:38 | * | BlaXpirit_ quit (Client Quit) |
18:51:56 | * | BlaXpirit_ joined #nim |
18:52:16 | * | BlaXpirit quit (Ping timeout: 250 seconds) |
18:52:42 | * | tmku quit (Ping timeout: 265 seconds) |
18:53:31 | * | reem quit (Remote host closed the connection) |
18:58:22 | * | reem joined #nim |
19:03:07 | * | reem quit (Ping timeout: 255 seconds) |
19:04:32 | * | reem joined #nim |
19:19:24 | * | kulelu88 joined #nim |
19:19:47 | kulelu88 | Would anybody be interested in building a NoSQL DB in nim as a use-case to see how it performs? |
19:25:17 | dtscode | like building redis and making bindings for it? |
19:25:26 | dom96 | That sounds like a fun project. Are you looking for people to help you out? |
19:29:08 | kulelu88 | partially yes, but I would really really like to see some robust nim code that isn't too abstract. a proper "use-case" to say "hey, this powerful language runs at the same speed as mongoDB" |
19:29:26 | kulelu88 | *mongoDB/C |
19:29:41 | onionhammer | maybe dont mention mongodb |
19:29:43 | onionhammer | :) |
19:31:03 | kulelu88 | :D |
19:32:18 | * | reem quit (Remote host closed the connection) |
19:33:07 | federico3 | there are so many *SQL DBs around tho |
19:34:43 | * | egrep quit (Remote host closed the connection) |
19:35:06 | kulelu88 | federico3: It would certainly be a strain to build yet another DB, but doesn't Nim need some production-power tool to advocate for it? |
19:36:14 | * | egrep joined #nim |
19:37:01 | federico3 | kulelu88: absolutely yes, and I would say it could really encourage people to use Nim if 1) it is something that people need 2) it is a library or a framework to be used from Nim applications |
19:37:53 | kulelu88 | federico3: What do you have in mind? In the world of the internet, I could only assume something web-related would be the engine for growth |
19:39:41 | federico3 | kulelu88: e.g. think for example iPython Notebook + Pandas [+ maybe scikit-learn]. People in science or finance are moving from domain-specific languages to Python because of those |
19:40:29 | kulelu88 | I don't see anybody rewriting the math libs of Python entirely |
19:40:37 | kulelu88 | in any other language |
19:40:40 | kulelu88 | at all |
19:42:11 | federico3 | sorry I don't get it |
19:43:29 | pigmej | kulelu88: well for DB its' more important to inter node speed |
19:43:30 | federico3 | (most of the internals of Pandas/Numpy/sklearn are in C, C++, fortran) |
19:43:33 | pigmej | rather than single node speed |
19:43:44 | pigmej | (while single node speed is important too) |
19:43:59 | pigmej | building simple kv store is easy, in any language |
19:44:13 | pigmej | building decent storage though is different story |
19:45:46 | kulelu88 | Are any of you working on any open source projects where others can learn from your code? |
19:45:48 | pigmej | kulelu88: I have built some k/v storage engines and databases |
19:46:39 | pigmej | kulelu88: well, first of all, you have to think => what do you want to have in your database, what about CAP, what about hmm let's say CRDTish structures etc |
19:46:46 | pigmej | what about ACID (or acid like things) etc etc |
19:47:05 | pigmej | you would porbably need to know at least how paxos / raft / multipaxos works |
19:47:17 | kulelu88 | pigmej: which is probably why it is over my head as a downstream programmer |
19:47:25 | pigmej | OR if you want to build single node database |
19:48:14 | pigmej | ok, then still a lot of reading / thinking |
19:48:42 | pigmej | and well, there are a lot of opensource databases |
19:48:46 | kulelu88 | pigmej: maybe I should start small and convert my current python script into a Nim executable |
19:48:58 | pigmej | do you have python kv database |
19:48:58 | pigmej | ? |
19:49:30 | kulelu88 | nope pigmej . This is a plain old script |
19:51:47 | * | fizzbooze joined #nim |
19:51:55 | * | reem joined #nim |
19:52:14 | federico3 | in terms of DBs, I'd love to have a tiny, zero-maintenance datastore for email/feeds/personal data that can do syncing across platforms (including smartphones) |
19:53:10 | pigmej | federico3: in what lang? |
19:54:31 | federico3 | pigmej: the implementation lang for the DB itself? If it has to be lightweight enough and run on different plaftorms maybe Nim would be a good candidate |
19:55:25 | pigmej | hmm, I might have then something in near future ;P |
19:55:36 | pigmej | I'm currently in the middle of some play / rewrite |
19:55:44 | pigmej | ok, middle was incorrect word there |
19:55:49 | federico3 | what is it? :) |
19:56:15 | pigmej | a sinmple embeddable crdt storage |
19:56:19 | pigmej | simple* |
19:58:34 | federico3 | crdt? |
20:00:23 | federico3 | the tricky part is syncing albeit (it's safe to assume that only one node/device is being actively used at a time by the user) |
20:01:00 | kulelu88 | that should be a restriction |
20:01:16 | * | brson quit (Ping timeout: 252 seconds) |
20:02:02 | pigmej | crdt is for syncing let's say |
20:02:03 | pigmej | ;-) |
20:02:49 | pigmej | it's for strong eventual consistency (blah... blah... blah) |
20:03:01 | pigmej | a lot of buzzwords, a lot of academic publications |
20:03:02 | pigmej | etc |
20:03:45 | federico3 | the large majority of network-based PIM application is meant to be multiuser and have centralized databases |
20:03:55 | pigmej | sure, |
20:04:00 | pigmej | it's the easy part |
20:04:04 | pigmej | the centralized store |
20:04:09 | pigmej | "easy" |
20:04:09 | federico3 | once you lose connectivity between laptop/phone/VPS you are in trouble |
20:05:17 | pigmej | federico3: http://research.microsoft.com/apps/video/default.aspx?id=153540&r=1, https://hal.inria.fr/file/index/docid/555588/filename/techreport.pdf and the kind of next-gen http://arxiv.org/pdf/1410.2803v1.pdf |
20:05:23 | federico3 | hovewer, if we think of a single-user/many devices platform, things are entirely different |
20:05:46 | federico3 | thanks! |
20:06:12 | * | reem quit (Remote host closed the connection) |
20:07:21 | pigmej | one of the coolest crdt implementations are for riak |
20:07:46 | pigmej | or if you like beam like langs, there is also one implementation of delta-crdt in elixir |
20:13:07 | gmpreussner|work | kulelu88: i've been playing with the idea of implementing a simple graph database in Nim |
20:14:28 | kulelu88 | Do any of you use Nim at work for real projects? |
20:14:54 | pigmej | I'm considering Nim for some event storage |
20:15:15 | pigmej | kulelu88: nim is quite ok from my tests, |
20:15:26 | gmpreussner|work | i've played with event stores in C# before. they're relatively easy to implement. should be fun in Nim. |
20:15:42 | gmpreussner|work | i wrote a whole a CQRS stack once |
20:15:48 | gmpreussner|work | with event sourcing |
20:15:55 | pigmej | gmpreussner|work: for time series data? |
20:16:08 | gmpreussner|work | no, for a web application |
20:16:12 | pigmej | ah, |
20:16:34 | gmpreussner|work | maybe you mean something else by 'event storage' :) |
20:16:43 | pigmej | yeah could be ;) |
20:16:55 | pigmej | for me event / series storage is time series database or time series kv |
20:17:12 | gmpreussner|work | ah ok |
20:17:12 | pigmej | like 10_000 new events in a second |
20:17:28 | pigmej | average from 30d |
20:17:32 | gmpreussner|work | you could probably just store that sequentially and then binary search it :) |
20:17:42 | pigmej | not an option ;) |
20:17:43 | * | reem joined #nim |
20:17:52 | pigmej | but yeah, it's stored sequentially :) |
20:18:01 | pigmej | like rrd |
20:18:12 | pigmej | though replicated / clustered... |
20:19:16 | pigmej | the fact is, python hits the limit there, and I will need to rewrite that part in hmm, probably next 6 months or so |
20:19:18 | kulelu88 | gmpreussner|work: you built a webapp using Jester? |
20:19:24 | * | Demon_Fox joined #nim |
20:19:35 | gmpreussner|work | kulelu88, no, but others have |
20:20:06 | kulelu88 | what do you use? gmpreussner|work |
20:20:30 | gmpreussner|work | kulelu88, i use C++ at work, Nim in my free time |
20:20:42 | gmpreussner|work | i used to use C# in my free time |
20:20:49 | kulelu88 | So you built a webapp with pure Nim? |
20:21:35 | kulelu88 | that must've taken ages compared to Rails |
20:22:32 | onionhammer | web app in nim w/o jester? |
20:22:56 | onionhammer | it's not as bad as you might think, since there's the httpserver module |
20:23:26 | kulelu88 | Jester itself is complicated. Pure Nim must be o_0 |
20:23:31 | gmpreussner|work | kulelu88, i have not done it, but others here have |
20:24:05 | onionhammer | jester is probably overcomplicated |
20:24:16 | onionhammer | but it does a lot of stuff to make it easier and general purpose |
20:24:22 | onionhammer | wuoldnt necessarily be the case for specific applications |
20:24:59 | kulelu88 | it's not very optimized though. Runs slower than Node IIRC |
20:25:15 | onionhammer | no, and neither are the underlying libraries it uses |
20:25:49 | onionhammer | node is actually pretty fast if you don't have to do a lot of heavy crunching I imagine. libuv is quick |
20:25:58 | pigmej | jester is not that fast that's a fact |
20:26:21 | pigmej | but in most real life apps (where jester targets), you will hit a limit in IO (db files or whatever) |
20:26:22 | kulelu88 | kind of biting yourself in the foot if your static language web framework is slower than Javascript |
20:26:46 | pigmej | kulelu88: not at all |
20:27:01 | pigmej | also node => v8 => JIT |
20:27:19 | pigmej | and JIT technique is quite effective (for example pypy, rpython stack) |
20:28:53 | pigmej | also you can't compare apples and oranges :) |
20:29:58 | kulelu88 | you can't directly compare, but they're both web tools and Nim should be quicker in everything |
20:30:24 | pigmej | kulelu88: not at all |
20:30:49 | pigmej | jester adds quite a lot (maybe some parts are overcomplicated / badly implemented), but those are probably good enough |
20:31:05 | pigmej | i node (also what framework?) they are probably better optimized |
20:31:18 | * | johnsoft quit (Ping timeout: 265 seconds) |
20:32:19 | pigmej | also headers parser from node.js is one of the best available on free licenses |
20:32:33 | * | johnsoft joined #nim |
20:32:40 | pigmej | (and its C implemented) |
20:34:13 | federico3 | speaking of which, we need better benchmarks for Nim :) |
20:36:30 | pigmej | federico3: asynchttpserver is quite fast :) |
20:36:42 | pigmej | especially that forked version of asyncdispatch |
20:41:24 | * | blobs joined #nim |
20:42:36 | * | blobs left #nim (#nim) |
20:44:12 | * | blobs joined #nim |
20:45:53 | pigmej | anyway, being still on performance part |
20:46:21 | pigmej | nanomsg + nim, is there something better in terms of inter node / machine message passing performance |
20:50:15 | * | mwbrown joined #nim |
20:50:42 | mwbrown | Question for you guys: is c2nim still the recommended way of interfacing with existing C code by way of converting structures to Nim equivalents? |
20:51:12 | mwbrown | I wanted to resume work on this embedded Nim example running on a Cortex M3 but I'm lazy and don't want to convert all the C structures being used ;) |
20:51:26 | mwbrown | convert by hand, that is |
20:53:48 | * | clynamen quit (Ping timeout: 246 seconds) |
20:54:54 | * | Sembei quit (Ping timeout: 250 seconds) |
20:55:19 | * | clynamen joined #nim |
20:55:56 | reactormonk | mwbrown, sure |
21:00:09 | * | davidhq joined #nim |
21:05:04 | * | mpthrapp_ quit (Remote host closed the connection) |
21:06:43 | amaurea | dom96: Wow, that's a bit like asking what use case people would have for a string library or a math library. I use multidimensional arrays in practically every program I write. For example, today I wrote a program that reads in an num_detector by num_samples 2d arrays, computes the fourier transform along the last axis and then computes the inverse-variane weithed mean of the power spectra. Or how about a program that draws a random realization of the cosmic mi |
21:07:06 | amaurea | dom96: all those things could be done with 1-d arrays and index juggling, but it would be cumbersome and error prone. |
21:07:55 | * | TEttinger joined #nim |
21:09:49 | amaurea | dom96: I used to program mostly in C++, but I moved to python+fortran because C++'s multidimensional array libraries aren't (or weren't) anywhere near as good as numpy or fortran arrays. |
21:10:31 | reactormonk | amaurea, so a numpy wrapper for nim? :-) |
21:11:30 | amaurea | reactormonk: that would be a huge shortcut in implementing it |
21:11:54 | reactormonk | amaurea, but it would add another layer |
21:12:15 | reactormonk | not sure how much glue code is between numpy and libblas etc. |
21:12:20 | amaurea | reactormonk: one would have to use only the C part of numpy, and replace the whole python interface |
21:12:23 | * | fizzbooze quit (Ping timeout: 265 seconds) |
21:13:29 | amaurea | reactormonk: blas and lapack calls are a pretty small part of what numpy does. I'd guess most of the code deals with slicing and storage schemes |
21:14:20 | amaurea | reactormonk: well, most of the core of numpy at least. Of course, if you include all the libraries built on top of that, then the sum of all those will be much more |
21:14:23 | * | fizzbooze joined #nim |
21:15:02 | reactormonk | amaurea, one messy part will be the different memory management systems |
21:15:25 | amaurea | reactormonk: I think python is reference counted. What does nim use? |
21:15:51 | reactormonk | amaurea, different GC layouts, depending which one to go for. Honestly, I don't know what the default is |
21:16:26 | reactormonk | also, nim has macros, which will make a lot of the metaprogramming slightly different |
21:16:56 | onionhammer | refc is the default iirc |
21:18:50 | amaurea | reactormonk: Julia, one of nimrod's competitors, has multidimensional arrays, but they aren't quite as nice as numpy arrays (too matlab-inspired in my opinion, and conflates the concepts of arrays and matrices). I think most of the choices nimrod has made are better than Julia's choices, and the lack of multidimensional arrays in nimrod is the largest thing julia has over nimrod in my opinion |
21:19:10 | reactormonk | amaurea, it's called nim now ;-) |
21:20:18 | amaurea | reactormonk: Ok, I'll update my vocabulary :) |
21:20:19 | reactormonk | amaurea, think of an API for nim and put it inside the dumpTree macro |
21:23:54 | * | jefus_ joined #nim |
21:24:05 | reactormonk | btw, what's the current status of concepts? |
21:24:20 | flaviu | federico3: Is a special database really necessary for that? You can probably put together syncing fairly easily by logging all commands that write to the database and replaying them on the centralized DB once internet connectivity is restored. |
21:25:50 | amaurea | reactormonk: I'm a novice in nim, really just an outsider going "nim really looks like it would be worth getting into if only it had feature X". I'm not the best person to ask about the status of nim :) |
21:26:00 | federico3 | flaviu: what you just described sound like a log-based database :) |
21:26:35 | flaviu | Everyone keeps stealing my ideas :P |
21:27:03 | * | jefus quit (Ping timeout: 246 seconds) |
21:27:41 | federico3 | flaviu: and you still have to manage collisions when replying the transaction logs |
21:36:59 | * | brson joined #nim |
21:40:48 | gokr | amaurea: I am not an expert in numerical computing so to speak, but I suspect the lack of multidimensional arrays in Nim can be relatively smoothly fixed given its powerful macro system and operator overloading etc. |
21:41:20 | gokr | So I think you could make them nice without actually modifying Nim itself. |
21:42:35 | amaurea | gokr: Would [:,:,:]-syntax be possible, do you think? It would be nice not do have to do stuff like [Slice()][Slice()][Slice()] |
21:43:57 | def- | amaurea: like this?: https://github.com/def-/nim-unsorted/blob/master/bitmap.nim#L39 |
21:44:36 | BlaXpirit_ | amaurea, at the very least, [1..2, 3..4, 5..6] is possible |
21:44:53 | amaurea | def-: yes, like that, but with slices |
21:45:55 | amaurea | BlaXpirit_: Hm, having to specify the end point for full slices would be a bit tedious. 1..2 is nice when you mean index 1 to 2, but not when you mean "every index along this axis" |
21:46:31 | BlaXpirit_ | amaurea, syntax sugar is easy to make |
21:46:47 | amaurea | BlaXpirit_: nice :) |
21:47:25 | reactormonk | amaurea, that was directed to the general audience |
21:48:28 | * | davidhq quit (Quit: My MacBook Pro has gone to sleep. ZZZzzz…) |
21:49:14 | reactormonk | amaurea, I basically want you to think of some API calls you would like to make and we can tell you how to do it not going against the grain |
22:06:55 | dom96 | amaurea: I was merely curious whether you had a specific project in mind. |
22:07:00 | * | Jehan_ joined #nim |
22:11:08 | blobs | I support amaurea's efforts. I use multidimensional arrays quite often myself, and having an easy interface in nim would make a world of difference. |
22:13:09 | * | vendethiel quit (Ping timeout: 245 seconds) |
22:17:01 | * | fowlmouth joined #nim |
22:19:08 | * | mwbrown quit (Ping timeout: 252 seconds) |
22:19:15 | * | vendethiel joined #nim |
22:19:43 | * | fowl quit (Ping timeout: 252 seconds) |
22:25:49 | * | Kingsquee joined #nim |
22:34:36 | * | reem quit (Remote host closed the connection) |
22:38:33 | gokr | def-: What was the latest new on http serving performance? |
22:38:36 | gokr | news |
22:40:52 | dom96 | gokr: def-'s PR is still pending. I still think we need to look at ways of making it safer. |
22:41:16 | gokr | oki |
22:48:29 | * | irrequietus quit () |
22:51:08 | onionhammer | dom96 is it currently safe? |
22:51:50 | dom96 | onionhammer: yeah. |
23:13:55 | * | fizzbooz1 joined #nim |
23:21:13 | * | fizzbooz1 quit (Quit: WeeChat 1.1.1) |
23:21:33 | * | fizzbooz1 joined #nim |
23:26:01 | * | Trustable quit (Remote host closed the connection) |
23:28:41 | * | kulelu88 left #nim ("Leaving") |
23:35:07 | * | reem joined #nim |
23:35:44 | * | polde quit (Read error: Connection reset by peer) |
23:38:11 | * | blobs quit (Quit: Page closed) |
23:39:26 | * | brson quit (Ping timeout: 252 seconds) |
23:41:22 | * | reem quit (Ping timeout: 256 seconds) |
23:55:25 | * | Varriount_ joined #nim |
23:57:34 | a5i | wow |
23:57:39 | a5i | I just realized |
23:57:50 | a5i | Python is to Nim as Ruby is to Crystal |
23:57:54 | a5i | #mindblown |
23:58:09 | * | Varriount quit (Ping timeout: 245 seconds) |
23:58:23 | * | MyMind quit (Ping timeout: 250 seconds) |
23:59:00 | Araq | a5i: meh. Nim borrows from lots of languages. from Python only the syntactic feeling |
23:59:55 | Araq | Nim doesn't even use 'def' but 'proc' |