17:46 < Not-002> [BraLa] Dav1dde 7b50c96 - lock already acquired 17:46 < Not-002> [BraLa] Dav1dde 152f9ac - set default tessellation threads to 1 17:46 < Not-002> [BraLa] Dav1dde 848ee4a - remove "block cache" in Physics.move 17:46 < Not-002> [BraLa] Dav1dde d8e7207 - remove POST_BUILD_CMD from makefile 17:46 < Not-002> [BraLa] Dav1dde 32cd5cc - cleanup makefile some more 17:46 < Not-002> [BraLa] Dav1dde 25923ab - replace PATH_SEP with / in makefile (no windows support anyways) 17:46 < Not-002> [BraLa] Dav1dde ffb882b - more makefile cleanup/fixes 17:46 < Not-002> [BraLa] Dav1dde 9cc83d8 - remove _ from utils.thread 17:46 < Not-002> [BraLa] Dav1dde 62166d4 - remove "tess_out" queue 17:46 < Not-002> [BraLa] Dav1dde da4f990 - ThreadedConnection is not threadsafe anylonger 17:46 < Not-002> [BraLa] Dav1dde 1e65c97 - added lockfree ringbuffer 17:46 < Not-002> [BraLa] Dav1dde fc825b6 - use ringbuffer for packets 17:46 < iBotPeaches> :o 17:46 < Not-002> [BraLa] Dav1dde d43695b - add RingBuffer memory to GC 17:46 < Not-002> [BraLa] Dav1dde c045178 - return default if chunk is empty 17:47 < Not-002> [BraLa] Dav1dde b22aa5c - add note to ringbuffer initialization 17:47 < Not-002> [BraLa] Dav1dde a5e0951 - less locks = more win! replace queue with lockfree ringbuffer, limited to one tessellation thread 17:47 < Not-002> [BraLa] Dav1dde c1838c4 - scope(exit) -> scope(success) 17:47 < Not-002> [BraLa] Dav1dde bdf5a13 - lower camera offset .5 17:47 < dexter0> dat commit spam 17:47 < Not-002> [BraLa] Dav1dde 29b5f9d - add sneak/jump keys to config/player (not implemented) 17:47 < dav1d> what else should you do without internet :( 17:47 < dexter0> consolidate your commits :P 17:48 < dav1d> couldn't even watch one episode of dexter! :( 17:48 < dexter0> what happened? 17:48 < dexter0> storm? 17:48 < dav1d> no 17:48 < dexter0> ISP incompetence? 17:48 < dav1d> plugging in/out the antenna cable solved it 17:48 < dav1d> -.- 17:48 < dav1d> I had to call the support to do this... 17:49 < dav1d> I checked if it was connected (it was) but never unplugged it 17:50 <+clonejo> dav1d: nice job 17:50 < dav1d> clonejo: thanks :> 17:50 <+clonejo> dav1d: but it still fails at linking for me 17:50 < dav1d> only 135 mails, yay 17:51 < dav1d> clonejo: -_- 17:51 < dav1d> really? 17:51 < dav1d> clonejo: what error? 17:51 <+clonejo> dav1d: https://gist.github.com/clonejo/4c03d381e917868097ec 17:51 < dav1d> also, lockfree queue! 17:51 < dav1d> BraLa is now 99% lockfree :> 17:51 < dav1d> strange thing was 17:52 < dav1d> I got random lagspikes, up to 700ms 17:52 < dav1d> and more 17:52 <+clonejo> wait, do I have to install glwf manually? 17:52 < dav1d> tracked it down, it was mutex.lock 17:52 <+clonejo> hehe 17:52 < dav1d> clonejo: glfw or glwtf? 17:52 <+clonejo> glfw 17:52 < dav1d> clonejo: make glfw 17:52 <+clonejo> okay 17:52 < dav1d> clonejo: use the makefile luke :> 17:52 <+clonejo> I did just do make -j9 17:52 < dav1d> but it should work with the build_brala.d too 17:52 < dav1d> clonejo: that should work too 17:52 < dav1d> clonejo: you have the submodules? 17:53 < dav1d> (and linux right?) 17:53 <+clonejo> yup 17:53 <+clonejo> btw glwf is in arch/community (version 3.0.1-2) 17:53 < dav1d> ok, I just cloned a new copy 17:53 < dav1d> I know, but I ship it for a reason with glfw 17:53 < dav1d> wait community :O 17:54 < dav1d> I think I maintained the AUR 17:54 < dav1d> oh nvm, I didn't 17:54 < dav1d> clonejo: fresh git clone works for me 17:54 < Calinou> >maintained >AUR 17:55 <+clonejo> dav1d: https://gist.github.com/clonejo/83b47589d1cf923cbd97 17:55 < dav1d> ohh 17:55 < dav1d> clonejo: you have pkg-config installed? 17:55 < dav1d> (I was aussuming everyone has pkg-config...) 17:56 < dav1d> which pkg-config 1 ↵ 17:56 < dav1d> /usr/bin/pkg-config 17:56 <+clonejo> dav1d: now I have it 17:56 < dav1d> interesting :O 17:56 < dav1d> I thought pkg-config is installed everywhere 17:57 <+clonejo> this is arch 17:57 < dav1d> I know 17:57 < dav1d> I have it, my laptop has it 17:57 <+clonejo> :3 17:57 < dav1d> and my laptop has nothing 17:57 < dav1d> pacman -Q pkg-config 17:57 < dav1d> core/pkg-config 0.28-1 (base-devel) 17:57 < dav1d> ... 17:57 < dav1d> You didn't install base-devel, pfft 17:57 <+clonejo> um, possible 17:57 < dav1d> good old times where arch had a setup... 17:58 <+clonejo> I reinstalled recently 17:58 < dav1d> gcc is in base-devel :O 17:58 <+clonejo> because one day I had the idea of installing / on btrfs 17:58 < dav1d> I really recommend base-devel :> 17:59 < dav1d> good old times, where btrfs was considered a risk for your data 17:59 < dav1d> :> 17:59 < dav1d> xfs and ext3 times 17:59 < dav1d> clonejo: https://www.archlinux.org/groups/x86_64/base-devel/ 17:59 < dav1d> you really should get that :> 17:59 <+clonejo> I just did 18:01 <+clonejo> dav1d: Which minecraft version does Brala support? 18:03 < dav1d> clonejo: 1.6.2 18:03 < dav1d> clonejo: 1.6.1+ is required 18:06 <+clonejo> okay 18:06 < dav1d> did I not update the readme?, again 18:06 < dav1d> phew, I did 18:06 < dav1d> clonejo: well 1.6.2 server is even required 18:08 <+clonejo> oh, I overlooked it 18:11 <+clonejo> cool, collision detection 18:12 <+clonejo> also, great camera 18:14 <+clonejo> btw I can safely tab in and out of Brala (but using Mate instead of XFCE) 18:14 < dav1d> clonejo: yeah glfw bug :) 18:14 < dav1d> I redirected your complain to dreda (glfw maintainer) 18:14 < dav1d> glad you like the camera :) 18:15 < dav1d> also collision detection :D 18:15 < dav1d> took me quite some paper to figure that out 18:20 < winny> is there a better tested way to change a server's default spawn than e.g. editing the NBT file with something like this?: http://sprunge.us/GSVN?py 18:20 <+sadimusi> nope 18:23 <+sadimusi> winny: why "better tested"? 18:23 <+sadimusi> nbt editors work perfectly... 18:24 < winny> yes they do, however for people who don't quite understand such simple things, it's another thing to learn 18:25 < winny> server admins* I should write 18:25 <+sadimusi> well, I'm sure there a lot of bukkit plugins which are capable of it 18:26 <+sadimusi> and mcedit might also be a more intuitive method 18:26 < dav1d> there are a few nice tools for editing nbt data 18:26 < dav1d> I like mcplayeredit, well liked, 18:27 < dav1d> nvm, looks kinda dead now :( 19:17 < barneygale> winny: use tktech's nbt lib 19:18 < TkTech> winny: https://github.com/TkTech/PyNBT 19:33 < Jckf> Hum. Why is Bukkit and Canary listed as wrappers on the wiki? 19:51 < SpaceManiac> Jckf: probably because they're mods to Minecraft, not separate software 19:52 < Jckf> Which is exactly the opposite of a wrapper 19:52 < Jckf> Or? 19:53 < SpaceManiac> Everything on the server list is ground-up and doesn't touch Mojang's code at all afaik 19:54 < Jckf> Yeah 20:07 < dav1d> clonejo: btw noticed lags while new chunks load? 20:19 <+clonejo> dav1d: Didn't test that so far 20:19 < dav1d> fun fact! less threads = better performance 20:19 < dav1d> damn locks made lagspikes :( 20:21 <+clonejo> locking properly isn't easy 20:24 < dav1d> clonejo: I locked properly :( 20:27 < TkTech> Clearly the solution is to never lock. 20:28 * TkTech is a titanic fan of coroutines. 20:41 < SpaceManiac> I need to study concurrency some more 20:41 < dav1d> TkTech: right, lockfree ringbuffer! 20:42 < TkTech> <3 CAS. Best instruction ever. 20:43 < SpaceManiac> experimenting with a Python-based alternative to ComputerCraft and I doubt threads are going to scale well 20:48 < dav1d> TkTech: not a single cas :O 20:48 < TkTech> dav1d: Wut? 20:48 < dav1d> (tbh I didn't implement it, I always wanted to, but I got a lockfree implementation!) 20:48 < TkTech> dav1d: CAS = Compare And Swap 20:48 < dav1d> TkTech: I know 20:48 < dav1d> TkTech: https://github.com/Dav1dde/BraLa/blob/master/src/d/minilib/core/ringbuffer.d 20:49 < dav1d> well single writer/reader 20:58 < Brott> dav1d: You free? :) 20:58 < dav1d> Brott: kinda? 20:58 < Brott> octc? :p 20:58 < dav1d> oh 20:58 < dav1d> sure 20:58 < Brott> me dino and another guy thats also german 20:58 < dav1d> kk, I come on mumble, sec 21:06 < Brott> You gonna stay in away cahnnel? xD 22:34 <+md_5> dav1d multiple writer + multiple consumer ring buffer please 22:34 <+md_5> http://www.linuxjournal.com/content/lock-free-multi-producer-multi-consumer-queue-ring-buffer 22:34 < AlphaBlend> WAT 22:36 <+md_5> k 22:39 <+pdelvo> In .net we have this already: http://msdn.microsoft.com/en-us/library/dd267265.aspx 22:45 <+md_5> pdelvo those generic queues generally have bad foorprint/performance 22:46 <+pdelvo> why does generic matter? its a compile time thing 23:49 < PlayerWithoutNam> hi 23:49 <+sadimusi> o/ 23:51 < PlayerWithoutNam> what happened to "Updating 1.6" section? 23:51 <+sadimusi> it was moved to the correct page 23:51 <+sadimusi> http://wiki.vg/Game_Files 23:51 < PlayerWithoutNam> ok, thanks --- Day changed jeu. juil. 18 2013 00:20 < PlayerWithoutNam> will that command run 1.6 properly: "java -XX:MaxPermSize=128M -Xms512M -Xmx1024M -cp ".minecraft/bin/minecraft.jar;.minecraft/bin/jinput.jar;.minecraft/bin/lwjgl.jar;.minecraft/bin/lwjgl_util.jar" -Djava.library.path=.minecraft/bin/natives net.minecraft.client.Minecraft nickname sessionID" ? 00:21 <+sadimusi> just try it and you will know 00:21 <+pdelvo> why dont you just try it? 00:41 < dav1d> PlayerWithoutNam: I don't think so 00:41 < PlayerWithoutNam> i found that: "minecraftArguments": "--username ${auth_player_name} --session ${auth_session} --version ${version_name} --gameDir ${game_directory} --assetsDir ${game_assets}" 00:41 < dav1d> PlayerWithoutNam: look into .minecraft/versions/1.6.2/1.6.2.json 00:42 < PlayerWithoutNam> :D 00:42 < dav1d> right 00:42 < PlayerWithoutNam> double or single -? 00:42 < dav1d> double 00:42 < dav1d> you can use the launcher, it prints the exact command how it launches minecraft 00:42 < dav1d> (official 1.6 launcher) 00:43 < PlayerWithoutNam> --session token:accesToken:selectedProfile? 00:43 < dav1d> yes 00:44 < dav1d> just compare the command the 1.6 launcher uses with the launcher_profiles.json if you're not sure 00:44 < dav1d> you will immediatly see how it works 00:44 < dav1d> my code 00:44 < dav1d> return "token:%s:%s".format(authentication["accessToken"], authentication["uuid"]); 00:45 < dav1d> accessToken and uuid 00:45 < dav1d> ^ in the launcher_profiles 00:45 < PlayerWithoutNam> good that they used gameDir, no messing with changing APPDATA variable --- Log closed jeu. juil. 18 01:10:36 2013 --- Log opened jeu. juil. 18 01:16:53 2013 01:16 -!- Irssi: #mcdevs: Total of 116 nicks [1 ops, 0 halfops, 11 voices, 104 normal] 01:18 -!- Irssi: Join to #mcdevs was synced in 100 secs 01:30 < PlayerWithoutNam> any idea about redirecting streams from minecraft process to System.out? i can get from minecraft process error and input stream 01:31 <+sadimusi> in java? 01:31 < PlayerWithoutNam> yup 01:32 <+sadimusi> https://github.com/SimpleServer/SimpleServer/blob/master/src/simpleserver/minecraft/MinecraftWrapper.java#L157 01:32 < PlayerWithoutNam> btw, System.out is already redirected to JTextArea, but that shouldn't cause difficulties 01:34 <+sadimusi> just make a thread read from runtime.getInputStream() and print it out 01:36 < PlayerWithoutNam> is there any way to detect is minecraft still running? 01:37 <+sadimusi> you can use waitFor() 01:38 <+sadimusi> or call exitValue 01:38 <+sadimusi> iirc it throws some kind of exception if the process is still running 01:39 < PlayerWithoutNam> nvm, used p.getInputStream().available() 01:44 < PlayerWithoutNam> cannot use waitFor because i need to print output in the same time :P 01:45 < PlayerWithoutNam> wouldn't waitFor stop the launcher? 01:46 <+sadimusi> do it in a separate thread 02:16 < dav1d> threads all over the place! 02:17 <+sadimusi> it doesn't really matter on the client 02:57 <+sadimusi> finally completed my protocol definition and I managed to do it without any extra ugly types: https://gist.github.com/sadimusi/6025899 02:57 <+sadimusi> only thing I still need to do is replace the dict literalls with OrderedDict 02:59 <+sadimusi> and then actually write all those field types :) 06:08 < gyroninja> What packet is sent when a player blocks. 06:08 < gyroninja> *? 06:15 < gyroninja> Hello? 06:19 < Squiffy> Can anyone help me figure out whats wrong with my packet? 06:22 < Squiffy> The handshake packet to be specific 06:22 <+sadimusi> maybe 06:23 <+sadimusi> how does it look? 06:23 < Squiffy> Well, I got it to send packed 0x02, wait for 0xfd, then send 0xcd 06:24 < Squiffy> but some usernames wont work 06:24 < Squiffy> just a sec 06:24 < Squiffy> I'll get you my packet 06:26 <+sadimusi> you are sending 0xcd right after you receive 0xfd? 06:26 <+sadimusi> that won't work 06:27 < Squiffy> Well, I won't even get a 0xfd with some nicks 06:27 < Squiffy> for example 06:27 < Squiffy> username* 06:27 < Squiffy> this is a working 0x02 packet is for "Squiffypwn" 024a000a005300710075006900660066007900700077006e000c003100390032002e003100360038002e0030002e00320034000063dd 06:28 < Squiffy> for "Squiffypwn"* 06:28 < Squiffy> This one for just "Squiffy" doesn't work 06:28 < Squiffy> 024a000a0053007100750069006600660079000c003100390032002e003100360038002e0030002e00320034000063dd 06:28 <+sadimusi> the length of the username is wrong in the second example 06:29 <+sadimusi> it's still 0x0a (=10) but should be 7 06:29 < Squiffy> Theres a length field? 06:29 < Squiffy> Oh damn. I didn't know that existed 06:29 < Drainedsoul> strings are length-prefixed. Number of UCS-2 code units (as a signed big-endian 16-bit integer) followed by the big-endian UCS-2 code units making up the string. 06:29 < Squiffy> oh 06:30 <+sadimusi> the data types are all descriped in the wiki http://wiki.vg/Data_Types 06:30 < Squiffy> And what was that about the 0xcd packet? I'm not supposed to send 0xcd after 0xfd? 06:32 < gyroninja> What packet is sent when a player blocks? 06:35 < gyroninja> with their sword 06:36 <+sadimusi> gyroninja: probably 0x12 06:36 <+sadimusi> Squiffy: you need to set up encryption first 06:37 < Squiffy> Oh. I thought that was optional 06:37 <+sadimusi> for the server, yes 06:37 <+sadimusi> obviously not for the client 06:42 < gyroninja> hmmm, Don't want to brute force finding the right packet data for blocking. 06:42 < gyroninja> Protocol Lib is kind of broken in giving me the information, as of minecraft changes (Crashes the client). 06:56 < Squiffy> Thank you sadimusi and Drainedsoul 06:56 < Squiffy> I very much appreciate it 13:35 < dav1d> I somehow feel like messing with this Yggsdrasil stuff 13:35 < dav1d> where does this name come from? 13:35 < SinZ> the tree im assuming 13:37 < dav1d> for a login-session api? 13:37 < dav1d> meh 13:45 < ellisvlad> Hi :) 14:03 < eddyb> dav1d: it's supposed to work under the load of 7 times 7 billion players 14:04 < dav1d> LOL 14:04 < dav1d> eddyb: good one 14:04 < eddyb> or 9 times 7, depending on your sources 15:04 < dav1d> xD 15:04 < dav1d> brala.exception.YggdrasilException@brala/minecraft/yggdrasil.d(143): Invalid salt version 15:04 < dav1d> got a new one! 15:05 < dav1d> ah IllegalArgumentException :( 15:08 < dav1d> interesting 15:08 < dav1d> that's coming from Javas bcrypt 15:09 < dav1d> do I need to bcrypt "encode" the password I send over to the api? 15:14 < dav1d> yay it works 15:31 < PlayerWithoutNam> hi 15:40 < iBotPeaches> hi 15:43 < dav1d> TkTech: notifico died :P 15:55 < dav1d> Grum: I have an idea for your unicode/text rendering issues, signed distance fields http://www.valvesoftware.com/publications/2007/SIGGRAPH2007_AlphaTestedMagnification.pdf 15:56 < dav1d> Grum: a friend told me a few days ago of it, I read up on it a bit and sounds like a great solution, you can generate these easily from fonts once, then map your unicode onto the bitmaps 15:57 < dav1d> you have scaleable fonts on low cost with neat effects for free 16:04 < Grum> that wont solve the real problem though 16:05 < Grum> the only way to draw properly is using ttf :/ 16:06 < dav1d> Grum: why? 16:06 < Grum> dav1d: had seen it before (and bookmarked it even :D) 16:06 < Grum> dav1d: because java has no way of obtaining the correct information to draw certain glyphs unless you use ttf 16:06 < dav1d> Grum: you generate the whole range the font supports (offline), then map unicode characters (code points) on these bitmaps and load them when you actually need it 16:07 < Grum> and then said information only works for the ttf used 16:07 < Grum> wont do it 16:07 < dav1d> Grum: you could generate the sdf offline with dunno, C++, whatever 16:07 < Grum> sdf? 16:07 < dav1d> signed distance field 16:07 < dav1d> Grum: using signed distance field, realtime doesn't work 16:07 < Grum> its not that hard to calculate 16:07 < dav1d> it would be too slow 16:07 < Grum> i mean its just a radial blur 16:08 < dav1d> yeah, but I don't understand your problem then 16:08 < Grum> i understand :) 16:08 < Grum> the problem is that with 'glyphs in a file' you cannot render arabic properly for example 16:08 < dav1d> generate them offline (is this the problem?) then, map 256 characters onto one texture (sorted) so you can easily look it up with the unicode codepoint 16:09 < Grum> anything cursive script, digraphs are simply not possible that way 16:09 < Grum> languages that require 'shaping' basically 16:10 < dav1d> Grum: oh, is this a special unicode "instruction"? 16:10 < Grum> no, that is how the language works 16:10 < Grum> for example for arabic, each letter has multiple representations 16:10 < Grum> depending on if its: start, middle, end, or standalone 16:10 < Grum> however the character given is 'standalone' 16:10 < dav1d> Grum: but if the font you use defines them, it will endup in the bitmap? 16:11 < Grum> which is why arabic currently reads a s i f i t i s w r i t t e n l i k e t h i s 16:11 < dav1d> everything else is a matter of translating the unicode codepoint to the right bitmap/position? 16:11 < Grum> yes except that the bitmaps shifts and merge 16:11 < dav1d> I see 16:11 < dav1d> I didn't think it was that hard :/ 16:12 < Grum> http://upload.wikimedia.org/wikipedia/commons/thumb/2/23/Arabic_components_%28letters%29_in_the_word_Allah.svg/240px-Arabic_components_%28letters%29_in_the_word_Allah.svg.png 16:12 < dav1d> well, you could do this with a shader, I guess 16:12 < Grum> that is 7 different characters you have to render 16:12 < Grum> there is no way to obtain information about the locations of 2, 5, 6 without using TTF and its glyph-positioning-code 16:13 < Grum> i've searched all over the place, i cannot find anything that does it 16:13 < Grum> there are some that do digraph replacements 16:13 < Grum> nothing does 'shaping' however 16:13 < Grum> and then you have the image above, i do not even know what it is called :p 16:14 < dav1d> Grum: but a different unicode codepoint exists for every character, so you could generate these characters offline as well? 16:14 < dav1d> hehe 16:14 < Grum> also because that word is that common and imporatnt they actually made a glyph to represent it 16:14 < Grum> dav1d: the bounding boxes matter greatly 16:14 < Grum> and they shift depending on the context 16:14 < dav1d> Grum: yes but that should be rather easy to obtain, I guess? 16:14 < Grum> '6' can be 'one lower' too 16:15 < Grum> not without ttf 16:15 < Grum> it only calculates it based on ttf fonts and then you might as well use ttf to render... i mean ... why make it hard for yourself ;P 16:15 < dav1d> Grum: why is ttf bad, if it is done once, offline? 16:15 < Grum> because we *NEED* the ttf to get the calculation done 16:16 < dav1d> Grum: yes of course, but you can ship the tool with minecraft "java convert.java input.ttf" 16:16 < Grum> what? 16:16 < dav1d> or is your problem you don't have a ttf for the current minecraft font? 16:17 < Grum> i already made that 16:17 < Grum> downside is that its 13mb ;) 16:17 < dav1d> Grum: well then all you need is a tool which generates the correct sdf from a .ttf and a renderer which uses it 16:17 < Grum> and we need one for unicode ... and one for 'non-unicode' 16:17 < dav1d> Grum: the tool can be distributed for resourcepack makers 16:18 < Grum> dav1d: yes, and then we have to ship 26mb of ttf *AND* all the distancefields 16:18 < dav1d> Grum: no need to ship the ttf 16:18 < Grum> then you are still not getting it 16:18 < Grum> there is no way to obtain positioning for glyphs within context WITHOUT the ttf 16:18 < Grum> (or for shaping, even know what glyphs have to be used) 16:19 < dav1d> Grum: you generate these "special" characters (I'll call them special for now, characters which are composed of multiple) offline, all you probably additionally need is a metadata file for width/height of the sdf 16:19 < Grum> you cannot generate them 16:20 < Grum> look at the image i linked 16:20 < dav1d> yes 16:20 < Grum> the '6' -- that part of the glyph can be at multiple levels 16:20 < Grum> it can even be one more up iirc 16:20 < Grum> there is no way to know this without the proper context, this proper context cannot be obtained (as far as i've researched sofar) without actually using the ttf-render-engine in java's awt 16:20 < dav1d> ok, but a different unicode codepoint exists for every variation of the "6"? 16:20 < Grum> no 16:20 < dav1d> ahh 16:20 < dav1d> I see 16:20 < Grum> its one codepoint at a certain offset 16:21 < Grum> like kerning but then up/down 16:21 < dav1d> so it depends on the context, well yeah, that's a problem then 16:23 < dav1d> looks like Harfbuzz is widely used for that http://www.freedesktop.org/wiki/Software/HarfBuzz/ 16:23 < Grum> the only thing that works is Font.layoutGlyphVector 16:23 < Grum> dav1d: yes nothing java 16:23 < dav1d> yeah 16:25 < Grum> mmm 16:25 < Grum> http://behdad.org/text/ claims that ICU has a javaport and does shaping 16:25 < Grum> however i looked at it before, and i actually couldn't find what shaping methods it had O.o 16:27 < Grum> http://icu-project.org/apiref/icu4j/com/ibm/icu/text/ArabicShaping.html <-- it only has it for arabic, iirc more languages need it 16:30 < Grum> mmmm 16:30 < Grum> maybe they can all be handled by the arabic one assuming they have the right data 16:31 < Grum> dav1d: http://docs.oracle.com/javase/tutorial/2d/text/textlayoutconcepts.html#shaping_text <-- the actual issue btw 16:32 < dav1d> I was always under the assumption it doesn't depend on the context 16:32 < dav1d> I guess, I was wrong 16:32 < Grum> yeah i had to learn from this too haha 16:32 < Grum> and its a pain in the ass to find the correct terminology to find the little bit of information available online 16:32 < dav1d> that makes it incredibly complex 16:32 < Grum> yes! however this ArabicShaping will do what i need 16:32 < Grum> it will transform the codepoints 16:33 < Grum> i'm not sure how it handles the 'weird stuff' 16:33 < Grum> maybe it indeed has those merged-codepoint for certain chars 16:33 < Grum> or maybe some chars simply do not advance the cursor 16:33 < Grum> dav1d: the next problem is, bidi & shaping; there are bidi-resolvers -- but i have no idea how to use both at the same time 16:34 < dav1d> Grum: haha wow, I never heared of bidi before 16:34 < Grum> bidi = bidirectional 16:34 < dav1d> I honestly think there is so much to it 16:34 < dav1d> oh derp 16:34 < Grum> the real problem is that bidirectionality again is hard to do 16:34 < Grum> especially if you want to do the cursor stuff right ;) 16:35 < Grum> and allow for inline-direction changes (you ahve two unicode chars for that) 16:35 < Grum> so you can TSUJ be typing 16:35 < Grum> and then the whole layout in the end obviously depends on what your starting-state is; for R2L languages you start 'inverted' -- oh also it changes shaping a bit :p 16:36 < Grum> dav1d: go find me an example that uses shaping =) 16:37 < Grum> http://grepcode.com/file/repository.grepcode.com/java/eclipse.org/3.6/com.ibm/icu/4.2.1/com/ibm/icu/text/ArabicShaping.java#169 <-- i found the class in eclipse code, i assume they somehow use it :p 16:37 < dav1d> wow 16:38 < dav1d> sounds like you invested a lot of time doing it right 16:38 < Grum> i want to do it right, i'm not nearly done, i havent actually implemente dit 16:38 < Grum> i just know i *can* do it using ttf 16:38 < Grum> also using ttf would give quite some other benefits 16:38 < Grum> people can get rid of the horrid current unicode font 16:39 < Grum> which is btw: http://unifoundry.com/ 16:39 < ellisvlad> :D Don;t you love when you code something for ages and don't test it until you are done, then it works flawlessly :D 16:39 < dav1d> Grum: what is the downside of ttf then? 16:40 < Grum> dav1d: the runtime rendering of glyphs 16:40 < dav1d> Grum: yeah well, everything else is getting really impractically in my head, since it depends on the context 16:41 < ShaRose> could split text up into sentences, render with TTF to a texture or something, then render that 16:41 < ShaRose> so that way it only does TTF render once 16:41 < Grum> problem is that we need proper linebreak calculation as well 16:41 < Grum> which you can only do if you know glyph sizes 16:41 < ShaRose> minecraft doesn't resize text very often 16:41 < ShaRose> read: ever 16:41 < Grum> yeah that is why we might get away using ttf 16:41 < ShaRose> when it resizes, it can be recalculated 16:41 < Grum> not really 16:42 < Grum> each glyph has to be put on a texture atlas 16:42 < Grum> dynamically 16:42 < dav1d> yeah caching... 16:42 < Grum> not as much caching, it has to be rasterized + uploaded to the gpu 16:42 < Grum> i mean, we can do it obviously, but it gets painful fast :) 16:43 < Grum> also the only thing i really need to do is writing this glyphatlas/rasterization code 16:43 < Grum> the rest is relatively easy though cumbersome 16:43 < dav1d> Grum: texture atlas, but that won't work? since it depends on the context, you have to process it anyways, so you could only cache the whole "context" at once 16:43 < Grum> dav1d: the offset will be decided but the texture is identical 16:44 < dav1d> mh 16:44 < Grum> so you just render the 'final codepoints' to a texture and then position it where the layout vector tells you 16:44 < Grum> but again in order to get the layout vector you need the ttf :p 16:45 < Grum> how high-res must the distance=field texture be btw? 16:45 < dav1d> Grum: pretty low res 16:45 < dav1d> sec 16:45 < Grum> https://code.google.com/p/libgdx/wiki/DistanceFieldFonts 16:47 < Grum> https://github.com/libgdx/libgdx/blob/master/extensions/gdx-tools/src/com/badlogic/gdx/tools/distancefield/DistanceFieldGenerator.java <-- doesn't seem to be that expensive? :/ 16:48 < dav1d> Grum: he "calculated" (the guy developing octaforge engine, where I got this idea from) that you could put ~300 characters in a 512x512 texture 16:48 < Grum> atlas filling is the thing i worry the least about 16:48 < Grum> but it has to be on the fly 16:48 < dav1d> so what was your question? 16:49 < Grum> i wonder what resolution the final glyph has to be 16:49 < Grum> i mean, if you render a 12em font 16:49 < Grum> does it become ....12+ how many pixels high? 16:49 < dav1d> you have to generate these offline, to get good results you should generate the distance field in a at least 8-times higher resolution and then scale it down 16:49 < Grum> which make no sense, why scale it down 16:50 < Grum> oh hell, i see why it is that expensive 16:50 < Grum> https://github.com/libgdx/libgdx/blob/master/extensions/gdx-tools/src/com/badlogic/gdx/tools/distancefield/DistanceFieldGenerator.java#L181 16:50 < Grum> for every pixel you need to find the 'closest inside pixel' 16:51 < dav1d> q66you rasterize at 8 times larger size than you need, generate distance field and downscale to the final size 16:51 < dav1d> q66otherwise it'll look jagged 16:51 < dav1d> Grum: he played around with it and showed me the differences 16:51 < Grum> q66huh? ;) 16:52 < dav1d> Grum: \t should be there c&p lost it 16:52 < Grum> also doing distancefields without having shaders is extra painful 16:53 < dav1d> Grum: why don't you drop 1.X support? 16:53 < dav1d> basically everyone has 2+ 16:53 < Grum> except 7% of the people 16:53 < dav1d> omg 16:53 < dav1d> really? 16:53 < dav1d> based on snooping? 16:53 < Grum> insta-rage of 770k people; yeah 16:53 < dav1d> wow 16:54 < Grum> we'll do it eventually, not now 16:54 < dav1d> I never thought 7% of all minecraft players 16:54 < dav1d> I mean minecraft itself needs quite a bit of vram 16:54 < Grum> not really 16:54 < dav1d> (if you don't play on super-tiny) 16:54 < Grum> its not 'that' much 16:54 < Grum> 256mb can play it iirc 16:54 < Grum> dont use a high-res pack though ;) 16:54 < dav1d> Grum: I am not very economical with my vram but BraLa needs 500+mb 16:55 < Grum> we could give it a good guess 16:55 < dav1d> (10 chunks renderdistance) 16:55 < Grum> 19*19*16 chunks 16:55 < Grum> (of 16*3) 16:56 < dav1d> ok, I test in a jungle 16:56 < Grum> each has 17*3 vertices at worst case 16:56 < Grum> err ^3 16:56 < dav1d> worst case is everything leaves 16:56 < dav1d> (actually stairs) 16:56 < dav1d> 6*8 vertices per block? 16:57 < Grum> euuh that seems too much? 16:57 < dav1d> Grum: oh you use GL_QUADS? 16:57 < dav1d> nvm, I suck at math 16:57 < dav1d> a cube haas 6 not 8 sides 16:57 < Grum> wouldnt you need 6*6 vertices to render a cube? 16:57 < dav1d> each cube consists of 6 vertices 16:58 < dav1d> Grum: right 16:58 < Grum> and of those there are only 8 unique vertices 16:58 < dav1d> 36*40byte (40byte is my vertex size) 16:58 < Grum> * 19*19*256*16*16 :p 16:58 < dav1d> Grum: depending on your GL_QUAD/TRIANGLES(_STRIP) you have to pass all of these 16:59 < dav1d> and I am using GL_TRIANGLES without an indices buffer (complicates things, imo) 16:59 < Grum> that seems a bit much ;) 16:59 < Grum> anyhow, over 80% of the world is empty 16:59 < dav1d> haha yeah, try to generate a superflat with 200 layers of leaves on a 10 chunks renderdistance :) 17:00 < Grum> hehe i'm afraid now ;) 17:00 < dav1d> vram swapped into ram (I have 8GiB) which almost began to fill my swap 17:00 < Grum> my math went of the scale O.o 17:00 < dav1d> but I had extremly good performance 17:00 < dav1d> like 10 fps 17:00 < dav1d> never expected that 17:00 < Grum> beats spf 17:01 < dav1d> ^ unicode joke? 17:01 < Grum> should have used instancing!~ 17:01 < Grum> (seconds per frame ;D) 17:01 < dav1d> oh :> 17:01 < dav1d> indexbuffers don't have a huge benefit in normally generated minecraft worlds 17:01 < Grum> they do 17:01 < dav1d> often only two or one face are visible 17:02 < Grum> however within a chunk section there are TONS of identical vertices 17:02 < dav1d> of course you save a bit vram, doesn't speed up the rendering a lot (at leaast shouldn't) but complicates your code 17:02 < Grum> also, if you use index-buffers you have way less 'pixel shining through my stupid world' 17:03 < Grum> dav1d: perhaps true 17:03 < Grum> it is almost tempting to just upload all the vertices and just have a very limited indexbuffer :P 17:03 < Grum> that way the indices are always on 'known places' :P 17:03 < dav1d> I am glad I didn't go that route, implementing these blocks with index buffers would have been quite some more work 17:04 < dav1d> maybe it's enough to do it per face 17:04 < dav1d> that wouldn't be a huge act to implement 17:05 < Grum> anyhow, i still need to fix font rendering somehow 17:05 < Grum> not sure how to do it properly 17:05 < Grum> easiest is with a fixed-size-glyph atlas 17:06 < Grum> but not sure how to easily handle 'different fontsizes' 17:06 < dav1d> ^ probably my soloution 17:06 < Grum> on the other hand, its mc, ugle-pixelated-scaler ftw 17:06 < Grum> *ugly 17:06 < Grum> another thing i have no idea about is how big i need to even make the glyph-images to fit for example a 12pixel font =) 17:07 < dav1d> or you limit minecraft to ASCII :> 17:07 < Grum> also, sofar it seems that java has no 'fallback' fonts support that you can set programetically :( 17:07 < Grum> the normal ascii range is just 9kb of font :) 17:07 < Grum> but because you might get the odd 'non-ascii' char; you need to merge that with the unicode table, making it a whopping 13mb 17:08 < dav1d> is proper unicode something highly requested? 17:08 < Calinou> >whopping 17:08 < Grum> oh twice obviously O.o 17:08 < Grum> dav1d: yes 17:08 < Calinou> dav1d: there already is? 17:08 < Calinou> you can input a lot of chars already 17:08 < Calinou> Grum: also, FFS, PLEASE make french not use unicode chars. 17:08 < Grum> Calinou: impossible 17:08 < dav1d> Calinou: pls 17:08 < Calinou> why? 17:08 < Calinou> spanish does that 17:08 < Calinou> ç, é, à, and that are all in standard non-unicode chars 17:08 < Grum> they are on the wrong positions 17:08 < dav1d> isn't french part of latin-1 17:08 < Grum> when we start using ttf they cannto be there 17:09 < Grum> yes french is, the translations however use unicode codepoints 17:09 < Calinou> spanish doesn't, why 17:09 < Grum> anything >128 == unicode iirc 17:09 < dav1d> (I could never play minecraft in a different language than english) 17:09 < Grum> erm >256 17:09 < Grum> dav1d: me neither; allergic to that 17:09 < dav1d> I tried it once in german, it was horrible 17:09 < barneygale> What's the issue with using unicode over latin-1? 17:09 < Calinou> I play it in english because unicode font sucks 17:09 < barneygale> also what's wrong with the existing unicode setup? 17:10 < Grum> Calinou: then fix the unicode font! 17:10 < dav1d> :D 17:10 < barneygale> oh right, it's a whole different style 17:10 < Grum> yup 17:10 < Grum> Calinou: or the translations 17:10 < Grum> you can do both! 17:11 < Grum> anyhow, sofar i just did the 'glyphs that match position' for the ascii font 17:11 < Calinou> how would one fix the translations? 17:11 < Grum> which is more than good enough 17:11 < Grum> Calinou: resourcepack? 17:11 < dav1d> maybe libharfbuzz is not that bad of an option (not java ofc) 2,8M libharfbuzz.so.0.919.0 17:11 < Grum> dav1d: yeah ... not java ;) 17:12 < dav1d> Grum: SWIG! 17:12 < dav1d> (jk) 17:12 < Grum> anyhow there are quite some downsides ;( 17:12 < Grum> to whatever we do 17:12 < Grum> right now the rendering is fucked up 17:13 < Grum> with ttf we need to ship 26mb of fonts 17:13 < Grum> so le meh! 17:13 < Grum> 26mb is like half of our assetssize >.> 17:13 < dav1d> Grum: you always need to? 17:14 < Grum> ? 17:14 < dav1d> Grum: well of course you can use the systemfont? 17:14 < Grum> yeaaah no 17:14 < Grum> that would enrage so many people 17:14 < dav1d> Grum: let's say you can offline generate it, this will also end up as at least 10+MB 17:14 < Grum> yeah 17:14 < dav1d> (10MB guess) 17:14 < Grum> shouldnt be that big 17:15 < Grum> its greyscale 17:15 < Grum> so byte per pixel 17:15 < dav1d> and I personally think +26MB isn't that big of a deal 17:15 < Grum> seems we need 32x32 glyphs 17:15 < dav1d> L4D2 takes up 12GB 17:15 < Grum> if we could do font-fallback .... 17:15 < dav1d> vs. max 100MB minecraft 17:15 < barneygale> obviously there's compression and whatnot too 17:15 < Grum> ttf compresses like dick 17:16 < dav1d> ^ not a problem, who doesn't download 30MB in < 5 Minutes? 17:16 <+ammar2> dicks compress pretty well man 17:16 < Grum> dav1d: oh yeah its not that much of an issue 17:16 < dav1d> ammar2: not in the morning 17:16 < Grum> but it would be 9kb+13mb if we had fallback support 17:16 < Grum> which we *could* have 17:17 < Grum> but only if we ship an embedded JRE 17:17 < dav1d> Grum: fallback would be the original minecraft ttf? 17:17 < Grum> because the nwe can put the files in the right place >.> 17:17 < dav1d> oh 17:17 < dav1d> java.awt? 17:17 < Grum> dav1d: no, that would be the 'ascii ttf' over 'the unicode ttf' 17:17 < dav1d> ah 17:17 < Grum> the ascii-ttf is 9kb 17:17 < Grum> with just the ascii-chars that mapped properly onto the unicode ones 17:18 < Grum> the unicode one is 13mb :/ 17:18 < dav1d> funny how 50% of the world can live with ~15kb of fonts and the other half needs 28MB :> 17:18 < Grum> yeah >.> 17:21 < dav1d> TIL fuck unicode 17:21 < Grum> ooh not too bad 17:21 < Grum> -rw-r--r-- 1 erikbroes staff 104644311 Jun 27 19:56 unifont-5.1.20080907.simplified.sfd 17:21 < Grum> -rw-r--r-- 1 erikbroes staff 2191896 Jun 27 19:58 unifont-5.1.20080907.simplified.ttf.bz2 17:22 < Grum> oh wait 17:22 < Grum> nevermind; wrong one >.> 17:22 < Grum> -rw-r--r-- 1 erikbroes staff 13543988 Jun 27 19:58 unifont-5.1.20080907.simplified.ttf 17:22 < Grum> hmm not too horrid; we can ship it as a library =) 17:22 < Grum> and have our launcher unpack it =) 17:24 < dav1d> man I really thought it would be fun and relativly easy to implement with SFDs 17:24 < dav1d> and all the horrible code would be hidden in freetype 17:27 < Grum> well awt has all the code inside itself :p 17:57 < Thinkofdeath> Just updated and cleaned up the http://wiki.vg/Entities page. I still need to readd some of details from the old page 19:17 < Not-001> [fCraft] fragmer * r2070 2 files : Finally converting /Gen command to use the new MapGeneration infrastructure. Also offloaded generation from the player thread to a background scheduler task, while I was at it. 20:57 < GingerGeek> I has a problem 20:57 < GingerGeek> A program I am using called McSignOnDoor 20:58 < GingerGeek> needs to be updated with latest protocol 20:58 < GingerGeek> in the properties file it is has several option 20:59 < GingerGeek> handlers.2.protocols.min 20:59 < GingerGeek> handlers.2.protocols.max 20:59 < GingerGeek> handlers.2.hanshake 20:59 < GingerGeek> *handlers.2.handshake 20:59 < GingerGeek> handlers.2.disconnect 20:59 < GingerGeek> handlers.2.motd 20:59 < GingerGeek> handlers.2.encryption 21:00 < GingerGeek> What should they be set to? 21:00 < GingerGeek> handshake disconnect motd and encrypt are 0 or 1 21:00 < GingerGeek> but the protocls I am stuck on 21:00 < iBotPeaches> GingerGeek: http://wiki.vg/Protocol 21:01 < GingerGeek> Ive looked 21:01 < GingerGeek> Ive been directed to the Handshake 21:01 < GingerGeek> but it says protocl version 3 21:01 < GingerGeek> and then *73 21:01 < GingerGeek> but no min and max 21:02 < umby24> what does this program do? 21:02 < GingerGeek> It idles 21:02 < GingerGeek> and on connect shuts down 21:02 < GingerGeek> by a minecraft client 21:03 < GingerGeek> but the protocol isn't right so I can't double click 21:04 < iBotPeaches> GingerGeek: then update it, all the information is on the wiki 21:04 < iBotPeaches> https://github.com/tustin2121/MCSignOnDoor/blob/master/src/org/digiplex/mcsod/MCSignOnDoor.java 21:04 < iBotPeaches> looks pretty easy 21:05 < GingerGeek> Its not my plugin 21:05 < iBotPeaches> then again, the messaging format changed, probably not an easy change 21:05 < GingerGeek> I just wanna make it work 21:06 < iBotPeaches> hope you know java then 21:06 < GingerGeek> I do 21:06 < iBotPeaches> well I linked the wiki and the repo (both of which I googled) 21:06 < GingerGeek> Yes I know where it is stored 21:06 < GingerGeek> but the point is 21:06 < GingerGeek> the plugin has the facility to change the protocl number it uses 21:06 < GingerGeek> wait 21:07 < GingerGeek> If you look at the Bukkit Forum thread 21:07 < GingerGeek> an FAQ is how to change the protocol 21:07 < iBotPeaches> good, follow it. 21:08 < GingerGeek> no 21:08 < GingerGeek> but 21:08 < GingerGeek> ah sigh 21:08 < iBotPeaches> It says *exactly* what to do. Update the manifest file and the file I linked above 21:08 < iBotPeaches> You know the current protocol via the wiki 21:08 < GingerGeek> omg I am so stupid 21:09 < iBotPeaches> which is 74 21:09 < GingerGeek> Thank you so much 21:09 < GingerGeek> SO I have to download the git 21:09 < GingerGeek> and then compile it 21:09 < GingerGeek> god I am dense sometimes 21:09 < iBotPeaches> that is usually the build process 21:10 * GingerGeek launches eclipse 21:10 < iBotPeaches> but just to warn you. I believe you will have to change more than those 2 vars. 21:11 < GingerGeek> another silly question 21:11 < GingerGeek> Im new to eclipse 21:11 < GingerGeek> Do I set the workspace to the src folder 21:11 < GingerGeek> or the folder above src 21:15 < GingerGeek> dm 21:15 < GingerGeek> I imported it from git 21:16 < GingerGeek> so the speicfication version of the protocol is 74 21:25 < GingerGeek> Fixed it 21:25 < GingerGeek> it was trying protocol 60 21:25 < GingerGeek> so I replaced all mentions of 60 with 74 23:20 < Not-001> [fCraft] fragmer * r2071 13 files : Minor ReSharper-aided code cleanup. --- Day changed ven. juil. 19 2013 03:49 < dx> hey guys, is proxy based virtual hosting for non-bungee related use cases a bad idea? 03:50 < dx> i mean, i don't have anything to proxy at all. 03:50 <+sadimusi> it's certainly unnecessary, but I wouldn't call it bad 03:52 < dx> i've been using SRV records for a while, and my users often report that they fail to connect to the server (the A record for the same address points to somewhere else) unless they use the IP address:port combination they've been sharing secretly 03:52 < dx> "secretly" for who knows what reason, but they didn't tell me until now that SRV was failing, they just workarounded it like that 03:53 <+sadimusi> now that you mention it, a few people had trouble connecting to my server as well 03:53 < dx> so yeah, i'm considering using a proxy instead of this mess 03:53 <+sadimusi> how big is your server? 03:53 < dx> lately... peak players 2 03:53 < dx> the other server peak players 0 03:54 <+sadimusi> I guess performance won't be a problem then :D 03:54 < dx> :D 03:54 < dx> the vanilla server is really really dead 03:54 < dx> if it wasn't for feed the beast i would have shut down this months ago 03:55 <+sadimusi> I wrote such a proxy way back, I should probably update it sometime https://github.com/sadimusi/MVHP/ 03:55 < dx> yeah, i was considering using that one :3 03:55 <+sadimusi> (and replace asyncore with gevent) 03:57 < dx> well the advantage of asyncore is not requiring dependencies 03:57 < TkTech> sadimusi: Fallen in love with gevenet? 03:57 < TkTech> *gevent 03:57 <+sadimusi> of course :) 03:58 <+sadimusi> and according to you asyncore doesn't perfom very well 03:59 < dx> green threads > event loops > threads? 03:59 < TkTech> There is never a valid use for asyncore except pre-2006 tutorials. 04:00 <+sadimusi> TkTech: I'm rewriting mc4p's protocol definition and could use some feedback: https://gist.github.com/sadimusi/6025899 04:00 < TkTech> dx: Cooperative multitasking (ala eventlet) still requires an event loop 04:00 < dx> right. 04:00 <+sadimusi> I once wrote a twisted version of mvhp, but I didn't really like it 04:01 < TkTech> sadimusi: Interesting use of context handlers 04:01 < dx> well asyncore might suck but my server sucks too. i'll just patch to have the new server list ping support and custom motds 04:01 <+sadimusi> I got the idea out of a presentation called "Don't do this" :D 04:01 < TkTech> Twisted is okay, and very feature-full, but I've never enjoyed using it and it simply performs worse than gevent. 04:02 <+sadimusi> twisted just feels more like java to me than even the java stdlib 04:02 < dx> TkTech: oh nice, i always hated twisted irrationally and now i have a reason and a replacement. thanks. 04:03 < dx> disliking twisted is the main reason that i always do my own select() event loops. not exactly efficient, but less ugly in my opinion. 04:04 < dx> i really should check out gevent. 04:05 <+sadimusi> gevent is pretty cool, but the documentation is horrible 04:05 < TkTech> It really, really is. Build the docs from source and they're so much better. 04:05 < dx> is it the kind of documentation that is worse than actually checking the source code? 04:05 < TkTech> Website is eons old. 04:05 < TkTech> sadimusi: Do you want to support multiple versions at the same time? 04:06 <+sadimusi> yes 04:06 <+sadimusi> but to make it easier for me I removed everything < 1.5.2 04:06 < dx> can't you generate the code for those? 04:07 < dx> (...or, well, anyone could after you're done with the general structure) 04:07 <+sadimusi> there were a few ugly packets back then 04:07 <+sadimusi> like the 0x01 which was different for each direction 04:07 < TkTech> sadimusi: So does ClientMessage's metaclass bind to the protocol() instance in the current context? 04:07 < dx> sadimusi: but you need to make this flexible enough to handle ugly packets 04:07 < TkTech> *Message's metaclass 04:08 <+sadimusi> I tried to make it as flexible as I could, I only needed to add ItemStack and Metadata as special types 04:09 < dx> also, i want to see those metaclasses 04:10 <+sadimusi> it's not completely done, but almost: https://gist.github.com/sadimusi/6034575 04:11 <+sadimusi> client and server messages are still handled equally and I didn't implement Dict() yet 04:11 <+sadimusi> hm, __getitem__ probably shouldn't throw AssertionErrors 04:11 < TkTech> sadimusi: class ProtoclVersion 04:12 < dx> TkTech: saw that too, then noticed that he had the typo consistently in other places :D 04:12 < dx> yay for keyword completion. 04:13 < dx> sadimusi: this doesn't actually have metaclasses :( 04:13 <+sadimusi> if anyone wants to use it for something else than debugging, I should probably detect if messages were changed and don't serialize them otherwise 04:14 <+sadimusi> dx: where would you have used them? 04:15 <+sadimusi> the messages are already defined as classes, I don't have to generate them dynamically... 04:15 < dx> sadimusi: you know ORMs like sqlalchemy, which have "model" structures like these? they usually catch the assignment of the attribute of each field using metaclasses 04:16 < dx> what you did instead of that is "self._order_id = MessageField._NEXT_ID" 04:16 <+sadimusi> yeah, that's kinda hacky 04:16 <+sadimusi> I looked at sqlalchemy, but I don't think I have ever seen uglier code 04:16 < dx> which is global state, and that might not be an issue but i don't like it :D 04:16 < dx> heh 04:17 < dx> yeah, that's the problem with metaclasses. they have a lot of power, but it can be confusing to read, and gets worse if you do a lot of stuff like sqlalchemy does 04:17 <+sadimusi> I don't really mind the global state, but I would have liked 'name = String' instead of 'name = String()' 04:20 <+sadimusi> to me it looked more like sqlalchemy messed with the internal __dict__ 04:23 < dx> well, implementing type.__new__ is in fact passing a new value of __dict__ to the object, but before it's created 04:23 < dx> you could turn your String into String() trivially with __new__ 04:23 <+sadimusi> can you pass an OrderedDict there? because that's the main issue 04:25 < dx> set an OrderedDict to __dict__? ...don't think so, probably because duck typing, but i don't think that will get you anything useful 04:26 <+sadimusi> why not? then I could easily access all the fields through __dict__ 04:27 <+sadimusi> but if all those people on stackoverflow are correct, it won't accept anything else than a standard dict 04:27 < dx> yeah, __dict__ sounds like it's a bit too internal to allow anything 04:28 < dx> but either way, you don't iterate over __dict__ often, you could use a different attribute name for that 04:29 <+sadimusi> well, can I get all the attributes in the correct orders with a metaclass? 04:32 < dx> hmm, i'm googling and i can't find any approach that catches the "attribute set" as i thought it was possible 04:32 <+sadimusi> I googled quite a bit 04:32 < dx> http://stackoverflow.com/a/3288801/2195033 04:32 < dx> this is the best i got 04:32 <+sadimusi> most people suggest the workaround I used or just point out that it's easy in py3k 04:33 < dx> yeah, this one is like what you used, but also adding an attribute to the class with the list of ordered fields 04:51 < dx> okay 04:51 < dx> today i learned that everything i know is a lie 04:51 <+sadimusi> :D 04:52 < dx> okay, not really, but the __setattr__ of metaclasses (which is what i was thinking) only works if you set it *outside* the class definition 05:26 < Not-001> [fCraft] fragmer * r2072 62 files : Fixed a whole bunch of typos and spelling inconsistencies in comments, member names, and string literals. 15:29 < Not-001> [BraLa] Dav1dde pushed 1 commit to master [+1/-0/±4] http://git.io/cKdzEw 15:29 < Not-001> [BraLa] Dav1dde 7f57aa0 - fix std.json instead of working around its shitty api | phobos #1421 21:15 <+sadimusi> is it a good sign when my screen randomly goes black for a few seconds and I hear an extremely loud thunder just when the image comes back? 21:16 <+pdelvo> is your gpu driver up to date? 21:16 < dexter0> nah, you should go take a bath 21:17 <+sadimusi> :D 21:17 < iBotPeaches> its cleaning those pixels 21:17 * sadimusi goes around the house unplugging all electronics, just to be safe 21:17 <+sadimusi> not the modem though :) 21:20 < dav1d> haha 21:40 <+sadimusi> oh, pretty new launcher 21:40 <+sadimusi> does it finally support multiple players per account? 21:41 <+sadimusi> "Error! At this time you can only own one copy of Minecraft per account, sorry!" :( 21:42 < Yoshi2> that sounds a lot like a "No." 21:42 <+pdelvo> :( 21:42 <+sadimusi> the launcher probably supports it, but I can't add another player to my mojang account... 21:50 <+pdelvo> It would be cool to have a "download server for this version" button 21:57 <+sadimusi> it just happend again o.O 21:57 <+sadimusi> even longer and louder this time 21:58 <+sadimusi> and again 21:58 <+sadimusi> this is getting annoying :/ 21:59 < superjoe> sadimusi, what's going on over there? 21:59 < dav1d> DAMN WEATHER 21:59 <+sadimusi> superjoe: just a little thunderstorm, but it appears to be pretty near and somehow affects my monitor 21:59 < superjoe> haha 22:00 < dexter0> at least you have exciting weather 22:01 <+pdelvo> have you tried to turn it off nd on again? 22:01 < superjoe> the weather? 22:01 <+pdelvo> jeah 22:02 < superjoe> :) 22:02 <+sadimusi> I'll try :) 22:02 < dav1d> you should sleep, that clears the weather 22:02 < dav1d> or open the minecraft console 22:02 < jast> chances are if the thunderstorm affects your monitor, it affects all your other devices, too (e.g. by burning them to a crisp) 22:03 < jast> that said, it's complicated technology and all that 22:03 <+pdelvo> that sounds like your electricity is not stable on a thunderstorm 22:04 < jast> shouldn't that screw up all devices, then? 22:04 <+sadimusi> somehow it doesn't 22:04 < superjoe> I'm assuming it's a CRT monitor right? 22:05 <+sadimusi> my monitor might just be exceptionally crappy 22:05 <+sadimusi> no 22:05 < superjoe> huh. 22:05 <+pdelvo> some of them are better in getting around those hiccups of your electricity 22:06 <+sadimusi> I've lived here my whole life, this never happened before 22:06 <+pdelvo> e.g. computer power supplies have to withstand short power outages. It could be that your monitor is not good at that 22:07 < superjoe> guys wanna see something silly I threw together last night? 22:07 < superjoe> http://githubpopularitycontest.com/ 22:08 < jast> quick, make it look all social web and sell it for billions 22:08 < superjoe> haha 22:09 <+sadimusi> looks like capital letters break your script :) 22:10 <+sadimusi> not a single one in the top 100 22:10 < superjoe> I don't think that's a bug 22:10 <+sadimusi> sure? http://githubpopularitycontest.com/find?user=TkTech 22:11 < superjoe> add a couple of his repos with the "forc" 22:11 < superjoe> "force crawl" 22:11 <+sadimusi> indeed 22:12 < superjoe> there now he makes the cut 22:12 < jast> so, I suppose I don't really get any points for my ~12 commits to git/git? ;) 22:12 < superjoe> haha 22:12 < superjoe> jast is your name jast? 22:12 < jast> yes 22:12 < nyuszika7h> umm 22:12 < nyuszika7h> why am I getting this error? 22:12 < nyuszika7h> yggdrasil.YggdrasilIllegalArgumentError: Invalid salt version 22:13 < nyuszika7h> (this is a Python implementation written by me) 22:13 < superjoe> http://githubpopularitycontest.com/find?user=jast 22:13 < jast> whoo, #2178 22:13 < jast> so many points 22:14 < jast> though that number doesn't seem to match the formula 22:14 < superjoe> no? 22:14 < jast> lemme check 22:14 <+sadimusi> nyuszika7h: when doing what? 22:15 < jast> oh, never mind. I can't math. 22:15 < nyuszika7h> yggdrasil.auth('yggdrasil', 'test') 22:15 < nyuszika7h> seems to only trigger on the user name 'yggdrasil' 22:15 <+sadimusi> that's probably an error on their end 22:15 < nyuszika7h> ah ok 22:15 <+sadimusi> probably use bcrypt for password hashing 22:15 < dav1d> nyuszika7h: yeah that happened to me, too 22:16 < dav1d> it's on a invalid username/password combo 22:16 < dav1d> at least it happened to me 22:16 < nyuszika7h> not really 22:16 < nyuszika7h> wait 22:16 <+sadimusi> invalid combo should just throw "Invalid credentials. Invalid username or password." 22:17 < dav1d> sadimusi: it should, but doesn't 22:17 <+sadimusi> I guess somebody manually put a password for yggdrasil into the database 22:17 <+sadimusi> so the salt is missing 22:17 < dav1d> and yep, I also tracked it down to bcrypt but I didn't care too much 22:18 < nyuszika7h> >>> yggdrasil.auth(' '.join([random.choice(string.ascii_lowercase) for i in range(16)]), 'password') 22:18 < nyuszika7h> yggdrasil.YggdrasilInvalidLoginError: Invalid credentials. Invalid username or password. 22:18 < superjoe> wtf is "yggdrasil" 22:18 < nyuszika7h> superjoe: the new authentication system's (code) name 22:19 < superjoe> ahh 22:19 < superjoe> it looks like an obfuscated class name 22:19 < nyuszika7h> lol 22:19 < nyuszika7h> https://en.wikipedia.org/wiki/Yggdrasil 22:19 < dav1d> nyuszika7h: try valid username, invalid password 22:19 < jast> so I suppose I should move my unpublished open source projects forward, so that because nobody cares about them I can get no more points for the popularity contest 22:19 < superjoe> lol 22:20 < nyuszika7h> >>> yggdrasil.auth('Notch', 'password') 22:20 < jast> that's kind of my overall strategy for internet fame 22:20 < nyuszika7h> yggdrasil.YggdrasilUserMigratedError: Invalid credentials. Account migrated, use e-mail as username. 22:20 < dav1d> jast: yes you need a bigger e penis 22:20 <+sadimusi> nyuszika7h: I'm pretty sure Notch migrated his account ;) 22:20 < dav1d> nyuszika7h: use an email 22:20 < nyuszika7h> Herobrine hasn't migrated his account :O 22:20 < nyuszika7h> also 22:20 < jast> no, that's not at all what I meant. I meant I need to do more stuff nobody but me cares about, so it's absolutely worthless for bragging. 22:21 < nyuszika7h> >>> yggdrasil.auth('Herobrine', 'password') 22:21 < nyuszika7h> yggdrasil.YggdrasilInvalidLoginError: Invalid credentials. Invalid username or password. 22:21 < dav1d> just use your own 22:21 < nyuszika7h> >>> yggdrasil.auth('nyuszika7h@cadoth.net', 'password') 22:21 < nyuszika7h> yggdrasil.YggdrasilInvalidLoginError: Invalid credentials. Invalid username or password. 22:23 < dav1d> I wonder how minecraft renders the 3d items 22:23 < dav1d> I would probably do this with a shader 22:24 < jast> for minecraft, usually the best guess is 'the way that is easiest to cobble together' ;) 22:24 < dav1d> well I couldn't think of something easy 22:26 < dexter0> constructing a mesh seems simple in theory 22:26 < dexter0> make a quad for each pixel, lump them together... 22:26 < dav1d> dexter0: LOL 22:26 < dexter0> do that twice, and move the second one back a bit 22:26 < dav1d> that would be horrible 22:26 < dexter0> then make more quads to connect the two 22:26 < dav1d> well you can generate these based on the texture 22:26 < dexter0> well yes 22:26 < dav1d> but lol 22:26 < dav1d> that would be horrible 22:27 < dav1d> 16 3d swords on the ground = 5chunks of vertices lol 22:27 < jast> sounds like minecraft :P 22:27 < dav1d> this mod looks great https://www.youtube.com/watch?v=nZFY_GxoXh0 22:27 < dav1d> jast: haha 22:27 < dexter0> not saying its the best way by far :P 22:28 < jast> I do recall the game getting _very_ slow once you dumped a few hundred items on the ground 22:28 < jast> before they started grouping them 22:28 < dexter0> that was also before the 3d items 22:28 < jast> oh, yeah 22:28 < dexter0> but yeah, probably were drawing a textured quad for each item 22:28 < dav1d> dexter0: cant you do it with *one* quad, texture applied to it and some vertex shader magic to extrude 22:28 < dexter0> with no instancing 22:29 < dexter0> but there are only 4 verts then? 22:29 < dav1d> dexter0: instancing doesn't make rendering faster 22:29 < dexter0> what will you extrude 22:29 < dav1d> mostly reduces vram useage 22:29 < dexter0> instancing does make it faster, less draw calls 22:30 < dexter0> well, it makes data upload faster 22:30 < jast> just compose it from cuboids, Problem Solved (tm) 22:30 < dav1d> dexter0: you would need to pass two vertices instead of one, one has an extrusion factor of 0 the other of let's say 0.3 22:30 < dexter0> which can become a bottleneck fast 22:30 < dav1d> if the texture coord is not 0 22:30 < dav1d> "extrude" 22:30 < dav1d> well if the texture is not 0 22:30 < dav1d> not sure if that would actually work, just an idea 22:30 < dav1d> probably wont work 22:30 < dexter0> how will you form the geometry to create the extrusion along the z-axis? 22:31 < dav1d> dexter0: instancing doesn't reduce the number of draw calls? 22:31 < dexter0> yes it does 22:31 < dav1d> no 22:31 < dexter0> one call to glDrawArraysInstanced vs multiple calls to glDrawArrays 22:31 < dav1d> if I have one fat vbo or one less fat and an element buffer 22:31 < dav1d> still one draw call 22:32 < dav1d> we are probably speaking of different things 22:33 < dexter0> fat VBO is always better yes but less flexible 22:33 < dav1d> why? 22:33 < dexter0> for instance, rendering multiple discrete objects with their own transform matrix 22:33 < dexter0> that you want to animate 22:33 < jast> have you considered hooking up a monostable matrix to the clock gate 23:43 < Not-001> [BraLa] Dav1dde pushed 1 commit to master [+0/-0/±1] http://git.io/s20D6w 23:43 < Not-001> [BraLa] Dav1dde 9d60f4c - fixed derp of the day (std.json improvement) --- Day changed sam. juil. 20 2013 01:43 < TkTech> superjoe: Force crawl's placeholder doesn't make it clear that it accepts a username instead of a full repo path 01:44 < TkTech> superjoe: Also, if it only works off of contributions you should sync with github using OAuth and get the permission to read private repo statistics 01:44 < TkTech> superjoe: 'cause my rank would be better than 532 ;-( 01:46 < TkTech> sadimusi: Oh, you tried my name. Haha. Should have kept reading. 01:46 < TkTech> sadimusi: BTW, going to push your repo with your yggdrasil code, or just in gists for now? 01:47 <+sadimusi> I'm still working on the protocol, I'll finish the auth stuff afterwards 01:48 <+sadimusi> and it's pretty specific for mc4p, your little script is probably way better suited to mess around with 01:48 <+sadimusi> just wasted half an hour figuring out that OrderedDict(a=1, b=2) was a stupid idea :/ 01:49 < TkTech> Wait, why? Does your data fit the model for just sorting a dict/sorted set? 01:50 <+sadimusi> OrderedDict doesn't really sort, I just need to keep the order I defined it in 01:50 < TkTech> Wait…so…a list? 01:51 < TkTech> Wait, no, this guessing game is silly. 01:51 < TkTech> What's your use case? 01:51 <+sadimusi> https://gist.github.com/sadimusi/6025899#file-message-py-L647 01:53 < TkTech> Starting to look like you're reinventing construct 01:54 < TkTech> (Don't misunderstand, reinventing the wheel for fun rocks) 01:54 <+sadimusi> somebody mentioned construct here once, I didn't really like it 01:54 < dav1d> ← 01:55 < TkTech> Anything in particular? 01:55 < TkTech> MostAwesomeDude (you remember him?) is the maintainer of it. 01:56 < TkTech> nyuszika7h: Happen to be around? 01:56 <+sadimusi> I do remember him, the last time he was here we got into an argument and he left forever 01:56 < TkTech> …the internet…'tis a silly place. 01:56 < dav1d> omg, really? 01:56 < dav1d> I didn't know that... 01:56 < TkTech> nyuszika7h: Well anyways, the cadoth.net domain you're using in your copyright header goes to a spam page. Typo? 01:57 < dav1d> TkTech: cadoth.tk? 01:57 < superjoe> TkTech, nah, it's a popularity contest 01:57 < superjoe> you can't be secretly popular 01:58 < dav1d> TkTech: yeah nyuszika7h probably meant cadoth.tk that's "their" domain 01:58 < superjoe> TkTech, besides, how many stars do you actually have on private repos? 01:58 < TkTech> dav1d: Good find, I only saw it from https://gist.github.com/nyuszika7h/6042188 01:58 < TkTech> dav1d: Which I randomly found searching for python and auth. 01:58 < TkTech> superjoe: About 1000? 01:59 < TkTech> superjoe: I have many contract repos with larger companies where the entire dev team stars it. 01:59 < dav1d> TkTech: interesting, I know nyu from a differen channel, and I know that the actual domain is cadoth.tk why he writes .net everywhere, I don't know 01:59 < superjoe> how is that even possible 01:59 < superjoe> ahh 02:02 <+sadimusi> TkTech: that's how my yggdrasil stuff currently looks: https://gist.github.com/sadimusi/6043202 02:02 <+sadimusi> my focus is more on the laucnher_profiles.json than on the API 02:03 < TkTech> Yeah, I think in something intended as a library that should be kept separate 02:03 < TkTech> But for your use case makes total sense 02:03 < dav1d> sadimusi: why is YggdrasilException indented like this 02:04 <+sadimusi> it's an inner class 02:04 < dav1d> that should be on the outer scope 02:04 < dav1d> sadimusi: why? 02:04 < dav1d> you don't want someone to catch it? 02:04 < dav1d> except: YggdrasilAuthenticator.YggdrasilException 02:04 < dav1d> ^ woot 02:04 <+sadimusi> I just like to keep my things hierarchical 02:05 <+sadimusi> but you're right, catching it sucks 02:05 < dav1d> I often make a exception.py 02:05 < dav1d> move all my exceptions in there, with a nice hierachical inheritance 02:06 <+sadimusi> it doesn't really matter for me since it's not meant to be a library 02:07 < dav1d> INVALIDATE_URL = YGGDRASIL_URL + "invalidate"