<< 13-07-2014 >>

00:00:14Demos_you can do a standalone VS based thing, like a "nimrod express edition" but I want to focus on the plugin
00:03:00OrionPKoh interesting
00:03:02*flaviu quit (Remote host closed the connection)
00:07:01dom96Demos_: Could not load file or assembly 'file:///C:\Users\charlie\source\VisualNimrod\NimrodVS\bin\Debug\NimrodVS.dll' or one of its dependencies. The system cannot find the file specified.
00:08:01Demos_oh christ
00:08:30Demos_serves me right for trying to have a library with the process starting functions
00:09:03dom96lol
00:09:28dom96Maybe I should just try installing it from git? How do I do that?
00:13:02Demos_dom96, did you get that error when you tried to install the VISX?
00:13:17dom96Demos_: no, when I launched VS
00:13:33dom96Demos_: It told me to look in some ActivityLog.xml
00:13:52Demos_oh that is the project system being stupid
00:14:10Demos_I am not sure if you can actually really deploy a project with a VSIX package
00:15:00Demos_the location of all the controls is that dll and for some reason it is referenced in the .pkgdef as being my source directory
00:17:35dom96so how do I fix it?
00:18:37Demos_well building from source would fix it, but that is not ideal
00:19:52*Matthias247 quit (Read error: Connection reset by peer)
00:23:18*BitPuffin quit (Ping timeout: 240 seconds)
00:28:56dom96'night
00:38:21*zematis joined #nimrod
01:09:59*Boscop joined #nimrod
01:25:58*zematis quit (Ping timeout: 240 seconds)
01:56:28*EXetoC quit (Quit: WeeChat 0.4.3)
02:00:55*adoniscik joined #nimrod
02:02:18adoniscikhello, folks. If you install a package with the babel 0.2 that comes with nimrod 0.9.4, will it be possible to uninstall it with the babel in the next version of nimrod since the current version doesn't support uninstallation?
02:02:53adonisciksecondly, is there any plan to support user-directory package installs?
02:04:45def-adoniscik: user-directory installs with babel?
02:04:57adoniscikcorrect.
02:04:58def-and hi
02:05:01adoniscikhi to you too
02:05:24adonisciklike python does with pip install --user
02:05:30adoniscikso you don't need to sudo
02:05:39def-i never used sudo with babel and it works
02:05:44def-so i guess the installs are local
02:05:48adonisciklet me try again... 1s
02:06:04def-maybe that didn't work in babel 0.2 though, i have 0.4
02:06:18*lorxu joined #nimrod
02:06:59adoniscikcheck it out: http://pastebin.com/NwQ19WhK
02:07:00def-yeah, i have a .babel directory in my home with all the packages
02:07:21adoniscikyou are right, so do I, so what gives?
02:07:31def-adoniscik: works for me with babel 0.4
02:08:09def-adoniscik: but i think that error comes because c2nim depends on the devel branch of nimrod
02:08:38def-0.9.4 still comes with an included c2nim
02:10:06adoniscikso it does ... let me see how far I get with that
02:11:22def-about the uninstalls: i guess it will work, but reverse dependencies might be a problem
02:11:30def-so you could delete something that you still needed
02:11:45adoniscikls
02:11:51adoniscikthanks
02:17:31def-you're welcome
02:35:31*saml_ quit (Quit: Leaving)
02:38:51*q66 quit (Quit: Leaving)
02:41:36adoniscikwhen wrapping C libraries, do the nimrod types correspond directly to the C types?
02:48:51Skrylaradoniscik: some of them do
02:49:10Skrylarthough its best to use the 'c*' types like 'cint' to guarantee it
02:49:17Skrylarcint, clong, culong, cshort, csize, etc
02:49:22def-adoniscik: but there are typs like cint, cfloat and you can use cint(x) for some int to convert
02:59:44*X-Scale quit (Ping timeout: 260 seconds)
03:00:11adoniscikis it recommended to typecast to nimrod types in the wrapper or simply present users the original C types?
03:02:31lorxu.j
03:04:12def-adoniscik: I'm not sure, but the libraries I've seen so far present the C types
03:05:08def-i think usually the conversion happens automatically, but there were some cases where i had to push it by hand
03:08:30*X-Scale joined #nimrod
03:13:48adoniscikwhat does "Error: ';' expected" mean in c2nim?
03:14:20def-probably that it can't parse the C file
03:14:42adoniscikso you need two files: the header and thesource?
03:14:49adoniscikI just ran it on the header
03:15:01def-yeah, that's what I would do too
03:16:34*flaviu joined #nimrod
03:32:12adoniscikI copied the source file too, but I still get the same error. I wish c2nim had a proper tutorial.
03:34:36flaviuadoniscik: Can you link to the file?
03:35:14flaviuif the header is public, of course
03:35:59adonisciksure, it's the GSL: http://www.gnu.org/software/gsl/
03:36:23adoniscikI tried a simple function, gsl_randist.h
03:36:57adoniscikmodule, rather. I was planning to wrap them one at a time
03:37:23adoniscikIf you want to try DL it from http://mirror.team-cymru.org/gnu/gsl/gsl-1.16.tar.gz
03:38:15flaviuI've found it, thanks
03:40:37flaviuadoniscik: Seems that getting rid of the __BEGIN_DECLS / __END_DECLS will do the trick
03:42:30adoniscikwhen you find some spare time, could you add a simple tutorial and FAQ, flaviu?
03:42:42adoniscikthank you for your help
03:43:24flaviuI don't really have much experience, but maybe I can put something together later
03:43:38adoniscikc2nim is not yours then?
03:44:16adoniscikanyway, it still did not work. which version are you on?
03:44:16flaviuNope, TBH this is my first time using it
03:44:19adonisciksorry!
03:44:33adoniscikI saw your name on the commit list
03:44:50flaviuAh, I just fixed a copy-paste bug, nothing major
03:45:04flaviu'+' -> '-'
03:45:26flaviuWhat error do you get?
03:45:27flaviuI
03:45:40flaviu'm not sure of my version, I think its the latest from git
03:46:17adoniscikoh wait it worked after more careful clearning
03:47:06flaviuOk, good to hear
03:59:09adoniscikbtw, some headings of your tutorial don't work for me, e.g. http://nimrod-by-example.github.io/arrays/
04:03:00flaviuBlank pages like that are empty, I've been procrastinating on getting more done
04:39:18*Skrylar quit (Remote host closed the connection)
04:48:49*xenagi quit (Read error: Connection reset by peer)
04:49:53*BlameStross quit (Remote host closed the connection)
04:53:25*Francisco quit (Excess Flood)
04:53:51*Francisco joined #nimrod
04:55:59*adoniscik quit (Write error: Broken pipe)
05:00:19*BlameStross joined #nimrod
05:03:03flaviuHuh, it seems that kramdown doesn't want to render for some unknown reason. Anyway, night
05:03:07*flaviu quit (Quit: Leaving.)
05:12:45*BlameStross quit (Remote host closed the connection)
05:14:00*BlameStross joined #nimrod
05:37:24*adoniscik joined #nimrod
05:37:32*ics quit (Quit: My MacBook Pro has gone to sleep. ZZZzzz…)
06:10:45adoniscikhow should you deal with OS-dependent preprocessor directives in c2nim? it seems to ignore them. I work around the problem by hard-coding for the OS I'm using but that's not "right".
06:12:51adonisciksee, for example: http://paste.ubuntu.com/7787808/
06:13:22adoniscikit only works when you remove the internal ifdef
06:13:32adoniscikany suggestions?
06:22:44*adoniscik quit (Ping timeout: 260 seconds)
06:24:58*dom96_ios joined #nimrod
06:25:35dom96_iosadoniscik: the latest babel already supports uninstallation of packages
06:29:12*ics joined #nimrod
06:31:05*dom96_ios quit (Quit: dom96_ios)
06:46:07*Demos_ quit (Read error: Connection reset by peer)
07:08:02*zematis joined #nimrod
07:13:25*io2 joined #nimrod
07:27:17*adoniscik joined #nimrod
07:29:49*io2 quit (Ping timeout: 240 seconds)
07:37:37*io2 joined #nimrod
07:40:03*adoniscik quit (Ping timeout: 240 seconds)
07:41:49*io2 quit (Ping timeout: 240 seconds)
07:48:08*ics quit (Quit: My MacBook Pro has gone to sleep. ZZZzzz…)
08:15:52*BitPuffin joined #nimrod
08:20:48*zematis quit (Ping timeout: 260 seconds)
08:21:52*kunev joined #nimrod
08:23:20*zematis joined #nimrod
08:34:44*io2 joined #nimrod
08:36:38Araqhi zematis welcome
08:37:08*zematis quit (Ping timeout: 240 seconds)
08:38:39*Skrylar joined #nimrod
08:38:45dom96hey Araq
08:38:53Araqhi
08:38:55dom96so what should I call this 'checkForExceptions' proc?
08:39:56*kunev quit (Quit: leaving)
08:40:08AraqhandleErrors()
08:40:24AraqpassErrors()
08:40:31*kunev joined #nimrod
08:40:37Araqcheck()
08:40:51Araqhow does the implementation look like again?
08:43:48dom96fut.callback = proc () = if fut.failed: raise fut.error
08:44:35Araqso it *sets* a callback?
08:45:00Araqand how do you know it's not set already?
08:45:29Araqwhy isn't that the default callback implementation?
08:45:55dom96because the user makes a conscious decision to use this proc?
08:46:04dom96it doesn't make sense to use if the callback is set
08:46:19Araqwell yes
08:46:28dom96I just read about how C# handles exceptions with async
08:46:34Araqgood
08:46:47dom96It's quite interesting; they have a special async proc which returns a 'void'
08:46:54dom96and in that case the exception is simply thrown
08:47:00dom96because there is no Task object
08:47:04dom96to capture it
08:47:07dom96Perhaps we should do the same.
08:47:16Araqyes.
08:47:28Araqin general this C# stuff is very well designed
08:47:31dom96However, that creates a gotcha.
08:48:13dom96and you will be expected to write PFuture[void]
08:48:15dom96explicitly
08:49:10dom96http://msdn.microsoft.com/en-us/magazine/jj991977.aspx
08:54:15Araqbah
08:54:21Araqthat's pretty complex
08:54:23*Boscop quit (Quit: Boscop)
08:54:45Araqwhy is this callback not the default for PFuture[void]?
08:56:43dom96Yeah, I don't think I can even implement it this way.
08:56:59dom96The PFuture is pretty important
08:58:00dom96Araq: I tried that.
08:58:05dom96It caused some bad issues.
08:58:36dom96The problem is that if the async proc returns immediately.
08:58:39dom96With an exception
08:58:49dom96like for example
08:59:01dom96proc foo {.async.} = raise newException(EBase, "foo")
08:59:14dom96var fut = foo()
08:59:30dom96fut.callback = proc () = #my own handler
08:59:43dom96The exception will be raised before I can set my own callback.
09:00:08AraqI see
09:01:18AraqraiseOnCompletion(fut)
09:01:30Araqshould be the proc's name then, I think
09:01:38dom96it's way too long
09:01:42Araqwhy?
09:01:52Araqit only covers some edge case
09:01:53dom96Because there will be many cases where this will need to be called
09:02:05Araqthat's bad
09:02:09Araqare you sure?
09:02:17Araqit mostly effects void futures
09:02:38dom96it also affects async procs which I do not want to await.
09:03:10Araqin any case, it doesn't handle exceptions, it sets a handler
09:03:16Araqthe name needs to reflect that
09:03:29dom96perhaps something like 'run' or 'async' would be better
09:04:16Araqasync procs that you don't want to await? when does that happen?
09:05:06dom96well I suppose it does only happen with void futures
09:05:10dom96but it happens often enough I think
09:06:08dom96IMO it's too ugly to even use once
09:06:38AraqsetChecker()
09:06:56dom96asyncCheck?
09:07:08Araqmeh, ok
09:07:12dom96runAsync?
09:07:25Araqtoo confusing
09:07:35AraqasyncError()
09:08:13Araqwe already have osError() ... and that does something different ...
09:08:29dom96I suppose it makes sense
09:08:37dom96they both will raise exceptions
09:08:52AraqasyncRaise() ?
09:09:09dom96yeah
09:09:12dom96I think that's the best
09:09:30Araqit doesn't imply a check though
09:10:15AraqI think asyncCheck is better
09:11:08*error424 joined #nimrod
09:11:46dom96fine asyncCheck
09:11:48dom96hi error424
09:12:08error424Hello!
09:13:59Araqyeah asyncCheck is good
09:14:02*error_424 joined #nimrod
09:14:09*error424 quit (Client Quit)
09:14:23error_424Trying out hexchat
09:20:17NimBotAraq/Nimrod devel 374706b Dominik Picheta [+0 ±3 -0]: Void futures are no longer discardable.
09:20:36dom96Araq: It's actually not as much as I thought.
09:20:39dom96You were right :P
09:24:10Araqha, you say that as if it's news :P
09:25:40dom96Let's see if I can nimforum running on this new tech
09:25:43dom96*can get
09:29:34*gsingh93_ quit (Quit: Connection closed for inactivity)
09:31:11*BitPuffin quit (Ping timeout: 264 seconds)
09:39:05fowlneeded this to define classes for python, template offsetof(ty,field): int = cast[TAddress](addr cast[ptr ty](0).field)
09:39:27Araqfowl: yeah we need an offsetof builtin
09:40:42dom96well, that was easy
09:41:05Araq"well, that was easy" -- new slogan for nimrod? ;-)
09:41:20dom96lol
09:41:32dom96Why not
09:42:31*BitPuffin joined #nimrod
09:43:33*vendethiel- joined #nimrod
09:43:45*vendethiel quit (Ping timeout: 256 seconds)
09:46:05NimBotnimrod-code/nimforum new_async fbd8f05 Dominik Picheta [+1 ±3 -0]: Fixes for new_async version of Jester.
09:46:55NimBotdom96/jester new-async 4c94ef9 Dominik Picheta [+0 ±1 -0]: Minor macro and async additions.
09:48:27*Ven joined #nimrod
09:57:19dom96Araq: http://forum.nimrod-lang.org:8080/
10:03:06dom96Please test it guys.
10:03:14dom96You can treat it as a sandbox
10:04:47error_424looks like a working forums to me
10:07:33*kunev quit (Remote host closed the connection)
10:09:57*Matthias247 joined #nimrod
10:11:10*delian66 joined #nimrod
10:12:39*EXetoC joined #nimrod
10:18:44dom96error_424: good good
10:19:36*error_424 quit (Quit: Leaving)
10:45:31*lorxu quit (Ping timeout: 256 seconds)
10:47:59*Ven quit (Quit: My MacBook has gone to sleep. ZZZzzz…)
11:06:18*Ven joined #nimrod
11:30:13*q66 joined #nimrod
11:35:47*Ven quit (Quit: My MacBook has gone to sleep. ZZZzzz…)
11:45:22*Boscop joined #nimrod
11:45:38*Ven joined #nimrod
12:08:28*ARCADIVS quit (Quit: WeeChat 0.4.3)
12:14:34*Ven quit (Quit: My MacBook has gone to sleep. ZZZzzz…)
12:16:56*delian66 quit (Ping timeout: 260 seconds)
12:31:18*untitaker quit (Ping timeout: 240 seconds)
12:36:50*untitaker joined #nimrod
12:54:33*BitPuffin quit (Ping timeout: 240 seconds)
13:01:42*darkf quit (Quit: Leaving)
13:40:19*BitPuffin joined #nimrod
14:03:18*BitPuffin quit (Ping timeout: 240 seconds)
14:06:03*Jehan_ joined #nimrod
14:21:49*flaviu joined #nimrod
14:39:14*BitPuffin joined #nimrod
14:49:52*Matthias247 quit (Read error: Connection reset by peer)
14:54:18*BitPuffin quit (Ping timeout: 240 seconds)
15:04:56*bjz quit (Ping timeout: 260 seconds)
15:07:13*bjz joined #nimrod
15:10:57*ics joined #nimrod
15:11:22*BitPuffin joined #nimrod
15:18:13OrionPKmorning
15:18:34dom96hello OrionPK
15:23:35*xenagi joined #nimrod
15:24:04*BitPuffin quit (Ping timeout: 260 seconds)
15:29:35dom96OrionPK: I converted nimforum to the new async stuff and it works well
15:29:50dom96Just need to fix one small thing
15:47:29flaviuHuh, it seems that a regex was messing everything up completely
15:47:59flaviuI have no idea why or how, it was very specific. Oh well, the workaround is pretty easy
15:50:51*BitPuffin joined #nimrod
16:12:20*vendethiel- is now known as vendethiel
16:18:02*Puffin joined #nimrod
16:20:01*Demos joined #nimrod
16:21:03*BitPuffin quit (Ping timeout: 240 seconds)
16:38:13OrionPKdom96 cool
16:38:19OrionPKdom96 using an nginx proxy?
16:44:59*Varriount_ quit (Ping timeout: 264 seconds)
16:49:09*Varriount joined #nimrod
17:01:20*xenagi quit (Quit: Leaving)
17:18:05dom96OrionPK: nope
17:20:15*bjz quit (Quit: My MacBook Pro has gone to sleep. ZZZzzz…)
17:23:40*Jesin joined #nimrod
17:40:08OrionPKscgi?
17:41:38*bjz joined #nimrod
17:42:06dom96OrionPK: no
17:53:54OrionPKdont hold me in suspense
17:54:58dom96OrionPK: Just asynchttpserver on its own
18:02:02*kunev joined #nimrod
18:04:53*Johz joined #nimrod
18:12:07OrionPKoh cool
18:15:40*Jehan_ quit (Quit: Leaving)
18:21:51*Matthias247 joined #nimrod
18:31:31*Jehan_ joined #nimrod
18:41:01*io2 quit (Ping timeout: 240 seconds)
18:43:13*Ven joined #nimrod
18:48:29*lorxu joined #nimrod
19:03:52*zematis joined #nimrod
19:05:42*io2 joined #nimrod
19:05:50*io2 quit (Changing host)
19:05:50*io2 joined #nimrod
19:07:03*gsingh93_ joined #nimrod
19:07:59*BlameStross quit (Quit: BlameStross)
19:34:35*bjz quit (Quit: My MacBook Pro has gone to sleep. ZZZzzz…)
19:54:42Araqdom96: can I merge new_spawn into devel?
19:55:00dom96yeah, I guess
19:55:08Araqtested async with it?
19:57:52*gsingh93_ quit ()
19:58:11*gsingh93 joined #nimrod
19:58:38dom96not yet
19:58:53Araqwell then I can't merge
20:01:56dom96well i'm pretty sure it compiles
20:02:01dom96I just haven't tested it extensively
20:02:54EXetoCship
20:03:40dom96Araq: Are pure enums in the stdlib frowned upon by you?
20:04:49Araqdom96: not anymore
20:05:32AraqEXetoC: lol
20:08:03*bjz joined #nimrod
20:19:57*bjz quit (Read error: Connection reset by peer)
20:20:17*bjz joined #nimrod
20:43:25*kunev quit (Ping timeout: 240 seconds)
20:51:54*xenagi joined #nimrod
20:57:58*lorxu quit (Ping timeout: 240 seconds)
21:27:52*vendethiel quit (Read error: Connection reset by peer)
21:30:11*vendethiel joined #nimrod
21:30:55*vendethiel quit (Read error: Connection reset by peer)
21:33:11NimBotAraq/Nimrod devel cdcdab4 Dominik Picheta [+0 ±5 -0]: Fix broken async tests.
21:33:11NimBotAraq/Nimrod devel ac8ddb0 Dominik Picheta [+0 ±4 -0]: Implement safe flags for socket operations.
21:34:23dom96Hopefully http://forum.nimrod-lang.org:8080/ will now stay alive
21:34:24*vendethiel joined #nimrod
21:34:35flaviuI'm looking for some application of non-zero indexed arrays
21:37:46Jehan_flaviu: Matrices?
21:37:54EXetoCreally?
21:38:30EXetoCa tilemap maybe, with negative coords
21:38:34flaviuOk, thanks, that's perfect
21:38:42Araq1:0 !
21:38:47AraqWORLD CHAMPION!
21:38:52*io2 quit (Quit: ...take irc away, what are you? genius, billionaire, playboy, philanthropist)
21:38:57Araq:DD
21:39:12Jehan_EXetoC: In mathematics, vector/matrix indexing starts at 1 by convention.
21:40:04Araqflaviu: lookup tables in general, when the index type is an enum
21:40:25Araqarray [foo..bar, string] = ["foo", "...", "bar"]
21:41:03flaviuI doubt people will make the connection, so I'll do both, thanks
21:41:06Jehan_That's why in Fortran arrays start at 1 by default.
21:44:05NimBotAraq/Nimrod devel 2158952 Dominik Picheta [+0 ±1 -0]: Linux async fixes.
21:47:40*io2 joined #nimrod
21:55:01*Johz quit (Ping timeout: 240 seconds)
21:56:57flaviuIs there a way to pass an integer in type parameters?
21:57:02flaviuIE, https://gist.github.com/773f1c607db1c9048c69
21:57:18def-flaviu: W, H: static[int]?
21:57:37flaviuFor a type declaration.
21:58:02def-flaviu: i did something similar and it worked: http://rosettacode.org/wiki/Matrix_multiplication#Nimrod
21:58:22flaviuOh, I thought that static only works on params. Thanks
22:14:49*tinAndi joined #nimrod
22:22:38Araqwir sind weltmeister! who wants to congratulate...?
22:23:11Jehan_Araq: I hope the fireworks end soon so that I can go to bed. :)
22:25:52Araqpfff
22:26:12tinAndi:) 1:0 the fireworks are no problem the cars are really anoying ;)
22:27:52AraqI hear neither here
22:30:25*Ven quit (Quit: My MacBook has gone to sleep. ZZZzzz…)
22:30:45tinAndiso you should visit Kusel :)
22:37:13Araqlol no way
22:37:37AraqI've been there
22:43:27*darkf joined #nimrod
22:44:38tinAndinaja, so langweilig ist es hier auch nicht (okay, schon etwas) ;)
22:46:53*io2 quit (Quit: ...take irc away, what are you? genius, billionaire, playboy, philanthropist)
22:55:46*tinAndi quit (Quit: ChatZilla 0.9.90.1 [Firefox 30.0/20140605174243])
22:58:13Araqgood night
23:03:15*bjz quit (Quit: My MacBook Pro has gone to sleep. ZZZzzz…)
23:12:33flaviudom96: I just remembered the answer to you question on why I wanted Java-style arrays: There would be no copying unless I specified it.
23:17:44*Puffin quit (Ping timeout: 260 seconds)
23:17:44*bjz joined #nimrod
23:25:20*Jehan_ quit (Quit: Leaving)
23:36:11*girvo joined #nimrod
23:36:13girvohi all
23:36:17def-hi girvo
23:36:37girvoQuick question, trying to compile on OSX is giving me an error when doing `bin/nimrod c koch` :(
23:36:38girvohttp://cl.ly/image/2f153d2u3G3f
23:36:48girvoAm I missing some deps or something?
23:36:52def-are you on the devel branch?
23:37:08def-i think the master branch doesn't compile right now because the c-sources are only for the devel branch
23:37:25girvooh right!
23:37:26def-Oh yeah, it says you're on master
23:37:37girvoMight want to update the Download page perhaps :)
23:37:43girvo(or if it's just temporary, no great stress)
23:38:03*bjz quit (Ping timeout: 240 seconds)
23:38:17girvobrilliant, built perfectly
23:38:18girvocheers
23:41:25flaviuCan someone look at http://nimrod-by-example.github.io/seqs/ ? It's way too short, I think I've missed something.
23:41:52*bjz joined #nimrod
23:42:33def-flaviu: var emptySeq = initSeq[int]() ?
23:43:04def-newSeq*
23:43:15girvodo I need to symlink the bin/nimrod binary myself after compiling?
23:43:17def-and maybe something with low, high, len?
23:44:10def-girvo: i added Nimrod's bin to my $PATH, but koch install [dir] can also be used to install into some directory
23:44:16flaviudef-: Thanks, I forgot about those
23:44:17girvosweet
23:44:33def-flaviu: &, add
23:45:20girvothanks def- :)
23:45:29def-you're welcome, girvo
23:47:31def-flaviu: talking about "nimrod by example", I have a lot of Nimrod examples here: https://github.com/def-/nimrod-unsorted
23:48:35def-oh, and to create seqs i also like sequtils' toSeq(1..100)
23:49:01flaviuNice, I might use a few. Is the license MIT or BSD?
23:49:08def-license?^^
23:49:16def-i don't really care, do what you want
23:49:38flaviuOk, thanks
23:51:16flaviuAraq really should add strfmt to the stdlib, its amazing
23:51:20def-yes
23:51:28def-I used it for way too many of the examples
23:52:04def-(I think you shouldn't use external libraries for Rosetta Code)
23:58:29girvohttp://www.wtfpl.net/ that license? :P
23:59:00def-Yeah, that's the spirit