Ossa Sepia

April 19, 2020

#ossasepia Logs for 21 Aug 2019

Filed under: #ossasepia,Logs — Diana Coman @ 10:33 pm
asciilifeform: trinque: dunno why you'd even bother with oopism for such a thing. it aint as if yer gonna have 9000 of'em going in 1 proggy [00:57]
shrysr: diana: salt mine shit: I've been told to 'release' i.e make the the ERP system accessible to others… some other changes like hours of work too… I need to redirect focus for a bit till this. The target is 2 weeks.. I may not do great on the weekly tasks – but i intend to do what I can. [11:31]
shrysr: diana_alt: ^ [11:32]
diana_alt: shrysr: ok; 10 lines of v.py though should fit in 1 week if all the other tasks can wait, right? [11:34]
diana_alt: this sort of situation is precisely where priorities are used: pick only top priority and focus on that first and foremost [11:35]
shrysr: yes. [11:36]

#ossasepia Logs for 20 Aug 2019

Filed under: #ossasepia,Logs — Diana Coman @ 10:23 pm
diana_alt: ugh, no deedbot [14:44]
asciilifeform: apparently not [14:45]
diana_alt: asciilifeform: 4 runs of curl http://54.209.217.34/log/trilema/2018-04-18#1802801 > /dev/null give http://p.bvulpes.com/pastes/1llzt/?raw=true [14:49]
asciilifeform: ty diana_alt ! [14:50]
asciilifeform: diana_alt: imho thus far errything points to the ~pipe~ [14:52]
asciilifeform: given e.g. http://logs.nosuchlabs.com/log/trilema/2019-08-19#1929698 [14:52]
snsabot: Logged on 2019-08-19 16:38:26 asciilifeform: … from here eats 0.268s. [14:52]
diana_alt: BingoBoingo: do you mind waiting until the end of this week for the payment of the Pizarro invoice for my rk? [14:53]
diana_alt: asciilifeform: it would seem so, yes. [14:54]
asciilifeform: diana_alt: btw what sorta load time do you get for 'heavy page' from phf's log [14:55]
asciilifeform: ? [14:55]
asciilifeform: ( his also iirc in usa ) [14:55]
BingoBoingo: diana_alt: No problem at all [14:56]
diana_alt: BingoBoingo: thanks! [14:58]
diana_alt: asciilifeform: hm, a bit longer if anything: real is around 1.5s on 4 runs [14:58]
diana_alt: same precise page [14:59]
asciilifeform: diana_alt: the mirror is on largest spam isp in usa (lulazon) and actually can be moved between a dozen or so locations , we can experiment later if want [15:00]
diana_alt: specifically: http://p.bvulpes.com/pastes/su9en/?raw=true [15:00]
asciilifeform: ( they have a thing where you can pick in what city ) [15:00]
asciilifeform: atm i vaguely suspect that tcp on piz is slowed by an inept wiretap somewhere. [15:01]
asciilifeform: diana_alt: my log pages are slightly heavier than phf's, he had 'minimized' css , some scheme for cutting out unprinted whitespace also [15:02]
asciilifeform: it's not a huge diff tho iirc [15:03]
diana_alt: no, not a huge difference anyway; tbh for the moment I can't see much more info to be gotten out of further simple timing tests (or maybe I just don't see it) [15:08]
asciilifeform: diana_alt: thus far seems to me that we're seeing 100\% pipe effect [15:09]
asciilifeform: ( as confirmed by lobbes , my logtron generates the page in approx same time it takes to move the mouse button. can't say re phf's , likely same ) [15:09]
asciilifeform: i.e. no amt of massage of the proggy is going to make a perceptible diff re load time. [15:10]
diana_alt: I agree it looks 100\% pipe effect [15:10]
asciilifeform: imho what's needed, is http://logs.nosuchlabs.com/log/trilema/2019-08-19#1929756 . [15:11]
snsabot: Logged on 2019-08-19 21:52:50 asciilifeform: rly what we oughta have is 7+ ~active~ bots/logotrons on 7 continents, then no one will have to grumble 'wai slow' [15:11]
diana_alt: asciilifeform: do you recommend just mirroring them on heathen vms? [15:11]
asciilifeform: it poses some difficulty; e.g. the 1 i used, is in fact banned from fleanode (unless sslized) on acct of spam [15:12]
asciilifeform: but proggy is lightweight enuff that it in fact runs a++ in cheapo pseudohosters [15:12]
asciilifeform: (observe that rubbish-mirror has no bot, it is synced via db dump / cron ) [15:13]
asciilifeform: seems that any host service which offers traditional python2, will run the thing. [15:14]
diana_alt: looking at it from the other side, why not just mirror them in the cheapest way too; supposedly there still are some that are not banned on acct of spam either; [15:14]
asciilifeform: it took me just slightly over half hour to set up the example mirror. [15:14]
asciilifeform: ( all of the necessary instructions, i think are in the readme ) [15:15]
asciilifeform: note that the bot doesn't need to be voiced in order to log. [15:16]
diana_alt: asciilifeform: I still tend to do a *2 for myself on all your timings; but in any case, it's still on my list for when I get back to my desk [15:16]
asciilifeform: diana_alt: the moar, the merrier. [15:16]
diana_alt: asciilifeform: maybe add those cron/instructions as a patch though? [15:18]
asciilifeform: diana_alt: it's defo going in next patch. [15:18]
diana_alt: i.e. add to the readme or something so one doesn't need to dig in the logs [15:18]
diana_alt: great, thanks! [15:18]
asciilifeform: imho mirrors synced via cron aint especially useful tho [15:18]
asciilifeform: as they don't help to bridge gaps in log in the event the bot (of which atm there is only 1, of my type) is bumped [15:18]
diana_alt: sure; that doesn't mean they don't help in any other way though [15:19]
asciilifeform: a proper logtron oughta have own bot, going in realtime [15:19]
diana_alt: sure [15:19]
asciilifeform: the lulazon mirror, i set up specifically to probe q of 'is proggy/web stack slow' [15:19]
asciilifeform: as soon as someone sets up proper mirror (i.e. with working bot), we can start on the q of how to auto-sync. [15:22]
asciilifeform: ( it prolly has not escaped diana_alt's notice, that in so doing we're more or less rebuilding the relevant pieces irc ) [15:23]
asciilifeform: *of irc [15:23]
asciilifeform: btw re the cron : the instructions posted in log earlier do not in fact result in a working auto-cronsync ; turns out that it is necessary to run 'init_db' script prior to importing a dump, or postgres barfs . this results in 5 or so min. down time (i.e. machine shows empty log) [15:26]
asciilifeform: i have not conceived of any simple pill against this, of yet. [15:26]
asciilifeform: imho such mirroring is not all that useful, so did not put serious effort into any such thing as e.g. 'trim the dump so doesn't conflict with existing' [15:27]
asciilifeform: any auto-sync really oughta use the 'raw-export' knob (implemented — emitter, but no receiver of yet) [15:31]
diana_alt: yes, a proper separate working bot (ideally many of them) is the real need; this sort of mirrors are lowest-effort and a rather different thing, can't see any reason to spend a lot of time on them either [15:31]
asciilifeform: diana_alt: http://logs.nosuchlabs.com/log-raw/ossasepia?istart=1000404&iend=1000461 << example [15:33]
asciilifeform: diana_alt: imho errybody in l1 oughta have a working bot. (dun even have to be copy of mine, but oughta emit same 'raw' format ideally) [15:37]
diana_alt: shrysr: those copy/paste bits on your blog – what's exactly their role/your idea with them? they don't quite make posts for sure; are you trying to build a sort of reference list there or what? [15:37]
diana_alt: asciilifeform: I think I even said as much before, yes; it might have been as a comment on trilema though, can't seem to find it quickly right now. [15:41]
diana_alt: the above re every lord should run a bot as an even more basic requisite than running a node [15:42]
diana_alt: there, found it, last line in http://trilema.com/2019/trilema-goes-dark/#comment-130485 [15:44]
shrysr: I replied to your comment… they are not posts. It was meant to be a reference… and I guess I liked the story quite a bit. [22:45]
trinque: funny thing is, looking back on it… it was bad lisp! [22:46]
trinque: the class and method naming at the very least, written like some java dork [22:46]

#ossasepia Logs for 19 Aug 2019

Filed under: #ossasepia,Logs — Diana Coman @ 10:13 pm
shrysr: okay – I have redone the website following the guideline and this is my report : https://s.ragavan.co/2019/08/conforming-to-a-blog-design-outline/ [01:41]
shrysr: above comments on the website are addressed / resolved. [01:42]
shrysr: WEek 5 review is up on younghands http://younghands.club/2019/08/19/week-5-review/ [01:42]
shrysr: I will post the tasks for the next week tomorrow first thing. [01:43]
diana_alt: shrysr: much more readable indeed! [02:04]
diana_alt: and as a result, you have feedback in the comments there [02:48]
shrysr: yay! I did think it was much better maself. I've replied to some comments. the weekly task list is posted on young hands http://younghands.club/2019/08/19/week-6-plan/ [12:42]
shrysr: When I read an article and there are references to other material peppered through it :- i tend to get 'lost' following those links. I'm getting better at not getting distracted – but is there a 'right' way to do it? [13:06]
BingoBoingo: One way to do it is read the whole thing, note the links, then after giving the linked material a read or two, re-read the original. [13:15]
BingoBoingo: You can try playing with how you map the reading of linked versus your target piece, but the essence of reading is in re-reading [13:17]
shrysr: i needed to hear that because re-reading is something I do not practice well… i also tend to get pissed off (with myself) if i don't get it immediately or can't recall / relive a concept… leading to a cascading 'avoidance' of many things. I know better, but I've not really worked on steps or a methodical approach to counter this. I'm going to try your advice. [13:34]
diana_alt: http://logs.nosuchlabs.com/log/ossasepia/2019-08-19#1000352 – yes, there is; remember that knowledge is essentially a tree; as such, you should simply write down and then come back to branches not-yet-explored; and for that matter, as BingoBoingo says, you *have to* revisit and re-read, of course! [13:36]
snsabot: Logged on 2019-08-19 13:06:49 shrysr: When I read an article and there are references to other material peppered through it :- i tend to get 'lost' following those links. I'm getting better at not getting distracted – but is there a 'right' way to do it? [13:36]
diana_alt: shrysr: the basic rule is that you'll need to go through each thing at least 3 times to get it but that's more of a lower bound than anything else really [13:37]
diana_alt: things worth reading are worth re-reading as your knowledge increases since you'll notice and make other connections too [13:38]
diana_alt: and that's pretty much how you evaluate text too – if it's not worth re-reading, it wasn't much in there to start with [13:38]
shrysr: okay. I will work it. [13:41]
shrysr: http://logs.nosuchlabs.com/log/ossasepia/2019-08-17#1000295 – captivating read. asciilifeform the link to the james watt book is dead… I found one at http://www.jameswatt.info/andrew-carnegie/7-second-patent.html [13:42]
snsabot: Logged on 2019-08-17 15:34:47 asciilifeform: e.g. microshit, if it were turbine, would be one that turns maybe on odd-numbered wednesdays, and the bulk of effort of the vendor goes into making elaborate excuses for why, and offering service where sends dudes to turn crank manually if you really need rotation to happen [13:42]
diana_alt: shrysr: basically there's plenty worth reading and time is still limited so best not waste any of it on reading platform/adverts/signalling/talking-out-of-no-experience-but-being-a-great-guy spew [13:46]
diana_alt: better re-read something worthy than waste the time on "the best 10 tools for x" and the like [13:47]
diana_alt: " Complete partially finished " – lolz how this sounds [13:48]
BingoBoingo: shrysr: The one undisputably useful thing a professor said when I was doing graduate philosphy at SIU was that you are only reading if you are re-reading [13:51]
diana_alt: BingoBoingo: if only they said that more often, you know? [13:53]
BingoBoingo: diana_alt: Seriously, noone said that during US undergrad, or highschool, or … [13:54]
diana_alt: I can believe that, sadly, yes; none of my teachers ever said it explicitly either (I sat here trying hard to find at least one who might have said it) although in fairness it was at least an implicit requirement that yes, of course you read the thing *many* times, wtf is one read going to do [13:59]
diana_alt: shrysr: 1. do you know you can use feedbot to notify you of any new comments and/or articles for blogs/posts of interest? [14:18]
diana_alt: re feedbot see http://thetarpit.org/posts/y05/081-feedbot-manual.html [14:19]
diana_alt: shrysr: never mind, you need to be L1 so not yet; leave feedbot alone [14:21]
diana_alt: shrysr: re tasks list: what's the order there? [14:22]
shrysr: in terms of priority ? I cd not really decide. [14:24]
shrysr: incomplete tasks spilling over from last week are the first priority as such. [14:25]
shrysr: did you mean in your comment – that i should put a hold on reading the book land of lisp? Its actually fun to read. [14:27]
shrysr: https://s.ragavan.co/2019/08/following-ch-article-how-to-learn-programming/#comment-56 [14:28]
diana_alt: shrysr: the point re priorities is that you should at least have some rough groups precisely so you can say "this bit is there only if time allows"; moving them to higher priority if they spilled over from previous week makes sense, yes, but there is *also* the option of saying "this will have to wait until X is ready" or some such. [14:31]
shrysr: I am not generally aware of what the bots on irc can do …or even how IRC works per se. but i wd Love to work on my own bot. From the way things look right now – a bot is better than no company if i end up aloooooneee. [14:34]
shrysr: diana_alt: okay. I work that out and will update the post. [14:38]
diana_alt: shrysr: initially making a irc bot was meant to be easy-beginner task but it turned out recently that it's not quite that, lol; onth since you say you are lisp-interested anyway, perhaps have first a look at trinque's bot [14:38]
diana_alt: but note that you still need *first* to understand V [14:38]
diana_alt: it's a basic step you just can't skip [14:38]
shrysr: Yes. [14:42]
diana_alt: here's the link with trinque's genesis of logbot http://trinque.org/2016/08/11/logbot-genesis/ and the keccak regrind from spyked http://thetarpit.org/posts/y05/080-botworks-regrind.html [14:43]
diana_alt: also, fwiw I think you might actually enjoy perhaps more making bots in eulora really since that's precisely where data collection and modelling and in general making sense of data is really needed [14:44]
diana_alt: re lisp comment I meant that it's not a high priority; if it's fun and so it fits in "relaxing time" / not resulting in tasks spilling over than sure; but otherwise it *can* wait [14:47]
shrysr: ok [14:47]
diana_alt: will be back tomorrowx01 [14:48]
shrysr: re bots in eulora yes – that occurred to me when i saw the task on foxybot…. It seemed ideal, and led back to V. I thought I could update the planned tasks from CH's article, and align it to Eulora as I progress. Who is CH btw ? [14:49]
BingoBoingo: ben_vulpes writes at CH [14:49]
shrysr: i dont know how you guys come up the cool nicks i see on irc. [14:50]
BingoBoingo: Well, its his real name. When I came in as a nervous youth back in 2013 I just picked a nick with a silly meaningless sound and then it stuck. [14:53]
shrysr: thanks BingoBoingo .. and ur nick is cool :D [14:54]
BingoBoingo: tyvm [14:55]
shrysr: as meaningless as it is.. lol. [14:55]
shrysr: I actually spent some time chanting your nick when i saw it first. [14:57]
BingoBoingo: lol [15:09]
lobbes: shrysr: re: bots fwiw my [botwork in #eulora years ago][http://logs.minigame.biz/2017-02-13.log.html#t09:16:25] eventually led to me publishing a full-fledged auctionbot that gets frequent use in #trilema >> http://blog.lobbesblog.com/2019/04/auctionbot-vpatch-and-manifest/ [20:28]
lobbes: I learned a lot in the process, as well [20:29]
lobbes: but yeah, gotta understand V first [20:31]
shrysr: thank you lobbes, I will go through that. Yes, I'm working on V. [23:21]

#ossasepia Logs for 18 Aug 2019

Filed under: #ossasepia,Logs — Diana Coman @ 10:03 pm
diana_alt: http://logs.nosuchlabs.com/log/ossasepia/2019-08-17#1000315 – it's an environmental issue too i.e. man-alone among scammers+idiots will not get anywhere (other than depressed or similar); hence my earlier note that it's unhealthy to invest your time (let alone yourself) in there more than you absolutely have to (if indeed you have to) [02:26]
snsabot: Logged on 2019-08-17 21:33:52 shrysr: in to, but bargains are made, and even with the cognizance of the fraud you mentioned among people who make decisions (there are fewer still who would admit to it) – nothing much is done, the projects lumber on like listless buffaloes. [02:26]
diana_alt: shrysr: latest trilema piece seems to be some reading for you (but do remember you have some things to finish first by this Sunday's deadline!) : http://trilema.com/2019/no-platforms/ [02:27]
diana_alt: http://logs.nosuchlabs.com/log/ossasepia/2019-08-17#1000303 – feel free to bash him one for those on sight, after all that's how learning happens; but yes, that's why it's here and not in #trilema after all. [02:29]
snsabot: Logged on 2019-08-17 15:42:46 trinque: heh, I'm here 5sec and already having an allergic response ! [02:29]
diana_alt: shrysr: by "colophon" on your blog, you actually mean "About" and you are better served using the correct names for everything; the colophon is something else, too. [04:02]
diana_alt: as for Stream I have no idea what it's supposed to be in the first place (feed? blog?); what's the difference between journal and blog anyway? [04:03]
diana_alt: is the "virtual palace" the whole thing or a category or wtf? [04:04]
diana_alt: in a word: your website is increasingly confusing to the point that I'll stop checking it; when you finally reach a layout that you can stick to, let me know and I'll give it another chance. [04:05]
diana_alt: shrysr: to avoid wasting that last chance for your website, as a minimum, the blog part of it should have: http://trilema.com/2019/what-is-a-blog-complete-spec-inside/ ; whatever else happens in other parts of your website if you must have parts, have one url for a proper blog. [04:23]

#ossasepia Logs for 17 Aug 2019

Filed under: #ossasepia,Logs — Diana Coman @ 9:52 pm
shrysr: Prelim notes so far on V https://s.ragavan.co/2019/08/v/ [02:19]
diana_alt: http://logs.nosuchlabs.com/log/ossasepia/2019-08-16#1000232 – your user is author there, not admin so probably can't approve comments; I'll have a look into it when I get back to a more settled place as atm I'm travelling for a bit [02:56]
snsabot: Logged on 2019-08-16 21:24:00 shrysr: my WP allows me to auto approve your comments, but i don't see that option in younghands… ? [02:56]
diana_alt: http://logs.nosuchlabs.com/log/ossasepia/2019-08-16#1000227 – sounds good [02:56]
snsabot: Logged on 2019-08-16 20:44:13 shrysr: I got going with v.py and as mentioned in the task list – i will publish whatever has been done so far so that it can be reviewed more frequently. [02:56]
diana_alt: http://logs.nosuchlabs.com/log/ossasepia/2019-08-16#1000230 – balance is a thing too [02:57]
snsabot: Logged on 2019-08-16 21:07:30 shrysr: of these actions should facilitate reaching the next salt mine. This was always the 'cause'. Quick results are nice, but I prefer holistic and in-depth development, and I believe I typically try to take time to do so, sometimes in too much excess. I think I should focus much more on v.py and TMSR related stuff (whatever we agree upon here) and pick and choose specific topics outside this scope, as a part [02:57]
diana_alt: but yes, in-depth *and* not-ultra-specialised [02:59]
diana_alt: shrysr: you know you *can* ask here re v and signatures too, right? [03:12]
shrysr: Yes.. i realised I cd have asked about signatures here after posting on #gnupg … luckily i got a response. [10:59]
shrysr: So is it like you have browser tabs open to the logs and your irc client open side by side when you respond? Usual 'settled workflow involves searching through the logs locally ? [13:47]
diana_alt: http://logs.nosuchlabs.com/log/ossasepia/2019-08-17#1000243 -> yes; no – settled is re access over trusted networks and various auth. [14:41]
snsabot: Logged on 2019-08-17 13:47:39 shrysr: So is it like you have browser tabs open to the logs and your irc client open side by side when you respond? Usual 'settled workflow involves searching through the logs locally ? [14:41]
asciilifeform: diana_alt: fella seems to have profound talent for reading text w/out ~actually~ reading. (for instance, escaped noticing that primary diff. b/w a vpatch and a heathen patch, isn't that it is pgp signed (heathens had pgp-signed patches 20y ago) but that it doesn't fuzzy-merge. [14:51]
diana_alt: asciilifeform: I suspect it's partially bad habit (environment strongly pushed it, for all I can get otherwise he resisted it as much as he could on his own but that is always patchy at best) and partially reading too much noise (where there is nothing to actually ready so…) [14:56]
diana_alt: read* not ready [14:56]
asciilifeform: diana_alt: i like to presume that all patients are curable, until shown otherwise; but this 1 shows quite dire symptoms of 'read-only head' [14:57]
asciilifeform: prognosis, imho, not so good. [14:57]
diana_alt: asciilifeform: time will tell for sure. [14:57]
asciilifeform: typically there is a stage, in cure, where patient 'opens third eye' and notices that entire collective output of 'software industry' from last 30y is rubbish, from win3.1 to 'docker' to etc. but not yet happened in this one, near as i can see. [14:58]
diana_alt: tall order given that he is working for them essentially and still thinking they are his future/honest [14:59]
diana_alt: fwiw he has however way more drive in the right direction than I saw in a *lot* of others [14:59]
asciilifeform: diana_alt: possibly i confessed this, but asciilifeform worx with the direst depths of microshitiana for bread. [14:59]
diana_alt: asciilifeform: yes, but you do *not* consider them either honest or actually doing something interesting in the first place [15:00]
asciilifeform: approx as 'interesting' as the yellowcake is to miner in gulag. [15:01]
diana_alt: asciilifeform: if anything, I'm actually curious how much/whether you worked with teenagers (not fixed age as such but rather as relatively new products of the current education system) [15:01]
asciilifeform: diana_alt: i've trained folx, but the only successes arguably were folx who already came with '3rd eye opened' [15:02]
asciilifeform: so i'm prolly the very last who should be consulted on pedagogic matters. [15:02]
asciilifeform: in my personal exp., the best folx were people who were drummed out of high school, and worked in warehouses, drove trucks, programmed in spare time. [15:03]
asciilifeform: … the worst ? folx with doctoral diplomas. [15:04]
diana_alt: asciilifeform: it's a bit wider net, namely misfits; because yes, if they fit well, it's because they are made of the same shit in which they fit; and shrysr is a misfit as far as I can see; you may say he tried so hard to fit in that maybe he already did too much damage to himself but that I can't tell yet; [15:04]
asciilifeform: ( these — often not only ~could~ not write even 'hello world', but would spew indignantly at even being asked ) [15:04]
diana_alt: and moreover, it's a chance he has; [15:05]
diana_alt: dunno; I …have a doctoral diploma [15:05]
asciilifeform: rright , this is not a verdict on shrysr , but general observation. [15:05]
asciilifeform: diana_alt: it, as you can see, isn't necessarily fatal. [15:05]
diana_alt: aha [15:06]
asciilifeform: there's been a sort of sea change tho, the folx getting these displomas now , tend to be products of 'asian' style schooling, where 'phf for washing glassware' [15:06]
asciilifeform: *phd [15:06]
asciilifeform: 'magistral disploma for spellchecking papers' [15:07]
diana_alt: perhaps I even said it before but basically upon getting my phd I was rather pissed off because "wtf, is THIS supposed to be an actual phd now?"; pretty much told my supervisor as such "your paper/title/writing on the door is not going to actually make me a professor" [15:08]
diana_alt: and yes, I expect it went even more downhill, there was no going uphill [15:08]
asciilifeform: and they grow, what, 1000 doctorates to 1 professorial pos. nao [15:08]
asciilifeform: here in usa i met quite a few folx who in fact leave their doctorate out of their cv. 'made me unemployable' [15:10]
diana_alt: hence my observation above: the only real criteria I can see is whether they fit in with the shit or not; perhaps there is some gradation there or some threshold or even some "exposure" but there's no way to tell that I can see; [15:10]
asciilifeform: to extend the disease model — i suspect the operative q is, how deeply into organism went the shit [15:11]
diana_alt: alternatively, it's the other way around: whether they are made of shit or only covered in shit [15:12]
diana_alt: you may say perhaps that I'm still gentle with the hose, I suppose [15:12]
asciilifeform: 'made of' case is unlikely to end up on your operating table, i suspect [15:13]
diana_alt: or at least last long, I would hope. [15:14]
shrysr: http://logs.nosuchlabs.com/log/ossasepia/2019-08-17#1000246 for one thing – those are prelim notes and there is a TODO marked there meaning I need to understand the difference. [15:28]
snsabot: Logged on 2019-08-17 14:51:34 asciilifeform: diana_alt: fella seems to have profound talent for reading text w/out ~actually~ reading. (for instance, escaped noticing that primary diff. b/w a vpatch and a heathen patch, isn't that it is pgp signed (heathens had pgp-signed patches 20y ago) but that it doesn't fuzzy-merge. [15:28]
shrysr: http://logs.nosuchlabs.com/log/ossasepia/2019-08-17#1000252 – i aint from the 'software' industry. in case you havent noticed. [15:29]
snsabot: Logged on 2019-08-17 14:58:29 asciilifeform: typically there is a stage, in cure, where patient 'opens third eye' and notices that entire collective output of 'software industry' from last 30y is rubbish, from win3.1 to 'docker' to etc. but not yet happened in this one, near as i can see. [15:29]
asciilifeform: shrysr: noticed. i think this is why diana agreed to teach you, generally people who 'from soft. industry' unteachable. [15:30]
asciilifeform: shrysr: iirc you were doing turbines at electric plants, if i'm not mistaken [15:31]
shrysr: well – i have in fact gotten the 'feeling' since i;ve been here about the software industry, but i do not know enough to have an opinion. [15:31]
shrysr: no i was using computational fluid dynamics to improve the desigs of centrifugal pumps. [15:31]
asciilifeform: shrysr: your particular risk is that you might fall into thinking that the 'software industry' is something like the turbine industry (i.e. turbines — work, moneys are paid for'em; money is also paid for ms-win, hence it too 'in some sense works') [15:31]
asciilifeform: aa [15:31]
shrysr: is that not so ? ^ [15:32]
asciilifeform: in reality tho, 'soft industry' is much more similar to pyramid scheme 'mmm' (or whatever its equiv. in your home country) than to turbines, airplanes, reactors [15:32]
asciilifeform: e.g. microshit, if it were turbine, would be one that turns maybe on odd-numbered wednesdays, and the bulk of effort of the vendor goes into making elaborate excuses for why, and offering service where sends dudes to turn crank manually if you really need rotation to happen [15:34]
asciilifeform: so, shrysr , indeed 'not so'. items like 'docker' are not honest industrial products, like turbine. instead they are instruments of fraud, where the illiterate buyer is led to happily pay to clean up mess that the software people ~themselves~ had made (and to clean up only half-way, requiring, naturally, the purchase of more pseudo-'product' of same type ) [15:37]
asciilifeform: it is not difficult to come up with example of 'simply don't MAKE the mess.' e.g. therealbitcoin, is built so that ~links statically~. and thereby can be moved to any linux box , of given cpu arch, without any kind of dockerism. and will run. [15:38]
asciilifeform: ditto e.g. 'M', ffa, etc. [15:39]
asciilifeform: can take the executable and put on any x64 linux box, and will run. doesn't care what else is on it, what libs user had, etc [15:39]
asciilifeform: dockerism, and 'containerization' in general, only seems appealing to folx who showed up after the frauds had already made static linking difficult (if you ask them, will say 'impossible', but it aint impossible — 100\% of my published pieces link statically) [15:40]
asciilifeform: they made it difficult, so that can then sell 'solution'. [15:41]
shrysr: I am following you. thats very interesting. evn in my still superficial exploratn of docker – i see that it can easily become a cascading layer of shit, and that dependency updates seem to have to trigger an image update – i.e it did not 'feel' right. [15:42]
trinque: heh, I'm here 5sec and already having an allergic response ! [15:42]
asciilifeform: see also mp's version of this explanation. [15:42]
snsabot: Logged on 2016-08-18 18:32:56 asciilifeform: 'The situation is somewhat akin to a retarded girlfriend trying to flood your apartment, that not only opens all the faucets and stops all the drains, but also takes the "extremely clever" measure of puncturing the water pipes, so she can then preciously inform you that "turning off the faucets won't help" and you must work with her to somehow create a raft out of your widescreen TV so as to navigate the marshy terrain that used to b [15:42]
asciilifeform: lol trinque [15:42]
trinque: shrysr: feel aside, the only redeeming thing about "docker" is the atomicity, which can be had for cheaper. [15:43]
shrysr: how did you mean links statically? [15:45]
asciilifeform: shrysr: i.e. 1 executable, carrying all dependencies inside it [15:45]
shrysr: http://logs.nosuchlabs.com/log/ossasepia/2019-08-17#1000261 – most of what i've learnt abt code has been on the side… my job(s) did not really require them. started with writing scripts to automated stuff… and wanting to link together computers in first salt mine as a cluster for simulations. [15:52]
snsabot: Logged on 2019-08-17 15:03:30 asciilifeform: in my personal exp., the best folx were people who were drummed out of high school, and worked in warehouses, drove trucks, programmed in spare time. [15:52]
BingoBoingo: shrysr: That's an honorable path many people who become good at computers take. It's also one that tends to fuel a lot of anger towards the software industry, because as you come to know what a useful computer should be doing for you, the tower of shit will be built to make the doing as uncomfortable as possible, should the doing be possible in the first place. [16:06]
shrysr: http://logs.nosuchlabs.com/log/ossasepia/2019-08-17#1000296 – When viewed in terms of a larger project (of many products) consisting of varied, interlinked specifications + with wheeling and dealing of all sorts – I've seen this in mech engg / oil and gas projects. The practices are not all necessarily evil, but a good many are pointless. In some cases – it is not something a discerning user happily gives [21:33]
snsabot: Logged on 2019-08-17 15:37:01 asciilifeform: so, shrysr , indeed 'not so'. items like 'docker' are not honest industrial products, like turbine. instead they are instruments of fraud, where the illiterate buyer is led to happily pay to clean up mess that the software people ~themselves~ had made (and to clean up only half-way, requiring, naturally, the purchase of more pseudo-'product' of same type ) [21:33]
shrysr: in to, but bargains are made, and even with the cognizance of the fraud you mentioned among people who make decisions (there are fewer still who would admit to it) – nothing much is done, the projects lumber on like listless buffaloes. [21:33]
shrysr: http://logs.nosuchlabs.com/log/ossasepia/2019-08-17#1000300 The magnitude of the lie is surprising to me, presuming I am able to truly understand the magnitude's nature. [21:39]
snsabot: Logged on 2019-08-17 15:40:58 asciilifeform: dockerism, and 'containerization' in general, only seems appealing to folx who showed up after the frauds had already made static linking difficult (if you ask them, will say 'impossible', but it aint impossible — 100\% of my published pieces link statically) [21:39]
asciilifeform: shrysr: dockerism is only the tip of the iceberg. absolutely same can be said for all 'abstraction layers' added by idiots. [21:44]
snsabot: Logged on 2018-10-25 15:10:38 asciilifeform: when you add compatibility spackle, serious reader is not saved from reading the thing you spackled over — on the contrary nao he has to read the ~original~ rubbish ~plus~ your spackle, however much it weighs. [21:44]
asciilifeform: shrysr: like every effective scam, this orchestra consists of very small number of conscious, cynical perpetrators, and a much larger circle of unthinking (and sometimes 'forced', 'salt mine gave orders… i only follow orders') chumps [21:47]
asciilifeform: shrysr: the objective of the perpetrator is to take his rubbish – that on its own merits, no one in his right mind would want to touch with a barge pole — and make it seem 'necessary for all work', in the process getting himself relevance (and eventually money) [21:50]
asciilifeform: shrysr: the algorithm is nearly always the same — the perp carefully breaks an open source program (typical example, the 'systemd' people) via social engineering 'here, let's all linux distros use this new, exciting thing instead of init'. then proceeds to offer 'fix' which consists of pile of garbage carefully designed to break compatibility of other programs with the old, sane system. then perp goes around 'fixing' these progs. [21:52]
asciilifeform: in the end, result is that pile of shit is 'glued with broken glass' , like vandals glue posters to light poles. [21:52]
asciilifeform: and any attempt to remove the vandalism, begins to look painful, the unthinking 'i only program for money, follow orders' types protest any such attempt. [21:53]
asciilifeform: shrysr: the #t log contains countless examples of this story playing out : 'systemd', 'gcc 5', 'python 3', quite a few others. [21:54]
shrysr: asciilifeform: are you yourself not forced to accept that rubbish frequently, like the spittoon? What is one to do now that this is known? build each piece of software / hardware yourself? It is not a path many can follow.. ? [21:54]
asciilifeform: shrysr: believe or not, there are actually plans to make new iron. [21:55]
asciilifeform: shrysr: in parallel with this, however, folx are digging through the wreckage of opensores ecosystem to find what may be salvageable. i recommend to get familiar with trinque's 'cuntoo' proj, read the discussions that went into it. [21:57]
asciilifeform: re irons, 'M' is a demonstration that it is possible to actually describe , reproducibly and compactly, a system which will run linux/gcc/various progs. [22:00]
asciilifeform: ( if you tried to do this with x86, the emulator would be considerably larger item than linux itself. whereas 'M' is ~13kB. ) [22:01]
asciilifeform: shrysr: the spittoon, if you can picture it, in fact describes a ~less~ dire predicament than that of the 'modern' linux user. slim's spittoon 1) contains ~finite~ amt of spittle 2) ergo he is able to swallow it all and eventually barf out [22:04]
asciilifeform: the 'dockerized' etc. software shitecosystem is a ~continuous~ spittoon. [22:04]
asciilifeform: 1st step, as exemplified by 'cuntoo', is to make the spittoon finite. [22:04]
asciilifeform: will bbl.x01 [22:11]

#ossasepia Logs for 16 Aug 2019

Filed under: #ossasepia,Logs — Diana Coman @ 9:42 pm
diana_alt: http://logs.nosuchlabs.com/log/ossasepia/2019-08-15#1000204 – reflecting is good and needed but take the time to link (and thus also check) conclusions back to the original starting point/thread as it were; [03:15]
snsabot: Logged on 2019-08-15 12:12:44 shrysr: http://logs.nosuchlabs.com/log/ossasepia/2019-08-15#1000188 Okay. I see what you mean. In general – I was reflecting that I seem to talk it out in reasonable detail my head, perhaps even all day, but not enough makes it to the screen / IRC / notes to justify the thread, assuming there was any validity to the thread to begin with. Or, too much makes it on screen bringing straw men to life. I've been thinkin [03:15]
diana_alt: http://logs.nosuchlabs.com/log/ossasepia/2019-08-15#1000209 – myeah; this is part of why I say that's it's unhealthy as an environment (and no, it's not just that particular company you are working for right now, it's unfortunately much more widespread than that) [03:18]
snsabot: Logged on 2019-08-15 12:13:51 shrysr: – This is hard to answer. I think I know, and I've had guidance in general from people I do trust. But there's a lot of 'variety' in experience and too much superficial show and tell (that is applauded to the roof WTF), and "data scientist" means a different things in different places, and few admit their approach to *not* be 'universal' or piled on a stack of unstable chairs. I also see deficiencies in [03:18]
diana_alt: http://logs.nosuchlabs.com/log/ossasepia/2019-08-15#1000212 – well, compare and contrast with here + #trilema and perhaps reflect a bit on why is that and where's worth it to put more of your time and effort into. [03:22]
snsabot: Logged on 2019-08-15 12:13:57 shrysr: full time). I think that staying here is dangerous because I work completely alone and its IMHO among the worst culture/admin/attitude i've seen… shitty pay etc. Not that I was expecting paradise – but there almost no intellectual camaraderie. I have Tonnes of freedom by virtue of working alone, but not probably not the kind conducive to implementing 'cool shit'. As such the ERP thing is not terrible… [03:22]
diana_alt: http://logs.nosuchlabs.com/log/ossasepia/2019-08-15#1000215 – exactly. [03:22]
snsabot: Logged on 2019-08-15 12:19:11 asciilifeform: http://logs.nosuchlabs.com/log/ossasepia/2019-08-15#1000200 << shrysr , the v.py you've been studiously avoiding, is in fact that 'non-docker solution to reproducible environment' . [03:22]
diana_alt: shrysr: http://younghands.club/2019/08/14/review-summaries-week-3-and-4/ – point 4 here is still missing, 2 days after "it will be updated tomorrow" [03:28]
shrysr: Task list published http://younghands.club/2019/08/16/tasks-for-week-5 [20:31]
shrysr: I got going with v.py and as mentioned in the task list – i will publish whatever has been done so far so that it can be reviewed more frequently. [20:44]
shrysr: My reflection about where to put my time and effort into: When I started out with computational fluid dynamics – it was relatively straightforrward as to what I had to learn and career direction etc. With 'data science' it has been very hard to see a clear path. i.e I realised quite some time back that I needed a mentor and guidance specific to this and most of my meat WoT were from traditional backgrounds [21:07]
shrysr: (non comp-sci). I found one in December 2018, and that course /mentor significantly boosted my progress in R, but it was not enough beyond a point, and there are deficiencies that I don't want to succumb to, as I've mentioned before. Even if this endeavour takes more time – I want to emerge with skills and knowledge at an in-depth level, and be ABLE to do excellent work with said assets…. and the merit [21:07]
shrysr: of these actions should facilitate reaching the next salt mine. This was always the 'cause'. Quick results are nice, but I prefer holistic and in-depth development, and I believe I typically try to take time to do so, sometimes in too much excess. I think I should focus much more on v.py and TMSR related stuff (whatever we agree upon here) and pick and choose specific topics outside this scope, as a part [21:07]
shrysr: of the weekly tasks. i.e actually submit to your guidance, and try to build up productivity systematically. [21:07]
shrysr: my WP allows me to auto approve your comments, but i don't see that option in younghands… ? [21:24]

#ossasepia Logs for 15 Aug 2019

Filed under: #ossasepia,Logs — Diana Coman @ 9:32 pm
shrysr: Re (1) : I did not 'run away' knees knocking in fear of v.py to docker, and don't understand the reference to making noise, unless you are calling it worthless, which I would disagree with. Yes, docker does some hard stuff, but so that I can do harder stuff, and work backwards when possible. In any case – it doesn't do something I've not struggled with?! BTW, I was reflecting that I could probably take [00:16]
shrysr: apart a smallish motorbike (except the engine). Today, I was learning about make files, reproducible research and will have a nice container up soon, and intend to use to enhance the documentation of a package to begin with. Another (similar to UMAP) problem popped up today – different results on different machines with supposedly the same algorithm and data (in the course community). Took up docker [00:16]
shrysr: because of several reasons, a bunch of which were in fact shared in the channel and should be mentioned in the posts as well: to produce reproducible results, and to construct my own docker toolbox to facilitate the above, as well as experimentation with different algorithms using a consistent and selected version of R and packages.. quickly evaluate / experiment to try resolve the problems mentioned [00:16]
shrysr: above. Beyond this – i prefer to use docker to host shiny apps. Shiny is a R package to build web apps. Its a cool way to showcase projects, and also to build tools at work. The above is supposed to be parts of a plan, atleast. [00:16]
shrysr: Re (4) : The website 'futzing' falls under the 'random emotion dominated jump' category, and could have been postponed as I had a working setup – but the end result is fortunately quite pleasing (to me) nevertheless and there were lateral benefits. However, the 'switch' to Docker was not random as it was already existing, as a part of a bigger plan. I believe I did say this? In fact, docker and v.py was [00:17]
shrysr: kindda the plan. [00:17]
shrysr: While I've come here to find meaning and like what you have to say and think I have the stomach for 'the red pill truth' and want to work; there also happen to be some immediate considerations for me, like – learning skills / concepts / developing a project portfolio which will get me to the next 'better salt mine', which I needed several months ago. I don't yet know what TMSR is, and I do not know where [00:17]
shrysr: this is headed, and obviously anything worth doing will take effort and time, which I will do – because I want to follow you. Just so you know – I did no background search on you before rating you 10. I believe in you, as my teacher more out of instinct and curiosity at this point and a very superficial glance at your profile – but the fact is that I need to be able to confidently state that I've 'herped [00:17]
shrysr: and derped' Docker and MANy more XYZ. Besides this – i am still 'herp derped' on my 'salt-mine slave' shit. All this being said – I think I need to adhere to (5) – X lines of code, take it slower and smaller. [00:17]
shrysr: Re (4) : I understand what you mean about keeping deadlines and appreciate the value of *any* constructive advice or attention given to me – and have written that I should have communicated that I'm working on something else – most of which is written in the summary I see. However, considering my flimsy reply earlier to lobbes comment as well as the fact that nobody here knows me + the fact that I am still [00:19]
shrysr: quite ignorant about what TMSR does / is and proabably rant 'I'm a lost headless chicken' a little too much: this is not the the first undertaking of my life, and in the past – while I did not 'change the world', and the solutions were nowhere close to being paragons of coding elegance – I have been able to single handedly drive and implement systems and solutions that had a significant impact, ahead of [00:19]
shrysr: time, repeatedly, among other things. At the end of 5.5 years – I made +5X the money I started with, purely based on performance and impact, in 2 completely different organisations, after which I shifted here. I'm not stating the length of my dick in any sense (though it was overall a good achievement in several respects) – only trying to convey that I am not and have not been utterly devoid of [00:19]
shrysr: professional standards nor am I ignorant of the impact of sticking to a deadline. Also in continuation to my Re (4) above – i do not yet see fit to abandon the things I was working on, before popping up in this channel… because I'm not in the situation wherein "today's 'salt mine' is quite acceptable and I can spend all my time searching more meaning in life". I still dislike sharing such details with [00:19]
shrysr: people I do not know, especially in a public, perpetually logged forum, and I questioned the need to explain all this – Nevertheless – I just did, perhaps more out of a interest to convey that I am not a worthless escape artist / vagabound – and a little bit about wanting to share it with you. [00:19]
shrysr: Re (3) : Okay for reading the article + summarising without any take. Re: causes and purposes – what exactly was the idea I utterly missed? I referenced a specific paragraph of the article talking about theoretically making decisions only based on cause and not allowing purpose to influence – and wrote about my 'struggle' in dealing with a 'doctrine' esque cause. I tried to say it is not practically [00:19]
shrysr: possible to follow a cause without a cost that you may be unwilling to pay in the present, or that it is not possible to eliminate purpose from a decision by virtue of being human in a society today. There is no control over purpose and the future, agreed – but it creeps into our decisions and I questioned whether it need be viwed as an impediment. It *was* intended to be my take, and not a summary of the [00:19]
shrysr: reference. If that was not well written – ok – I want to, and I will certainly improve, but I don't see how this message was entirely misplaced in the article, and neither can see it being so utterly devoid of connection to the reference article. Re: WoT – i need more exposure to the WOT and actually use it to understand better. [00:19]
shrysr: Acknowledgement: the reasons are addressed above. As such, the website 'futzing', though categorised random was also done to make it easier to post notes and summarise weekly, which I conveyed, to me it is a measure, though you probably don't see the value in that (either?). In reality, I'd forgotten that I had already written a summary a few days before and actually could have published atleast one [00:20]
shrysr: summary earlier. Atleast one more measure is that I've fixed locations/workflows for the notes I publish. Re (5): … all or nothing. Yes. I have strong tendencies to forget this… it is a problem. I was reflecting last night after the summary that it would be 'relieving' to reduce the magnitude and have shorter, consistent bursts. A target like X lines certainly lowers 'barriers' in my head. [00:20]
shrysr: Deadline – Sunday. For all of it. .. [00:20]
diana_alt: shrysr: nice outburst there :) [03:59]
diana_alt: beats keeping silent by a *large* margin, you know? [03:59]
diana_alt: that being said, it is way better to consistently keep in sync as it were rather than bursting when prodded more strongly [04:00]
diana_alt: shrysr: and you do seem to fight some strawmen there (e.g. I said you ran away from v.py because for a few weeks now *all* that comes out re v.py is that you find it hard; but nothing concrete, no "here's what I tried and where I got stuck", no "what does this do because I think it does X but Y", no nothing); onth during this same time I heard lots of all sorts that were not even mentioned as "my [04:08]
diana_alt: plan for this week" [04:09]
diana_alt: shrysr: do me a favour and give me a link to the topics/issues you are going to spend this week on; basically the currently missing point 4 in http://younghands.club/2019/08/14/review-summaries-week-3-and-4/ [04:10]
diana_alt: http://logs.nosuchlabs.com/log/ossasepia/2019-08-15#1000164 -> so put it explicitly and in some more detail in the plan, what! [04:13]
snsabot: Logged on 2019-08-15 00:17:47 shrysr: While I've come here to find meaning and like what you have to say and think I have the stomach for 'the red pill truth' and want to work; there also happen to be some immediate considerations for me, like – learning skills / concepts / developing a project portfolio which will get me to the next 'better salt mine', which I needed several months ago. I don't yet know what TMSR is, and I do not know where [04:13]
diana_alt: http://logs.nosuchlabs.com/log/ossasepia/2019-08-15#1000165 -> why exactly can't you confidently state? if you mean that I should approve /refrain from pointing out trouble *because* it lowers your confidence in stating/sends you into hiding, that's a. not helping you at all b. not going to happen. [04:16]
snsabot: Logged on 2019-08-15 00:17:49 shrysr: this is headed, and obviously anything worth doing will take effort and time, which I will do – because I want to follow you. Just so you know – I did no background search on you before rating you 10. I believe in you, as my teacher more out of instinct and curiosity at this point and a very superficial glance at your profile – but the fact is that I need to be able to confidently state that I've 'herped [04:16]
diana_alt: shrysr: understand that all the above and previous feedback is strictly what the words say, don't make strawmen out of it; in particular: if I point out where you failed, it does NOT follow that you didn't do anything RIGHT! and yes, I am quite sure that you *CAN* do things right and even very well otherwise – that's precisely WHY I keep you to a good standard and simply point out that so far re [04:23]
diana_alt: deadlines and feedback here you repeatedely failed (most probably out of too much enthusiasm if that makes you feel better about it, I am aware how easily that can happen but it is what it is.) [04:23]
diana_alt: re Docker: I said it makes noise because it brings with it a *lot* of dependencies and assorted things that a. will weigh you down b. you have no control whatsoever over c. sooner or later (and usually sooner) *will* break from under you and as a result force you to "upgrade" all sorts + import yet another spittoon of neverending shit. This is neither specifically Docker btw not news as such. [04:29]
diana_alt: the spittoon is a reference to "it's all one strand" illustrated with a great deal of matching-crudeness in http://www.loper-os.org/pub/the_spittoon.txt [04:30]
diana_alt: if you say that you *have to* drink this particular spittoon because of current/planned salt mine, it's your decision and stand by it for what it is. I'm simply making sure that you are aware – as much as possible – of what you are getting yourself into there. In other words, it flows from causes, not purposes: I'm saying it *because* I've seen it all before and I know the problems with it and [04:34]
diana_alt: *therefore* I can't keep quiet ("so you are confident in sharing" or whatever) and let you get sucked into it without even realising what's going on. [04:34]
diana_alt: I'm not saying it towards a purpose e.g. "so that he drops it" ; sure, I wish you were at the point where you decided to not waste time on it but if you are not there, you are not there and that's all. [04:36]
diana_alt: and the above being said, even dives in swamps can be useful learning (as long as you don't drown in there), sure; there is some potential trouble in that you may end up learning things to unlearn later too but such is life – things are neither ideal nor "as they should be" or something. [04:42]
shrysr: http://logs.nosuchlabs.com/log/ossasepia/2019-08-15#1000180 Yes. [12:11]
snsabot: Logged on 2019-08-15 04:00:33 diana_alt: that being said, it is way better to consistently keep in sync as it were rather than bursting when prodded more strongly [12:11]
shrysr: http://logs.nosuchlabs.com/log/ossasepia/2019-08-15#1000186 No I did not mean so and agree that would be counter-productive. [12:11]
snsabot: Logged on 2019-08-15 04:16:14 diana_alt: http://logs.nosuchlabs.com/log/ossasepia/2019-08-15#1000165 -> why exactly can't you confidently state? if you mean that I should approve /refrain from pointing out trouble *because* it lowers your confidence in stating/sends you into hiding, that's a. not helping you at all b. not going to happen. [12:11]
shrysr: http://logs.nosuchlabs.com/log/ossasepia/2019-08-15#1000191 That was a disgustingly fleshed out, but weirdly instructive story which made me laugh (a bit) and cringe (a lot). I'm not sure if I'll eat anything for awhile, but I get what you meant. That being said, – I can't think of any non-docker solution to a reproducible environment other than creating a 'frozen version', preferably under version [12:11]
snsabot: Logged on 2019-08-15 04:30:22 diana_alt: the spittoon is a reference to "it's all one strand" illustrated with a great deal of matching-crudeness in http://www.loper-os.org/pub/the_spittoon.txt [12:11]
shrysr: control. Can do that Immediately, lol. I used to do that with Emacs packages, but I'm not sure if it would work as intended with R across platforms, I think the paper below mentions somewhere it cant be. I thought the fundamental premise of using docker was to ensure/guarantee reproducibility of the computational env, in fact, just about to finish: https://peerj.com/preprints/3192/ , and atleast till pg [12:11]
shrysr: 19 – nothing is said about potential pitfalls. [12:12]
shrysr: http://logs.nosuchlabs.com/log/ossasepia/2019-08-15#1000188 Okay. I see what you mean. In general – I was reflecting that I seem to talk it out in reasonable detail my head, perhaps even all day, but not enough makes it to the screen / IRC / notes to justify the thread, assuming there was any validity to the thread to begin with. Or, too much makes it on screen bringing straw men to life. I've been thinkin [12:12]
snsabot: Logged on 2019-08-15 04:23:37 diana_alt: shrysr: understand that all the above and previous feedback is strictly what the words say, don't make strawmen out of it; in particular: if I point out where you failed, it does NOT follow that you didn't do anything RIGHT! and yes, I am quite sure that you *CAN* do things right and even very well otherwise – that's precisely WHY I keep you to a good standard and simply point out that so far re [12:12]
shrysr: I should schedule time-outs where I just take a deep breath, pause and unravel the threads to assess where I am w.r.t the starting point. [12:12]
shrysr: http://logs.nosuchlabs.com/log/ossasepia/2019-08-15#1000194 [12:13]
snsabot: Logged on 2019-08-15 04:36:15 diana_alt: I'm not saying it towards a purpose e.g. "so that he drops it" ; sure, I wish you were at the point where you decided to not waste time on it but if you are not there, you are not there and that's all. [12:13]
shrysr: – This is hard to answer. I think I know, and I've had guidance in general from people I do trust. But there's a lot of 'variety' in experience and too much superficial show and tell (that is applauded to the roof WTF), and "data scientist" means a different things in different places, and few admit their approach to *not* be 'universal' or piled on a stack of unstable chairs. I also see deficiencies in [12:13]
shrysr: the way people handle data science (both experienced and newbies) – they just 'use' algorithms and talk 'Business value, ROI' etc, and *often* avoid going in-depth in a lot of areas that I think are no less critical – it is a fucking science. I want to know ATLEAST the intuition of the math (preferably all of it) before using the algo… it has slowed me down very much and has needed more 'effort' and [12:13]
shrysr: energy to stay consistent / stable / motivated. I think that – if I drop all my efforts to learn and thus include these 'catchphrases' in my resume – i.e I take up v.py full time – it means staying in current salt mine for Atleast close to a year minimum before I 'find my feet' to the extent of landing another salt mine. It may well still take that long at my current rate of progress (if did not do v.py [12:13]
shrysr: full time). I think that staying here is dangerous because I work completely alone and its IMHO among the worst culture/admin/attitude i've seen… shitty pay etc. Not that I was expecting paradise – but there almost no intellectual camaraderie. I have Tonnes of freedom by virtue of working alone, but not probably not the kind conducive to implementing 'cool shit'. As such the ERP thing is not terrible… [12:13]
shrysr: but a lot of manipulation was done to reach that point, over months. [12:13]
shrysr: bblx01 [12:14]
asciilifeform: http://logs.nosuchlabs.com/log/ossasepia/2019-08-15#1000200 << shrysr , the v.py you've been studiously avoiding, is in fact that 'non-docker solution to reproducible environment' . [12:19]
snsabot: Logged on 2019-08-15 12:11:56 shrysr: http://logs.nosuchlabs.com/log/ossasepia/2019-08-15#1000191 That was a disgustingly fleshed out, but weirdly instructive story which made me laugh (a bit) and cringe (a lot). I'm not sure if I'll eat anything for awhile, but I get what you meant. That being said, – I can't think of any non-docker solution to a reproducible environment other than creating a 'frozen version', preferably under version [12:19]

#ossasepia Logs for 14 Aug 2019

Filed under: #ossasepia,Logs — Diana Coman @ 9:22 pm
shrysr: Okay- i just noticed there was an issue with my html export, and so the homepage was messed up. THis is now corrected and reposted on younghands. [12:59]
diana_alt: shrysr: realise that you *did not say anything* about what is going on [15:36]
diana_alt: so far you gave very little feedback on pretty much everything; and esp. when it's about deadlines, don't do this silent "I needed more time but I don't intend to …" [15:37]
diana_alt: 1. SAY it *as soon* as you realise you might need more time or whatever 2. concrete reasons *why* that happened 3. concrete measures you are going to take *so it does not happen again* [15:38]
diana_alt: shrysr: as long as you say something in chan I'll read it in the logs later anyway, no need to later ; but in any case, there is at least one other bot (iirc) that does later too and you can msg it directly if needed [15:42]
diana_alt: (i.e. even if it's not in chan) [15:42]
diana_alt: shrysr: re your summary: 1. wtf pouring time into Docker to start with? on one hand you run away from v.py because difficult on the other you jump on Docker because what? it "helps" you by making a lot more noise and apparently handling the "hard" stuff for you so "you don't have to"? [15:48]
diana_alt: 2. inspiration is 80\% perspiration or how was it; following blindly your emotions may be giving you a thrill but it's more likely to get you falling down from a cliff; [15:49]
diana_alt: 3. given 1 and 2 above, you should engage with this: http://thewhet.net/2013/09/your-feelings-are-out-to-get-you/ [15:50]
diana_alt: the trouble is that your previous attempts with causes and purposes and the wot were rather very poor on the engaging front i.e. you seem to have read the text but not really gotten the ideas, I don't even know exactly how is that possible [15:52]
diana_alt: so I'd say try first to write a summary of what that post is saying; i.e. do NOT add your "take" on it or whatever; just try to retell in your own words precisely what it is saying [15:54]
diana_alt: 4. you really sound like you overplan and you are using planning as a "virtuous excuse" i.e. a sort of "oh, I plan and therefore I'm not jumping about randomly" while you are exactly pretty much jumping about randomly;there is something to non-linear work but if you are *unable* to actually commit to some deadlines and hit them each and every time, it's basically hopeless to work with you. [15:56]
diana_alt: 5. re v.py just start with the first x lines of it: write a post in which you take each line and explain what do you think it does. [15:57]
diana_alt: understand that it does *not* have to be *all or nothing*; small steps is fine as long as you actually take them; and the longest travel is still made out of small steps or how did it go [15:57]
diana_alt: shrysr: ack the above and let me know what deadlines you set yourself for each task above (at 1 you need to write down the reasons and the measures; at 3 you need to read and write the summary of what is being said there; at 5. you need to go through some lines of v.py and explain what they do [16:00]

#ossasepia Logs for 13 Aug 2019

Filed under: #ossasepia,Logs — Diana Coman @ 9:12 pm
diana_coman: shrysr: what's COB? [04:57]
diana_coman: and you know, it was meant to be there by end of this past Sunday [04:58]
diana_coman: if Sunday doesn't work, then choose EXPLICITLY (say it!) a day that works and then STICK TO IT [04:58]
diana_coman: this is basic accountability, lesson 0.000001 [04:59]
lobbes: diana_coman: I think he may have meant "close of business" [09:59]
lobbes: but yeah shrysr, take it from me in that you don't want to develop the habit of saying you'll deliver and then… not delivering. Even if no one 'notices' it will hinder your ability to truly grow [10:01]
diana_coman: more to the point: every "silent" fail is a lie you tell yourself and as a result, the only thing growing is your capacity to fool yourself (which is anyway quite big for everyone to start with, not to mention a big drawback otherwise). [13:19]
shrysr: I just really needed more time to write things up. Its not something I'd want to do as a habit. [22:56]
shrysr: yes cob close of business. [22:56]
shrysr: I have posted the progress summary http://younghands.club/2019/08/14/review-summaries-week-3-and-4 [22:56]
shrysr: !tell diana_coman summary posted. [22:57]
shrysr: lolz I thought that might work. [22:57]

#ossasepia Logs for 12 Aug 2019

Filed under: #ossasepia,Logs — Diana Coman @ 9:02 pm
diana_coman: shrysr: where's the week 3 and week 4 progress summary? [03:45]
shrysr: diana_coman: working on it.. You will see it by COB. [19:46]

#ossasepia Logs for 11 Aug 2019

Filed under: #ossasepia,Logs — Diana Coman @ 8:52 pm
diana_coman: shrysr: done with the blog-futzing? ~16hours left for that. [03:18]
diana_coman: !q help [10:21]
snsabot: diana_coman: my valid commands are: seen, s, src, help, uptime [10:21]
diana_coman: !q src [10:21]
snsabot: diana_coman: my source code can be seen at: http://www.loper-os.org/?p=3452 [10:21]
diana_coman: !q uptime [10:25]
snsabot: diana_coman: time since my last reconnect : 1d 12h 33m [10:25]
shrysr: diana_coman: almost….. n i know you are going to laugh. [10:35]
diana_coman: a few hours left; and you also need to publish the week summary for this week & past one that you missed :D [11:02]
diana_coman: tests botx01 [11:02]
diana_coman: asciilifeform: actions seem to show in logger as text said rather than in any way different; is that intended? I don't quite grok what's the thing with *nick then? [11:03]
diana_coman: also: should there be a space or not? i.e. *nick or * nick? (I'm awk-ing that log-before-the-bot file) [11:04]
diana_coman: shrysr: hopefully it's plenty clear that past midnight GMT, further site-messing means I'll totally ignore your site and read *only* what you publish on younghands.club [11:05]
asciilifeform: diana_coman: it's intended. i wrote bot so as to 'store all possible' bits, but for www display i cribbed phf's styling, which had no scheme for marking 'actions'. thought 'will devise one later, if anyone asks' [11:20]
asciilifeform: diana_coman: if you have idea for how to mark'em in the log, with minimal mutilation, plox to offer vpatch, i'ma read & deploy [11:21]
shrysr: diana_coman: its cleaaaar. the site as it is – is a reasonable compromise. It is not exactly what i set out to do…. but i think it still ticks the major boxes I wanted. Had to go back to WP and ditch hugo (only due to lack of skills+patience+time)… but i learnt a lot in the process and hopefully, will complete my notes so i know wtf i have been obssessed abt. [11:26]
shrysr: i relied on help from other IRC channels… and its been so nice to have ppl respond and to connect with them, based on 'work', rather than the meaningless posting on linked in. It wd not have been possible without that. [11:30]
diana_coman: asciilifeform: ah, I see; meanwhile I looked in the raw txt from the dump of btcbase and figured out re * too: it's meant to be a field by itself (and that makes it even easier), so cool. [11:30]
diana_coman: shrysr: meaning is much nicer than no meaning, certainly. [11:31]
diana_coman: and yes, linked in and dev.to and all the rest are mainly advertisement places – i.e. most there "talk" to fill the void, not because they have something to say; doh. [11:32]
asciilifeform: diana_coman: see 'eat_dump.py' also, it correctly eats the format. [11:32]
diana_coman: (for extra lulz, check out what they call "strategy" – it's ~= lemme post this in 5 places so it counts as 5*activity) [11:32]
diana_coman: ofc 5*noise is just…a lot more noise, but who cares, right? [11:33]
diana_coman: shrysr: while in general I'm all for "anything you do, it's STILL something learnt", the trouble is that you might end up learning stuff that you'll have to …unlearn later on. [11:34]
shrysr: i see what you mean. THe indieweb concept actually helps with dealing with the noise, and increasing meaningful interaction across platforms. Especially after coming on to IRC – i'm becoming increasingly irritated with linked in. Unfortunately, it also seems the 'norm' that you should have a github and linked in account … from recruiters who typically do not understand most things anyway. [11:44]
shrysr: in the whole process, I helped sort of discover a bug in the indieweb-wordpress plugin too ! [11:49]
shrysr: diana_coman: well technically, i 're-posted' my blog post on dev.to and thats how I got to connect with you and get onto IRC… and then subsequent activities – all of which has led to a lot of …'changes'. The noise helped ..! [11:56]
diana_coman: shrysr: the only unfortunate part is that you don't yet have (or perceive) any other option than to work for those "recruiters"; it's not that they don't understand, no; it's inevitable that they "require" precisely nonsense; but this is deeper and atm you still have to dig yourself out of *previous* holes you got yourself into, so it will wait. [11:57]
diana_coman: shrysr: eh, you realise that it's because I wasted some time in that shithole, precisely trying to see if there was anyone lost in there [11:57]
diana_coman: not as much "the noise helped", not at all [11:57]
diana_coman: the noise almost drowned you. [11:58]
shrysr: Its true. I was drowning…. a lot more than I let on. I hope at some point I find options/answers to free myself of those recruiters. [12:06]
diana_coman: asciilifeform: http://p.bvulpes.com/pastes/LkNwh/?raw=true -> old log for the logger; let me know if you'd rather I upload the file somewhere or something? [12:48]
diana_coman: shrysr: that's the whole point in growing here :) ; but it takes time, so don't despair. [12:49]
asciilifeform: diana_coman: loox good, lemme test on staging box and meanwhile deedbot it, i'ma feed it into dulap then [12:52]
shrysr: what does plox mean ? [12:53]
asciilifeform: diana_coman: eats w/out issue [12:54]
asciilifeform: diana_coman: feel free to deedbot signed copy [12:54]
diana_coman: shrysr: well, it's a version of please with a hint of ….depending on exact context; does this help tremendously? [12:56]
diana_coman: may be playful, may be parodic, may be pointing out silliness, quite the range [12:57]
shrysr: i've seen asciilifeform use it in the logs and could not understand it. [12:57]
diana_coman: shrysr: base meaning is still please, that much is safe to say. [12:59]
shrysr: thats interesting. [12:59]
shrysr: plox = please + herp derp ? [13:00]
diana_coman: shrysr: ahaha, can be in some cases, yes; can also be for instance please + wtf_is_this_not_done_already [13:00]
diana_coman: human language, you know? viciously NOT independent of context [13:01]
diana_coman: and molded by shared experience, even of the online sort [13:01]
asciilifeform: diana_coman: #o logs imported. [15:15]
asciilifeform: diana_coman: lemme know if you notice anyffin missing. [15:16]

#ossasepia Logs for 10 Aug 2019

Filed under: #ossasepia,Logs — Diana Coman @ 8:42 pm
diana_coman: shrysr: I can see the trackbacks [04:37]
diana_coman: shrysr: fix your rss links re both url (aka what it was, stop "innovating" the standard, wtf) and actual content (the page is malformed, lol) [04:39]

#ossasepia Logs for 09 Aug 2019

Filed under: #ossasepia,Logs — Diana Coman @ 8:32 pm
diana_coman: lobbes: did you ever saw the questions/feedback of yesterday? [08:43]
lobbes: diana_coman: where was this again? blog or in a castle? If you point me, I will read [08:56]
lobbes: or perhaps already read! [08:56]
diana_coman: here; not yet in the logs as the bot was not yet on [09:05]
diana_coman: lemme fish it out [09:05]
diana_coman: 11:36 diana_coman: lobbes, looking through your http://blog.lobbesblog.com/category/reporting/ posts there are 2 things that strike me: 1. some seem to just slip off without clarity as to what happened/what's your decision there (e.g. pizarro ads – did you hit a wall with it? did you postpone it (when/what)? did you abandon it? what exactly is it and from what specific causes?) 2. it doesn't seem all that clear/pointed anywhere: how do yo [09:06]
lobbes: ty, this is exactly the feedback I seek. Yes, I think you have a point there. I have this habit of not being clear in both my causes, and my results it seems [09:20]
diana_coman: lobbes: did the above get cut? or is it just the logger? [09:21]
diana_coman: it read: clear/pointed anywhere: how do you choose your hopper items anyway? [09:21]
lobbes: it was indeed cut [09:22]
diana_coman: kk; at least no bug to report re logger, heh. [09:22]
lobbes: re: how do I choose… I think I try and go with whatever seems the 'most pressing need for the republic that I can also do with the skills I have' [09:24]
lobbes: but perhaps I need to refine my choosing methods here. problem with the pressing need qualifier is that needs are always changing by nature [09:24]
diana_coman: aha; and that you keep the whole thing entirely out of yourself which is not that good for building yourself up [09:26]
diana_coman: basically yes, answer the trumpet calls by all means but that shouldn't be *all* you do [09:27]
lobbes: this is very true. I guess I have trouble knowing when I should ignore certain calls [09:28]
lobbes: and when I should just stick to what I'm currently working on [09:28]
diana_coman: the 1st point is to build yourself up as roundely as possible (and as a side effect this will inevitably *also* position you in a much better place to help/answer pressing needs) [09:29]
diana_coman: I don't know if it's about ignoring really, I wouldn't go that far; but for one thing pressing needs can't really make for a full, sane path just in themselves, it's a bit like living for emergencies only [09:31]
lobbes: this makes sense [09:31]
diana_coman: and for the other thing offering is not just a "good intentions" thing – it's a commitment [09:31]
diana_coman: for that matter it's rather easy to end up in hot soup *because of * good intentions (that were just that, wanted to but had poorly evaluated/bit more than could chew) [09:32]
lobbes: yeah, I think the Inca state likes to breed this sort of "a good worker says yes to *everythin*" kind of toxic thinking [09:32]
diana_coman: there is some space for "bit sligthly more so as to motivate and advance faster" but it has to be still a considered choice I'd say [09:33]
lobbes: yeah, that's kind of it too. I figured that I need to grow, so I'd challenge myself. Buuut I don't think I thought things through enough in most cases [09:33]
diana_coman: quite possibly yes, I can see that (a combination of "saying yes is easy" + "no real consequences if not delivering" + "works means sort of ") [09:34]
diana_coman: growth yes, but it has to build on where you are, it can't just jump 10 levels up all of a sudden "because that's what's needed right now" [09:35]
lobbes: speaking of work that has no real consquences of not delivering, I got to head to the mines. BUT thank you very much already for helping me think through this stuff. It is appreciated [09:35]
lobbes: and yeah, realistic growth is the key, huh [09:35]
lobbes: I will be reading these logs now that they exist! [09:36]
diana_coman: in other words: the world (and tasks) is not flat and if you don't even see the mountain, it just means you are actually …underground, not yet at ground level even [09:36]
diana_coman: kk [09:36]
shrysr: diana_coman: i see some glimpses of the mountains from my underground lair [10:39]
diana_coman: shrysr: so come out to the light! heh [10:44]
shrysr: trying to! what did lobbes mean by heading to the mines ? [10:47]
diana_coman: shrysr: he went to his place of employment aka "the mines" ; also known as "the slave galley" [10:48]
diana_coman: if you are not familiar with it, salt mines (and rock quaries or similarly hard labour) was done with convicts mainly/only [10:49]
diana_coman: you call your salt mines "the office" iirc [10:49]
shrysr: ah. I did not know it was done mainly/only with convicts [10:50]
diana_coman: european history; USA equivalent would be cotton-picking (aka slave labour, obv) [10:51]
shrysr: :D yes i do call it the office/. [10:53]
shrysr: diana_coman: did you get a pingback notification? [14:57]
shrysr: I see you got my earlier pingback for http://ossasepia.com/2018/03/30/my-first-2-years-as-cto-for-minigame/ … did you get another just now ? [14:59]
asciilifeform: shrysr: 'salt mine' is traditional parlance for where (usually) programmer does ultimately pointless, backbreaking sweat, so as to pay for food/flat. (an especially odious saltmine may be next level, 'gulag', see e.g. .) [15:02]
diana_coman: shrysr: no notification of it at least; also no notification of your post – did you change your rss link for posts and/or comments? [15:16]
shrysr: diana_coman: how about just now? its just a test, for another article [15:29]
shrysr: the rss may have changed.. right now it is http://s.ragavan.co/index.xml i tried this on my feedreader and it works [15:30]
shrysr: diana_coman: it should be working actually >> see my webmention linking on this post https://scripter.co/splitting-an-org-block-into-two/#webmentions [15:32]
diana_coman: shrysr: eh, so what, you imagine I jump and change every time you futz it about ? [15:39]
diana_coman: will bblx01 [15:39]
shrysr: :( futz it about is so crude … i am making it awsome ! wtffffffff [15:42]
diana_coman: fff is for futz-futz-futz, obv [17:13]
diana_coman: but seriously, either you get the rss links to what they were or whatever, I'll see it when it happens. [17:13]

#ossasepia Logs for 08 Aug 2019

Filed under: #ossasepia,Logs — Diana Coman @ 8:22 pm
diana_coman: shrysr: ugh, so auto-generator writes on your blog now? what's the point of having s.ragavan.co in there anyway if then it's 308g0wrjg33t398? [02:46]
diana_coman: moreover, the blog is a *record* of history; you *may* adnotate and add to it and even mark parts as obsolete/striked through/whatever but you may *not* unhappen them wtf [02:47]
diana_coman: lobbes, looking through your http://blog.lobbesblog.com/category/reporting/ posts there are 2 things that strike me: 1. some seem to just slip off without clarity as to what happened/what's your decision there (e.g. pizarro ads – did you hit a wall with it? did you postpone it (when/what)? did you abandon it? what exactly is it and from what specific causes?) 2. it doesn't seem all that clear/pointed anywhere: how do you choose your hopper items anyway? [06:36]
shrysr: diana_coman: ok! [09:09]
diana_coman: shrysr: what's your plan for the rest of this week as so far the *previous* Sunday weekly report is missing, your blog is …changing shape(??) and messing about again, there was still nothing further after the "got sucked into office work suddenly and didn't even surface to say it but won't do that again" [09:13]
diana_coman: wtf is ghostwriter? [09:13]
diana_coman: shrysr: did you just delete the latest posts on your blog?? [09:16]
shrysr: diana_coman: no – nothing is deleted — i'm just trying out stuff on the server. The blog is changing shape yes. I want to implement https://mxb.dev/blog/using-webmentions-on-static-sites/ and stick to static sites. Using webmentions solves the issue of comments / trackbacks, and will enable me to post, as well as share notes in a much more convenient manner. No xmlrpc… just rsync and hugo and emacs and [10:41]
shrysr: figuring out how to enable web mentions without any 3rd party services. The plan for this week is to set this up. I'm capturing my notes and also have some progress summaries. Essentially – I have my notes and files setup such that something like this https://braindump.jethro.dev/ is easily possible. I want to share all my notes easily. My goal this week is to finish setting up the above, and by the end of [10:41]
shrysr: the week to publish updates on stuff done so far, and resume the pattern. [10:41]
shrysr: by implementing the above – you will have a better picture of my activities, and the process will no longer suffer lag between 'writing' and 'publishing'. [10:46]
shrysr: lol ghostwriter is the themes name…. all of that will change. dont worry. [10:47]
shrysr: rather it is already changed. Just not pushed on the server yet. [10:48]
diana_coman: shrysr: mk; but note that you're back to futzing with the blog so it better be indeed finished by this Sunday and really finished (i.e. you don't come back to it yet again in a few weeks time because x and y) [10:52]
shrysr: yes. I completely agree. I just *need* to set this up… i've already figured out most of it, and have documented quite a bit as well. I intend to finish before sunday… actually quite excited about the impact. I have wanted this particular kind of publishing setup since atleast a year… its noot like i havent tried before – but I cdnt see the solution. maybe now my fluency in handling the vps by ssh is [11:05]
shrysr: so much better now… or maybe my attitude has improved…. i dont know. I dismissed this webmention thingy as being too complex and went to wordpress..but turned out… it was not that complex, and actually kind of syncs with the things we talk about (from what i understand so far). [11:05]
shrysr: besides this >> i've also made a lot of progress with learning Docker… I was sort of partly into a docker course when i joined ossasepia. though I know it is a dependency – there are some strong possibilities when there is fluency in teh basics… i can whip up a 'standard' test environment to quickly test out something related to data science, or even a nginx container to serve something and so on… i [11:13]
shrysr: can even run a git server / pastebin etc via docker. I will be done with the course this week… but the point is i am fumbling a LOT less when i see a docker command. Unlike python – R does not really have a good 'package manager' or system. I have been concerned about the reproducibility of results. [11:13]
shrysr: i.e no virtualenv in R. Docker can alleviate this to a decent extent. Besides – using a docker image, i was able to easily access all the base R and ML libraries on the server… the conventional method of installation is very cumbersome.. it actually failed the last time because I did not have enough swap / RAM. Had no issues with the dockerised approach, though I did have to increase SWAP for some [11:20]
shrysr: libraries. [11:20]
diana_coman: well, it's a vps and therefore smoke and mirrors/nothing yours anyway so there's nothing *more* to going all the way with the postmodernism at least; hopefully you don't intend to actually *rely* on the whole thing as something in anyway solid or even still working in a year's time (or whenever one of the chairs in that pile you rely on for "quick" gets knocked over/taken out) [12:17]
diana_coman: but falling over is the best way of learning so go ahead, you still have a few days until this Sunday [12:18]
shrysr: not all smoke and mirrors, other than not owning the VPS! just a few strong chairs… i will write about it and you will see!! [13:28]
diana-coman: lolz, kk [15:27]
diana-coman: !q help [15:27]
snsabot: diana-coman: my valid commands are: seen, s, src, help, uptime [15:27]
diana-coman: and here: thank you asciilifeform ! [15:28]
asciilifeform: np diana_coman [15:29]
diana-coman: !q uptime [15:29]
snsabot: diana-coman: time since my last reconnect : 0d 0h 17m [15:29]
diana-coman: !q s chairs [15:30]
snsabot: 1 results for "chairs" in #ossasepia [15:30]
diana-coman: asciilifeform: does it eat a txt log file (irssi-made)? [15:30]
asciilifeform: ok username thing fixed, i think [15:36]
asciilifeform: diana_coman: it eats phf's format. [15:37]
asciilifeform: 1s, will illustrate: [15:37]
asciilifeform: e.g.: 1926177;1564727032;mp_en_viaje;in the meantime, everyone's invited on trilema & other blogs. [15:37]
asciilifeform: first column is absolute index (per chan) ; then unix epochal time ; then speaker ; then payload [15:38]
asciilifeform: when 'action' (slash-me) speech, there is a * before name of speaker. [15:38]
asciilifeform: that's the whole format. [15:38]
asciilifeform: earlier i asked lobbes to bake a znc-format eater, i have a znc that only missed maybe half hr of log in entire year, could fill in e.g. #piz [15:39]
asciilifeform: ( though i only joined yours recently, so do not have full back archive for it , with which to fill ) [15:39]
asciilifeform: diana_coman: i'ma genesis the logger, in day or so , when i'm satisfied that it and the bot aint catastrophically braindamaged. [15:41]
asciilifeform: then you can also stand up own logger, and not have to rely on mine or anyone else's [15:41]
diana_coman: looking forward to it [15:45]
diana_coman: by the sounds of it, at most I might need some awk to turn my local log in something the bot can eat so no big trouble there either [15:46]
asciilifeform: diana_coman almost certainly [15:47]
diana_coman: ftr and use of noobs, channel logs are at http://logs.nosuchlabs.com/log/ossasepia [16:08]

#ossasepia Logs for 07 Aug 2019

Filed under: #ossasepia,Logs — Diana Coman @ 8:12 pm
shrysr: i know we've discussed this before – but i wanted to ask – is a url like this also not acceptable? https://s.ragavan.co/2019/01/19/32266f09-c9b9-48ff-9c48-e2348eeda33d/ – so the date's there and the last component is a unique ID .. the reason is that it is auto-generated and even if I change the title, or move the piece around in my files – the id stays the same. [21:13]
shrysr: so the links stay valid. especially internally. [21:26]

#ossasepia Logs for 05 Aug 2019

Filed under: #ossasepia,Logs — Diana Coman @ 8:02 pm
lobbes: diana_coman: since my first deadline of Aug 4 has come, I want to give you an update on the logotron progress thus far: [00:14]
lobbes: I believe I have the initial php bits figured out. However, I underestimated the complexity of the permissions system in postgres. Specifically, since the intent will be to have a logbot and log viewer on the same server, I want to be sure I really understand the permissions so that the web-facing bits do not interfere with the logline snarfing bits. I'll give you daily updates on my progress as I work [00:14]
lobbes: through this understanding. [00:14]
lobbes: In the meantime, do you care if I bring auctionbot into this channel? Since it sits on top of the logbot code, I figure it can start snarfing loglines while I research. (It will not list auctions in this channel unless I explicity tell it to, so no worries of spam) [00:14]
lobbes: bbl:sleep [00:15]
diana_coman: lobbes: you can bring auctionbot in here, sure [02:25]
lobbes: excellent. ty! [07:15]
lobbes: http://ossasepia.com/2019/08/03/silently-unhappened-on-theodinprojectcom/ << btw comment in modqueue [07:16]
diana_coman: lobbes: good you said something – I had to fish it out of the spam (not sure why it went there directly, hm) [07:59]
diana_coman: shrysr: are you still alive ? [08:07]
shrysr: diana_coman: yes, i am. sorry. I've had to catch up on office work and have not made much progress with v.py, and my daily writing has been lagging as well. [11:39]
diana_coman: shrysr: it can happen but the important thing is: SAY it; as quickly as you notice it [11:40]
shrysr: yes.. i apologise. I was going to update you and got distracted. [11:40]
diana_coman: far better to say it upfront than to have me either shout after you as above or otherwise… assume whatever I might end up assuming instead, you know? [11:41]
shrysr: yes [11:41]
diana_coman: ha! what was the distracting thing? [11:41]
diana_coman: anyways, glad to hear you're still alive :D [11:41]
diana_coman: re v.py, since it seems to be a hard task, maybe write down what you did /tried so far and where/what got you stuck; you might even get some help then [11:42]
shrysr: yes, i will need help :D .. but I do think i can push a little further, and want to. [11:45]
shrysr: the distracting thing!! lol what is not distracting :D as you've said i try to optimise when I shdnt, and if i remember right – i thought I should get something done and then report, and then thought i should send out an interim update … and then went on to something else to finish first. God knows what at that time. [11:48]
diana_coman: shrysr: sounds like a mess; report is fixed: set aside a day and *stick to it*; i.e. *every week* on Sunday you write down on younghands.club the summary of what you did during the week and how it went [11:52]
diana_coman: it has nothing to do with that first or the other second [11:52]
diana_coman: the above is the minimum and *fixed* [11:52]
diana_coman: if you want in addition to set yourself a daily blog post too on whatever you worked on during that day, fine [11:53]
diana_coman: but again, it's a fixed thing, non-negotiable once set; whatever it is you did or did not do, goes in there [11:54]
shrysr: :) okay. Understood. [11:54]
diana_coman: the point of those posts is to *record what happened* , not to paint you in some light or another [11:54]
shrysr: okay. [11:55]
shrysr: i will do it. [11:56]
diana_coman: cool then [11:56]
shrysr: diana_coman: where are you in UK? hehe I did my masters in Leeds uni, but have only visited birmingham. Not even London. [12:00]
diana_coman: shrysr: I'm in Reading [12:08]
diana_coman: well, near Reading [12:08]
diana_coman: why so travel-adverse shrysr ? [12:08]
diana_coman: shrysr: where are you from more precisely? [12:09]
shrysr: Well in the past – mostly because of the money. I guess nowadays its also abt the effort involved in planning stuff out. hey at that time, i had no money left over after the drugs and cigs. [12:11]
shrysr: I'm from the south of india. You could say the city Chennai. However, I was born in Mumbai and we've been there for a longgg time. [12:12]
shrysr: so essentially… i live in Mumbai, India. [12:12]
diana_coman: shrysr: how often do you go back to India nowadays? (re no money, students tend to not have money but yeah, usually through their own doing, lolz; basically drugs and cigs were more interesting than london which tbh sounds like a rather sensible assessment for that age) [12:16]
diana_coman: not to mention that I can't honestly point out something you "missed out" on by not going to London; onth missing out on trying unhealthy stuff while young enough to make it through kind of sucks because trying it later is not really a viable option [12:17]
shrysr: its been 2 years since I've been to India… i.e I havent been back since I shifted to canada. My sister lives in New Jersey. My parents visit her now and then.. I met all of them there last year, and they are visiting her again around december. [12:21]
diana_coman: oh, visiting the poorer shithole to the south, I see [12:23]
shrysr: well she has a kid… its more entertaining i presume for them. I'm quite certain that they w [12:24]
diana_coman: your line got cut at w [12:24]
shrysr: they would not want to be where i am now. :)) [12:25]
diana_coman: lol; that's at the end of the day their problem though, not yours [12:26]
shrysr: well for one thing they wdnt fit into my tinyyyyy motel room.. Hey i'd like them to hang out with me, so its kindda my problem too. [12:28]
diana_coman: part of being an adult is that you don't care anymore about your parents' opinions and ideas as – hopefully – you outgrew them essentially [12:28]
diana_coman: well, so go back to India from time to time, you get to hang out with any and all friends still there too, much better anyway [12:28]
shrysr: yes. thats the plan. hmm.. i agree there has been a growing disconnect, but i still consult with them on most major decisions… there's nobody else i can trust completely. [12:31]
diana_coman: I get that you "can trust" as in they want the best for you; the trouble however is whether they still can evaluate correctly that "best" given that you are outside what they actually know, it's pretty much this [12:33]
diana_coman: and if they are fully honest, the truth is that "best for you" is inevitably being able to take and stand by your major decisions on your own [12:35]
diana_coman: even if you have to fall down a couple of times and hurt yourself until you get there – it's still learning [12:35]
shrysr: they can't … and you are right. thats why i said there is a growing disconnect… as such even before i came out here – they always insisted that the decision should be mine. [12:35]
diana_coman: the other way of looking at it is that it's increasingly a burden on them – having to share responsibility for what it's not their lot; anyway, good on them and on you for stating that much [12:37]
shrysr: i.e they acknowledge that i know the situation better than them, and I shd move in the direction needed. in those cases my sister has been a lot more helpful since shez been out here a lot longer. [12:39]
diana_coman: lol; gathering information is one thing; making decisions a different step though [12:40]
shrysr: :D yes [12:41]
diana_coman: well, you know, let me know if I should instead talk to your sister :D [12:41]
shrysr: lol she has her hands full with my 3 year old nephew who is ridiculously intelligent and cunning.. [12:57]
diana_coman: the point there is whether you are on her hands too or on your own [13:00]

#ossasepia Logs for 03 Aug 2019

Filed under: #ossasepia,Logs — Diana Coman @ 7:52 pm
diana_coman: shrysr: deedbot can notify me (if I ask it to follow the comments feed), yes [03:34]
diana_coman: welcome ave1 [03:35]
diana_coman: apparently feedbot, not deedbot [04:13]
diana_coman: shrysr: how's the v.py stuff going? [08:41]

#ossasepia Logs for 02 Aug 2019

Filed under: #ossasepia,Logs — Diana Coman @ 7:42 pm
diana_coman: shrysr: validator.w3.org for instance reports 2 a tags that are messed up [02:57]
diana_coman: shrysr: ugh, now I don't even know if my comment made it to your blog or not; ftr here it is: http://p.bvulpes.com/pastes/VOALe/?raw=true [05:35]
ave1: hi [15:00]
shrysr: hi ave1 [16:12]
shrysr: diana_coman: I got the comment , and responded – on causes and purpose ? [16:13]
shrysr: diana_coman: do you get a notification of response to your comment ? [16:15]
shrysr: AHHH okay i see what you mean. yes. the time stamps get included for each message which is not nice though [17:16]
shrysr: sorry wrong channel. lol. [17:16]

#ossasepia Logs for 01 Aug 2019

Filed under: #ossasepia,Logs — Diana Coman @ 7:32 pm
diana_coman: shrysr: no, lol; nobody can a generic thing like that really; ask better questions, you know? [03:06]
shrysr: diana_coman: lol.. i had to ask. [09:06]
diana_coman: shrysr: ask but learn to ask *better questions*; that thing there as it stands is on the level of 5 year old "questions" [09:14]
diana_coman: shrysr: basic logic: what does it take to invalidate a strong statement like that ("all")? [09:15]
shrysr: diana_coman: the strong statement being 'I can hack into anybody's computer' ? [09:19]
shrysr: well in front you… i do feel like a 5 year old. [09:20]
diana_coman: young again! :)) [09:22]
diana_coman: shrysr: and yes, the strong statement is "can hack *any* computer" [09:24]
shrysr: not being able to hack a single computer you come across? [09:25]
diana_coman: "strong" in there refers to a claim covering a full set [09:25]
diana_coman: not even come across; but simply a single negative example is *enough* to invalidate that [09:25]
diana_coman: conversely, to actually answer yes, one would need a *proof* that "for any X a computer, can hack it" [09:26]
diana_coman: before you can even attempt such a thing, you'd need to define computer and hack at the very least and even then I don't see how you'd go about any sort of actual proof [09:28]
shrysr: okay! :D I get you. Can you hack into my computer ? [09:29]
shrysr: and hack as in – gain control of it. [09:29]
diana_coman: lolz, no idea nor interest really; but why this interest in "hacking"? [09:29]
diana_coman: it's not one of those kids "hacking clubs" or anything [09:29]
diana_coman: note also that if I do have control of that computer, it's by definition *my* computer, not yours [09:30]
diana_coman: so you are effectively asking me if your computer is really *your* computer [09:30]
shrysr: :)) [09:30]
diana_coman: well, I don't know; is it? [09:30]
diana_coman: you'd better make sure it is yours if you work with it, I'd say. [09:31]
shrysr: its not my computer either… office :P [09:31]
diana_coman: well then, it's theirs so at least not your problem as it were but anyways. [09:31]
diana_coman: shrysr: why this sudden interest re hacking though? [09:33]
shrysr: well – hacking was always fascinating. For fun…really. Though I did not take a single concrete step towards learning how I cd do so, except signing up for some ethical hacking courses on udemy (and never doing them). I asked the question when I suddenly recalled that I met a guy 10+ years ago…. he logged into my facebook account, in front of me, on a laptop I'd never touched. He asked me to enter my [09:36]
shrysr: ID, turned around… typed in stuff and then there it was. [09:36]
diana_coman: shrysr: the boring part about hacking though is that it's ultimately this sort of "find the magic incantation that works…for now"; and then repeat; it is true that the whole mess that is "computing" nowadays is full of holes and so lots of incantations to find but …it still sounds like a terrible waste of time to me unless you really are actually decided to burn everything down [09:43]
diana_coman: (nothing wrong with that, quite on the contrary but it's the only case when it's worth it) [09:44]
diana_coman: shrysr: at any rate, so did you find out at least how to log in to any facebook account? [09:44]
shrysr: no. he wd not tell me. [09:50]
diana_coman: shrysr: magic incantation, neh; ofc won't tell [09:51]
diana_coman: basically "power" through obscurantism; for as long as you make sure you live among idiots, you may be "powerful"; sounds like a terribly poor deal to make this being the mage of the idiot tribe but what do I know [09:52]
shrysr: yea… and he wasnt the type I wanted to be friends with despite a GREAT deal of interest at that time. [09:52]
shrysr: Yes… thats totally right. While this was impressive…. it became pretty clear after a bit that he was not truthful (most of the time) and very manipulative. [09:56]
asciilifeform: shrysr: the magical 'thief who can steal Anything!' only lives in cartoons. [09:58]
shrysr: And moviesss…. swordfish… Mr Robot ? [10:10]
shrysr: well atleast today – i know I can use i3wm to make my desktop look incomprehensible and exotic to the 'simple' people :D [10:17]
diana_coman: shrysr: I'm not much for movies really, esp relatively new ones [10:18]
diana_coman: that's not a tall order, is it; lol [10:19]
shrysr: diana_coman: I like to be able to forward through the boring bits myself. lol. [11:25]
shrysr: diana_coman: WoT revisited https://s.ragavan.co/2019/08/the-wot-revisited/ [11:25]
diana_coman: shrysr: you got feedback in #trilema from mp already [11:26]
shrysr: huh [11:26]
shrysr: oh [11:26]
shrysr: ok [11:26]
diana_coman: shrysr: doesn't your irc client notify in any way when your name is said? it should, set it up properly. [11:26]
shrysr: it does… I didnt notice really. [11:27]
shrysr: diana_coman: i think i should move on from the WoT for now and revisit later? I will add a comment to the post referencing mp's feedback. [12:20]
shrysr: diana_coman: is that ok? [12:20]
diana_coman: shrysr: yes. [12:21]
shrysr: diana_coman: ok. Do you have any more feedback ? [12:22]
diana_coman: it is markedly better anyway even if inevitably more vague – after all you *are* discussing it in general; [12:24]
diana_coman: shrysr: there are 2 things you should be aware of: [12:24]
diana_coman: 1. you switched from comparison X vs Y to "what is X" *silently* [12:24]
diana_coman: the silent part especially is problematic, don't change things silently! [12:25]
diana_coman: 2. while you switched to "what is X", this switch requires a different approach too and it's not clear you are aware of it [12:26]
diana_coman: specifically here if you focus on describing something, you would need to identify and mention at least any underlying principles (hence MP's observation that indeed, if you are to discuss it as a concept, you have to use the theory that is relevant [12:27]
diana_coman: shrysr: note also that feedback will come whenever/if someone has time /is so inclined; asking "do you have anymore" is at best impertinent [12:29]
diana_coman: while I like you and I am willing to help you, it does *not* follow that it's now my obligation or something. [12:31]
diana_coman: shrysr: if you are under some impression that you are doing me some great favours, better spill it out right now and be done with it, so we don't waste time. [12:37]
shrysr: diana_coman: i did not mean or think that you have any obligation. WHere does favor come into the picture ? If anything – you are doing me a favor by talking to me and I'm doing myself a favor by trying to follow what you say. [12:40]
diana_coman: shrysr: good then. [12:43]
diana_coman: shrysr: do you see how the "do you have any more feedback" does *not* align with what you just stated though? [12:46]
shrysr: diana_coman: asking you for feedback was not done with impertinence, and i have interacted with enough ppl to understand that ppl have lives and need not respond to me immediately. I was eager to know your thoughts, and perhaps it was unnecessary to ask…beyond the eagernes – i asked with the idea of capturing what you had to say in my notes, along with Mp's comments, as feedstock. In my experience, with [12:49]
shrysr: the ppl I've interacted – you don't get feedback unless you ask… repeatedly. [12:49]
asciilifeform: shrysr: smart folx are generally 'interrupt-driven' rather than 'polling-driven', if they have comments, will give comments, dun have to ask 'but are there more comments' [12:51]
diana_coman: shrysr: was your experience here so far: 1. "had to ask to get feedback"? 2. really all that similar to "the ppl I've interacted" with before? [12:52]
shrysr: diana_coman: no. And thats why i said 'perhaps it was not necessary to ask'… I shd have said not necessary to ask *here*. [12:55]
diana_coman: myeah. [12:56]
shrysr: asciilifeform: 'smart folx' may also be complex ppl with inflated egos who will keep their mouth shut unless asked with great fanfare and reverence for their opinion. I don't mean to imply it is applicable here. [13:13]
diana_coman: shrysr: by the sounds of it you really need to evaluate /clarify your context a bit better. [13:16]
diana_coman: and try not to carry "habits" without even examining them, especially across boundaries: some things are so fundamentally different that you'll come to grief here precisely for what was "needed" there [13:19]
shrysr: diana_coman: noted. [15:23]
shrysr: asciilifeform: re: the selection thingy how would I go about validating my theme? I have now tried 3 browsers, and 3 themes. the selection thingy works on all 3 themes on archive.is [15:27]
shrysr: asciilifeform: https://archive.is/ckbh9 for example. another theme. selection works there. [15:33]
shrysr: asciilifeform: I removed the modifications to functions.php and tried archive.is again >> the selection still works. tried a brand new theme and >> archive.is — selection still works. so the modified argument for th RewriteRule is parsed and works as expected, and the problem is with functions.php .. ?~!? [15:52]

#ossasepia Logs for 19 Jul 2019

Filed under: #ossasepia,Logs — Diana Coman @ 6:37 pm
diana_coman: shrysr: the trouble with static blog is that there is no good option for comments [02:23]
shrysr: none of the options here are good enough? https://gohugo.io/content-management/comments/ [02:25]
diana_coman: and more generally for direct interaction with your readers – this is meant to be a big part of being online in the first place (otherwise you know, get a notebook and jot down); (/me goes to look at your link) [02:25]
diana_coman: oh boy, disqus, lol [02:26]
shrysr: talkyard ? [02:27]
diana_coman: shrysr: is there any of those in the list that you can fully run locally AND without importing (as dependency and/or requirement) yet another ball of code of various sizes? [02:28]
shrysr: I'd have to check, but it does appear so… for exmaple remark42 is fully dockerised. I've never activated this for my website .. [02:30]
shrysr: this as in – any form of comments. [02:30]
diana_coman: anyway, and quite as always: pick the stuff you think best satisfies those main criteria: no external dependency, runs on a linux with gcc 4.9 (or earlier) and without systemd and other shit, does comments and pingbacks (those ARE important), and you can get to actually know its code in one month at most. [02:31]
diana_coman: it may use local db [02:32]
diana_coman: docker IS a dependency though, you realise [02:32]
diana_coman: and once/if you find such a thing, I'll come over to your website and poke it in the eye for free :)) [02:33]
diana_coman: has to go now but will be back in a few hours [02:33]
shrysr: :D [02:42]
diana_coman: shrysr: add to the list: running on python 2.7 or earlier [04:27]
shrysr: diana_coman: okay noted. Are pingbacks really necessary? Comments, threads and basic stuff is possible. I don;t see any talk of pingbacks. [04:52]
diana_coman: shrysr: yes they are; for one thing you *want* to know when someone else is talking about related stuff; and you *want* to be able to pat on the shoulder someone who is talking about related stuff; and you as reader *want* to know who and how interacted with this text enough to write about it, too [04:57]
diana_coman: perhaps think of it this way: they work waaay better than the "references list" or "bibliography" or "notes" combined in traditional books [05:00]
diana_coman: not to mention sparking further discussion and clarification when/where needed [05:01]
diana_coman: in case it's not clear: I'm not at all saying that wordpress is great or even highly desirable; I'd prefer it much smaller and trimmed and cleaned and all that – BUT atm, there IS one version of it that has been at least adjusted for all sorts of useful functionality AND used by people I *trust* and further available for enthusiastic trimming (in other words: it's captured already) [05:03]
diana_coman: don't go hunting for wild new things to capture and make yours – there's plenty already captured, just waiting for someone with a free hand and willing to give them better shape [05:04]
diana_coman: (for that matter I dislike php anyway but that's for another day) [05:04]
diana_coman: BingoBoingo: make me a shared hosting account with wp installed please; bill it for one year and let me know if there's something else you need from me [05:09]
diana_coman: ugh, wrong channel [05:09]
diana_coman: shrysr: let's make this the proper way – I'll get you an account on the learning blog anyway just so you have a point to start from without/before needing to already find and choose all sorts of things from provider to blog software [05:12]
shrysr: diana_coman: okay. Yeah that makes sense. Pingbacks appear complex for a static site, though still doable. [05:14]
shrysr: thank you for the opportunity. [05:15]
diana_coman: everything is doable; the trouble is whether the specific price required is really worth the result, that's all [05:15]
diana_coman: shrysr: note that you'll *have to* write daily even if it's just a bullet-point list with "I did X; I did Y ; " or even "today I didn't do anything" [05:17]
diana_coman: but anyway, as soon as that's ready, I'll ping you with something more specific to do too [05:17]
diana_coman: first things first though: you *need* a rsa key ! [05:18]
diana_coman: shrysr: otherwise I can't send *you* anything since there is no you around here [05:19]
shrysr: WRiting everyday should not be a problem. I've actually been actively recording a journal everyday… some nice packages in emacs allow this seamlessly. [05:19]
diana_coman: very good but..why under the blanket as it were? put it out there, what [05:19]
diana_coman: nobody can help you if they can't see what you're doing, can they? [05:19]
diana_coman: shrysr: btw re blogs and actually useful stuff, did you notice the selection thing? e.g. http://ossasepia.com/2019/07/14/a-working-cuntoo-install-on-amd-fx-8350-with-script/#selection-63.0-69.43 ? [05:21]
diana_coman: being able to link specifically the precise bit you mean is quite powerful [05:22]
shrysr: okay – i've setup a key pair and published the public key on keybase and mit. I'm just reviewing the whole thing [05:26]
diana_coman: shrysr: http://deedbot.org/help.html -> go through that to register your key with deedbot [05:28]
diana_coman: you can simply go /msg deedbot !!register yoururlatpbvulpes.com [05:29]
diana_coman: will be back later [05:43]
shrysr: diana_coman: deedbot 211A199BC99152DEFA326D792E4554DE8D51E8D9 registered as shrysr. I'm guessing this is the key [05:52]
shrysr: Well, its been more of a free flow journal, containing explorations and personal notes and stuff.. I try to filter out the supposedly more meaningful stuff to share. [05:56]
shrysr: Actually, i did not notice the selection thing and totally agree that it is powerful. [05:58]
shrysr: the keybase proof is at https://gist.github.com/shrysr/c884b54249b3cf9af6e5a428c2f07e3c [05:59]
diana_coman: shrysr: you can always query deedbot with !!key nickname it knows you as http://wot.deedbot.org/211A199BC99152DEFA326D792E4554DE8D51E8D9.asc so that seems ok, well done. [07:53]
diana_coman: re stuff to share – explorations and personal notes are fine to share too; I know this trap of "this is not meaningful/ready/good enough to share" but it's exactly that – a trap, nothing more [07:54]
diana_coman: the earlier you avoid it, the better for you [07:54]
shrysr: i see what you mean about sharing, as well as linking to specific content. It's actually a lot easier to just share without much filtering. https://sachachua.com/blog/ is a great example, and sacha was an important part of the inspiration to go deeper into Emacs. [13:58]
shrysr: diana_coman: In fact, the idea of a pingback, and a site enabling active conversation makes a lot of sense. It hit me when you said it… I never really bothered to think of providing a means for intelligent and convenient conversation, whereas perhaps that's the whole point of sharing online. It should not be just about expressing yourself.. that seems like a narrow way of thinking. [14:01]
diana_coman: shrysr: quite; it might very well be that you had more experience of "unfiltered commenters aka mostly spam" so yes, it's hard to see it otherwise [14:03]
diana_coman: but that's one of the big advantages of working among people here: they are already filtered by being here (and that's quite a filter) so you'll get actual conversations not noise [14:04]
shrysr: diana_coman: Yea! I realised that while reading your articles and the conversations. And yes, one my first efforts was setting up a website on weebly, and most of the comments were spam. [14:05]
diana_coman: shrysr: note also that the point is not really "expressing yourself" – the point is improving yourself; writing IS thinking [14:05]
diana_coman: hence my earlier: put online whatever you write; because the topic does NOT matter – it's HOW you write about it that matters; so write from my point of view about goldfish even if you want or about nonsens – but make sure you write structured and meaningful about it (yes, it IS possible, even about nonsense) [14:07]
diana_coman: or at least strive to – and then look back and identify problems and next time do it better; that's what learning is. [14:07]
shrysr: diana_coman: Ok. I will work on it. Re: hosting – I wasn't sure how pizarro is different from 'mainstream' offerings like linode, in terms of what I neeed? It also appeared a lot more expensive. [14:11]
diana_coman: well, for one thing it's run by people I'm vouching for : they won't either run with your data ever, nor give your details to anyone ever (as in really ever, no gdpr/whatever bullshit) and they are always on hand and helpful with any help you need; not to mention you actually get what the offer says, not some "yours" that is however not exactly yours and "ooops, there was some problem/cloud/bla" [14:13]
diana_coman: re price, I suppose it reflects this but as I said earlier, you get a place on the shared blog anyway so I suppose you can leave this for later if it's not yet clear [14:14]
diana_coman: ftr: if you have your own domain and site I don't mind if you write there but I won't let you give github or whatever other shit any content [14:16]
diana_coman: will bbl [14:16]
diana_coman: shrysr: re vps you do I hope realise that it's not really "your vps" in any real sense of the term, right? [14:40]
shrysr: Yes. [14:40]
diana_coman: cool. [14:40]
shrysr: I had toyed with the idea of a raspberri pi server in my little room. thats soo very cool in my book… but like all things, I guess I just got started somewhere that felt 'doable' at the time. [14:42]
diana_coman: heh, pizarro have the rockchips, quite cute even [14:43]
diana_coman: fwiw my website is currently running on one of those [14:43]
shrysr: Yeaa! I was meaning to ask you… is it also based off wordpress ? [14:44]
diana_coman: yes, it is this "mp-wp" – essentially a customised, frozen version (most customizations were done by Mircea Popescu, not by me); it was genesised and it could do with some themes for it + any amount of reducing the code base for sure: http://btcbase.org/patches?patchset=mp-wp&search= [14:46]
diana_coman: the theme on my website is mine aka really one I did for scratch (out of being pissed off with everything else) [14:46]
diana_coman: on my* website [14:46]
shrysr: that is soo cool. :) [14:48]
diana_coman: from* there, ofc, not for scratch, lol [14:49]
diana_coman: you'll get to see this mp-wp anyway because that's what will be deployed on the shared blog. [14:51]
shrysr: I hollered out to a guy I know who managed to setup webmentions on his static site. https://mastodon.technology/@kaushalmodi/102469531780821230 , but that is deployed via netlify. [14:51]
diana_coman: that's usually "done" nowadays, a bit like "cooking" is taken to mean "oh, I did do the mixing" (or maybe turned the oven on) [14:54]
diana_coman: will bbl [14:59]
shrysr: :)) thats how i cook [14:59]
diana_coman: lol, do you get at least the food from home/someone cooking? or is it the sad shop-fare? [17:02]
shrysr: i'm single and have to take care of myself here. I cook veryyy simple, and hardly eat out. The problem is that no matter how i 'innovate' (or not) – there's not much taste :D [18:49]
shrysr: mostly rice / bread / boiled veges. / eggs / no meat whatsoever. whatever I can do with an instant pot and a microwave, and with least effort :D [18:51]
shrysr: I live in a small town called Sundre, in Alberta. ABout a 50 minute drive from Calgary…. which I've never visited. Sundre's small enough that you can walk end to end in 20-30 minutes i guess. [19:00]
shrysr: Probably the lowest computer literacy + awareness that I've seen (or thought possible in a 'developed' country) [19:03]

#ossasepia Logs for 18 Jul 2019

Filed under: #ossasepia,Logs — Diana Coman @ 6:27 pm
shrysr: I just got started with using tmux! Love it.. also, figured out that running weechat in tmux on my vps might be a very convenient way to stay connected to IRC [00:13]
diana_coman: shrysr: in what way do you think that sourcehut is an answer (and to what exactly)? [02:38]
diana_coman: I suppose I'll end up writing a post on tools, huh [02:40]
diana_coman: anyway for starters, here's the republican main code repository http://btcbase.org/patches?patchset=ffa&search= and an example of code view: http://btcbase.org/patches/ffa_ch1_genesis.kv [02:42]
diana_coman: as basic and most-useful tool, I certainly use screen; and an editor tweaked to be aware of ada+c/cpp but that's nowadays more often than not plain nano [02:43]
diana_coman: for irc it's irssi [02:43]
diana_coman: (again, poked and tweaked some) [02:43]
diana_coman: shrysr: make yourself a gpg key and register it with deedbot, for starters; you'll need it to get an eulora account anyway but more to the point: you need it so you can actually gain any reputation [02:45]
shrysr: I was thinking of sourcehut being a better answer to control over our content when compared to github. Sort of similar to what I thought about erpnext, as in, start off with a decent tool that can be extended and self-hosted, if desired. [10:34]
shrysr: [10:34]
shrysr: The developer has a post with some points of differentiation: https://drewdevault.com/2018/11/15/sr.ht-general-availability.html. I haven't used it much, but it felt like a tool that could be potentially more developer friendly, and focused on code (and related workflows), rather than being cluttered with stats of commits and stars. [10:34]
shrysr: [10:34]
shrysr: [10:34]
shrysr: whoa I thought empty lines would be stripped or something. [10:35]
shrysr: Nano! I prefer nano to vi, but never considered the possibility of customising it. That's interesting and intuitively feels (more) efficient, like the Unix philosophy of tools that do one thing well. You make me wonder (more than usual) whether I should open my mind to doing things outside Emacs. [10:36]
shrysr: I do have a GPG key to encrypt my personal files, and access my VPS. But I've been wanting to know the principles better. I will look into this today. [10:37]
diana_coman: shrysr: V is the version control system around here and it's not "just another versioning system" – I'm calling it that because that's closest to some concept you have [14:50]
diana_coman: so regarding the version control, there is V and if you want to build some specific tooling/infrastructure for it, sure, why not [14:50]
diana_coman: just you know, be aware that your time (and anyone else's) is a *limited* resource and there is always the risk of the enthusiast – running around from one shiny thing to another and not getting anywhere (or getting burnt out before having anything to show for all the work) [14:51]
diana_coman: it's more common that you'd think and it's not a matter of "I'm brighter than that" – it's quite more often an affliction of the brightest not of the less bright [14:52]
diana_coman: re gpg (as re ~everything around here), there's again more to it than "just a key": [14:53]
diana_coman: I'd say my talk at Reading uni might be a good introduction for you too, did you find it already? and from there follow the links and read up on the WoT especially [14:53]
diana_coman: the point is: there is a LOT to take in; and I can help you so you don't get overwhelmed, but you need to make a plan, publish it, do, review; repeat [14:54]
diana_coman: shrysr: listen, what's the main thing holding you back re making your own blog on your own domain? having the keys to the thing and being able (for real) to destroy it IS "owning" by definition; no amount of hosting it on someone else's platform is going to do anything [14:55]
diana_coman: or I suppose if you really say that you are not there yet i.e. you are not yet sure enough to be independent, then fine, since you are effectively my apprentice around here, might as well set you up with an account on what will be apprentices' blog and that's that [14:58]
diana_coman: re vi – it's more my dislike of "modes"; I can work with it (when on a machine with nothing else) but I'd much rather not. [15:29]
diana_coman: this being said, tools are quite a personal matter – so use whatever fits *your* hands best as it were [15:30]
shrysr: I'm definitely *not* brighter than that. I do jump around topics a lot. It feels like the more I learn, the more I 'don't know', and the scope is always expanding with not much getting done. [16:16]
shrysr: I'm definitely *not* brighter than that! I do jump around topics a lot. It feels like the more I learn, the more I 'don't know', and the scope is always expanding. [16:16]
shrysr: Especially of late, and I've been worried about having nothing to show for my efforts. [16:16]
shrysr: I would deeply appreciate your help and guidance. That's why I'm here, and I'm willing to do what it takes to achieve excellence. [16:18]
shrysr: Re: my own domain – I did have a domain and wordpress based site some years ago and let it languish because it was cumbersome and unpleasant to manage with phpmydmin or whatever. Maybe I did not know enough. [16:20]
shrysr: Discovered static sites (Jekyll) ~2 years ago, which exactly what I wanted. I setup on github to begin with, and then about a year back – shifted to Hugo (noticeably faster build time) and the site you saw. [16:21]
shrysr: I actually have a domain name ready, and signed up for a VPS with Linode some months ago. The primary plan was to host my website, along with a server for shiny apps, and also having my email synced on the server. [16:22]
shrysr: re: gpg > I will go through your talk and the links and revert. Some holes were filled via google today and I get the idea much better than I did yesterday. [16:30]
shrysr: I will work on gettng my domain up and porting my website to it. [16:47]
shrysr: re: republican repo and V – how should I learn more? [16:58]
asciilifeform: shrysr: can start with the orig. draft of 'v' — http://trilema.com/2015/no-such-labs-releases-v-for-victory/ . it's a ~3 page proggy. [17:42]
asciilifeform: ( literally. and not even particularly 'massaged' . ) [17:42]
shrysr: asciilifeform: proggy ? [17:43]
asciilifeform: python script, in this case. [17:43]
shrysr: :D Okay I will start with that. [17:44]
asciilifeform: various people added knobs later, but the basic functionality remains more or less same as in the prototype. [17:44]
shrysr: trilema.com seems to load a different page everytime i refresh ! :D [17:44]
asciilifeform: shrysr: he has it set to give random old article on each load of / . [17:45]
asciilifeform: shrysr: http://therealbitcoin.org/ml/btc-dev/2015-August/000161.html << early example of vtronics. [17:47]
shrysr: asciilifeform: thank you. I'm on it. [17:49]

#ossasepia Logs for 17 Jul 2019

Filed under: #ossasepia,Logs — Diana Coman @ 6:17 pm
diana_coman: shrysr: are you coming in or going out ? this join/part is only annoying [06:48]
diana_coman: oh well, apparently not that alive really [11:30]
diana_coman: shrysr: are you there? [11:48]
shrysr: yes [11:48]
shrysr: Hi ! [11:48]
diana_coman: oh hi, so you're alive after all, lol [11:49]
diana_coman: what brings you here? [11:49]
shrysr: I want to do work that matters :) [11:50]
diana_coman: heh, hold onto that idea! what do you know how to do? [11:50]
shrysr: Sorry, I have been trying to setup emac and erc on my VPS and it always feels new everytime [11:50]
diana_coman: well, vps is a sort of "too cheap to afford all the problems it brings" but anyway [11:51]
shrysr: Not much! I do not know Ada. I've been building skills in R… I am familiar with python. I did know C / C++ a LONG time ago. [11:52]
diana_coman: R is not bad to know, actually; still quite my go-to thing for messing about with data [11:53]
shrysr: Yes, my current goal is to b [11:53]
shrysr: 'break into' data science. [11:53]
diana_coman: oh, what would "data science" be exactly, you think? [11:54]
shrysr: I think it is about gaining insights from data, understanding it's nature and then plugging all of that into algorithms to extend that understanding further. [11:56]
shrysr: I'm fascinated by the idea that a machine can learn. [11:58]
diana_coman: well, insights won't ever come "just from data" but anyway, have you seen then for instance http://trilema.com/2016/the-pop-of-the-day-and-other-items-of-virtual-economy/ ? [12:00]
diana_coman: there's plenty more in fact – in this sense, a working Eulora is effectively the data scientist's wet dream [12:00]
asciilifeform: imho most 'machine learns' reduce to variant of http://www.loper-os.org/bad-at-entropy/manmach.html [12:00]
asciilifeform: massively overhyped concept. [12:01]
diana_coman: asciilifeform: like all fashions, it has to be hyped, what, don't begrudge it, its false feathers and fancy garb [12:02]
diana_coman: shrysr: that fascination is most likely to be linked to what you add on "learn" than to what the machine actually does [12:03]
asciilifeform: diana_coman: problem typically comes for people who go and try jump from cliff with the false feather wings. [12:03]
shrysr: asciilifeform: I understand that. However, it still seems to have a lot more potential than mechanical engineering :D [12:04]
diana_coman: asciilifeform: how's a problem if they jump? good instruction for onlookers, I'd say, let them JUMP! [12:04]
diana_coman: shrysr: what are you working on/doing otherwise atm? [12:07]
asciilifeform: diana_coman: the onlookers never seem to learn from the jumpers. why — do not know. but it describes why software is what it is. [12:09]
diana_coman: asciilifeform: neah, if they don't learn it's either because "not gory enough" or because "can't learn" (in which case fine, they are next to jump) [12:10]
diana_coman: there is a lot of "not gory enough" around precisely because supported otherwise (usually on the strength of old stuff that still works basically) [12:10]
diana_coman: ftr I suffered from the same fascination as shrysr , back when I was 18-22; the uni courses on "AI" were a lot of cold water (this?? is THIS what you call machine *learning*???) [12:11]
diana_coman: and before shrysr thinks this was sometime in mesosoic, it wasn't. [12:12]
shrysr: diana_coman:I agree. Hype is certainly very high. I've been at this for more than a year… trying to build a foundation of concepts. It has not been easy. However, my identification of this field – [12:14]
diana_coman: shrysr: you got cut at "of this field – " [12:19]
shrysr: on a fundamental basis is that i want to use a computer to analyse things.. build tools, workflows and systems to enable that. Over the years, i've found that my initial interest in compuational physics (fluid flow) was too niche and there were very few companies doing this. It was and is still too expensive for most. [12:20]
shrysr: Especially after 'discovering' emacs, i've become more and more interested in code. [12:21]
shrysr: irrespective of the hype, data science seemed that perfect combination of using code to derive insights and building systems. [12:23]
shrysr: Otherwise >> I am currently implementing an ERP (enterprise resource planning) system for the company i work for. It will replace a completely manual system. [12:24]
diana_coman: oh boy the ERPs [12:24]
diana_coman: what are you building it in/on top of? [12:24]
diana_coman: shrysr: eulora is from at least one perspective basically a laboratory for hands-on "data science" learning/perfecting/anything; and yes, you totally get to design and make your own tools to collect any data you think you need to figure out stuff (even *what* you should figure out is up to you!) [12:26]
diana_coman: so how about this: get yourself an account in eulora, have a look around and choose something you want to model – from prices to quality or even quantity of crafting outputs [12:27]
shrysr: I am using erpnext. It is actually very cool because i think it is the cheapest system out there, and one that trumps most mainstream offerings by the the fact that it is open source. [12:27]
diana_coman: I guess I'll even offer a bounty for working model [12:27]
diana_coman: if it comes to that (as so far it seems rather elusive :)) ) [12:28]
diana_coman: shrysr: on one hand I'm sure it's not at all hard to trump "most mainstream offerings" on anything really [12:28]
shrysr: :D anything ?? [12:29]
shrysr: I'm checking out eulora right now [12:29]
diana_coman: but for my curiosity: how many lines of code does this erpnext have and in what language? would you say you actually know exactly what each bit does and how and within what constraints/limitations? [12:29]
diana_coman: shrysr: discuss it, you know? lolz [12:30]
diana_coman: mainstream offerings are quite shitty; it quite comes with "mainstream" [12:31]
shrysr: No. I haven't even explored the source code of erpnext, which is based on python. The focus has been on getting something working first. As such – it is maintained by a company, and we;ve signed on for support. [12:33]
diana_coman: otherwise put you are slaving on a galley that is further enslaved by a bigger galley but the advantage of the whole thing is that …it's open source! [12:35]
diana_coman: shrysr: for your reading list on "open source": http://ossasepia.com/2018/08/04/a-collection-of-pearls-as-well-as-ever-sadder-epitaphs/ [12:37]
shrysr: .. and cheap, easily 10x. I figured that if I reach a point where the software does not do what I want, i can atleast try to dig into the code and develop what I need. [12:38]
diana_coman: shrysr: the trouble is that the moment you dig into it (and you'll get to that moment sooner rather than later, if you are doing anything serious as in actually useful there at all), you'll find that the code in question is such a collection of stacked chairs that developing what you need is not at all such a straightforward thing [12:41]
diana_coman: eulora's client code is open source; and yes, pretty much was chosen precisely because "at least you can go in and do what you need"; it's been….a while, let's say and I'm still torching the swamp to then finally be able to do what I need [12:42]
shrysr: i am inclined to agree. Besides the fact, that I have only started pushing myself to study the source code, the consultant I work with – often dissuades me immediately, when i talk of any 'deeper' customisation. [12:45]
shrysr: I meant study source code in general.. not just for erpnext. [12:46]
diana_coman: shrysr: a bit like with any other written word (literature would be the cannonical example), NOT all that is written is worth reading, that's the thing [12:47]
diana_coman: and time is the only truly finite resource so don't waste it on reading shitty code unless you go in to burn it too at the very least [12:49]
diana_coman: shrysr: re your consultant, no surprise really, think of it: he gets money out of you NOT knowing the stuff + him knowing just what he knows, not more; the "slaving on a galley" goes much deeper than a mere figure of speech [12:52]
shrysr: I swear: on some days – my heart breaks with a fear that I will never understand and write elegant code. There is so much to learn… its infinitely worse when I forget what I've learned. [12:52]
diana_coman: shrysr: that's the fear of any thinking man I'd say – that he'll never get to know what there is to know; on the bright side though, you have the advantage that there isn't all that much new elegant code written [12:54]
diana_coman: anyways, eulora specifically *encourages* players to make/change their clients precisely as they want it – make bots to your heart content or anything else really [12:55]
diana_coman: because yes, it's not a game for slaves on a galley but for thinking people [12:55]
diana_coman: sure, the legacy code is a swamp but the advantage you have is that the earlier you get in, the better off you are over everybody that comes even later; [12:56]
diana_coman: shrysr: re learning and if it's any consolation, I can add that in those past 3 years working on eulora I learnt way more (and deeper) than I did during my 3 years of PhD. [12:57]
shrysr: ::D that is a consolation. 3 years sounds pretty quickkk. WHen i finished my masters – I just wanted to get out and work. I turned down a PhD offer in combustion …. once I started working, i realised I WANTED to do something original…I never did get another offer. I had deep regrets about that, but in the last few years – as I've 'discovered' github and the universe of 'code'… I've found peace in the fact that there is plenty to [13:04]
shrysr: learn and do…that can help others, including original contributions. [13:04]
diana_coman: hopefully you noticed also that github thrives precisely on fleecing the naive-but-well-intended who provide it with content for free and get pretty much jack-shit in return [13:07]
diana_coman: don't fall for that; for one thing the best way you can help is anyway first of all by helping yourself too [13:08]
diana_coman: and for the other thing, there's no reason to give your content to github; make yourself your own blog like a sane person and put it there; github is more than welcome to link to *you* if it wants to [13:08]
diana_coman: (for that matter, same goes for dev.to , even in spades) [13:09]
diana_coman: and yes, rather than run the risk of misleading youngsters to think it's fine and good to provide dev.to with their content, I'll refrain from it and I'll do the needed dig in their source rather [13:09]
diana_coman: shrysr: Shreyas, eh? are you of Lithuanian descent by any chance? [13:10]
shrysr: no!Well atleast as far as I know.. I am from India. [13:11]
shrysr: Migrated to Canada in 2017 [13:11]
diana_coman: interesting; all Shreyas I knew so far are Lithuanians, ha; then again, Lithuanian has supposedly *something* in common with Sanscrit so… [13:13]
shrysr: I have had plans to move my website to my VPS… but I guess I just settled for first succeeding in making content on a regular basis. [13:13]
diana_coman: well, for all your web hosting needs, I warmly recommend Pizzaro: pizarroisp.net [13:14]
shrysr: yes, my name has it's roots in sanskrit. Embarassingly enough, it's supposed to mean 'uniquely the best' [13:14]
diana_coman: shrysr: so you have your work cut out for you there, by your very name :D [13:15]
shrysr: my mom loses no opportunity to remind me [13:15]
shrysr: :)) [13:15]
diana_coman: likes the sound of shrysr's mum very much [13:15]
diana_coman: shrysr: what's your website so far anyway? [13:16]
shrysr: https://shrysr.github.io [13:16]
diana_coman: honestly, why give github all that content; what if tomorrow they go down (like sourceforge did, remember?) [13:18]
diana_coman: anyways, I'll be back later. [13:19]
shrysr: Okay! Hey – wanted to say – it is so cool to connect with you. [13:21]
diana_coman: hey, glad to hear that shrysr ! [15:09]
diana_coman: and possibly best set up znc or something and leave it on – nobody expects you to answer immediately, but at least you can see stuff later [15:09]
shrysr: thanks for the tip on znc. Currently, I have emacs connected to erc on my vps and have logging enabled, so I should be able to login via ssh anywhere. [15:48]
shrysr: Internet at my office sucks, so I was planning to look into mosh, based on advice in the emacs channel. [15:49]
shrysr: Have to look into znc too. [15:49]
shrysr: diana_coman:I was curious about the tools you use now? you mentioned dropping Emacs. [15:58]
shrysr: diana_coman: re: content on github, I stumbled across https://sourcehut.org a while back, and never got fully set up. It does seem atleast a partial answer though? [16:01]

#ossasepia Logs for 16 Jul 2019

Filed under: #ossasepia,Logs — Diana Coman @ 6:07 pm
diana_coman: hello shrysr [02:26]
diana_coman: what brings you here? [02:26]

#ossasepia Logs for 14 Jul 2019

Filed under: #ossasepia,Logs — Diana Coman @ 5:41 pm
diana_coman: lol, that was one QUICK look [11:01]

#ossasepia Logs for 15 Jul 2019

Filed under: #ossasepia,Logs — Diana Coman @ 4:03 pm
moopet: Aloha [11:46]
diana_coman: hello moopet [11:46]
diana_coman: what brings you here? [11:46]
moopet: read a comment on dev.to about TMSR and V and hasn't a clue what they are [11:47]
moopet: and since I failed to find anything on the internets I thought I'd come straight to you [11:47]
diana_coman: heh, good call really [11:47]
diana_coman: V is a versioning system like hm, no other really ; you can see it in action here for instance : [11:47]
diana_coman: http://btcbase.org/patches [11:48]
diana_coman: e.g http://btcbase.org/patches?patchset=eucrypt&search= is the V tree for my project EuCrypt [11:48]
moopet: so are signers people who have approved a commit? [11:50]
moopet: and what is TMSR? [11:50]
diana_coman: moopet: not "approved" heh; signers are people who are willing to stake their reputation on the contents of that code essentially [11:50]
diana_coman: there is no "approval" – only responsibility [11:51]
diana_coman: the point is that code is valuable for you only to the extent that you trust it [11:51]
diana_coman: and the direct trust comes from "I read and understood it and I'm fine to use it" [11:51]
moopet: how is someone responsible for something if they haven't given their approval? [11:52]
diana_coman: the less direct trust may come also from "X whom I know to be honest and capable has signed this patch " [11:52]
moopet: I'm not sure I'd understand unless I actually gave it a go, I guess [11:52]
diana_coman: moopet: re approval I guess it hinges on your notion of "approval" [11:52]
diana_coman: the point is: anyone can add a vpatch to an existing v-tree [11:53]
diana_coman: in this sense there is no need for "approval" from anybody else [11:53]
diana_coman: however, just adding a vpatch won't do much for those who don't know you and therefore can't trust you/your code [11:53]
asciilifeform: moopet, diana_coman : http://cascadianhacker.com/07_v-tronics-101-a-gentle-introduction-to-the-most-serene-republic-of-bitcoins-cryptographically-backed-version-control-system is imho to this day the best guide to 'v' [11:54]
diana_coman: thanks asciilifeform , I was digging for that! [11:54]
asciilifeform: np [11:54]
diana_coman: moopet: the link provided by asciilifeform is the canonical introduction to using V as it were [11:54]
moopet: will give it a read later [11:55]
moopet: thanks [11:55]
diana_coman: at any rate, if you want to learn and practice, you can do way worse than implementing your own V [11:55]
asciilifeform: moopet: it's quite possibly world's simplest versionatron. to the point that virtually all of the current users, wrote own implementation (or use old one tailored to own taste) [11:56]
diana_coman: TMSR is The Most Serene Republic; you can read the log of its public forum for instance at http://btcbase.org/log/ [11:56]
diana_coman: moopet: re TMSR you can have a look on trilema.com as well e.g. http://trilema.com/2015/the-definitive-sovereign/ [11:59]
moopet: this is quite hard going [12:06]
moopet: I have to look up every other word [12:06]
diana_coman: moopet: is that bad or good in your books? [12:06]
moopet: it's very… subgenious [12:06]
diana_coman: (and…which of the above links, lol) [12:07]
moopet: all of them [12:07]
moopet: I decided to read them all at once because big brain [12:07]
diana_coman: moopet: what's "subgenious"? [12:07]
diana_coman: heh, take it easy, it's not a sprint; more of a very deep rabbit hole [12:07]
moopet: 'it's me mis-spelling subgenius [12:08]
diana_coman: but feel free to come up for air and ask in here at any time [12:08]
moopet: will pobably be back! [12:08]
moopet: but it's nearly time to go home, so bye. Thanks for talking! [12:08]
diana_coman: hang around as you like [12:08]
diana_coman: np, see you later [12:08]
diana_coman: moopet aka Ben Sinclair, it would seem [12:24]

April 16, 2020

#eulora Logs for 16 Apr 2020

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
feedbot: http://trilema.com/2020/minigame-smg-statement-on-q1-2020/ << Trilema S.MG — MiniGame (S.MG) Statement on Q1 2020 [12:27]

April 11, 2020

The Velvety Bloodsucker, the Twinheaded Dandy and Other Euloran Hopefuls

Filed under: Coding,Computer Graphics — Diana Coman @ 3:48 pm


~Born of Chaos and Havoc, madam. Originally they comprised a litter of five. […] And, being at heart more a philantropist than a businessman, and deeply sentimental as well, I have even allowed you to retain Foolishness, who took a liking to you for some reason that I am entirely unable to fathom. For that, too, there is no charge.~

This past week has been quite some fun in my experimental laboratory of possible life forms for Eulora. Before getting on to skeletons and messing about with deformed meshes, I had another go at textures too since they are equally important really – in this trompe l’oeil game that computer graphics plays at all time, shape and variety is not always a matter of volume and surface but at times simply one of applied paint and light reflection, hence of textures. And since the base shape otherwise ended up so far to be this sort of rounded cylinder, I started by trying out a different sort of texture mapping too, to better fit this situation – instead of mapping the texture in that hap-hazard, geometrical-patterns inducing way I did before, I switched to a spherical mapping that works actually surprisingly well in that the texture’s pattern seems to me to help the brain that tries rather desperately – as it always does – to find some meaning even in the weirdest of shapes. And here’s for fun and giggles the long-nosed cylinder showing off its spherically mapped Mandelbrot texture:
multifractal_2_640.png

Besides the new mapping (it’s an option now available, not necessarily a replacement of the old mapping), I further experimented with making fractal textures 1 and I ended up literally making red velvet, my absolutely favourite texture of the bunch! It turns out the main bit I was missing earlier was the idea of multi-fractals really ie applying a fractal to a fractal pretty much. To see just what I mean, here’s an image setting side to side the results of a single application of the fractal transformation compared to three successive applications – the difference seems striking to me and have in mind that this is literally just black and red in there, not even a complicated texture by any means:
multifractal_9_640.png

The velvet above (scroll down for its application to a creature if you are not convinced it’s really velvety) can equally be made any colour really, with the pure green or blue on black being of course just as striking as the red above. Mixing in some fixed amount of any of the other two colours while messing about fractally with one yields quite a few variations too so velvety textures are essentially cheap in Eulora nowadays. Anyways, there’s more to it, as bringing in colours and messing about further with various parameters yields also other sorts of textures even if the colours are similar, for example:
multifractal_11_640.png
multifractal_12_640.png

Having set my mind at rest that I am not forever stuck with only that yellow-blue mandelbrot texture for everything euloran, I switched afterwards to giving another go to skeleton and mesh creation. I started by implementing the skeleton generation as previously described aka through a pseudo-random selection of points and connections within a unit sphere. In practice, the approach seems to yield mostly overlapping bones but I can’t even say if that’s something all that undesirable or not – it’s certainly different from what I’d normally have in mind when thinking “skeleton” but CS/Cal3d seems to handle it nevertheless at least so far ie while not trying to move the meshes around, so perhaps Eulora’s skeletons will just be like that, a bunch of overlapping bones criss-crossing one another, why not. To be able to actually see the “bones”, after a few attempts to use the previous cylinders, I gave in and made the meshes very thin before setting them on the skeleton, so the result is a sort of stick-insects life forms, like those (note that at times some of the “bones” can end up even inside or partially inside the mesh on another bone):
multifractal_3_640.png
multifractal_4_640.png
multifractal_5_640.png
multifractal_6_640.png
multifractal_15_640.png
multifractal_61_640.png

For what it’s worth and because I had to try this and see the results for reals, I implemented also a slightly modified version of picking the points so as to reduce the amount of overlapping: I took first a set of points in the “core” of the sphere (ie using a smaller radius) and connected those to make a “trunk”; then picking at random some points in each of the four quadrants, I connected them pseudo-randomly but without crossing from one quadrant to another, to make “limbs” of sorts; each “limb” thus made was then connected to the closest point on the “trunk”. For all the trouble of such careful avoidance of criss-crossing, the difference is not that huge though and so in practice I am not all that sure it’s worth the trouble. I still left the generating code in there, commented out but ready to recover if it turns out perhaps at animation time that it really is better to have that sort of trunk & limbs rather than spaghetti-like skeleton, it may be. Here’s a few illustrations of the results, too:
multifractal_21_640.png
multifractal_59_640.png
multifractal_60_640.png
multifractal_63_640.png
multifractal_64_640.png

Having thus a skeleton-generation mechanism all set and ready to fire, I turned back to my mesh generation -and deformation- scripts to try and find a better way to do it. I brought in the Mersenne Twister prng 2 to give me a cheap and reproducible way to generate any number of meshes and then I experimented with fractals and multifractals – still based on the fbm of last week, but applying some domain distortion (aka messing about the x,y,z values *before* passing them to the fbm, as a known and cheap way to avoid alias AND get more interesting results) and going at it similarly to the textures earlier, the multi-fractal way. Combined with thicker meshes to give the fractal some space in which to do its job, the results turned out quite interesting I’d say – or at least way more interesting than those of last week. Note that in all cases so far, each “creature” is made out of just ONE mesh that is simply scaled, translated and rotated to match each of the bones in the underlying skeleton. This can be of course changed – so far I stuck with it just because it’s easiest with the current scripts ie one single mesh generation and then out of that a whole creature is made and shown. The original yellow-blue mandelbrot texture works at times quite well too, I’d say, creating some sort of “eyes” or whatnots but I still like that red velvet most! Anyways, here’s the parade of hopefuls, starting with the Velvety ones and the Twinheaded (or even triple-headed!) Dandy:
multifractal_45_640.png
multifractal_50_640.png
multifractal_14_640.png
multifractal_48_640.png
multifractal_1_640.png
multifractal_7_640.png
multifractal_8_640.png
multifractal_10_640.png
multifractal_13_640.png
multifractal_16_640.png
multifractal_17_640.png
multifractal_18_640.png
multifractal_19_640.png
multifractal_20_640.png
multifractal_24_640.png
multifractal_25_640.png
multifractal_26_640.png
multifractal_27_640.png
multifractal_30_640.png
multifractal_31_640.png
multifractal_32_640.png
multifractal_33_640.png
multifractal_34_640.png
multifractal_35_640.png
multifractal_36_640.png
multifractal_37_640.png
multifractal_38_640.png
multifractal_39_640.png
multifractal_40_640.png
multifractal_41_640.png
multifractal_42_640.png
multifractal_43_640.png
multifractal_44_640.png
multifractal_46_640.png
multifractal_49_640.png
multifractal_51_640.png
multifractal_52_640.png
multifractal_53_640.png
multifractal_54_640.png
multifractal_55_640.png
multifractal_56_640.png
multifractal_57_640.png
multifractal_58_640.png

As parameters, it turns out that there’s quite a bunch that can be used. One that seems at first obvious but turns out in practice to have very limited useful range is the “noisiness” of the fractal itself – the higher the noisiness, the more “rugged” the mesh ends up as. Here’s an example with this turned up a notch (more than this and the result ends up close to just noise really):
multifractal_28_640.png
multifractal_29_640.png
multifractal_47_640.png

More useful – if rather unexpected – parameters would be the length and thickness (basically the maximum radius of the cylinder) of the shape at generation time. While scaling it afterwards to match the bone means that any shape can be used on any bone without any trouble whatsoever, the original length and thickness matter quite a lot – too thin meshes don’t leave much space for any meaningful deformation to effectively create anything interesting, while too wide meshes make for rather obese life forms (or otherwise very rough approximations by the polygoniser since the triangles need to be rather large to cover the whole thing and not leave it unfinished in parts). Besides those, there is also the seed used for the prng when picking up values to modulate the fractal application. Note that in all the above, I didn’t even turn off entirely the fractal deformation anywhere – it’s simply applied with a factor of magnitude given by the prng sequence. A few experiments trying to apply the fractal deformation only at pseudo-random places and leave the rest undisturbed didn’t work that well in practice as there’s just too sharp a difference between the two cases and the result is a broken shape that doesn’t even render all that well in CS. By contrast, all the above fully closed shapes rendered quite fine – even though CS still complains at times about “corrupted faces” – possibly too narrow triangles or something.

Having looked during this past week a lot of many shapes similar (but not quite identical, ie statistically similar rather than identically similar, since this is exactly what fractal generation does) to those illustrated here, I think I probably need a break from them to be able to see them again with fresh eyes capable to say whether they are fit for purpose or to what extent so I’m quite curious how they seem to you, what you think of them so far and/or what directions would you like explored further on meshes, textures and skeleton – if any, so far (or perhaps at a later point after having some animation working too, to see for instance if the criss-cross of bones causes big trouble or not).

I can’t even decide if this approach of making the whole creature of a single mesh is a problem in itself or not but I guess it can’t hurt anything to do as the next step the changes required to generate creatures out of distinct shapes too – at least for variety if nothing else. At any rate, all the parts can be mixed and matched as desired really – so there can be variety from combining meshes, skeletons and even textures as desired. For instance, the fact that a creature uses now the same texture for all its meshes is just a matter of the test code in the client simply picking a “default texture” that it applies to everything – note though that the mesh itself contains simply a mapping that applies equally well to *any* texture of the same size, so swapping a texture or another is literally just a matter of loading one png or another, nothing more. And none of the images above bother with any shaders or more intricate anythings, it’s all just a plain png as texture with the spherical mapping and that’s that.

In addition to generating creatures out of distinct meshes for each bone, the next big chunk of unknown to start sorting out would be the animation. In principle, fractals can come in handy for defining animation too but in practice I have so far no clear idea on it at all, so I’d need to start looking at it and trying it out. Moreover, for any animation to show in the client, I really need to figure out and generate the full set of information required by cal3d on all bones as well as on animation itself so that’s another big chunk on my to-do plate, too.

  1. All this reading and re-reading of fractal theory by the bucket seems to finally start paying off better, as it’s all coming a bit more together in my head, so yes, play time got better too. As a side effect, I did get fed up with the cumbersome texture writing as png from within the client using the whole weight of libpng and so I made a separate tiny C code that doesn’t bother with compression but can write nevertheless perfectly fine .png files and otherwise allows way faster experimentation with fractal generation. While I still think that the client should use the compressed .png texture files, the uncompressed ones do just well for this experimenting stage and there’s no problem that I see in compressing them afterwards even, if needed.[]
  2. pseudo random number generator[]

#eulora Logs for 11 Apr 2020

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
feedbot: http://ossasepia.com/2020/04/11/the-velvety-bloodsucker-the-twinheaded-dandy-and-other-euloran-hopefuls/ << Ossa Sepia — The Velvety Bloodsucker, the Twinheaded Dandy and Other Euloran Hopefuls [13:11]

April 8, 2020

#eulora Logs for 08 Apr 2020

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
asd: Yo so is there any point to playing eulora [16:42]
diana_coman: asd: for some there is, for others there isn't; are you among the some or among the others? [16:42]
asd: let's go for some. [16:42]
diana_coman: so go for it then! [16:43]
asd: what's the game about? [16:43]
diana_coman: asd: lemme cite previous description : http://ossasepia.com/2020/04/20/ossasepia-logs-for-06-Nov-2019#1009044 [16:43]
ossabot: (ossasepia) 2019-11-06 diana_coman: dorion: eulora is a masterclass in economy mascarading as a videogame; that'd be as close to a "full description" as it gets. [16:43]
diana_coman: other than that, read the wiki while it's still online, see eulorum.org [16:44]
asd: Got it. So do I gotta deposit anything to play? [16:44]
diana_coman: asd: no, not really. [16:45]
asd: Aight thanks I'll try it out. [16:45]
diana_coman: asd: how did you find out about it /found your way here anyway? [16:46]
asd: https://weirdcommunity.fandom.com/wiki/Real_Cash_Economy_\%28Make_Money_in_Virtual_Worlds\%29 [16:48]
asd: That fandom [16:48]
asd: It was in the list. I got dungeons & Treasures too. The description for eulora seemed hella interesting. [16:48]
diana_coman: asd: well, if you are after "make money out of nothing", it will probably not work out for you. [16:48]
asd: I thought you'd say that. I'm just intrigued to see how it works is all. Just gonna play it for kicks. [16:49]
diana_coman: it's…way harder than it seems; and it looks like nothing in particular; the kicks are yours to tease out – if you enjoy figuring out and modeling stuff (based on real and boring data pretty much); that being said, read perhaps the s.mg category on trilema.com if you want to get some more concrete idea/ [16:51]
diana_coman: asd: what do you do otherwise when not looking for real-cash-economy games? [16:53]
diana_coman: lol, those kicks that don't come for nothing either. [17:04]

April 6, 2020

Learning to Smile

Filed under: Lyf,Young, old and oldest — Diana Coman @ 4:18 pm

In the starkest possible contrast with all the gray, the drab, the brokeness and the neverending grumbles that surrounded my growing up, there always comes to mind as well, balancing it all for a few of the starting years 1, the calm but firm efficiency and the warm but knowing smile of my maternal grandmother 2.

She seemed to smile at all times indeed and the child that I was then took it all for granted and took it all to mean – with all the naivety and lack of deeper understanding that makes one a child to start with – that she was simply very happy at all times, of course, a sort of happy accident within the unhappy rest. So I considered for a long time that the very image of happiness is indeed a restrained smile like that, slightly turning up the corners of one’s mouth, twinkling at best of times in the eyes while drawing at the same time fine and often unexpectedly deep lines through the papery white skin of one’s face. It was only years later when I finally realised that some of those lines were there from way before any smile, while some – and I can’t even tell exactly which ones – were simply the pain showing through the smile anyway, just like the papery white skin was the unmistakable mark of living with a heart condition.

I knew even at the time that she was ill and that her illness was a heart condition, it was never hidden from me nor a secret thing at all. But knowing it as a fact has nothing to do with understanding it or what it means at all. I had indeed so little understanding of it that I didn’t even have many questions to ask about it at all, except that one time when I asked her out of the blue “how it happened” – and she smiled at it even more than usual, choosing to answer simply and kindly my curiosity and my concern rather than my meaningless question for which there was no meaningful answer. She said it could have been perhaps due to a very big explosion that she witnessed as a child. The explosion was real – she had lived through the 2nd World War – and her having the condition even as a child was probably real too though it was never diagnosed that early 3.

She was diagnosed when she was about 30 – if being shouted at and being menaced by a doctor who was scared shitless himself counts as being diagnosed – as she nearly died giving birth to my mother. And then she had heart surgery and learnt that even so, she will most likely die sooner rather than later. As I learnt later on, it was in part that knowledge and in part the time spent in hospitals and the experience of all those ill or dieing people that she met there that gave her the never failing smile that I thought sprung instead from pure happiness of the lightest sort. One day, during one of those hospital stays, she had decided to keep smiling through it all and to be happy indeed if she gets to even see first her own child grown up, then her grandchildren.

Whether she was indeed happy or not I don’t dare to presume knowing in the slightest, but it was nevertheless her knowing presence and her unfailing smile that served as a safe haven for me and that in turn certainly helped to balance a lot of other things at the time. It was also that hard-won depth of her smile that taught me way more than I realised then, so much more in fact that I kept learning from it even years and years after her death. As I deciphered more of it and as I gained more knowledge and a deeper understanding of what was behind that smile and where it had come from, I found it anchored me safely in the starkest reality at times when there was nothing else to lean on and everything else that seemed solid turned out to be just lies and deception and smoke. And it strikes me that it’s perhaps no wonder then, that I could never quite expect happiness to be anything other than living fully in the reality of each day, even if it means quite often that happiness itself will shine over and get shot through with pain at least at times, if not at all times.

Despite all the above knowledge that I’ve been given, it still took me quite a lot of years to learn to smile, to learn in fact that I could fully smile and that it was the healthier choice to make, rather than listening in the slightest or even paying any attention whatsoever to problems or even to the surrounding frowns and grumbles and tiresome, endless complaints. Here’s some illustration of the change too, since the apt old pictures turned out unexpectedly a few days ago anyway:
sm_01_640.png
sm_2_640.png
sm_3_640.png

  1. Only a few, as she died when I was about 10.[]
  2. My maternal grandmother lived on the other side of the town, in a little house that was hers much more than can be easily explained through a mere few words – suffice it to say for now perhaps that the house was indeed hers, from its wooden door with a geometric pattern that she had designed, to the curtains and table cloths that she had sewn herself and even more so to the warm, open and wholesome environment that she maintained at all times through her presence and her work alone. And it was indeed hers to the extent that it took only a few short years after her death for that house to not exist anymore, for all the fact that the building itself is still there and still in use even today and yes, for all the fact that I still stay there on occasion when I go back to my hometown. From that oasis of settled life, from that peace and comfort she had made and maintained for herself, she came nevertheles daily, by crowded, cold and smelly bus, at the earliest hours of the morning, to look after us – nominally after me and my brother but she looked really after way more than just the two of us.[]
  3. From what I heard later on, she got instead beaten with a wet towel for being “lazy” when she was, most likely, simply ill.[]

#eulora Logs for 06 Apr 2020

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
feedbot: http://ossasepia.com/2020/04/06/learning-to-smile/ << Ossa Sepia — Learning to Smile [13:40]

April 4, 2020

Cyli N’Der and Other Meshes on a Stick

Filed under: Coding,Computer Graphics — Diana Coman @ 12:48 pm

The work on Eulora’s client during those past 10 days 1 went mostly as planned, towards setting meshes on sticks (“bones” if you absolutely must) and therefore on cal3d sprites rather than just plain CS meshes. The main unplanned part included sorting out some additional wtf related to the way in which textures are set for Cal3d meshes 2 and otherwise the more pleasant fact that I finally got to a point where I had enough of an idea of the whole pipeline so I could consolidate the scripts and the client into what is now a much quicker way of going from “try this” to “here’s how it looks in Eulora”: basically I can make changes to the surface generated directly and then run one single script that recompiles the code, runs the polygoniser, then the formatting for cs and cal3d, then the setting of meshes on a skeleton and then finally moves them to where the client expects them, launches the client and let’s you gaze at the horror -or beauty, whatever- shown. And to illustrate this, here’s Cyli N’Der, the rather cute robot-like set of same-mesh-on-various-bones that photo-bombed Cally one day:
mesh2bone_9_1024.png

mesh2bone_10_640.png

While there are quite a few new bits and pieces done over those past 10 days, from a practical point of view it makes most sense to look first at the whole resulting pipeline instead of what happens to be new and where. So here’s what pipeline I have currently:

  1. Surface definition and polygonization (C).
  2. Formatting to CS and Cal3d mesh formats (.xml and .xmf, respectively; awk).
  3. Setting of a mesh to a given bone, with some simplifying assumptions (awk).
  4. A basic “skeleton” creation (and mesh setting on each bone) based on given width, depth and height of the bounding box for the creature (awk).
  5. Loading and showing of a Cal3d sprite from Eulora’s client bypassing all the PS soup and based simply on *number of parts* and naming convention (aka sanely in a for loop instead of idiotically listing each, ffs) (C++).
  6. A bash script calling in turn *all* the above, including running the client so that it’s enough to change the surface definition, decide on desired parameters for the polygonizer and then just run this script to have everything done and actually see the resulting sprite directly in Eulora 3.

Surface definition and polygonization

This is based on the original polygonizer to which I added however quite a few bits to try out and experiment with different surfaces and ways to define them. Essentially it turns out that the results are at any rate best for CS/Cal3d when the surfaces are indeed closed – while the polygonizer is perfectly fine with any open surface just as well, the resulting mesh & sprite trips CS every which way and it’s really quite annoying because it vanishes unexpectedly (bits and parts become invisible at various angles) and it generally ends up even difficult to have a proper look around.

Having read some more on the topic of implicit surfaces and modeling with them, I experimented with a few types (e.g. revolution surfaces and “charges”-based ones) but the one that seems most promising currently -as a base surface so to be messed with, not used straight as such- might in fact be the cylinder with rounded ends. There are ways to make branching cylinders (the name ends up misleading since the result really is supposedly looking like a trunk with branches growing out of it rather than a “cylinder” at all), to blend them reasonably well at joints and moreover, to make them even into generalised cylinders – meaning “cylinders” defined around an arbitrary surface rather than just around a segment of a line. The Cyli sprite shown above is the result of play a bit around with this rounded cylinder shap – all its parts are in fact the same mesh, only set on the various bones and the mesh itself is a cylinder but with the half-sphere at one end with a bigger radius than the cylinder itself and set the “wrong” way. For the “correct” plain cylinders (around line segments since those are the “bones”) and their mixing and setting about on various “bones”, here are some screenshots – the first 7 are of single-end bounded cylinders and some experimenting with slight bulge in that area, while the rest are of fully bounded cylinders with matching half-spheres on both ends:
mesh2bone_2_1024.png
mesh2bone_3_1024.png
mesh2bone_7_1024.png
mesh2bone_8_1024.png
mesh2bone_15_1024.png
mesh2bone_20_1024.png
mesh2bone_21_1024.png
mesh2bone_18_1024.png
mesh2bone_23_1024.png

Formatting to CS and Cal3d mesh formats (.xml and .xmf, respectively)

This takes the output of the polygonizer (which is plain text), assumes a fixed size for whatever texture may be used, goes through all the input data collecting everything needed, does the mapping of vertices to corresponding points in the texture and then spits out 2 files (one for CS non-moving mesh and one for Cal3d mesh that is part of a Cal3d sprite) that represent the same mesh and with the same texture mapping. At this point the mesh is still as obtained from the polygonizer so without any scaling/translation/rotation applied. Some additional screenshots for this:
mesh2bone_11_1024.png
mesh2bone_12_1024.png
mesh2bone_14_1024.png

Setting of a mesh to a given bone, with some simplifying assumptions.

The trouble addressed by this part is that Cal3d/CS expect the various meshes that make up a character to be set at the position (including rotated as needed) in which they are meant to “fit” as part of a whole. Basically Cal3d/CS do *not* provide any way to simply take a mesh and fit it to a bone/skeleton but expect instead to receive – yet again, as everywhere else – the mesh already set aka moved and rotated and scaled or whatever else exactly as it is to be shown on the screen as part of the character. So I wrote a mesh2bone.awk script 4 that takes as parameters the start+end of a bone and then scales+translates+rotates a mesh to match that bone. It’s still relatively crude but it does the job perfectly fine.

This script takes as input the Cal3d mesh file produced by the previous script and the two endings of a “bone”. It makes the assumption that the mesh is set in the origin and oriented “up” on the y axis – while this is a simplification, there’s no loss to it as far as I can see: for one thing my surface & polygonizer can generate the mesh exactly like that without any trouble and for the other thing, once this part is set, the mesh can *then* be moved wherever and however needed.

With the above assumption, the script simply calculates the length of the given bone and uses an assumed length of the mesh 5 to figure out the required scaling factor. It uses the start position of the bone to calculate the required translation (3D). It uses then the bone as a vector to calculate the rotation (3D) required to bring the mesh’s own assumed axis (aka 0,1,0 since it’s the y axis, positive direction) to that of the bone (the axis of rotation is given by the cross product of the bone & Y axis while the angle is obtained from the dot product). Scaling, translation and rotation are applied then to vertices and normals as read from the input file and the result is written as another Cal3d mesh file that can be read directly from Eulora’s client. To illustrate, here’s a screenshot of setting some sort of egg-shapes on a skeleton:
mesh2bone_13_1024.png

A basic “skeleton” creation

This is currently very basic indeed and will need to get expanded later on. It takes width, depth and height as inputs 6 and then it calculates the starts/ends of a 5 bones skeleton with 2 upper limbs, 2 lower limbs and a connecting vertical “spine”, just about as simple as it can possibly get. It then calls the mesh2bones script to set existing meshes on each of those “bones” but so far it does not write out the skeleton file itself (mainly because there’s no need for it yet – it will be required only at animation time and there’s still some wtf to be sorted about what calculations are needed to provide the data the exact way that cs/cal3d expect it).

A bash script calling in turn *all* the above

The title says it all really but the great thing is that now I have this in place, I can finally start properly experimenting and trying stuff out so we get to see what and how works or not. For starters, I added to the surface/polygonizer the simple Perlin noise (the 2012 updated version though as it fixes some issues) and two variants (exponential and polynomial) of the fbm 7 to see what they can do to a poor cylinder surface. Using the fbm to change -fractally, essentially- the radius of the cylinder certainly has a visible effect indeed although it seems that it’s in all cases almost too fine, basically a sort of effect that gets perceived more as texture than as shape changing. Anyways, here are some screenshots, to get an idea of what is going on with this particular approach (the spiky cubes are obtained if the “deformation” is way too big so that the result ends up more of a visualisation of perlin noise fractally composed than of anything else):

mesh2bone_16_1024.png
mesh2bone_17_1024.png
mesh2bone_19_1024.png
mesh2bone_22_1024.png
mesh2bone_24_1024.png
mesh2bone_25_1024.png
mesh2bone_26_1024.png
mesh2bone_27_1024.png
mesh2bone_28_1024.png
mesh2bone_30_1024.png

The most important next part seems to me currently the further exploration of shapes (branching cylinders and generalised cylinders are currently on the list to try out at least) and of better ways to apply fractal deformation/surface definition to get both textures and working character variations.

  1. There is still quite a lot of reading required and so the write-up interval doesn’t quite stabilize that easily – I could make it every week and then end up with one week reporting mainly reading and very little concrete to show for it as I’m still digesting what went in; or I could go for 2 weeks and then at times I have a ton done and pending write-up and slowing me down. So ugh, so far I kept to the “report as you need”, hence the rather unpredictable intervals, sorry. If it does create a problem, let me know though and I’ll stick to a fixed interval one way or another. At the moment I’m going for at most 2 weeks but reporting it earlier if it accumulated and it requires the write-up.[]
  2. Since it turns out that CS relies on Cal3d’s own format for the texture mapping although it does *not* use Cal3d’s format for materials. So if previously I had figured out how to write a CS mesh file including texture coordinates, now I got to further figure out also how to write the same texture coordinates in a way that the Cal3d code understands, from its own mesh format. The document describing the format is useful to some extent but not fully since it’s more an indication as to what you may find in a file of that type rather than the exact precise way to specify it, sigh. Anyways, reverse engineering for the win – basically I converted back to xml one of the existing mesh files and figure it out from there, what more can I say. It works.[]
  3. It’s *such* a relief to even have this working as smoothly as it does.[]
  4. Because fuck the c/cpp that is 10 times more cumbersome even for this while delivering only the great benefit that I also need to re-run gcc every time I make a change, such benefits that I can’t begin to wish for more of them, right?[]
  5. This can be in principle calculated from the input data but so far I didn’t implement that – it would require again reading all data upfront just to calculate this; it probably will get done but it wasn’t absolutely needed just yet.[]
  6. The idea being that the ratio height/width should even be enough to tell if the skeleton is meant to be biped or quadruped really.[]
  7. Fractal Brownian Motion[]

#eulora Logs for 04 Apr 2020

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
feedbot: http://ossasepia.com/2020/04/04/cyli-nder-and-other-meshes-on-a-stick/ << Ossa Sepia — Cyli N'Der and Other Meshes on a Stick [10:10]

April 3, 2020

#eulora Logs for 03 Apr 2020

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
feedbot: http://thewhet.net/2020/04/audience/ << The Whet — Audience [00:31]

March 29, 2020

The Young Hands Club Moving Forwards

Filed under: Dark Modern Ages,Outreach — Diana Coman @ 5:18 pm

Started almost 9 months ago 1 as an access path to TMSR, my Young Hands Club project has to change moving forwards to carve its place in the new context that includes only the inheritance of a closed down TMSR rather than an active entity of that essence. And so change it will, in some aspects, but note that the core remains exactly as it was, since it’s just as valid now as it was at the start and as it will always be: the focus remains on self improvement (and that *means* change) of participants, on doing rather than talking and on growing one’s own ability and knowledge at a *sustainable pace* so that the benefits of everything you do *accumulate* over time. In other words and to state it plainly, the focus remains on playing a winner game instead of that other, all too common nowadays loser game.

As to what changes specifically in practice – I’m opening it up more widely at the very basic entry level (e.g. that Hopefuls new category). While I appreciate the DCU coinage, the stark reality is that the entry level is likely to be way more diverse and generally lower than what would warrant such lofty names. Combined with all those bitter past lessons 2, this means that there’s as yet overall very little point to (and indeed very little capacity to use or actual request for) the sort of very close and personally tailored feedback and support I’ve been providing so far to all those involved.

I’ll maintain such provision and support only for the top level, full members 3 and open up that “Hopefuls” category to provide newcomers with more limited access & feedback that still gives them nevertheless the opportunity to get involved, get to know the people and benefit -as much as they can figure out how to- from the support of the existing infrastructure and overall environment (meaning, specifically: #ossasepia as a real-time communications and interactions channel, the WoT as support for building up one’s own history and reputation, younghands.club as easy access to blogging, V for code versioning and effective collaboration, the various V trees as code library, the full library of related blogs).

Those two layers – full members and hopefuls – are not meant to be rigid in practice. Full members can choose to leave of course and to the extent that newcomers do figure out how to make use of what is available and build up their own personal reputation and history of interaction, they can certainly become full members if they are offered the option and if they see any benefit in taking it.

As before, #ossasepia is open for all productive and useful discussions really, whether you are simply in my WoT or a friend of someone in my WoT or even entirely new to everything. Everyone involved is quite welcome to invite friends 4 and to use #ossasepia to communicate and keep in touch with one another, to ask questions or to discuss otherwise any of their own work that they have *published* (on their own blog or on younghands.club, as it may be the case) and note that this is *not* limited to code! Indeed, do note that there are some minimal requirements for any code published to be considered or even discussed at all and note also that you will need an identity in the WoT (a registered key with deedbot) before you can suggest topics of discussion, with code being the most likely to require first some acquired reputation before being given more than a cursory glance. There is already such an abundance of code that nobody really needs *more* of it and especially not from an unknown and unrelated source.

If you want to figure out what things are, how they work and why the difference between those two aspects even matters, if you want to work with others and to build up on existing infrastructure that can support you to get further than if you keep reinventing the wheel every time or if you are looking for meaningful feedback, clarity, effectiveness and confidence based on actual competence and experience, come in and ask for voice, it’s as simple as that.

Just mind your step, realise that it’s all likely quite different from anything else you’ve met and known so far and take your time -even better: ask your questions- to understand how it all works, as it all goes deeper than you probably realise at a first glance. It’s that depth that can help you too, if you only choose to build on it as the solid foundation that it is and to work together with others instead of isolating yourself on your own and aiming to solve problems that have been solved already. The trouble of course is to know about those solutions – so come to #ossasepia and ask!

  1. How time passes and how this fits yet again exactly the 9 months gestation period and all those obvious and trite observations that one can easily make here. More to the point though: how much did this passing time force wider changes all around you and how prepared are you now for the new context? Did you change yourself quickly enough to find you are adapting easily now or did you hang on to the familiar for its comfort such as it was? And sure, don’t even think of answering those questions when you can instead just be angry with me for asking them so plainly, thus being yet again so “aggressive” and “violent” – isn’t that the perfect excuse to not change direction, after all? It’s fine though either way – those are the type of questions that answer themselves anyway, whether anyone cared enough about you to ask them or not.[]
  2. To list a few: what’s offered and made available is disregarded, undervalued and unused or barely used; asking for something (or even just… helping/clarifying questions, at times!) is taken as an imposition and/or a request for “free work” rather than the opportunity and opening it represents; exam-taking and superficial form-fitting without regards to the essence of what was specified/required renders any attempt to specify tasks an exercise in wasted effort.[]
  3. The current list reads: Aaron Rogier, Eric Benevides, Jacob Welsh, Robinson Dorion and Will Haack. So please let me know either in #ossasepia or in the comments below, if you’d rather move out of it now, there’s no problem from my point of view either way, at this juncture.[]
  4. I’ll give one chance to speak to anybody who asks for it; for how long they retain the priviledge to speak in chan depends on how and for what they use that chance, of course.[]

#eulora Logs for 29 Mar 2020

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
feedbot: http://ossasepia.com/2020/03/29/the-young-hands-club-moving-forwards/ << Ossa Sepia — The Young Hands Club Moving Forwards [14:38]

March 27, 2020

A Review of the Bitcoin Category on trilema.com

Filed under: TMSR — Diana Coman @ 7:29 pm

~mp_en_viaje: diana_coman, i guess you’re stuck with a much larger chunk than originally contemplated, unexpectedly enough.~

The context of this review is the recent closure of TMSR by its founder, Mircea Popescu, after ~9 years of pouring his own time and resources into it. In the immediate aftermath of that closure, I asked those I knew involved and still around if they cared to say their mind on it at all. Some left their own silence on this speak for itself and some talked through it with me in #ossasepia and/or with others in other venues, or wrote about it on blogs and in comments. Others I didn’t even know were reading my words in chan followed up with questions in the comments on the Closure article. As for myself, I said in #ossasepia as much:

diana_coman: […] there’s […] the significant part that the republic failed to exist and so the whole context is changed and so far it hasn’t even been reviewed as such; which is pre-requisite for *any* thinking of any related work, whether os or anything else anyways; I’ll probably end up doing the review too since apparently nobody even considers it needed or something but that’s besides the point.

Where does one even start though to review a project on the scale of TMSR, even considering for starters only all the publicly 1 available information and documents on it? I have of course the significant advantage of having been part of it and well active in it over quite a few years but this is just… not enough in itself for a review, it never is, no.

Looking at it broadly, there are the logs of #trilema and of the related irc chans or “castles”, the blogs of all those involved and the websites & various resources of different projects such as they were attempted (Qntra, The Bitcoin Foundation and Pizarro most prominently). Of all of those, the projects’ websites hold mainly specific information and while a review of it can certainly turn out instructive for someone setting out on similar projects, I don’t see a lot of *new* information for me to be obtained from pouring the time in reviewing them in detail currently.

I have arguably freshest in mind the logs of #trilema and of my own #ossasepia chan, by virtue of reading and re-reading them daily and even summarising them at times. Those same logs are however a mixed bag, not only as topics under discussion (which wouldn’t be a problem at all, quite the opposite) but more importantly as amount of noise, especially in the early days. So from my point of view and for my own needs, they don’t make the best starting point either since there’s less that is likely I overlooked/am not that much aware of in there and it needs to be extracted from a huge amount of text mixed with significant noise.

Having excluded both projects and the logs, I’m left with the blogs of those involved and given my reason for this review, the Trilema blog specifically. To further narrow it down, I chose to focus for now on the Bitcoin category on Trilema – for one thing, it’s the most relevant to TMSR anyway and for the other, the way I see it, what came to be known as TMSR grew in fact quite organically and therefore gradually out of MP’s public involvement with Bitcoin. While one can point to one moment or another as “the start of TMSR”, I’d rather look at it as a process, aiming to clarify for myself first of all what and how was attempted rather than what ended up being (or arguably failing to be) – to the extent that such a thing can even be gleaned at all from the articles on Trilema’s Bitcoin category, of course.

The Bitcoin category on trilema.com contains currently 224 articles, written between the 20th of March 2012 (a brief discussion in Romanian of Bitcoin’s ability to recover from events that would have sunk fiat currencies such as the Euro or the US Dollar) and the 14th of March 2020 (a detailed explanation of some events after the announced closure of TMSR, raising also quite a few pointy questions on the Republic’s actual effects on those involved). I had read all of those before, of course, but for the purpose of this review I read them now again 2, yet another time and with pen and paper in hand too. And then I re-read my notes a couple of times too, going back at times to the original articles referenced in my notes – for more details when and as needed, for potential links that weren’t obvious the first time, for checking whether some inferred link is indeed supported by the article itself and not just an artefact of my notes. This is just part of my reviewing process and it’s not even all of it but I’m setting those steps down here explicitly simply so that they *are* set at least here as such – who knows, perhaps they are of *some* use to someone else too at some point, wonder of wonders 3.

As to what came out of all the above, there’s for starters my classification of what those articles are about – my aim with this was to see how it all started, what was attempted and how it evolved over time. The categories therefore reflect this aim of mine and the classification itself is of course something you may disagree with at any point and on the grounds that it’s a poor choice of classes to start with or that any given article is incorrectly classified. In some cases I might not even disagree with your disagreement, if that does anything for you.

Category Articles
Educating/ explaining matters
  1. On Bitcoin’s ability to weather trades that would sink fiat currencies (2012)
  2. On perpetual mining bonds (2012)
  3. On why bitcoin securities can’t be regulated by the sec with a concrete -if abridged- framework from MPEx’s own legal arguments on the matter.
  4. On the practical matter of enforcing contracts (2012)
  5. On various perceived “problems of Bitcoin” and how they are problems of the speaker’s rather than of Bitcoin in any way. (2012)
  6. On current “economics” being more of a fashion (in both approach and age) than a science and the major problem of current society being the exponential consumption curve that is driven by the inflationary nature of fiat. (2012)
  7. On Bitcoin being outside human agency, like fate, like Maths and as such entirely unconcerned with people’s fears, needs, desires, lack of resources, abilities or inabilities.
  8. On likely Bitcoin market drivers at the time: mining, silkroad, gambling, finance, retail, store of value(2012)
  9. On why and how mining is not and never was the way out of poverty as imagined from a distance (2013)
  10. On how to hedge as a miner (2013)
  11. On Bitcoin being rather than doing and MP’s offered bet on it. (2013)
  12. On MPEx and why it works the way it does in answer to Datskovskiy’s 4 review of MPEx (2013).
  13. On the Buttcoins 5 (2013)
  14. On Bitcoin price and the inelasticity of Bitcoin supply with three proposed potential resolutions: consumers yield and submit; consumers revolt and governments intervene resulting in a fight; consumers revolt and entrepreneurs intervene resulting in a lot of complexity and confusion that makes Bitcoin entirely out of reach for the “ordinary person”. 6
  15. On why Bitcoin is strictly for the elite and why pushing Bitcoin (or power in the more general case) on everyone is a bad idea first and foremost for the everyones in question – the equivalent of giving young children a really big and sharp knife, why should they use only small and blunt knives -if any- after all? (2013)
  16. On the very different effects of similar events in fiat vs Bitcoin markets, serving as clear illustration of how Bitcoin preserves property rights and is for this reason a better system, so set to win in a competition with any lesser system. 7 (2013)
  17. On government attacks on money and financial networks, the pillars the whole system rests on (population increase and debasement of everything) and how Bitcoin makes it all impossible to continue as it is. (2013)
  18. On how markets work as a mechanism to make the most of intellectual contributions of those active in it provided that such contributions exist in the first place above a minimal threshold. Below such threshold (when there are for instance too many clueless active, effectively drowning rational activity overall), markets don’t work as they effectively don’t have what to work with in the first place. (2013)
  19. The price of not listening to those with a proven track record of being right, illustrated with the losses of those who didn’t heed Mircea Popescu’s earlier warnings regarding MtGox. (2013)
  20. On Bitcoin’s resistance to people’s pressure towards making it more of what they are familiar with, contrasted with the troubles the same sort of pressure cause in fiat systems and illustrated with a failed equity bubble followed by the equally failed price bubble of 2013 in Bitcoin. (2013)
  21. On common mistakes of clueless “investors” and the similarity of their investment process to pure gambling. (2013)
  22. The basic point that any evaluation of a business is strictly about its business plan and nothing else. (2013)
  23. On how and why banks lie, scams are well planned to leave the scammed without actual recovery route, scammers are always in a hurry and trust cannot be established by talking beyond the limited case of low value intangible benefits. (2013)
  24. Schopenhauer’s text on books and reading adapted to investment and money through quite minimal changes. There are no comments on this article. (2013)
  25. Why Bitcoin is the only available way to actually keep your own money, illustrated with the case of a US family who got their money seized through civil forfeiture without any charges of any crime. (2013)
  26. On the practical 0 value of “having lawyers”, illustrated with the losses of what amounts to a “lawyer warehouse”, namely JPMorgan Chase & Co. (2013)
  27. An anthology of MPOE-PR correctly and repeatedly calling out scams on bitcointalk forum. (2013)
  28. On why fiatists perceive Bitcoin’s actual strengths as weaknesses (and especially so its lack of physicality) and how long it might perhaps be until Bitcoin itself ends up replaced by something even stronger (similarly to how Bitcoin has replaced gold, on the strength of its unique immunity to human agency) (2014).
  29. On blockchain being essentially the only history that will matter and how Bitcoin splits people based on whether they can write into that record of history or not and what weight their signature in it carries. (2014)
  30. On the importance of one’s own history, truthful and timely communications, one’s own actual competence and experience (as opposed to dreamt qualifications) and the difference between a judgement call vs a dream call especially when getting involved in business; illustrated with the case of Peter Lambert. (2014)
  31. On how reusing Bitcoin addresses can strengthen Bitcoin user anonymity. (2014)
  32. There’s no end to idiots and consequently no point in waiting patiently for the world to run out of them on its own, either; illustrated with a “SEO Reputation Management warning” and a ransomware email received by S.BBET. (2014)
  33. On how Bitcoin makes it possible again to have full control of one’s own life, as an individual person 8. (2014)
  34. On the importance of context for meaning, with specific discussion of what is required for meaningful measurement and data. (2014)
  35. On identity being strictly a personal matter and sovereignity being personally invested. (2014)
  36. On why exactly there can not be multiple cryptocurrencies 9. (2014)
  37. On why selling oneself as an asset is a terrible idea for the self in question; illustrated with Gavin’s case. (2014)
  38. On the crucial difference between actual Bitcoin corporations and fiat-based pretenders or more to the core of the matter between adult children and infantile children 10. (2014)
  39. On how and why places may matter and be relevant – through being such as to attract and keep those that matter; illustrated with a part of the logs for #bitcoin-otc and #bitcoin-otc-expats. (2014)
  40. Addressing point by point pseudo-arguments for one of Gavin Andressen’s proposals. (2015)
  41. Further point by point discussion of pseudo-arguments raised by supporters of Andressen’s proposal; the important distinction between the centralized nature of Bitcoin as a concept and the decentralization of the *implementation*. (2015)
  42. On the choice between an ideology that empowers the self or one that further empowers the established powers 11. (2015)
  43. On disruption being the forced change of everything one is familiar with rather than the pleasant change of what one happens to want to change. (2015)
  44. A summary of significant matters changed by Bitcoin with explicit disclaimer as to the need to read the full references and not rely on the summary itself. (2015)
  45. Further point by point discussion of various pseudo-arguments brought by supporters of Andressen’s proposal to raise the block limit; includes also the plain statement that Bitcoin is about money and power, not about opinion and social media. (2015)
  46. A dissection of a statement on Bitcoin by Gerald Davis. (2015)
  47. An adnotated failed introduction of a newcomer to #trilema. (2015)
  48. Asking for the source of a very apt meme: I Just Heard About Bitcoin I’m Here to Fix It!. (2015)
  49. Making the illustrated point that sanity is the actual requirement for participation, not intelligence with plenty of brilliant people being nevertheless “inescapably stupid”. (2015)
  50. Illustrated example of those who don’t belong in Bitcoin. (2015)
  51. Reiterating that it’s people that have to change, not Bitcoin, as it’s always people losing out by not participating, not Bitcoin. (2016)
  52. A top of the best introductions to the #bitcoin-assets chan. (2016)
  53. On why and how a properly implemented WoT is a significant incentive for honest behaviour. (2016)
  54. A detailed explanation of the equal lack of value in all non-Bitcoin forks. (2016)
  55. A listing of concrete available ways to obtain Bitcoin: playing Eulora, writing for Qntra or going topless. (2016)
  56. On why “the community” doesn’t belong saying anything about Bitcoin, illustrated with evidence from reddit and the bitcointalk forum. (2016)
  57. A meanwhile obsolete guide to concrete ways to participate and become part of TMSR: reading the logs, playing Eulora, paying taxes, standing up a node, learning to program and using V, writing for Qntra, evangelizing, establishing credentials with the Republic, participating in design discussions or doing own thing. (2016)
  58. An illustrated explanation of how credit cards actually work, what the actual security of that “working” is worth in real terms and how it compares to using Bitcoin. (2016)
  59. An example of someone going bankrupt for not following the advice to not buy scam debt despite the issue having been explained to him directly on irc as to why it’s unlikely there will be any partial repayment of the debt since the incentives are always aligned to not pay at all rather than pay back partially. (2018)
  60. An explicit set of questions and answersrelated to working properly in general and with V & the forum in particular 12. (2018)
  61. A pun on Mircea Popescu’s surname and the long list of his gains -known as “pops”- in Eulora due to the latest bot from Mocky. (2018)
  62. An explication of a fragment of the logs noting specifically the important difference between magic and technology, between something that works vs something that works well. Awareness of this difference is itself a strict requirement to make the Republic even possible and the very reason why the Republic is an integrating whole that can’t be meaningfully broken into separate parts to pick and choose since discarding any part breaks the full chain on which meaning is built. (2019)
  63. An older discussion of Bitcoin from the logs, including how it doesn’t actually need people in general to use it (quite the opposite), how it is least good as a medium of exchange and how its change and control of everything is more likely to happen through the shaping of the new forms of things as they change rather than in a pedestrian interpretation of Bitcoin being used or directly useful as such for anything and everything. (2019)
  64. A review of early logs of the Republic from January 2014 with an attempted structured summary, examples of using scripts for such work and the approach of publishing incomplete work when out of time since there’s no possible downside to that and only the possible upside of someone else perhaps finishing the work, if it’s of any interest 13. (2019)
  65. A brief review of important points about Bitcoin and most importantly the fact that it is not fractionary. (2019)
  66. A brief post-mortem of some Republican affairs with some pointy questions about the observed evolution of people involved. (2020)
Exposing Scams
  1. On BDK.BND on GLBSE (2012)
  2. On GLBSE (Nefario and Theymos) (2012)
  3. On GLBSE “discussion”(2012)
  4. On Nefario (2012)
  5. On a pretend conference involving Nefario & co. (2012)
  6. On Icbit.se based on direct experiment with concrete data and explanations as to why and how the scam is meant to work. (2012)
  7. On calling out Patrick Harnett as involved in online fraud.
  8. Transcript of Amir Taaki’s talk of Bitcoin (2012)
  9. A detailed timeline of known losses to theft, fraud and stupidity in Bitcoin between June 2011 and December 2012 (2012).
  10. On Bitmarket.eu and how all the rest of the exchanges will follow too, for good reasons 14. (2012)
  11. On Butterfly Labs (2013)
  12. Putting together macroeconomic data in the Bitcoin space based on Bitcoin’s price against fiat, S.MPOE actions price and the MPBOR, noting the similarities to what the US enjoyed at the time when it was set for taking over the world. (2013)
  13. On yCombinator, its irrelevancy and false claims of “bringing Bitcoin to Wall Street”. (2013)
  14. On PrimeAsic (2013)
  15. On the inevitable path to scamming for kids who severely overestimate themselves in the Bitcoin world, illustrated with the case of TradeHill. (2013)
  16. On Avalon, including evidence of others promoting the founder on the btctalk forum as most ethical and trustworthy. (2013)
  17. On Pietila’s claimed competence vs stark numbers showing him selling silver at its lowest price point in the relevant interval to buy Bitcoin at its highest price point in the relevant interval. (2013)
  18. On Mercado Bitcoin, a Brazil-based Bitcoin exchange that ran code allowing infinite withdrawals. (2013)
  19. Specific concerns re MtGox’s operations including self-trading, deceitful communications, huge trade engine lag and arbitrary “waiting queue”. (2013)
  20. A discussion of Bitcoin inflation as strictly linked to market processes and economic activity, aimed at the perceived influx of people other than programmers. (2013)
  21. A dissection of how and why Ripple is such a bad idea that it’s doomed to fail. (2013)
  22. On the total irrelevancy of so-called Bitcoin conferences by total noobs to Bitcoin 15. (2013)
  23. On Pirateat40, those who supported him and why usual Ponzi operators tend to do very well in the beginning mainly due to their obvious high level of discipline that people simply want to associate with. (2013)
  24. A full description of the usual way IPO scams are made, with the illustration provided by btcgarden.com. (2013)
  25. On exposing LabCoin as a scam in real time in the irc chan. (2013)
  26. Detailed exposure of Cryptostocks being a scam rather than an exchange. (2013)
  27. On PicoStocks failing as MPOE-PR had previously publicly predicted. Links the “story of your loss” article by MPOE-PR on bitcointalk.org forum. (2013)
  28. Dogecoin and Business Insider. (2014)
  29. BTCJam. (2014)
  30. bitcoinshop.us aka Hotel Management Systems Inc., noting that due dilligence in the Bitcoin space is in fact as simple as showing up in #bitcoin-assets and actually reading the log + asking intelligent questions 16. (2014)
  31. On a potential problem with unqualified keeping of secrets, illustrated with the released transcript of a conversation with gigavps’ failed attempt to “stick MPEx investors with the bill for his various GLBSE scams”.. (2015)
  32. On Bitfinex’ misadventure. (2015)
  33. On Bitpay and their lies, stating again the importance of strategic superiority in the field. (2015)
Feedback & Reviews
  1. On Bitpay’s spamming by ignoring the choices they supposedly offer subscribers as to whether to receive emails or not. (2012)
  2. On CoinURL 17 (2012)
  3. Excerpts from MPOE-PR’s activity on the btctalk forum and some reactions to the transcript of Amir Taaki’s “talk of bitcoin” (2012)
  4. On a JavaScript game, The Biggest Fish with a discussion of how the Gambler’s Ruin problem is insufficiently addressed by the current implementation and what changes could be made to address it better perhaps. (2012)
  5. On the correct and incorrect ways to do business and business communications in Bitcoin, illustrated with examples and counterexamples. (2013)
  6. A review of the best investments in Bitcoin including only Asicminer as the only non-MPEx based entity (2013).
  7. Making fun of some clueless showing off in Bitcoin.
  8. On Just-dice.com that collected in 3 days of operation around 5k BTC available capital for covering bets, as a result of Dooglus’ previously earned reputation and his skillful adaptation of MPOE bonds to his needs. The article notes that this is effectively a form in which useful work still pays off even if it can’t be directly or immediately remunerated (as was the case for Dooglus with his previous analysis of S.DICE data). (2013)
  9. How the technically brilliant Asicminer business failed through inept handling of the financial side, including at some point the attempt to build their own stock exchange. (2013)
  10. The sad state of what passes as business in the Bitcoin space, illustrated with a detailed review of Cryptorush and specifically used as a warning and reference point to anyone wanting to actually do business as opposed to adding to the same pile of sad. (2014)
  11. A damning review of the state of the Bitcoin codebase and the coining of the term Powerfully Retarded Rangers. (2014)
  12. A proposed submerged solution for the overheating issue plaguing bitcoin miners operating in usual datacentres. (2014)
  13. On Bitcoin in Argentina. (2014)
Governance/ Organisation
  1. On the divide between those aiming to include Bitcoin in the structures of the pre-Bitcoin world and those aiming to re-structure the world around Bitcoin (2012) 18
  2. On bribes working in Bitcoin as the clear criterion of Bitcoin having fully won (2012)
  3. On the problem of Bitcoin’s ease of use combined with youngsters’ tendency to disregard reality and think themselves more than they are and a possible solution through renounciation of anonymity (2012)
  4. On scamming in Bitcoin not being worth it (2012)
  5. On Bitcoin being freedom with direct illustration of S.MPOE apparent woes in the marketplace that are a sign of life rather than a reason to worry. (2012)
  6. On MP having nixed p2p, colored coins and similars with the rather important observation that it would have been both easier and more useful for those involved had they asked him about it *prior* to engaging in it, since they’d have gotten the same feedback without wasting their time and effort on a doomed attempt 19 (2013)
  7. On concerted DDOS attacks on every major piece of BTC infrastructure and what that means, with a request to knowledgeable people (e.g. sysadmins) to weigh in on the matter. I find it interesting to note that the request went largely unanswered – there are 23 comments but not much weighing in on the matter. (2013)
  8. On MP’s warning to Bitcoin developers regarding the state of the codebase and their correct role as opposed to imagined role, including also the pointed observation on the effects of being nice to everyone at all times compared to the effects of disproportionatelly and visibly punishing offenses. (2013)
  9. On strategic superiority as correct implementation of a full solution, including hidden and forward looking parts vs the shallow “successes” based on replicating what seems to work without understanding the hidden resorts that make it work in the first place. (2013)
  10. On children vs adults and how most coders involved in Bitcoin (and generally coders that think more coding is some sort of solution to practical problems) are firmly in the children category. (2013)
  11. Making the case for people to stop buying Bitcoins at $100+ 20 as further pressure of that sort can kill the whole project given its significant weaknesses at the time: the codebase, self-styled developers, network state and lack of effective decentralisation.
  12. In detail on all sorts of observed problems with MtGox with the conclusion that, as a result, MtGox is doing more of a disservice to Bitcoin than any sort of service and effectively leeching money with very little contribution to the ecosystem in which it operates 21. As a bonus, the article explains the reason for the previous nixing of a premature rally, namely to avoid the shock of the subsequent crash.
  13. Argued position on just how and why the press does not and can not matter in Bitcoin, reiterating also the fact that Bitcoin is a construct of math rather than one of language and therefore coercitive in nature as opposed to persuasive. (2013)
  14. Proof of previous claim regarding the number of Bitcoins coming to market turning out to be correct. (2013)
  15. An early warning on what it takes to decide who will have any say in any Bitcoin regulation and the concrete reasons why it seems set to be more likely the Chinese rather than the Americans. (2013)
  16. On Bitcoin making untenable the current state-bank conglomeration and the two possible answers to that, depending on whether aimed specifically against banks or against the state. (2013)
  17. Exposing Gavin Andresen’s attempt to effectively break Bitcoin by having a server allow transactions. The article also makes the point that one should pick an old Bitcoin client and stick with that, never upgrading it. (2013)
  18. Noting that the relevance of the US as regulatory authority in Bitcoin is further diminishing and illustrating it with a ruling that the possibility to use Bitcoin as money makes Bitcoin money and therefore this in turn makes investment of Bitcoin an investment of money. (2013)
  19. Proof of Mircea Popescu’s earlier correct evaluation of Silk Road’s lack of relevancy for Bitcoin’s market. (2013)
  20. Statement of June 28th as Levison day for his turning over of private SSL keys as an 11 pages printout in 4-point type. (2013)
  21. A discussion of the Levison court record pointing out that the judge resisted what amounts to an effective attempt to take over but that the judge in question is also quite old and unlikely to have younger colleagues that are able or willing to do the same. There’s a research job offered with a starting bounty of 25 BTC and a mechanism for further donations (either anonymous or signed) to support the work. The job closes about 3 years later with just one additional donation of ~1.77 BTC from Mod6 and some amount of work performed by mats and checked at some points by hanbot (so the 2 split the bounty with 2BTC going to hanbot and the rest to mats). (2013)
  22. On Bitcoin overcoming the only real roadblock in its way and becoming the most important human activity to date, as the Chinese and the US government start mining Bitcoin at roughly the same time. (2013)
  23. Summary of several scams exposed and meanwhile confirmed as scams as well as a clear statement of having laid down the law in the Bitcoin space. (2013)
  24. On Bitcoin as a replacement of *everything*, including the electoral system, stating that “any Bitcoin business is a sovereign government, making policy decisions in autocratic manner”. (2013)
  25. A meme. (2013) 22
  26. On chances to matter in the Bitcoin space narrowing and reducing as time passes, and choices having the same impact (on the people making them, not on Bitcoin), whether made deliberately or through omission. (2013)
  27. Setting the record straight on MtGox’s history serving as an otherwise recognisable blueprint of incompetence, dishonesty and delusions of self-importance resulting in the usual scams and losses for everyone who fails to learn. (2014)
  28. On the importance of Bitcoin being fully fungible, with detailed discussion of both theory and practice. (2014)
  29. On the correct way to interact with the forum (bitcoin-assets at the time) and with Bitcoin more broadly, including the dangers of making untenable claims or promises. (2014)
  30. A warning essentially, on how and why collaboration with the enemy has always turned out badly for the collaborator, illustrated with the historical case of Georg Ritter von Flondor. (2014)
  31. Mircea Popescu states his disagreement with Warren Buffett’s optimism regarding the future of the US and sets his money by it too, through a bet on Bitcoin surpassing Berkshire as an investment. (2014)
  32. A clear indictment of the so called “Bitcoin Foundation” and specifically Vesseness and Hearn for their role in promoting spammers, creating hardforks, attempting to introduce vulnerabilities in the code and generally being harmful to the Bitcoin space through every action they attempted. (2014)
  33. The clear statement of Bitcoin being sovereign, the importance of deeds (and the total lack of importance of verbiage otherwise), the lack of anybody else having *done* something concrete towards the implementation of Bitcoin as a sovereign and the very point of the Republic to strengthen and empower participants: “None of this to in any way diminish the simple and hopefully obvious fact that without Satoshi, this entire discussion would never have happened. So yes I am great for having had shoulders of giants to climb on. The point is : climb ye in turn on the shoulders of giants that are so you may be great in turn, instead of screaming in your own head / padded cell / desert, like a madman. We’re not going for a collection of madmen over here, we’re going for the greatest republic that ever was, that ever could be, with liberty and justice for all.” 23 (2014)
  34. The 3rd bitcoin conference. (2014)
  35. The stark imposition of change that Bitcoin forces on everyone, illustrated with an interaction between Mircea Popescu, Andreas Antonopoulos and Scott James. (2014)
  36. On Bitcoin being worth at least 10`000 dollars and the old age “strategy” of “clever” people aiming to come in late and enjoy all benefits while avoiding all the struggles involved with getting in early. (2014)
  37. Proof of correcteness for MP’s previous and very prompt claim regarding governments getting involved in mining Bitcoin and the launch of S.WOL (with mike_c). (2014).
  38. An illustration by means of Bitlicenses of the ridiculousness of various attempts to claim authority over Bitcoin by mere statement of laws and licenses. (2014)
  39. The Bitcoin Lordship List. (2014)
  40. On Mircea Popescu’s influence in Bitcoin vs others’ pretenses to the same, illustrated with market charts set against the timings of his relevant public articles. (2014)
  41. A stern warning that all forks of Bitcoin will sink. (2014)
  42. On Bitcoin not being a commodity, Gavin Andressen having no real responsibilities in Bitcoin and the Financial Times being clueless on Bitcoin. (2015)
  43. Updated lordship list. (2015)
  44. On the real state of the Bitcoin network with concrete data from Mircea Popescu’s own private records 24. (2015)
  45. On Satoshi’s article on the old mail list stating his disagreement with pretender-Bitcoin developers (2015).
  46. The Basic Bitcoin Competency Certification. (2015)
  47. Mircea Popescu’s commissioned artwork of well-known characters in the Bitcoin space. (2015)
  48. On Bitcoin taking over and changing everything, justice system included. (2015)
  49. Mircea Popescu offers through a signed message a 1 Bitcoin reward for the death of Pieter Wuille. (2015)
  50. Illustrated history of the failed attempts at wrecking Bitcoin and Mircea Popescu’s role in thwarting them. (2016)
  51. Plain statement of what is required as a prerequisite for any change to the Bitcoin protocol. (2016)
  52. The third update to the lordship list. (2016)
  53. The start of a list of rogue states with the US as the first and only entry, added by Mircea Popescu (the list was open to proposals from the lordship list but there were never any proposals made). (2016)
  54. A further update to the lordship list in its third year due to the split following BitBet’s dissolution and the resulting move away from #bitcoin-assets and to #trilema. (2016)
  55. A republican thesaurus (2016).
  56. Setting the record straight on how #bitcoin-assets came to be and Mircea Popescu’s role in it. (2016)
  57. How the CIA factbook on TMSR would look like, for full illustration of what crap such factbooks are. (2016)
  58. On the unfairness and meaninglesness of the power to give names and the inevitable interplay between said power, people doing their best being at times not enough and human nature including complaining.. (2016)
  59. On how the result of the 2016 election in the US was decided in the Republic’s forum. (2016)
  60. The 4th version of the lordship list (2017)
  61. A clear statement on how Mircea Popescu single handedly protected Bitcoin from all the attempts at subversion and a pointed question as to why are there none others coming forwards to join in. (2017)
  62. A Republican Glossaurus aka Glossary + Thesaurus together. (2017)
  63. The translation to English of a S.MG boardroom discussion on choosing an encryption solution for Eulora, given that there is no Republican solution and no meaningful way to even evaluate the options otherwise. (2017)
  64. On the problem of a job board given the interplay between the cost of specifying a job and the exam-taking practice. (2017)
  65. On why integration is bad for Bitcoin, with a discussion of Bitpay’s attempts as example and noting that any attempt to include a third party in the payment structure or break the protocol (for any reason) is effectively breakage and not to be tolerated. (2017)
  66. On the attempts to have the shape of things without their essence, with concrete example in the claim of a Republic without MP or a WoT without the WoT. (2018)
  67. On technology and governance, as originally stated by Blaise Pascal and with direct application to daily life in the Republic as everyone has to be good at both technology and governance. (2018)
  68. The 5th year of the lordship list. (2018)
  69. On the Republic having reached the point where it can and therefore it has to run conversion engines, illustrated with concrete data from Mircea Popescu’s own conversion engine for girls and noting that the very creation of an environment in which such conversion can happen is concrete proof of development. (2018)
  70. On sovereignity being effectively “constructed, first and foremost, out of mandatory translation of events into meaning” and how this is worked in practice by the Republic when it rejects the interpretations of events as given by fiat pretend-sovereigns. (2018)
  71. The 6th version of the lordship list. (2019)
  72. Evidence showing that all freenode servers are owned by the US and questions on whether to move off freenode directly or peer the servers for now in the idea of moving later. There is an animated discussion in the comments at this and a general consensus on moving off freenode but in practice the move fails to ever happen. (2019)
  73. The temporary closure of #trilema for lack of working infrastructure (logs in particular). There’s some discussion in the comments between me and Mircea Popescu touching on education and the design of Trilema as an elevator to take people all the way to the top – as opposed to only as high as they were initially prepared to go. (2019)
  74. The licensing of TMSR castles coming naturally after the proposed change to the voice model to move away from one centered on a bot to one centered on the owner of the chan. (2019)
  75. The closure of the TMSR project for reasons related to the wider environment that made it essentially impossible in the form it was designed to be. (2020)
Infrastructure, Business, Tools and Tech Design & Dev.
  1. On the lack of reliable infrastructure with the stark conclusion that “either I make one or there’s none” (2012)
  2. On GPG contracts 25 (2012)
  3. On MPSICs (2012)
  4. On a unified protocol for BTC security exchanges based on MPEx’s set of commands. (2012)
  5. On a code review and insurance service (2012).
  6. On some potential troubles for business operating in Bitcoin due to Bitcoin’s anonymous (rather: pseudonymous) nature, illustrated with S.DICE’s case of being unable to prove it didn’t indulge in insider trading. MP offers 100 BTC bounty for anyone coming up with a solution (and even a split for a partial solution) but neither bounty is never claimed. (2013)
  7. On a free cash machine as a concrete and visible implementation of how Bitcoin splits human society into haves and have nots. (2013)
  8. On a brain wallet hidden among innocuous pictures. (2013)
  9. The problem of useful work that can’t be directly paid for, illustrated with the case of Dooglus’ statistical analysis of S.DICE data (while S.DICE would have gladly paid for such work, it effectively could not do it without damaging the credibility of the work itself). (2013)
  10. A complete solution for processing Bitcoin payments, explained in detail and including a discussion of its vulnerabilities and ways of addressing them. (2013)
  11. On why social engineering is the main threat one faces both as a customer and as a service provider, illustrated with a concrete example of phishing and complete with actionable strategies to protect oneself. (2014)
  12. The Web of Trust and how it works. (2014)
  13. On the usefulness of Bitcoin for discreet escorts. (2014)
  14. The move from the broken “web forum” to the better solution of a two-parts “forum” consisting in a shared, real-time communications channel (#bitcoin-assets at the time) and a collection of personal libraries (the blogs). The article lists the advantages of this approach (resilience, security, quality) and mentions the fact that this was not an overnight move but one planned and pushed for by Mircea Popescu for more than a year. (2014)
  15. Trilema adverts and War of Life (S.WOL). (2014)
  16. The launch of The Bitcoin Foundation meant to maintain the core values of the original author of the Bitcoin implementation and foster community growth and development around those values. Mircea Popescu contributed 10BTC to the new Foundation and clearly stated his availability to contribute more, provided that the funds are used efficiently and effectively 26. (2014)
  17. The deeds system (in bitcoin-assets at the time). (2014)
  18. The neat graphical representation of the Republic’s WoT after the latest update to the lordship list. (2015)
  19. The first introduction of the Bitcoin ISP 27. (2015)
  20. The introduction of V and the statement of its fundamental principles: software being “the property of the people running it, and part of the systems running it”; identity being “constructed, upon a fixed support, by others’ view”.
  21. Setting out plainly and explicitly some of the warts of Bitcoin code. (2016)
  22. A competition for a block cipher with a prize of 10BTC offered by Mircea Popescu. The prize could not be awarded, for lack of entries. (2016)
  23. The clean closing statement for BitBet. (2016)
  24. The closure of X.EUR due to David Francois leaving Paymium. (2016)
  25. The description of Permanence as “the world’s first AAI” (autonomous artificial intelligence) to be worked towards. (2016)
  26. A draft of an ideal Bitcoin wallet with an invitation to further discussion. (2016)
  27. The draft specification of Gossipd, a protocol (and its implementation) for communications relying on RSA challenges for identification. (2016)
  28. The specification of requirements for a bot to be voiced in #trilema. (2016)
  29. The specification for a trade bot for Eulora. (2016)
  30. On the different options on how to cut the wallet from the rest of the Bitcoin code with an explicit invitation for further discussion in the comments section. No discussion follows in the comments. (2016)
  31. On the need for Republican DNS and a simple way to do it, with a direct call to action, asking who wants to do it. There’s some discussion in the comments with the few commenters essentially voicing out the reasons why “it won’t/can’t work” and Mircea Popescu pointing out how it can nevertheless be made to work 28. (2016)
  32. A proposal for trb-i addressing with explicit invitation to comment and discuss it further. There’s very limited discussion in the comments with Stanislav Datskvskiy. (2017)
  33. The detailed recipe of how to stand up a constellation of Bitcoin nodes, coming as a result of a failed attempt to do so. The article praises The Bitcoin Foundation and specifically mod6’s work on the code base. (2017)
  34. The early draft of TMSR-RSA encryption scheme 29 (2017)
  35. An initial draft of GNS in the wider context of a Republican OS complete with V and Gossipd, inviting further discussion. (2018)
  36. The implicit clients of a Republican OS: TRB, replacement ircd, AMP (from LAMP), Eulora, TMSR-PGP, some coreutils. (2019)
  37. The description of the proposed changes to the voice model to center them on the owner of a chan as opposed to a bot. (2019)

Having re-read and thought through all the above articles again and looking once more at an even wider picture, there is a striking similarity that I can see in how both MPEx and essentially Bitcoin itself went from operating in plain view and offering a widely open avenue of access and involvement at first to operating in the end essentially behind closed doors and with very narrow avenues left for involvement – if any at all, indeed 30. On top of this and not unrelated, it seems to me that there has been throughout a continuous decrease in the level at which support and education aimed for facilitating access was provided, not for lack of willingness on part of the provider but for lack or insufficient numbers or capacity of takers. I dare say that’s not exactly surprising, after all 31.

The above review of all those articles provided me with a much clearer picture regarding first of all the huge amount and diversity of resources, approaches and support that was offered 32. And for my own needs, I accept this as indisputable evidence of that old, old lesson that I should have learned already for all its bitterness: offering cannot do anything 33 when lacking the matching request. So if there’s anything to be done indeed, it’s first the request that needs to be grown, teased out, brought forwards itself – and the same experience reviewed above points to the fact that there’s precious little request-capacity to be found as such in the current environment. Nevertheless, there still is, if not in those too old to want to grow, then in those too young to not want to grow 34.

The way I see it, the extensive and quite exhaustive attempt to build the Republic, for all its failure in reaching the original goal, left nevertheless a significant inheritance, of which the knowledge and lessons contained in the articles reviewed above are only a part. What is done with this inheritance – if anything – and what comes out of it though depends on what one does and how, as it’s always the case. I plan to make use of it though, especially in the form of learning from what has been made available and not attempting to reinvent the wheel at any point.

My work remains fully focused on Eulora. My personal project, the Young Hands Club, remains fully focused on providing -indeed on carving even, if need be- the sort of learning space that I can’t see anywhere else around, aimed at figuring things out, not at “being right/comfortable” and focused on changing oneself for the better not on protecting oneself from change. While I can’t change a whole environment overall, I can still provide this different space and I intend to do it indeed. As there is no TMSR anymore though, Young Hands changes too in that it can’t aim for the nonexistent Republic, nor can it provide anymore direct access to a wealth of knowledge, resources and expertise beyond my own. And it further changes in that it has to stand entirely on my own authority such as it is, without the previous backing of a license from a higher authority and therefore without recourse to the same authority for any of those involved.

As to more minute changes to Young Hands and how it operates, I’ll take the time to further mull over the relevant lessons from the TMSR experiment before I fully decide on the exact shape that each part of this project of mine is going to assume moving forwards. So far I’ll say only that I see usefulness to it and I still stand by my original statement in #ossasepia:

diana_coman: fwiw and for as long as there is a use to it that I can see, I’ll still be here.

  1. And if you didn’t even consider that the publicly available is not all there is or was to it, then you are indeed either very young and inexperienced or terribly shallow.[]
  2. Yes, this is a basic requirement for a review – to actually re-view stuff, no matter how well you think you know it, no matter how many times you “viewed” it before, no matter *what*. And no, it’s still not *enough by itself* either, I’m not giving “recipes” here for you to follow to the letter while missing the substance and then claiming you “did what it said”.[]
  3. A side effect of having re-read all those articles is that I got a significant dose of seeing a LOT of effort at stating things clearly getting even more clearly ignored instead of used. Can you tell?[]
  4. asciilifeform on irc.[]
  5. I admit I had a problem as to where does this article belong exactly, among my categories. Upon reflection I decided it counts best as education – the sort with drawing pictures for explaining matters.[]
  6. Seeing how the 3rd proposed resolution goes as far as to mention the end of 2015 and it’s 2020 already, what would you say happened in the end?[]
  7. I further find of interest here MP’s clear note regarding the lack of a different actual voice in the space and how time is running out for such voice to have any space left to say anything since he will soon have covered the whole thing: “Time is ticking away, in the sense that during the past four years there’s not yet been an actual criticism of Bitcoin published by anyone anywhere, in spite of a lot of ridiculously uninformed gargle being regurgitated wherever the brightly stupid meet. If you wait much longer I’ll have covered the whole field and there won’t really be any room to even try anymore. Hurry up, clocks are ticking away.”[]
  8. Re-reading this in 2020, it’s really one sentence that pops out for its… understatement perhaps of the trouble it points out: “And so yes, the larger society which has prevented their individuation to date is in fact all encompassing, and all-“powerful”, and ready to meddle some more.”[]
  9. The point of “multiple options” existing unmolested for as long as they are either only theoretical or otherwise small and inconsequential enough so nobody really cares about them is perhaps true in a wider context than just cryptocurrencies. Just saying here.[]
  10. Go and read the whole thing and then re-read it a couple of times for good measure too. I’ll keep here the core statement though because it explains more than I wish it did:

    The adult children wish to start a house of their own. The infantile children do not, absolutely, as the chief point in their mind, wish to start a house of their own. This is actually the last thing they could possibly want, because they do in fact depend on the support of their parents (here in the form of welfare redistributionsiv) to survive. They do however still wish for all the things people commonly desire : a greater measure of control of their surroundings of interest coupled with a lesser degree of responsibility for their surroundings of interest, and the estimation of their betters. Not of their peers, infantile offspring is not yet advanced enough to have peers, which is exactly why they’re not ready yet to have their own house, either. They wish the estimation of their betters, and their betters are, universally, the food dispenser and the punishment machine.

    []

  11. Linking this to the infantile vs adult children kind of spoils most of the surprise of the outcome really.[]
  12. Looking back at this now, it seems to me it rather got almost entirely overlooked, despite being the very clear and plain statement of *how to even work* effectively and fully leverage the forum and the others that were available.[]
  13. On reflection this strikes me to have been the original idea of “open source” itself really – except of course those mythical continuators of work didn’t materialise for open source as they didn’t materialise for Republican work and possibly don’t ever materialise for much at all just for it being made available.[]
  14. It’s funny to note though that, at the time, Mircea Popescu still considered that MtGox was not in the same bucket, “on account of its old age and well known brand”. Needless to say – from the vantage of now as opposed to then – the old age and well known brand went poof soon enough after that.[]
  15. You’d think this was obvious but then again, what is indeed obvious depends on who is looking really.[]
  16. Looking back at this from 2020 and noticing that it’s not even the first time when it’s stated plainly, I really wonder just why and how did such a simple thing turn out to be in practice such a nearly impossible thing to do for most. And the plain and clear lack of value attached by so many over all those years to *having this option* even is yet another thing to look long and hard at because it clearly has deep roots and it’s not going anywhere any time soon.[]
  17. Ad delivery paid for in Bitcoin.[]
  18. And I’ll note here this tiny bit that carries now perhaps way more meaning than it seemed to carry back in 2012:

    pigeons you live in a place where fighting back worked. the rest of us live in the rest of the world where we got crushed.

    []

  19. Does this sound familiar to you in 2020, 7 years later? If not, maybe in another 7 years or 70 years or 700 years, what’s time to you after all, right?[]
  20. It was 2013, not 2020.[]
  21. Do compare and contrast this with any of the businesses that have been at any point listed on MPEx.[]
  22. Could go into “education” too I suppose, but as this very short article says “they never listen”, so I decided to set it as governance instead, there.[]
  23. Were the giants too tall? Was the climbing too abrupt, were the winds too windy that high up and the air too rarefied and the years too many or too few or just not right, the sun too bright, the stars too cold and so on and so forth? Was it really something missing in the structure, would you say? And then pray tell – what exactly was it missing in *it*, what? But don’t hurry to answer, take your time instead and go patiently through it all, take your time to collect bits and pieces like this, set them one next to the other as they gradually build the picture of what was meant to be, of what was built awaiting those able to make it be and then go and look at what and how it all turned out instead, years later. Keep both the start and the end at the same time in mind and see what that does, what it says, what answer it gives really all by itself. Or what answer you prefer to choose perhaps, instead of reading it from such stark record. That choice is an answer too, of course it is.[]
  24. There’s only ONE single comment to this and that one doesn’t go terribly far either.[]
  25. And I’ll note here the fragment that sounds to me in hindsight as the very statement of the vision that was at the root of TMSR itself, the vision that carried within itself the assumption that it was indeed the tools that were missing and not the people: “Man at the center of all things. Man, the willing enforcer of his own promises. Man, the willing contributor to the wealth of an obviously much reduced, but by that fact probably much nicer, lovable and huggable cute little state.”[]
  26. No, they weren’t used and it’s not even that they weren’t used efficiently and effectively but simply that the funds were never used. At all. Why exactly? What had those funds missing so that they were ignored essentially, just not used at all?[]
  27. It took ~2 years for this idea to get a practical attempt through BingoBoingo’s ISP in Uruguay that failed nevertheless to thrive and closed down in 2019.[]
  28. To me it sounds especially painful on re-read because it reminds me way too much of some conversations I had with 5 year olds. Seriously, they are adamant that “it won’t work” – when they either don’t want to do it (for whatever reason) or they don’t want to admit that they had no idea it could be done. And what they generally want is reassurance that it was/is indeed a terribly difficult task in itself rather than a lack of theirs making it seem difficult to them – once *that* given, *some* will at least move on and do it. But I’m talking of 5 year olds here, ffs.[]
  29. This was implemented in EuCrypt for Eulora.[]
  30. For Bitcoin, TMSR was precisely the wide open avenue of access and its failure and closure means not at all the failure or closure of Bitcoin – what silliness is that – but simply the closure of that previously open access. For MPEx, compare the initial plan with the situation 5 years later, at the time of the closing statement for MPEx and see for yourself if there’s any similarity or not.[]
  31. It does perhaps beg the question as to what level is left now or just how low can the level meaningfully go anyway, before there’s no point to spending resources on it but this is a question that those spending the resources answer for themselves after all, not some generic question on which everyone and anyone is called to give their “opinion” of words that cost them nothing at all.[]
  32. I shall not attempt to make some itemized list here as I’ll end up re-writing that Bitcoin category if I go for completeness and otherwise I think it’s best if anyone interested just goes through the entries in the table above and extracts their own list, as they see fit for whatever specific perspective on this they may have in mind, anyway. Or if you really can’t see what was offered, just ask a clear question in the comments I suppose – that’s how things get clarified anyway, through questions and answers, after all.[]
  33. Other than frustrate I suppose, on both sides really.[]
  34. And note that I’m saying this based on a whole lot more than what is visible online as experience with helping people learn. Sure, it may still be that I’m just an optimist or anything of the sort. There are no guarantees upfront for anything, there never can be.[]

#eulora Logs for 27 Mar 2020

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
feedbot: http://ossasepia.com/2020/03/27/a-review-of-the-bitcoin-category-on-trilemacom/ << Ossa Sepia — A Review of the Bitcoin Category on trilema.com [16:51]

March 25, 2020

#eulora Logs for 25 Mar 2020

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
mike_c: Hey all – I'm going to leave the wiki at eulorum.org up for an indeterminate amount of time not less than 90 days, and then shutter it. I've seen that some people still occasionally add content there, so please take the opportunity to copy off things you'd like to keep. [14:50]
diana_coman: mike_c thanks for the notice! [15:09]

March 24, 2020

Spraying Mandelbrotian Graffiti on Euloran Surfaces

Filed under: Coding,Computer Graphics,Eulora — Diana Coman @ 7:53 pm

This past week I got some decent practice with virtual surface vandalisingtexturizing after polygonizing – and that includes some agonising, namely over CrystalSpace’s idiotic requirements for texture if it’s to do anything at all with it.

Sure, I knew already that CS can’t do anything with a texture’s procedural specification as such and requires instead the pixel by pixel description of the pretty picture to paint on whatever surface. This much was no surprise indeed. But it turns out that there can be (and therefore is) even worse than that – CS *also* has no idea nor interest to map by itself a given texture to an object, even poorly! Basically it’s not enough to feed it all the pixels of the texture – you have to chew them too! And who cares that such chewing further forces the fixing and specifying of “how to paint” in the file that supposedly is instead all about “what shape” this is (aka the mesh description file that has to include also the texture mapping). Eh, such unheard of troubles and scruples that haunt my nights and days around here, let it all rot and fester in one place, what’s it to artists anyway and not like anything else matters if it’s about pretty pictures on a screen, right?

To put the above in plain terms: CS allows you in principle to apply any texture you want to a mesh (aka polygonized surface) *but* for this to do anything, the mesh’s definition has to contain also a fixed mapping of each vertex to a corresponding point of the texture (and no, CS manual doesn’t go into such details)! The image that is used as a texture is considered a “texture map” and has a standard “space” going from (0,0) to (1,1), representing the top left corner and bottom right corner of the image, respectively. The mesh definition then has to specify for each vertex, a (u,v) tuple with the u,v values in the above space for direct mapping; negative/ out of range values will result in tiling of the texture or wrapping around (at least in theory, I haven’t bothered to fully explore this part as I do not want either tiling or wrapping of the texture).

The above means in practice that, although you can supposedly change the texture on the fly on a mesh, nothing will fit anymore unless the two textures you switch between are *both* made precisely to fit that mesh in the same mapping and all that. And there isn’t any sane default for a fit – in my naivety I thought that it would just do some default mapping of the whole texture on the whole surface but practice and this week’s dive into the code reveals that there’s no such thing attempted, no. Instead, if you don’t specify within the mesh any mapping of a not-yet-chosen texture 1, it will “apply” the texture aka the 0,0 point of it and nothing else – meaning it’s the colour of *that pixel* used… everywhere. For the same money, you can just use a solid colour directly anyway, what the fuck’s the point of specifying a texture and loading an image and all that jazz?

The obvious cause of the above insanity is the fact that you are not expected to generate anything at all – you are expected (with a view to force fed already) to “export” everything from one of those crutches for the mathematically challenged (such as Blender). And in there you manually specify some “seams” for a character so that an algorithm unwraps then the skin of the character through a cut along those seams and lays it flat in the texture file, while producing and saving also -generally by means of at least 3 renderings of the thing from different perspectives!- the mapping of vertices to the points in the texture space. What do you need else or more or even less, right?

Anyways, this solved the previous puzzle of those solid-colour surfaces of last week and of Cally’s solidly-coloured skin no-matter-what. Cally’s meshes do not contain any texture mappings so yes, either you do your own or you paint her directly at runtime or you just make her some solid colour of your choice. And for extra bonus points of wasting time, the darned thing wants all those texture coordinates specified in the xml file as a render buffer with the *precise* name of “texture coordinate” – failing silently, maddeningly and quite characteristically if you do the huge mistake of calling that, for instance, “texture coordinates”. As I did, of course, at a cost of a whole morning and assorted cussings in all languages that came to mind. Here, have some pictures of the hyperboloid that silently ignored the texture mapping (the one with spots – the very last pic in this set- is where I added the same mapping to be used for *normals* of the texture and that *worked* because there I got the name right to the letter…) for reason of one ‘s’ too many:
mbrottex_5_640.png
mbrottex_6_640.png
mbrottex_12_640.png
mbrottex_18_640.png

On the bright side, I didn’t even try anymore to contemplate the obvious what-the-fuck questions pouring out from the above. Contemplate them on your own time and your own dime if you really have nothing better to do. What I did instead was to update my awk formatting script so that it spits *also* the required texture coordinates for each and every vertex. After all, since it does all sorts to fit CS’s love of xml, why not this too? And I kept it short and simple: considering the texture square in size, it just maps the (z,x) coordinates of the shape (considering the actual interval that they spawn for the given surface, so not idiotically from 0 or some such nonsense but between their observed minimum & maximum values) to the full (u,v) space of the texture and that’s it. Why the (z,x)? Why not? Sure, there’s plenty to play around with there but at this stage I wanted to have something working and working fast, not like there’s any clear reason as to how this mapping would even work “best” or what that “best” even means in such context. I did in fact try it at first with mapping (x,y) (hence, ignoring z) but the result looks less interesting to me than the (z,x), so I stuck to the more interesting mapping. Here’s how it looks with (x,y) vs (z,x) mapping (the texture is a full Mandelbrot, coloured black inside the set and yellow/blue outside, based on normalized number of iterations, see next paragraph for more on the texture generation itself):
mbrottex_17_640.png
mbrottex_13_640.png

The easy part linked to all the above was to generate *a* Mandelbrot texture. Note the emphasis there because the Maths is easy but the devil in it goes by the name of domain colouring. Essentially the whole thing with a Mandelbrot (or fractal in general) pretty picture is how you pick and apply the colouring scheme (well, ignoring for a moment that you can further zoom in/out if you want to capture some specific bits/parts that might look more interesting than the whole; for any definition of interesting, for any combination of all the various choices, of course). And domain colouring is a whole…domain in itself, you know? Not to mention for that matter that Mandelbrot might be even used as a more general name for fractals and moreover, one could even look at the fractal dimension as the more general approach to procedural generation of anything, from texture to shapes – and get lost in *that* rabbit hole if it’s more appealing than the rest of rabbit holes around.

Mandelbrot’s pretty fractal aside for a moment, I stepped daintily over the rabbit hole of fractal dimensions and domain colouring at this stage 2, simply picking instead *a* colouring scheme by means most undemocratic – because I find it ok to look at. While I don’t mind changing it and/or implementing some other specific colouring scheme you might have in mind, at least there is something implemented and visible so far, to start from. Other than this, do tell me if there’s a request for further exploration of any of the abundant rabbit holes around (e.g. domain colouring or the fractal dimension as such). Meanwhile, here’s what the Mandelbrot texture looks like in a few colouring (starting with grayscales) versions and then how the blue/yellow one looks on some surfaces that I got to play around with:
mbrottex_10_640.png
mbrottex_8_640.png
mbrottex_9_640.png
mbrottex_15_640.png

Using the last texture in the set above, here’s how it looks applied to various surfaces I tried out as part of attempting to get a bit of a better understanding of that part too:
mbrottex_7_640.png
mbrottex_1_640.png
mbrottex_2_640.png
mbrottex_3_640.png
mbrottex_4_640.png

With the textures at least figured out as above, I’m currently working on figuring out a way that works for finally setting up a full char made out of meshes “grown” around an arbitrary “skeleton”. While implicit surfaces and modelling with them is of course yet another domain by itself, I’m not getting lost in it either, no. I still need though to get a better understanding of what works and what doesn’t (e.g. some type of surfaces have the known problem of “bulging” at joints) and how exactly that happens & links to my useful but limited polygonizer because the naive definition bumps into all sorts in practice and there’s no substitue that I know of for playing around with actual surfaces and all that. Depending indeed on the type of surface, the “bone” can even work for instance as either medial axis or control points or pretty much anything under the sun. But some concrete pictures will most likely say way more about this than all the half-digested theory can at this point so I’ll just go ahead with it, unless requested otherwise.

Based on the above plan, the next write-up will hopefully include even more mandelbrotian graffitti but on attempted meshes-on-a-stick (aka “skeleton”) or at least this is what I’m currently aiming for.

  1. I’m practicing laughter, serenity, calm and pure zen. It’s not working all that much but that’s why I’m …practicing it, ok?[]
  2. Though a 1994 edition of the reference book of Ebert, Musgrave, Peachey, Perlin and Worley made it to my shelf.[]

#eulora Logs for 24 Mar 2020

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
feedbot: http://ossasepia.com/2020/03/24/spraying-mandelbrotian-graffiti-on-euloran-surfaces/ << Ossa Sepia — Spraying Mandelbrotian Graffiti on Euloran Surfaces [17:19]

March 19, 2020

The Soap Rush And the Toilet Roll Bubble

Filed under: Lyf — Diana Coman @ 10:17 pm

While the UK had kept mysteriously going about the usual routines until just about the end of last week, the signs were there 1 and it was clear that it will all give in – possibly more intensely too, once started – soon enough, most probably by the end of this week.

And the signs didn’t lie, it’s starting indeed, the schools will close from Monday 2, most things are shutting, the people are… how to put this, calmly panicking, ok? I know it may sound like a dubious combination to you but I assure you that it’s how it’s done – it’s not yet to the point where one may be so beside themselves as to forget about the utter impossibility of being… rude even for panic reasons so there you go, the only thing left is to panic calmly and politely essentially. Anyways, people therefore started politely panicking since last weekend already: people crowded at the supermarkets and in their wake the shelves started to remain rather empty.

The progression as to *which* parts of which shelves remained empty was quite interesting to note: soap and toilet roll were first to vanish – I get why the soap 3, given that it was the only “remedy” recommended with all the insistence of having nothing else to say on the matter but I don’t know if I missed some “shit more” additional recommendation or what exactly happened there. Alternatively, there’s of course the good old explanation that “shitty times are coming indeed” so it’s possibly *that* the reason & reasoning behind the run for the toilet roll 4, granted; apparently UHT milk was next; then the horrible sliced stuff in plastic that pretends to be bread and most pasta (though NOT the “wholewheat” one, ok? stockpiling is one thing but eating wholewheat pasta is apparently still not yet fine); then (possibly since no pasta anymore?), there was a shift to more basics: flour, sugar, closing in on some oil, eggs. Somewhere on the road, most fresh vegetables started being rather scarce too. I have no idea how does one stockpile on fresh vegetables or what exactly happened there.

In any case, apparently the “schools are closing” announcement was interpreted as another call to occupy all supermarkets so this morning -since people asked me, all concerned- I took a stroll with my camera in hand and looked at shelves I never cared about before. They attracted my attention this time for being on their way to emptiness and so the occasion served to improve my knowledge of local supermarket stuff – I know now that there exists a thing called “fridge pot” and it’s apparently in such high demand that it’s now restricted to “3 per customer” for being an essential item 5. Your guess is as good – most probably better than- mine, as to what that contains:
reading_uk_5_640.jpg
reading_uk_6_640.jpg

The pastry corner is doing ok though and apparently people would still eat bread rather than croissants and pretzels (cakes were still available too, though I did not take pictures as the aisle was choked full by people aiming for all sorts of packaged “biscuits” and I really did not want to fight my way through that just to take a picture of ugly packaged “cakes”):
reading_uk_7_640.jpg

In other bare necessities – or possibly that’s *why* the toilet roll, huh – the bottom shelves in the cider, beer, lagers and assorted somethings-in-a-bottle was indeed empty at ~9am already:
reading_uk_8_640.jpg

To complement the above pictures, the BBC helpfully provided this evening the reassuring information that indeed, we are headed for that which we have known before – or at least I have known, that paragon of efficiency and cooperation, the one or less of everything. There’s of course a very rational and perfectly valid explanation, here you are, for future reference, this is how it reads in the beginning: “it makes no sense to pause to change packet sizes or change from one type of pasta to another. We have 20 different sizes and styles of pasta, we are moving that to six.” 6

Anyways, on the rainy day side, since I had the camera anyway, I remembered how I wanted pictures that don’t exist of places that I used to live in, and so I just took photos of houses, streets, parks and trees, not like there isn’t space on my blog for those too – and at least for now the grass is green, magnolia trees are flowering and spring is still coming, we are all fine – for now, as always – thank you nevertheless for asking. To end this report, here are some photos from my walk around this side of Reading, UK:
reading_uk_2_640.jpg
reading_uk_3_640.jpg
reading_uk_4_640.jpg
reading_uk_9_640.jpg
reading_uk_10_640.jpg
reading_uk_11_640.jpg
reading_uk_12_640.jpg
reading_uk_13_640.jpg
reading_uk_14_640.jpg
reading_uk_15_640.jpg
reading_uk_16_640.jpg
reading_uk_17_640.jpg
reading_uk_18_640.jpg
reading_uk_19_640.jpg
reading_uk_20_640.jpg
reading_uk_21_640.jpg
reading_uk_22_640.jpg
reading_uk_23_640.jpg

  1. The “economic measures” make for the rather predictable read, not like there was anything else they would likely come up with, clearly.[]
  2. Informing the child that he’ll have therefore to do some “school” with me at home was met with extreme enthusiasm: “YES! Way more interesting! They are BORING there!” So I said simply “all right, you’ll need some more notebooks though.” What *else* can I say to that now? I do hope I won’t end up having kids around too and a proper class occasionally if I’ll add this to the list now; seriously.[]
  3. Though do note that soap bars were rather disdained throughout all this and so at least some of them still remained on shelves despite the general search-for-soap that went on quietly otherwise.[]
  4. Come to think of it, here’s a marked downside of the electronic form of the “printed word” but then again, they with the junk mail do their best -as unacknowledged as they are for their effort- to supply perhaps a possible alternative. I wonder if the usual stickers on most doors reading currently “no junk mail here” might change at some point to “all junk mail here, PLEASE”, huh.[]
  5. Or possibly the sign’s for the fish cans, I guess. At any rate, funny how I lived undisturbed until now without ever wanting this and surely other similarly essential items[]
  6. There IS the fact that all the spurious “different types” were just different packagings, so in that sense there’s absolutely no loss yet whatsoever. But do tell me where and when have you ever seen a pendulum that swings like that only half-way, once started.[]

#eulora Logs for 19 Mar 2020

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
feedbot: http://ossasepia.com/2020/03/19/the-soap-rush-and-the-toilet-roll-bubble/ << Ossa Sepia — The Soap Rush And the Toilet Roll Bubble [19:40]

March 17, 2020

Shape Up Yer Polygons, Eulora!

Filed under: Coding,Eulora — Diana Coman @ 6:24 pm

~ This is a mixed up article with serious pictures for easy reading and silly text for hard staring. ~

Following last week’s discovery of the missing link in CS’s capabilities (no meshing and no tesselation implemented as such), I took another dive in the ocean of words on the matter, reviewing papers and theses and software monstrosities by the boatfull 1. At any rate, the core ideas are very few indeed: the focus is almost exclusively on either “assisting the artists” (in that dumb sense of catering to their convenience rather than to any attempt at excellency or even plain exploitation of the possibilities of what is a different environment than that of the traditional drawing/sculpting) or otherwise reconstructing surfaces from a *lot* of data that comes from scanning objects so basically yet another facet of that great new definition of success as approximating unanalyzed data.

The algorithms are mainly variations on delauney/voronoi refinement, marching cubes/triangles/particles for surface reconstruction and otherwise the whole of bones and skeletons pretty much stem anyway from Blum’s medial axis – that is indeed the topological skeleton of a shape but is also precise enough to result in practice in a lot of small bones if it’s taken as such. As it tends to happen in the best of cases, when I was just about to run out of oxygen for good on this, I finally turned out instead something quite promising and much in the same way as before – among the dull and broken “let’s tweak this to change that”, something glimmered all of a sudden, in quite the same way as Blum’s earlier beautiful paper on the medial axis – this time it was Bloomenthal’s paper 2 that went straight and unapologetically to the heart of the matter, from the very first sentence: “An algorithm for the polygonization of implicit surfaces is described and an implementation in C is provided.” And wonder of wonders, what this amazing first sentence promises, the following words actually deliver, too!

The algorithm itself is just about as simple as one can make it for the task at hand: the core idea is to use cubes of equal sizes for partitioning the space, to gradually build such partitioning through step by step expansion from a starting point on the surface until the whole surface 3 is contained in the obtained collection of cubes and then to decompose each relevant cube’s face into the corresponding polygons (triangles for my use). The directions to expand to at each step are easily identified by considering the sign of the implicit surface function at the corners of each face of a cube. And taking advantage of the regularity of equal-sized cubes as partitioning cells, the different cases and their corresponding meaningful expansion can be precomputed and then simply used. Note that in all of this, the cube’s size is indeed fixed but it’s a parameter of the algorithm – basically larger cubes provide less detail and that has the advantage of fewer vertices and corresponding triangles but also less smooth resulting faces/shapes that can run into very poor approximations of the actual surface especially where it curves.

In 4 neat pages, the paper goes through a clear description of the method, a discussion of some implementation choices for simplicity, flexibility (e.g. the intentionally black-box approach to the implicit function definition at polygonization time so that one can use a continuous function as intended but also anything else really, as long as it accepts a set of 3 real numbers and provides a positive/zero/negative result) and speed (in particular the hashing of values -such as vertices- that are re-used during the building of the collection of cubes containing the whole surface), several concrete examples of some implicit functions (a torus, a jack, a blob, a combination of two tori) and a brief discussion of potential issues (especially if the implicit surface function is not C1 continuous since in this case various artefacts may appear, such as truncated edges or jutting parts).

The promised code is indeed included – if in a horrible form since it’s literally dumped in a .pdf at the end, the stuff of horrors as far as code is concerned. Nevertheless, it is *plain C* indeed, it is less than 1000 lines in *total*, even including some examples and whatnots, it is clear, commented, properly named and everything else that requires apparently rediscovery nowadays and it was not even mentioned as anything special back in the 90s. Anyways, I read it at first half-expecting it’ll turn out to be just a “proof of concept that kinda maybe works on narrowly chosen examples”. As I read, I started to realise that it might actually be for once, something useful. And then I went ahead and picked the parts that I need, wrote them down in a .c file, compiled the whole thing (imagine this, *nothing* required other than a c compiler, ok?) and then started playing around with it. Ah, the joy, the pure and proper joy of *finally* having something to play around with rather than suffer through, for once.

Despite all the wonders above, the implementation as it stands has its own limitations – although at the moment I’m not even sure if those limitations are not in fact quite useful. The most important one is that a run can fail in 2 cases: if the starting point is not close enough to the surface or if the polygonization runs out of allocated memory for the hash tables it creates.

The first trouble is a bit of the price paid for the simplicity of the algorithm: the first cube built around the starting point has to include some of the surface or there’s no way for the algorithm to know which way to expand to discover the rest. I don’t think this is much of an issue since yeah, I plan to build my implicit surface functions so that I can at least find ONE bloody point on the surface, one way or another 4.

The second trouble related to running out of allocated memory can in principle be addressed most easily by expanding the maximum allocated memory (though this may be a bit more involved than simply changing a number given as it’s not directly exposed as a parameter/variable as such but set within the type definitions and so a change requires careful follow up of all parts that may require change subsequently). Nevertheless, I won’t hurry to do this change because it *also* means that the resulting polygonization will have therefore *more* vertices and triangles. And in turn, it’s not all that clear that I need or even want more vertices and triangles anyway (and certainly not an infinite/practically uncapped number of them, wtf). So it stays as it is for now, I’d say.

Armed with a working polygonizer, I then looked at the eternal problem of matching the output format of one part (the polygonizer in this case) to the input format of the next part (the client ultimately but possibly the viewer of test meshes first). As the starting point for this was to generate characters, the format needed would logically be the cal3d mesh format since each part of a character in the client would have to be in the end exactly that, a mesh in cal3d format including the “influences” of those bones-that-are-not-quite-bones. Except of course, at this stage there’s no fucking influence anyway because I’m just generating the mesh, not the animation and so the “bone” is at best an entirely abstract and rather optional idea, especially while still just trying out the algorithm and the whole. So yeah, I wrote a few lines of awk 5 to just do *both* the cs and the cal3d “mesh” format out of the polygonizer’s output – not like it’s much bother anyway and look at that, I can further *also* do any size adjustment on the mesh at the same time, if I want to (and I do want to, for a reason I hadn’t realised at first).

The reason why I did both cal3d and cs format is that visualising just one mesh is in fact more straightforward as such rather than as part of a full cal3d model. And in turn, the cal3d format requires all those bells and whistles that are in fact just stored further calculations meant to support the animation, nothing to do with the shape itself. So let that wait until I have *what* to animate and let’s see some pics already. First of all and for comparison with the results of my polygonizer, here’s some primitives generated with CS’s own internal code that simply has a fixed recipe for a few regular shapes, of which you can admire below what should be a cone (looks more like a pyramid to me, due to how the texture got applied to it), a cylinder (seen directly in the client, through Cally’s eyes of sort) and a small ellipse (seen in the viewer). Note that CS itself complains about “degenerate faces” on the cone – in practical terms this means that the collision detection system is likely to have some amount of trouble when that object is involved:
shapes1_11_640.png

shapes1_13_640.png

shapes1_14_640.png

Moving on to something more interesting, here’s a collection of various experiments with the polygonizer and implicit surfaces. For starters, here’s how a botched torus looks like – I had messed up the equation of the function and so there you go, have some funky wedges, why not:

shapes1_1_1024.png

And here’s a blob (made out by combining in the same equation the 3 parts because such are the wonders of Mathematics, yes, you can do what you want, with just an equation, how wonderful) in the extended, cvasi-infinite viewer (I had gotten fed up with the tiny stone cell and moreover, I hadn’t yet figured out that the lights were all of a sudden all wrong and as a result making everything that brownish tinge, texture be darned; sigh):
shapes1_2_640.png

Next on the list and placed in the more familiar landscape of Eulora, a shiny swimming aidtorus 6 (the texture is that of some water and it was part of my attempts to figure out the textures too – that is still ongoing because of course it’s not quite working as expected, grrr). The weird handle on this torus is a bit…weird. Basically the origin of the torus seems to be considered on the surface for some reason. It’s not a big deal, in that it can be easily fixed, of course, but since it’s not exactly tori that are going to make a character, I didn’t bother all that much to track down the full backstory of how this particular wedge here happened – just be aware that yes, it can happen:
shapes1_10_640.png

Since after a while even a torus is quite boring, I decided to see how the polygonizer behaves on an unbounded surface – especially since there were no examples of such things in the original paper. One short equation (and a few adjustments to finally streamline my process so that all it takes from generate to view is running 2 scripts & starting the client), I admired hyperboloids of all sorts (and of course they remind me of petroleum refineries, what else):
shapes1_3_640.png

shapes1_4_640.png

shapes1_5_640.png

shapes1_6_640.png

shapes1_7_640.png

shapes1_8_640.png

shapes1_9_640.png

Probably you are wondering now what happened exactly in the last picture and what are those seeming spikes – is that even still a hyperboloid at all? Allow me therefore to assure you that it is indeed still a hyperboloid, no matter what your eyes may tell you. Moreover, it’s just as much a hyperboloid as the previous ones were – it turns out however that CS tends to have trouble with the hollow, thin and unbounded surfaces that I generate. When seen from some angles, they vanish entirely and I suspect the trouble is that CS expects in fact two “layers” of triangles to be able to show such a surface as expected – while my polygonizer provides the outer surface of the thing, it does not add to it an inner surface so the “inside” is …invisible. Is this a problem worth addressing right now? I’d say it can wait for now, even though indeed, look at what mess it makes of what is effectively the simplest “wrap” around an imaginary line-“bone” aka a …cylinder (if defined implicitly, of course), what:
shapes1_12_640.png

The above experiment with unbounded shapes set my mind to rest that yes, indeed, the polygonizer can handle those. It also revealed more clearly the need to tweak both the two parameters of the polygonization depending on the shape (ie the size of the cubes and the maximum number of cubes to explore on each side) and the size of the shape after this step. This is because the *size* of the resulting shape depends on those two parameters too. And in turn, the *part* of the shape obtained will depend on them so basically one might need to tweak more than it seems at an initial naive look. Nevertheless, those are very easy tweaks really and at least so far I don’t quite see much trouble with them: I’ve already changed the code to just accept as parameters the two parameters for the polygonization so I don’t have to recompile it every time those change; and the script porting the stuff to cs & cal3d gets its own parameter to apply a scale factor as desired so that the *resulting* mesh is exactly the desired size; put together, this means that I can in fact create meshes as big as it might be required to capture nicely whatever details and *then* I can painlessly shrink them too, without loss – obviously, within some reasonable limits since if I shrink everything to a single point, there is arguably some loss of detail, indeed!

As for some fun I had after sorting out all the above, here’s a very pointy implement for all your impaling-in-walls needs! It’s defined of course through it’s implicit function or in other words, you can certainly impale yourself in an equation, no trouble:
shapes1_19_640.png

The next step on this is to sort out the textures already: the trouble being again a bit of a missing link since CS expects that the texture is an image file rather than an equation/function. I explored already to some extent what I could do there – theoretically there’s a way to “write” the texture at run-time ie directly into the render buffer of the thing. But all experiments and even CS’s example on this worked in the sense that yes, I can write whatever I want directly to the screen – unfortunately, directly using the screen’s own coordinates too rather than the object’s coordinates, which is rather a pain (and doesn’t quite make sense if I’m supposedly writing to the object’s buffer as opposed to a *global* buffer, wtf?). Alternatively, I found also that CS conveniently has even a way to write a texture to an image file but then of course, I don’t know how to write & especially how to map such a file to the vertices of a generated surface so that it’s neither just a stretched thing nor a tiled thing – the way the mapping of the texture works exactly is quite a pain to fully get because the “explanation” is not helping me much with understanding the approach itself, sigh. Nevertheless, I expect I *have to* figure this out and quite in detail at that, sticking textures for the win and all that. And then of course, I’ll need to do and stick the Mandelbrot, yes.

Once the above is sorted, I guess the next thing would be to write the surface function a bit more interesting than the above, generate it for more than one bone too and then – the UGLY part – do also all the precalculations and futzing about that the cal3d format requires in order to put the shapes at the right place, sigh.

I expect the above will still take some significant time, there doesn’t seem to ever be a very fast route for what I need to do – or not one that I can yet see.

  1. I won’t name all of them, nor even spend more time to do the full write-up, at least not for now. It’s not that I can’t find what to say or that I don’t have a pile of notes on them anyway – it’s simply that I’d much rather not go through that pile of notes again, if at all possible, thank you. To unload though for now, the names I’d mention at all are quite few anyway and go in a rather obvious order from the fundamentals to petering out on the edges: there’s Blum’s medial axis (1967); there’s Bloomenthal’s work on skeletal design of natural forms (1995), including the algorithm I’m using so far; there’s Shewchuck’s work -starting with his thesis (1995) and building up from there- on Delauney refinements for mesh generation and his useful lecture notes at least; there’s Persson’s thesis (1997) on mesh generation from implicit geometries, which includes the attempt at mesh generation based on a truss-model; there’s a readable book by Edelsbrunner from 2001 on Geometry and Topology for Mesh Generation; there’s perhaps some of the earlier work (2001 and earlier) by Amenta on approximating a surface (“power crust”) based on the medial axis transform and a union of balls – effectively an approximation of the medial axis itself. I’ve added the years for a reason but by now I’m quite satisfied I have obtained a reasonable map of the domain both in names and in time coordinates really – if you want something usable and useful as opposed to something big, unyielding, overly complex and utterly narrow in its application, your destination has to be the ’90s at the very latest.[]
  2. “An Implicit Surface Polygonizer”, Jules Bloomenthal[]
  3. If the surface is bounded – like a torus say, this is obvious enough. If the surface is unbounded, then the “whole surface” is simply defined based on a bounds parameter provided as the maximum number of cubes to explore in each direction from the starting point. Simple, effective and to the point, it’s as if the author actually wanted to make something truly useful, you know?[]
  4. There is of course also the fact that any run will polygonize a connected surface ie not disconnected parts but I don’t quite see this as any sort of limitation really – wtf is that “disconnected surface” anyway, if it’s disconnected then it’s made of 2 parts and if it’s made of 2 parts then each part can be treated as one surface and look that there’s no problem anymore and we can actually get something done instead.[]
  5. By now, I almost have a sneaking suspicion that if I ever get to actually play Eulora myself as opposed to programming its server and its client and its graphics and ~everything else, I’ll play it in awk already.[]
  6. And I can’t look at that thing without instantly hearing this song of Ioan Gyuri Pascu:

    Mi-au zis baietii:
    Vezi ca fata asta-i
    Un element inabordabil
    N-ajungi la ea, oricate precautii
    ti-ai lua in prealabil
    si eu, care nici macar
    Sa inot nu stiu
    Ce sa fac?
    Pentru un prim pas
    Musai sa-mi cumpar un colac.

    Mi l-am si cumparat
    Cu grija l-am umflat
    Usor in apa am intrat
    Si mandru am cantat

    Hei tu, mi-am luat colac
    Sa vezi acuma cum devine marea un fleac
    Hei tu, mi-am luat colac
    Sa vezi acuma cum devine marea un fleac

    Scena de film:
    Eu daruindu-i cu amor
    O stea de mare.
    Si m-am trezit
    Cu masca de oxigen
    Pe fata, la reanimare
    Ea, doctor in halat
    Cu o seringa imensa in mana
    Mi-a zis: halal colac baiete
    Noroc cu medicina romana!

    Acum ca te-am salvat, mi-a zis:
    Mai canta-mi inc-o dat’
    Refrenul acela minunat.
    Normal ca l-am cantat.

    Hei tu, mi-am luat colac
    Sa vezi acuma cum devine marea un fleac.

    I-am zis: stiti domnisoara
    La un moment dat
    Credeam ca
    M-am inecat in mare
    Habar n-aveam ca aveti
    O privire asa cuprinzatoare.
    Mi-a zis: hai lasa textele
    Galanteria nu-i intotdeauna un atu.
    Mai bine ofera-mi floarea de pe masa
    Ia-ma de brat si spune-mi tu.

    Si brusc m-a sarutat
    Apoi s-a maritat,
    Bineinteles, cu alt baiat.
    De fapt, am inventat.

    Nimic, nimic din ce v-am cantat
    Nu are baza
    Desi, desi tare, tare
    M-as fi bucurat.

    Ma rog, asta-i muzica,
    Frumoase lucruri
    Regaseste omul in ea
    Da, da, da’ ce frumoasa-i muzica
    Mai ales cand omul regaseste
    Atat de multe lucruri utile, educative,
    Frumoase si morale in ea, vai!

    Nimic, da’ nimic, nimic
    Din ce v-am cantat
    Nu are baza
    Desi tare, tare
    Si va spun, pe cuvantul meu
    M-as fi bucurat.

    Ma rog, asta-i muzica
    Pe cuvant, atat de inaltatoare
    Lucruri gaseste omul in ea
    Va spui, eu, vai de mine…
    Asa-i de frumoasa
    Si de educativa…

    []

#eulora Logs for 17 Mar 2020

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
feedbot: http://ossasepia.com/2020/03/17/shape-up-yer-polygons-eulora/ << Ossa Sepia — Shape Up Yer Polygons, Eulora! [15:47]

March 11, 2020

#eulora Logs for 11 Mar 2020

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
mp_en_viaje: http://ossasepia.com/2020/03/09/eulora-logs-for-09-Mar-2020#1002514 << word. [11:55]
ossabot: Logged on 2020-03-09 11:21:13 diana_coman: mp_en_viaje: re the easy question, meanwhile I got at least some idea as to what might be involved/the general steps; and as a result, I have this niggling thought that it's possible that either I don't quite get what you have in mind or you don't quite get what cs/cal3d can actually do (and esp what they can't /don't do); so I'd rather discuss this to make sure we are in sync … [11:55]
mp_en_viaje: http://ossasepia.com/2020/03/09/eulora-logs-for-09-Mar-2020#1002522 << so basically there's a missing part, there's no straightforward manner of going from "now take your clothes off" to "nude.jpg", and certainly not one that gimp can use. [11:56]
ossabot: Logged on 2020-03-09 11:36:10 diana_coman: … approximate the desired surface); for both steps, there are various constraints wrt to what makes for a "good mesh" – and good there means that rendering systems ala cs/cal3d will not choke on it, not that "it looks great" or anything of the sort. [11:56]
mp_en_viaje: gimp can display nude.jpg, if it exists already ; eulora can display a ~pre-rasterized~ model, if it was pre-rasterized already. [11:57]
diana_coman: mp_en_viaje: on the bright side, *meanwhile*, I might have found something that might just about…work! [11:57]
mp_en_viaje: aha! [11:57]
mp_en_viaje: i was about to say, this space is long but narrow, there's just not that many possible approaches [11:57]
diana_coman: having looked at a mountain of ~everything (and most of it not at all appealing), in the end it seems I have unearthed what I'd call just about the simplest thing possible (some ~1990 vintage if I got that straight, possibly earlier) and I have just tested this morning a polygonization of an implicit surface [11:59]
mp_en_viaje: http://ossasepia.com/2020/03/09/eulora-logs-for-09-Mar-2020#1002523 <, right! here's on sheer display my general idea of useful contribution : cutting through all that pile of alf-like crap to make a working summary of a field. [11:59]
ossabot: Logged on 2020-03-09 11:37:40 diana_coman: on the bright side, the real options there seem relatively limited in that despite a huge pile of papers and algorithms, there are only a few core things that seem to work in practice; on the less bright side, it's precisely this "meshing" that is considered/acknowledge as "the hardest part". [11:59]
mp_en_viaje: diana_coman, and did it yield ? [11:59]
diana_coman: with a bit of help from, ahem, awk to spit the cal3d mesh format, I can at least say that I got the resulting thing at least visible in cs+cal3d so I am hopeful that …yes, it can be made to work, hopefully! [12:00]
diana_coman: so far I don't have the texture for it and this might be a bit of further trouble in that I have to produce the full texture possibly (or otherwise CS will tile it stupidly) [12:01]
mp_en_viaje: lol [12:01]
diana_coman: the texture part is not yet fully clear, I'd still need to dig into it [12:01]
mp_en_viaje: diana_coman, alrighty, am i looking forward to an illustrated article ? [12:01]
mp_en_viaje: i find those easiest to read [12:01]
diana_coman: but I was quite relieved to have actually something working that goes from an implicit surface (so we can bloody well send an equation as all "here's graphics" ffs) to the rasterized list of vertices + triangles and moreover cs+cal3d eats it up without complaint [12:02]
diana_coman: basically so far it's better than cs's own "generators" huh [12:02]
mp_en_viaje: this indeed is a first. [12:02]
mp_en_viaje: it's rather like moving ancient dragon bones in their articulations, the sort of thing computers rarely see. [12:03]
diana_coman: part and parcel of this latest round of exploration of the domain, I think I have figured out as well WHY do they have that many bones and whatnots and no, it's nothing to do with rope models or whatever [12:03]
mp_en_viaje: oh ? [12:03]
diana_coman: yeah, it's most likely because all the "modeling tools" ala blender/studio max/whatevers use some algorithms to extract those and yeah, there aren't that many [12:04]
diana_coman: marching cubes (+variations) generally and that has exactly such known effect [12:05]
diana_coman: now, even my tiny ancient dragon bones (because yes, it feels exactly like that) produce quite a list of vertices + triangles but still …fewer! [12:05]
diana_coman: re article with illustrations, I was hoping to get some sort of texture on it too at first and/or to put some meshes on a "skeleton" – so far since it's literally this morning I got this going, it was just one torus and then (to make sure I'm not dreaming here), a sort of blob [12:07]
mp_en_viaje: this is the sort of thing that makes one's effort in lifting the lid justifiable. [12:07]
diana_coman: but yeah, I took already some screenshots :D [12:07]
mp_en_viaje: that's fine, put a texture on. not everything's gotta be nude now [12:07]
diana_coman: btw, the code is < 1k loc including some alternative that I'm not even using (because it has some trouble and I haven't sorted it out + it's unclear we even need to sort it out really) [12:08]
mp_en_viaje: http://ossasepia.com/2020/03/09/eulora-logs-for-09-Mar-2020#1002530 << this is absolutely so. [12:09]
ossabot: Logged on 2020-03-09 16:20:11 diana_coman: on further reflection, it seems to me that the meshing+tesselation is pretty much the only real option; because building it out of existing primitives doesn't really deliver much benefit – the little that might be won on no-need-to-mesh-or-tesselate is lost anyway on trouble at joints/connecting points for the most obvious bit (likely not even the only one). [12:09]
mp_en_viaje: diana_coman, ha! perfect. [12:09]
diana_coman: I guess if I keep reading papers at this rate, I'll be able to tell the year of a paper by its content – there are some differences that start popping out already. [12:09]
mp_en_viaje: it's usually how this goes. in archeology we call it "cultures", but basically when idiots come up with religious nonsense it goes like empress' hairdues, by fashion. [12:10]
diana_coman: apparently in science-fashion like in cloths-fashion I stick to my fashion until the world comes back to it (or not, for all the difference it makes otherwise) [12:11]
mp_en_viaje: lol [12:12]
mp_en_viaje: vintage ftw. anyways, good. [12:12]
diana_coman: so I gather we are in sync here and it's ok to proceed with this aka work to put it for test/example on a skeleton + a texture and then we see further [12:14]
diana_coman: in principle I should probably write up the whole pile of papers too but I admit I'm so meh on them that I can't even say I'll do it in more detail than "here's the one working thing out of ~everything", hm. [12:15]
mp_en_viaje: yep. [12:16]
mp_en_viaje: i don't expect you have to by-name review the celenterates. [12:16]
mp_en_viaje: if they were worthy of a name we'd know it like we know each other's. [12:16]
diana_coman: all right; I shall therefore play with a few more implicit surfaces, heh. [12:17]
mp_en_viaje: cool [12:47]

March 9, 2020

#eulora Logs for 09 Mar 2020

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
diana_coman: mp_en_viaje: re the easy question, meanwhile I got at least some idea as to what might be involved/the general steps; and as a result, I have this niggling thought that it's possible that either I don't quite get what you have in mind or you don't quite get what cs/cal3d can actually do (and esp what they can't /don't do); so I'd rather discuss this to make sure we are in sync … [11:21]
ossabot: Logged on 2020-03-04 13:10:26 mp_en_viaje: is this hard ? [11:21]
diana_coman: … before proceeding further [11:21]
diana_coman: to start with: cs and cal3d are able to do essentially *only* the rendering of what I'd call pre-rasterised "models" ; specifically for cs this means wireframe representations of a static model ; for cal3d this means skeletal/morphanimations with an emphasis on the fact that any "skeleton" is more part of cal3d's format for animation than of anything else really (and certainly 0 to do with "it's part of a character/shape/model" or … [11:26]
diana_coman: … anything as straightforward as that; if anything, the "skeleton" is at most part of the *animation* aka of interpolating between 2 static poses, pretty much. [11:26]
diana_coman: getting back to the concrete task set there, the "display" part is actually the one that is the hard part by far, from what I understand so far. [11:27]
ossabot: Logged on 2020-03-04 13:00:32 mp_en_viaje: take a fractal to be your texture ; take an arbitrary graph, to be your skeleton ; take some paramatric manner (such as, say, fibonnaci might inspire) to do the dampening. produce the object and diplsy it. [11:27]
diana_coman: if I understand correctly what you have in mind, you are simply thinking of some parametric description of the model, which arguably is "relatively cheap", sure; the thing is that CS/Cal3d can do exactly 0 with such parametric description; to "produce and display" means essentially doing meshing and tesselation (basically some sort of sampling for obtaining the vertices as a discrete representation and then defining the triangles that … [11:36]
diana_coman: … approximate the desired surface); for both steps, there are various constraints wrt to what makes for a "good mesh" – and good there means that rendering systems ala cs/cal3d will not choke on it, not that "it looks great" or anything of the sort. [11:36]
diana_coman: on the bright side, the real options there seem relatively limited in that despite a huge pile of papers and algorithms, there are only a few core things that seem to work in practice; on the less bright side, it's precisely this "meshing" that is considered/acknowledge as "the hardest part". [11:37]
diana_coman: to summarise: in order to "display" anything (so even before considering how the result of one or another approach re "wrapping" might *look*), I have to pick & implement some sort of meshing + tesselation; only *after that*, we can get to the "shits and giggles" with whatever else. [11:41]
diana_coman: I guess I should also explicitly add that the looks of whatever ends up displayed will depend significantly on the meshing+tesselation (even to such extent as to wonder how much the other part really matters in the end because the perceived result is after all ~looks) [11:49]
diana_coman: waves [14:04]
diana_coman: for added lulz, in cs/libs/cstools there seems to be an attempted implementation of some triangulation via ear clipping algorithm: it's full of commented out stuff, it has parts with comments "to finish implementing" and it's not mentioned at all in the manual because indeed, it looks incomplete at best. [14:06]
diana_coman: given that cs has at least primitives such as cones, I wonder if it's worth to attempt perhaps making a cone-based model to see how that looks like + behaves on animation; after all, there's also supposedly the "constructive geometry" approach of making stuff out of basic shapes (and at least the primitives are meshed+triangulated in the CS code – if some are basically …hardcoded o.O ) [14:09]
diana_coman: meshed+tesselated* technically speaking; I end up calling it triangulated because a. cs uses triangles for the tesselation b. I got delauney triangulation stuck in my head apparently. [14:15]
diana_coman: on further reflection, it seems to me that the meshing+tesselation is pretty much the only real option; because building it out of existing primitives doesn't really deliver much benefit – the little that might be won on no-need-to-mesh-or-tesselate is lost anyway on trouble at joints/connecting points for the most obvious bit (likely not even the only one). [16:20]

March 7, 2020

#eulora Logs for 07 Mar 2020

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
diana_coman: on the tedious side, some work got frustrated by questions that any decent docs should have answered plainly (but apparently the docs I have are indecent); on happier sides, considering quaternions in their proper environment of the imaginary space brightened up the day considerably; not to say I'm yet anywhere, but just to update that I'm not stuck yet either. [15:46]
mp_en_viaje: cool! [19:08]

March 4, 2020

No Bones in Thy Skeleton and No Theory in Thy Research

Filed under: Coding,Computer Graphics — Diana Coman @ 4:01 pm

This is an intermediate report of my past two weeks’ explorations of animated character graphics for Eulora, as part of working towards a parametrised generator of trillions (infinity!) of models. While I usually do any write-ups at more clearly defined stopping points -basically when I got *somewhere* rather than in the middle of going-somewhere- in this case I had to do this write-up simply to unload all the stuff that I explored 1. The main reason for taking the time now in the middle of it to write up what I have so far is simply that I found myself already going back through my own notes just to *remember* fully one detail or another. And rather than wasting the time to keep going back and forth through the notes, it’s way, way better to write it all up and publish it – at the very least because then I’ll actually remember it (that’s my meaning for mentally archiving something) and otherwise because it also allows others to provide any feedback they might have.

Keeping in mind therefore that this is simply a stop *on the way* to somewhere rather than any planned somewhere as such, here’s what I looked at so far, what I did and what I found out as a result:

  1. Sockets for attaching one mesh to another on the fly with CS+Cal3d.

    In principle this is absolutely needed so that one can show visually the result of actions such as equipping tools/weapons/cloths and the like. Theoretically and from reading the relatively sparse documentation & examples of both CS and Cal3d, I had naively set this as an “easy and quick” sort of thing – in practice it turned out to be of course not all that easy and quick at all. I’ve spent a bit less than 2 days on trying to make it work in client 2.0 and while I managed to create from code any sockets I choose on a Cal3d mesh and moreover to write the code that uses them (aka attaches another mesh to that socket) according to what all the docs say, the results so far are annoying like hell: there’s no error and no complaint and according to everything available all is perfect, except the “attached” mesh does not bloody show at all!

    While I am quite sure that I *will* have to sort it out and make it actually work sooner or later, at this stage I decided against spending more time on it because on one hand it’s not yet burning and on the other hand, giving it some time will most likely help since in the meanwhile I’ll anyway get to know everything relevant way better than I do right now. So much for “easy and quick” task though – and I can’t tell you how annoying this “result” here actually is. For what it’s worth, I even suspect already where the issue might be, namely at the exact positioning of the socket, because the positioning has to explicitly choose a *triangle* of the whole bloody mesh to which you want to attach something. And so either you know that mesh in full detail or it’s very easy I guess to attach the thing in a way that doesn’t show. Anyways, that’s pretty much why I think I’ll have a way easier time sorting this out at a later stage – this part will become clearer as part and parcel of writing my own mesh generator.

  2. Detailed study of Cal3d formats to fully get what my generator would need to produce exactly anyway. As a practical example for this I used the files for the Cally example character (see next item) but I took initially some time to go through the formats with pen and paper at hand as there’s a marked difference between knowing the formats to be able to plug them into the client (as I knew them already) and otherwise knowing them to the level of detail that I need to be able to generate new files that would match exactly what I intended to represent in the first place.

    The full set of Cal3d formats consist in 5 types of files: skeleton, mesh, animation, morphanimation and material. There’s a binary and an xml version for each of those but Cal3d’s handy converter works to convert both ways so there’s no issue on this front that I can currently see. As CS can’t use materials in Cal3d format anyways and Eulora is currently not interested in morphanimations, I focused exclusively on the remaining 3 types: skeleton, mesh and animation.

    The skeleton file held the first surprise for me in that the name is misleading really: it’s not at all a skeleton (aka bones, despite being called everywhere “bones”) that is stored in there but at most a set of …articulation points, I’d call them. Essentially a “bone” in cal3d’s format is simply ONE POINT and that makes a huge practical difference because one point does not have any length or thickness – it has merely a parent and 2 sets of transformations (where by one transformation I mean a set of one translation and one rotation, with the rotation given as a quaternion in cal3d’s format): one that is relative to the parent bone (so effectively defining the point’s position with respect to the parent bone rather than with respect to the whole model’s origin point) and one that is basically the reverse transformation for the position in the model’s space (aka with respect to the model’s origin space).

    The transformation relative to the parent bone is confusingly called just “translation” and “rotation”. The root bone is the one that has no parent and – implicitly because explicitly would be way too clear – its own origin is in fact the model’s origin. Then the other set of transformations are called – for added confusion points – “local” though they are essentially relative to the model’s origin rather than the bone’s origin. The thinking behind that local though is that they are the transformations applied to a mesh’s vertices to bring it from the model’s space to the bone’s space. I can see the reasoning but I find it very unhelpful and the reason is of course the fact that I’m looking at it with the aim to generate the darned thing while all of it is built with the aim to render it so everything is pretty much falling the wrong way around, every time. Not that it’s unexpected or any news, no.

    Moving on from the skeleton, the mystery of how come the bones are in fact only points has its solution in the mesh file – as long as you remember that it’s again made for a quite different purpose that mine. A bone’s length and thickness matter because it’s those that determine otherwise which parts of the attached mesh move and in what way in the end. But since the cal3d formats are not concerned with figuring out which parts need to move, there is indeed no need to store that information (length and thickness) explicitly in the skeleton file, right? So, what you get instead is the already-calculated (pre-chewed, rather) exact values – and in the mesh file at boot, since yeah, it’s the mesh’s vertices that are affected. Moreover, you get to further realise that the whole pretense of “meshes being attached to bones” is misleading as apparently CG 2 ~always aims to be: there is no attachment as such because when you render a mesh, the skeleton and any “attachments” are anyway totally ignored – it’s only during animations that the skeleton matters at all and even then, only for those “bones” that are explicitly present in the animation’s keyframes.

    To recap the above mess, my current understanding is this: in the skeleton file there are only the origins of each “bone” given in a hierarchical set of transformations starting with a root bone (that has no parent and that actually is as a result at the origin of what’s considered the “model space”) as well as the transformations from model space to each bone’s space; in the mesh file, there is a full list of vertices given through position & rotation *in the model space* (so no, not hierarchically at all, you need the damned foot itself to know where the foot for that particular character needs to be) and having further attached to them “influences” 3 from any number of “bones” – note that those “influences” have any…influence only at animation time, as they don’t do anything at all when just rendering the mesh itself; finally, the animation file consists in sequences of transformations (translation and rotation, as everywhere) given for each “bone” with respect to its parent (so supposedly in the “bone’s space”).

    The above better understanding of the formats came in a small part from re-reading the Cal3d docs (that didn’t take that long since there’s really not much to those docs) and otherwise in a lot bigger part from the practical messing about with generating some stuff (see below, after the Cally mapping item).

  3. Mapping the Cally example as a means to get a better understanding of what goes into a fully working animated character and figure out in all the needed gory detail just how all the different parts work together.

    As this was purely a study task, everything went fine: I converted the binary cal3d files (skeleton, meshes and animations) for Cally to xml format with cal3d’s own convertor (in cal3d/bin) and then went through them in detail with pen and paper at hand. As a result, I got the “skeleton” in clear, all its 37 “bones”, I admired the horror of the meshes being defined as lists of vertices and triangles making up the surfaces (“faces”) and I finally understood more precisely what’s with the “tracks” for animation – it’s just how Cal3d decided to name the set of keyframes defined for each bone as part of one single animation.

    The benefit of the above is not as much something I can show as concrete result but it’s a lot in terms of practical experience and otherwise more concrete understanding that helps me going further and that I otherwise simply needed. It took only a few hours as the model is not huge and the main part was mapping the skeleton and otherwise just a bit of a mesh and one animation to get an idea.

  4. Prototype toolchain as a means to experiment and explore as well as allow this part to work outside the client itself since it really makes little sense to have to plug any attempt into the full client just to see the mess.

    The current prototype toolchain relies on CS and Cal3d, of course, but otherwise it’s very light. I adapted the previous viewer and bashscript for Cal3d models so that it works as a quick way to test whatever my own generator spits out in cal3d format. Then I wrote a quick prototype (it’s less than 1k lines of cpp code itself) that can currently correctly write so far csf (skeleton) and cmf (mesh) files in cal3d format, while also playing around for a bit with some code-generation of “mesh parts” that relies for the shapes themselves on CS’s regular shapes (ellipse, specifically) and otherwise allows tweaking of the generation through a set of parameters (so far the desired height of the model and the ratios x:y, z:y; while in principle I had in mind also the number of various limbs aka legs, arms, fingers and tits, so far I fixed those to just get something working and showing since at this point it’s anyway not helping much to spend more time on additional parameters). The current code successfuly generated as a result a “ellipse-figure” aka a biped that has 1 or 2 ellongated/flattened spheres (based on an ellipse rather than a circle) making each body part, manages to keep them together in a recognisable biped-shape and otherwise got its head bobbing about -if rather to the side for now- by stealing the relevant head-bobbing part of cally’s “walk” animation. It’s of course not only ugly but not at all the approach I intend otherwise for the generation of chars but it served well for this initial exploration anyway.

    The above prototype is *not* intended in any way to be the generator (or even part of it) as such – it is just the initial practical exploration mainly to start figuring out what the output needs to even consist in & how it works. For the actual generation approach there are quite a few directions I have in mind to look into and filter to see what is worth giving a proper spin and/or start from, otherwise (see the next item in the list – the state of theory review).

    NB: the animation format is NOT yet spit out by the current prototype, but since it’s still xml, I don’t expect it will be any bigger trouble than the rest really. The more painful part with all those formats is at most this bridging of the gap between the logical place of some parts when generating the model vs what the format wants because of rendering convenience (e.g. the influences on a per vertex basis and located in the mesh rather than in the skeleton). As it is, I lost quite some time to make that head bob and it’s still not exactly bobbing in the right place – there’s some further detail that I still don’t fully grok on how the animation is exactly specified. So this is still on the list as such, but my current plan on it is that I’ll work on in parallel with and as part of advancing with more concrete explorations of actual generation of stuff.

    The above prototype was quite invaluable really and on the very bright side, I have now the assurance that it IS indeed possible to spit out -even from my own generated mesh from scratch- the exact formats that the current client can work with, even if otherwise the geometry and possibly the meshing too can be perhaps described sanely aka through the chosen parameters rather than through the full resulting sets of everything. On the side, I also got as part and parcel of this to explore the regular 3d shape generation that CS currently provides: while there are supposedly cones, cyllinders, spheres (built based on ellipses), boxes and capsules, the practice shows that many of those are not all that great generators since the result fails CS’s own checks – the engine itself complains either that the object is “not closed” or that there are “degenerate faces” and in principle both of those complaints can create visible performance problems if the number of such objects is high enough. This came as a surprise really but I don’t think it actually matters much since I don’t plan to use CS’s capsules and the like anyway. (The sphere works fine and it’s actually used for the current default sky but I don’t plan using it for the generator anyway.)

  5. Theory exploration as a means to improve my own knowledge in this field (since I hadn’t otherwise much exposure to it so far) and to get some more ideas as to possible options and promising directions.

    For the theory exploration I started from character modeling, thinking – rather naively, on hindsight – that it’s precisely where one gets to figure out what the whole process is there and what are its key parameters, constraints, requirements and issues. Possibly these are indeed hidden somewhere in plain sight – and if you know where, please leave a comment pointing me to that where – but at least within the limited time I had, what I got instead of process and all that jazz was the realisation that the focus is at almost all times on “assisting artists” rather than exploring the space and possibilities that automation offers (such as it is, maybe for good or for worse but it…is).

    Basically the automation is considered at most a sort of crutch to do what the artists don’t know (and would rather not learn either, from what I can tell), a data cruncher (for instance to extract features out of large databases of human faces) and otherwise a reliable grinder where the task requires one, as is the case for instance with mirroring the two halves of a character so that the result is perfectly symmetrical. This reliance on the machine for perfect symmetry ignores of course – while specifically and vocally aiming for “realism” and “real-like” results – the fact that no human being is actually perfectly symmetrical or even regularly “asymmetrical” anyway. This sort of mismatches aside, the overall point is simply that there is precious little exploration of fully automated generation as such 4, the little there is tends to be found anyway in the CAD 5 domain and otherwise unearthed in some incipient forms from quite a few years ago, which by now is not at all surprising if you remember Chomsky 6

    Besides the unexpected pleasure of Blum’s paper on the medial axis 7, the few useful bits I got nevertheless out of this part: a better understanding of some terms dear to artists, most notabbly rigging and skinning. While there is some loose usage of those two terms, what I’ve got pinned down as more or less reliably explaining what is going on would be that rigging is concerned with how the movement of internal parts – be it “bones” if you must give them that name but more generically, whatever internal parts are considered for modeling purpose – affects the vertices at the surface of the visible shape, while skinning would be the opposite of this, so focusing instead on how movements or changes to the outer vertices correspond to movements and more specifically rotations mainly of inner joints. In the usual simplified manner of a type of practice, rigging often turns into the building of a skeleton and positioning it just-so to fit at exactly desired places inside an individual model (because god forbid it would fit more than one!!!) while skinning turns into deciding which vertices get linked to which bones and how much/in what exact way do they move/change with that bone.

    Besides the terms themselves, I further got to go at least for a quick scan of a few algorithms that are apparently most used (in CG it seems to go exactly like this – for all the huge pile of papers, the algorithms actually used are very few in any given domain anyway) for calculating at rendering time the results of a given model that is already fully rigged and skinned (“smooth skinning” seems to be a very popular choice of algorithm for being good enough, pretty much). And from there on, I had a quick look at skin binding and bone linking approaches too, though not in a lot of detail. The point and gain of those was mainly to get some idea of what the known problems and issues even tend to be and what sort of solutions have been found. Apparently when it comes to bone positioning and linking, the core (other than hand-picking/adjusting and/or machine learning based on image datasets) is still Blum’s medial axis and when it comes to meshing (describing a surface through those vertices and triangles dear to CG because of fast rendering), the core is Delauney’s triangulation.

    The above narrowed the further space for exploration to looking at least at what has been done perhaps using Blum’s and Delauney’s work (and Voronoi I suppose I should say, since it’s linked anyway). While I still want to have a further look in there as it’s not otherwise a domain I was very familiar with, the exploration so far has turned out at least one rather interesting approach to mesh generation 8 by Persson and Strang 9, relying on a rather neat I’d say physical analogy of finding the equilibrium of an underlying truss structure. Basically the generator starts with a random number of vertices in the pre-defined bounding box in which the end shape will fit. Using the physical analogy of a truss, those vertices would be the nodes of the truss and there are force-displacement relationships considered to be acting for each “bar” (aka edge between vertices, as calculated) in the truss. Those force-displacement relationships depend on the length of the bar and moreover, there are further “reaction” forces introduced at the extreme boundaries so that vertices are kept within the bounding box. The algorithm adjusts iteratively the positions of those nodes until the whole structure reaches an equilibrium. At each iteration, Delauney triangulation is applied to adjust the edges (hence the “truss’ bars”) between the new positions of the vertices. The geometry itself is simply and neatly described by a distance function that gives for any point its distance to the boundary of the domain, returning negative values for points inside and positive values for those outside.

Conclusion and Next Steps

As it turns out, this stop in the middle of the road to put stuff down was more than needed – given that it took almost 2 days just to select, structure and do the proper write-up of the main points of interest. Nevertheless, it’s still just somewhere in the middle so the next steps will just push each part further – only it should be a rather easier push, now that I archived the last bulging set of notes and can therefore start on a new one.

On the implementation side, the next step is to write the code to spit out the animation file too (and that would mean I at least have the working writers for all three formats that are an absolute must from the cal3d set: skeleton, mesh, animation). Then I’ll need to decide on some concrete generation approach (beyond the prototype/testing let’s play with spheres) that I want to try in practice and give that a go, see what comes out of it and then iterate on this. I must say that I really like the idea of a generator that effectively looks for an equilibrium solution for a set of displacement functions that are let loose in the 3D space that can maximally contain a piece of (or the whole) model. Nevertheless, given the discovery of the dubious “skeleton” actual meaning, I’m keeping for now a very open mind here and I don’t really want to fix much upfront since I can’t quite tell how one or another approach really would turn out.

On the supporting implementation side (aka “theory”), I still need to do quite some reading both on the Maths side and on the applications, such as they are, to CG. In particular, I think I have a bit more to explore to put my mind at rest regarding automated generators of geometry & mesh. I also need a better grasp on Delauney’s work and on Blum’s medial axis at the very least.

Considering the above, it might very well be that the next write-up finds me still somewhere in the middle of the road rather than moving on to something-other-than-generator but at the very least it should be *further ahead* on this road, I would think.

  1. And as a result of the write-up fully structure and archive it all in my head, as it always happens with write-ups.[]
  2. Computer Graphics[]
  3. Technically, Cal3D also allows some “weights” to be attached to each vertex with the purpose of specifying the “rigidity” of each vertex. Those are called in the documentation “springs” and the underlying idea is to provide cloth-like or hair-like effects (when fully not rigid).[]
  4. Even approaches that state “generation” and seem bent on using automated approaches turn out at a closer look to still see the whole exercise as ultimately at most supporting some “artist” and therefore absolutely focused in a…GUI. For example and among the better attempts at least (as it provides some concrete skeletons (and some variations obtained at least programmatically on those): “Creature Generation using Genetic Algorithms and Auto-Rigging”, by Jon Hudson, 2013.[]
  5. Computer-assisted design[]
  6. And a good example specifically here for automated generation is to my eyes a 1967 paper by Harry Blum, on “A Transformation for Extracting New Descriptors of Shape.” To quote directly from his introduction, the very first paragraph: “I have approached the problem of shape by assuming that the current mathematical tools were somehow missing essential elements of the problem. For despite more than two millennia of geometry, no formulation which appears natural for the biological problem has emerged. This is not surprising perhaps when one recognizes that geometry has been born of surveying and has grown in close collaboration with physical science and its mensuration problems. A corollary to this position is that there is some central difference between the biological problem that we are trying to deal with and the physical problem that we have been dealing with. Consequently, such an approach requires a restudy of visual function to assess what such a geometry should indeed try to accomplish. Unfortunately, the problem of exploring function is not easy to do in isolation, since the visual world is extremely rich, and hypotheses about visual shapes and their functional value to an organism may reflect the cultural bias of the experimenter to a large degree. I have chosen to enter the problem from the middle by hypothesizing simple shape processing mechanisms, and then exploring together the geometry and visual function that result. One such mechanism is presented in this paper. Since it leads to a drastic reformulation of a number of notions of visual shape, it may be useful to review briefly some of the notions implicit in our views and experiments.” – It was simply a pleasure to read this, especially after sifting through quite a lot of what I can only summarise as “and now we tweaked this so it looks more like that and/or it’s easier for the artist to do with just a few clicks.” And yeah, in case you are wondering – Blum’s medial axis is still used, very useful and very much studied, as it represents the topological skeleton of a shape, way better than hand-placed “bones” and whatnots, at that. As an aside, apparently even possibly too well from at least one computational perspective, in that even small changes to the boundary of the whole shape can trigger large changes to the medial axis.[]
  7. And for a *very* unfair comparison, I’ll quote here some modern production, on page 12 of Desmond Eustin van Wyk’s 2008 vintage “thesis submitted in fulfilment of the requirements for the degree of MAGISTER SCIENTIAE in the Department of Computer Science, University of West Cape”: “Also, programming in general is difficult and operators or functions used in procedural modelling are of a low level and requires understanding of programming concepts during script development.” Full marks for the candid admission but this is it – the newly minted magister scientiae in recognition for the work done to avoid the difficulties of programming and the horrible requirements of understanding concepts. What, do you have any problem with that?[]
  8. Note that CS’s and more generally CG’s use of “mesh” is annoyingly loose from a stricter, more mathematical I guess, perspective: while “mesh” is used to stand for what is rendered on the screen as a model’s appearance, strictly speaking it’s simply the description of a surface through simpler shapes – most usually triangles for 2D; when looking into generating models though, one needs to consider before that the generation of “geometry” aka of the actual 3D shape that exposes those surfaces to be meshed. So the generation of a 3D model has to include at the very least 4 parts (generated through whatever means and possibly shared across multiple models but still generated at *some point* in time and through *some method*, nevertheless): a skeleton aka a hierarchical set of joints and a way to describe how they act upon a given geometry+mesh when such is attached; the geometry of the model’s parts and the concrete meshing of its outer surfaces (hence, the vertices and triangles that the graphics engine ultimately works with); the animations that describe essentially movement of vertices anyway, whether it’s done indirectly via the “bones” of a skeleton or directly as is the case for the so-called morph-animations.[]
  9. Per-Olof Persson and Gilbert Strang, “A Simple Mesh Generator in Matlab”, SIAM Review, Vol. 46 (2), pp. 329-345, June 2004[]

#eulora Logs for 04 Mar 2020

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
feedbot: http://ossasepia.com/2020/03/04/no-bones-in-thy-skeleton-and-no-theory-in-thy-research/ << Ossa Sepia — No Bones in Thy Skeleton and No Theory in Thy Research [12:20]
diana_coman: mp_en_viaje: ^ the promised write-up [12:22]
ossabot: Logged on 2020-03-03 19:13:47 diana_coman: I have ~3k words trying to set down the work of those past 2 weeks and I'm still not done; and it's anyway a set down out of necessity (aka it needed the structuring) rather than out of having arrived at a can-stop-here point, sigh; anyways, I should be able to finish and publish the write-up tomorrow. [12:22]
mp_en_viaje: i just finished mine, so thus i can now proceed… to yours [12:23]
diana_coman: ah, new trilema read? /me goes to read then [12:24]
mp_en_viaje: diana_coman, noy so fast lol. so basically, "bones" should really more straightforwardly be called pinch points ? [12:32]
diana_coman: mp_en_viaje: it's a mess – basically it depends on *which ones*/where you mean; in cal3d's format they are pretty much pinch points, yes; in theory and in modelling tools (such as Blender) you get proper bones with length and thickness and all that, precisely because those things DO matter for figuring out which vertices are affected [12:34]
diana_coman: not even pinch points really; just…points, lol [12:35]
mp_en_viaje: so basically there's a half-compiled sitution because in geometrical truth the only thing they can be is pinch points ; but in an intuitive sense they'd better be somewhat more like the layman's notion of a bone in the ghuman skeleton [12:35]
diana_coman: it's not that the attached mesh gets pinched there [12:35]
mp_en_viaje: diana_coman, but that if it DOES get pinched, it will have to be there [12:36]
diana_coman: hmmm, in practice, annoyingly and infuriatingly and insanely – not even that; you can have those points ANYWHERE and they can "influence" ANY vertices ANYWHERE [12:36]
diana_coman: for all the logic that makes [12:36]
mp_en_viaje: i confess that all is not so much [12:36]
diana_coman: welcome to my love of CG! [12:37]
mp_en_viaje: let's work at this through the immediate example. [12:37]
diana_coman: is listening [12:38]
mp_en_viaje: unwind with me the history of mathematics, and let's be again in the days of lagrange. the problem of modelling a rope under load informs all this, yes ? the "bones" aka "pinch points" are the discrete portions of the rope (or length of chain), and in ~this~ sense any one can influence any one ? [12:38]
mp_en_viaje: ie, mediatedly through the nearest one ? [12:38]
mp_en_viaje: this might explain at least why they tend to count so ungodly uselessly many, anyways. [12:39]
diana_coman: hm, I would *hope* that indeed that is what informs all this (though evidence that there is something exactly informing is rather ..sparse); and yes, the theory as far as I can see it seems to be that indeed. [12:39]
mp_en_viaje: alright, this is pretty fucking stupid, not to mention century+ out of date [12:40]
mp_en_viaje: what you get when you teach people the alphabet only, they'll "read" their "own" vulgate into the bible. [12:40]
diana_coman: well, honestly, they probably don't mean that specifically; there's nothing all that clear at any point; it's more a matter of "this seems to fit/work well enough and it's intuitive!!" [12:40]
mp_en_viaje: rediscover half of everything, make a tower of it… [12:40]
diana_coman: sure, there are some approaches that go further and consider also a layer of muscle between those bones and the mesh etc [12:40]
mp_en_viaje: how are the points given ? like if there's a bone (1, 1, 1) and a bone (3, 0, 0) and a bone (0, 2, 1) then the model's implicitly a rectangle 3x2x1 units ? [12:41]
mp_en_viaje: well, a parallelipiped, whatever. [12:42]
diana_coman: mp_en_viaje: heh, why u so logical; the first insanity is that the skeleton has nothing to do with the model at any other time than strictly animation-time [12:42]
mp_en_viaje: but i mean, how are these "bones" defined ? not by absolute position ? what are they then ? [12:43]
diana_coman: the bones are defined by relative position to their parent bone; ie it's a tree with a root bone [12:43]
diana_coman: it's that root bone (the one without a parent) whose position is considered the origin of the model [12:43]
diana_coman: so if the root is at 10,10,10 then the model's space is supposedly with origin at 10,10,10 [12:44]
mp_en_viaje: so polar rather than cartesian, 1st bone is always 0, 0, 0 and the 2nd being 1, 1, 1 and the third being 1, 1, 1 makes the third absolutely 2, 2, 2 away from wherever the first is ? [12:44]
mp_en_viaje: or are they aCTUALLY given in steres and distances ? [12:44]
mp_en_viaje: steradians* [12:45]
diana_coman: they are actually given as relative transformations so translation (3d vector, x,y,z) from parent bone and relative rotation (quaternion from parent bone) [12:45]
mp_en_viaje: aha [12:45]
mp_en_viaje: so it then can be said that indeed each bone is the length (of unclear thickness) from its parent to "itself". ie, bones are only defined as the point of their ending [12:46]
mp_en_viaje: on the implication that all bones off this bone START where it ends. [12:46]
diana_coman: on top of that, each bone further stores the translation+rotation to bring a vertex to the bone's own local space; so basically the inverse transformation for the cumulative transformations from the root to that bone [12:46]
mp_en_viaje: this actually makes perfect sense to me. [12:47]
diana_coman: I guess you can see it that way, yes; but there's no thickness then anyway [12:47]
mp_en_viaje: it's not clear why thickness is wanted. [12:47]
mp_en_viaje: but yes, abstract 0-thickness bone seems to be the case [12:48]
diana_coman: because it normally matters if you really go for a biological model, doesn't it? position of bone inside the volume of flesh and the bone's thickness also matter with respect to what the movement looks like [12:48]
mp_en_viaje: yes, but you see, i'm sure there's a parametric distance somewhere, saying how close to the abstract bone the texture should pack [12:49]
mp_en_viaje: so yes, you can't really have eccentric bones, but then again… something you gotta give [12:49]
diana_coman: mp_en_viaje: the format itself makes sense as above; it's not as much as it doesn't make *any* sense, it's simply that it's geared towards using the results of something already generated and fully "produced" aka it's not the generation that is coded but the most detailed (as in as much detail as needed) result [12:50]
mp_en_viaje: why do you say so ? [12:50]
diana_coman: heh, that sort of thing "a parametric distance" is at most in …blender [12:50]
mp_en_viaje: what does prevent you from wrapping a mandelbrot over an arbitrary bone tree, for shits and giggles ? [12:51]
diana_coman: the most obvious example I'd say is the actual "which vertices does this bone influence" [12:51]
diana_coman: the "which vertices" is in the mesh file where each vertex has attached the list of bones that affect it and the "influence" as a \% [12:52]
diana_coman: so there's nowhere the function that calculates "what vertices are affected if this mesh is attached to that bone" [12:53]
diana_coman: it's already the result of such a calculation (whatever that may be) [12:53]
mp_en_viaje: hm [12:54]
diana_coman: re wrapping mandelbrot or anything else – I need to do the actual wrapping and then spit out the coordinates, vertices, faces, influences, whatever comes out of it. [12:55]
mp_en_viaje: so use something simple, like a law of halves. closest does 1, the next 1/2 and so on [12:55]
diana_coman: sure, I'm not saying it can't be done or anything; I'm just saying it's something I'll need to figure out in some way, wherever I'm starting from; it's an open field, can do whatevers. [12:55]
mp_en_viaje: aha [12:57]
mp_en_viaje: well, i think this'd be worth trying out. [12:57]
diana_coman: mp_en_viaje: what specifically? at this stage I can think of ~anything worth trying precisely because there's not much in the way; nevertheless, all tries take time and some effort, ofc. [12:58]
mp_en_viaje: take a fractal to be your texture ; take an arbitrary graph, to be your skeleton ; take some paramatric manner (such as, say, fibonnaci might inspire) to do the dampening. produce the object and diplsy it. [13:00]
mp_en_viaje: display* [13:00]
diana_coman: mp_en_viaje: and the geometry? [13:00]
mp_en_viaje: isn't the geometry implicit in the bone and the bone-texture relation ? [13:01]
mp_en_viaje: isn't the geometry implicit in the bone structure and the bone-texture relation ? [13:01]
diana_coman: you do realise I have to produce the list of vertices AND triangles, nothing less and no implicit will do; not sure I get fully your meaning of texture because the CS "texture" is just an image really. [13:02]
mp_en_viaje: and this takes to what i'm missing. [13:03]
mp_en_viaje: yes, texture is just an image. what triangles ? [13:03]
diana_coman: the "mesh" aka specifically the description of the outer surface (of an underlying 3D object supposedly) through triangles in CS case; basically approximating the 3D surface through a long list of 2D triangles [13:04]
diana_coman: by "geometry", CG means the 3D shape [13:05]
diana_coman: I get it that you'd expect to have a skeleton + influences on texture and so derive the shape from there; except that's not what CS expects/does and so if it is to be that, I'll have to explicitly do that derivation and spit out the shape in "neutral pose" or whatever. [13:09]
mp_en_viaje: is this hard ? [13:10]
diana_coman: recall, the skeleton is used only during animations, while there IS a "model" even at rest and then the skeleton is fully ignored to start with. [13:10]
mp_en_viaje: well yes, by the cs. but i mean, this is what "wrap" or "produce" means above [13:10]
mp_en_viaje: again, take a simple rule, "around main bone, distance x ; around child bones, distance x/2 ; etc". [13:12]
diana_coman: I can't really say atm; it's not like I have any experience at ALL with this sort of thing or with meshing or with ANY of it; it took me two weeks after all to at least get wtf is exactly the full input cs/cal3d want anyway; I can look into it and see, that's about all I can say. [13:12]
mp_en_viaje: sure. [13:12]
diana_coman: anyway, re the above, why is the texture even needed, I don't get it? [13:12]
diana_coman: you can use any image as texture anyway [13:12]
mp_en_viaje: what ~I~ am saying on the other hand is that caution can't even be thrown to the wind, for lack of anything but wind to set it on in the first place [13:13]
diana_coman: it's on top, painted on whatever shape I define through those vertices and triangles [13:13]
mp_en_viaje: so you know, just do a thing and let's laugh at the product. we'll be way ahead of more responsible adults who do not venture themselves so unconscionably. [13:13]
mp_en_viaje: diana_coman, i expect you need it to ~see~ the thing. [13:13]
diana_coman: neah, can even paint it green,w hat [13:13]
mp_en_viaje: nah. you're looking for subtle detail and meaning. [13:14]
mp_en_viaje: this is why i said mandelbrot. [13:14]
diana_coman: hm [13:14]
diana_coman: from what I gather, your suggestion is in fact simply to "grow" the structure around a set of bones and rely on the mandelbrot paint to trick the eye? [13:15]
mp_en_viaje: i just want to see what comes out. this isn't a definitive or any other kind of solution [13:16]
mp_en_viaje: the paint is there to, eg, illustrate something about "this is JUST how the bones should work" or "this is TOTALLY NOT how t=bones shoul work" that we aren't atm in a position to divine for lack of experience [13:17]
mp_en_viaje: the whole exercise is self-didactic. [13:17]
diana_coman: as I said earlier – at this stage and the way I see it, pretty much ~any try is worth the same; but I guess after this write-up I got rather cold re "bones" [13:18]
mp_en_viaje: ie, very cheap experience of the very best kind is available, let's have some. even if the only product of it is that we can later say "well, at least this model isn't as bad as the mandelbuddy", we are still ahead of more responsible adults who do not venture themselves so unconscionably. [13:19]
diana_coman: ie my inclination was more towards generating whatever shapes of some sizes and *then* attaching those to even random bones for all one cares [13:19]
diana_coman: I doubt there's anything really very cheap in there, heh [13:19]
mp_en_viaje: i think this is better than that. [13:19]
mp_en_viaje: well, eyah, cheapness is always relative. [13:20]
diana_coman: why? [13:20]
diana_coman: why this better than that , I mean [13:20]
diana_coman: (with cheapness it's clear enough, lol) [13:20]
mp_en_viaje: i got that. because, i believe, that forces you to make more assumptions you're not aware off that then you have to fight with. [13:21]
diana_coman: hm; funnily enough what I had against the skeleton-based in pretty much the assumptions, hehe [13:22]
diana_coman: perhaps it's simply that I can see them better there than in the other case, might be. [13:22]
mp_en_viaje: consider the matter from the traditional republican pov of standing and opposability. you will be asked "why do you even think this is a shape ?" what do you answer, "Because it's in my geometry shapebook ?" then what of "what makes you think your book has any power here, mage ?" [13:22]
diana_coman: anyways, fine with me, I'll re-read, try to see what it takes, shout when stuck and otherwise see. [13:22]
mp_en_viaje: k [13:23]
diana_coman: mp_en_viaje: because it's an equilibrium :D [13:23]
diana_coman: I don't care of no geometry shapebook; it could not be any other way, given those here parameters; if you don't like it, change the parameters [13:23]
diana_coman: and/or the process, sure. [13:24]
mp_en_viaje: you said "make some shapes", did you not ? [13:24]
diana_coman: yes, but "shapes" does not mean regular shapes or even "usual shapes" [13:25]
mp_en_viaje: but you will have to by your word make some actuall shapes, specific and given. [13:25]
diana_coman: hm? so you make with the wrapped mandelbrot, what [13:25]
diana_coman: or what, because you don't call them shapes they are not that? [13:25]
diana_coman: I make some "actual shapes" aka the result of one process+one set of params, that's all [13:26]
mp_en_viaje: and how do you know they are shapes ? [13:27]
mp_en_viaje: i can say "dude i dunno, i just fucked with the bones, WHICH ARE PART OF THIS". what can you say ? "I got them from geometry, which should be a part of all things" ? [13:27]
diana_coman: uhm, I suspect it's just some superficial misunderstanding really [13:29]
mp_en_viaje: well, in any case it's why i suspect this is better than that :P [13:30]
diana_coman: on one hand I'm not that sure that any bones are part of it; on the other hand you seem to invest "shape" with more meaning than "a finite piece out of the infinite 3d space " (since it's 3d shapes we are talking about, to be more precise) [13:32]
mp_en_viaje: their space is in principle great, and the actual space of interest in context an unknwon carving from it. hence the problem, an why "it forces you to make assumptions you then have to fight". [13:33]
mp_en_viaje: anyways, re to have to plug any attempt into the full client just to see the mess. << is this so ? [13:33]
diana_coman: the way I see it you go for growing it out of a root (the bones) while I go for carving it out of the 3d volume in which it supposedly fits, that's about it all [13:33]
diana_coman: while initially I was thinking indeed of growing it from the root, the bones debacle dissuaded me from the assumption that indeed that is the root (if there's any clear root) [13:34]
diana_coman: mp_en_viaje: what being so? now there's the adapted viewer so no, don't have anymore to plug into the client , can see it in the viewer, that was the point of it. [13:34]
mp_en_viaje: yes, is the client so bulky it's worth having a separate viewer ? [13:35]
mp_en_viaje: rather the problem is that the client fucks the ooda loop spuriously, innit. [13:35]
diana_coman: mp_en_viaje: ofc [13:35]
mp_en_viaje: idiots. [13:35]
mp_en_viaje: how they manage to always so unerringly cut the branch under foot at the tightest point… it's like god hates people. [13:36]
mp_en_viaje: anyways, i suppose that code is useful because… well… it might even end up backported ol [13:36]
diana_coman: and you know, it's insane to go through the whole "load the world" just to see a test char ffs; not to mention that no matter how you put it, the viewer is …tiny. [13:36]
diana_coman: anyways, this doesn't mean that I don't intend to see the models in eulora too; it's just that it's really wasting time to fire up the client for each and every viewing of whatever attempt, pretty much. [13:37]
mp_en_viaje: yeah [13:37]
mp_en_viaje: anyways, as you say, pretty good news. [13:38]
diana_coman: it dawns on me that my complaint re "wasting time to fire up the client" is terribly funny now given how it's anyway the client that starts 10x faster than the deployed client since no preloads and all that, lolz [13:39]
mp_en_viaje: yes well :D [13:39]
diana_coman: but for futzing with gen-chars, it's still too much. [13:39]
mp_en_viaje: this is how it goes, nothing more intolerant of the slowness of fast performance than the same spirit that turned mere performance into fast performance in the first place. [13:39]
diana_coman: lol, I can see it, yes. [13:40]
mp_en_viaje: relying on a rather neat I'd say physical analogy of finding the equilibrium of an underlying truss structure << right. [13:55]
mp_en_viaje: I must say that I really like the idea of a generator that effectively looks for an equilibrium solution for a set of displacement functions that are let loose << i think for the record that this intuition is sound. what exactly would be the meaning of such a thing in the context is a little vague yet, but otherwise i don't expect there's alternative approaches. [13:57]
mp_en_viaje: that blum quote in footnote 6 is fucking beautiful. [14:01]
diana_coman: it is, isn't it? and coming after a boatload of crap, it literally made my day, that Blum paper. [14:04]
mp_en_viaje: i see it. [14:04]

March 3, 2020

#eulora Logs for 03 Mar 2020

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
diana_coman: I have ~3k words trying to set down the work of those past 2 weeks and I'm still not done; and it's anyway a set down out of necessity (aka it needed the structuring) rather than out of having arrived at a can-stop-here point, sigh; anyways, I should be able to finish and publish the write-up tomorrow. [19:13]

March 1, 2020

Martisor

Filed under: Lyf — Diana Coman @ 7:59 pm

Two silky threads, one red, one white, twisted together and tied in a little bow around some small, colourful trinket, like so:
martie_1_1024.jpg

That’s a Romanian “Martisor” 1 and it’s given by men to women 2 on the 1st of March as a sign of friendship, of appreciation, of happiness at making it out of yet another winter or more generally of whatever any individual might want to make out of it. And I find myself still wearing one on my coat for each first week of March, though one of my own picking nowadays, mostly as a reminder. The exact reminded part itself seems to change a bit as each year passes but that’s no surprise to me at all.

When I was little, those Martisor were for me -for all their cheapness and falsity perhaps and whatever else you might want to call them otherwise- a very welcome bit of colour, warmth, light and even smiles in what seemed otherwise the unrelenting and unending exact opposite of all of those. I know there’s no way you’ll fully get this if you haven’t lived through the same years in the same place among the same people – and possibly not even if you have, for memory is such a fickle and personal thing and all that. But I’m writing it down here nevertheless, mainly for my own record and for setting it down explicitly – even if it’s indeed after all those years.

The gray and drab of those times came out, indeed was *made out of* much more than just the bare concrete of stacked up cubes passing for blocks of flats. It was made mainly from lack. The lack of something worth having, from books worth reading – they came packed in a bunch so you’d have to get 10 shitty ones for the 1 possibly passable, if you found that one at all anyway – to food worth eating, to friends worth having 3.

I don’t think I can quite forget those half-putrid frozen mackerels that were just about the only “fish” that you could buy in the shop or the already-green-tinged salami that would give me the hives anyway (literally and no wonder at that). And more than that, I can’t forget the cold that had me sleeping at times with a fur hat on, the homeworks I did at candle light and more generally the dark that would come down over the whole town without notice or pattern of the exact time but on most evenings anyway, not for lack of street lamps but for lack of electricity – my hometown being an industrial town with several active and large petrol refineries, the residential needs were last on the list and so usually going unmet since why would they be met anyway, not like anyone would *do* anything about it.

While not actually doing anything about it that I could notice at all, people reacted nevertheless to all the above. And the main reaction that I could easily perceive was one of adding more to – or perhaps the very main source of – the grayness in the end – the meanness and the closed, drab faces waiting in the endless queues, talking instead of working or doing the work with the same disdain and almost hatred that they seemed to have for everything and especially for anyone -for the very few ones- trying to escape the grayness and the dullness. Pushing one another for a little space in the overcrowded bus or for a loaf of bread when the remaining loaves were clearly fewer than the people remaining in the queue and otherwise -for as long as you did not challenge any of their expectations, of course- being all friendly and welcoming indoors except almost always at the most superficial level of stuffing you with a food that you could even quite guess in advance, in a decor that you’d know in advance, on a background of concerns and smalltalk that you’d also – like everything else, if you paid any attention to it – know in advance for there was mostly one -or sometimes less- of everything.

I don’t say all this to complain of anything that was – it was and I lived through it so I want it said plainly, that’s all. There were of course a few exceptions to the above, all the more notable for it and invariably, having all the more scars and others’ hatred to show for it, too, unsurprisingly. But their stories are for another time.

For now and for the beginning of every spring, I still wear on my coat the small red and white thread with a little trinket of my own choice, as a reminder of all that was and may even be again, it’s not as hard as it may seem. And for this year, I wear it as a very simple reminder of how much gray I carried through long time ago – so much gray that this same tiny trinket that passes almost unnoticed in the bright lights of today seemed nevertheless at that time, even if only for a little time, one of the brightest and most colourful things around.

May you have a colourful and happy spring and may you always fully know the value of what you have, too.

  1. From the name of the month of March – Martie; from the name of the God of war, Mars; supposedly for the start of spring – that war of new life, I guess.[]
  2. At least in the region where I’m from as otherwise if you search around, there are places where it works the exact opposite way. As with anything else of this sort, “tradition” has more to do with unexamined habits than with any meaning, anyway.[]
  3. Though I got quite an education in friends NOT worth having so overall I don’t complain about it at all. It’s a far better lesson to learn early on, for sure.[]

#eulora Logs for 01 Mar 2020

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
feedbot: http://ossasepia.com/2020/03/01/martisor/ << Ossa Sepia — Martisor [16:17]

February 29, 2020

A Basic Requirement for the Literate Introduction of New Tools

Filed under: Coding — Diana Coman @ 8:46 pm

This started as a comment 1 on bvt’s very useful work building up the vtools suite. As I really liked his approach 2 and I would really prefer to have just one suite (vtools) with everything V-related instead of various bits and parts, I carved out some time this week to take the reground vpatches, go through the whole code (to see how it fits in my head) and then give it quite a few spins and tests (to see how it fits my hand 3, too).

Going through those usual steps of exploring new code and tools meant that my list of notes also went through its usual cycle: first it exploded with all sorts of questions; then it shrunk as most of those questions were answered either at fitting in head time or at fitting in hand time; at the very end, there were only a few questions standing and – more troublesome – a few things that were useful in the previous tool and are missing from the current one without any good reason that I see. And as I was trying to write up those remaining notes into a coherent comment on bvt’s site, the text kept pushing away from the concrete bits of code in question and towards the wider issue of what it means and what it takes to switch from a working, tested, often-refined tool (or setup even) to a new (or even only partially new, as is the case with this addition to vtools) tool.

The concrete itch that grew into all this is the fact that bvt’s new utilities and v.sh wrapper provide only one way to see the whole tree of a set of patches – visually, using graphviz that produces a pretty .svg illustration (the command 4 would be v.sh graph dot-file svg-file). While I agree that the visual illustration is very nice and all that, I have never installed the graphviz & deps on *any* of my machines and I can’t say I ever found a reason for which I should – nor do I really see such valid reason now. The old v.pl simply spit out upon request either the list of leaves or the full flow of vpatches in the console and even though it didn’t bother to indent it as a tree, it was useful nevertheless. Certainly, it didn’t make for much of a *tree* image as such and the lack of indentation also meant that the order was not necessarily the one of a press (since it wouldn’t be clear which patches are the leaves – if/when there are several leaves). Nevertheless, it was very useful and so I would logically expect that any new tool would pick it up and either improve on it or keep it the same. Failing either of that, I’d still expect at the very least to read upfront and before any code the *reasons why* that functionality is not present in the newly proposed tool.

For the case at hand, I am aware that the flow command morphed into “flow leaves” but the helpful listing of leaves themselves got silently dropped and without it, the “flow leaves” command is not enough really, since it requires that one identifies/finds/knows what the leaves are to get anything useful. I honestly can’t see: why was the listing of leaves just dropped? and why did the basic functionality of printing out a full (or the longest or all possibilities or…) flow morphed instead into a flow-to-known-leaf without the support of a “print leaves” command?

There are indeed otherwise the antecedents/descendents commands (that had equivalents in the old tool) that allow *some* exploration of a given tree and eventual finding of leaves too but it’s very tedious -and I can’t see any good reason for it, either- to actually rely on those and effectively walk the tree node by node from the genesis down (assuming at least the genesis to be easy to pick out of the pile just by name of the vpatch).

To answer my own question above, I can see the approach of “oh, I never used that and I always/anyway have/like/find-useful graphviz so didn’t bother with any text tree or listing of leaves”. Which is possibly fine and nice when one either starts a new tool from scratch – ie there is no other already-iterated-upon tool covering that part and therefore nothing to review and no reference point to start from – or otherwise works alone and intends to keep it that way. But when there is already a tool that is the result of a lot of public discussion and quite a few iterations, it strikes me that there should be a minimum requirement to at least *clearly state* from the very start any different decisions made with respect to functionality provided and *why* exactly are such changes *justified*. Because reviewing new code and trying out (not even adopting, just reading and trying stuff out!) new tools is a *cost* that the code author asks any potential readers of code (hence, proper users) to pay and moreover to pay upfront, whether they end up finding the new code useful & fit for purpose or not!

While it might seem at first sight that this is just asking yet-another-thing of the code writer, this is not just for the sake of asking. First of all, the way I see it, this is in the writer’s interest very much too – the very exercise of purposefully reviewing and properly considering the why-s of an existing tool *that is not picked at random nor is it the result of a random/unknown process* is likely to *help* with any new design and at the very least spark some further discussion if nothing else. Second, since this is not just any previous tool picked at random, but a tool that is designed, made, vetted and used by L1 (not to mention more generally by people presumably highly ranked in one’s own WoT), it seems to me a basic and quite mandatory part of any literate approach to coding to reference the original choices properly from the very beginning – meaning from the very design and conception of any new tool.

Considering the above and given that the scarcity is always a scarcity of *time* and not one of code or of tools, I’d go as far as to set this on my list of prerequisites for even considering any new tool that is touching on the functionality of an existing in-WoT tool: either it’s introduced with a proper referencing (that may include more or less discussion, too) of relevant existing history or it’s not introduced at all as far as I’m concerned 5.

  1. And it ends up as this article PLUS a comment on his site – that’s a plus as far as I’m concerned and not a random one either but directly linked to why I like bvt and his work.[]
  2. His proposed tools effectively extract out of vpatches the information strictly required for the V-work so that all calculations are not encumbered by whatever amount of code the vpatches may contain. This strikes me as not only very useful when the code base is large (as his own timings clearly show) but also inherently sane and the correct way to go since there’s no real reason why one should carry the code where it’s not directly needed and/or not use instead the hashes of files and hunks of code exactly for what they are best for, after all.[]
  3. And I’d link directly Trinque’s coinage of the term except the select still doesn’t work on his blog.[]
  4. The full current list of command as helpfully provided when running v.sh without any parameters:

    v patches — list patches
    v wot — print WoT
    v flow leaves — print patch flow
    v graph dot-file svg-file — graphviz plot of dependencies
    v antecedents patch — list patch antecendents
    v descendants patch — list patch descendants
    v origin hash — find patch that introduced the hash
    v press directory leaves — press all patches up to head

    []

  5. It’s quite interesting how people even come to me bent on “making tools” but don’t stop one minute to consider that their “making of tools” is more of a drain on other people’s time and therefore a request they are trying to impose on others rather than any “help”. You’d think they have found otherwise a ton of people clamoring to use their great tools or something. Anyways, I’m too busy to care much about assigning blame and all that but at least for starters, I’ll lay this at the already-filthy door of the open sores approach.[]

#eulora Logs for 29 Feb 2020

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
feedbot: http://ossasepia.com/2020/02/29/a-basic-requirement-for-the-literate-introducing-of-new-tools/ << Ossa Sepia — A Basic Requirement for the Literate Introducing of New Tools [17:04]

February 22, 2020

#eulora Logs for 22 Feb 2020

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
diana_coman: mp_en_viaje: http://ossasepia.com/2020/02/18/strutting-waving-and-skin-sharing-euloras-defaults/#comment-7624 [09:25]
diana_coman: mp_en_viaje: re bones, there's actually more to it; I had ~same idea initially on a naive pass but that's precisely why I played around with Cally, namely to figure out how those "bones" work for graphics because it's not all as straightforward as it seems; anyway, it's a bit too early to set already number of bones just out of "how it seems it should be", tbh. [09:35]
diana_coman: those past days I've been reading and looking and figuring out what I need so I can start on the sort of generator you want; it's not that I'm stuck or anything – and if I do get stuck, I'll shout promptly. [09:36]
diana_coman: fwiw re unexpecteds – there's a bone for instance in that …pony tail! [09:37]
diana_coman: heh [09:37]
mp_en_viaje: aha [10:16]
mp_en_viaje: i know there is ; i'm saying there's no real need to. i can live w/o pony tails. [10:16]
diana_coman: mp_en_viaje: on a basic level, the more bones there are, the more fine-tuned the movements; so I suspect the "minimum number of bones" is going to be found with a bit of trial and error really, more along the lines of what's the minimum we can live with, sort of thing; fwiw cally actually has 37 bones. [10:26]
mp_en_viaje: aha [10:27]
diana_coman: the above being said, it's worth noting that the "final result" or "how it looks" is not all that simply related to just bones or not even fundamentally to bones in the end [10:28]
mp_en_viaje: im sure. complexity is rather driven by bone count i expect [10:28]
mp_en_viaje: or w/e, size [10:28]
diana_coman: because there's a lot to where in the meshes the bones are placed (as in the volume of a mesh) + the part that I think matters even *more*, to the exact influences defined for each bone on connected meshes [10:28]
mp_en_viaje: as well as specific differences. the more bones there are, as a count, the more inter-species difference (if we define, as we should, species by bone structure) [10:29]
diana_coman: I suspect it's more on those influences than on bones as such [10:29]
diana_coman: yes, species certainly by bone structure, I don't quite see anything else that makes sense otherwise [10:29]
mp_en_viaje: aha. yet another thing set in stone! [10:29]
mp_en_viaje: ultimately i expect a model may be composed out of species (ie, skeleton) and mesh pile (ie, individual characteristics) [10:30]
mp_en_viaje: with relatively few skeletons and relatively numerous mesh groupings. [10:30]
diana_coman: heh; honestly, I did read a lot of yuck those days but I needed to read even this sort of yuck because it gives me a better grasp of the whole, yuck included. [10:30]
mp_en_viaje: aha [10:31]
diana_coman: mp_en_viaje: the way I see it, individual characteristics are likely to be even more easily defined by tweaks to those influences really; the way I see it, think of how each person has a posture and way of moving – those make to the eye a lot of difference really, even if the mesh at rest is identical (it won't seem identical because the influences deform it differently) [10:32]
diana_coman: essentially I'd aim to go first for the *smallest* changes that matter rather than radical stuff, because radical stuff is more likely to just break the working and not even deliver; that being said, once I get something concrete going, I can always *try* whatever and try I will. [10:33]
diana_coman: after all, what's the point of making it if not to try and break it too, sure. [10:33]
mp_en_viaje: i do not think taking it as far as posture and way of moving is worth our money. [10:34]
diana_coman: the currently annoying part though is the nonsense of reading the stuff from cal3d format, either binary or xml – while I could in principle plan to make the generator spit that format, it makes way more sense to be able to just plug the values in the code really [10:34]
mp_en_viaje: i'll be perfectly happy with identical postures and ways of moving, and all difference consisting of mesh parameters and bone length / angles. [10:35]
diana_coman: mp_en_viaje: that's not a part you can wave as such ie whether you plan to experiment with it or not, you still *have* to decide on one "posture" [10:35]
diana_coman: and there's no way to decide so it's *anyway* experimenting [10:35]
mp_en_viaje: yes, but one for all pcs. one for all goblins. one per skeleton basically. [10:35]
mp_en_viaje: i suppose there is that yes [10:35]
diana_coman: mp_en_viaje: I don't see why or how do you think it's eating up more resources/different than the reast tbh [10:36]
mp_en_viaje: now that's a good point. [10:36]
mp_en_viaje: what the hell's the difference, huh. [10:36]
diana_coman: I agree that it might turn out upon experimentation that no, it doesn't work/do well; but it might as well turn out it…does; and it's anyway in there like the rest so might as well try it too, what. [10:37]
diana_coman: aha. [10:37]
diana_coman: other than that, I have to admit I'm still rather fuming at those segfaults in cal3d when I tried to just plug in a mesh from a different char, grrr [10:37]
mp_en_viaje: yeah, that'll have to be drained [10:39]

February 21, 2020

#eulora Logs for 21 Feb 2020

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
mircea_popescu: lol [03:54]

February 20, 2020

#eulora Logs for 20 Feb 2020

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
diana_coman: while reading a bit around to figure out "the state of the art" re characters and animations in computer graphics, here's a gem from a Master's thesis: "Also, programming in general is difficult" [10:47]
diana_coman: in the review chapter on procedural generation of characters, lolz. [10:47]

February 18, 2020

Strutting, Waving and Skin Sharing (Eulora’s Defaults)

Filed under: Coding,Eulora — Diana Coman @ 4:33 pm

Figuring out the way to make default Cal3D sprites (aka animated characters) and their animations work again in Eulora’s client turned out some unexpected pockets of sanity in CS/CAL3D, once the pile of rotten PS on top of this particular bit managed to finally get on my nerves to such extent that I fully sidelined it – if not yet removed as such (mainly because I didn’t spend the time to fully follow what else might depend on it *being there* for the time being). Nevertheless, the overall evaluation of this part as likely to be more time consuming and iffier than previous parts remains valid – it took this whole past week to figure out quite important parts of it and although I have a whole pile of findings to unload here so that I can move on more easily, there is still a lot more that needs to be done and none of it looks in any way easy or even all that *clear*, no matter how you squint or glare at it. Leaving the squinting and glaring for the very end though, I’ll go first through the illustrated guide of what works so far and what I added new since last article in this series.

Aiming this time to set in stone a default character rather than just have something to move about, I looked more closely at what concrete options there are currently – in the deployed client as well as in CS and Cal3D. The two Euloran characters (male & female aka Boxy & Foxy) have a few advantages, namely that they are made for Eulora and that they have some items of clothing that suit them reasonably. Nevertheless, both the characters themselves and the clothing are not really suited for any defaults, because they basically are too monolithical to start with – the body/clothing parts are already linked together so that one can’t switch/mix/match as required for various changes. Moreover, there are only 2 animations so not much scope to even test all sorts and – even more surprisingly to me – the binary files failed to convert to non-binary with the default converter that Cal3D ships with. So far I left this with a question mark next to it and didn’t investigate further since it’s not totally clear that there is much to get from getting to the bottom of it right now.

Given the above lacks of the current euloran models, I turned again to Cal3D’s test character, Cally, who has at least an abundance of body parts – some of them extremely perky parts, too. Compared to the euloran characters, Cally is huge though (100 times bigger!) and moreover in a different initial position but such differences are easily corrected with basic parameters when loading the model’s files: the code can rescale, rotate a model as desired and set flags regarding the position so that further transformations don’t end up flipping it all back to the original undesired stance or something 1.

A few unexpected surprises came from the sidelines as they usually do. First of all, CS is incapable of handling properly collision detection when animated sprites are involved so it wraps instead everything in bounding boxes that are big enough to contain the character fully at all times – basically the collision happens with a cube of personal space within which the animated character moves. While currently there’s little concern from this, it still sounds rather silly to me and it will probably make for relatively weird char to char fights and the like but each problem when its time comes and all that. Second, while Cal3D has its own format for materials, it turns out that CS can NOT load that format and therefore one HAS TO use CS materials even for Cal3D sprites! So to get it going for the time being, I simply borrowed Foxy’s skin and set it on Cally – since it’s anyway a basic texture otherwise, it turns out that skin sharing and borrowing works just fine at this level:
cal3d_01_4_1024.png

Since skin otherwise comes with the eyes in it too 2 but you wouldn’t be able to tell that if you looked at Cally, I tried on as well other materials – namely the ones otherwise used by the current client for Foxy’s dress and Boxy’s jacket. They simply turned gray and blue on Cally and I suspect quite a large part of it has to do with size and lack of specific cloths shader perhaps, but it’s not something with high priority right now – perhaps later on when I actually have some sort of clothing to speak of. For now, here’s Cally with gray (dress material) and blue (jacket material) skin, respectively:
cal3d_01_1_1024.png
cal3d_01_2_1024.png

For my peace of mind and thorough investigation of character’s skin at this stage, I did try on the character-specific shader (there is one – it focuses mainly on lighting) but it made ~0 difference on all three different skins so I took it out again and stuck to the basic material with one single texture. The main reason I tried this shader specifically is mainly the fact that Cal3d’s specification of materials focuses as well on lighting – basically it defines light-reflecting properties of the material and since CS doesn’t import them directly, I wondered for a minute if they’d do anything specified the CS way aka through the corresponding shader variables – empirical results suggest they don’t really do a lot really, just tiny adjustments that seem hardly worth the whole mess otherwise.

Before moving on to the animations themselves, it’s worth for my future self to set down clearly in here the way Cal3D sprites are made and managed within CS, since the documentation is extremely brief to the point of missing in parts, skipping details otherwise and generally giving only the bare minimum at most. CS essentially wraps Cal3D’s own classes so that it provides an interface that is at least similar to all the other meshes and factories and similar graphical elements. Moreover, there is a way to access directly the wrapped Cal3D model but apparently that’s more of a rake set at a good angle to take your eyes out with, since it comes with the clear statement that modifying the Cal3D model directly comes with a near guarantee of getting it out of sync with the rest of what CS knows of it and therefore making it all a huge mess. The only way I can see this is as a sort of passive-aggressive programming – I never even knew such a thing was to be a thing, what can I tell you.

Leaving aside the direct access that is unlikely to help otherwise in the least, Cal3D provides a factory that is meant to store *all* available & possible parts and equipment for a whole class/type of character 3. Seeing this in the best light, the Cal3D factory would contain all the lego-like parts that are compatible with one another. The best light is not exactly what one gets in practice though, of course, but at least the intention and potential are there, let’s say 4.

The very core of a Cal3D factory is the skeleton – basically all instances made of the same factory will share a common skeleton structure – everything else can in principle be different from one instance to another, but not the skeleton. On this skeleton, each instance can show a set of component meshes (basically body parts) and attached meshes (basically stuff, be it tools or cloths, that is attached via the sockets mechanism – each socket specifies the exact triangle in the host mesh where another mesh can be attached; this requires of course the host mesh to be defined through triangles at the very least). Both component meshes and any attached meshes that are equipped at any given time are selected out of all those available in the factory. Each instance of a Cal3D factory aka an actual character active in the game has its own state and can therefore keep track of its own set of meshes that are active at any given time, while also being able to switch meshes at will – in theory as I haven’t yet gotten around to see this in action, mainly for lack of *alternative* meshes for the same place.

On the sad side, I have to note that all my attempts to actually use existing meshes as parts of an overall puzzle game failed miserably – basically *any* use of a mesh part from one model to another resulted in a segfault in the Cal3D lib. I’ll probably have to investigate this further to get to the bottom of it in the sense of figuring out what is required exactly to produce “matching” mesh parts – and what makes them incompatible to this extent – but I suspect it all boils down to the bones they reference really, meaning that the skeleton itself will likely to have to be the main fixed part around which perhaps the rest can be allowed more flexibility.

The skeleton is so crucial to a Cal3D sprite mainly because everything depends on it, from component meshes’ position to animations that represent actions and/or movement of all sorts. The skeletal animations list the ways in which bones affected by the desired movement change position. In turn, bones influence in principle any connected/attached meshes and may also cause deformations/influence cloths or the like – though this part certainly needs more investigation and testing as at the moment there are no examples to look at nor any clear documentation as to how exactly everything works there.

At any rate, the skeletal animations as defined for instance for the Cally model work perfectly fine as expected – once PS is taken out of the loop and the velocity interval is set correctly when each animation is loaded. Cal3D activates animations based on the velocity of the sprite at any given moment and the velocity intervals in which each animation is meant to be active. In principle several animations can therefore be active at the same time and Cal3D claims to be bright enough to blend them smoothly and taking into consideration priorities too – though I haven’t yet seen this in action. For some basic animations, here are some screenshots of Cally in action strutting about the island, walking, waving and in mid-kick (note that the animations in game look even better than in the stills – sometimes the screenshot was basically not quick enough and got slightly messed up in between frames):
cal3d_01_5_1024.png
cal3d_01_6_1024.png
cal3d_01_7_1024.png
cal3d_01_8_1024.png
cal3d_01_9_1024.png
cal3d_01_3_1024.png

In addition to skeletal animations, Cal3D claims to also provide support for morphanimations. As far as I understand them currently, morphanimations would be required for more fine-grained movements/changes to a model, especially those involving parts that don’t rely on skeletal bone movements as such – in practical terms, facial movements and expressions first and foremost. At the moment this is a big unknown since not even Cally has such advanced stuff and so I guess I’ll have to… just figure it out, oh joy. On the notes-to-future-self side, there is some reasonable relevant theory writing on this, especially with respect to a supposedly robust way of reusing morphanimations across different models: the core idea is that there is a “neutral” pose and any non-neutral poses are defined by subtraction from this one so that the actual morphanimation can then be adequately calculated for any model based on its own, specific, “neutral” pose. While I haven’t yet reviewed this in enough detail, it would seem to me that a similar approach could perhaps be used for skeletal animations too – a neutral skeletal pose as reference for animations described as changes to *that* rather than as tweaks to a particular set and setting of bones.

For the next steps on this, I’ll have to figure out and somehow test practically the socket mechanism at the very least. Given however the desired subquest on graphics production, the socket mechanism by itself is certainly required but not sufficient – what I’ll have to do is to extract/decide on what makes the essence of “euloran”, fix that and provide acceptable (as in close enough to be natively recognizable but diverse enough to be also identified as distinct) ways to change/mix those. While some ideas on the topic are pushing around at various boundaries, the gritty part still has to start with digging deeper into the skeleton, meshes and morphanimations definitions, formats and use as provided by Cal3d since that’s the practical starting point currently – at the very least, I clearly have to figure out what exactly is required so as not to crash in segfault the whole lib whenever replacing a part with an “unexpected” mesh.

Given the above, I plan to continue with the focus on the characters part of the client data hierarchy unless it’s considered otherwise a higher priority to get the remaining missing parts back in first, even before sorting out some sort of way to cloth and diversify the characters.

  1. This role of the flags and their interplay with applied transformations otherwise is what tripped me over previously and had caused the dive-in of the model when moving about. Yet another puzzle solved, I suppose.[]
  2. CG is gruesome in more ways than one, yes. Still, I’m just telling you what is there, not like I made it *that* way, all right?[]
  3. Doesn’t this strike you already as such a deeply held conviction that knowing it *all* is always possible and even required and all that? I’m not sure how it can sit otherwise so apparently unchallenged right in code and on computers but there it is.[]
  4. The only thing I can say on this is that apparently I really am an incurable optimist, no idea why and how come. I can only shake my head in disbelief.[]

#eulora Logs for 18 Feb 2020

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
feedbot: http://ossasepia.com/2020/02/18/strutting-waving-and-skin-sharing-euloras-defaults/ << Ossa Sepia — Strutting, Waving and Skin Sharing (Eulora's Defaults) [12:49]

February 17, 2020

#eulora Logs for 17 Feb 2020

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
mircea_popescu: lobbes, done. [01:32]
lobbes: mircea_popescu, k auctionbot is back in chan [13:07]
feedbot: http://thewhet.net/2020/02/the-good-old-boys-best-spigot-friends-club/ << The Whet — The Good Old Boys Best Spigot Friends Club [18:12]
mircea_popescu: lobbes, cool! [22:30]

February 16, 2020

#eulora Logs for 16 Feb 2020

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
lobbes: http://logs.ericbenevides.com/log/eulora/2020-01-26#1001730 << I've fixed the auctionbot so it no longer speaks over itself. I can bring it back in if you'd like [19:18]
ericbot: Logged on 2020-01-26 22:15:53 mircea_popescu: ideally just fix it, how long's it take [19:18]
mp_en_viaje: please. [20:21]
mp_en_viaje: ima get on mp tomorrow fix its ban too. [20:22]
lobbes: mp_en_viaje: k. I'll keep my eyes peeled to the log for when it is unbanned [21:32]

February 15, 2020

The I, Eye and Aye

Filed under: Lyf,Young, old and oldest — Diana Coman @ 10:01 pm

On the very first day of 2020’s February 1, the I got ambushed and almost crowded out of the armchair of last year’s January:
2020_feb_1_1024.jpg

Towards the end of the very same day and quite a few kilometres away, as some in the United Kingdom were celebrating and others were deploring the very same achievement of having finally found EU’s exit door, the Eye was slightly glowing pink on a blue background above the darker and wavier blue of the Thames:
2020_feb_2_1024.jpg

As I was testing my camera‘s night vision, my company observed that the circus was really opposite to where I was facing, so I had to turn, of course, for a better view that included indeed the very place where the ayes have – finally, it would seem – had it:
2020_feb_3_1024.jpg
2020_feb_5_1024.jpg
2020_feb_6_1024.jpg
2020_feb_7_1024.jpg

The rest was a bit of a mystery but there’s strong evidence of ayes, noes and amused reflection at one time or another:
2020_feb_10_1024.jpg
2020_feb_4_1024.jpg
2020_feb_9_1024.jpg

  1. Yes, this write-up got delayed by 2 weeks. There are worse delays possible.[]

#eulora Logs for 15 Feb 2020

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
feedbot: http://ossasepia.com/2020/02/15/the-i-eye-and-aye/ << Ossa Sepia — The I, Eye and Aye [18:20]

February 14, 2020

#eulora Logs for 14 Feb 2020

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
mp_en_viaje: diana_coman, yeah, taking out most of the race conditions in that pile will be a great improvement [08:50]
diana_coman: mp_en_viaje: do you see any use for the "modes" shit? [09:51]
mp_en_viaje: what is that again ? [09:51]
diana_coman: mp_en_viaje: hm, there are 2 types even: 1. movement modes aka "run" "walk" 2. "server modes" e.g. "statue" "overweight" "peace" [09:52]
diana_coman: the thing is that as "modes" they are nonsense really, a layer of shit that ps added to the pile it made confusing everything [09:52]
mp_en_viaje: well, on one hand we kinda need a variant of walk/run for chars, and on the other, we need aggro/non aggro mobs [09:53]
diana_coman: mp_en_viaje: heh, walk and run and even anything in between can be had sanely without "modes" wtf [09:53]
mp_en_viaje: how do you make the server know the char can't move because ow ? [09:53]
diana_coman: meanwhile I figured out the sane way the animations come in and I'm amazed even how reasonable it can be (once ps is out of the way ffs) [09:54]
mp_en_viaje: ha! [09:54]
diana_coman: poor cal3d and cs in fact do the reasonable thing and automatically select the bloody animation based on velocity of movement, which makes sense to me [09:54]
mp_en_viaje: this is incidentally the funny story of a manalone production (cs) taken over by a "community effort" (ps). [09:54]
diana_coman: ie when you load the animation you specify the type (eg travel) and the velocity interval in which it operates essentially [09:54]
diana_coman: and then when you set the velocity, it will look and even blend (in principle, haven't yet seen it do it) those that apply [09:55]
diana_coman: but then ps had to come and invent "modes" that are a sort of half-assed states for a nonexistent statemachine [09:55]
diana_coman: re server knowing that it's overweight – if/when it's overwheight, it basically doesn't allow it to change position and that's that, I don't see what else is needed there [09:56]
mp_en_viaje: i am not against taking it out, in the slightest. [09:58]
diana_coman: mp_en_viaje: re movement modes btw currently I anyway "define" them on the client since they are entirely client concern – iirc we touched on this earlier but the way I see movement is that client may do locally whatever it wants but then it will have to sync with server (on whatever intervals it chooses) and the server will accept or reject the position that the client claims, basically. [09:58]
mp_en_viaje: my only problems are you know, the specific items of interest. for instance, run also means stamina drain [09:58]
diana_coman: mp_en_viaje: sure, but that's anyway based still on velocity, no>? [09:59]
mp_en_viaje: well, moreso than walking anyway. yup it is. [09:59]
diana_coman: so then why not just…use the velocity? [09:59]
mp_en_viaje: what about the npcs, we'll have to distinguish aggro from peacible ? [09:59]
mp_en_viaje: this sort of thing's my concern, i don't care about ps "modes" any. [09:59]
diana_coman: (btw that's exactly how I ended up finding out that …yes, can actually use it; because I was going nuts in between ps's pile of managers of everything and nothing until I had enough and went wtf, this is related to velocity so will plug it WHERE VELOCITY changes) [10:00]
diana_coman: mp_en_viaje: in what way re distinguish? [10:00]
mp_en_viaje: well, i dunno, one gets a red border ? [10:00]
diana_coman: well, there can be some property and then client decides what/how it represents that, no? [10:01]
diana_coman: with pink slippers for all I care [10:01]
mp_en_viaje: yes, but there'll have to be a property is all i'm sayin'. [10:01]
mp_en_viaje: kinda weird btw, have you noticed that the ONE response of the mediocre to ANY KIND of challenge is to build some manner of state machine ? it's so universal i'm about to start using it as diagnosis heuristic. "you made a state machine ? you're a retard aren't you." [10:01]
diana_coman: sure; properties there can be as many as we want, why not. [10:02]
mp_en_viaje: aite, then good riddance. [10:02]
diana_coman: ahahah; dunno, the foxybot ended up with proper and strict state machine precisely to ride out all the unexpecteds and weirds due to unreliable connection & environment. [10:02]
mp_en_viaje: that being the problem, they end up forcing normal people to make anti-moron state machines at the borders. [10:03]
diana_coman: atm I basically circumvented a whole pile of client code aka it's in there but …I don't use it; I am not very keen on trying specifically to cut it out esp right now since hell knows what other bits rely on it and so on but either it gradually comes loose until it falls off or whatevers, maybe at a later-stage cleanup or something. [10:03]
mp_en_viaje: it's how the pros do it. [10:04]
diana_coman: well, it's annoying like hell in that I keep carrying around all that shit on all sides but I don't see a more practical way currently. [10:04]
diana_coman: mp_en_viaje: meant to ask 2 things: 1. given that the ids are uint32 in the protocol, is it fine for client to use 32 bits ? it makes a mess if it's always converting to 64 bits to then convert back (this is the messy part) when talking to server and so on [10:05]
diana_coman: and 2. re characters – do we fix in any way the number of subparts (submeshes) and/or the equippable slots or how to call them [10:06]
diana_coman: ? [10:06]
diana_coman: (this 2 is something I still need to explore and it's potentially a big thing) [10:06]
mp_en_viaje: should i make protocol ints 64 ? [10:07]
mp_en_viaje: it's problematic because… well… they take so much space ;/ [10:07]
diana_coman: mp_en_viaje: myeah, I know; otoh then it's really logical to have them as 32 bits on client too, what. [10:08]
mp_en_viaje: imo no harm could come of it. [10:08]
mp_en_viaje: i mean, the server needs its precision. but the client is wilfully kept in the dark re most things, it could practically work as 8bit too. [10:08]
diana_coman: I'm not even sure I see exactly what's the problem with that as such; ie yes, strictly speaking it won't be "client is 64 bits everywhere & everything" but given that anyway CS is not 64 bits everywhere and everything, it's not a huge thing. [10:09]
mp_en_viaje: imo that's tjhe right cut here, let client be 32 or w/e is convenient. [10:09]
diana_coman: cool. [10:09]
mp_en_viaje: re 2 : imo there should be only one. why would i have submeshes at all ? [10:10]
mp_en_viaje: "oh mp, how do you attach scope to rifle ?" "simple, my dear fellow : first you read about disease of american capitalist ; THEN, and only then, and only if indeed still needed, you make two identical rifles, except one has also scope." [10:10]
diana_coman: mp_en_viaje: ahahah [10:10]
diana_coman: but no, there are 2 separate things that get mixed up in your example [10:11]
mp_en_viaje: show [10:11]
diana_coman: there is A. submeshes that means strictly making an animated sprite out of parts; the idea of use for this is if you want to have small variations e.g. Bob has long hair while Will has short hair [10:12]
diana_coman: that part has nothing to do with equip at all [10:12]
mp_en_viaje: oh [10:12]
diana_coman: B. sockets are places where you can equip stuff [10:12]
mp_en_viaje: well in that sense yeah, we do want pc variation [10:12]
diana_coman: and sockets work in principle with any mesh [10:12]
diana_coman: ie for any mesh, you can pick a triangle where you say "socket" and so you plug in there whatever other mesh you want [10:12]
mp_en_viaje: right [10:13]
diana_coman: that's (theoretically at least) the cal3d way to equip [10:13]
diana_coman: I haven't yet got to actually test it so disclaimer here – the above is how the docs say it is MEANT to work! [10:13]
diana_coman: I won't believe it until I see it working, lol. [10:13]
diana_coman: so to my mind we actually want both really [10:14]
mp_en_viaje: ok but then i don't understand either what you're asking or what part of what you were asking i equivocated [10:14]
mp_en_viaje: what i mean is : i do not want anything more complicated than one mesh attaching to the character. [10:14]
diana_coman: mp_en_viaje: it seemed to me you were talking of equip as submesh when it has nothing to do with it [10:14]
mp_en_viaje: i don't want mesh chains, such that "on hand goes weapon and on weapon goes flag and on flag goes mom" [10:14]
diana_coman: ah [10:14]
diana_coman: hm, that is in principle even possible with the above ie there is no limit of levels [10:15]
mp_en_viaje: make a weapon-flag-mom thing, and replace the weapon thing with it. [10:15]
mp_en_viaje: that's what i thought you're asking, re limit of levels, and i said 1. [10:15]
diana_coman: ah, that is good to know too! [10:15]
diana_coman: but I wasn't even yet there, lol [10:15]
mp_en_viaje: cool. now, what were you actually asking ? [10:15]
diana_coman: take the characters: currently the ones in use are made out of torso and head iirc [10:16]
mp_en_viaje: ok [10:16]
diana_coman: the cally example char otoh is made out of feet, legs, pelvis, torso, arms, hands, head, hair [10:16]
diana_coman: (or even more) [10:16]
mp_en_viaje: k [10:16]
diana_coman: so do we want something like cally or something like current char or how the fuck? [10:17]
mp_en_viaje: rather like cally [10:17]
diana_coman: because all those need to be loaded somehow and knowing *where* the bits go [10:17]
mp_en_viaje: you can't make the players all look the same and live [10:17]
diana_coman: yeah, I quite thought the same tbh. [10:17]
diana_coman: I'll dig to see if there's a male equiv to cally too anyway [10:18]
mp_en_viaje: now, those changes should ideally be procedurized, but this is kind of open q. [10:18]
diana_coman: but at any rate, I'd rather fix the list of parts for player chars ie everyone has the same limbs, right? [10:18]
mp_en_viaje: here's the only important question : [10:18]
mp_en_viaje: allow me to quote, 1s. [10:18]
mp_en_viaje: June Gearcull [10:19]
mp_en_viaje: Millicent Shotsay [10:19]
mp_en_viaje: Claribel Oceanmean [10:19]
mp_en_viaje: Grace Workercrisp [10:19]
mp_en_viaje: Adria Gradebraid [10:20]
mp_en_viaje: ^ what's that ? [10:20]
diana_coman: uhm? list of names/surnames? or what? [10:20]
mp_en_viaje: right. it's the correct solution, also : on one hand they retain enough "human-nees" to be natively recognizable as "those are names" by the naive human mind, ie, they take that exam [10:21]
mp_en_viaje: but they're actually on the other hand the result of a very simple procedural generator, which can take 1kb of data and prduce 1gb of quality output such that it passes the above test, in few steps and a line of code. [10:21]
mp_en_viaje: THIS is what we want. can you find a way to do this for faces ? [10:21]
mp_en_viaje: the criterion isn't even "this is human" ; the criterion is "this is a fun and acceptable face for a char in this game". [10:22]
diana_coman: hm, no idea really; ie *something* can probably be done on the easy bits e.g. colour of hair (since it's anyway a material so possibly can set procedurally the colour easily anyway); otherwise it probably *can* be done but … the building blocks are not made /in place currently aka not sure if it's the sort of thing to sink effort into right now. [10:23]
diana_coman: note that even Cally does NOT go into the detail of the face [10:23]
mp_en_viaje: well how about you think about it. [10:23]
diana_coman: it's not about eye and nose and etc but "head" [10:23]
mp_en_viaje: this'd be the fun of programming for a game, this sorta subquest [10:23]
mp_en_viaje: diana_coman, the idea is to start with a base head and make 1trn heads [10:24]
diana_coman: mp_en_viaje: I can gladly think of any part but you know, there's a ton of stuff competing for limited thinking places basically. [10:24]
mp_en_viaje: head understands. [10:24]
diana_coman: (not to mention that bloody first I still need to actually see the sockets and submeshes thing done and working) [10:25]
mp_en_viaje: aite. [10:25]
diana_coman: anyways, noted. [10:25]
mp_en_viaje: is the q set answered or anything lingers ? [10:26]
diana_coman: so far foxy is happily moving legs and arms and all that [10:26]
diana_coman: mp_en_viaje: well, it's answered of sorts in that what is wanted is probably way more than what the structure as it is easily supports/provides but yeah, at least it's clear I'd say, thanks. [10:26]
mp_en_viaje: it's quite the pleasure to read up on your progress you know. [10:27]
diana_coman: come to think of it, I guess I'll have fun plugging weird stuff into "arm" and "leg" sockets to make some walking-shambles :)) [10:27]
mp_en_viaje: aha! [10:27]
diana_coman: mp_en_viaje: hey, glad to hear it! and thanks! [10:27]
mp_en_viaje: yeah you gotta lotta work to do, you know ? but the ~purpose~ for why you got it is to have fun and make a mess of it [10:28]
diana_coman: I don't know how the animation will handle that but I guess I'll find out. [10:28]
mp_en_viaje: otherwise why are we even here [10:28]
diana_coman: there's still so much *in the way* – that's the part that kills the joy at every corner [10:28]
mp_en_viaje: just as long as the relationship is monotonically increasing the right way. [10:29]
mp_en_viaje: ever less killjoys and ever grander messes each and every day. [10:29]
mp_en_viaje: words to live by! [10:29]
diana_coman: heh, will try to remember that at the right moments, lol [10:29]
mp_en_viaje: :) [10:30]

February 13, 2020

#eulora Logs for 13 Feb 2020

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
diana_coman: mp_en_viaje: re animations, on the bright side I think what I'm doing there was fine to start with aka my code *does load* the Cal3d animations correctly into the CS engine; the dark side is ofc that the PS mess on top is such a kraken of nonsense that I'm stuck now tracking which wires I cut that the existing animations are simply not started when they should be and otherwise deciding on some way to put it back in, preferably with as … [07:56]
diana_coman: … little PS mess as possible; at any rate, it looks doable really. [07:56]
mp_en_viaje: diana_coman, beautiful! [11:58]
diana_coman: well, the *very* ugly part is that the "way it was" is a spaghetti of "movement modes" + "server modes" + race deciding (in 1001 places ofc ofc) on animation + sound (!!) and mixed with dr (dead reckoning), messages, loading and ~everything else; so yeah, it will still take a bit to figure out how to cut through all that. [12:33]

February 11, 2020

No Atmos in the Atmosphere (Eulora’s Defaults)

Filed under: Coding,Eulora — Diana Coman @ 6:25 pm

Having explored those past few days all the possible ways to get various aspects of air 1 showing up in Eulora’s client, I’m left with a working “air” element of sorts, a bunch of screenshots (scroll down for them) to show as illustrations of the whole exploration and otherwise a lingering question of little import to computer graphics: if it’s indeed a sphere but lacking any atmos, can it still be called an atmosphere?

Unlike the terrain and the water that I sorted out already, the “air” category doesn’t have just one single element since CS and the current client don’t bother with such lofty ideas as actually modeling anything. There are instead all sorts of bits and pieces that can be pieced together to make it seem like there is some sort of atmosphere: some sky, some clouds, some weather, some fancy potential effects of sorts and some ways for light to travel from the sun or any other source. So the rest of this article is a look at what I found out when taking each of those in turn and looking in practical detail at how and to what extent they can be made to work at all.

Light

To be able to see anything of the world at all, CS requires at the very least an amount of “ambiental” light (so light without a source as such, supposedly a sort of stand-in for the reflected light as it bounces off everything around) and a (some) source(s) of light overall. On one hand sources of light are more aptly items/structures in my hierarchy of objects and as such not really belonging here but on the other hand, the way the client works currently, there is the need for some “sources of light” that are simply environmental characteristics rather than items. So I went here with copying whatever such lights are defined in the current client: some ambiental light and 3 “suns” positioned through unknown methods in a way that “works” in the sense that you can see the stuff around and there is some apparent direction from where the sun shines or something. It’s a mystical light basically and it will be fixed as default in there, nothing more to do about it as far as I can currently see, since it’s certainly not the server’s job or interest to fiddle default lighting so things are visible given one rendering or another.

When talking of lights, it’s worth noting that the above fixed set of lights is not in fact the full story in the currently deployed client. The intensity and exact colour of light is made to depend on the time but at the moment this is not imported into the prototype client and I’m not fully sure it’s something worth importing as such: the way it’s done, there’s an xml file (art/lighting.xml) that lists *for each hour of the day* the values (r,g,b) of various lights (identified by their fixed name…) in different sectors (again, identified by fixed sector names). Some manager or another in the PS client code proceeds then to use those values to adjust each light periodically, to match the time of the day, interpolating between the values given for the current and next hour.

Besides the clunkiness and clumsiness of the above approach, there’s more trouble with importing it as found, with the most important problem being that the assumption of fixed sector names simply has no place at all in Eulora’s client. Moreover, there’s no good reason I can see for having this sort of hour by hour list in an xml if it’s basically a set of constants anyway and entirely client’s business too. So at the moment, it just remained outside entirely: in Eulora’s default client it’s always somewhere in the middle of the day, when things are quite visible. As a player I’m not even sure why the fuck would I actually *want* to have light dimming so I can’t see things properly but then again, it’s been already observed that I’m a sort of software radical, especially when dealing with graphics, so let me know if you have some reasons for which I should really spend some time to implement time-related changes to the overall light (and then possibly getting in a night sky too, I suppose, see below for the sky and clouds section).

For an illustration of the light conditions, here’s a screenshot from a “shaded” spot so you can notice the light and shade divide as it happens with the current set of ambiental light and three suns:
airdefaults_10_1024.png

Sky and Clouds

Looking at the currently deployed client in the usual places (art/world.zip/island.xml for the factory+mesh; then off to art/meshes.zip/sphere.xml for the definition of the factory; then art/materials.zip/materials.cslib for the definition of the relevant materials) reveals that the euloran sky is currently a generic mesh defined painstakingly through enumerations of vertices and corresponding texels (texture coordinates at each vertex), normals and colours (which are all set to 1 and probably of no use since the texture is added on top anyway but hey, it has to be there so it’s there) as well as a whole set of triangles to piece up whatever shape the whole thing ends up to be (possibly an approximation of a sphere if the name is to be trusted indeed but I haven’t really bothered to check). Such a brilliant way of describing the thing that there are – line numbers for the win! – about 2050 vertices and when you multiply that by 4 and add on top the list of triangles and a bit of xml tags too, the file ends up having a bit more than 8200 lines in total – just because it can!

While I could easily just use copy/paste to get the above horror as constants in the default code, I find the idea so abhorrent that it’s just about the last thing I’d do – if there really was no other practical way to get some darned sky showing properly at all. Happily though, there is a more reasonable alternative in this case: with a bit of fiddling of parameters, it turns out that CS’s code for generating programmatically a sphere can do the job quite fine: the fiddling was more a matter of figuring out the exact number of rim vertices that would fit the existing texture well rather than anything else. So instead of littering the code with those thousands of lines of constant numbers describing a sphere, it works sanely for once to simply call the code to *generate* the sphere a be done with it! I have no idea why exactly wasn’t this done to start with but I am not even all that curious to find out really – what difference will it make anyway?

While the sphere – programmatically generated or boringly xml-enumerated – provides the so-called geometry of the “sky”, the rendered image is as usual a texture. Aiming to figure out what options there are and how they work, I made a few attempts to see if the shaders provided as “sky” and “clouds2” are of any use – it turns out they aren’t, at least not as they stand undocumented and without wasting a lot of time to get to the bottom of everything so that at least ~something shows up working. From what I could tell and for the very little that this is worth currently, the clouds2 shader aims to programmatically animate the texture so that you get supposedly moving clouds. Nevertheless, the default client will *not* get moving but fixed clouds, as already neatly painted in the image file that serves as texture for the sky cloud. Anyway, as part of the testing, I have tried out a different “sky” texture that I found in the “art” directory of the current client and the result was a rather weird-looking sky-thing:
airdefaults_20_1024.png

Getting back to using the usual clouds texture works though and the sky looks reasonable again, even reflecting quite well in the water – along with Foxy’s long and slender-by-water-effect legs, of course:
airdefaults_19_1024.png
airdefaults_11_1024.png

Effects

Since one might reasonably want some pretty sparks or something around, I went ahead and implemented in code the sparkly sphere that is currently defined in xml and shown on the beach in the client 1.2. It is using a particle systems and it goes on to tediously set quite a lot of parameters for the effector especially but with the right shader applied as well, the result can actually turn out quite prettily indeed, with both the “snowflake” texture and the currently used “spark” texture:
airdefaults_7_1024.png
airdefaults_8_1024.png

Weather: Rain, Snow and Fog

Moving on to weather effects, there’s fog as the simpler part and then rain and snow that are just variations on putting together in some predefined manner some particle systems. As my previous attempt at sorting out the particle systems was rather frustrating and with dubious results, I started with them first. As it happens, my suspicion that the poor effects of last time were linked to not using a shader/the right shader incantation turned out to be correct. Combined with the fact that meanwhile I ate – if rather reluctantly – shaders for breakfast too, it didn’t take all that long to obtain some pretty snow for instance:
airdefaults_16_1024.png

The shader used by both snow and rain is “particles_basic” and one remaining wtf that I had to sort out – to the degree possible – before being able to obtain the pretty picture above was the meaning of “type of shader” as set in code and otherwise not really mentioned or listed anywhere. What I finally figured out is that there is a set of predefined types (which is however nowhere properly listed as such as far as I could tell and goddammit I did look in the code and in the manual and in the api and on the dark side of the moon too) and those in fact are linked to – but not named as, nooo – different rendering passes! So that you can use the right shader but if you use it with the wrong type aka in the incorrect rendering pass, you get bupkiss result and can go bang your head some more as there’s no way to tell exactly why. This is by the way the solution to last article’s puzzle re using the same shader 2 times only set with different “types” – it is indeed the same and will indeed be run twice only in different rendering passes so the effects accumulate/interact in whatever way they do it (in some cases there are even values passed between successive rendering passes for instance…). I suppose I should be happy I solved my own puzzle or something.

Leaving the above rendering passes mess aside for now, it further turned out at a closer look that this glorious particles_basic shader does precious little really to the point that the observed effect is simply one of …making it work well with textures that use black for “transparent” instead of having an alpha channel. Doesn’t this sound though like a truly mind-boggling reason to use a whole shader for? Because to me it does and to such extent that I couldn’t just let it be – so I took the silly snowflake texture file and made the equivalent image only with transparency properly set through the alpha channel. After which, I made it snow again only without any bloody shader in the mix and lo and behold, you tell me the difference:
airdefaults_15_1024.png

The even funnier part of the above great shader use though is what happens therefore if you do both aka you use the shader (that worked with texture having black stand for transparent) AND have transparency in the texture itself – it’s snowing translucent cubes!
airdefaults_17_1024.png

Both rain and snow are painstakingly set in code with all the emitters, effectors, material and shader(s) + shader variables, as quite specific to particle systems. The main difference is with respect to texture used (since a snowflake is meant to look different from a water drop) and otherwise the particle size range. The shader does exactly the same sort of not-much as for snow but I haven’t bothered to add transparency to the water drop texture too so here’s how the current texture looks with and without the shader applied:
airdefaults_13_1024.png
airdefaults_12_1024.png

Given that the main difference between rain and snow really is just a matter of texture, it’s probably possible to simply fix the particle size and a lot of other parameters for the “effectors” and “emitters” and whatnots and then just have one single default “rain” that can then rain down even frogs if that’s the texture given. However, it turns out that there’s some deep trouble afoot with the current implementation of particle systems in CS: first, they are so inefficient that extending the rained upon area to the whole island basically doesn’t quite work (there was an initial freeze while CS calculated whatever it calculated for it all and then it was still visibly suffering while pouring all that thick rain around); second, whenever rain and/or snow code is in, the exit ends up in a segfault – as this is many levels deep in CS, I haven’t really spent time to investigate it and find the exact culprit but it seems to be related possibly to the specific emitter that rain/snow use since the trouble does not manifest for instance for the “sparkly globe” effect (see the previous section above) that uses a different emitter.

The fog is simply a property of the sector as a whole – there is no “local” fog even possible, unless you make perhaps your own as a particle systems I suppose (could have fog-particles perhaps?). One can set the “density” and the colour of the fog (r,g,b) – basically the effect is similar to putting on a pair of glasses tinted with the chosen fog’s colour and having thicker or thinner lenses depending on density. There is also a further “mode” parameter that chooses -as far as I can tell- the way in which exact fog values are calculated in the distance with the available “models” being called CS_FOG_MODE_NONE, CS_FOG_MODE_CRYSTALSPACE, CS_FOG_MODE_LINEAR_CRYSTALSPACE, CS_FOG_MODE_EXP, CS_FOG_MODE_EXP2. The only one I could find used at all seems to be CS_FOG_MODE_CRYSTALSPACE but at any rate, I made some experiments with others and there is either little visible difference or the whole thing looks even worse than it does otherwise. Moreover, I can’t say I see exactly any reason why I’d want fog in my client as a player but do let me know if you still think it should be in there – and in what form exactly. To get some idea of how it looks like, here are some pics of various “fog” experiments:

The bluish fog (r=0, g=0.1, b=0.1, density=0.02):
airdefaults_2_1024.png

At one extreme, the fog so white that it…shines in your eyes:
airdefaults_14_1024.png

At the other extreme, the fog so dark that everything turns into a black and white disco style:
airdefaults_1_1024.png

Still shiny fog but toned down a bit:
airdefaults_4_1024.png

When fog is more like darkness than like fog:
airdefaults_3_1024.png

Possibly almost reasonable – if rather graying – fog:
airdefaults_9_1024.png

Conclusion and Next Step

Given all the above, I’m overall satisfied that there is now some working default “air” for Eulora’s sectors even though no depiction of weather or of day/night changes. The shiny globe effect seems to work surprisingly well so far so I’ll keep it still on the list and possibly have another look at it after sorting out the items and characters to see if/how it can be attached to an item or to a moving character, if that is something of interest.

The next step for now is the potentially more time-consuming and iffier sorting out of a working default for characters with animations and all that included so there will likely be a longer wait until the next article in this series.

  1. No, not various airs and not even various arias – though these might be in waiting when I get to look at sounds.[]

#eulora Logs for 11 Feb 2020

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
feedbot: http://ossasepia.com/2020/02/11/no-atmos-in-the-atmosphere-euloras-defaults/ << Ossa Sepia — No Atmos in the Atmosphere (Eulora's Defaults) [14:44]

February 10, 2020

#ossasepia +m

Filed under: Dark Modern Ages,Outreach — Diana Coman @ 5:04 pm

Yesterday evening I set my #ossasepia irc chan to +m (moderated), following the 2012 example of #trilema. Here we are in the year 2020, already repeating TMSR’s own history 1!

The above means that only those that I pick explicitly will be able to talk in the chan. I have already voiced all the chan regulars that are in my WoT 2 and all the bots so that there should be no loss whatsoever for the people who matter – as it should always be the case with any change. Moreover, I’ve set it so that those same people will get automatically voiced 3 when they join the chan – if you are in that list and find yourself victim of ChanServ’s whims 4, you can probably sort it out with a simple rejoin of the chan if I’m not around to revoice you (and yes, don’t wait for me either, there’s no need for that).

Newcomers will have to ask explicitly for the priviledge of speaking in the chan – and note that it’s exactly a priviledge, not a “right” or other such nonsense. As such, I fully intend to pick and choose to whom or when I give voice. Who knows, maybe having to ask explicitly drives the point home faster for some brighter ones, helping them thus to get up to speed – or so says my optimism yet again!

While this voice model requires that newcomers register their nick with NickServ 5, I think that’s a benefit rather than a downside – if you are a newcomer, you get therefore to reserve the nick you want and it’s anyway a prerequisite to registering your key with deedbot 6 and thus acquiring an identity.

The #ossasepia chan continues otherwise to welcome anyone who genuinely wants to learn so if that’s you, don’t be shy, just come in and ask me politely for voice 7. On the other hand, if you just wanna keep doing what you’ve been doing so far only in my chan now, save your time and stay out of it, as I won’t tolerate militant ignorance or stubborn idiocy and you’ll come to grief.

Learning *means* changing so come ready and willing to change for your own betterment and you’ll find help, support and meaningful work. Not to mention quite a lot of fun to be had, too!

Come talk to me on irc (freenode) in #ossasepia!

  1. While waiting for the implementation of the more modern solution of a proper WoT-based voice model.[]
  2. If you are in my WoT but don’t have voice in #ossasepia just pm me please and I’ll sort it out.[]
  3. For future reference, the command is, for instance /msg chanserv flags #ossasepia ossabot +V[]
  4. It’s known to weirdly unvoice people at times, I have no idea why.[]
  5. To do this, the command is /msg NickServ REGISTER your-password youremail (where you replace your-password and your-email with the actual relevant password and email, respectively, of course).[]
  6. See this handy guide for registering your key with deedbot.[]
  7. If you are new to irc, you can send me a private message for instance with /msg diana_coman your-message-here ; just be patient and hang around as it might sometimes take a few hours until I get to see it and respond, all right?[]

#eulora Logs for 10 Feb 2020

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
feedbot: http://ossasepia.com/2020/02/10/ossasepia-m/ << Ossa Sepia — #ossasepia +m [13:20]

February 9, 2020

#eulora Logs for 09 Feb 2020

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
diana_coman: mircea_popescu: e ca-n bancuri: am dat de cap la cum e cu ploaie/ninsoare sa si arate bine pt ca mda, tot shaderu' lu' peste da' se pare ca sistemele alea de particule sunt cam din parti pt ca la quit crapa urat; probabil asta e ce ziceai de weather ca era de cacat/crapa si de-aia a fost scos. [15:29]
diana_coman: o sa il scriu oricum si pun da' nu cred ca are sens sa las codul in clientul final altminteri. [15:29]
mircea_popescu: posibil. [15:29]
mircea_popescu: cum crapa adica ? [15:29]
diana_coman: pai in diverse moduri da' in esenta ceva pointeri pe-acolo si n-am sapat chiar in adancime ca e din alea tzashpe niveluri prin cs [15:29]
diana_coman: asta e chiar in cs/plugins, n-are a face cu ps [15:29]
diana_coman: ca ce fac eu e direct cu cs. [15:30]
diana_coman: ah, si bonus oricum l-am testat sa ploua pe peste tot si…nu face fata; adica intepeneste vizibil si apoi merge asa din parti. [15:31]
diana_coman: trebuie practic sa umbli cu norul pe cap [15:31]
diana_coman: asa optimist gandind acum poate e doar ca o tb sa opresc astea explicit inainte de-un quit, hm. [15:33]
diana_coman: re cum crapa: de cateva ori cu segfault, de cateva ori ca core dumped. [15:33]
diana_coman: aka tot aia. [15:34]
mircea_popescu: diana_coman, naspa. noa, bine, pai poate mai later. [15:54]
mircea_popescu: oricum ie prost implementat din ce zici tu, din toate pdv. [15:54]
diana_coman: mircea_popescu: mda; acu' de-o proba daca tot sunt o sa fac si sfera aia stralucitoare si apoi scriu tot si descarc si aia e, trec la punctul urmator pe lista. [15:55]
mircea_popescu: in principiu vorbind faptu' ca ploua in tata lumea nu ar trebui sa fie o problema ; da in tot cazu' ei au sfera aia, cu view range gen [15:58]
diana_coman: mircea_popescu: pai pare ca nu ajuta, ca nu i-am scos sfera altminteri sau ceva [15:59]
diana_coman: de aia m-a cam surprins, da' cred ca-i realmente ca e prost implementat cum zici si caraie ca-s prea multe "particule" [15:59]
diana_coman: ca e drept, ploua destul de …dens asa, lolz. [15:59]
diana_coman: in fine, o sa pun poza si vezi; altfel ninsoarea arata chiar bine ea asa. [16:00]
mircea_popescu: aia distanta limita exista in general pen' ca noa, nu-i totu-i ploaie. daca-s efecte de particule masive (gen intr-o mass battle, ca asa e ideea, effect threadmill, lvl 1 shoot spark face particle effecrs de sa zic x. atunci lvl 12 shoot lightning tre' sa fie efect minim 3x sa simta animalu' ca "o progresat", altfel ce, iti bati joc de el ? dupa care nu se lasa din "progresat" si intr-un an-doi tot pampalau' se asteapta sa [16:04]
mircea_popescu: faca minim lvl 80 acolo, ca asa-i cinstit , nu ? [16:04]
mircea_popescu: ceea ce practic inseamna ca trage sageti cu ingeri facindu-si laba curging din ele pe drum, sau ceva, ca noa, 3x, 17x, 4593798x. [16:04]
mircea_popescu: dupa care se aduna minim 500 de de-astia sa se bata in grup, ca altfel ei nu prea au curaj asa, si-atunci sa vezi acolo, 500 * infinity * x, necesar si din constructie omoara orice tehnologie, ca asa-i facuta, sa satisfaca dobitoci prin omorit tehnologia, si pe urma sufera de exponentiale de-ale [16:04]
mircea_popescu: dobitocilor, deci n-are cum supravietui orice ai face) [16:04]
mircea_popescu: da' mi se pare ca astea is probleme foarte diferite, adica faptu' ca orice ai face tot nu se poate ce vor prostanii n-are-a face cu faptu' ca nu esti i nstare sa faci ploaie [16:05]
diana_coman: pai nici nu are, nu; adica pricep ce zici tu acolo da' fix de aia eu am pus intai de-o ploaie pe toata lumea asteptandu-ma totusi ca nu vor fi probleme [16:06]
mircea_popescu: mda. [16:06]
mircea_popescu: ~this conversation was encrypted in romanian~ [16:07]
diana_coman: ahahah, violently encrypted even ! (I've been recently accused of being "a violent person") [16:07]
mircea_popescu: am stat cu hannah de-o citit un articol in ro mai devreme, cam o ora asa, 500 de cuvinte. si ea inca stie chiar bine. [16:07]
diana_coman: tu, unii vad ca stau cateva saptamani sa chiar citeasca si ce le comentam noi in engleza, da? [16:08]
mircea_popescu: lol [16:08]
mircea_popescu: ce m-o enervat ala cu ciclopu', pfoai, pai e posibil asa ceva, lectura de tractoristi. nici nu mai citesc pe-acolo, numa' ma infuriu. [16:09]
diana_coman: eu am preferat sa rad de el si sa-l trimit la citit; dar da, fix aia e ca tractoristi, ce si de unde citit [16:09]
mircea_popescu: sa le fie rusine. [16:10]
diana_coman: sa le fie, corect. [16:10]

February 8, 2020

#eulora Logs for 08 Feb 2020

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
feedbot: http://thewhet.net/2020/02/manage-whats-important-to-you-with-rational-tools-when-you-join-humanity-or-fuck-mozilla/ << The Whet — Manage what's important to you with rational tools when you join humanity. Or, fuck mozilla. [12:20]

February 7, 2020

Thinkpad in Gales

Filed under: Coding — Diana Coman @ 2:46 pm

The Thinkpad in question is the recently unearthed 1 lenovo x201 with all its glorious stamps and stickers of all sorts, Intel and long defunct Windows 7 included. Unearthed I said and with good reasons, all right?

Gales is the thing to break if you want to make Jacob cross 2 and otherwise a fully static linux distribution of delightfully small size and clear setup that works reportedly ~everywhere, from Panama to the tar pit of many virtual machines and the backtrace of various network installations.

As a first step, I read a couple of times the BUILD and INSTALL files that are helpfully (and a bit less helpfully, respectively) provided. While the BUILD is quite clear, it’s also quite long and since I never expect I’ll get away with doing anything that long *only once*, my 2nd step was to pack it all into a script. Normally I’d provide here my resulting script but in this particular case and after some consideration of the matter, I think it’s best to *not* provide it: the BUILD document as it is seems to me to strike the right balance – it is detailed enough that it’s trivial to make it into a script (since the commands are literally given there in order and with all needed detail really) and at the same time, it’s not fully pre-packaged either. So I won’t set my script free and all that, you can set your own, if you must.

Armed with the script version of the BUILD doc, the build itself was quite painless on a CentOS 6 with gcc 4.9.4, with only a short wtf moment when the tar command at the end failed because of the –sort option that was simply not available on my tar 1.23 (apparently it’s available only from 1.28 on). There was also the fact that my minimal kernel config was apparently some older vintage – it lacked some options and so the first run I still had to manually set a couple of options but that’s arguably more to do with my setup than with anything else. More of interest to anyone else wanting to try Gales’ recipe is the need to set the CONFIG_BLK_DEV_INITRD option in the kernel config so that the gen_init_cpio required for packing the initramfs is compiled as well. Note that you’ll also need xz compression enabled to boot the initramfs so that’s a bunch of additional options to set, namely: CONFIG_KERNEL_XZ, CONFIG_RD_XZ, CONFIG_DEC_XZ.

As there was a break 3 of ~3 weeks between my initial successful build of Gales and its actual install on the thinkpad, I took the time first to re-read the INSTALL doc, although I wasn’t all that impressed with its good-enough-for-me-its-author status. Still, I was able to follow the instructions for setting up an installation medium with the initramfs from the build – so I added to my collection of bootable USB sticks a fresh – and pink! – one with Gales, hooray!

Booting from the Gales USB stick was no problem in itself and then there was simply the usual formatting of the thinkpad’s drive, install of Gales, config and setup of the bootloader, quite as explained in the INSTALL file. While the INSTALL file warns of complaints in the vein of “Still seems to say “does not end on cylinder boundary” for existing partitions”, I must report I haven’t had such complaints for the drive I formatted (though if I really wanted complaints of this sort it was enough to ask fdisk to look also at the USB stick itself – it had complaints on *that*!). I haven’t spent any time investigating exactly when and why it complains otherwise – since it did not whine at my partitions, it got away with whining at others. Do write down in the comments box though if you have questions on this and/or you want more details re my setup that failed to trigger fdisk’s sensibilities.

With Gales finally installed, the thinkpad booted extremely fast – there’s a belated “random crng init done” coming in after the login prompt showed already. As I intended from the start to keep this laptop offline anyway, there wasn’t much configuration to do otherwise and I was quite happy to simply explore the daemontools and the busybox commands (not quite all are present but I don’t have any complaints on this as everything I absolutely wanted to have is indeed there).

While the next step would be perhaps to install additional things that might be needed, I’ll wait until I actually find that there’s something missing before I add to what’s there. So far I’m fine with the minimal install for this minimal thinkpad, though I can see how various things might be required depending on the exact use for the machine. At the moment though I did the install mainly as an exercise and as such I’m quite happy with what’s there, “jfw’s pretty and helpful prompt string” included!

  1. Yeah, didn’t really want to resist the Night in Gales fit of it all, Entschuldigung.[]
  2. Hey, it says so in the very docs! And I read all the docs – eventually, given enough time – not to mention I even follow on occasion what the docs say, especially when what they say is such a sensible suggestion, as is the case here. See /gales/gports/qa.txt file.[]
  3. A break from this means work done on other things and there’s a long list of… things.[]

#eulora Logs for 07 Feb 2020

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
feedbot: http://ossasepia.com/2020/02/07/thinkpad-in-gales/ << Ossa Sepia — Thinkpad in Gales [11:01]
diana_coman: mircea_popescu: is weather (aka rain/fog/snow) of any interest for Eulora's server or is it entirely client concern/ [12:45]
diana_coman: ? [12:45]
mircea_popescu: it's of interest in a vague, general and not-right-now sense. [12:46]
diana_coman: right; so for now it's basically: client can rain if it wants to. [12:47]
mircea_popescu: works. [12:57]

February 6, 2020

Eulora’s Default Water without Water

Filed under: Coding,Eulora — Diana Coman @ 3:39 pm

Having set Eulora’s soil in stone (and grass and sand), I turned my attention this week to the waters that should naturally be found around an island – if it’s meant to be any sort of island at all. You know, those deep-deep euloran waters that hold all sorts of resources and unexpected benefits.

Last time I looked at water generation, I considered it had to be nothing other than some specific use of the procedural texture that CS supposedly provides for water rendering. A closer look at the corresponding CS plugin code 1 revealed however that it’s yet another very specialised thing to the extent that it comes with methods for making “puddles” at a given point – supposedly what the surface should look like if you throw something into the water. At the core of it though, the whole “procedural texture” shtick is an animated texture aka a set of direct writings/changes to the render buffers using the engine’s “ticks” as time units to play the desired sequence. Given this rather disappointing find, I don’t quite see any strong reason to import into SMG’s protocol those “procedural textures” as they are currently in CS, they seem to be utterly focused on client side rendering again and as such entirely client’s concern and choice.

Having set to rest my hopes of procedural water generation, I turned to the existing client’s pile of .xml files to extract from there just what and how it defines this water thing anyway, since the whole idea is to use whatever is currently in use, right? So in I went and here’s what I gathered:

  1. From island xml file (in art/world.zip), I found out that the “water” is but a mesh like any other so an “item/structure” in my hierarchy of data, only using a custom factory called “water”.
  2. Following the factory clue, from the water 2 xml file (in art/meshes.zip) I found out that the whole of Eulora’s water is in fact but a 2D rectangle, a sheet of blue if you will, cutting through the whole world to show only where there’s nothing else with higher rendering priority! And moreover, the whole thing is simply defined in the factory through its vertices, normals, texels (texture coordinates) and triangles – the minimal thing overall for a rectangle so that’s 4 vertices (with corresponding normals and texels) plus 2 triangles. The whole illusion therefore has to be achieved through the thin veneer 3 – aka material used – on top of this rectangle.
  3. In search of the material therefore, it was off to art/materials.zip and the materials.cslib file within. A look inside of it revealed that the material “water_02” (as jotted down from the factory’s definition) is a thing with 2 shaders (set as different types but using the same… shader; does this make any sense to you?) and 6 shader variables of which one is a texture but not the base texture but the normal texture (aka it’s used for more precise definition of normals across the surface rather than as painted skin to spread upon the surface).
  4. The “normal texture” from above turned out to be indeed defined simply in the same materials.cslib as a file that even exists where one would expect it to be (in art/materials.zip) except… its extension is missing, its type is actually unknown (it’s not .ani as one might guess from the name, it’s not .png, nor .jpg, nor .dds for sure) and the current client in fact complains loudly at this, if anyone ever paid attention: it can’t load that “generic_water_001_ani” thing no matter what. So…uhm, ditch it then and use some reasonably named “w_normalmap” since it is meant to be a map of normals after all.
  5. As for the shader with multiple uses, a look at it indicated that it’s indeed the part doing in fact all the heavy water lifting so it got added to the list of defaults that the client loads.

With all the above set, the rest was simply a matter of writing the code to create then the default water precisely as defined in the current xml, only using CS directly from code and without requiring any xml at all. There were a few funny steps on the way including the water with error texture when I had to test that ani file just in case it could be loaded somehow:
waters_1_1024.png

Then the part where Foxy walked on water because the xml had this tag “colldet” that you might be forgiven to think it means adding collision detection as silly as that may sound when you render water – of course it does not mean such a simple thing; what it means is that you should *toggle* collision detection on if it’s off and off if it’s on and of course you just…know what it is anyway, right? It’s also with a different water “normals” texture that I tried for testing purposes and it doesn’t even look all *that* bad although the clear repetition is rather grating to my eyes:
waters_4_1024.png

And some funny legs reflections that are for now still in there, mainly because apparently that’s how Foxy’s current shape ends up reflected currently:
waters_2_1024.png

Finally, here’s also an even reasonable shot of Foxy getting out of the water on to the Euloran harsh and unforgiving sand:
waters_3_1024.png

An interesting thing to note with this water-plane approach is the fact that it’s currently… in the way of light at times so it introduces weird “dark” effects in places on the island. For the time being I’m not too bothered about it since it might anyway end up sorted when I look into default lights and moreover, it’s again both a client-side concern only and the exact way in which the existing client works anyway. This being said, I still think this whole water-plane thing is silly – especially given that once you get inside the water fully, there’s of course just… air aka “no water inside the water”. Ain’t this just a great illustration of how modern stuff turns out to be at a closer look, various sorts of no water inside water, right?

  1. The main bit is in cs/plugins/proctex/standard/prwater.cpp if you are curious about it.[]
  2. There are actually TWO files in there, namely water and water2 but as it seems to be the usual case with the existing client, one is just not used currently at all.[]
  3. At which point my mind sniggered into song, of course, as this must clearly be what most people mean all along with all the heartfelt “river deeeeeeep and mountain hiiiiigh”; it fits this sort of water and this sort of deep, heh.[]

#eulora Logs for 06 Feb 2020

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
feedbot: http://ossasepia.com/2020/02/06/euloras-default-water-without-water/ << Ossa Sepia — Eulora's Default Water without Water [11:56]

February 5, 2020

The V-Tree Nursery or Code Control with V

Filed under: Coding — Diana Coman @ 12:31 pm

Once upon a time I used Git – local repository only – for keeping track of any work I did on large, unyielding and messed up code bases of all sorts as I explored them, trimmed them down and hosed them up on occasion. And before Git I used Subversion and before that I used CVS and so on the list keeps going, from one big system to the next, ever more polished in some ways and ever the same at core, ever “new” of the sort that brought its own learning curve and its own set of dependencies but ever old in its disregard for the user’s machine (on which it would require all sorts of shit installed) and ever old in the underlying assumption that the user doesn’t – and even shouldn’t – care to own their tools but care instead to adapt to the tool, to effectively serve as guinea pig for whatever the tool – the master – may require.

With all the above, I gained at least a lot of experience using existing versioning systems I guess, but not much more. And as the gap between my computers’ environment and those tools’ expectations only widened in time, there came the point where I ditched all of them, unwilling to put up with their requirements even if it meant losing the usefulness I extracted otherwise from them, mainly with respect to maintaining a clear history record of my work and being able to move back and forth through it with relative ease.

While I never regretted not having Git or similar, it’s the lack of integrated record while working with a large code base that bothered me quite a lot because it does hurt in all sorts of ways, from piling additional work on just to maintain otherwise a separate record to making it harder -as in more of a problem waiting to happen- to explore more radical trims to the code. The solution that currently works quite well for me is a basic set of scripts that allows me to use V in a more streamlined manner at development time: I’ve made a keypair just for code development 1, a “init” script that creates the genesis vpatch containing whatever code you point it at and a “commit” script that creates a fresh vpatch on top of whatever you set out for it. So for a grand total of 108 lines of .sh scripts (comments included!), combined on occasion with a few more commands directly from the console (mainly when wanting to rollback basically but making a script out of a single command doesn’t quite make sense to me), I get to simply use what I already have installed anyway, namely a V presser, vpatch (with Keccak) and gpg 2.

Using the scripts to genesis …the scripts themselves was a pleasure, at that. Here’s from the README file, to have it plainly and otherwise head over to my Reference Code Shelf for the genesis itself:

  1. Prerequisites: vdiff, gpg (with secret key for the user set in v_init.sh).
  2. NB: DO change in BOTH scripts the name to match the gpg key you want used by the script!
  3. NB: the scripts are blind beasts and don’t check anything but plow on, so unless you want to obtain garbage: a. know what you’re doing and run them in the correct order b. don’t mess up their expectations (esp the contents of the a b directories).
  4. There are 2 basic scripts:

    • v_init.sh – to be run only once, at the very beginning; this creates and populates correctly (with the newly made genesis vpatch + corresponding sig that it creates) the directories a, b, patches, .seals and .wot.
    • v_commit.sh – this assumes that all directories are in place already (esp a, b, patches, .seals, .wot) and that b contains the result of a *previous* press on which the new .vpatch is to be created.
  5. Usage:

    1. To genesis some code:
      from the directory of your choice, run the v_init.sh script giving it as parameters: the name of the project (it will be used to name the genesis as projectName_genesis.vpatch), the name of the directory containing the code you want under control (if it’s not local, you’ll have to give the full path) and, optional, any number of files that are not in the directory previously given but you want included as well (usually this is manifest and possibly a .gpr file for my use)

      Example:
      sh v_init.sh vcodectrl vcode manifest

    2. To pack current changes to the code into a new .vpatch on top of whatever is currently found in the b directory: from the directory containing the a,b,patches,.seals,.wot, run the v_commit.sh script giving it as parameters the name of the project, the name of the directory containing the code, the name for the new vpatch (without the extension so without .vpatch at the end) and, optional, any number of files that are not in the directory previously given but you want included as well (usually this is manifest and possibly a .gpr file for my use).

      Example:
      sh v_commit.sh vcodectrl vcode added_readme manifest README

    3. To check the result:
      simply use your favourite V implementation to press to whatever patch you want from the patches dir

      Example:
      vk.pl f
      vk.pl p v testpress added_readme.vpatch

    4. To work on a previous version of the code and possibly branch from there:
      delete the b dir
      use your favourite V implementation to press to the vpatch of your choice from the patches dir
      make a copy of your newly pressed code base into the b directory
      simply work on your newly pressed code base and then use v_commit.sh whenever you want to press a new vpatch on top.

      Example:
      rm -rf b
      vk.pl p v newbranch vcodectrl_genesis.vpatch
      cp -r newbranch b

    5. To clean up *everything*:

      rm -rf a b patches .seals .wot

  1. I don’t even intend to ever make this public, it has no business out there nor any “identity” as such, it’s just a part of a tool, nothing more.[]
  2. For lack of republican option for it, so far[]

#eulora Logs for 05 Feb 2020

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
diana_coman: mircea_popescu: ah, asa arata bine intr-adevar [04:09]
diana_coman: nu e enervant, nu, de ce-ar fi? [04:10]
diana_coman: mananca niste timp ce-i drept, da' aia cam e dat la orice interactiune, zic. [04:10]
diana_coman: u_ray: hello [04:10]
mircea_popescu: bon asa. [08:38]
feedbot: http://ossasepia.com/2020/02/05/the-v-tree-nursery-or-code-control-with-v/ << Ossa Sepia — The V-Tree Nursery or Code Control with V [08:46]
feedbot: http://trilema.com/2020/minigame-smg-statement-on-q4-2019/ << Trilema S.MG — MiniGame (S.MG) Statement on Q4 2019 [13:07]

February 4, 2020

#eulora Logs for 04 Feb 2020

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
diana_coman: mircea_popescu: http://paste.deedbot.org/?id=kIT5 [04:14]
mircea_popescu: diana_coman, http://paste.deedbot.org/?id=l7Ox [10:07]
diana_coman: neah, nu-i problem; nu suprascriu ci pastrez cel putin pe-o luna in urma [10:12]
diana_coman: ca de-aia se exista date ca sa foloseasca scriptu' [10:12]
diana_coman: mircea_popescu: zic ca-i ok. [10:14]
diana_coman: mircea_popescu: ahahah, ba nu e [10:15]
diana_coman: lmao [10:15]
diana_coman: mircea_popescu: http://paste.deedbot.org/?id=h2NC [10:22]
mircea_popescu: diana_coman, noa pula. da-napoi plox. [12:16]
diana_coman: mircea_popescu: ugh, tu ai facut screen din screen si acu' e tot o zapaceala [13:29]
diana_coman: mircea_popescu: am dat inapoi; vrei sa pun pe lista sa sterg eu? [13:42]
mircea_popescu: diana_coman, neah, lasa ca pe urma prea usoara viata ai. [17:39]
mircea_popescu: diana_coman, tu da' mi-ai omorit sesiunile sau ce plm ? [17:41]
mircea_popescu: ah restart, mda inteleg. [17:44]
mircea_popescu: diana_coman, cum adica screen din screen ? io n-am facut asa ceva ; io am facut -x, cum se si face de altfel, ce ie aia -r [17:45]
diana_coman: mircea_popescu: -r e reconnect [17:45]
mircea_popescu: dar -x e reconect corect. [17:45]
mircea_popescu: – r e reconect asa, gresit. [17:45]
diana_coman: mircea_popescu: tu, era o singura sesiune screen deschisa si ar fi tb sa fie cel putin doua daca e cum zici ca n-ai facut screen din screen [17:46]
mircea_popescu: pai m-am atasat la a ta (cu -x, cum se siface) si pe urma am facut niste feresti noi, ceea ce e pentru ce si exista screenu'. [17:46]
diana_coman: da' di ce sufletu' la a mea? [17:46]
diana_coman: ca nu pricep? [17:47]
diana_coman: si fix aia, screen din screen [17:47]
mircea_popescu: ca imi place mie de tine, ce. [17:47]
diana_coman: lolz [17:47]
mircea_popescu: tu, nu. "screen din screen" e cind pornesti un screen nou din screen existent. [17:47]
diana_coman: si cum propui atunci sa fac restart la server? [17:47]
mircea_popescu: cind faci mai multe feresti se cheama ca esti om normal. [17:47]
mircea_popescu: da ce-are n-am inteles ? [17:47]
diana_coman: ah, stai ca acu' abia cred ca am priceput ce zici tu acolo, pfuai [17:48]
mircea_popescu: deci io m-am atasat la screenu' tau ca nu mi se pare ok sa ai mai multe, tocmai fiindca el e screen, face cite vrei. si deci am facut ctrl-a C sa-mi faca [17:48]
diana_coman: da, acum am priceput [17:48]
mircea_popescu: le selectezi ctrl-a 1, 2, 0, care-o vrei [17:48]
mircea_popescu: mnoa. [17:48]
diana_coman: este; da' nu stiu de ce nu mi-a dat prin cap ca aia ai facut, pfuai [17:48]
mircea_popescu: noa, ok. [17:49]
diana_coman: scuze deci ca ti-am inchis alea, drept [17:49]
mircea_popescu: in mod normal ele-s bune ca si daca moare serveru', ele se reconecteaza cind mai discuti cu el automat [17:49]
mircea_popescu: da' nici nu e sf lumii acuma de-aia [17:49]
mircea_popescu: acu' citesc pe-aici sa ma dumiresc cum plm faci un delete corect pe un set de id-uri selectat in prealabil. [17:51]
diana_coman: eu mi-am lungit iar lista de scris asa ca ma duc cu satisfactie la distanta de calc, lolz [17:52]
diana_coman: spor pe-acolo [17:52]
mircea_popescu: evident mysql nu are implementat except [18:12]
mircea_popescu: ca de-aia si este el sql, sa facem cutotii chestii asa la intimplare cum ne si iese mai bine de altfel. [18:12]
mircea_popescu: diana_coman, http://paste.deedbot.org/?id=wGr1 [18:34]

February 3, 2020

#eulora Logs for 03 Feb 2020

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
mircea_popescu: diana_coman, http://paste.deedbot.org/?id=zytE [16:23]
diana_coman: mircea_popescu: http://paste.deedbot.org/?id=Hfxp [18:20]
mircea_popescu: diana_coman, noa bun asa, hai ca iesim la un capat. [18:34]
diana_coman: asa imi pare si mie, ca iesim pana la urma. [18:36]
mircea_popescu: bon [18:37]
mircea_popescu: diana_coman, http://paste.deedbot.org/?id=Jx5v [19:51]

February 2, 2020

#eulora Logs for 02 Feb 2020

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
diana_coman: http://ossasepia.com/2020/02/01/eulora-logs-for-01-Feb-2020#1002063 – got it; I'll look into it and get back to you by this evening. [04:17]
ossabot: Logged on 2020-02-01 09:43:29 mircea_popescu: diana_coman, http://paste.deedbot.org/?id=U9Li [04:17]
diana_coman: mircea_popescu: http://paste.deedbot.org/?id=erjU [05:45]
mircea_popescu: ty [08:53]

February 1, 2020

#eulora Logs for 01 Feb 2020

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
mircea_popescu: diana_coman, http://paste.deedbot.org/?id=U9Li [09:43]
feedbot: http://thewhet.net/2020/02/the-basilikon-doron-or-royal-gift-a-constitutional/ << The Whet — The Basilikon Doron, or "Royal Gift", a Constitutional [13:54]

January 31, 2020

Eulora’s Default Island: Sand, Grass, Rocks and Nothing Else

Filed under: Coding,Eulora — Diana Coman @ 4:36 pm

Less than 2 weeks after I’ve set Eulora’s client down, the resolution came of course to… pick it back up! Nothing like a bit of up-down to hm, build muscle? Anyways, there’s nothing lost for the exercise and quite a lot gained really since I got some time to unload more than just the code 1 and the resulting discussion sets a clearer way to move further:

mircea_popescu: anyways, to complete the frame here : http://trilema.com/2020/get-back-to-me/ eventually was resolved through discussion here, specifically : 1. that the expectation we’ll have to produce a data model constituent part of the original dilemma was in fact produced by 2. an unstated assumption that we’ll resolve the reuse-or-rewrite dilemma in the sense of re-write, 3. driven in turn by the felt pain of dealing with the damned thing as it exists.
ossabot: Logged on 2020-01-27 11:26:47 diana_coman: the way I see it, there are 2 main ways to get the gfx back in: a. use what already works, hence client 1.2b b. implement own aka go from the existing prototypes in 2.0 to production stuff so yes, including non-stiff etc
mircea_popescu: but the correct decision is to reuse, on the grounds that however painful we might be aware it actually is, in the most organic sense of awareness, nevertheless the alternative is actually specifically the sort of thing we’re trying to avoid.
mircea_popescu: as in, the ever-circling avoidant behaviour of great recent fame, that’ll never complete nor does ever produce anything else but enlargements of scope, in a reminiscent threadmill.
ossabot: Logged on 2020-01-10 08:13:57 mircea_popescu: with the alt-pantsuit conceptual threadmill, the “counter”-cultural, by-and-for-goffy-kids yet JUST AS PANTSUIT (in the only important sense) threadmill, where nothing is replaced with ever “larger” nothing on a dilated schedule.
[..]
diana_coman: mircea_popescu: specifically and for full clarity though: what’s desired next step currently?
mircea_popescu: either a working 2.0 with 1.2 gfx stack or a detaled failure report.

Given the above desired next step combined with this situation of having set down the code for a few days at least, I took first some time to look in parallel at the currently deployed client (1.2) and the prototype client (2.0), as I picked essentially both of them up again.

The result of all this looking was some barf of course but more usefully an initial map as to what needs to be done. And given the goal to get the gfx stack fully back in, I focused first on cementing some “default” loaders for each *type* of graphics asset that is going to be of any use: terrain, water, air, character (cal3d), item/structure (CS mesh), sound, icon, skin. Those defaults will be as minimal as possible and will serve as placeholders whenever needed – if an asset is missing or the client doesn’t know about it because reasons 2, then the client will use the default for that type and be done with it. Sure, everything will look the same and/or confusing if there’s too much of this going on but if you don’t like that, you are warmly invited to get off your ass and make a better client already, there’s your motivation for it. You’re welcome.

The last attempt at getting to the bottom of terrain creation with CS ended up with a very mirror-like terrain that is really not quite good enough since one can hardly see much with all that reflection. So I’ve spent the past few days going again through it all, mapping out all the various bits and pieces from xml files everywhere to CS’s terrain2 plugin and interfaces and whatnots.

To start with, since it’s defaults and pragmatism all around this time, I’ve set the prototype client to just load the main shaders anyway since the rest of the code can’t really do anything remotely reasonable without them. Let them be there, part and parcel of “the client” and none of server’s concern otherwise. This bit already was funny since it turns out that there is one list of shaders where you’d perhaps expect it, namely in data/shader so the usual “inventory xml” file: shaderlist.xml. Except, this list is very small compared to the full set of shaders that ship with both CS and legacy client. So what gives? Well, it turns out that there’s further listing of shaders from within the…materials’ inventory! Now add to this the fact that each shader may reference snippets and other shaders that are perhaps not in the list and you might get some idea as to where this leads if one follows it blindly.

By now though I have no intention to follow anything blindly and so I don’t care about its references, I’m not reimporting PS’s full-blown dependency-dragging loader either 3 and I’ll use instead CS’s basic loader to do the best it can. So I’ve set it explicitly and yes, hardcodedly, to load a list of shaders as I extracted it out of the current “shaderlist” and “materials.cslib” leaving it to handle or not the rest, who cares all that much. Surprisingly enough – or maybe not – it turns out it even works so I marked this part as done and moved on to making a default “Terrain” that will be used for any sector if need be.

While the naive approach with respect to terrain would consider the heightmap to be everything that’s needed, the reality is of course rather messier than that. The legacy client does in fact several dances back and forth on this, to the point where the same files are in two places and the same mesh is defined in parts in the world xml file – I have no idea why really, there’s no requirement for that and it certainly makes the whole thing rather confusing to follow.

Anyways, turning the terrain2 plugin inside out this time, I got at least to figure out the crucial bits: yes, the heightmap is needed; so is the base material in fact, despite what one might think at first – it’s really this base material that does the first and most crucial layer of work. Setting this base material as it is in the legacy client requires the basic texture of the terrain, its lightmap, materialmap and normalmap as well as the three basic materials (texture+normals for each of them) that are to be used throughout.

The less than ideal news is therefore that “defaults” in this case end up being 11 .png and .dds files rather than just the one heightmap.png. The good news is that I figured out the idiotic shader and shader vars setting for this particularly convoluted thing 4 and the result manages to actually look -perhaps unexpectedly- like some terrain after all:
client20_terrain_1_1024.png
client20_terrain_2_1024.png

If you don’t quite like the rather rough look of the terrain above, note that it’s indeed a very basic default terrain. The legacy client adds to the above several passes of rather intricate specifications of generating 3d grass/sand/rock of sorts with windspeed and density maps (aka yet another set of .png + .dds files that would need to get added to the defaults dir). At this stage I’m not even really sure that this side of things is really much concern for S.MG and the server – let the client prettify any terrain as it sees fit, after all.

For future reference, I’ll note here that the whole dance with a “material palette” from which supposedly the terrain plugin selects and blends the materials based on the height of each point turned out in practice to make very little difference by itself. And so while I wrote the code to do that too, I’m not even sure it will make it to the production version as anything other than a note in the comments. This “palette” is such a pretense: there are at all times precisely 3 materials and nothing more, since they are otherwise specified via yet another .png and taken as the red, green and blue values respectively, so no, no space for more than 3 anyway. The only thing that may change at all are the 3 materials themselves.

For now I’m happy with the above default terrain, as rough as it might look. Next week I’ll move on to setting in stone the rest of the defaults and see what cans of worms await to be squashed there.

  1. Though this very same purposeful and focused unloading *also* highlighted just how much I’m carrying otherwise at all times – still am, yes, and looking back have been for longer than I have online references to point at.[]
  2. Those have to do mainly with that idiotic expectation of knowing everything upfront.[]
  3. This would be the one reading the xml and all that shit.[]
  4. Because it’s a base material set on the default cell of the factory for terrain, the route is not exactly the very same as in other parts. Well, it wouldn’t be all that fun otherwise, would it.[]

#eulora Logs for 31 Jan 2020

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
feedbot: http://ossasepia.com/2020/01/31/euloras-default-island-sand-grass-rocks-and-nothing-else/ << Ossa Sepia — Eulora's Default Island: Sand, Grass, Rocks and Nothing Else [12:51]
diana_coman: mircea_popescu: re ^ let me know if that is enough for "terrain" or if you want me to look into the rest of prettifying it aka using "fertility" maps + windspeeds and additional materials to generate procedurally "3d grass" and artefacts of that sort. [13:17]
mircea_popescu: diana_coman, i just finished with spyked's, this is next in line [13:18]
diana_coman: no rush, I'll take a break from it tomorrow anyway because it'll help. [13:18]
mircea_popescu: diana_coman, http://ossasepia.com/2020/01/14/notes-on-computer-graphics-formats-exporters-and-blendering/#comment-7494 << amusingly, your own site's modqueue triggers at log links. [13:30]
diana_coman: hmm? /me looks [13:30]
diana_coman: mircea_popescu: it triggers at any links, why would the log ones be special? [13:32]
diana_coman: logger is not even on same ip anyway [13:32]
mircea_popescu: you can add as many links to trielma you want to a trilema comment, it won't triegger [13:32]
mircea_popescu: yours is likely th same wrt ossasepia, but not log.ossasepia [13:32]
mircea_popescu: which seems to me fixworthy [13:32]
diana_coman: uhm [13:32]
mircea_popescu: diana_coman, answered. all good! [13:57]
diana_coman: glad to hear it; re the ideals there, I'd have preferred to have *no* files needed for defaults at all, tbh [13:59]
diana_coman: but that's way too far a step for legacy client & cs. [13:59]
mircea_popescu: why not ? [14:02]
mircea_popescu: i mean, what sense does it make ? [14:02]
diana_coman: it makes for fewer possibilities for defaults to fail; I like my defaults unfailing, lolz. [14:03]
mircea_popescu: yes, but think logically, how could there be a display default file-less ? [14:04]
mircea_popescu: it's like default computer generated voice without some kinda saved sound parameters somewhere. [14:04]
diana_coman: uat? simple: it's anyway a bloody list of vertices and triangles etc [14:04]
diana_coman: wtf [14:04]
diana_coman: it can be in the code as it can be in the file on disk [14:04]
mircea_popescu: humans are peculiar, to make the display work you gotta somewhere inform the machine of some of those peculiarities no ? [14:04]
mircea_popescu: but it can't be in the "code" unless let a = 1,0,0,0,0,1,0 counts as code to you [14:05]
diana_coman: well, it counts as code to client, what can I tell you [14:05]
diana_coman: the point there was re "won't fail no matter what", not re "let it be actual code" since this last part is not code [14:05]
mircea_popescu: imo it's better to have the few piles of arbitrary parameters needed to bridge the biogap in dedicated raster files than in "code" which is just adnotated… raster files. [14:06]
diana_coman: and for that matter even code: let it have the function to generate the bloody vertices [14:06]
mircea_popescu: i do not believe this'd have been an improvement. [14:06]
mircea_popescu: you expect files implicitly fail somehow ? [14:06]
diana_coman: but as above, why "too far a step for cs/client": because can't define the terrain procedurally directly in cs atm [14:06]
mircea_popescu: diana_coman, and when you can, you'll want to also define the gui procedurally ? [14:07]
diana_coman: no, that I want gone :D [14:07]
mircea_popescu: so how is someone to switch tools ? [14:07]
diana_coman: shortcut keys ! [14:07]
mircea_popescu: and how do they know they did it or just misclucked ? [14:08]
diana_coman: what do you mean? if tool is switched, they did it; if not, they didn't; or what ? [14:08]
mircea_popescu: how do they SEE they did, if no gui. [14:08]
diana_coman: ah, you meant the whole display rather than just the interaction part? (didn't quite make sense since terrain part of display); at any rate, if cli, then it *says* ack. [14:09]
mircea_popescu: you're a software radical. [14:09]
diana_coman: getting to the…root of it! [14:10]
mircea_popescu: let's put it this way : while 0 files is indeed a recognizable ideal, which in some circumstances (such as, it being available) might even be better than current situation ; nevertheless 1 is exactly equal to 11. [14:10]
diana_coman: I can see that; and as seen, I can work fine with it, as such. [14:11]
mircea_popescu: now in other practical concerns, does the vierwport change still work ? [14:11]
mircea_popescu: ie, switch from camera view to first person ? [14:11]
diana_coman: the camera modes are still there and working, yes; when I got to make the camera working, I got this back in as well. [14:12]
mircea_popescu: cool. [14:12]
mircea_popescu: i really don't see problems here. [14:12]
mircea_popescu: i honestly don't even see the problem with ditching the "gui" and using cli. [14:13]
diana_coman: cool, I'll move next week to go through the rest and make defaults and I'll see there; the cal3d might be the most intricate as far as I can currently see, but I'll know exactly when I get to it. [14:14]
diana_coman: well, iirc the idea was to avoid being pegged as "cli only" or other such nonsense; but at any rate, my idea was that once 2.0 is out there, since things are more separated *anyway*, it won't be all that big deal to make myself a cli client out of it too, pretty much one cut and done. [14:15]
diana_coman: but it's time will come when it comes. [14:15]
diana_coman: will bbl [14:16]

January 27, 2020

#eulora Logs for 27 Jan 2020

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
fggg: is this game still alive? [03:47]
diana_coman: fggg: it is; are you alive though? [03:59]
fggg: diana_coman, no, we are admist wuhan coronavirus [04:01]
diana_coman: there's no we around here, there's only V! [04:02]
diana_coman: fggg: how did you find your way in here? [04:03]
fggg: diana_coman im trying to find something fun to pay during work [04:04]
fggg: *play [04:04]
diana_coman: heh, there's lots of fun around the game too, only it's that thing with …you need to know how. [04:05]
diana_coman: fggg: what is your work? [04:05]
diana_coman: fggg: re game, there's the wiki with step by step instructions for account setup; the client and a lot more besides is on my blog atm. [04:07]
diana_coman: fggg: as the topic says, this channel is logged and you can read any of it at http://logs.ossasepia.com/log/eulora or http://logs.minigame.biz/2020-01-27.log.html for instance [04:08]
fggg: it says 404 not found [04:09]
fggg: nevermind [04:09]
fggg: is there by any chance a binary? [04:11]
diana_coman: fggg: hm, are you on windows? [04:12]
diana_coman: fggg: questions doth not bite. [04:19]
diana_coman: or maybe they do bite *some* people, I guess; even questions are alive around here! [04:24]
diana_coman: will bbl [04:24]
diana_coman: mircea_popescu: those past few days I kept looking at "why can't we" and I think it's ripe for some discussion really to get to the bottom of the options there. [10:23]
mircea_popescu: shoot [10:23]
diana_coman: the core of the thing that got me initially going nuts is that any possible solution that I see is in fact using code somewhere in between old client (aka the one currently deployed) and latest client (aka the one currently set down) [10:24]
diana_coman: but once I got over that wtf: [10:24]
diana_coman: all the existing formats (cal3d included) are essentially enumerations of stuff anyway; they CAN be used, possibly with a converter on client side, why not [10:25]
diana_coman: ie server sends vectorial, client-side bit creates list of vertices or whatever and stores it locally for use [10:25]
diana_coman: basically ~all of it could even go that route if wanted [10:25]
diana_coman: if one goes all the way to currently working client, it can even go that local bit automatically updates whatever xml lists the client wants, after all [10:26]
diana_coman: esp those that are basically inventories, what's to stop the code to update them as stuff comes in; it will still get loaded only on client reset (because idiots) but anyways [10:26]
diana_coman: that would be on one extreme [10:26]
mircea_popescu: right [10:27]
diana_coman: it would *still* require that we extract /define some formats [10:27]
diana_coman: because for instance there's this mess that cal3d's "material" format is anyway not used [10:27]
diana_coman: so currently client uses cal3d format for skeleton and mesh and animation BUT [10:27]
diana_coman: its own format for material… [10:28]
diana_coman: partially I suspect because cal3d's format doesn't care about shaders [10:28]
diana_coman: talking of which, the thing with cs's shaders can get solved I think by shoving it where it belongs: let client load its shaders as it currently does; pick some standard shaders to apply to whatever [10:28]
diana_coman: and otherwise don't care [10:28]
mircea_popescu: i can see it. [10:29]
diana_coman: the light and air effects /particle systems will need def separate, there's just nothing other than code + xml currently so no use as such [10:29]
diana_coman: the gui/2d can stay as it is, let it be the .zip file that can be specific to each client, I don't quite see any standard there anyway or even worth going through a lot of work on that [10:30]
diana_coman: the terrain format can simply be the set of files required and let client pick its shaders if/when it wants [10:30]
diana_coman: so overall, I think the formats themselves/data transfer is NOT stuck as such on client idiocy; but there still has to be significant backtrack on client side and it will be painfull [10:31]
diana_coman: because basically currently running version has many things standing in the way (most notably the "net" part + the "world.zip" and fixed sector(s)) while the latest dev version has already ripped out TOO much to work that way [10:32]
diana_coman: I'm not sure if the above is clear enough/still missing something important [10:33]
diana_coman: I tried to structure this in all sorts of ways and I looked at both versions of code but short of prototyping stuff, I don't seem to get much more out of it atm. [10:34]
mircea_popescu: it;s not clear. [10:36]
mircea_popescu: so you have a running client now, that's not the eulora published client. [10:36]
mircea_popescu: y/n ? [10:37]
diana_coman: mircea_popescu: yes; one with invisible widgets, no animation of main char (ie stiff movement) and communication only with smg-comms server. [10:37]
mircea_popescu: ok, so the problem here is rather : you have a prototype new client, that's not running, in the sense that it doesn't do any 2d (ie, gui) and the 3d is very basic ("stiff movement") and a ways from deployment. but it does the networking part correctly. [10:38]
mircea_popescu: meanwhile the published client does some more 2d and much more 3d, but obviously fucks up the net and other things. [10:39]
mircea_popescu: and the issue is that the splicing of these two together isn't straightforward ? [10:39]
diana_coman: yes. [10:39]
mircea_popescu: why isn't it straightforward ? [10:39]
diana_coman: because of interdependencies in the code, as usual [10:40]
mircea_popescu: but concretely [10:40]
diana_coman: uhm, so let's take something concrete: as above, if we say "let client use its shaders as they are", one needs to bring back in at the very least some loader of all that xml for shaders [10:41]
diana_coman: that loader does not come all by itself [10:41]
mircea_popescu: but this is straightforward, you uncomment come code. [10:41]
diana_coman: uhm, no [10:42]
mircea_popescu: it has to be "no, because …" [10:42]
diana_coman: none of the ripping parts off goes as simple as "you comment out some code and it works" [10:42]
mircea_popescu: not in practice, at any rate. [10:42]
diana_coman: conversely, the opposite is never as simple as you uncomment some code and here it goes back in again [10:42]
mircea_popescu: i understand what you're saying. nevertheless, splicing things together never is anything but this. [10:43]
mircea_popescu: IF we admit "this never works" as a first order primitive, therefore we come to the conclusions of beings an engineer : that no code can ever be a collaborative effort in principle, and every manalone must write everything from yahveh down. [10:44]
diana_coman: for example, the gui/2d thing is currently "basic" because loading one bloody single widget forces back in a huge chain of stuff that already starts bringing in other *unwanted* parts [10:44]
diana_coman: uhm, where did I say this never works? [10:44]
mircea_popescu: diana_coman, do these unwanted parts actually do anything to bother you besides being unwanted ? [10:44]
diana_coman: all I said was need to backtrack and it'll be painful [10:44]
diana_coman: because bringing stuff back in IS backtrack, isn't it? [10:44]
mircea_popescu: well, no. looky here : [10:45]
diana_coman: I suppose you can reframe it as splicing or whatever, but still [10:45]
mircea_popescu: suppose i marry a woman, who has six daughters, and i already have six daugthers of my own. for simplicity, all daughters are six years old. [10:45]
mircea_popescu: now, if her daugthers are unwanted, it means we might feed them, or not. [10:46]
diana_coman: yes, they do, both directly through requiring all sorts and/or crashing because "not there" and indirectly as they add more complexity to handle at any given time [10:46]
mircea_popescu: if six months in we discover her daughters, while unwanted, nevertheless i dunno, provided interesting walpaper with their tits, and so we decide to feed them now, we've not backtracked. [10:46]
diana_coman: myeah, your daughters are nicely separated entities, lucky you. [10:46]
mircea_popescu: if six months in we discover my daughters, wanted as thry were, now have to UNDO six months' natural development, for instance sucking their nails and hair in, THEN we backtracked. [10:47]
mircea_popescu: so, unless you're stuck undoing your own code, what do you care about unwanted crap. [10:47]
mircea_popescu: and no, they.re not separated, obviously they don't so well distinguish among each other as i do, and consequently they get butthurt when their sisters die of hunger. [10:48]
diana_coman: well, stuck undoing my own cuts of existing code rather; anyways, I'm not really arguing it either way ie what to call it . [10:48]
mircea_popescu: "could happen to me, weee weee" [10:48]
diana_coman: hmmm, that's some link, but not much of it [10:49]
mircea_popescu: diana_coman, i can certainly see it, "damn it, fucks up all that nice negative space i made". [10:49]
diana_coman: the link is more like "here we started this work with 6 threads of yours and 6 of mine, got them all woven together, now 1 year in, go and take out 3 of yours and 3 of mine", that's the picture I have. [10:49]
mircea_popescu: ha. [10:50]
mircea_popescu: alrighty, but be all that as it may [10:50]
diana_coman: honestly though, I am not arguing any sort of "it can't be done" on any direction [10:50]
mircea_popescu: is there a specific serious problem, besides "fuck, now it crashes because it doesn't have a 0-length file in so and so fixed path, motherfucker" litany of mere inconvenience ? [10:50]
diana_coman: hm, it's damned code, what *could* such a problem really be? I can't quite see it ie ~all problems will be that sort of inconvenience and the only possible "serious problem" is if they just add up to too much in one go so it ends up eating a ton of time to get it working. [10:52]
mircea_popescu: the prototype of this serious problem is what's otherwise known as "dependency conflict". when one side wants something one way and the other the other way, there's no resolution. [10:52]
diana_coman: it can always have defaults for all *types* of things and use those when not available; it can always generate locally whatever shit it thinks it needs [10:52]
mircea_popescu: but when our code doesn't care about /hurr/durr/x.y whereas their code must have it… well so let them have it. [10:53]
diana_coman: well, is the client a side now? I thought the whole idea is that it will make do with what there is and that's that. [10:53]
mircea_popescu: hang on. [10:53]
diana_coman: hanging on. [10:53]
mircea_popescu: i mean : within the client, there's our side (the above http://ossasepia.com/2020/01/27/eulora-logs-for-27-Jan-2020#1001766 ) and the legacy their side, as found in http://ossasepia.com/2020/01/27/eulora-logs-for-27-Jan-2020#1001767 [10:54]
ossabot: Logged on 2020-01-27 10:38:49 mircea_popescu: ok, so the problem here is rather : you have a prototype new client, that's not running, in the sense that it doesn't do any 2d (ie, gui) and the 3d is very basic ("stiff movement") and a ways from deployment. but it does the networking part correctly. [10:54]
ossabot: Logged on 2020-01-27 10:39:11 mircea_popescu: meanwhile the published client does some more 2d and much more 3d, but obviously fucks up the net and other things. [10:54]
mircea_popescu: this is not a perfect spluit, obviously "their" side mostly consists of damage control we did on even dumber atrocity, over three iterations resulting in as many layers. but for the needs of this discussion. [10:55]
diana_coman: when it wants thing "their way", it's either "change it so it wants it our way" or "fine, let it generate it locally/restart to load/basically convert it" [10:56]
mircea_popescu: alright. [10:56]
mircea_popescu: so there's no actually serious, "well, they want to own the network, and this is baked into ten trillion places and glued in with broken glass, and so we simply can't splice". [10:57]
mircea_popescu: it's just "well, they have all these comic if they weren't tragic spurious dog and pony shows we'll be stuck dragging along even longer" [10:57]
diana_coman: well, the net in currently deployed client IS baked into ten trillion places and glued in with broken glass, yes [10:58]
diana_coman: I still got it out in the dev prototype, what of it [10:58]
mircea_popescu: ha [10:58]
diana_coman: that's the bitch really: it CAN be made to do what it must; it is however ~impossible to tell upfront for ALL of it , how long exactly ALL will take [10:59]
mircea_popescu: so what's the issue behind http://ossasepia.com/2020/01/27/eulora-logs-for-27-Jan-2020#1001769 besides a (quite understandable) "i have but one mouth and i must scream" on your part ? [10:59]
ossabot: Logged on 2020-01-27 10:39:45 diana_coman: yes. [10:59]
diana_coman: so if we want to have gradual concrete improvements, I need to start with existing and then chop off bits more conservatively [10:59]
diana_coman: if we go from the other end, there is the risk that it will still take a long time to have it all working [11:00]
mircea_popescu: is the idea here that you expect adding your mostly-net client into the old one will take many months ? [11:00]
diana_coman: goes to read that thread [11:00]
mircea_popescu: ill be around. [11:00]
diana_coman: mircea_popescu: I do expect it will take several months, yes; because I'll need to redo some of the cuts of those bits in a trillion places + with broken glass; and while I do believe I'll be faster about it for knowing my way around, I still don't quite expect it will go extremely fast, because of what it is. [11:04]
diana_coman: ie existing client will fucking choose to die because of lack of a ping/pong from server and that IS in 1001 places etc. [11:05]
mircea_popescu: the foremost part i dislike about this conversation is this tendency to retreat into vague. "some cuts", it may be unavoidable but whether it is or isn't, it ain't helping me. [11:05]
mircea_popescu: (the other part i also dislike is the structure, where interrogation fails to provide the key point, then once i sigh relief and say "well at least it's not X" then the retort comes "no wait, it's X!"… it could've just as well come natural in response to questions so it dun look like it's just being said to be said). [11:07]
mircea_popescu: diana_coman, in that particular example nothing needs changing, why would you take that out. [11:07]
diana_coman: mircea_popescu: this sounds like I still don't get something then [11:08]
mircea_popescu: possibru. [11:08]
mircea_popescu: what ? [11:08]
diana_coman: is the server meant to maintain the ps messages/protocol? [11:08]
mircea_popescu: nope. [11:09]
diana_coman: right [11:09]
diana_coman: and otoh you say it's fine if client doesn't run because it doesn't get the pong from server? [11:09]
diana_coman: or do you mean the local net should mimick that? [11:09]
mircea_popescu: the latter. [11:09]
mircea_popescu: didn't you say you had a client that handles the net part ok ? [11:10]
diana_coman: mircea_popescu: right, let's make this clear because I think it gets muddled into "the net part" and other not fully defined bits [11:10]
diana_coman: existing client has PS "net part" including the whole set of PS messages and corresponding dance with them [11:11]
mircea_popescu: okay. [11:11]
mircea_popescu: actually, let me make a complete model from my head, then we can prolly see what the problems are. [11:11]
diana_coman: otoh prototype client does NOT have any of the above anymore and doesn't require it at all, nor does it care about it/nor does it know about it [11:12]
diana_coman: mircea_popescu: ok, I'm listening [11:12]
mircea_popescu: so : eulora 1.2b client has a networking side which works to ps protocol networking, and a gfx side which works to current de facto standard. [11:12]
mircea_popescu: eulora 2.0 client has a networking side which works to eucomms protocol networking, and a gfx side which works to a very low standard. [11:13]
mircea_popescu: now, the impediment to simply taking 1.2 gfx and splicing it atop 2.0 is that… ? [11:13]
diana_coman: mircea_popescu: the impediment is that 1.2b gfx is intertwined with 1.2b networking; that part with broken glass and everything else. [11:14]
diana_coman: 2.0 client has the networking entirely separate btw because it's the Ada lib and specifically and on purpose separate. [11:15]
mircea_popescu: so rather, that when you took it out the first time you took it out the way you did (ie, producing a gfx-less client as a prototype) rather than cleanly because it didn't look so good ? [11:15]
mircea_popescu: more specifically : did you make 2.0 by writing from scratch, as a prototype networking item, or did you make it from 1.2, by cutting things out ? [11:16]
diana_coman: what do you mean "because it didn't look so good"? [11:16]
diana_coman: mircea_popescu: the latter; from 1.2 by cutting things out; and rewrite/add ofc. [11:17]
diana_coman: obv, the Ada lib IS from scratch though. [11:17]
mircea_popescu: ok. and the reason you ended up cutting out things like say 3d gfx is that actually keeping them was significant extra work ? [11:17]
diana_coman: yes. [11:20]
diana_coman: (I had to ponder that one because 1.2 is made out of 2.0 by cutting things out AND then writing parts/replacements by scratch e.g. the direct loaders) [11:20]
mircea_popescu: and not even necessarily easy to evaluate how much extra work, at that. [11:21]
diana_coman: exactly. [11:21]
mircea_popescu: diana_coman, do you mean, 2.0 from 1.2 ? [11:21]
diana_coman: that's the core rub and the reason for what I understand must be quite annoying "vagueness" [11:21]
diana_coman: mircea_popescu: right you are; I do mean 2.0 from 1.2 [11:21]
mircea_popescu: alright. what would you say to the concept [11:21]
mircea_popescu: that indeed while these cuttings were needed for other purposes, they did nothing to cut out any gfx work. everything left behind ~still needs doing~, and however unpleasant, hard etcetera eating the 1.2 gfx stack may appear from this vantage, the alternative is actuall even worse, it's just not nearly as self-obviously worse for lack of comparable familiarity ? [11:23]
mircea_popescu: ie, the kid who runs away from rural highschool to make it in town because he knows how hard multiplication or basic func analysis is, but doesn't know how hard making it in town is. [11:23]
diana_coman: I'm not entirely sure I fully follow what is your full idea of "gfx work" [11:24]
mircea_popescu: at some point we'll have to have non-stiff models, no ? [11:25]
ossabot: Logged on 2020-01-27 10:37:58 diana_coman: mircea_popescu: yes; one with invisible widgets, no animation of main char (ie stiff movement) and communication only with smg-comms server. [11:25]
diana_coman: the way I see it, there are 2 main ways to get the gfx back in: a. use what already works, hence client 1.2b b. implement own aka go from the existing prototypes in 2.0 to production stuff so yes, including non-stiff etc [11:26]
diana_coman: now, with a. the set of problems revolves around interfacing with the madness and cutting away only what really stands in the way (specifically, the main bits currently clear on this: net, ps messages, world/fixed sectors) [11:28]
mircea_popescu: right, we agree on that part. [11:28]
diana_coman: with b. the set of problems revolves around exactly the unknowns of "make the gfx fully work as it did in old client" [11:28]
mircea_popescu: hence the above comment re running away from school. [11:29]
mircea_popescu: it seems to me self-obvious that a kid who can't even master his highschool class in fizesu' gherlii ain't gonna be much competition to me for "who owns cluj" [11:29]
mircea_popescu: it however DOES NOT seem so to him, which is why i ended up having to shoot a coupla historically. because "the known devil" [11:29]
diana_coman: honestly, I'm all for going either way, lol; the *only* thing I'm trying to make sure is as clear as we can get it, is the expectation esp re time it's likely to take (which is anyway a bitch to do on "unknowns" obv) [11:30]
mircea_popescu: you have a specific expectation ? [11:32]
diana_coman: mircea_popescu: for which part exactly? [11:32]
mircea_popescu: the expectation esp re time it's likely to take < [11:32]
diana_coman: hm, "specific" as in "several months"; so no, I would not say it's specific. [11:35]
mircea_popescu: well, do you plan on working slower than you reasonably can ? [11:36]
diana_coman: mircea_popescu: no, not at all; and I would not *want* to work slower than I reasonably can, since I honestly do not want it to take even longer than it has to. [11:37]
diana_coman: good god. [11:37]
mircea_popescu: so what is the problem here lol [11:38]
diana_coman: my inner self going "this should have been done already like in…2018?" lolz. [11:38]
mircea_popescu: you're talking as if there's some kind of a time expectation on the table and you don't see it can be met. well, whence is it on the table ? do you have it ? ah [11:39]
mircea_popescu: yes well, so your inner expectation that this should have been done like, last year, will have to sit on ice for a little bit. [11:39]
diana_coman: sends it to ice. [11:39]
mircea_popescu: nothing wrong with it in general, but it's a prime manner to drive oneself nuts. "oh, i shouldn've been married already" whatever nonsense. [11:40]
diana_coman: it's more of a sort of fatigue really. [11:40]
mircea_popescu: heh. [11:40]
mircea_popescu: the problem is, the above dilemma plays out with fatigue, still. [11:41]
mircea_popescu: ye olde "run away from it once, you'll never be able to stand again" unpleasantness of human condition. [11:41]
diana_coman: oh, more of a check with outside world to see if indeed it's just fatigue hence can be discarded or not. [11:43]
diana_coman: checked and it is, so cool. [11:43]
diana_coman: ice-cool even, lolz. [11:43]
mircea_popescu: inasmuch as it has to be done, it has to be done, what can you do. [11:45]
mircea_popescu: anyways, to complete the frame here : http://trilema.com/2020/get-back-to-me/ eventually was resolved through discussion here, specifically : 1. that the expectation we'll have to produce a data model constituent part of the original dilemma was in fact produced by 2. an unstated assumption that we'll resolve the reuse-or-rewrite dilemma in the sense of re-write, 3. [11:47]
ossabot: Logged on 2020-01-27 11:26:47 diana_coman: the way I see it, there are 2 main ways to get the gfx back in: a. use what already works, hence client 1.2b b. implement own aka go from the existing prototypes in 2.0 to production stuff so yes, including non-stiff etc [11:47]
mircea_popescu: driven in turn by the felt pain of dealing with the damned thing as it exists. [11:47]
mircea_popescu: but the correct decision is to reuse, on the grounds that however painful we might be aware it actually is, in the most organic sense of awareness, nevertheless the alternative is actually specifically the sort of thing we're trying to avoid. [11:47]
mircea_popescu: as in, the ever-circling avoidant behaviour of great recent fame, that'll never complete nor does ever produce anything else but enlargements of scope, in a reminiscent threadmill. [11:48]
ossabot: Logged on 2020-01-10 08:13:57 mircea_popescu: with the alt-pantsuit conceptual threadmill, the "counter"-cultural, by-and-for-goffy-kids yet JUST AS PANTSUIT (in the only important sense) threadmill, where nothing is replaced with ever "larger" nothing on a dilated schedule. [11:48]
mircea_popescu: diana_coman, you happy with that ? [11:48]
diana_coman: mircea_popescu: sounds right on point re the re-write assumption indeed. [11:50]
mircea_popescu: aite, well, so if hope's any guide you might discover pain has an optimal distance which isn't 0. much like uncanny valley works, as you get closer past that spot it subsides. [11:51]
mircea_popescu: the bugaboo effect. [11:51]
diana_coman: mircea_popescu: eh, "on n'oublie rien…on s'habitue" [11:52]
diana_coman: lolz [11:52]
diana_coman: mircea_popescu: specifically and for full clarity though: what's desired next step currently? [11:53]
mircea_popescu: either a working 2.0 with 1.2 gfx stack or a detaled failure report. [11:55]
mircea_popescu: ideally built out of good progress reports all the while. [11:55]
mircea_popescu: you ever play the original fallout btw ? [11:55]
diana_coman: no [11:57]
mircea_popescu: ah. was a great game. anyways, bethesda made a sorta farmville version recently, and in it the people can go exploring. it looks like so : https://gamepedia.cursecdn.com/fallout_gamepedia/9/96/FOS_Exploring.png?version=db3d1c812ee75eb8ee45ca89cfca1cf0 [11:57]
mircea_popescu: so, rather : "today, approaching this problem. did so and so, worked out / didn't work out but exhausted for the day, will try x next" abnd so on [11:58]
diana_coman: mircea_popescu: one weird side effect of all this futzing with graphics is that I don't want to play computer games anymore, lolz [11:58]
mircea_popescu: heh [11:58]
diana_coman: mircea_popescu: do you want daily reports ? it'll be rather counterproductive [11:58]
mircea_popescu: i went back to knight's bounty. after ~year spent reviewing pretty much all games made since eulora got started (not even kidding, pretty much ALL), there's still nothing to play. [11:58]
mircea_popescu: diana_coman, pick your own interval, that's not the important part [11:59]
diana_coman: ah, that works (as it did before), sure. [11:59]
mircea_popescu: right. [11:59]
diana_coman: and yeah, it was by default by now, lol [11:59]
mircea_popescu: it's invaluable, by the time you get to an impasse there's always all the needed material to resolve it. [11:59]
diana_coman: so I'll go to …hm, pick up again what I just put down, lolz [11:59]
mircea_popescu: that's not only a very hard guarantee to beat, but also the best guarantee people can likely have irl. so… [12:00]
diana_coman: map out a plan and get on with it [12:00]
mircea_popescu: diana_coman, in fairness, you were probably ~underoing~ the reporting, as proven by the accumulation that took a while to unload upon setdown. [12:00]
diana_coman: mircea_popescu: by that measure I'll spend the next year reporting all sorts [12:01]
diana_coman: (or more) [12:01]
mircea_popescu: strike your own balance. i have no reason to complain, the part i need from all this was in fact there, so i'm all good. [12:01]
diana_coman: because if you go by "the unwritten articles", there are all sorts of things waiting in various corners and various degrees [12:01]
mircea_popescu: past that, it's a tool to help ~you~. so use it, as reasonable, "going back to camp to dump all this stuff takes time / carrying it is heavy" [12:02]
diana_coman: yeah. [12:02]
mircea_popescu: aite then [12:02]
diana_coman: mircea_popescu: on other sides of this, since hanbot asked re graphics: using existing formats means the blender exporter will get back on the list of todo as well, correct? [12:29]
diana_coman: either as update to that blend to cal3d plugin that sort of kind of works or otherwise as reading .blend files directly and spitting out the required outputs. [12:30]
mircea_popescu: yeah [13:20]
mircea_popescu: i've been also looking around, honestly there do not exist good options. [13:21]
diana_coman: of that I'm sure; there are no good options, no. [13:21]
diana_coman: at least that came out of my deep dive into CG and formats and whatnots [13:21]
diana_coman: dunno why it had to be such a …concentrated dive but anyways, it set my mind to rest; and I still like that laban framework and approach. [13:22]
mircea_popescu: honestly, something like katauri's game engine seems to this day to me to be the ~best one can hope for [13:23]
mircea_popescu: http://www.katauri.com/ << actually, i wonder if these people could be commissioned to write a client. [13:24]
mircea_popescu: see, as it happens our sectors world matches so well their maps… [13:24]
diana_coman: I was just wondering the same, lol [13:24]
mircea_popescu: site's thoroughly broken, and… well, ideally i'd have liked someone to pay a visit to the offices, if they even stil lexist as such. [13:26]
diana_coman: ~20 people in kaliningrad, huh [13:26]
mircea_popescu: yeah. [13:26]
mircea_popescu: whatever, i kept hoping the wots will somehow connect at some point, but i guess not so far [13:26]
diana_coman: they have emails for 3 people from what I see [13:26]
diana_coman: the forum is dead [13:27]
mircea_popescu: well, no, there's three defaultish emails. [13:27]
diana_coman: what's that royalquest they say they moved on to [13:27]
diana_coman: https://www.royalquest.ru/ [13:28]
mircea_popescu: i dunno, there's this common practice these days of self-disrespect to an unfathomable degree, "the pressure of the ourdemocracy idiotworld we built is so great, we'll have to… disexist ourselves". [13:28]
diana_coman: growing old pretty quickly, that's my best description of it. [13:29]
mircea_popescu: somehow utter morons manage to disregard how their insubstantail nature isn't either universal or acceptable. somehow mp can maintain online presence just fine such that anyone with a point can talk to him ; whereas all the horde of pantsuitards can't, but… that's ok… because reasons, handwaves an' a wizard did it. out of pure energy no doubt. [13:29]
ossabot: (trilema) 2020-01-04 mircea_popescu: because totally, this is how the pantsuit "sincere regret" device works : gmaxwell is "sincerely sorry" about his 2011 "business" in his mind only wasting a buncha people's coins, therefore "mp largely slinked off into the shadows after one of his crappy businesses disappeared with people's coins". [13:29]
mircea_popescu: whatever, i dunno how to solve manalone problems. much like i'd like an alf that weren't himself, i'd have like a katauri that were employable rather than useless. [13:31]
mircea_popescu: what's wishes do. [13:31]
diana_coman: well, only today I had some guy wondering into #o because "it's like the unseen part of life" and then asking for "structured data aka forum"; and I don't think he got the problem there even when I explicitly pointed out to him that well, precisely life can't fit in his strict idea of structured data. [13:31]
mircea_popescu: structured data as in forum as in, phpbb ? [13:32]
diana_coman: probably! [13:33]
diana_coman: I pointed out to him he can download the logs and structure them to his heart's content [13:33]
diana_coman: but I can imagine. [13:33]
mircea_popescu: basically they'll just keep right on asking us if we don't want a pantsuit ~forever. who knows, maybe changed mind ? [13:33]
diana_coman: since there can't possibly be anything other than that…yes, what else can they do? [13:33]
diana_coman: and yeah, I asked and he was….30. [13:33]
mircea_popescu: whatevs. [13:34]
mircea_popescu: if anyone knows any of the katauri dorks such that we might sit down to, perhaps, better outcomes than with the blender dorks, do say something. [13:34]
diana_coman: I keep pondering in the background some more concrete way of getting to 15yo or something because it seems that it might be indeed the only thing worth doing about it. [13:35]
mircea_popescu: did i ever recount the story of the scared fifteen year old czech girl ? [13:35]
mircea_popescu: i guess not huh. one of these days. [13:36]
diana_coman: I recall some scared girl running to the bathroom [13:36]
mircea_popescu: not http://trilema.com/2017/the-story-of-the-scared-slut/ ? [13:36]
diana_coman: precisely because I've seen that countless times otherwise and for all sorts of weird "scares" [13:36]
mircea_popescu: chick was like 30 [13:36]
diana_coman: yes, that one [13:36]
diana_coman: thing with 15-18 yo is that …yeah, they get even more scared, lolz [13:37]
mircea_popescu: i'm not talking biological 30yos mentally retarded to the degree of being preteens. this was an actual tenth grader. [13:37]
mircea_popescu: myeah. [13:38]
mircea_popescu: arguably they have a point. or you know, the petrified 30yo is just ridiculous. the petrified 15yo… well, could be legit "not ready" biological signal. [13:38]
mircea_popescu: in other news, i'm listening to nick cave's latest thing, dear god, what has this dude done to his voice, gargled thumbtacks, what is it. [13:39]
diana_coman: I guess so; but seriously, when the guy sends his mother to bring me chocolates because he …is too ashamed to do it… [13:39]
mircea_popescu: ahahaha. [13:39]
mircea_popescu: i was at the travel agents' office last week, and while her girl got me plane tickets some older women came in asking for fliers. because, you see, her daughter's 18 an' they asked for something in this vein at school and she'd figured she'd help her because she has so much work to do. [13:40]
diana_coman: lmao [13:41]
mircea_popescu: leaving aside how there's no doubt in my mind the only reason those were even asked for was such the dumb precious princess cuntlets ACTUALLY GO OUT AND ASK FOR THINGS, as the first, tiny baby step on the ABSOLUTELY NECESSARY path to their enslavement & spending next decade bound naked to cold walls by cold chains [13:41]
mircea_popescu: my first call was "holy shit that chick's lazy". companion disagreed, "i bet you she's just shy". [13:42]
mircea_popescu: on examination i can see it. too shy to ask for ~free promotional materials~, fancy that. [13:43]
diana_coman: well, if she was never allowed to as much as walk home alone (because dangers!!!) or something… [13:44]
diana_coman: it's not all that surprising tbh [13:44]
mircea_popescu: mother gets what she deserves, no argument. [13:44]
mircea_popescu: god forbid her daughter were raped, lawd's mercy!!! [13:44]
mircea_popescu: if only someone could be bothered… [13:44]
diana_coman: oh, since she went to "help", I think she probably wants it that way (or still wants it that way for as long as she's fine to do the errands and feel useful that way) [13:45]
mircea_popescu: vieja loca [13:46]

January 26, 2020

#eulora Logs for 26 Jan 2020

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
auctionbot: S#1077 O=17mn LB=None E=2020-01-29 05:43:03.567830 (64h38) >>> Dell R610 PE Server ships from U.S. (Server-A) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [03:20]
auctionbot: S#1078 O=17mn LB=18mn E=2020-01-29 05:43:42.679910 (64h38) >>> Dell R610 PE Server ships from Uruguay (Server-B) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [03:20]
auctionbot: — end of auction list, 18mn total bids — [03:20]
auctionbot: S#1077 O=17mn LB=None E=2020-01-29 05:43:03.567830 (59h38) >>> Dell R610 PE Server ships from U.S. (Server-A) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [08:20]
auctionbot: S#1078 O=17mn LB=18mn E=2020-01-29 05:43:42.679910 (59h38) >>> Dell R610 PE Server ships from Uruguay (Server-B) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [08:20]
auctionbot: — end of auction list, 18mn total bids — [08:20]
auctionbot: S#1077 O=17mn LB=None E=2020-01-29 05:43:03.567830 (54h38) >>> Dell R610 PE Server ships from U.S. (Server-A) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [13:20]
auctionbot: S#1078 O=17mn LB=18mn E=2020-01-29 05:43:42.679910 (54h38) >>> Dell R610 PE Server ships from Uruguay (Server-B) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [13:20]
auctionbot: — end of auction list, 18mn total bids — [13:20]
mircea_popescu: gah, devoicing doesn't even do anything here, does it [14:59]
lobbes: mircea_popescu: if you'd like and until I fix the thing, I can bring bot back in here and have it not announce [16:28]
mircea_popescu: lobbes, aite [18:22]
mircea_popescu: ideally just fix it, how long's it take [18:23]
lobbes: mircea_popescu: k I'll just bring it back in here once I've fixed it [23:31]

January 25, 2020

#eulora Logs for 25 Jan 2020

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
auctionbot: S#1077 O=17mn LB=None E=2020-01-29 05:43:03.567830 (88h38) >>> Dell R610 PE Server ships from U.S. (Server-A) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [03:20]
auctionbot: S#1078 O=17mn LB=18mn E=2020-01-29 05:43:42.679910 (88h38) >>> Dell R610 PE Server ships from Uruguay (Server-B) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [03:20]
auctionbot: — end of auction list, 18mn total bids — [03:20]
auctionbot: S#1077 O=17mn LB=None E=2020-01-29 05:43:03.567830 (83h38) >>> Dell R610 PE Server ships from U.S. (Server-A) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [08:20]
auctionbot: S#1078 O=17mn LB=18mn E=2020-01-29 05:43:42.679910 (83h38) >>> Dell R610 PE Server ships from Uruguay (Server-B) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [08:20]
auctionbot: — end of auction list, 18mn total bids — [08:20]
auctionbot: S#1077 O=17mn LB=None E=2020-01-29 05:43:03.567830 (78h38) >>> Dell R610 PE Server ships from U.S. (Server-A) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [13:20]
auctionbot: S#1078 O=17mn LB=18mn E=2020-01-29 05:43:42.679910 (78h38) >>> Dell R610 PE Server ships from Uruguay (Server-B) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [13:20]
auctionbot: — end of auction list, 18mn total bids — [13:20]
auctionbot: S#1077 O=17mn LB=None E=2020-01-29 05:43:03.567830 (73h38) >>> Dell R610 PE Server ships from U.S. (Server-A) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [18:20]
auctionbot: S#1078 O=17mn LB=18mn E=2020-01-29 05:43:42.679910 (73h38) >>> Dell R610 PE Server ships from Uruguay (Server-B) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [18:20]
auctionbot: — end of auction list, 18mn total bids — [18:20]
auctionbot: S#1077 O=17mn LB=None E=2020-01-29 05:43:03.567830 (69h38) >>> Dell R610 PE Server ships from U.S. (Server-A) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [22:20]
auctionbot: S#1078 O=17mn LB=18mn E=2020-01-29 05:43:42.679910 (69h38) >>> Dell R610 PE Server ships from Uruguay (Server-B) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [22:20]
auctionbot: — end of auction list, 18mn total bids — [22:20]

January 24, 2020

#eulora Logs for 24 Jan 2020

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
auctionbot: S#1077 O=17mn LB=None E=2020-01-29 05:43:03.567830 (112h38) >>> Dell R610 PE Server ships from U.S. (Server-A) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [03:19]
auctionbot: S#1078 O=17mn LB=18mn E=2020-01-29 05:43:42.679910 (112h38) >>> Dell R610 PE Server ships from Uruguay (Server-B) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [03:19]
auctionbot: — end of auction list, 18mn total bids — [03:19]
auctionbot: S#1077 O=17mn LB=None E=2020-01-29 05:43:03.567830 (107h38) >>> Dell R610 PE Server ships from U.S. (Server-A) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [08:19]
auctionbot: S#1078 O=17mn LB=18mn E=2020-01-29 05:43:42.679910 (107h38) >>> Dell R610 PE Server ships from Uruguay (Server-B) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [08:19]
auctionbot: — end of auction list, 18mn total bids — [08:19]
auctionbot: S#1077 O=17mn LB=None E=2020-01-29 05:43:03.567830 (102h38) >>> Dell R610 PE Server ships from U.S. (Server-A) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [13:19]
auctionbot: S#1078 O=17mn LB=18mn E=2020-01-29 05:43:42.679910 (102h38) >>> Dell R610 PE Server ships from Uruguay (Server-B) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [13:19]
auctionbot: — end of auction list, 18mn total bids — [13:19]
auctionbot: S#1077 O=17mn LB=None E=2020-01-29 05:43:03.567830 (97h38) >>> Dell R610 PE Server ships from U.S. (Server-A) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [18:19]
auctionbot: S#1078 O=17mn LB=18mn E=2020-01-29 05:43:42.679910 (97h38) >>> Dell R610 PE Server ships from Uruguay (Server-B) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [18:20]
auctionbot: — end of auction list, 18mn total bids — [18:20]
auctionbot: S#1077 O=17mn LB=None E=2020-01-29 05:43:03.567830 (93h38) >>> Dell R610 PE Server ships from U.S. (Server-A) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [22:19]
auctionbot: S#1078 O=17mn LB=18mn E=2020-01-29 05:43:42.679910 (93h38) >>> Dell R610 PE Server ships from Uruguay (Server-B) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [22:20]
auctionbot: — end of auction list, 18mn total bids — [22:20]

January 23, 2020

#eulora Logs for 23 Jan 2020

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
auctionbot: S#1077 O=17mn LB=None E=2020-01-29 05:43:03.567830 (136h38) >>> Dell R610 PE Server ships from U.S. (Server-A) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [03:19]
auctionbot: S#1078 O=17mn LB=18mn E=2020-01-29 05:43:42.679910 (136h38) >>> Dell R610 PE Server ships from Uruguay (Server-B) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [03:19]
auctionbot: — end of auction list, 18mn total bids — [03:19]
diana_coman: got it and working on answering it (it's already > 500 words! that used to count for an article by itself, ha.) [06:40]
diana_coman: mircea_popescu: answered http://ossasepia.com/2020/01/21/de-facto-data-somethings-in-euloras-client/#comment-7435 [07:59]
auctionbot: S#1077 O=17mn LB=None E=2020-01-29 05:43:03.567830 (131h38) >>> Dell R610 PE Server ships from U.S. (Server-A) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [08:19]
auctionbot: S#1078 O=17mn LB=18mn E=2020-01-29 05:43:42.679910 (131h38) >>> Dell R610 PE Server ships from Uruguay (Server-B) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [08:19]
auctionbot: — end of auction list, 18mn total bids — [08:19]
feedbot: http://trilema.com/2020/get-back-to-me/ << Trilema S.MG — Get back to me… [13:00]
auctionbot: S#1077 O=17mn LB=None E=2020-01-29 05:43:03.567830 (126h38) >>> Dell R610 PE Server ships from U.S. (Server-A) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [13:19]
auctionbot: S#1078 O=17mn LB=18mn E=2020-01-29 05:43:42.679910 (126h38) >>> Dell R610 PE Server ships from Uruguay (Server-B) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [13:19]
auctionbot: — end of auction list, 18mn total bids — [13:19]
auctionbot: S#1077 O=17mn LB=None E=2020-01-29 05:43:03.567830 (121h38) >>> Dell R610 PE Server ships from U.S. (Server-A) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [18:19]
auctionbot: S#1078 O=17mn LB=18mn E=2020-01-29 05:43:42.679910 (121h38) >>> Dell R610 PE Server ships from Uruguay (Server-B) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [18:19]
auctionbot: — end of auction list, 18mn total bids — [18:19]
auctionbot: S#1077 O=17mn LB=None E=2020-01-29 05:43:03.567830 (117h38) >>> Dell R610 PE Server ships from U.S. (Server-A) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [22:19]
auctionbot: S#1078 O=17mn LB=18mn E=2020-01-29 05:43:42.679910 (117h38) >>> Dell R610 PE Server ships from Uruguay (Server-B) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [22:19]
auctionbot: — end of auction list, 18mn total bids — [22:19]

January 22, 2020

#eulora Logs for 22 Jan 2020

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
auctionbot: S#1077 O=17mn LB=None E=2020-01-29 05:43:03.567830 (160h38) >>> Dell R610 PE Server ships from U.S. (Server-A) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [03:19]
auctionbot: S#1078 O=17mn LB=18mn E=2020-01-29 05:43:42.679910 (160h38) >>> Dell R610 PE Server ships from Uruguay (Server-B) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [03:19]
auctionbot: — end of auction list, 18mn total bids — [03:19]
auctionbot: S#1077 O=17mn LB=None E=2020-01-29 05:43:03.567830 (155h38) >>> Dell R610 PE Server ships from U.S. (Server-A) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [08:19]
auctionbot: S#1078 O=17mn LB=18mn E=2020-01-29 05:43:42.679910 (155h38) >>> Dell R610 PE Server ships from Uruguay (Server-B) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [08:19]
auctionbot: — end of auction list, 18mn total bids — [08:19]
diana_coman: mircea_popescu: I got out that article on de facto data model in client; is there something else I should add to the pipeline on client side atm? [09:23]
diana_coman: otherwise I'll move on to setting down properly the server part too; (that will not get a public write up though). [09:23]
mircea_popescu: i saw yets, didn't get a chance to finish just yet. will today, get back to you. [09:28]
mircea_popescu: finishing article, then going to the lawyers, and ~then~ [09:28]
diana_coman: cool, no rush; plenty to do anyway, not like I ever manage to run out of things to do. [09:31]
auctionbot: S#1077 O=17mn LB=None E=2020-01-29 05:43:03.567830 (150h38) >>> Dell R610 PE Server ships from U.S. (Server-A) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [13:19]
auctionbot: S#1078 O=17mn LB=18mn E=2020-01-29 05:43:42.679910 (150h38) >>> Dell R610 PE Server ships from Uruguay (Server-B) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [13:19]
auctionbot: — end of auction list, 18mn total bids — [13:19]
auctionbot: S#1077 O=17mn LB=None E=2020-01-29 05:43:03.567830 (145h38) >>> Dell R610 PE Server ships from U.S. (Server-A) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [18:19]
auctionbot: S#1078 O=17mn LB=18mn E=2020-01-29 05:43:42.679910 (145h38) >>> Dell R610 PE Server ships from Uruguay (Server-B) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [18:19]
auctionbot: — end of auction list, 18mn total bids — [18:19]
mircea_popescu: lobbes, why is it talking over itself ? [18:30]
lobbes: mircea_popescu: this was a bit of regression after rewriting bot from lobbesbot to auctionbot; I neglected to re-code in the "check if spoken previously before announcing" piece. I will put this on my list to fix [19:28]
mircea_popescu: k [19:28]
mircea_popescu: diana_coman, answered! [20:38]
auctionbot: S#1077 O=17mn LB=None E=2020-01-29 05:43:03.567830 (141h38) >>> Dell R610 PE Server ships from U.S. (Server-A) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [22:19]
auctionbot: S#1078 O=17mn LB=18mn E=2020-01-29 05:43:42.679910 (141h38) >>> Dell R610 PE Server ships from Uruguay (Server-B) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [22:19]
auctionbot: — end of auction list, 18mn total bids — [22:19]

January 21, 2020

De Facto Data Somethings in Eulora’s Client

Filed under: Coding,Eulora — Diana Coman @ 7:21 pm

There was a rather important question asked only recently in #eulora:

mircea_popescu: inasmuch as we do have a ~de facto~ data model, the gap must be bridged. “why aren’t you using what you are already using again ?”

To answer the above, I went and extracted what and how can be found currently in the full client and its dependencies code, to have it all clearly in view for once. The report of that investigation is below in quite a lot of detail but that detail means also about 5k words in total, so here’s directly the conclusion of it all namely the answer I can now give to that important question above:

  1. The de facto data model is not really one data model at all but overall as it stands more of a confused mix of several formats, approaches and accidental structures of all sorts, all wrapped up and intertwined together into one single large pile of code with fundamental assumptions that are the exact opposite 1 of those of S.MG and that requires a lot of effort for the smallest adaptation to new/different requirements, working otherwise mainly for as long as it is used precisely as it stands.
  2. The thick layer of PS on top of the comparatively saner CS and Cal3D core makes access to and use of CS/Cal3D data models directly especially difficult/effort intensive because everything is built quite on purpose precisely to avoid such use. Moreover, the overall de facto data model such as it is has as fundamental assumption that *all* assets are known upfront with no new knowledge/assets ever added during runtime. Consequently, there is a significant tension between the de facto model and the desired model since the focus of ~everything in the current client is on handling local loading of potentially large but fully known upfront lists of assets while the desired model is instead meant for transmission and/or discovery and loading of new assets as an ongoing concern as the code runs.
  3. At the core of the current client (hence in CS and Cal3D essentially) there are some clearly defined data models and formats, most notably Cal3D’s file formats and CS’s internal data models (that pack however shaders and shader variables into materials as standard) as well as some basic file formats used otherwise such as .png, .dds, .ogg or .wav. However, none of those different sets cover *everything* that is needed, meaning that they can only provide perhaps a *part* of that desired definitive universal data model. The rest can be – it would seem to me as a result of the detailed investigation below – extracted/synthesised out of what CS allows but using it as a universal data model is problematic with the existing client because of the PS layer on top that would require significant effort to turn around from hiding/making direct access difficult to using it directly when and where desired.
  4. Making the best of it all, here’s a proposed list with the parts for which there is at least some clear format already (if not necessarily easy to use in the desired manner with the existing client such as it stands otherwise) and the parts on which a format would need to be decided on/extracted out of various options, fallbacks and CS’s own API even:
    1. Characters (animated mesh objects): Cal3D’s formats, ideally the binary set (as they are more compact); this means: .csf (skeleton), .caf (skeleton-based animation), .cpf (morphanimation), .cmf (mesh), .crf (material) + raster images for the textures that are referenced by filename from .crf; the preference for the texture format would be .dds files with size as power of 2 as CS otherwise performs the calculations needed to bring anything to the equivalent of that anyway; alternatively, CS compiled with the usual set of plugins supports a variety of usual image formats including .png, .jpg, .gif.
    2. Items/Structures (non-animated mesh objects): the options here would be to either force the use of the same .cmf from Cal3D’s set above (the trouble with this being that it assumes the presence of a skeleton/bones, which is not going to fit well with items/structures and moreover it will require some conversion for use with the current client even beyond the PS layer, namely to fit the internal CS non-Cal3D mesh) or otherwise extract and define a format based on CS’s internal representation/specification of a mesh (this is essentially a plain and long enummeration of all vertices, triangles that make up the surfaces and submeshes if any).
    3. Terrain: there is no clear format for this; the de facto “model” relying on CS’s Terrain2 plugin seems to require simply a bunch of image files for heightmap, material palette, base material and alpha as a minimum, using at all times some of CS’s predefined shaders for terrain. PS reads/expects those packaged via an .xml file that matches image files to their role for the terrain so either such .xml specification is imported as part of the format or that part of the client (the loader essentially) has to be adapted/changed.
    4. Particle systems: there is no format or specific model currently available; in principle it could be extracted based on the concrete set of parameters required by CS’s way of specifying existing particle systems (hence, a specification of emitter and effector parameters) but it’s unclear just how powerful such a model would really be as there are only a few types of particle systems implemented in CS and each of them tends to have its own specific parameters too.
    5. Light sources: there is no format or specific model currently available; extracting it from CS’s internal representation provides at least a relatively simple set of characteristics so this could be perhaps done as such.
    6. Ambiental light and fog/air effects: there is no format or specific model currently available; de facto, ambiental light values as well as fog and air effects (mostly weather-related) are currently scattered through several .xml files that are mainly PS’s: some values for ambiental and fog are given in the world.xml file (art/world.zip) while hour by hour values for ambiental and rain are given in a different .xml file for a full day and the client expects them as such. The more reasonable approach here is to simply keep those as sets of rgb(a) values rather than force-define anything more complex than that.
    7. Effects: there is no format or specific model currently available; CS does not treat this as a separate category as such; PS on the other hand has a de facto .xml format for defining effects attached to items but there is no clear specification for it and existing samples focus mainly on defining essentially animations of sorts. Perhaps this can be skipped entirely as nothing different from particle systems and/or sound and/or some specific animation defined through the corresponding formats.
    8. Materials: .crf (Cal3D’s format); this will require though some conversion to use with the current client even beyond the PS layer, since it is not a direct fit to CS’s internal data model for materials. Moreover, using this format will fail to take advantage of some of CS’s techniques for materials such as using animated textures (literally changing a set of textures in the render buffer so the result is an animated surface). Arguably such effects though will have to be obtained by other means if desired by any specific client.
    9. Textures: raster images with sizes as power of 2, preferably .dds format but possibly supporting a wider set including png, tga, bmp, jpg, dds, gif, mng, jng. NB: there is no provision or format available for any procedural texture generation in this case (CS provides procedural texture generation implementations for water, fire, plasma and dots).
    10. Icons/2D/GUI decorations: same as textures above. Basically any image can be used as either icon or texture at any time anyway. NB: there is no provision currently for using any vectorial representation directly.
    11. Sound: .ogg and .wav files.
    12. GUI/Skin: this is currently specific to PS and as such perhaps the “model” can simply be a .zip file that contains whatever files and everything else a specific client requires to skin its GUI entirely. This would be the only option I see to provide this too along the rest without making it either dependent on the current client implementation (hence PAWS in particular) as such or otherwise truly the protocol/server’s concern since it’s strictly a matter for the client to decide on, in my view.

Overall the parts and formats listed above focus on the assets themselves and entirely avoid the specification of function and structure that is currently de facto done via .xml files. The following section provides a more detailed look at how things happen with the currently deployed client.


Current Client Situation

While the de facto data formats in Eulora have been investigated previously and in quite some detail too, the focus was at the time on understanding the whole thing well enough to be able to extract out of it the useful and – hopefully – discard all the useless and the worse-than-useless currently bundled up with it. The attempt failed though, despite the progress made in that vein. So here I am taking stock of the various parts of the swamps I am stuck with, for lack of having anything better – meaning something that actually fully works – to take stock of, how lovely 2. Anyways, them being the swamps is no excuse for not having otherwise a clear picture of what’s in there, so I’ll aim to bring the clarity even to an inventory of mud, what else is there to do anyway.

To start with and for an initial top-level, orienting view, note that there are effectively at least 3 (three!) layers of “formats” weaved and intertwined in the current client, from bottom up:

  1. Formats supported by the various external libs and plugins that CS 3 uses. Those are usually standard formats such as .png and .jpg for images for instance, .ogg for sound or .caf (Cal3D’s format) for animations. Note that the full list of those is not really a fixed thing since it *depends* on what components you have on your system and include/compile with the whole client! Moreover, *none* of the different plugins provides a single set of formats that would cover *fully* all assets or even all graphical assets so one can’t just pick from there a single set and be done with it.
  2. Formats defined/imposed by CS. Those can be further split into internal and external (to the engine code as such). The internal formats are most relevant for textures, materials and meshes since they fix a certain data model and requirements for defining and working with those (see below for the more detailed descriptions). The external formats are based on xml but with specific tags, restrictions/rules and parsers for things such as “shaders” or scene/world/object definition in standalone – and at times or to some extent hardcoded even – files that CS knows how to work with.
  3. Formats defined/imposed by PS 4. Those are yet another set of xml-based “formats” 5, this time aiming – as far as anyone can tell by looking at the gnarly result – to provide the way to list and describe existing assets of the game, from 2D icons to 3D meshes and GUI widgets (windows in game).

Given that the original goal was to arrive at a clear definition of a definitive 6 universal data model, I’ll focus on the “clear” and therefore use the above three neat layers to structure the whole discussion of the de facto formats and emerging “model”. The alternative would be to follow closely and describe exactly just “how the client currently works” but that results quickly 7 in a quite predictable muddle (given the de facto muddle it reflects), so not much use for clarifying anything or for answering any question. To state it plainly though: I’m aiming to structure the text for clarity but not by glossing over any gross details – my aim is to mention such muddy details where they are relevant but to not let them drive my text even if they do get to drive the legacy code in quite a few places.

Before diving into the concrete details and exact formats currently in use on client side for all sorts, it’s worth noting a few fundamental characteristics of CS that drive quite a lot of the whole de facto model such as it is:

  1. The focus is on supporting – somehow and to a best effort level essentially – a generic and not that well defined everything. The main implication of this is lack of clarity and added complexity of all sorts: there isn’t a clear single data format and model as such but at most a generic structure (most notably at the way materials are defined and implemented to include specific reliance on predefined shader types and variables) that still ends up forcing some choices, only not fully supporting them either (since that would break the appearance of supporting everything); there are always rather intricate fallback and alternative mechanisms at all levels from type of rendering (software vs hardware and then depending on what operations are supported by different types of hardware) to high-level object or scene definition (e.g. from code or through xml).
  2. XML is used (and pushed) extensively for a double – if never explicitly stated as such – purpose:
    1. to describe the structure and organisation of sets of assets on disk (all sorts, including but not limited to graphics) for a CS application. Sets of graphics/sound/UI assets are called “library” in CS parlance, for all their xml-only definition.
    2. to script from outside the CS application all sorts, from rendering steps (in definitions of shaders) to scenes, objects and even actions in the world (in definitions of sectors, meshes, triggers, sequences and portals). Especially for shaders, this gets quite intricate, it’s a sort of ad-hoc xml-based programming language, no 2 ways around it.

    Note that the scripting purpose of xml above goes well beyond mere description of structure and organisation or even statement of the purpose/use of things in there. To try and give an idea of this, the xml code at CS level is quite overgrown and does a lot of things, including but not limited to customising existing objects, describing how to create new objects out of existing assets, setting out what and where things are to be found in the world, calling and otherwise using (therefore fixing as requirements) specific plugins or parts of CS, defining new rendering sequences or even buffer contents and prescribing steps and parameters of all sorts for them.

    The saving grace of all the above is that most – though unfortunately not ALL – of it can still be done directly from code as well, without a lot of trouble. So in this sense, the xml reliance pushed by CS is more of an option than a mandatory part to deal with. Nevertheless, there is one significant part of this xml reliance that is deeply embedded and does not really have a clear code-only/no-xml alternative, making it more of a mandatory part than an option: the shaders which are fully described *only* through a spaghetti of xml files that rely on parts and “snippets” from one another, provide fallback or alternative to one another and otherwise end up hardcoded as part of the very definition of a material and at times of crucial plugins (the terrain generator for instance) in the CS engine.

  3. All identifiers (including those of assets loaded/created in the engine) are strings – combined with CPP’s own specific brand of string-problems (most notably the null terminator that may or may not exist and the allocate/deallocate memory dance), this is a pain. The approach of CS/PS to avoid the pain is by having everything rely on CS’s implementation of csString as a utility that takes care of the gritty details of using strings in CPP. Furthermore, there are several hashmaps used to map those cumbersome string ids to saner numerical values but those of the engine itself are not directly exposed. Adding to this, CS provides a way to “attach” data to any object so one could in principle add a numerical id but there is little gain from that since all searches for objects still rely on the string “id”.
  4. There is an implicit assumption that all assets and the game’s world are fully known and defined upfront as well as outside the code itself. The programmatic option – as much as it exists – ends up overall underdeveloped in comparison to the xml support for the fixed, outside of code definition of everything.

The above fundamental characteristics of CS get pushed even further at the PS level on top: the fallbacks and “support everything but don’t commit to anything in specific” are pushed even on to graphics preferences and configuration files (of which there are several types and several layers); the xml gets added functionality as means to describe appearance of widgets (windows) in the client’s interface while still relying on even more hardcoded paths/names both in the xml itself (which references resources as it expects them to exist) and in the code (which looks for various xml files by name and path (if at least the path is relative to some directory as defined in the VFS – virtual file system – configuration); the expected full upfront knowledge of everything that may exist in the world gets cemented by PS: there is virtually no programmatic creation of anything and instead, everything is both supposed to be described in external xml files (+ referenced graphics/sound/effects files) and otherwise known and loaded before the game can even start at all. Essentially the PS client chooses at most what to show to the human player at one time or another out of its otherwise full knowledge of what’s possible and what not 8. Things can get at most cloned or deleted, hence the player may encounter “in the game” something that seems “new” to them only if they really didn’t look in the client’s directory as otherwise everything’s already there as long as it has some sort of asset-based representation at all.

Leaving aside for now the above characteristics of CS and their various implications, here’s otherwise the structure such as it is of the de facto data model at the core of the engine itself, from top down:

  • the whole world is made of “sectors” that may be split into “regions” and contain any number of “sources of light”, “effects” and “mesh objects”;
  • sectors are connected to one another through “portals” (that are really just a special type of mesh objects);
  • sources of light do not have geometry and are defined instead through a set of functional characteristics, they are basically ideal lights that can be tweaked to some extent (see below for full list of characteristics);
  • effects include particle systems as well as sequences (a set of operations tagged with relative time so that they get executed in a sequence);
  • mesh objects can contain in turn other mesh objects (in a hierarchical structure) and are defined ultimately through their geometry (aka vertices and triangles) combined with assigned materials that describe the surface appearance and, where relevant, skeleton-based animation (CS supports animation through either its own sprite class or the external Cal3D lib);
  • materials are in turn made out of one or several textures combined with any number of shaders and parametrised through specific values assigned to variables from a predefined set;
  • shaders are defined via xml only and contain instructions for the rendering of the material data, introducing further their own variables, parameters and dependencies on other shaders;
  • textures are the most basic element and they are either directly a colour represented through the three components, red, green and blue or otherwise an image file that is meant to be of a power of 2 in size (with the exact list of supported formats depending on which plugins are linked with CS on any specific install). There is also a limited selection of procedural approaches that can be in principle applied to any texture, namely for fire, water, dots and plasma appearance. Confusingly though, CS still wraps all textures into a default “material” so despite loading textures, it’s always materials one gets to work with from the code. Moreover, further tweaks such as animating textures are done through render buffers and as such essentially through shader code, whether it gets written as a separate xml-based shader specification or otherwise implemented directly in the code.

Adding more concrete details to the above overall description:

1. Sector – this is an abstract type (it does NOT define by itself any geometry and as such it does not have dimensions or position or anything of the sort) that works as a way of grouping together a set of assets for rendering purpose (overall rendering characteristics are defined at this top level, including ambiental light characteristics, some air effects such as fog, overall sources of light if any and specific choices of visibility culler and collision detection system). Everything that is shown/heard as part of the game has to be contained in a sector and at any given time there is only one sector that is fully visible. Characters may be in more than one sector at a time but only temporary and as part of the way in which crossings happen from one sector to another, namely through “portals”. At CS level, everything in a sector and all properties of a sector can be changed in principle on the fly from the code although some changes may incur a significant computational cost (e.g. changes to dynamic lights that should trigger a recalculation of lightmaps).

While the above is given by CS, the current client PS implementation adds its own layer of complexity on top: the current code requires that all possible sectors are already defined in an xml file that it expects to find in /art/world.zip (this path may be changed but not on the fly, only from one of the many configuration files). Moreover, it also expects that it knows everything upfront about all sectors and that all sectors reference only assets/items/anythings that it already knows about (from other hardcoded xml files that serve basically as inventories and/or definitions of different types of assets). Finally, there’s the added hardcoded dependency of some of the GUI on some sectors and graphical assets (most notably the requirement for the “podium” sector that is used to display the character’s smaller version in the inventory window and/or at the initial character selection). Note also that PS’s current client implementation makes it very hard to actually change anything on the fly from the code since it quite specifically assumes that things do not change – they may be copied or otherwise not shown on screen or even not fully loaded into memory at one time or another but otherwise not really changing much.

1.1 Region – this is yet another abstract type, basically providing a way to split a sector into smaller chunks of contained objects (of all sorts, so not only physical objects) if desired; the main reason for this to exist at all seems to be the fact that the assumption of knowing everything upfront can result otherwise in “too much to load at a time” and this got solved by allowing the split of sectors into regions 9.

Here PS adds a whole layer that keeps track of various regions and “zones”, what should be fully loaded for each and even what specific picture to show the user while the loading is crawling at its own pace. It also handles its own added complexity from the current interaction with the server as some entities may come before their sector/region is fully loaded and so the client has a special sector created as a temporary purgatory for those entities, checking continuously to see when they can finally be moved to some loaded sector/region.

1.2 Light – there is “ambiental light” as an overal property of each Sector, as well as “sources of light” as abstract objects (no geometry) that have nevertheless a position from which the light is considered to be emitted. Ambiental light is defined only through its colour (rgb). Sources of light can be of 3 types: static (do not move and do not change intensity or colour), pseudo-dynamic (do not move but can change intensity or colour), dynamic (can both move and chnage intensity or colour). Each source of light is defined at a minimum through its type (static, pseudo-dynamic or dynamic), position (3 float values), radius (float value) and “diffuse” colour (rgb) that influences as well the intensity of the light coming from this source. Optional characteristics include a second colour (“specular”, rgb), an attenuation mode (none, linear, inverse, realistic, constant linear quadratic) and parameters (3 floats), a cutoff distance (float value) representing the maximum distance at which this light is considered to shine, a halo (flare, nova or cross, with corresponding parameters), falloff inner and outer angles for a spot light (2 float values).

1.3 Fog – this is an overall property of each Sector and is defined through colour (rgb), mode (none, linear, exponential, exponential2, crystalspace), density (float) and fading start/end distance (2 float values).

1.4 Effects – this is my own category really since CS doesn’t bother as such to fully group everything. CS provides a set of particle systems that can be programmatically used. As I discussed those in more detail elsewhere, I won’t repeat that part here. However, it’s worth noting that the current implementation of those particle systems relies on the predefined set of shaders that CS comes with and so they are essentially customisable to some extent through the code rather than fully defined (unless one adds a redefinition of expected shaders too, I suppose).

The current client’s take on effects is again – unsurprisingly – quite entirely reliant on various xml files. There is a hardcoded path art/effects that includes a bunch of .dds files mainly as well as a art/music/effects that includes a bunch of .ogg and .wav files. The paths to those are hardcoded throughout the client where the legacy code “knew” effects should be loaded from. The loaders generally look for an xml file that provides the inventory and tends to attach “resource names” to the physical files. At times, the xml file will also provide items to which effects are “linked” and the legacy PS code keeps effects in an array with references to the intended items. Even this de facto “model” is not all that respected really since there is at least one place where the “rain effect” is simply directly hardcoded as a texture to be loaded from the hardcoded path to the .dds file (see src/client/weather.cpp: const char* rainTex = psengine->GetConfig()->GetStr(“PlaneShift.Effects.Rain.Texture”, “/this/art/effects/raindrop.dds”);).

In addition to the above, PS also adds its own plugin for loading effects defined in xml files as illustrated in data/effects. The full format for those is not clearly defined anywhere and currently I haven’t fully investigated it either as it’s not directly in use. At any rate, the .eff xml files defining the effects contain also the definition of needed textures and materials based on the .dds files included next to the xml. The rest of the .eff file seems to define an object type to which the effect is to be attached and otherwise keyframes so essentially yet another sort of animation format done ad-hoc in xml.

1.5 Mesh Objects – from CS’s point of view, anything that has geometry at all is a mesh object. The main categories of mesh objects that I can discern are terrain, characters (moving) and items/structures (non-moving). For each of those, CS allows in principle any concrete implementation and inner data model to be used, as long as the corresponding SCF 10 interface is provided. In practice though, the existing client uses the Terrain2 plugin for terrain, the Cal3D plugin for characters and CS’s native basic mesh for items/structures. Note however that all of those are wrapped up in a few layers of PS obfuscation, most notably through the GEMObject hierarchy and psCelClient + psEntity classes. The GEMObject hierarchy is a core element of the current client too and as such it’s not trivial to either change or remove. Getting directly and using CS’s interface from the existing client is not straightforward at all because the PS layer works precisely and purposefully to insulate away from touching CS directly. Nothing is impossible, of course, but whatever clarity there is at CS level needs to be considered through the murky and intertwined layers of PS on top as things currently stand.

1.5.1 Terrain (from Terrain2 plugin) – at CS level, this requires as a minimum a heightmap file, a material map file and a material palette (aka several full material definitions including their texture(s), shader(s) and shader variable(s)). The CS Terrain2 plugin is directly linked to some specific shaders that handle the splatting and seem to further require – for better appearance – at least an alphamap of the whole terrain. The current PS implementation relies on XML to define the terrain too and expects as usual that everything – including all possible terrains and maps and even the pattern of sunlight throughout the various hours of the day! – is known and fully loadable upfront.

1.5.2 Characters (from Cal3d plugin) – when the Cal3d plugin is used, there is an XML description required (mainly by the PS layer since CS can otherwise simply do it from the code directly) that specifies the relevant Cal3D files for any given character. Those Cal3D files come in 5 main formats (the formats mentioned below are binary formats; they all have equivalent xml formats as well – those are directly readable but otherwise more bulky, of course):

  1. Skeleton file, .csf – this lists the hierarchy of bones that make up the character’s skeleton. Each character is supposed to have at least one bone.
  2. Animation file, .caf – this defines the pose of the character at each keyframe (the animation will interpolate the pose between those keyframes). Keyframes are further grouped by tracks with one track per animated bone and have to include the time, the relative position and the relative rotation with respect to the parent bone (if .caf file).
  3. Meshanimation file, .cpf – this is meant for changes in expression for instance or more generally animation of meshes/submeshes without relying on /requiring bone movement as such. Note that this format is mentioned in the Cal3D docs, but it is not currently in use at all and it’s unclear how well it is actually even supported otherwise (to establish this, I’d need to investigate in more detail both Cal3D itself and the CS plugin for Cal3D).
  4. Mesh file, .cmf – this describes in detail the mesh as a hierarchy of submeshes and with references to materials in use as well as the weighted influences of the bones on each vertex. This would also include morphtargets if the .cpf format is used for additional animation(s).
  5. Material file, .crf – this describes a material through its ambient, diffuse and specular colours (each given through 4 values for red, green, blue and alpha respectively), its shininess (a float) and a number of textures that have String identifiers (those can be filenames but can equally well be anything else really).

1.5.3 Items/structures (from native CS’s mesh) – the de facto format for those follows closely CS’s internal data model of mesh objects: each mesh object can contain submeshes in a hierarchical organisation; each mesh/submesh is defined through its geometry (as an enumeration of vertices and triangles made with those vertices) and attached materials that are in turn defined through textures, shaders and specific values for any shader variables used. Textures themselves are raster images with .dds as preferred format of CS (as other formats such as .png or .jpg effectively incur a penalty although at this point it’s unclear what this penalty adds up to in real terms). CS allows the creation and definition of meshes either as tedious enumerations of everything or through a few limited generators that tend to rely on regular shapes (e.g. spheres and cones). Both of those can be directly called from code or otherwise wrapped up in xml and “loaded” from code.

As everywhere else, the current client relies on xml for the definition of all possible types of meshes. It loads mesh definitions from the xml files in art/meshes.zip and expects that all entities ever required /encountered for the whole duration of the game reference one or several of the meshes in that archive. In turn, the xml in meshes.zip references of course materials that are -all of them!- expected to be found in art/materials.zip and are defined as such in art/materials.zip/materials.cslib xml file. The materials.cslib xml file first lists an inventory of textures (assigning a “name” id for each image file in the archive basically) and then defines various materials that make use of those textures and/or specify various shaders and corresponding values for the relevant shader variables. As usual, the shaders are simply referenced by name and assumed to exist as expected under that name, basically making art/materials.zip dependent implicitly on the whole contents of data/shader (and through that, further on to data/shader-snippets and data/renderlayers at the very least).

1.6 Sound
For sound, CS simply relies on external plugins for handling a few standard formats, most notably .ogg and .wav (apparently there are some .spx files too in data/voice but I haven’t seen them in use from anywhere within the current client’s code). PS adds on top of this a soundmanager that is intertwined with a whole bunch of code otherwise so getting to the heart of the simple matter of playing one sound file from the current client can be surprisingly messy. Still, from the point of view of data formats here, things are quite simple since not even PS managed to do much about sound files being simply .ogg, there is that.

1.7 GUI and icons

With respect to GUI and more generally any icons shown in game (so any 2D representations really, such as items in the inventory for instance), CS relies on external plugins. In principle there is CEGUI supported but the currently deployed client does not use that one, relying instead on PS’s own PAWS. Both CEGUI and PAWS share a design of GUI as a set of widgets but other than that I didn’t investigate CEGUI any further since the current client is rather deeply intertwined with PAWS. Consequently, the de facto data model for GUI is more of a reflection of what PAWS expects rather than anything else: art/skins contains .zip files that provide any number of .png images in whatever hierarchy of directory one sees fit, together with an imagelist.xml file that provides effectively the inventory, assigning a “resource name” to which file and listing the relative path to it. Note that this imagelist.xml as well as the art/skins location are both hardcoded in the current client. Moreover, the imagelist.xml is meant to be the full list of all possible icons and GUI elements in the game and known when the client starts since it’s all a pre-requisite of even creating the GUI widgets at all.

Besides the above, there’s another part to GUI, since the PS client further expects xml to be used (in data/gui) to define each and every window that can ever be shown by the client. Those make use of resources by name and as such are inevitably -and implicitly- dependent on the contents of art/skin. Moreover, some of the current code goes as far as referencing directly and hardcodedly resources from that same art/skin (most notably the mouse pointer icon). Not sure where exactly should this go into a “definition of the de facto data model” but there it is.

A rather funny part of the xml reference by name of various resources is that font resources (data/ttf currently) get the same treatment and the xml widget definitions that dully specify – thus fixing too! – their favourite fonts by name again. Then the legacy PS code also hardcodes a font as default in quite a few places and rather central to the GUI places at that (src/common/effects/pseffectobjtext.cpp and pseffectobjtext2d.cpp in the same place; src/common/paws/pawswidget.cpp and src/client/gui/psmainwidget.cpp), specifying the exact “data/ttf/reteprelieum.ttf” path as well. Except the actual file in data/ttf is called “reteprelleum” rather than the hardcoded “reteprelieum” and so errors are thrown and whatever else gets used instead for all the usefulness of that careful hardcoding of one font in that many places. Are you laughing yet?

  1. In particular fixed, finite and fully known upfront world and assets vs flexible, infinite and continuously discovered world and assets.[]
  2. Isn’t this what you always thought “choice” meant in practice, namely choosing between the inexistent and the impalatable? No?[]
  3. CrystalSpace[]
  4. Planeshift, the ancestor of the current client’s code, such as it is.[]
  5. More like accidents than formats.[]
  6. Let me add here the very clear and useful definition of this definitive: mircea_popescu: it’s definitive in the sense death&damnation is definitive, not in the sense mathematics is definitive.[]
  7. Yeah, I tried it out, I have the draft to show for it. And it was even a good rant really but not exactly serving the purpose it was meant to serve, so I discarded it anyway.[]
  8. It does sound like an interesting choice when set out this way, doesn’t it? The code you run on your own machine is meant to know more than you, to choose what to show you at one time or another and even to specifically thwart any attempts – cheater! – to get to know more than it decides to share with you.[]
  9. There is also “Collection” as yet another way of grouping resources based on whatever reason the programmer may come up with but this is not used by the current client at all so I won’t go into detail on it.[]
  10. Shared Class Facility[]

#eulora Logs for 21 Jan 2020

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
auctionbot: S#1077 O=17mn LB=None E=2020-01-29 05:43:03.567830 (184h38) >>> Dell R610 PE Server ships from U.S. (Server-A) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [03:19]
auctionbot: S#1078 O=17mn LB=18mn E=2020-01-29 05:43:42.679910 (184h38) >>> Dell R610 PE Server ships from Uruguay (Server-B) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [03:19]
auctionbot: — end of auction list, 18mn total bids — [03:19]
auctionbot: S#1077 O=17mn LB=None E=2020-01-29 05:43:03.567830 (179h38) >>> Dell R610 PE Server ships from U.S. (Server-A) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [08:19]
auctionbot: S#1078 O=17mn LB=18mn E=2020-01-29 05:43:42.679910 (179h38) >>> Dell R610 PE Server ships from Uruguay (Server-B) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [08:19]
auctionbot: — end of auction list, 18mn total bids — [08:19]
mircea_popescu: diana_coman, that worx. [09:03]
auctionbot: S#1077 O=17mn LB=None E=2020-01-29 05:43:03.567830 (174h38) >>> Dell R610 PE Server ships from U.S. (Server-A) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [13:19]
auctionbot: S#1078 O=17mn LB=18mn E=2020-01-29 05:43:42.679910 (174h38) >>> Dell R610 PE Server ships from Uruguay (Server-B) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [13:19]
auctionbot: — end of auction list, 18mn total bids — [13:19]
feedbot: http://ossasepia.com/2020/01/21/de-facto-data-somethings-in-euloras-client/ << Ossa Sepia — De Facto Data Somethings in Eulora's Client [15:38]
auctionbot: S#1077 O=17mn LB=None E=2020-01-29 05:43:03.567830 (169h38) >>> Dell R610 PE Server ships from U.S. (Server-A) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [18:19]
auctionbot: S#1078 O=17mn LB=18mn E=2020-01-29 05:43:42.679910 (169h38) >>> Dell R610 PE Server ships from Uruguay (Server-B) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [18:19]
auctionbot: — end of auction list, 18mn total bids — [18:19]
auctionbot: S#1077 O=17mn LB=None E=2020-01-29 05:43:03.567830 (165h38) >>> Dell R610 PE Server ships from U.S. (Server-A) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [22:19]
auctionbot: S#1078 O=17mn LB=18mn E=2020-01-29 05:43:42.679910 (165h38) >>> Dell R610 PE Server ships from Uruguay (Server-B) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [22:19]
auctionbot: — end of auction list, 18mn total bids — [22:19]

January 20, 2020

#eulora Logs for 20 Jan 2020

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
diana_coman: mircea_popescu: as update re de facto data model and all that, I have ~5k words describing the bloody "de facto" more clearly than the reality warrants at any rate; but I still have to add to it the actual conclusion re what and to what extent could be used/useful; I expect I'll be done with it by this Wednesday the latest. [18:15]
auctionbot: S#1077 O=17mn LB=None E=2020-01-29 05:43:03.567830 (189h38) >>> Dell R610 PE Server ships from U.S. (Server-A) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [22:19]
auctionbot: S#1078 O=17mn LB=18mn E=2020-01-29 05:43:42.679910 (189h38) >>> Dell R610 PE Server ships from Uruguay (Server-B) http://blog.mod6.net/2020/01/physical-specifications-for-the-bitcoin-foundations-servers/ [22:19]
auctionbot: — end of auction list, 18mn total bids — [22:19]

January 18, 2020

Moonlit Ideals

Filed under: Conversations,Lyf — Diana Coman @ 10:18 am

~This is a translation to English of an older article of mine that was in turn the translation to blog of an even older – I was about 20 at the time – letter of mine.~

In the light of a late night’s darkness, instead of admiring the stars as more appropriate, we stumbled blindly on a mountain of incompatibility. Perhaps the stars themselves were not what they used to be 1 but we clearly shared the blame for it all since we found nothing better to do under the stars than talking about the ideal world. The problem with two idealists in the moonlight is when they don’t quite agree on the very same ideal.

‘Ideally, there would never be any sort of problems’, you said. ‘Everything would be perfect, round, without faults, without crises, without tumult or tribulations, without needs.’

‘Ideally, all problems we encounter would have wonderful solutions that we find and can put in practice right on time, each and every time.’, I said.

The gaping abyss thus uncovered unexpectedly but quite definitively between us, I just walked away silently that time for there wasn’t anything left to say really. But since you called after me and kept asking for an explanation, it had to be said: you see, I’d have always undermined and resisted your efforts towards sheltering yourself at all costs, even at the very cost of reality itself, as I purposefully looked instead for problems difficult and meaningful enough, hence interesting enough so that their very solving would keep me entertained for years to come.

I always collected solutions looking for their corresponding problem and I collected problems that held within them the seeds of such a wonderful solution that it’s worth it indeed to spend all those years required to make it grow and bear its fruit.

  1. Where are the stars of yesteryear? Well, there, those in the distance![]

#eulora Logs for 18 Jan 2020

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
feedbot: http://ossasepia.com/2020/01/18/moonlit-ideals/ << Ossa Sepia — Moonlit Ideals [06:34]

January 17, 2020

#eulora Logs for 17 Jan 2020

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
diana_coman: yes, we did have that additional downtime too; I guess I'm soon due a "4 years as cto" article too, huh. [04:15]
mircea_popescu: diana_coman, there's this magic at work, whereby the obvious manages to become invisible. in ~theory~ "nobody noticed" what a piece of shit pizarro was because they noticed it plenty, but opted not to say anything out of respect, for me. [08:22]
mircea_popescu: this is a fine and dandy theory, but then again nobody in fact did not notice we, i mean, WE, the republic, nearly obsoleted apache and php in favour of flask and python. [08:23]
mircea_popescu: and the patern continues, we, minigame, nearly obsoleted the whole data thing there discussed above WITHOUT EVEN LOOKING. [08:23]
mircea_popescu: this is a serious political issue, stupid cunts and worthless cucks look at, say, nancy pelosi without immediately repressing her, "go bake some cupcakes somewhere, alienface". [08:24]
mircea_popescu: it is not socially permissible, stupidity must be socially repressed, socialism IS in fact obscene, it can not tolerated at the table, measures must be fucking taken, what the fuck. [08:25]
mircea_popescu: there's zero pushback, generally an' socially, which is how it spreads. [08:25]
mircea_popescu: i am sitting here doubting whether in fact nobody noticed what a piece of shit pizarro was because of respect for me, ie, for a perfectly excusable reason, or because it looked to them just like the female state, which is FUCKING INEXCUSABLE. [08:26]
mircea_popescu: for my sins i didn't provide for a way to discern, but ima sure as fuck taking measures towards this in the future. [08:26]
diana_coman: mircea_popescu: re data formats in existing client, it dawned on me that in fact at least *some* looking I did and even documented, precisely as I was trying to extract something useful out of it; eg http://ossasepia.com/2019/09/14/eulora-client-data-hierarchy-v20/ – this is effectively extracting useful stuff out of "the de facto format" ; it's not complete and did not aim to document as such, but it wasn't "did not even look", no. [08:33]
mircea_popescu: well obviously, i didn't mean it that hard. [08:34]
mircea_popescu: "didn't look", in the context of what "did look" has to mean for the needs of this convo' [08:35]
diana_coman: indeed; and it will get looked at and documented though it might take a bit of digging first. [08:35]
mircea_popescu: myeah [08:36]
mircea_popescu: diana_coman, http://bvt-trace.net/2020/01/re-pbrt/#comment-110 in other news [10:55]
diana_coman: aha, just saw it [10:56]
hanbot: mircea_popescu has kicked asciilifeform from #eulora (asciilifeform) << eh, shouldn't've banned 'im, he'll love it. [12:23]
mircea_popescu: da fuck do i care. [12:33]
mircea_popescu: schmuck spent his entire tenure whining about how he doesn't have a mpex account — carefully omitting to mention HOW the fuck did he end up without. it never was "and then, in spite of seeing the item early, i did not have the common sense to buy a fiddy bucks account, and meanwhile i'm not worth the cost of one wholesale, boots included". [12:36]
ossabot: (trilema) 2019-09-07 mircea_popescu: the matter SIMPLY CAN NOT BE IGNORED : if back in 2017, ie the very month that article came out, joe bloe took out the 20-50k in debt he could and liquidated the 20-50k in assets that he could, converting it to bitcoin at a monthly average k, he'd be looking now at either 400k to 1mn in cold hard cash, or else something like 1-1.5mn worth of liquidated assets, if he sold during the peak. (and not AT the peak, for 1.76mn [12:36]
mircea_popescu: just, you know, magically, "didn't have one". not "fucktardedly eschewed buying the first and properly speaking only thing i should've". [12:36]
diana_coman: doesn't see any problem with anyone's love (+ or – as it may be) anyway [12:37]
mircea_popescu: simultaneously spent entire tenure taking some twisted sort of moronic pride in how he… doesn't play eulora [12:37]
mircea_popescu: let him therefore spend the rest of eternity whining about how "inexplicably" he can't now get one. [12:37]
mircea_popescu: whole fucking thing is eerily reminiscent of that pupkin character, that's what it recalls in my mind's eye : that apoteotic ending of the king of comedy, where they just keep repeating over and over, And now, ladies and gentlemen… the man we've all been waiting for… and waiting for. Would you welcome home please… television's brightest new star… The legendary, inspirat [12:41]
mircea_popescu: ional… the one and only king of comedy… Ladies and gentlemen, Rupert Pupkin! Rupert Pupkin, ladies and gentlemen! Let's hear it for Rupert Pupkin! Wonderful! Rupert Pupkin, ladies and gentlemen! Rupert Pupkin, ladies and gentlemen! Let's hear it for Rupert Pupkin! Wonderful! Rupert Pupkin, ladies and gentlemen!" [12:41]
mircea_popescu: doesn't particularly want to ~do~ anything. just wants to be, and ideally could mommy look at him while he's being ? [12:42]
hanbot: diana_coman not so much a problem as…means of feeding the self-defeating "i'm fine, it's other people that're nuts!!1" (or sure, i guess, ruper pupkin) machine. not of much consequence either way by now, though, i guess. [12:48]
mircea_popescu: the only advantage of the rupert pupkin machine is that it doesn't need food. a discussion of "feeding" in this context is akin to trying to figure out if 8 / 0 is larger or smaller than 7/ 0 [12:49]
diana_coman: hanbot: it feeds itself no matter what you do. [12:50]
diana_coman: as far as I know it, its own circles are its own for a reason; if it took your input in any meaningful way, it wouldn't have been what it is in the first place. [12:52]
hanbot: sure. sometimes one loses sight of established futility for the ghosts of what could've been. [12:52]
hanbot: shrugs [12:52]

January 16, 2020

CrystalSpace: Creating Factories and Meshes, Setting the Client Down

Filed under: Coding,Eulora — Diana Coman @ 2:12 pm

Backtracking on a year’s work of cleaning swamps comes with the added dubious advantage of having even more work to do in order to set down the results such as they are for potential pickup (maybe!) sometime in the near or even not so near future. So I took a few deep breaths, checked the full compilation and versions of everything, read through the main changes all again and unloaded the main gist of it all in a readme file that might come in handy at a later time 1. My initial plan was to pack it all up and let it be really but since I did already the work of disentangling the CrystalSpace (CS) way of programmatically creating the whole map and a lot of the stuff in it, I might as well publish the prototype code as ugly as it is, what can it hurt anyway.

As the freshly baked readme file says, this prototype client is an attempted switch from legacy ps code to:

  1. SMG communication protocol as opposed to PS’s net/messages.h approach. Status: working registration of new account and exchange of Serpent keys for both ways communication + all lower level required functionality of the protocol (e.g. packing/unpacking, encryption/decryption, message types, queues). Existing (in EuCore, which is client’s lib for communication with the server and data acquisition, essentially SMG Comms + data acquisition skeleton) implementation for message types that are fully defined so far: keys management (rsa and serpent packaged messages), file transfer and request.
  2. Compiling with gprbuild (gnat) as opposed to current dependency on jam/ftjam. Status: working for client and eucore lib (though CS not ported to gprbuild) with the caveat that a few plugins haven’t yet been moved to gprbuild as well (mainly because they were anyway slated for removal e.g. bgloader aka PS’s background loader thing).
  3. On the fly loading of graphics (from clientcache/ for now for testing purposes) as opposed to the bgloader plugin delayed loaders that expected the whole WORLD to be known upfront and never changing. Status: removed the original “preloading” and caching of all sorts, as well as the whole “art” dir; existing working prototype loaders 2 integrated into the client code (aka in use) for sectors, factories, meshes of various sorts, textures, materials (including shader variables setting). Some of the prototype loaders test successfully the intended reliance on EuCore (Ada code) for data acquisition as well as on the fly loading of local files from any specified location (as opposed to predefined world.zip file in a set location). No world file needed or used anymore; no preloading/delayed loading (bgloader is not called anymore, nor expected although the code is left in src/plugins/common/bgloader); disabled also the part that was expecting the full list of all art assets including shaders to be known upfront and loaded before even getting into the game at all.
  4. Simplified start of the client meaning getting directly into game + using the EuCore lib (Ada implementation of SMG Comms as well as RSA TMSR, config file reading, key generation, read/write keys to binary files on disk etc). Status: working and tested, quick launch of the game and straight load of the world as known from client’s own local cache; removed dependency on net/ (though the code remains in src/common/net) and working offline client that doesn’t require ping-pong with the server for anything. All attempted communications with the server happens from EuCore only and it’s decided on by EuCore too since it is driven by the data acquisition needs, regardless of the GUI part itself. This version of the client is currently able to run standalone (ie no server really needed anywhere) and it will show a naked char that can be moved around (though none of the animations are loaded so that the char will remain stiff while gliding across the world).
  5. Removed preloading of 2D assets too (the interface itself, hence PAWS). Status: PAWS (widgets and therefore all buttons and windows inside the game) IS working but some windows may not be visible as they are not loaded (they have a LONG and INTRICATE codependency relation going on so it was cut at the root for starters); there is a tested prototype loader for icons (2D) but it’s currently not called from any of the running code (mainly because the issue to sort out first here is related to purging preloaded ideas from PAWS and PAWS windows themselves since currently it all cascades if one tries to load one single window). Notably, the Quit button works (if it’s invisible nevertheless) and the confirmation dialog window is one of the few that actually shows.
  6. Reading of config from Ada and from an .ini file as opposed to Planeshift’s multiple and multi-stratified configs. Status: working and tested for various data types; allows comments as well.

Caveats of this prototype client:

  1. This version will BLOCK (waiting to read from /dev/ttyUSB0) if there’s no FG (or other source of bits) connected and working on /dev/ttyUSB0 – this is because reading from FG is currently BLOCKING as implemented in EuCore lib
  2. The prototype implementations of various effects (e.g. rain, fire, snow) are currently commented out. They work as previously illustrated but I took them out at the moment as I was focusing on figuring out the shaders and their linking with materials and textures.
  3. The look of the terrain (aka the colours really) as well as the looks of various effects seems to depend on the exact environment where the code runs. I had the same code resulting in brown rain as well as nicely twinkling rain, depending on where I ran it. This was not fully investigated mainly for lack of time but it prompted the deeper dig into shaders as apparently the “nicer” aspects are mainly achieved through shader(s) use currently.
  4. The path & names of .bin key files are hardcoded and checked at runtime – depending on which keys are present and which ones are missing, the EuCore lib may try to generate new keys and/or send messages to the server to request an account/registration/etc.
  5. While the .gpr file works to build the client code, the EuCore lib is linked dynamically and has to be built separately (see its own gpr file). Moreover, the .gpr file relies on CRYSTAL and CAL3D environment variables to be set to the locations of CS and Cal3D respectively so it can include their headers as needed. At runtime, LD_LIBRARY_PATH still has to point to CS and Cal3d as well as EuCore’s locations.
  6. There are 3 libs that are not yet ported to gprbuild (mainly as they were either slated for removal or otherwise not yet high enough on the priority list to get done): soundmanager.so, celgraph.so and bgloader.so
  7. The tests for EuCore in eucore/tests have their own project that needs to be built separately.

As to the code, it’s ugly prototypes and messy and all that but anyway, perhaps best to start with the “basic” versions of Getters I wrote for CS’s “factories” of meshes, hoping that I could perhaps simplify a bit the full thing on this side. To understand what I’m talking about here: to create anything at all in CS, you’ll need first the “factory” for that type of thing since the idea is that it’s more efficient this way; which it is, sure, but only if you ever want to create a lot of very-similar-things in the same place like that, which happens ~never and so, as a result, all this does is that ~every thing you create ends up with its additional unique factory too!

Add to the above the maddening fact that CS uses strings – and it’s CPP code so strings are a pain at all times, of course – as IDs for everything so you have to search for factories as well as for objects by their *name*. Oh, and each factory is created through a call that requires also the *name* of the SCF plugin that provides the type of… factory you are after. Think of it: since you have factories to create “same sort of” objects, it follows that the factories themselves represent already types of objects, right? Sure, but why not have then also types of factories to make things more… hm, interesting? So there we go, there are also types of factories and plugins that implement (or not) those types and it’s true that in general there’s only one plugin for each type but don’t let that stop you from having the oh-so-useful-mechanism for having more than one type because there’s now no real cost to all this, no, none at all, right? Fine, first let’s set those plugin names to something shorter at least and give the “types” some numbers too, I like numbers:

#define DEFAULT_CULLER “crystalspace.culling.dynavis”

#define GENERIC_PLUGIN “crystalspace.mesh.object.genmesh”
#define CAL3D_PLUGIN “crystalspace.mesh.object.sprite.cal3d”
#define TERRAIN_PLUGIN “crystalspace.mesh.object.terrain2”
#define PARTICLES_PLUGIN “crystalspace.mesh.object.particles”
#define EMITTER_PLUGIN “crystalspace.mesh.object.particles.emitter”
#define EFFECTOR_PLUGIN “crystalspace.mesh.object.particles.effector”

#define TERRAIN_RENDERER “crystalspace.mesh.object.terrain2.bruteblockrenderer”
#define TERRAIN_DATAFEEDER_SIMPLE “crystalspace.mesh.object.terrain2.simpledatafeeder”
#define TERRAIN_DATAFEEDER_THREADED “crystalspace.mesh.object.terrain2.threadeddatafeeder” //alternative data feeder available in principle
#define TERRAIN_COLLIDER “crystalspace.mesh.object.terrain2.collider”

#define TEXTURE_FIRE “crystalspace.texture.type.fire”
#define TEXTURE_PLASMA “crystalspace.texture.type.plasma”
#define TEXTURE_WATER “crystalspace.texture.type.water”

#define FACTORY_NONE 0
#define FACTORY_GENERIC 1
#define FACTORY_CAL3D 2
#define FACTORY_TERRAIN 3
#define FACTORY_PARTICLES 4

Using the above, an example 3 of a “Getter” method that will retrieve an existing factory from the engine or otherwise create it and return it, if it doesn’t exist already:

csRef EuLoader::GetFactoryTerrain(char *factName) {
//terrain of a sector
csRef factWrapper = 0;

//check if the factory exists already
factWrapper = psengine->GetEngine()->FindMeshFactory(factName);

if (factWrapper != 0)
return factWrapper;

//create a basic factory of this type (aka using the plugin corresponding to this “type”)
//boolean last argument is “addtolist” so yes, it should add it to list
factWrapper = psengine->GetEngine()->CreateMeshFactory(TERRAIN_PLUGIN, factName, true);

return factWrapper;
}

Similar Getter method for a texture, using the given name as path too since one string is anyway enough of a mess in there, no need for two. The loader thing is simply CS’s way of reading an image file, since the texture here is simply assumed to be an image (.png, .bmp, .jpg, .dds are all supported):

csRef EuLoader::GetTexture( char *texName ) {
csRef tex = 0;

//first check if the engine already has it loaded
tex = psengine->GetEngine()->FindTexture(texName);
if (tex != 0)
return tex; //found it so return and be done with it.

//texture not found, so load it
csRef loader = csQueryRegistry (psengine->GetObjectRegistry());
if (loader == 0)
Err::NonfatalError(“EuLoader::LoadTexture failed to find the iLoader plugin of CS!\n”);
else
tex = loader->LoadTexture(texName, texName); //NB: the “name” is same as the full path!

return tex; //either way, the result is still in here
}

The equivalent for a Material is potentially more dubious because on one hand CS *anyway* wraps all textures into materials with the same name and on the other hand, a material also holds shader variables of all sorts, with the basic texture set as a “shader variable” itself! Moreover, shader variables can have different data types, what joy. So this one is not all that basic: it queries the client’s data cache (via that SMG object) to retrieve all shaders and variables for this material and applies them as they come:

csRef EuLoader::GetMaterial( char *matName) {
csRef matWrapper = 0;
csRef mat = 0;

//first check if the engine already has it loaded
matWrapper = psengine->GetEngine()->FindMaterial(matName);
if (matWrapper != 0)
return matWrapper; //material found so return it
//material not found, so create it;
//NB: “texture” in xml is ANYWAY made into a shader var at load time!
mat = psengine->GetEngine()->CreateBaseMaterial(0);
//add it to the engine’s list of materials
matWrapper = psengine->GetEngine()->GetMaterialList()->NewMaterial(mat, matName);

//set shaders and corresponding textures and/or shader vars
csRef stringSet = csQueryRegistryTagInterface (psengine->GetObjectRegistry(), “crystalspace.shader.variablenameset”);
csRef strings = csQueryRegistryTagInterface (psengine->GetObjectRegistry(), “crystalspace.shared.stringset”);
// csRef loader = csQueryRegistry (psengine->GetObjectRegistry());
uint32_t sindex = 1;
//for shaders to set on this material
char stype[MAX_STR_LEN+1];
char sname[MAX_STR_LEN+1];
unsigned int stypelen = MAX_STR_LEN;
unsigned int snamelen = MAX_STR_LEN;
while (psengine->SMG.GetShader(matName, sindex, stype, &stypelen, sname, &snamelen)) {
stype[stypelen] = ‘\0’;
sname[snamelen] = ‘\0’;
csStringID st = strings->Request(stype);
csRef ss = GetShader(sname);
if (ss != 0)
mat->SetShader(st, ss);
//next shader, if any
sindex = sindex + 1;
//reset the lengths!
stypelen = MAX_STR_LEN;
snamelen = MAX_STR_LEN;
}
//shader vars, if any
char sVarName[MAX_STR_LEN+1];
unsigned int sVarNameLen = MAX_STR_LEN;

//texture type shader vars
char sTexName[MAX_STR_LEN+1];
unsigned int sTexNameLen = MAX_STR_LEN;
sindex = 1;
while (psengine->SMG.GetShaderVar(matName, sindex, sVarName, &sVarNameLen, sTexName, &sTexNameLen)) {
sVarName[sVarNameLen] = ‘\0’;
sTexName[sTexNameLen] = ‘\0’;
csRef stex = GetTexture(sTexName);
if (stex != 0) {
csRef shaderVar;
CS::ShaderVarStringID strID = stringSet->Request(sVarName);
shaderVar.AttachNew( new csShaderVariable );
shaderVar->SetType(csShaderVariable::TEXTURE);
shaderVar->SetName(strID);
shaderVar->SetValue(stex);
mat->AddVariable(shaderVar); //as iMaterial extends directly iShaderVariableContext, this can be added here.
}
else
Err::NonfatalError(“EuLoader::GetMaterial can’t find the texture for a material\n”);
sindex = sindex + 1;
sVarNameLen = MAX_STR_LEN;
sTexNameLen = MAX_STR_LEN;
}

//float type shader vars
float v1, v2, v3, v4;
sindex = 1;
while (psengine->SMG.GetShaderVar(matName, sindex, sVarName, &sVarNameLen, &v1)) {
sVarName[sVarNameLen] = ‘\0’;
csRef shaderVar;
CS::ShaderVarStringID strID = stringSet->Request(sVarName);
shaderVar.AttachNew( new csShaderVariable );
shaderVar->SetType(csShaderVariable::FLOAT);
shaderVar->SetName(strID);
shaderVar->SetValue(v1);
mat->AddVariable(shaderVar); //as iMaterial extends directly iShaderVariableContext, this can be added here.
sindex = sindex + 1;
sVarNameLen = MAX_STR_LEN;
}
//vector2 type shader vars
sindex = 1;
while (psengine->SMG.GetShaderVar(matName, sindex, sVarName, &sVarNameLen, &v1, &v2)) {
sVarName[sVarNameLen] = ‘\0’;
csRef shaderVar;
CS::ShaderVarStringID strID = stringSet->Request(sVarName);
shaderVar.AttachNew( new csShaderVariable );
shaderVar->SetType(csShaderVariable::VECTOR2);
shaderVar->SetName(strID);
shaderVar->SetValue(csVector2(v1, v2));
mat->AddVariable(shaderVar); //as iMaterial extends directly iShaderVariableContext, this can be added here.
sindex = sindex + 1;
sVarNameLen = MAX_STR_LEN;
}

//vector3 type shader vars
sindex = 1;
while (psengine->SMG.GetShaderVar(matName, sindex, sVarName, &sVarNameLen, &v1, &v2, &v3)) {
sVarName[sVarNameLen] = ‘\0’;
csRef shaderVar;
CS::ShaderVarStringID strID = stringSet->Request(sVarName);
shaderVar.AttachNew( new csShaderVariable );
shaderVar->SetType(csShaderVariable::VECTOR3);
shaderVar->SetName(strID);
shaderVar->SetValue(csVector3(v1, v2, v3));
mat->AddVariable(shaderVar); //as iMaterial extends directly iShaderVariableContext, this can be added here.
sindex = sindex + 1;
sVarNameLen = MAX_STR_LEN;
}

//vector4 shader variables
sindex = 1;
while (psengine->SMG.GetShaderVar(matName, sindex, sVarName, &sVarNameLen, &v1, &v2, &v3, &v4)) {
sVarName[sVarNameLen] = ‘\0’;
csRef shaderVar;
CS::ShaderVarStringID strID = stringSet->Request(sVarName);
shaderVar.AttachNew( new csShaderVariable );
shaderVar->SetType(csShaderVariable::VECTOR4);
shaderVar->SetName(strID);
shaderVar->SetValue(csVector4(v1, v2, v3, v4));
mat->AddVariable(shaderVar); //as iMaterial extends directly iShaderVariableContext, this can be added here.
sindex = sindex + 1;
sVarNameLen = MAX_STR_LEN;
}
return matWrapper; //the result is in matWrapper at all times
}

Using the above, a prototype method that creates a sky as a sphere with the fixed “starry” image painted on the inside, since your world is – of course! – all inside of the sky dome, in this grand vision of computer graphics 4. Note that both the texture and the location (aka sector) of the sky are hardcoded in this hasty prototype:

bool EuLoader::GetSky() {
char skydomef[] = “skydomef”;
//factory wrapper
csRef factSkyWrapper = GetFactoryMesh(skydomef); //a *generic* mesh factory, used for ALL non-moving objects

if (factSkyWrapper == 0) {
Err::FatalError(“FAILED TO GET GENERIC FACTORY WRAPPER TO MAKE THE SKY!\n”);
return false; //this should never happen….
}
//geometry HAS to be set on the factory state as the meshstate lacks the needed methods…
//…and to get the factory state, first need the factory rather than the wrapper, arghhh
csRef factSky = factSkyWrapper->GetMeshObjectFactory();
csRef factClouds = factCloudsWrapper->GetMeshObjectFactory();
if (factSky == 0) {
Err::NonfatalError(“Sky/Clouds failed to find iMeshObjectFactory valid for created factory\n”);
return false;
}

//and since anyway can’t really have several objects here, set the MATERIAL on factory as well….ugh.
char skyMatName[] = “stars.png”;
csRef skyMat = GetMaterial(skyMatName); //this WILL load/create needed texture too, if it does not exist already
if (skyMat == 0) {
Err::NonfatalError(“EuLoader:GetFactory failed to find material for sky\n”);
return false;
}
factSky->SetMaterialWrapper(skyMat); //sets the material for the whole factory i.e. default for objects created from this factory

//generic settings
factSky->GetFlags().SetBool(CS_FACTORY_STATICSHAPE, true); //default static for genmeshes; non-static should use CAL3D!
factClouds->GetFlags().SetBool(CS_FACTORY_STATICSHAPE, true); //default static for genmeshes; non-static should use CAL3D!
//defaults: compress = false; auto_normals = false; auto_normals_nocompress= false
//if compress state->Compress();
//if auto_normals state->CalculateNormals(!auto_normals_nocompress);

//factory state
csRef factStateSky = scfQueryInterface (factSky);

//create sky dome geometry
using namespace CS::Geometry;
csVector3 center (0, 0, 0);
int rim_vertices = 16;
bool toponly = false; //make FULL sphere, not only top half; default=false
bool reversed = true; //so it’s visible from INSIDE, yes; default=false
bool cylmapping = false; //no cylindrical texture mapping; default=false
csEllipsoid ellips;
ellips.SetRadius(csVector3(2500,2500,2500));
ellips.SetCenter(center);
//this should directly generate the vertices,texels,normals and triangles + set vertex colors to black
factStateSky->GenerateSphere(ellips, rim_vertices, cylmapping, toponly, reversed);

/* alternative way to the above neater GenerateSphere? :
csDirtyAccessArray mesh_vertices;
csDirtyAccessArray mesh_texels;
csDirtyAccessArray mesh_normals;
csDirtyAccessArray mesh_triangles;
Primitives::GenerateSphere (ellips, rim_vertices,
mesh_vertices, mesh_texels,
mesh_normals, mesh_triangles, cylmapping,
toponly, reversed, 0);
AppendOrSetData (factState, mesh_vertices, mesh_texels,
mesh_normals, mesh_triangles);
*/

//directly here instead of calling “GeneralMeshBuilder::CreateMesh” that does exactly this;
//see cs/libs/cstool/genmeshbuilder.cpp

//sector – should get this either as param or from smg….TO DO
csRef s = psengine->GetEngine()->FindSector(“Rotces”);
if (s == 0) {
//this should NOT happen as the sector should call/create contained entities, not the other way around.
Err::NonfatalError(“EuLoader: failed to find the sector for the sky!\n”);
return false;
}

//objects (?)
//apparently: it’s really the triangles and/or render buffer stuff i.e. the “raw” values that just aren’t right (it WORKS with a generated ellipse…)
char skyn[] = “skyn”;
csRef skyMeshWrapper = psengine->GetEngine()->CreateMeshWrapper (factSkyWrapper, skyn, s, csVector3 (0));

//z buffer and priorities
skyMeshWrapper->SetZBufMode(CS_ZBUF_USE); //DO read so that the zbuffer gets updated…ugh;only write to the z-buffer but do not read
skyMeshWrapper->SetRenderPriority(psengine->GetEngine()->GetObjectRenderPriority());

psengine->GetEngine()->PrecacheMesh(skyMeshWrapper); //hmm?

return (skyMeshWrapper != 0 );
}

For an example, the test made with the moon, effectively creating an object in the world directly through the list of vertices and texture coordinates (as taken from its existing xml file otherwise, don’t look weirdly at me when you get to that huge list of vertices, they have been there all the time):

csRef EuLoader::GetMoon() {

csRef fact;
csRef state;
csRef type;

type = csLoadPluginCheck ( psengine->GetObjectRegistry(), GENERIC_PLUGIN, false);
if (!type)
Err::FatalError(“EuLOADER: can’t find crystalspace.mesh.object.genmesh plugin\n”);

fact = type->NewFactory ();
state = scfQueryInterface (fact);

//material
char matname[11] = “waves.dds”;
csRef mat = GetMaterial(matname);
if (mat == 0)
Err::FatalError(“EuLOADER: can’t find material waves.dds”);
fact->SetMaterialWrapper(mat);

//renderbuffer: position
const float posElems[] = {-24.46479416,4.86635208,16.66710281,-20.80559731,4.13849306,21.21320534,-21.21320534,0.00000000,21.21320343,-24.94408798,0.00000000,16.66710663,-20.80559731,4.13849258,-21.21320343,-24.46479607,4.86635256,-16.66710663,-24.94409180,0.00000000,-16.66710663,-21.21320343,0.00000000,-21.21320343,-27.18382263,5.40720034,11.48050213,-27.71638680,0.00000000,11.48050308,-16.34685135,3.25159287,-24.94409180,-16.66710663,0.00000000,-24.94409180,-28.85818863,5.74025345,5.85270882,-29.42355728,0.00000000,5.85271072,-11.25990391,2.23973608,-27.71638680,-11.48049831,0.00000000,-27.71638680,-29.42355919,5.85271168,0.00000358,-30.00000000,0.00000000,0.00000226,-11.25990868,2.23973703,27.71638870,-5.74025154,1.14180899,29.42355728,-5.85270977,0.00000000,29.42355728,-11.48050308,0.00000000,27.71638680,-5.74024439,1.14180756,-29.42355919,-5.85270309,0.00000000,-29.42355919,-28.85819244,5.74025393,-5.85270500,-29.42355919,0.00000000,-5.85270643,-16.34685326,3.25159311,24.94408607,-16.66710663,0.00000000,24.94408798,-27.18382263,5.40720034,-11.48049831,-27.71638680,0.00000000,-11.48049831,-10.60659599,4.39340019,-27.71638680,-15.39839554,6.37822866,-24.94409180,-16.34685135,3.25159287,-24.94409180,-11.25990391,2.23973608,-27.71638680,-27.71638489,11.48050785,0.00000358,-27.18381882,11.25991058,5.85270882,-10.60660172,4.39340210,27.71638870,-5.40719748,2.23973894,29.42355728,-5.40719128,2.23973608,-29.42355919,-5.74024439,1.14180756,-29.42355919,-27.18381882,11.25991058,-5.85270500,-15.39839745,6.37822914,24.94408607,-25.60660172,10.60660458,-11.48049831,-19.59844398,8.11794472,21.21320534,-23.04533005,9.54569340,-16.66710663,-23.04533005,9.54569244,16.66710281,-19.59844208,8.11794472,-21.21320343,-25.60660172,10.60660458,11.48050213,-15.39839554,6.37822866,-24.94409180,-17.63813210,11.78542995,-21.21320343,-20.74024582,13.85819817,-16.66710663,-23.04533005,9.54569340,-16.66710663,-19.59844208,8.11794472,-21.21320343,-23.04533005,15.39840508,11.48050213,-20.74024582,13.85819626,16.66710281,-23.04533005,9.54569244,16.66710281,-25.60660172,10.60660458,11.48050213,-13.85818863,9.25975227,-24.94409180,-24.46478844,16.34685707,5.85270882,-27.18381882,11.25991058,5.85270882,-9.54568291,6.37822866,-27.71638680,-24.94408607,16.66711426,0.00000358,-27.71638489,11.48050785,0.00000358,-9.54568672,6.37823105,27.71638870,-4.86634779,3.25159669,29.42355728,-4.86634254,3.25159264,-29.42355919,-24.46478844,16.34685707,-5.85270500,-27.18381882,11.25991058,-5.85270500,-13.85818958,9.25975323,24.94408607,-15.39839745,6.37822914,24.94408607,-23.04533005,15.39840508,-11.48049831,-25.60660172,10.60660458,-11.48049831,-17.63813210,11.78542995,21.21320534,-19.59844398,8.11794472,21.21320534,-19.59844017,19.59844971,-11.48049831,-20.80558968,20.80560303,-5.85270500,-14.99999523,15.00000477,21.21320534,-11.78542042,11.78543091,24.94408607,-17.63812828,17.63813782,-16.66710663,-17.63812637,17.63813782,16.66710281,-14.99999428,15.00000477,-21.21320343,-19.59844017,19.59844971,11.48050213,-11.78541756,11.78542995,-24.94409180,-20.80558777,20.80560303,5.85270882,-8.11793423,8.11794472,-27.71638680,-21.21319962,21.21320915,0.00000358,-8.11793709,8.11794853,27.71638870,-4.13848686,4.13849735,29.42355728,-4.13848305,4.13849211,-29.42355919,-6.37821770,9.54569435,-27.71638680,-9.25973988,13.85819817,-24.94409180,-16.66710091,24.94409561,0.00000358,-16.34684372,24.46479797,5.85270882,-6.37821913,9.54569721,27.71638870,-3.25158596,4.86635780,29.42355728,-3.25158310,4.86635208,-29.42355919,-16.34684372,24.46479797,-5.85270500,-9.25974178,13.85819912,24.94408607,-15.39839363,23.04533958,-11.48049831,-11.78541756,17.63813972,21.21320534,-13.85818386,20.74025345,-16.66710663,-13.85818291,20.74025345,16.66710281,-11.78541660,17.63813972,-21.21320343,-15.39839363,23.04533958,11.48050213,-9.54567719,23.04533386,16.66710281,-8.11793327,19.59844971,21.21320534,-8.11793232,19.59844971,-21.21320343,-9.54567909,23.04533386,-16.66710663,-10.60659409,25.60660934,11.48050213,-6.37821627,15.39840508,-24.94409180,-11.25989437,27.18382645,5.85270882,-4.39338970,10.60660553,-27.71638680,-11.48049545,27.71639252,0.00000358,-4.39339066,10.60660839,27.71638870,-2.23972821,5.40720701,29.42355728,-2.23972631,5.40719986,-29.42355919,-11.25989437,27.18382645,-5.85270500,-6.37821770,15.39840698,24.94408607,-10.60659409,25.60660934,-11.48049831,-5.74023724,28.85819435,-5.85270500,-5.85270023,29.42356491,0.00000358,-3.25158167,16.34685898,24.94408607,-2.23972559,11.25991631,27.71638870,-5.40718985,27.18382835,-11.48049831,-4.13848162,20.80560493,21.21320534,-4.86633825,24.46479797,-16.66710663,-4.86633682,24.46479797,16.66710281,-4.13847971,20.80560493,-21.21320343,-5.40718985,27.18382835,11.48050213,-3.25158072,16.34685898,-24.94409180,-5.74023724,28.85819435,5.85270882,-2.23972535,11.25991249,-27.71638680,-1.14179850,5.74026012,29.42355728,-1.14179790,5.74025249,-29.42355919,0.00001179,16.66711044,-24.94409180,0.00001201,21.21320724,-21.21320343,0.00001425,29.42355728,5.85270882,0.00001022,27.71639252,11.48050213,0.00001067,11.48050690,-27.71638680,0.00001022,30.00000381,0.00000358,0.00001089,11.48050880,27.71638870,0.00001033,5.85271788,29.42355728,0.00000944,5.85271120,-29.42355919,0.00001425,29.42355728,-5.85270500,0.00001089,16.66711426,24.94408607,0.00001022,27.71639252,-11.48049831,0.00001022,21.21320724,21.21320534,0.00001246,24.94408798,-16.66710663,0.00001425,24.94408798,16.66710281,4.86636257,24.46479416,-16.66710663,5.40721035,27.18382835,-11.48049831,4.86636448,24.46479416,16.66710281,4.13850212,20.80560303,21.21320534,4.13850355,20.80560303,-21.21320343,5.40721035,27.18382835,11.48050213,3.25160384,16.34685707,-24.94409180,5.74026585,28.85818863,5.85270882,2.23974657,11.25991058,-27.71638680,5.85272074,29.42356110,0.00000358,2.23974705,11.25991440,27.71638870,1.14181888,5.74025917,29.42355728,1.14181662,5.74025249,-29.42355919,5.74026585,28.85818863,-5.85270500,3.25160384,16.34685898,24.94408607,2.23974514,5.40719986,-29.42355919,4.39341021,10.60660362,-27.71638680,11.25992203,27.18381882,-5.85270500,11.48051453,27.71638680,0.00000358,6.37823963,15.39840508,24.94408607,4.39341116,10.60660553,27.71638870,10.60661411,25.60660553,-11.48049831,8.11795330,19.59844780,21.21320534,9.54570103,23.04533005,-16.66710663,9.54570293,23.04533005,16.66710281,8.11795425,19.59844780,-21.21320343,10.60661411,25.60660553,11.48050213,6.37823963,15.39840126,-24.94409180,11.25992203,27.18381882,5.85270882,2.23974848,5.40720558,29.42355728,9.25976276,13.85819435,-24.94409180,11.78543854,17.63813782,-21.21320343,16.34686470,24.46478844,5.85270882,15.39840889,23.04533386,11.48050213,6.37823772,9.54569054,-27.71638680,16.66711807,24.94408798,0.00000358,6.37823963,9.54569340,27.71638870,3.25160551,4.86635590,29.42355728,3.25160146,4.86635113,-29.42355919,16.34686470,24.46478844,-5.85270500,9.25976372,13.85819817,24.94408607,15.39840889,23.04533386,-11.48049831,11.78543854,17.63813782,21.21320534,13.85820389,20.74024582,-16.66710663,13.85820484,20.74024582,16.66710281,17.63814163,17.63813019,-16.66710663,19.59845543,19.59844780,-11.48049831,17.63814545,17.63812828,16.66710281,15.00001144,15.00000191,21.21320534,15.00001144,15.00000000,-21.21320343,19.59845543,19.59844780,11.48050213,11.78543854,11.78542328,-24.94409180,20.80560684,20.80559158,5.85270882,8.11795330,8.11794281,-27.71638680,21.21321487,21.21320343,0.00000358,8.11795616,8.11794376,27.71638870,4.13850594,4.13849545,29.42355728,4.13850117,4.13849115,-29.42355919,20.80560684,20.80559158,-5.85270500,11.78544044,11.78542900,24.94408607,4.86636066,3.25159168,-29.42355919,9.54570103,6.37822628,-27.71638680,24.46480179,16.34684753,-5.85270500,24.94409752,16.66710281,0.00000358,13.85820866,9.25974941,24.94408607,9.54570389,6.37822676,27.71638870,23.04534531,15.39840126,-11.48049831,17.63814735,11.78542519,21.21320534,20.74026108,13.85818958,-16.66710663,20.74025917,13.85818672,16.66710281,17.63814545,11.78542328,-21.21320343,23.04534531,15.39840126,11.48050213,13.85820580,9.25974751,-24.94409180,24.46480179,16.34684753,5.85270882,4.86636591,3.25159431,29.42355728,15.39840889,6.37822390,-24.94409180,19.59845352,8.11793995,-21.21320343,27.18382835,11.25990295,5.85270882,25.60661507,10.60660267,11.48050213,10.60661316,4.39339828,-27.71638680,27.71639252,11.48049927,0.00000358,10.60661507,4.39339828,27.71638870,5.40721416,2.23973656,29.42355728,5.40720892,2.23973536,-29.42355919,27.18382835,11.25990295,-5.85270500,15.39841461,6.37822628,24.94408607,25.60661507,10.60660267,-11.48049831,19.59845543,8.11794090,21.21320534,23.04533958,9.54568481,-16.66710663,23.04533768,9.54568291,16.66710281,20.80560875,4.13848925,21.21320534,16.34686661,3.25159049,24.94408607,24.46479988,4.86634684,-16.66710663,27.18383598,5.40719891,-11.48049831,24.46479797,4.86634541,16.66710281,20.80560684,4.13848877,-21.21320343,27.18383598,5.40719891,11.48050213,16.34686470,3.25158882,-24.94409180,28.85820007,5.74024677,5.85270882,11.25991917,2.23973489,-27.71638680,29.42356491,5.85270643,0.00000358,11.25992298,2.23973417,27.71638870,5.74026775,1.14180732,29.42355728,5.74026108,1.14180708,-29.42355919,28.85820007,5.74024677,-5.85270500,30.00000381,-0.00000313,0.00000358,29.42356300,-0.00000447,5.85270882,11.48051643,-0.00000156,27.71638870,5.85272551,-0.00000101,29.42355728,5.85271931,0.00000000,-29.42355919,11.48051453,-0.00000067,-27.71638680,29.42356300,-0.00000447,-5.85270500,16.66711998,-0.00000201,24.94408607,27.71639824,-0.00000134,-11.48049831,21.21321487,-0.00000179,21.21320534,24.94409370,-0.00000313,-16.66710663,24.94409180,-0.00000402,16.66710281,21.21321106,-0.00000179,-21.21320343,27.71639824,-0.00000134,11.48050213,16.66711617,-0.00000291,-24.94409180,20.80560684,-4.13849258,-21.21320343,24.46479797,-4.86635256,-16.66710663,27.18383408,-5.40720034,11.48050213,24.46479797,-4.86635303,16.66710281,16.34686279,-3.25159431,-24.94409180,28.85819626,-5.74025536,5.85270882,11.25991917,-2.23973608,-27.71638680,29.42356110,-5.85271168,0.00000358,11.25992203,-2.23973727,27.71638870,5.74026680,-1.14180923,29.42355728,5.74026108,-1.14180696,-29.42355919,28.85819626,-5.74025536,-5.85270500,16.34686661,-3.25159431,24.94408607,27.18383408,-5.40720034,-11.48049831,20.80560684,-4.13849306,21.21320534,25.60661125,-10.60660362,-11.48049831,27.18382645,-11.25991058,-5.85270500,19.59845352,-8.11794376,21.21320534,15.39840889,-6.37823009,24.94408607,23.04533386,-9.54569054,-16.66710663,23.04533386,-9.54569054,16.66710281,19.59844971,-8.11794376,-21.21320343,25.60661125,-10.60660362,11.48050213,15.39840698,-6.37822866,-24.94409180,27.18382645,-11.25991058,5.85270882,10.60661316,-4.39339924,-27.71638680,27.71638680,-11.48050308,0.00000358,10.60661411,-4.39340115,27.71638870,5.40721321,-2.23973846,29.42355728,5.40720844,-2.23973489,-29.42355919,9.54570007,-6.37822676,-27.71638680,13.85820007,-9.25975037,-24.94409180,24.94408798,-16.66710663,0.00000358,24.46479607,-16.34685516,5.85270882,9.54570103,-6.37822866,27.71638870,4.86636400,-3.25159550,29.42355728,4.86635971,-3.25159097,-29.42355919,24.46479607,-16.34685516,-5.85270500,13.85820389,-9.25975227,24.94408607,23.04534149,-15.39840126,-11.48049831,17.63814163,-11.78542614,21.21320534,20.74025345,-13.85819244,-16.66710663,20.74025154,-13.85819244,16.66710281,17.63813972,-11.78542614,-21.21320343,23.04534149,-15.39840126,11.48050213,13.85820007,-9.25975037,-24.94409180,15.00000763,-15.00000000,-21.21320343,17.63813782,-17.63813210,-16.66710663,19.59845352,-19.59844780,11.48050213,17.63813400,-17.63813210,16.66710281,11.78543091,-11.78542614,-24.94409180,20.80559731,-20.80559731,5.85270882,8.11795139,-8.11794281,-27.71638680,9.54570007,-6.37822676,-27.71638680,21.21320343,-21.21319962,0.00000358,8.11795235,-8.11794472,27.71638870,4.13850307,-4.13849545,29.42355728,4.13849926,-4.13849020,-29.42355919,4.86635971,-3.25159097,-29.42355919,20.80559731,-20.80559731,-5.85270500,11.78543472,-11.78542900,24.94408607,19.59845352,-19.59844780,-11.48049831,15.00000954,-15.00000000,21.21320534,15.39840698,-23.04533386,-11.48049831,16.34685326,-24.46479034,-5.85270500,11.78543186,-17.63813210,21.21320534,9.25975704,-13.85819626,24.94408607,13.85819626,-20.74024582,-16.66710663,13.85819530,-20.74024582,16.66710281,11.78543091,-17.63813210,-21.21320343,15.39840698,-23.04533386,11.48050213,9.25975609,-13.85819340,-24.94409180,16.34685326,-24.46479034,5.85270882,6.37823582,-9.54569054,-27.71638680,16.66710663,-24.94408035,0.00000358,6.37823582,-9.54569340,27.71638870,3.25160289,-4.86635494,29.42355728,3.25160027,-4.86634970,-29.42355919,4.39340830,-10.60660267,-27.71638680,6.37823200,-15.39839935,-24.94409180,11.48050404,-27.71637917,0.00000358,11.25990868,-27.18381882,5.85270882,4.39340734,-10.60660458,27.71638870,2.23974562,-5.40720367,29.42355728,2.23974419,-5.40719748,-29.42355919,11.25990868,-27.18381882,-5.85270500,6.37823343,-15.39840126,24.94408607,10.60660839,-25.60660362,-11.48049831,8.11795044,-19.59844398,21.21320534,9.54569435,-23.04532814,-16.66710663,9.54569244,-23.04532623,16.66710281,8.11794758,-19.59844398,-21.21320343,10.60660839,-25.60660362,11.48050213,4.13849735,-20.80559731,-21.21320343,4.86635590,-24.46478844,-16.66710663,5.40720463,-27.18382645,11.48050213,4.86635447,-24.46478653,16.66710281,3.25159764,-16.34685135,-24.94409180,5.74025345,-28.85818481,5.85270882,2.23974466,-11.25990868,-27.71638680,5.85271311,-29.42354965,0.00000358,2.23974323,-11.25991058,27.71638870,1.14181626,-5.74025631,29.42355728,1.14181614,-5.74025059,-29.42355919,5.74025345,-28.85818481,-5.85270500,3.25159836,-16.34685516,24.94408607,5.40720463,-27.18382645,-11.48049831,4.13849926,-20.80559731,21.21320534,0.00000687,-16.66710663,24.94408607,0.00000754,-11.48050499,27.71638870,0.00000530,-27.71638680,-11.48049831,0.00000307,-29.42354965,-5.85270500,0.00000843,-21.21320343,21.21320534,0.00000665,-24.94408035,-16.66710663,0.00000620,-24.94407845,16.66710281,0.00000665,-21.21320343,-21.21320343,0.00000530,-27.71638680,11.48050213,0.00000642,-16.66710281,-24.94409180,0.00000307,-29.42354965,5.85270882,0.00000933,-11.48050308,-27.71638680,0.00000486,-29.99998856,0.00000358,0.00000832,-5.85271358,29.42355728,0.00000944,-5.85270786,-29.42355919,-5.74024677,-28.85818100,5.85270882,-5.40719318,-27.18382263,11.48050213,-2.23972583,-11.25990868,-27.71638680,-3.25158405,-16.34685135,-24.94409180,-5.85270309,-29.42354202,0.00000358,-2.23972797,-11.25991058,27.71638870,-1.14179957,-5.74025536,29.42355728,-1.14179730,-5.74024963,-29.42355919,-5.74024677,-28.85818100,-5.85270500,-3.25158453,-16.34685326,24.94408607,-5.40719318,-27.18382263,-11.48049831,-4.13848162,-20.80559540,21.21320534,-4.86634207,-24.46478653,-16.66710663,-4.86634207,-24.46478271,16.66710281,-4.13848352,-20.80559540,-21.21320343,-9.54567909,-23.04532242,-16.66710663,-10.60659599,-25.60660172,-11.48049831,-9.54567909,-23.04532051,16.66710281,-8.11793232,-19.59844208,21.21320534,-8.11793327,-19.59844017,-21.21320343,-10.60659599,-25.60660172,11.48050213,-6.37821770,-15.39839363,-24.94409180,-11.25990009,-27.18380928,5.85270882,-4.39338923,-10.60660267,-27.71638680,-11.48049355,-27.71636963,0.00000358,-4.39339113,-10.60660362,27.71638870,-2.23972821,-5.40720177,29.42355728,-2.23972464,-5.40719604,-29.42355919,-11.25990009,-27.18380928,-5.85270500,-6.37821913,-15.39839745,24.94408607,-3.25158024,-4.86634779,-29.42355919,-6.37821674,-9.54568958,-27.71638680,-16.34684372,-24.46478081,-5.85270500,-16.66709518,-24.94406891,0.00000358,-9.25974083,-13.85819054,24.94408607,-6.37821913,-9.54569054,27.71638870,-15.39839363,-23.04533005,-11.48049831,-11.78541374,-17.63813210,21.21320534,-13.85818005,-20.74024200,-16.66710663,-13.85817909,-20.74024010,16.66710281,-11.78541660,-17.63813019,-21.21320343,-15.39839363,-23.04533005,11.48050213,-9.25973892,-13.85818672,-24.94409180,-16.34684372,-24.46478081,5.85270882,-3.25158477,-4.86635256,29.42355728,-11.78541374,-11.78541756,-24.94409180,-14.99999046,-14.99999523,-21.21320343,-20.80558395,-20.80558395,5.85270882,-19.59843826,-19.59844208,11.48050213,-8.11793232,-8.11794090,-27.71638680,-21.21318817,-21.21318626,0.00000358,-8.11793423,-8.11794186,27.71638870,-4.13848448,-4.13849211,29.42355728,-4.13847923,-4.13848829,-29.42355919,-20.80558395,-20.80558395,-5.85270500,-11.78541660,-11.78542137,24.94408607,-19.59843826,-19.59844208,-11.48049831,-14.99999046,-14.99999809,21.21320534,-17.63811874,-17.63812447,-16.66710663,-17.63811874,-17.63812256,16.66710281,-20.74023438,-13.85818481,-16.66710663,-23.04532623,-15.39839554,-11.48049831,-20.74023438,-13.85818291,16.66710281,-17.63812447,-11.78542233,21.21320534,-17.63812447,-11.78541946,-21.21320343,-23.04532623,-15.39839554,11.48050213,-13.85818291,-9.25974178,-24.94409180,-24.46477699,-16.34683990,5.85270882,-9.54568005,-6.37822533,-27.71638680,-24.94406700,-16.66708946,0.00000358,-9.54568291,-6.37822580,27.71638870,-4.86634350,-3.25159192,29.42355728,-4.86633825,-3.25158954,-29.42355919,-24.46477699,-16.34683990,-5.85270500,-13.85818386,-9.25974560,24.94408607,-5.40718555,-2.23973346,-29.42355919,-10.60659313,-4.39339733,-27.71638680,-27.18380356,-11.25989723,-5.85270500,-27.71636200,-11.48048782,0.00000358,-15.39838982,-6.37822247,24.94408607,-10.60659409,-4.39339733,27.71638870,-25.60659409,-10.60659599,-11.48049831,-19.59843445,-8.11793995,21.21320534,-23.04531288,-9.54568100,-16.66710663,-23.04531288,-9.54568005,16.66710281,-19.59843445,-8.11793613,-21.21320343,-25.60659409,-10.60659599,11.48050213,-15.39838696,-6.37821913,-24.94409180,-27.18380356,-11.25989723,5.85270882,-5.40719223,-2.23973489,29.42355728,-16.34683800,-3.25158548,-24.94409180,-20.80558586,-4.13848591,-21.21320343,-28.85816956,-5.74024248,5.85270882,-27.18381500,-5.40719318,11.48050213,-11.25989914,-2.23973393,-27.71638680,-29.42353058,-5.85269690,0.00000358,-11.25990105,-2.23973370,27.71638870,-5.74024439,-1.14180589,29.42355728,-5.74023771,-1.14180613,-29.42355919,-28.85816956,-5.74024248,-5.85270500,-16.34684372,-3.25158787,24.94408607,-27.18381500,-5.40719318,-11.48049831,-20.80558777,-4.13848925,21.21320534,-24.46477509,-4.86634493,-16.66710663,-24.46477509,-4.86634302,16.66710281,0.00000603,-0.00000903,30.00000000,-5.85270309,0.00000000,-29.42355919,0.00000978,0.00000000,-30.00000000,4.13849926,-4.13849020,-29.42355919,3.25160027,-4.86634970,-29.42355919,2.23974419,-5.40719748,-29.42355919,1.14181614,-5.74025059,-29.42355919,0.00000944,-5.85270786,-29.42355919,-1.14179730,-5.74024963,-29.42355919,-2.23972464,-5.40719604,-29.42355919,-3.25158024,-4.86634779,-29.42355919,-4.13847923,-4.13848829,-29.42355919,-4.86633825,-3.25158954,-29.42355919,-5.40718555,-2.23973346,-29.42355919,-5.74023771,-1.14180613,-29.42355919};
unsigned int bufPosLen = sizeof(posElems) / sizeof(posElems[0]);
unsigned int compCount = 3;
unsigned int elemCount = bufPosLen / compCount;
csRef bufPos = csRenderBuffer::CreateRenderBuffer5;
}

//factory wrapper
csRef wrap = psengine->GetEngine()->CreateMeshFactory(fact, “moonfact”);
if (wrap == 0)
Err::FatalError(“EuLOADER: failed to create factory wrapper!\n”);
return wrap;
}

Creating the terrain was quite a pain and it’s quite a long adventure so perhaps of some use to see the code for it too:

csRef EuLoader::GetTerrain() {
csRef meshWrapper = 0;
csRef factWrapper = 0;
csRef fact;
csRef state;
csRef typePlugin;

const char meshNameC[] = “Terrain”;
const char factNameC[] = “terrainF”;
char meshName[MAX_STR_LEN+1];
char factName[MAX_STR_LEN+1];
strncpy(meshName, meshNameC, strlen(meshNameC));
strncpy(factName, factNameC, strlen(factNameC));
meshName[strlen(meshNameC)]=’\0′;
factName[strlen(factNameC)]=’\0′;

csRef s = psengine->GetEngine()->FindSector(“Rotces”);
typePlugin = csLoadPluginCheck ( psengine->GetObjectRegistry(), TERRAIN_PLUGIN, false);

//get heightmap from EuCache via SMGData i.e. make sure it is available before creating empty sector…
char hmapfile[MAX_STR_LEN+1];
unsigned int lhmapfile = MAX_STR_LEN;
if (!psengine->SMG.GetHeightMapFile(factName, hmapfile, &lhmapfile)) {
Err::NonfatalError(“EuLoader: failed to find heightmap for requested terrain factory!\n”);
return meshWrapper;
}
hmapfile[lhmapfile] = ‘\0’;

//get materialmap from EuCache via SMGData
char hmatfile[MAX_STR_LEN+1];
unsigned int lhmatfile = MAX_STR_LEN;
if (!psengine->SMG.GetMaterialMapFile(factName, hmatfile, &lhmatfile)) {
Err::NonfatalError(“EuLoader: failed to find materialmap for requested terrain factory!\n”);
return meshWrapper;
}
hmatfile[lhmatfile] = ‘\0’;

//no need for base material in fact for terrain – there are the ones in the palette!
fact = typePlugin->NewFactory ();
csRef terrainFact = scfQueryInterface (fact);
//obtain needed renderer, collider and data feeder
//NB: those are all defaults because CS doesn’t really have a choice anyway.
csRef renderer = csLoadPluginCheck (psengine->GetObjectRegistry(), TERRAIN_RENDERER);
csRef collider = csLoadPluginCheck (psengine->GetObjectRegistry(), TERRAIN_COLLIDER);
csRef datafeeder = csLoadPluginCheck (psengine->GetObjectRegistry(), TERRAIN_DATAFEEDER_THREADED);
if (renderer == 0 || collider == 0 || datafeeder == 0) {
Err::NonfatalError(“EuLoader::GetFactory can’t find renderer, collider and/or data feeder for generating the Terrain!\n”);
return meshWrapper;
}

terrainFact->SetRenderer( renderer );
terrainFact->SetCollider( collider );
terrainFact->SetFeeder( datafeeder );

//set default cell – DEFAULT values!
//this is a “pseudo-cell” that serves as blueprint for any cells created by this factory
//NB: apparently by default there are NO cells created (?!)
csRef defaultCell (terrainFact->GetDefaultCell());
if (!defaultCell.IsValid()) {
//this should NOT happen!
Err::NonfatalError(“INVALID default cell in terrain factory!\n”);
return meshWrapper;
}
defaultCell->SetSize (csVector3 (1024.0f, 63.0f, 1024.0f));
defaultCell->SetGridWidth (257);
defaultCell->SetGridHeight (257);
defaultCell->SetMaterialMapWidth (512);
defaultCell->SetMaterialMapHeight (512);
defaultCell->SetMaterialPersistent (false);
//render properties
defaultCell->GetRenderProperties()->SetParameter(“block resolution”, “16”);
defaultCell->GetRenderProperties()->SetParameter(“splat distance”, “100”);
defaultCell->GetRenderProperties()->SetParameter(“lod splitcoeff”, “8”);
defaultCell->GetRenderProperties()->SetParameter(“splat render priority”, “object2”);
//heightmap and material map aka “feederproperties”
defaultCell->GetFeederProperties()->SetParameter(“smooth heightmap”, “yes”);
defaultCell->GetFeederProperties()->SetParameter(“heightmap source”, hmapfile); //?
defaultCell->GetFeederProperties()->SetParameter(“materialmap source”, hmatfile); //?

//create ONE actual cell in this factory
csRef cell = terrainFact->AddCell();
cell->SetName(“0”); //default, one single cell “0”
if (cell == 0) {
Err::NonfatalError(“EuLoader: GetFactory fails to create ONE cell for terrain!\n”);
return 0;
}
//position of this one cell
cell->SetPosition(csVector2(-511, -511));

//create the actual factory wrapper and register it with the engine
factWrapper = psengine->GetEngine()->CreateMeshFactory(fact, factName);
if (factWrapper == 0) {
Err::FatalError(“EuLOADER: failed to create Terrain factory wrapper!\n”);
return meshWrapper;
}

meshWrapper = psengine->GetEngine()->CreateMeshWrapper (factWrapper, meshName, s, csVector3 (0,0,0));
if (meshWrapper == 0) {
Err::NonfatalError(“EuLoader:GetMesh failed to create the requested mesh despite having its factory wrapper!\n”);
return meshWrapper;
}
//add material palette if this mesh has any!
uint32_t index = 1;
char matName[MAX_STR_LEN+1];
unsigned int len = MAX_STR_LEN;
csRefArray pal; //just in case there IS a material palette…
while (psengine->SMG.GetMaterialPalette(meshName, index, matName, &len)){
matName[len] = ‘\0’;
csRef m = GetMaterial(matName);
if (m == 0) {
Err::NonfatalError(“EuLoader: failed to retrieve material for material palette!\n”);
}
else
pal.Push(m);
index = index + 1;
len = MAX_STR_LEN; //reset this…
}
if (index > 1) {
//aka there IS a material palette
csRef mm = meshWrapper->GetMeshObject();
if (mm==0) {
Err::NonfatalError(“EuLoader: failed to obtain the mesh object out of the mesh wrapper!\n”);
}
else {
csRef syst = scfQueryInterface (mm);
if (syst == 0) {
Err::NonfatalError(“EuLoader: failed to get the terrainSystem to set the material palette on it!\n”);
}
else
syst->SetMaterialPalette(pal);
}
}

meshWrapper->SetZBufMode(CS_ZBUF_USE); //DO read so that the zbuffer gets updated…ugh;only write to the z-buffer but do not read
meshWrapper->GetMeshObject()->SetMixMode(CS_FX_COPY); //this should be default for most (?); see p321 (333) in cs manual re mixmodes and blending

meshWrapper->SetRenderPriority(psengine->GetEngine()->GetObjectRenderPriority());
psengine->GetEngine()->PrecacheMesh(meshWrapper); //hmm?

//initialize collision detection for this entity
csRef cdsys = csQueryRegistry (psengine->GetObjectRegistry());
csColliderHelper::InitializeCollisionWrapper(cdsys, meshWrapper);

return meshWrapper;

Putting some of the above together, there’s a more useful GetMesh that takes a numeric id (hence, a Euloran proper id since all objects in Eulora have a numeric id) and either finds or creates the thing (according to what EuCore says that thing should be):

csRef EuLoader::GetMesh( uint32_t id) {
csRef meshWrapper = 0;
//retrieve name as CS finds meshes by name
char meshName[MAX_STR_LEN+1];
unsigned int meshNameLen = MAX_STR_LEN;

if (!psengine->SMG.GetName(id, meshName, &meshNameLen))
return meshWrapper; //nothing to do as there’s not enough info for this object
meshName[meshNameLen] = ‘\0’;
//check if it exists already
meshWrapper = psengine->GetEngine()->FindMeshObject(meshName);
if (meshWrapper != 0)
return meshWrapper; //found it so return it

//not found so create it, if there is enough information for it
//will need: factory name, location (aka sectorID + position x,y,z)
char factName[MAX_STR_LEN+1];
unsigned int factNameLen = MAX_STR_LEN;
float x,y,z,rx,ry,rz;
uint32_t locID;
if (! (psengine->SMG.GetFactoryName(id, factName, &factNameLen)) ||
! (psengine->SMG.GetPos(id, &x, &y, &z, &rx, &ry, &rz)) ||
! (psengine->SMG.GetLocID(id, &locID)) ) {

Err::NonfatalError(“EuLoader: unknown factory name and/or location for requested mesh!”);
return meshWrapper;
}
factName[factNameLen] = ‘\0’;
//everything IS available, so retrieve/create factory
csRef factory = GetFactory(factName);
if (factory == 0) {
Err::NonfatalError(“EuLoader: failed to retrieve factory for the required entity!\n”);
return meshWrapper;
}
//retrieve/create sector for this too!
char sName[MAX_STR_LEN+1];
unsigned int slen = MAX_STR_LEN;
if (! (psengine->SMG.GetName(locID, sName, &slen))) {
Err::NonfatalError(“EuLoader: failed to retrieve sector name for the required entity!\n”);
return meshWrapper;
}
sName[slen] = ‘\0’;
csRef s = psengine->GetEngine()->FindSector(sName);
if (s == 0) {
//this should NOT happen as the sector should call/create contained entities, not the other way around.
Err::NonfatalError(“EuLoader: failed to find the sector for the required entity!\n”);
return meshWrapper;
}

meshWrapper = psengine->GetEngine()->CreateMeshWrapper (factory, meshName, s, csVector3 (x,y,z));
if (meshWrapper == 0) {
Err::NonfatalError(“EuLoader:GetMesh failed to create the requested mesh despite having its factory wrapper!\n”);
return meshWrapper;
}

//add material palette if this mesh has any!
uint32_t index = 1;
char matName[MAX_STR_LEN+1];
unsigned int len = MAX_STR_LEN;
csRefArray pal; //just in case there IS a material palette…
while (psengine->SMG.GetMaterialPalette(meshName, index, matName, &len)){
matName[len] = ‘\0’;
csRef m = GetMaterial(matName);
if (m == 0) {
Err::NonfatalError(“EuLoader: failed to retrieve material for material palette!\n”);
}
else
pal.Push(m);
index = index + 1;
len = MAX_STR_LEN; //reset this…
}
if (index > 1) {
//aka there IS a material palette
csRef mm = meshWrapper->GetMeshObject();
if (mm==0) {
Err::NonfatalError(“EuLoader: failed to obtain the mesh object out of the mesh wrapper!\n”);
}
else {
csRef syst = scfQueryInterface (mm);
if (syst == 0) {
Err::NonfatalError(“EuLoader: failed to get the terrainSystem to set the material palette on it!\n”);
}
else
syst->SetMaterialPalette(pal);
}
}

//TO DO: to check that all mesh entities have indeed zbuf_use?
//NOPE, not all: particles have cs_zbuf_test
//the zbufmode depends on the type of the mesh, which is in turn given by the …factory type…
int mtype = psengine->SMG.GetFactoryType(factName);
switch (mtype) {
case FACTORY_PARTICLES: {
meshWrapper->SetZBufMode(CS_ZBUF_TEST);
meshWrapper->GetMeshObject()->SetMixMode(CS_FX_ADD);
// meshWrapper->SetRenderPriority(psengine->GetEngine()->GetObjectRenderPriority());
meshWrapper->SetRenderPriority(psengine->GetEngine()->GetAlphaRenderPriority());

} break;
case FACTORY_TERRAIN: {
meshWrapper->SetZBufMode(CS_ZBUF_USE);
meshWrapper->GetMeshObject()->SetMixMode(CS_FX_COPY);
meshWrapper->SetRenderPriority(psengine->GetEngine()->GetWallRenderPriority());
} break;
default: {
meshWrapper->SetZBufMode(CS_ZBUF_USE); //DO read so that the zbuffer gets updated…ugh;only write to the z-buffer but do not read
meshWrapper->GetMeshObject()->SetMixMode(CS_FX_COPY); //this should be default for most (?); see p321 (333) in cs manual re mixmodes and blending
meshWrapper->SetRenderPriority(psengine->GetEngine()->GetObjectRenderPriority());
}
}
//ALL mesh entities are objects so set them with object priority for rendering;
//TO DO: to check this since “entities” include walls and doors and the like?
//i.e. might need other meaningful subcategories and decide rendering priority on that; hm.
// meshWrapper->SetRenderPriority(psengine->GetEngine()->GetRenderPriority(“wall”));
psengine->GetEngine()->PrecacheMesh(meshWrapper); //hmm?

//initialize collision detection for this entity
csRef cdsys = csQueryRegistry (psengine->GetObjectRegistry());
csColliderHelper::InitializeCollisionWrapper(cdsys, meshWrapper);

return meshWrapper;

}

For some really tedious stuff, here’s the creation of Foxy herself, hence a Cal3D object:

csRef EuLoader::GetCal3d( char *name, iSector *s, float x, float y, float z ) {
csRef meshWrapper = 0;
//check if it exists already
meshWrapper = psengine->GetEngine()->FindMeshObject(name);
if (meshWrapper != 0)
return meshWrapper; //found it so return it

//check sector is not null since CS REQUIRES a non-null sector to even create a mesh, ugh.
if (!s)
return meshWrapper;

//not found the mesh, so need the factory to create it…
csRef factWrapper = 0;
factWrapper = psengine->GetEngine()->FindMeshFactory(name);

if (!factWrapper) {
//factory does not yet exist, so create it.
csRef fact;
csRef state;
csRef typePlugin;

typePlugin = csLoadPluginCheck ( psengine->GetObjectRegistry(), CAL3D_PLUGIN, false);
if (typePlugin == 0) {
Err::NonfatalError(“EuLoader failed to load SprCal3D Factory PLUGIN TYPE\n”);
return meshWrapper;
}
fact = typePlugin->NewFactory ();

//create the actual factory wrapper and register it with the engine
factWrapper = psengine->GetEngine()->CreateMeshFactory(fact, name);
if (factWrapper == 0) {
Err::FatalError(“EuLOADER: failed to create Cal3D factory wrapper!\n”);
return meshWrapper;
}
} //by this point, factWrapper was either found OR created successfully.

//now get the specific factory and state for Cal3D to set everything
csRef state3d = scfQueryInterface (factWrapper->GetMeshObjectFactory());
if (state3d == 0) {
Err::NonfatalError(“EuLoader failed to load factory state as iSpriteCal2DFactoryState\n”);
return meshWrapper;
}
//test for now – create girl factory
//this IS DONE in CS’s loader – does each sprcal3d factory actually NEED to create this “dummy” ?
if (!state3d->Create(“dummy”)) {
Err::NonfatalError(“EuLoader: failed to create dummy for sprcal3d factory\n”);
return meshWrapper;
}
//parameters for sprCal3dFactory state – to take them from SMGData! TO DO TO CHANGE
float scale = 1.0;
float ax, ay, az, angle;
csVector3 translation(0.0,0.0,0.0);
int flags = LOADER_FLIP_WINDING; //wtf IS this??
bool rotXAxis = true; //default apparently
bool flipTextures = false; //default apparently
if (rotXAxis)
flags = flags | LOADER_ROTATE_X_AXIS;
else
flags = flags & (~LOADER_ROTATE_X_AXIS); //ugh.
if (flipTextures)
flags = flags | LOADER_INVERT_V_COORD;
else
flags = flags & (~LOADER_INVERT_V_COORD);

//skeleton
char skelFile[] = “/this/clientcache/girl_skel.csf”;
if (! state3d->LoadCoreSkeleton(psengine->GetVFS(), skelFile) ){
Err::NonfatalError(“Failed to load the core skeleton file girl_skel.csf\n”);
return meshWrapper;
}
char idleFile[] = “/this/clientcache/girl_idle.caf”;
char idleName[] = “idle”;
char walkFile[] = “/this/clientcache/girl_idle.caf”;
char walkName[] = “walk”;
int itype = iSpriteCal3DState::C3D_ANIM_TYPE_IDLE;
int wtype = iSpriteCal3DState::C3D_ANIM_TYPE_TRAVEL;

//see p 287/644 in cs manual
float base_vel = 0; //”speed of translation which should be used when the animation is played alone”
float min_vel = 0; //min and max velocities are used by the blender to achieve specific, desired velocities
float max_vel = 0;
int max_interval = 30; //max_random – those give the interval (in seconds) for idle override actions
int min_interval = 10; //min_random
int idle_pct = 0; //probability (%) of this action being the override action
bool lock = false; //??

int animID = state3d->LoadCoreAnimation(psengine->GetVFS(), idleFile,
idleName, itype, base_vel,
min_vel, max_vel, min_interval, max_interval,
idle_pct, lock, flags);
if (animID < 0) { Err::NonfatalError("EuLoader: failed to load core animation\n"); return meshWrapper; } base_vel = 2; max_vel = 3; animID = state3d->LoadCoreAnimation(psengine->GetVFS(), walkFile,
walkName, wtype, base_vel,
min_vel, max_vel, min_interval, max_interval,
idle_pct, lock, flags);
if (animID < 0) { Err::NonfatalError("EuLoader: failed to load core animation\n"); return meshWrapper; } //meshes aka "attachable parts of the model" //head char mfile[] = "/this/clientcache/girl_head.cmf"; char hname[] = "Head"; char mname[] = "/this/clientcache/fskin.dds"; // char mname[] = "fskin.dds"; csRef mtex = GetTexture(mname); //to create/get a BASIC material with this name rather than all the shader mess.
csRef mw = GetMaterial(mname); //after the GetTexture call, this should always end up with the basic wrapper-material on the corresponding texture… such is CS.

if (mw == 0) {
Err::NonfatalError(“FAILED to obtain material fskin.dds\n”);
return meshWrapper;
}
bool attach = true; //default value
state3d->AddCoreMaterial(mw); //done via LoadMaterialTag in cs/plugins/mesh/sprcal3d/persist/sprcal3dldr.cpp
if (state3d->LoadCoreMesh(psengine->GetVFS(), mfile, hname, attach, mw, flags) < 0) { Err::NonfatalError("FAILED to loadcoremesh\n"); return meshWrapper; } //hair char ghrfile[] = "/this/clientcache/girl_hair.cmf"; char ghrname[] = "Hair"; if (state3d->LoadCoreMesh(psengine->GetVFS(), ghrfile, ghrname, attach, mw, flags) < 0) { Err::NonfatalError("FAILED to loadcoremesh\n"); return meshWrapper; } //arm(s) char glalfile[] = "/this/clientcache/girl_arm.cmf"; char glalname[] = "Arm"; if (state3d->LoadCoreMesh(psengine->GetVFS(), glalfile, glalname, attach, mw, flags) < 0) { Err::NonfatalError("FAILED to loadcoremesh\n"); return meshWrapper; } //hand(s) char ghhfile[] = "/this/clientcache/girl_hand.cmf"; char ghhname[] = "Hand"; if (state3d->LoadCoreMesh(psengine->GetVFS(), ghhfile, ghhname, attach, mw, flags) < 0) { Err::NonfatalError("FAILED to loadcoremesh\n"); return meshWrapper; } //torso char gtfile[] = "/this/clientcache/girl_torso.cmf"; char gtname[] = "Torso"; if (state3d->LoadCoreMesh(psengine->GetVFS(), gtfile, gtname, attach, mw, flags) < 0) { Err::NonfatalError("FAILED to loadcoremesh\n"); return meshWrapper; } //legs char glfile[] = "/this/clientcache/girl_legs.cmf"; char glname[] = "Legs"; if (state3d->LoadCoreMesh(psengine->GetVFS(), glfile, glname, attach, mw, flags) < 0) { Err::NonfatalError("FAILED to loadcoremesh\n"); return meshWrapper; } //foot char gffile[] = "/this/clientcache/girl_foot.cmf"; char gffname[] = "Foot"; if (state3d->LoadCoreMesh(psengine->GetVFS(), gffile, gffname, attach, mw, flags) < 0) { Err::NonfatalError("FAILED to loadcoremesh\n"); return meshWrapper; } //default values - hardtransform ax = 0.0; ay = 1.0; //this turns it to face away from the camera/viewer as it were az = 0.0; angle = 180.0; csMatrix3 rotation(ax,ay,az,angle*TWO_PI/360); csReversibleTransform rt(rotation,translation); factWrapper->GetMeshObjectFactory()->HardTransform(rt);

angle = 90.0;
ay = 0.0;
ax = -1.0;
csMatrix3 rotation1(ax,ay,az,angle*TWO_PI/360);
csReversibleTransform rt1(rotation1,translation);
factWrapper->GetMeshObjectFactory()->HardTransform(rt1);

//rescale if needed
if (scale != 0)
state3d->RescaleFactory(scale); //this ALSO calls the calculateallboneboundingboxes
else
state3d->CalculateAllBoneBoundingBoxes();
// Wrapup cal3d initialization
state3d->BindMaterials();

//and now create and register the mesh itself
meshWrapper = psengine->GetEngine()->CreateMeshWrapper (factWrapper, name, s, csVector3 (x,y,z));
if (meshWrapper == 0) {
Err::NonfatalError(“EuLoader:GetMesh failed to create the requested mesh despite having its factory wrapper!\n”);
return meshWrapper;
}

meshWrapper->SetZBufMode(CS_ZBUF_USE); //DO read so that the zbuffer gets updated…ugh;only write to the z-buffer but do not read
meshWrapper->GetMeshObject()->SetMixMode(CS_FX_COPY); //this should be default for most (?); see p321 (333) in cs manual re mixmodes and blending
meshWrapper->SetRenderPriority(psengine->GetEngine()->GetObjectRenderPriority());

psengine->GetEngine()->PrecacheMesh(meshWrapper); //hmm?

//initialize collision detection for this entity
csRef cdsys = csQueryRegistry (psengine->GetObjectRegistry());
csColliderHelper::InitializeCollisionWrapper(cdsys, meshWrapper);

return meshWrapper;
}

Finally, the sector itself with lights and then various tests, some still in, some commented out (although the working code is still there otherwise):

bool EuLoader::LoadSector(uint32_t id) {
/*****retrieve name of this sector and check if it is already loaded*****/
char sname[MAX_STR_LEN+1];
unsigned int lsname = MAX_STR_LEN;

//get name of this sector and null-terminate it
if (!psengine->SMG.GetName(id, sname, &lsname))
return false;
sname[lsname] = ‘\0’;

//check if sector exists
iSector *s = psengine->GetEngine()->FindSector(sname);
if (s != NULL) {
return true; //sector already loaded
}

/****create the sector as an empty entity with default overall values****/
s = psengine->GetEngine()->CreateSector(sname);
if (s == NULL) {
//this should never happen.
Err::NonfatalError(“EuLoader::LoadSector failed to create the requested sector.”);
return false; //failed to create a sector
}

//set the visibility culler; NB: smgdata provides either defaults or fresh data
s->SetVisibilityCullerPlugin(DEFAULT_CULLER); //default culler defined in smgdata.h
float r,g,b;
//set the ambient light
if (psengine->SMG.GetAmbient(id, &r, &g, &b))
s->SetDynamicAmbientLight(csColor(r,g,b));
//set the fog, if any – not really, this was/is only in water (?)
// float density;
// if (psengine->SMG.GetFog(id, &r, &g, &b, &density))
// s->SetFog(density, csColor(r,g,b));

//load the lights, if any
uint32_t lindex = 1;
float radius, x, y, z;
char lightName[MAX_STR_LEN+1];
unsigned int llen = MAX_STR_LEN;
bool dynamic;
csLightDynamicType ltype;

while (psengine->SMG.GetLight(id, lindex, lightName, &llen, &x, &y, &z, &radius, &r, &g, &b, &dynamic)) {
lightName[llen] = ‘\0’;
if (dynamic)
ltype = CS_LIGHT_DYNAMICTYPE_DYNAMIC;
else
ltype = CS_LIGHT_DYNAMICTYPE_STATIC;
csRef light = psengine->GetEngine()->CreateLight(lightName, csVector3(x, y, z), radius, csColor(r,g,b), ltype);
if (!light)
Err::NonfatalError(“EuLoader::LoadSector failed to create light”);
else {
s->GetLights()->Add(light);
}
lindex = lindex + 1;
}

//sky
//using GetMaterial, GetTexture, GetShader above

char skyfactoryname[] = “sky.png.fact”;
char skyobjname[] = “skyobj”;
// csRef skyFactory = GetFactory(skyfactoryname);
if (!GetSky()) { //separate for now because generated sphere aka no direct pixels, texels etc.
// if (skyFactory==0) {
Err::NonfatalError(“EuLoader::LoadSector failed to obtain the sky factory\n”);
return false;
}
else printf (“CHECK: EuLoader got the sky factory fine\n”);

//TO DO : this should create all known objects in the sector
//the moon
/* csRef moonwrap = GetMesh(901);
if (moonwrap == 0) {
Err::NonfatalError(“NO MOON!!!\n”);
return false;
}
*/

//the terrain
csRef twrap = GetTerrain();
if (twrap == 0) {
Err::NonfatalError(“NO TERRAIN!!!\n”);
return false;
}

/************create particle systems (effects) *********/
// csRef fire = GetFire();
csRef fountain = GetFountain();
// csRef rain = GetRain();
// csRef globe = GetGlobe();

/************create the Water***************/

/************create the Portals*************/
return true;
}

There is of course more to the prototoype/test code and otherwise changes and excisions to legacy code but comments are helpfully in place everywhere and so I don’t feel the need to repeat them here. Despite those added comments and despite the fact that a lot of now-unused code was commented out rather than deleted at this stage, this prototype client is still thousands LOC shorter than the legacy client so there’s some satisfaction to it all at least, that’s the most I can say on it currently. Feel free to ask your questions in the comments box below, as usual.

  1. Yeah, I’m writing to my older self as it’s way more useful than writing to my younger self. You should try it too.[]
  2. See src/client/euloader.h and .cpp for the prototype loaders’ code + src/client/psengine.cpp for its use.[]
  3. To do the same for different plugins, you need just to replace TERRAIN_PLUGIN with whichever other plugin you want from the list above.[]
  4. To quote Eminescu’s fitting words here: “O racla mare-i lumea. Stelele-s cuie batute-n ea si soarele-i fereastra la temnita vietii.” (A large shrine is this world. The stars are nails through it and the sun is the window to life’s gaol.) []
  5. size_t) elemCount, CS_BUF_STATIC, CS_BUFCOMP_FLOAT, compCount);
    bufPos->CopyInto(posElems, elemCount); //this is the only available method to copy apparently the data from memory/pointer and into the buffer….
    state->AddRenderBuffer(“position”, bufPos);

    //renderbuffers: normal
    //TO DO TO CHANGE retrieve the contents of the buffer from SMGData
    const float normElems[] = {-0.81731617,0.16257210,0.55275124,-0.69649345,0.13852352,0.70403147,-0.71013522,0.00000000,0.70403147,-0.83333844,0.00000000,0.55275124,-0.69649345,0.13852352,-0.70403147,-0.81731617,0.16257210,-0.55275124,-0.83333844,0.00000000,-0.55275124,-0.71013522,0.00000000,-0.70403147,-0.90697956,0.18039490,0.38053530,-0.92474133,0.00000000,0.38053530,-0.54899746,0.10919522,-0.82863855,-0.55977052,0.00000000,-0.82863855,-0.96215707,0.19138157,0.19391461,-0.98098695,0.00000000,0.19391461,-0.38041323,0.07565539,-0.92168951,-0.38785973,0.00000000,-0.92168951,-0.98077333,0.19507432,0.00000000,-1.00000000,0.00000000,0.00000000,-0.38041323,0.07565539,0.92168951,-0.19708854,0.03918577,0.97958314,-0.20096439,0.00000000,0.97958314,-0.38785973,0.00000000,0.92168951,-0.19708854,0.03918577,-0.97958314,-0.20096439,0.00000000,-0.97958314,-0.96215707,0.19138157,-0.19391461,-0.98098695,0.00000000,-0.19391461,-0.54899746,0.10919522,0.82863855,-0.55977052,0.00000000,0.82863855,-0.90697956,0.18039490,-0.38053530,-0.92474133,0.00000000,-0.38053530,-0.35834834,0.14841151,-0.92168951,-0.51713616,0.21420942,-0.82863855,-0.54899746,0.10919522,-0.82863855,-0.38041323,0.07565539,-0.92168951,-0.92385632,0.38267159,0.00000000,-0.90633869,0.37540817,0.19391461,-0.35834834,0.14841151,0.92168951,-0.18564409,0.07690664,0.97958314,-0.18564409,0.07690664,-0.97958314,-0.19708854,0.03918577,-0.97958314,-0.90633869,0.37540817,-0.19391461,-0.51713616,0.21420942,0.82863855,-0.85436565,0.35389262,-0.38053530,-0.65605640,0.27173680,0.70403147,-0.76989043,0.31888792,-0.55275124,-0.76989043,0.31888792,0.55275124,-0.65605640,0.27173680,-0.70403147,-0.85436565,0.35386211,0.38053530,-0.51713616,0.21420942,-0.82863855,-0.59044158,0.39451277,-0.70403147,-0.69289225,0.46296579,-0.55275124,-0.76989043,0.31888792,-0.55275124,-0.65605640,0.27173680,-0.70403147,-0.76891387,0.51374859,0.38053530,-0.69289225,0.46296579,0.55275124,-0.76989043,0.31888792,0.55275124,-0.85436565,0.35386211,0.38053530,-0.46540728,0.31098360,-0.82863855,-0.81566823,0.54499954,0.19391461,-0.90633869,0.37540817,0.19391461,-0.32248908,0.21549119,-0.92168951,-0.83144629,0.55555892,0.00000000,-0.92385632,0.38267159,0.00000000,-0.32248908,0.21549119,0.92168951,-0.16708884,0.11163671,0.97958314,-0.16708884,0.11163671,-0.97958314,-0.81566823,0.54499954,-0.19391461,-0.90633869,0.37540817,-0.19391461,-0.46540728,0.31098360,0.82863855,-0.51713616,0.21420942,0.82863855,-0.76891387,0.51374859,-0.38053530,-0.85436565,0.35389262,-0.38053530,-0.59044158,0.39451277,0.70403147,-0.65605640,0.27173680,0.70403147,-0.65388960,0.65388960,-0.38053530,-0.69365519,0.69365519,-0.19391461,-0.50212103,0.50212103,0.70403147,-0.39579454,0.39579454,0.82863855,-0.58925140,0.58925140,-0.55275124,-0.58925140,0.58925140,0.55275124,-0.50212103,0.50212103,-0.70403147,-0.65388960,0.65388960,0.38053530,-0.39579454,0.39579454,-0.82863855,-0.69365519,0.69365519,0.19391461,-0.27426985,0.27426985,-0.92168951,-0.70708334,0.70708334,0.00000000,-0.27426985,0.27426985,0.92168951,-0.14209418,0.14209418,0.97958314,-0.14209418,0.14209418,-0.97958314,-0.21549119,0.32248908,-0.92168951,-0.31098360,0.46540728,-0.82863855,-0.55555892,0.83144629,0.00000000,-0.54499954,0.81566823,0.19391461,-0.21549119,0.32248908,0.92168951,-0.11163671,0.16708884,0.97958314,-0.11163671,0.16708884,-0.97958314,-0.54499954,0.81566823,-0.19391461,-0.31098360,0.46540728,0.82863855,-0.51374859,0.76891387,-0.38053530,-0.39451277,0.59044158,0.70403147,-0.46296579,0.69289225,-0.55275124,-0.46296579,0.69289225,0.55275124,-0.39451277,0.59044158,-0.70403147,-0.51374859,0.76891387,0.38053530,-0.31888792,0.76989043,0.55275124,-0.27173680,0.65605640,0.70403147,-0.27173680,0.65605640,-0.70403147,-0.31888792,0.76989043,-0.55275124,-0.35386211,0.85436565,0.38053530,-0.21420942,0.51713616,-0.82863855,-0.37540817,0.90633869,0.19391461,-0.14841151,0.35834834,-0.92168951,-0.38267159,0.92385632,0.00000000,-0.14841151,0.35834834,0.92168951,-0.07690664,0.18564409,0.97958314,-0.07690664,0.18564409,-0.97958314,-0.37540817,0.90633869,-0.19391461,-0.21420942,0.51713616,0.82863855,-0.35386211,0.85436565,-0.38053530,-0.19138157,0.96215707,-0.19391461,-0.19507432,0.98077333,0.00000000,-0.10919522,0.54899746,0.82863855,-0.07565539,0.38041323,0.92168951,-0.18039490,0.90697956,-0.38053530,-0.13852352,0.69649345,0.70403147,-0.16257210,0.81731617,-0.55275124,-0.16257210,0.81731617,0.55275124,-0.13852352,0.69649345,-0.70403147,-0.18039490,0.90697956,0.38053530,-0.10919522,0.54899746,-0.82863855,-0.19138157,0.96215707,0.19391461,-0.07565539,0.38041323,-0.92168951,-0.03918577,0.19708854,0.97958314,-0.03918577,0.19708854,-0.97958314,0.00000000,0.55977052,-0.82863855,0.00000000,0.71013522,-0.70403147,0.00000000,0.98098695,0.19391461,0.00000000,0.92474133,0.38053530,0.00000000,0.38785973,-0.92168951,0.00000000,1.00000000,0.00000000,0.00000000,0.38785973,0.92168951,0.00000000,0.20096439,0.97958314,0.00000000,0.20096439,-0.97958314,0.00000000,0.98098695,-0.19391461,0.00000000,0.55977052,0.82863855,0.00000000,0.92474133,-0.38053530,0.00000000,0.71013522,0.70403147,0.00000000,0.83333844,-0.55275124,0.00000000,0.83333844,0.55275124,0.16257210,0.81731617,-0.55275124,0.18039490,0.90697956,-0.38053530,0.16257210,0.81731617,0.55275124,0.13852352,0.69649345,0.70403147,0.13852352,0.69649345,-0.70403147,0.18039490,0.90697956,0.38053530,0.10919522,0.54899746,-0.82863855,0.19138157,0.96215707,0.19391461,0.07565539,0.38041323,-0.92168951,0.19507432,0.98077333,0.00000000,0.07565539,0.38041323,0.92168951,0.03918577,0.19708854,0.97958314,0.03918577,0.19708854,-0.97958314,0.19138157,0.96215707,-0.19391461,0.10919522,0.54899746,0.82863855,0.07690664,0.18564409,-0.97958314,0.14841151,0.35834834,-0.92168951,0.37540817,0.90633869,-0.19391461,0.38267159,0.92385632,0.00000000,0.21420942,0.51713616,0.82863855,0.14841151,0.35834834,0.92168951,0.35389262,0.85436565,-0.38053530,0.27173680,0.65605640,0.70403147,0.31888792,0.76989043,-0.55275124,0.31888792,0.76989043,0.55275124,0.27173680,0.65605640,-0.70403147,0.35389262,0.85436565,0.38053530,0.21420942,0.51713616,-0.82863855,0.37540817,0.90633869,0.19391461,0.07687613,0.18564409,0.97958314,0.31098360,0.46540728,-0.82863855,0.39451277,0.59044158,-0.70403147,0.54499954,0.81566823,0.19391461,0.51374859,0.76891387,0.38053530,0.21549119,0.32248908,-0.92168951,0.55555892,0.83144629,0.00000000,0.21549119,0.32248908,0.92168951,0.11163671,0.16708884,0.97958314,0.11163671,0.16708884,-0.97958314,0.54499954,0.81566823,-0.19391461,0.31098360,0.46540728,0.82863855,0.51374859,0.76891387,-0.38053530,0.39451277,0.59044158,0.70403147,0.46296579,0.69289225,-0.55275124,0.46296579,0.69289225,0.55275124,0.58925140,0.58925140,-0.55275124,0.65388960,0.65388960,-0.38053530,0.58925140,0.58925140,0.55275124,0.50212103,0.50212103,0.70403147,0.50212103,0.50212103,-0.70403147,0.65388960,0.65388960,0.38053530,0.39579454,0.39579454,-0.82863855,0.69365519,0.69365519,0.19391461,0.27426985,0.27426985,-0.92168951,0.70708334,0.70708334,0.00000000,0.27426985,0.27426985,0.92168951,0.14209418,0.14209418,0.97958314,0.14209418,0.14209418,-0.97958314,0.69365519,0.69365519,-0.19391461,0.39579454,0.39579454,0.82863855,0.16708884,0.11163671,-0.97958314,0.32248908,0.21549119,-0.92168951,0.81566823,0.54499954,-0.19391461,0.83144629,0.55555892,0.00000000,0.46540728,0.31098360,0.82863855,0.32248908,0.21549119,0.92168951,0.76891387,0.51374859,-0.38053530,0.59044158,0.39451277,0.70403147,0.69289225,0.46296579,-0.55275124,0.69289225,0.46296579,0.55275124,0.59044158,0.39451277,-0.70403147,0.76891387,0.51374859,0.38053530,0.46540728,0.31098360,-0.82863855,0.81566823,0.54499954,0.19391461,0.16708884,0.11163671,0.97958314,0.51713616,0.21420942,-0.82863855,0.65605640,0.27173680,-0.70403147,0.90633869,0.37540817,0.19391461,0.85436565,0.35386211,0.38053530,0.35834834,0.14841151,-0.92168951,0.92385632,0.38267159,0.00000000,0.35834834,0.14841151,0.92168951,0.18564409,0.07690664,0.97958314,0.18564409,0.07690664,-0.97958314,0.90633869,0.37540817,-0.19391461,0.51713616,0.21420942,0.82863855,0.85436565,0.35386211,-0.38053530,0.65605640,0.27173680,0.70403147,0.76989043,0.31888792,-0.55275124,0.76989043,0.31888792,0.55275124,0.69649345,0.13852352,0.70403147,0.54899746,0.10919522,0.82863855,0.81731617,0.16257210,-0.55275124,0.90697956,0.18039490,-0.38053530,0.81731617,0.16257210,0.55275124,0.69649345,0.13852352,-0.70403147,0.90697956,0.18039490,0.38053530,0.54899746,0.10919522,-0.82863855,0.96215707,0.19138157,0.19391461,0.38041323,0.07565539,-0.92168951,0.98077333,0.19507432,0.00000000,0.38041323,0.07565539,0.92168951,0.19708854,0.03918577,0.97958314,0.19708854,0.03918577,-0.97958314,0.96215707,0.19138157,-0.19391461,1.00000000,0.00000000,0.00000000,0.98098695,0.00000000,0.19391461,0.38785973,0.00000000,0.92168951,0.20096439,0.00000000,0.97958314,0.20096439,0.00000000,-0.97958314,0.38785973,0.00000000,-0.92168951,0.98098695,0.00000000,-0.19391461,0.55977052,0.00000000,0.82863855,0.92474133,0.00000000,-0.38053530,0.71013522,0.00000000,0.70403147,0.83333844,0.00000000,-0.55275124,0.83333844,0.00000000,0.55275124,0.71013522,0.00000000,-0.70403147,0.92474133,0.00000000,0.38053530,0.55977052,0.00000000,-0.82863855,0.69649345,-0.13852352,-0.70403147,0.81731617,-0.16257210,-0.55275124,0.90697956,-0.18039490,0.38053530,0.81731617,-0.16257210,0.55275124,0.54899746,-0.10919522,-0.82863855,0.96215707,-0.19138157,0.19391461,0.38041323,-0.07565539,-0.92168951,0.98077333,-0.19507432,0.00000000,0.38041323,-0.07565539,0.92168951,0.19708854,-0.03918577,0.97958314,0.19708854,-0.03918577,-0.97958314,0.96215707,-0.19138157,-0.19391461,0.54899746,-0.10919522,0.82863855,0.90697956,-0.18039490,-0.38053530,0.69649345,-0.13852352,0.70403147,0.85436565,-0.35386211,-0.38053530,0.90633869,-0.37540817,-0.19391461,0.65605640,-0.27173680,0.70403147,0.51713616,-0.21420942,0.82863855,0.76989043,-0.31888792,-0.55275124,0.76989043,-0.31888792,0.55275124,0.65605640,-0.27173680,-0.70403147,0.85436565,-0.35386211,0.38053530,0.51713616,-0.21420942,-0.82863855,0.90633869,-0.37540817,0.19391461,0.35834834,-0.14841151,-0.92168951,0.92385632,-0.38267159,0.00000000,0.35834834,-0.14841151,0.92168951,0.18564409,-0.07690664,0.97958314,0.18564409,-0.07690664,-0.97958314,0.32248908,-0.21549119,-0.92168951,0.46540728,-0.31098360,-0.82863855,0.83144629,-0.55555892,0.00000000,0.81566823,-0.54499954,0.19391461,0.32248908,-0.21549119,0.92168951,0.16708884,-0.11163671,0.97958314,0.16708884,-0.11163671,-0.97958314,0.81566823,-0.54499954,-0.19391461,0.46540728,-0.31098360,0.82863855,0.76891387,-0.51374859,-0.38053530,0.59044158,-0.39451277,0.70403147,0.69289225,-0.46296579,-0.55275124,0.69289225,-0.46296579,0.55275124,0.59044158,-0.39451277,-0.70403147,0.76891387,-0.51374859,0.38053530,0.46540728,-0.31098360,-0.82863855,0.50212103,-0.50212103,-0.70403147,0.58925140,-0.58925140,-0.55275124,0.65388960,-0.65388960,0.38053530,0.58925140,-0.58925140,0.55275124,0.39579454,-0.39579454,-0.82863855,0.69365519,-0.69365519,0.19391461,0.27426985,-0.27426985,-0.92168951,0.32248908,-0.21549119,-0.92168951,0.70708334,-0.70708334,0.00000000,0.27426985,-0.27426985,0.92168951,0.14209418,-0.14209418,0.97958314,0.14209418,-0.14209418,-0.97958314,0.16708884,-0.11163671,-0.97958314,0.69365519,-0.69365519,-0.19391461,0.39579454,-0.39579454,0.82863855,0.65388960,-0.65388960,-0.38053530,0.50212103,-0.50212103,0.70403147,0.51374859,-0.76891387,-0.38053530,0.54499954,-0.81566823,-0.19391461,0.39451277,-0.59044158,0.70403147,0.31098360,-0.46540728,0.82863855,0.46296579,-0.69289225,-0.55275124,0.46296579,-0.69289225,0.55275124,0.39451277,-0.59044158,-0.70403147,0.51374859,-0.76891387,0.38053530,0.31098360,-0.46540728,-0.82863855,0.54499954,-0.81566823,0.19391461,0.21549119,-0.32248908,-0.92168951,0.55555892,-0.83144629,0.00000000,0.21549119,-0.32248908,0.92168951,0.11163671,-0.16708884,0.97958314,0.11163671,-0.16708884,-0.97958314,0.14841151,-0.35834834,-0.92168951,0.21420942,-0.51713616,-0.82863855,0.38267159,-0.92385632,0.00000000,0.37540817,-0.90633869,0.19391461,0.14841151,-0.35834834,0.92168951,0.07687613,-0.18564409,0.97958314,0.07690664,-0.18564409,-0.97958314,0.37540817,-0.90633869,-0.19391461,0.21420942,-0.51713616,0.82863855,0.35386211,-0.85436565,-0.38053530,0.27173680,-0.65605640,0.70403147,0.31888792,-0.76989043,-0.55275124,0.31888792,-0.76989043,0.55275124,0.27173680,-0.65605640,-0.70403147,0.35386211,-0.85436565,0.38053530,0.13852352,-0.69649345,-0.70403147,0.16257210,-0.81731617,-0.55275124,0.18039490,-0.90697956,0.38053530,0.16257210,-0.81731617,0.55275124,0.10919522,-0.54899746,-0.82863855,0.19138157,-0.96215707,0.19391461,0.07565539,-0.38041323,-0.92168951,0.19507432,-0.98077333,0.00000000,0.07565539,-0.38041323,0.92168951,0.03918577,-0.19708854,0.97958314,0.03918577,-0.19708854,-0.97958314,0.19138157,-0.96215707,-0.19391461,0.10919522,-0.54899746,0.82863855,0.18039490,-0.90697956,-0.38053530,0.13852352,-0.69649345,0.70403147,0.00000000,-0.55977052,0.82863855,0.00000000,-0.38785973,0.92168951,0.00000000,-0.92474133,-0.38053530,0.00000000,-0.98098695,-0.19391461,0.00000000,-0.71013522,0.70403147,0.00000000,-0.83333844,-0.55275124,0.00000000,-0.83333844,0.55275124,0.00000000,-0.71013522,-0.70403147,0.00000000,-0.92474133,0.38053530,0.00000000,-0.55977052,-0.82863855,0.00000000,-0.98098695,0.19391461,0.00000000,-0.38785973,-0.92168951,0.00000000,-0.99996948,0.00000000,0.00000000,-0.20096439,0.97958314,0.00000000,-0.20096439,-0.97958314,-0.19138157,-0.96215707,0.19391461,-0.18039490,-0.90697956,0.38053530,-0.07565539,-0.38041323,-0.92168951,-0.10919522,-0.54899746,-0.82863855,-0.19507432,-0.98077333,0.00000000,-0.07565539,-0.38041323,0.92168951,-0.03918577,-0.19708854,0.97958314,-0.03918577,-0.19708854,-0.97958314,-0.19138157,-0.96215707,-0.19391461,-0.10919522,-0.54899746,0.82863855,-0.18039490,-0.90697956,-0.38053530,-0.13852352,-0.69649345,0.70403147,-0.16257210,-0.81731617,-0.55275124,-0.16257210,-0.81731617,0.55275124,-0.13852352,-0.69649345,-0.70403147,-0.31888792,-0.76989043,-0.55275124,-0.35389262,-0.85436565,-0.38053530,-0.31888792,-0.76989043,0.55275124,-0.27173680,-0.65605640,0.70403147,-0.27173680,-0.65605640,-0.70403147,-0.35389262,-0.85436565,0.38053530,-0.21420942,-0.51713616,-0.82863855,-0.37540817,-0.90633869,0.19391461,-0.14841151,-0.35834834,-0.92168951,-0.38267159,-0.92385632,0.00000000,-0.14841151,-0.35834834,0.92168951,-0.07690664,-0.18564409,0.97958314,-0.07690664,-0.18564409,-0.97958314,-0.37540817,-0.90633869,-0.19391461,-0.21420942,-0.51713616,0.82863855,-0.11163671,-0.16708884,-0.97958314,-0.21549119,-0.32248908,-0.92168951,-0.54499954,-0.81566823,-0.19391461,-0.55555892,-0.83144629,0.00000000,-0.31098360,-0.46540728,0.82863855,-0.21549119,-0.32248908,0.92168951,-0.51374859,-0.76891387,-0.38053530,-0.39451277,-0.59044158,0.70403147,-0.46296579,-0.69289225,-0.55275124,-0.46296579,-0.69289225,0.55275124,-0.39451277,-0.59044158,-0.70403147,-0.51374859,-0.76891387,0.38053530,-0.31098360,-0.46540728,-0.82863855,-0.54499954,-0.81566823,0.19391461,-0.11163671,-0.16708884,0.97958314,-0.39579454,-0.39579454,-0.82863855,-0.50212103,-0.50212103,-0.70403147,-0.69365519,-0.69365519,0.19391461,-0.65388960,-0.65388960,0.38053530,-0.27426985,-0.27426985,-0.92168951,-0.70708334,-0.70708334,0.00000000,-0.27426985,-0.27426985,0.92168951,-0.14209418,-0.14209418,0.97958314,-0.14209418,-0.14209418,-0.97958314,-0.69365519,-0.69365519,-0.19391461,-0.39579454,-0.39579454,0.82863855,-0.65388960,-0.65388960,-0.38053530,-0.50212103,-0.50212103,0.70403147,-0.58925140,-0.58925140,-0.55275124,-0.58925140,-0.58925140,0.55275124,-0.69289225,-0.46296579,-0.55275124,-0.76891387,-0.51374859,-0.38053530,-0.69289225,-0.46296579,0.55275124,-0.59044158,-0.39451277,0.70403147,-0.59044158,-0.39451277,-0.70403147,-0.76891387,-0.51374859,0.38053530,-0.46540728,-0.31098360,-0.82863855,-0.81566823,-0.54499954,0.19391461,-0.32248908,-0.21549119,-0.92168951,-0.83144629,-0.55555892,0.00000000,-0.32248908,-0.21549119,0.92168951,-0.16708884,-0.11163671,0.97958314,-0.16708884,-0.11163671,-0.97958314,-0.81566823,-0.54499954,-0.19391461,-0.46540728,-0.31098360,0.82863855,-0.18564409,-0.07690664,-0.97958314,-0.35834834,-0.14841151,-0.92168951,-0.90633869,-0.37540817,-0.19391461,-0.92385632,-0.38267159,0.00000000,-0.51713616,-0.21420942,0.82863855,-0.35834834,-0.14841151,0.92168951,-0.85436565,-0.35386211,-0.38053530,-0.65605640,-0.27173680,0.70403147,-0.76989043,-0.31888792,-0.55275124,-0.76989043,-0.31888792,0.55275124,-0.65605640,-0.27173680,-0.70403147,-0.85436565,-0.35386211,0.38053530,-0.51713616,-0.21420942,-0.82863855,-0.90633869,-0.37540817,0.19391461,-0.18564409,-0.07690664,0.97958314,-0.54899746,-0.10919522,-0.82863855,-0.69649345,-0.13852352,-0.70403147,-0.96215707,-0.19138157,0.19391461,-0.90697956,-0.18039490,0.38053530,-0.38041323,-0.07565539,-0.92168951,-0.98077333,-0.19507432,0.00000000,-0.38041323,-0.07565539,0.92168951,-0.19708854,-0.03918577,0.97958314,-0.19708854,-0.03918577,-0.97958314,-0.96215707,-0.19138157,-0.19391461,-0.54899746,-0.10919522,0.82863855,-0.90697956,-0.18039490,-0.38053530,-0.69649345,-0.13852352,0.70403147,-0.81731617,-0.16257210,-0.55275124,-0.81731617,-0.16257210,0.55275124,0.00000000,0.00000000,1.00000000,-0.20096439,0.00000000,-0.97958314,0.00000000,0.00000000,-1.00000000,0.14209418,-0.14209418,-0.97958314,0.11163671,-0.16708884,-0.97958314,0.07690664,-0.18564409,-0.97958314,0.03918577,-0.19708854,-0.97958314,0.00000000,-0.20096439,-0.97958314,-0.03918577,-0.19708854,-0.97958314,-0.07690664,-0.18564409,-0.97958314,-0.11163671,-0.16708884,-0.97958314,-0.14209418,-0.14209418,-0.97958314,-0.16708884,-0.11163671,-0.97958314,-0.18564409,-0.07690664,-0.97958314,-0.19708854,-0.03918577,-0.97958314};
    unsigned int bufNormLen = sizeof(normElems) / sizeof(normElems[0]);
    compCount = 3;
    elemCount = bufNormLen / compCount;
    csRef bufNormal = csRenderBuffer::CreateRenderBuffer((size_t) elemCount, CS_BUF_STATIC, CS_BUFCOMP_FLOAT, compCount);
    bufNormal->CopyInto(normElems, elemCount); //this is the only available method to copy apparently the data from memory/pointer and into the buffer….
    state->AddRenderBuffer(“normal”, bufNormal);

    //renderbuffers: texture coordinate
    //TO DO TO CHANGE retrieve the contents of the buffer from SMGData
    const float texElems[] = {0.061220,0.172764,0.080647,0.112472,0.135028,0.130630,0.107782,0.187599,0.025234,0.606227,0.028936,0.544141,0.054891,0.552189,0.048386,0.613417,0.051220,0.234138,0.092315,0.247027,0.020989,0.668252,0.040867,0.674443,0.044778,0.295915,0.081872,0.307471,0.015638,0.730152,0.031336,0.735069,0.039986,0.357878,0.073887,0.368405,0.356456,0.039893,0.466638,0.087931,0.448527,0.094534,0.333915,0.062714,0.008043,0.791799,0.017784,0.794887,0.036021,0.419934,0.067156,0.429587,0.138246,0.056841,0.196016,0.081502,0.032439,0.482033,0.060989,0.490881,0.999822,0.727971,1.001015,0.665501,1.020989,0.668252,1.015638,0.730152,0.005301,0.353109,0.006404,0.290637,0.447682,0.023355,0.488610,0.084811,0.998129,0.790429,1.008043,0.791799,0.004397,0.415586,0.034176,0.041338,0.003585,0.478066,0.015221,0.103359,0.002796,0.540546,0.010297,0.165735,0.001965,0.603025,0.007907,0.228175,0.001015,0.665501,0.978668,0.603891,0.976612,0.541519,1.002796,0.540546,1.001965,0.603025,0.964040,0.229802,0.958226,0.167665,1.010297,0.165735,1.007907,0.228175,0.981020,0.666245,0.967719,0.292073,1.006404,0.290637,0.983979,0.728561,0.970429,0.354404,1.005301,0.353109,0.595877,0.028785,0.511577,0.085667,0.988176,0.790799,0.972657,0.416765,1.004397,0.415586,0.904978,0.046051,1.034176,0.041338,0.974661,0.479141,1.003585,0.478066,0.946455,0.105901,1.015221,0.103359,0.945911,0.485214,0.941200,0.423411,0.885287,0.119299,0.823807,0.066742,0.950535,0.547029,0.908873,0.178221,0.955439,0.608804,0.921503,0.238833,0.961079,0.670468,0.929787,0.300102,0.968202,0.731911,0.936013,0.361679,0.647807,0.049313,0.532175,0.090357,0.978319,0.792904,0.952583,0.737970,0.941260,0.678089,0.902582,0.374475,0.893448,0.314080,0.659037,0.072825,0.548166,0.098187,0.968695,0.796706,0.910362,0.435188,0.777305,0.092963,0.917545,0.496040,0.835902,0.140195,0.924693,0.556900,0.864639,0.195793,0.932358,0.617639,0.881675,0.254305,0.825891,0.218332,0.796385,0.165337,0.909472,0.630184,0.899158,0.570827,0.845097,0.274835,0.921611,0.688967,0.859136,0.333015,0.937209,0.746646,0.870446,0.392059,0.657607,0.096698,0.558962,0.108237,0.959449,0.802140,0.880347,0.451545,0.745300,0.120662,0.889690,0.511206,0.851201,0.471783,0.839664,0.413538,0.719784,0.148411,0.650899,0.120164,0.862365,0.530171,0.763610,0.192518,0.873929,0.588406,0.791803,0.243985,0.886774,0.646148,0.811613,0.298972,0.902153,0.702905,0.826879,0.355773,0.922167,0.757809,0.565047,0.119643,0.950742,0.809109,0.882867,0.719668,0.864196,0.665186,0.796418,0.381227,0.780693,0.325402,0.907539,0.771302,0.810089,0.437969,0.641452,0.142821,0.567268,0.131697,0.942759,0.817485,0.822818,0.495127,0.697492,0.175520,0.835477,0.552316,0.735147,0.220347,0.848920,0.609159,0.761226,0.271289,0.823944,0.632559,0.808822,0.576971,0.733105,0.299125,0.709376,0.247895,0.841590,0.686906,0.751695,0.353000,0.863688,0.738990,0.767340,0.408333,0.893414,0.786940,0.781429,0.464419,0.630338,0.164376,0.566457,0.143852,0.935719,0.827110,0.794966,0.520772,0.676891,0.201534,0.929896,0.837788,0.879896,0.804521,0.767315,0.547906,0.753309,0.491989,0.657173,0.226088,0.618082,0.184573,0.782092,0.603438,0.685241,0.274482,0.798714,0.658036,0.706593,0.326609,0.818709,0.710884,0.723996,0.380807,0.844487,0.760584,0.739178,0.436135,0.563300,0.155686,0.825051,0.784147,0.795182,0.736662,0.711466,0.463755,0.697047,0.407985,0.867123,0.823829,0.725311,0.519808,0.604972,0.203174,0.558329,0.166865,0.925640,0.849281,0.739467,0.575708,0.637870,0.248852,0.754885,0.630980,0.662044,0.299554,0.772822,0.684979,0.681041,0.353007,0.745717,0.712709,0.726706,0.658807,0.655961,0.377673,0.639317,0.322626,0.770454,0.763731,0.670392,0.433769,0.805029,0.809363,0.683774,0.490356,0.855308,0.844632,0.697011,0.547009,0.591182,0.219956,0.551952,0.177121,0.923407,0.861297,0.710973,0.603325,0.618699,0.269516,0.923791,0.873467,0.844816,0.866689,0.681363,0.629851,0.668005,0.572713,0.599486,0.287785,0.576832,0.234706,0.696970,0.686034,0.616747,0.343256,0.716668,0.740438,0.631000,0.400016,0.743695,0.791492,0.643669,0.457442,0.783837,0.835890,0.655731,0.515122,0.544481,0.186237,0.760428,0.863335,0.713639,0.819179,0.627046,0.537243,0.616615,0.478315,0.836350,0.889729,0.637946,0.596005,0.562017,0.247230,0.536166,0.194033,0.927547,0.885321,0.650183,0.654292,0.580132,0.303378,0.665037,0.711638,0.594131,0.361033,0.684737,0.767195,0.605914,0.419482,0.571358,0.375584,0.560593,0.316042,0.648805,0.791726,0.630288,0.734412,0.580561,0.435564,0.678348,0.845702,0.589070,0.495737,0.732723,0.891172,0.597536,0.555923,0.831424,0.913428,0.606595,0.615943,0.546824,0.257354,0.527209,0.200363,0.935538,0.896247,0.617071,0.675566,0.573887,0.631595,0.567156,0.570413,0.531336,0.264931,0.517784,0.205114,0.948527,0.905466,0.833915,0.937286,0.581872,0.692529,0.540867,0.325557,0.592315,0.752973,0.548386,0.386583,0.607782,0.812401,0.554891,0.447811,0.635028,0.869370,0.560989,0.509119,0.696016,0.918498,0.580647,0.887528,0.561220,0.827236,0.532439,0.517967,0.528936,0.455859,0.638246,0.943159,0.536021,0.580066,0.856456,0.960107,0.539986,0.642122,0.515638,0.269848,0.508043,0.208201,0.966637,0.912069,0.544778,0.704085,0.520989,0.331748,0.551220,0.765862,0.525234,0.393773,0.507907,0.771825,0.506404,0.709363,0.501965,0.396975,0.501015,0.334499,0.510297,0.834265,0.502796,0.459454,0.515221,0.896641,0.503585,0.521934,0.534176,0.958662,0.504397,0.584414,0.947682,0.976645,0.505301,0.646891,0.499822,0.272029,0.498129,0.209572,0.988610,0.915189,1.095877,0.971215,1.404978,0.953949,0.470429,0.645596,0.472657,0.583235,0.483979,0.271440,0.488176,0.209201,1.011577,0.914333,0.467719,0.707927,0.481020,0.333755,0.464040,0.770198,0.478668,0.396109,0.458226,0.832335,0.476612,0.458481,0.446455,0.894099,0.474661,0.520859,0.404978,0.953949,0.385287,0.880701,0.408873,0.821779,0.445911,0.514786,0.450536,0.452971,0.323807,0.933258,0.441200,0.576589,0.147808,0.950687,0.095877,0.971215,0.436013,0.638321,0.468202,0.268089,0.478319,0.207096,0.032175,0.909643,0.011577,0.914333,0.429787,0.699898,0.461079,0.329532,0.421503,0.761167,0.455439,0.391196,0.381676,0.745694,0.393448,0.685920,0.432358,0.382361,0.441260,0.321911,0.364639,0.804207,0.424693,0.443100,0.335902,0.859805,0.417545,0.503960,0.277305,0.907037,0.410362,0.564812,0.159037,0.927175,0.402582,0.625524,0.452583,0.262030,0.468695,0.203294,0.048166,0.901813,0.157607,0.903302,0.245300,0.879339,0.370446,0.607941,0.380347,0.548455,0.437209,0.253354,0.459449,0.197860,0.058962,0.891763,0.359136,0.666985,0.421611,0.311033,0.345098,0.725165,0.409472,0.369816,0.325892,0.781668,0.399158,0.429173,0.296385,0.834663,0.389690,0.488794,0.263610,0.807482,0.291803,0.756015,0.362365,0.469829,0.373930,0.411594,0.219785,0.851589,0.351201,0.528217,0.150899,0.879836,0.339664,0.586461,0.422167,0.242191,0.450742,0.190891,0.065046,0.880358,0.326879,0.644227,0.402153,0.297095,0.311613,0.701028,0.386774,0.353852,0.382867,0.280332,0.407539,0.228698,0.280693,0.674598,0.296418,0.618773,0.364196,0.334814,0.261226,0.728711,0.348920,0.390841,0.235147,0.779654,0.335478,0.447684,0.197492,0.824480,0.322818,0.504873,0.141452,0.857179,0.310089,0.562031,0.442759,0.182515,0.067268,0.868303,0.294966,0.479228,0.308822,0.423029,0.130338,0.835624,0.176891,0.798466,0.281429,0.535580,0.393414,0.213060,0.435719,0.172890,0.066457,0.856148,0.267340,0.591668,0.363688,0.261010,0.251695,0.647001,0.341590,0.313094,0.233105,0.700875,0.323944,0.367441,0.209376,0.752105,0.206593,0.673391,0.223996,0.619193,0.298714,0.341964,0.318709,0.289116,0.185241,0.725518,0.282092,0.396562,0.157173,0.773912,0.267315,0.452094,0.118082,0.815427,0.253309,0.508011,0.379896,0.195479,0.429896,0.162212,0.063300,0.844315,0.239178,0.563865,0.344487,0.239416,0.058329,0.833136,0.104972,0.796826,0.211466,0.536245,0.225311,0.480192,0.325051,0.215853,0.367123,0.176171,0.197047,0.592015,0.295182,0.263338,0.181041,0.646993,0.272822,0.315021,0.162044,0.700446,0.254885,0.369020,0.137870,0.751148,0.239467,0.424292,0.425640,0.150719,0.118699,0.730484,0.139317,0.677374,0.210973,0.396675,0.226706,0.341193,0.091182,0.780045,0.197011,0.452991,0.355308,0.155368,0.423407,0.138704,0.051952,0.822879,0.183774,0.509644,0.305029,0.190637,0.170392,0.566231,0.270454,0.236269,0.155961,0.622327,0.245717,0.287291,0.131000,0.599985,0.143669,0.542558,0.216668,0.259562,0.243695,0.208508,0.116747,0.656744,0.196970,0.313966,0.099486,0.712215,0.181363,0.370149,0.076832,0.765294,0.168005,0.427287,0.344817,0.133311,0.423791,0.126533,0.044481,0.813763,0.155731,0.484878,0.283838,0.164110,0.036166,0.805968,0.062017,0.752771,0.127046,0.462757,0.137946,0.403995,0.260429,0.136665,0.336350,0.110271,0.116615,0.521685,0.213639,0.180821,0.105914,0.580518,0.184737,0.232805,0.094131,0.638967,0.165037,0.288362,0.080132,0.696622,0.150183,0.345707,0.427547,0.114679,0.060593,0.683958,0.071358,0.624416,0.117071,0.324434,0.130288,0.265587,0.046824,0.742647,0.106595,0.384057,0.331424,0.086572,0.435539,0.103753,0.027209,0.799637,0.097536,0.444077,0.232723,0.108828,0.089070,0.504263,0.178349,0.154298,0.080561,0.564436,0.148805,0.208274,0.495265,0.147144,1.017784,0.794887,0.995265,0.852857,1.032175,0.909643,1.048166,0.901813,1.058962,0.891763,1.065046,0.880358,1.067268,0.868303,1.066457,0.856148,1.063300,0.844315,1.058329,0.833136,1.051952,0.822879,1.044481,0.813763,1.036166,0.805968,1.027209,0.799637};
    unsigned int bufTexLen = sizeof(texElems) / sizeof(texElems[0]);
    compCount = 2;
    elemCount = bufTexLen / compCount;
    csRef bufTex = csRenderBuffer::CreateRenderBuffer((size_t) elemCount, CS_BUF_STATIC, CS_BUFCOMP_FLOAT, compCount);
    bufTex->CopyInto(texElems, elemCount); //this is the only available method to copy apparently the data from memory/pointer and into the buffer….
    state->AddRenderBuffer(“texture coordinate”, bufTex);

    //renderbuffers: color
    //TO DO TO CHANGE retrieve the contents of the buffer from SMGData
    const float colorElems[] = {1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1,1.000000,1.000000,1.000000,1};
    unsigned int bufColorLen = sizeof(colorElems) / sizeof(colorElems[0]);
    compCount = 4;
    elemCount = bufColorLen / compCount;
    csRef bufColor = csRenderBuffer::CreateRenderBuffer((size_t) elemCount, CS_BUF_STATIC, CS_BUFCOMP_FLOAT, compCount);
    bufColor->CopyInto(colorElems, elemCount); //this is the only available method to copy apparently the data from memory/pointer and into the buffer….
    state->AddRenderBuffer(“color”, bufColor);

    //triangles
    const float triangles[] = {1,2,3,0,1,3,5,6,7,4,5,7,0,3,9,8,0,9,4,7,11,10,4,11,8,9,13,12,8,13,10,11,15,14,10,15,12,13,17,16,12,17,19,20,21,18,19,21,14,15,23,22,14,23,16,17,25,24,16,25,18,21,27,26,18,27,24,25,29,28,24,29,26,27,2,1,26,2,28,29,6,5,28,6,31,32,33,30,31,33,35,12,16,34,35,16,37,19,18,36,37,18,30,33,39,38,30,39,34,16,24,40,34,24,36,18,26,41,36,26,40,24,28,42,40,28,41,26,1,43,41,1,42,28,5,44,42,5,43,1,0,45,43,0,44,5,4,46,44,4,45,0,8,47,45,8,46,4,10,48,46,10,47,8,12,35,47,12,50,51,52,49,50,52,54,55,56,53,54,56,49,52,31,57,49,31,53,56,59,58,53,59,57,31,30,60,57,30,58,59,62,61,58,62,64,37,36,63,64,36,60,30,38,65,60,38,61,62,67,66,61,67,63,36,69,68,63,69,66,67,71,70,66,71,68,69,73,72,68,73,70,71,51,50,70,51,72,73,55,54,72,55,75,66,70,74,75,70,77,68,72,76,77,72,74,70,50,78,74,50,76,72,54,79,76,54,78,50,49,80,78,49,79,54,53,81,79,53,80,49,57,82,80,57,81,53,58,83,81,58,82,57,60,84,82,60,83,58,61,85,83,61,87,64,63,86,87,63,84,60,65,88,84,65,85,61,66,75,85,66,86,63,68,77,86,68,90,82,84,89,90,84,92,83,85,91,92,85,94,87,86,93,94,86,89,84,88,95,89,88,91,85,75,96,91,75,93,86,77,97,93,77,96,75,74,98,96,74,97,77,76,99,97,76,98,74,78,100,98,78,99,76,79,101,99,79,100,78,80,102,100,80,101,79,81,103,101,81,102,80,82,90,102,82,103,81,83,92,103,83,105,99,101,104,105,101,107,100,102,106,107,102,104,101,103,108,104,103,106,102,90,109,106,90,108,103,92,110,108,92,109,90,89,111,109,89,110,92,91,112,110,91,114,94,93,113,114,93,111,89,95,115,111,95,112,91,96,116,112,96,113,93,97,117,113,97,116,96,98,118,116,98,117,97,99,105,117,99,118,98,100,107,118,100,120,112,116,119,120,116,122,113,117,121,122,117,119,116,118,123,119,118,121,117,105,124,121,105,123,118,107,125,123,107,124,105,104,126,124,104,125,107,106,127,125,106,126,104,108,128,126,108,127,106,109,129,127,109,128,108,110,130,128,110,129,109,111,131,129,111,130,110,112,120,130,112,132,114,113,122,132,113,131,111,115,133,131,115,135,127,129,134,135,129,137,128,130,136,137,130,134,129,131,138,134,131,136,130,120,139,136,120,141,132,122,140,141,122,138,131,133,142,138,133,139,120,119,143,139,119,140,122,121,144,140,121,143,119,123,145,143,123,144,121,124,146,144,124,145,123,125,147,145,125,146,124,126,148,146,126,147,125,127,135,147,127,148,126,128,137,148,128,150,145,147,149,150,147,152,146,148,151,152,148,149,147,135,153,149,135,151,148,137,154,151,137,153,135,134,155,153,134,154,137,136,156,154,136,155,134,138,157,155,138,156,136,139,158,156,139,160,141,140,159,160,140,157,138,142,161,157,142,158,139,143,162,158,143,159,140,144,163,159,144,162,143,145,150,162,145,163,144,146,152,163,146,165,157,161,164,165,161,167,158,162,166,167,162,169,159,163,168,169,163,166,162,150,170,166,150,168,163,152,171,168,152,170,150,149,172,170,149,171,152,151,173,171,151,172,149,153,174,172,153,173,151,154,175,173,154,174,153,155,176,174,155,175,154,156,177,175,156,176,155,157,165,176,157,177,156,158,167,177,158,178,160,159,169,178,159,180,174,176,179,180,176,182,175,177,181,182,177,179,176,165,183,179,165,181,177,167,184,181,167,186,178,169,185,186,169,183,165,164,187,183,164,184,167,166,188,184,166,185,169,168,189,185,168,188,166,170,190,188,170,189,168,171,191,189,171,190,170,172,192,190,172,191,171,173,193,191,173,192,172,174,180,192,174,193,173,175,182,193,175,195,190,192,194,195,192,197,191,193,196,197,193,194,192,180,198,194,180,196,193,182,199,196,182,198,180,179,200,198,179,199,182,181,201,199,181,200,179,183,202,200,183,201,181,184,203,201,184,205,186,185,204,205,185,202,183,187,206,202,187,203,184,188,207,203,188,204,185,189,208,204,189,207,188,190,195,207,190,208,189,191,197,208,191,210,202,206,209,210,206,212,203,207,211,212,207,214,204,208,213,214,208,211,207,195,215,211,195,213,208,197,216,213,197,215,195,194,217,215,194,216,197,196,218,216,196,217,194,198,219,217,198,218,196,199,220,218,199,219,198,200,221,219,200,220,199,201,222,220,201,221,200,202,210,221,202,222,201,203,212,222,203,223,205,204,214,223,204,225,219,221,224,225,221,227,220,222,226,227,222,224,221,210,228,224,210,226,222,212,229,226,212,231,223,214,230,231,214,228,210,209,232,228,209,229,212,211,233,229,211,230,214,213,234,230,213,233,211,215,235,233,215,234,213,216,236,234,216,235,215,217,237,235,217,236,216,218,238,236,218,237,217,219,225,237,219,238,218,220,227,238,220,240,234,236,239,240,236,242,235,237,241,242,237,239,236,238,243,239,238,241,237,225,244,241,225,243,238,227,245,243,227,244,225,224,246,244,224,245,227,226,247,245,226,246,224,228,248,246,228,247,226,229,249,247,229,251,231,230,250,251,230,248,228,232,252,248,232,249,229,233,253,249,233,250,230,234,240,250,234,253,233,235,242,253,235,255,247,249,254,255,249,257,251,250,256,257,250,259,248,252,258,259,252,254,249,253,260,254,253,256,250,240,261,256,240,260,253,242,262,260,242,261,240,239,263,261,239,262,242,241,264,262,241,263,239,243,265,263,243,264,241,244,266,264,244,265,243,245,267,265,245,266,244,246,268,266,246,267,245,247,255,267,247,268,246,248,259,268,248,270,264,266,269,270,266,272,265,267,271,272,267,269,266,268,273,269,268,271,267,255,274,271,255,273,268,259,275,273,259,274,255,254,276,274,254,278,257,256,277,278,256,275,259,258,279,275,258,276,254,260,280,276,260,277,256,261,281,277,261,280,260,262,282,280,262,281,261,263,283,281,263,282,262,264,270,282,264,283,263,265,272,283,265,285,280,282,284,285,282,287,281,283,286,287,283,284,282,270,288,284,270,286,283,272,289,286,272,288,270,269,290,288,269,289,272,271,291,289,271,290,269,273,292,290,273,291,271,274,293,291,274,292,273,275,294,292,275,293,274,276,295,293,276,297,278,277,296,297,277,294,275,279,298,294,279,295,276,280,285,295,280,296,277,281,287,296,281,300,292,294,299,300,294,302,293,295,301,302,295,304,297,296,303,304,296,299,294,298,305,299,298,301,295,285,306,301,285,303,296,287,307,303,287,306,285,284,308,306,284,307,287,286,309,307,286,308,284,288,310,308,288,309,286,289,311,309,289,310,288,290,312,310,290,311,289,291,313,311,291,312,290,292,314,312,292,313,291,293,302,313,293,316,310,312,315,316,312,318,311,313,317,318,313,315,312,314,319,315,314,317,313,302,320,317,302,319,314,322,321,319,322,320,302,301,323,320,301,325,304,303,324,325,303,321,322,327,326,321,327,323,301,306,328,323,306,324,303,307,329,324,307,328,306,308,330,328,308,329,307,309,331,329,309,330,308,310,316,330,310,331,309,311,318,331,311,333,328,330,332,333,330,335,329,331,334,335,331,332,330,316,336,332,316,334,331,318,337,334,318,336,316,315,338,336,315,337,318,317,339,337,317,338,315,319,340,338,319,339,317,320,341,339,320,340,319,321,342,340,321,341,320,323,343,341,323,345,325,324,344,345,324,342,321,326,346,342,326,343,323,328,333,343,328,344,324,329,335,344,329,348,340,342,347,348,342,350,341,343,349,350,343,352,345,344,351,352,344,347,342,346,353,347,346,349,343,333,354,349,333,351,344,335,355,351,335,354,333,332,356,354,332,355,335,334,357,355,334,356,332,336,358,356,336,357,334,337,359,357,337,358,336,338,360,358,338,359,337,339,361,359,339,360,338,340,348,360,340,361,339,341,350,361,341,363,358,360,362,363,360,365,359,361,364,365,361,362,360,348,366,362,348,364,361,350,367,364,350,366,348,347,368,366,347,367,350,349,369,367,349,371,352,351,370,371,351,368,347,353,372,368,353,369,349,354,373,369,354,370,351,355,374,370,355,373,354,356,375,373,356,374,355,357,376,374,357,375,356,358,363,375,358,376,357,359,365,376,359,378,370,374,377,378,374,380,373,375,379,380,375,377,374,376,381,377,376,379,375,363,382,379,363,381,376,365,383,381,365,382,363,362,384,382,362,383,365,364,385,383,364,384,362,366,386,384,366,385,364,367,387,385,367,386,366,368,388,386,368,387,367,369,389,387,369,390,371,370,378,390,370,388,368,372,391,388,372,389,369,373,380,389,373,393,385,387,392,393,387,395,386,388,394,395,388,392,387,389,396,392,389,398,390,378,397,398,378,394,388,391,399,394,391,396,389,380,400,396,380,397,378,377,401,397,377,400,380,379,402,400,379,401,377,381,403,401,381,402,379,382,404,402,382,403,381,383,405,403,383,404,382,384,406,404,384,405,383,385,393,405,385,406,384,386,395,406,386,408,402,404,407,408,404,410,403,405,409,410,405,407,404,406,411,407,406,409,405,393,412,409,393,411,406,395,413,411,395,412,393,392,414,412,392,413,395,394,415,413,394,414,392,396,416,414,396,418,398,397,417,418,397,415,394,399,419,415,399,416,396,400,420,416,400,417,397,401,421,417,401,420,400,402,408,420,402,421,401,403,410,421,403,423,415,419,422,423,419,425,416,420,424,425,420,427,417,421,426,427,421,424,420,408,428,424,408,426,421,410,429,426,410,428,408,407,430,428,407,429,410,409,431,429,409,430,407,411,432,430,411,431,409,412,433,431,412,432,411,413,434,432,413,433,412,414,435,433,414,434,413,415,423,434,415,435,414,416,425,435,416,436,418,417,427,436,417,438,432,434,437,438,434,440,433,435,439,440,435,437,434,423,441,437,423,439,435,425,442,439,425,444,436,427,443,444,427,441,423,422,445,441,422,442,425,424,446,442,424,443,427,426,447,443,426,446,424,428,448,446,428,447,426,429,449,447,429,448,428,430,450,448,430,449,429,431,451,449,431,450,430,432,438,450,432,451,431,433,440,451,433,453,448,450,452,453,450,455,449,451,454,455,451,452,450,438,456,452,438,454,451,440,457,454,440,456,438,437,458,456,437,457,440,439,459,457,439,458,437,441,460,458,441,459,439,442,461,459,442,463,444,443,462,463,443,460,441,445,464,460,445,461,442,446,465,461,446,462,443,447,466,462,447,465,446,448,453,465,448,466,447,449,455,466,449,468,460,464,467,468,464,470,461,465,469,470,465,472,462,466,471,472,466,469,465,453,473,469,453,471,466,455,474,471,455,473,453,452,475,473,452,474,455,454,476,474,454,475,452,456,477,475,456,476,454,457,478,476,457,477,456,458,479,477,458,478,457,459,480,478,459,479,458,460,468,479,460,480,459,461,470,480,461,481,463,462,472,481,462,483,477,479,482,483,479,485,478,480,484,485,480,482,479,468,486,482,468,484,480,470,487,484,470,489,481,472,488,489,472,486,468,467,490,486,467,487,470,469,491,487,469,488,472,471,492,488,471,491,469,473,493,491,473,492,471,474,494,492,474,493,473,475,495,493,475,494,474,476,496,494,476,495,475,477,483,495,477,496,476,478,485,496,478,19,497,20,39,498,499,38,39,499,37,497,19,64,497,37,65,38,499,88,65,499,87,497,64,94,497,87,95,88,499,114,497,94,115,95,499,133,115,499,132,497,114,141,497,132,142,133,499,160,497,141,161,142,499,164,161,499,178,497,160,186,497,178,187,164,499,205,497,186,206,187,499,209,206,499,223,497,205,231,497,223,232,209,499,251,497,231,252,232,499,258,252,499,257,497,251,278,497,257,279,258,499,298,279,499,297,497,278,305,298,499,304,497,297,325,497,304,500,305,499,501,500,499,345,497,325,502,501,499,352,497,345,371,497,352,503,502,499,504,503,499,390,497,371,398,497,390,505,504,499,418,497,398,506,505,499,507,506,499,436,497,418,444,497,436,508,507,499,463,497,444,509,508,499,510,509,499,481,497,463,489,497,481,511,510,499,29,493,495,6,29,495,2,494,496,3,2,496,6,495,483,7,6,483,3,496,485,9,3,485,7,483,482,11,7,482,9,485,484,13,9,484,489,20,497,11,482,486,15,11,486,13,484,487,17,13,487,488,21,20,489,488,20,15,486,490,23,15,490,17,487,491,25,17,491,21,488,492,27,21,492,498,511,499,25,491,493,29,25,493,27,492,494,2,27,494};
    int i, n;
    n = sizeof(triangles) / sizeof(triangles[0]);
    for (i = 0; i< n; i = i + 3) { state->AddTriangle(csTriangle(triangles[i], triangles[i+1], triangles[i+2][]

#eulora Logs for 16 Jan 2020

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
feedbot: http://ossasepia.com/2020/01/16/crystalspace-creating-factories-and-meshes-setting-the-client-down/ << Ossa Sepia — CrystalSpace: Creating Factories and Meshes, Setting the Client Down [10:26]
mircea_popescu: ^ Pretty great list of accomplishments, really. [11:25]
mircea_popescu: diana_coman, reading all this all over again, it makes regret quite palpable. [11:26]
mircea_popescu: can't avoid revisiting the logic that lead there. [11:29]
diana_coman: mircea_popescu: thanks; there is at least some weight lifted as I could finally clear up and archive the lot of it. [11:31]
diana_coman: feels more like the start of a new year than 1st of jan did tbh. [11:31]
mircea_popescu: http://logs.ossasepia.com/log/trilema/2019-12-30#1956382 which lead to took us to http://logs.ossasepia.com/log/trilema/2019-12-30#1956451 which then two weeks later, as the dilemma wasn't resolving, yielded http://ossasepia.com/2020/01/10/eulora-logs-for-10-Jan-2020#1001227 [11:32]
ossabot: (trilema) 2019-12-30 mircea_popescu: diana_coman, let's restate this, so currently work on nailing down the comms protocol is stalled on a definitive universal data model, which is stalled on graphical use in the client, that about it ? [11:32]
ossabot: (trilema) 2019-12-30 mircea_popescu: diana_coman, the way this coming to a head is working out in my head is as follows : you have practically speaking the option to either a) go trawl the entire internet, drag out ~everything~ that's conceivably useful (submit expenses report for stuff that's behind reasonable paywalls i guess) and then we systematize the pile ; or else write a possible-lifeform-generation machine and see what you want it to save. [11:32]
ossabot: Logged on 2020-01-10 08:13:29 mircea_popescu: so it seems to me the situation can be rather summarized like this : for a while i was in costa rica, and played eulora daily. for that while we focused on short term, clear payoff, necessarily smaller changes, which reliably drove small but visible improvement to the game. [11:32]
mircea_popescu: diana_coman, haha, i bet it was a larger new year-ing than the arbitrary timedateline thing [11:33]
diana_coman: aha; well, on occasion I manage to sync with the arbitrary timedateline thing too but it doesn't happen all that often so not exactly surprising this time either. [11:34]
mircea_popescu: anyway, there's a self-evident neglected angle here. do you have an article in the pipeline explaining why the de facto item can't be used ? [11:35]
mircea_popescu: something like "and here's why cal3d data format's no good" or w/e it is we in fact use. is that the one ? or rather "cs data format" ? [11:35]
diana_coman: mircea_popescu: hm, my pipeline for this part was/is empty; not sure I fully get what you have in mind there; currently the client uses a mixture really ie cal3d for the animations/skeletons but otherwise set & loaded from xml/cs format [11:39]
diana_coman: aka xml specifies which cal3d file to use where, pretty much (when there is any cal3d file used at all, ofc). [11:39]
diana_coman: I didn't contemplate as such any removal of the cal3d data format, no [11:40]
diana_coman: removal of the xml/cs yes. [11:40]
diana_coman: do you mean an article explaining why the cs xml format is no good? [11:42]
mircea_popescu: diana_coman, well, it literally says, "currently work on nailing down the comms protocol is stalled on a definitive universal data model" [12:01]
mircea_popescu: inasmuch as we do have a ~de facto~ data model, the gap must be bridged. "why aren't you using what you are already using again ? [12:02]
mircea_popescu: " [12:02]
mircea_popescu: in fact, do we even have an actual statement of wtf data model we use for graphics ? given a file called graphics.tar.gz, can we establish whether it is or it is not eulora graphics through any other process besides "put it through the runtime see what happens" ? [12:03]
diana_coman: mircea_popescu: the key trouble with "what you are already using" is that it's meant for preloading/known upfront; this ties in to some extent with the xml because in the xml everything is hard coded and has to be already in place/can't change etc. [12:04]
mircea_popescu: let's unwind this. [12:06]
diana_coman: mircea_popescu: there is no actual statement as such of data model, no; the way cs goes about it is to say here and there that you may specify this or that in one place or another but I haven't found a proper data model anywhere; and otherwise it would need extraction from the xml loaders essentially. [12:06]
diana_coman: ok; just to let you know that I'll need to go in ~10 minutes. [12:06]
mircea_popescu: a ok. [12:06]
mircea_popescu: then listen, ping me when it's convenient we get to it. [12:06]
diana_coman: all right; I expect to be back the latest 7:30pm so in 3.5 hours from now. [12:07]
mircea_popescu: cool, i'll be around [12:07]
diana_coman: thanks [12:07]
mircea_popescu: for that time : there's two different items here, not related in any fundamental sense though i suppose married by happenstance and coincidence. [12:08]
mircea_popescu: firstly, if man says "i went as far as i could, but as i reached X-seashore, i needed either a boat or a plane to continue. for lack of either, i had to turn back." then man is held to show three tings : 1. that indeed the X-seashore is liminal, a categorical discontinuity in the medium ; 2. that indeed "boat or plane" ennumerates the list of possible manners of crossing ; 3. that indeed he lacks each of them for fundamenta [12:14]
mircea_popescu: l, irremediable reasons. [12:14]
mircea_popescu: lack of answer to the very simple "why didn't you merely continue on foot [as you went before]" defeats all three of these. [12:14]
mircea_popescu: thus, to be able to say, like we have, "look, can't continue here, because we don't know what we want the data to look like, and we don't know how to find out" we must, besides the various cases we've covered, also explain what is wrong with ~the thing we're currently using~. [12:17]
mircea_popescu: it obviously can't be unusable just because we're using it ; and it has to be wrong ~enough~ to warrant even taking notice in the first place. [12:18]
mircea_popescu: now, secondly, to the other item : there's perhaps some issues with the "can't change" symbol above, above and beyond the contextually-self-obvious ambiguity, whereby it's not really clear what sort of property it is and to what kind of node it attaches. [12:19]
mircea_popescu: do you mean something like "xml does not permit a model animated by scenes a, b, c, d and e be changed on the fly such as to be now animated by scenes a, c, d, f and g" ? [12:20]
mircea_popescu: or do you rather mean something like "the way ps packaged cs's packaging of cal3d is SO FUCKING FRIABLE, we won't be able to use the ~actual graphical data~ in any sensible way without first breaking their dumb shit". [12:21]
mircea_popescu: because these aren't at all the same thing, breaking their dumb shit, world.xml or whatever it is, the inept wrapper masquerading as a top level node after the fact has no actual bearing on genuine loading or the gfx data model at all. [12:21]
mircea_popescu: i think i said somewhere, that minute change in the vein of the first lobe above, where we decide mid-run to alter the interior properties of a game object, is not seriously contemplated, and even if to be ever implemented it will be implemented on the structure of having BOTH objects, and switching one for the other ; there's no interest in fully exposed parametrization whereby the (say, by way of example) shade hue of the [12:24]
mircea_popescu: flaming portion of a flaming sword is reflective of the player wielding it birthdate. [12:24]
diana_coman: mircea_popescu: I'm here and I re-read your statements a few times, still not fully sure what your current view of the whole thing is, hm. [15:34]
diana_coman: first of all, there is *no clear definition* of "current graphical data format", mainly because there isn't even just one, but a mixture of versions of different things depending on which exact level you want to look at. Second and even leaving that mixture aside for a moment, I still consider the root trouble the fundamental difference of purpose: their purpose was literally to a. list FULL set of resources b. describe some resources … [15:38]
diana_coman: … (it's not even clear if absolutely ALL of them…) via xml so that non-programmers/no compiling required to change them [15:38]
diana_coman: there is indeed at the very least one layer of ps-packaging of cs's packaging is enough to send one screaming; but it's unclear if that's the full trouble; and ftr current client doesn't use much of cal3d as such anyway, rather minimal (the chars are not made out of submeshes as they should be, for the most obvious thing). [15:43]
diana_coman: I think it's also worth noting that if we "define graphical data format" on the basis of "this is what current xml & assorted requires", the result is cs/ps (and even version, at that) specific, not so much focused on what we want to be able to do with it as focused on "what can be done with this existing pile". [16:00]
mircea_popescu: there's definitely a de-facto definition since the item compiles [16:22]
mircea_popescu: now, it might be very messy and ad-hoc, but it's not wishy=washy " a lot of different" literautre. [16:22]
mircea_popescu: diana_coman, it's not clear we "want" anything in the first place, besides "the damn thing to work" [16:25]
diana_coman: mircea_popescu: uhm, I'm rather confused; I thought we wanted to be able to send *everything* to client; don't we? [16:30]
mircea_popescu: yea [16:30]
diana_coman: so then I don't quite follow. [16:31]
diana_coman: are you saying "investigate how to make use of existing formats so that we can send …uhm, everything via them"? [16:31]
diana_coman: or "what can we send using existing formats"? [16:32]
mircea_popescu: "do we even know WHAT of everything can't be sent by existing formats" stumbled into "do we actually even know wtf tey are" [16:33]
mircea_popescu: we seem to have agreed something needs fixing without, apparently, either establishing what or why. [16:33]
diana_coman: uhm; the part that "needs fixing" was initially "fully pre-defined world AND resources" needs changing to "load on the fly everything" [16:35]
diana_coman: then there is existing PS "communication protocol" that doesn't support sending resources as such [16:36]
mircea_popescu: alright. [16:36]
diana_coman: unless one calls "resource" a text message (limited length though I don't know by heart how much exactly) [16:36]
mircea_popescu: this is fine. but at this juncture the observation fits, that indeed fixing that does not automatically require changing the underlying data structure. [16:36]
diana_coman: I guess the trouble starts from the other end, namely that we don't actually know what data structure we want/need in the first place [16:37]
mircea_popescu: no, that's well established. in which context, explaining what we don't like about what we presently have can't be "we use it stupidly" [16:39]
diana_coman: uhm. [16:39]
mircea_popescu: is this still unclear ? [16:40]
diana_coman: I don't fully get how is "we use it stupidly" even supposed to figure out there; but the only thing I can see now is to go back into the whole thing, do what nobody did and document the spaghetti so that then we can say here's the spaghetti. [16:41]
mircea_popescu: what i meant by "we use it stupidly" here is this : that there's some data model, apparently entirely undocumented, which gets used through some ad-hoc stupid ps-style thing, call it "world.xml" [16:43]
mircea_popescu: the fact that the world.xml item adds a lot of friability is not imputable to the models loaded per se, but is due to the way in which they are loaded. [16:43]
mircea_popescu: this makes no sense ? [16:43]
diana_coman: ah, you mean "the cs xml might still be fine even if the ps xml is not"? [16:44]
diana_coman: because yes, there's the added confusion that BOTH cs AND ps add their own layer of xml "formats" [16:44]
mircea_popescu: something like that. [16:44]
mircea_popescu: i dunno even if the cs xml per se, or sometrhing even deeplier buried in cal3d, or maybe some remnant only partially digested by cs [16:44]
mircea_popescu: there's a lot of similarity between this sort of forsenic approach to computer science and fucking cladistics over here. [16:46]
diana_coman: cal3d data format was never under discussion for change; it is clear enough and documented and it was considered fine for what it is [16:46]
diana_coman: that being said, it's not a universal format anyway in that it doesn't include everything we want as "graphics" [16:46]
mircea_popescu: but what's missing ? [16:46]
diana_coman: what's cladistics? (it turns out I'm quite tired too) [16:47]
mircea_popescu: cladisticts is the effort to sort all living things into a proper v-tree [16:47]
mircea_popescu: such that all groups include all the downstream members. [16:47]
diana_coman: I can see the similarity indeed. [16:47]
mircea_popescu: it's typically preoccupied with producing monophyletic groups, by wringing the polyphyletics out of paraphyletic groups. [16:48]
diana_coman: mircea_popescu: cal3d formats allow def for: skeleton, animation, mesh, material. [16:48]
diana_coman: that's it [16:48]
mircea_popescu: we want something more than that ? [16:48]
diana_coman: so no terrain for instance [16:48]
mircea_popescu: it can't be a mesh/material ? [16:48]
diana_coman: it's fine for characters; arguably at a pinch for structures too since they can be "characters lacking this and that" [16:49]
diana_coman: but zero terrain, zero 2D icons and whatnots (gui which is also graphics); not to mention sound and particles whatevers [16:49]
mircea_popescu: this is the sort of q that'd have been copiously helped by a :"here's all the gane art currently known to mankind : 114 YB. choosing cal3d models throws out 112YB. choosing this throws out X" and so on [16:50]
mircea_popescu: diana_coman, i don't understand, an icon, the simplest iota of grapics, a fucking square image, is somehow unsuported ? [16:50]
diana_coman: everyone was very busy creating new formats really. [16:50]
diana_coman: cal3d format is meant specifically for describing animating *skeleton-based* sprites. [16:51]
diana_coman: not even "animated" in general [16:51]
mircea_popescu: so the idea being that it's incomplete as such ? [16:51]
diana_coman: sure, I can look/think if one can force-stuff it somewhere [16:51]
diana_coman: it's …specialized, yes; not universal, no. [16:51]
diana_coman: not even meant to or claiming to be universal. [16:52]
mircea_popescu: so it's not proper to say cs is a wrapper class on cal3d wrt graphics, it does a lot of actual genuine extension, for instance by supporting anything besides "character models" [16:52]
diana_coman: well yes; cal3d is "character animation library", that's it. [16:54]
diana_coman: (and as I mentioned earlier: skeleton-based character animation, to be precise) [16:55]
mircea_popescu: do you recall at some point cca 2017 we did a test run of "importing gfx", i published an article on trilema. what was it ? [16:57]
diana_coman: let me dig it out [16:57]
diana_coman: mircea_popescu: http://trilema.com/2016/eulora-012/ [17:00]
mircea_popescu: keks 2015. we added those houses, as you recall they weren't there to begin with ; needless to say chet didn't document it uselfully. did you document anywhere at the time or hence how the process that yielded eg http://trilema.com/2016/eulora-012/ ? [17:00]
mircea_popescu: ha, simultaneous [17:01]
diana_coman: turns out 2016 ; I recalled I had it linked from my http://ossasepia.com/2018/03/30/my-first-2-years-as-cto-for-minigame/ [17:01]
diana_coman: surprisingly useful that single article of mine on the topic, huh. [17:01]
mircea_popescu: yeah [17:01]
mircea_popescu: but yes, it was mid-2016 [17:03]
diana_coman: re documenting that process: somewhere in the archives I still have all the scripts and the mess but it didn't get streamlined as such, mainly because of all the issues with …different bits and pieces in the .blend files anyway; I don't recall publishing a write-up (at that time it was way less public too) [17:03]
diana_coman: I attempted to script the process, yes [17:04]
mircea_popescu: was it pretty much "collect blend files, select those that work" ? [17:04]
diana_coman: it was: here's this 2GB (or similar) archive with .blend files; get out of them whatever works to put in the client. [17:04]
diana_coman: I attempted to figure out the whole shit (I was clueless re Blender to start with and so on) [17:05]
mircea_popescu: Buoyed by having reached at least the end of the 32 bits to 64 bits migration swamp (it felt like hell at the time but retrospectively it was of course just a minor puddle of a swamp, there was and surely is worse to come), everything seemed suddenly within reach in the summer of 2016: the practically infinite landscape, the migration to RSA-based authentication, the graphics market place and with it the final client releas [17:05]
mircea_popescu: e that could be afterwards seamlessly updated as and when the server made new content available. [17:05]
diana_coman: I attempted to script the whole thing so that it runs headless blender, exports what's needed, then writes it automatically in client's favourite xml places [17:05]
mircea_popescu: funny what passed for "back years ago"… back years ago. the quote is q1 2018 discussing q3 2016, ringing q1 2020 [17:05]
diana_coman: myeah, there were quite a few turns of the sort "oh, now you need to do the client too because guess what, who else" [17:06]
mircea_popescu: communities, the greatest thing ever for as long as nothing needs to be done. [17:07]
diana_coman: the scripting part went fine as long as there was the expected in the expected place, as scripting tends to go. [17:07]
diana_coman: but the sad thing was that the "expected place" and even the whole of "what is there" was utterly random pretty much [17:08]
mircea_popescu: why did you care ? [17:08]
diana_coman: I don't recall now how many .blend files were in total, but there are there those that made it and they don't seem all that many [17:08]
mircea_popescu: is the idea the original search was ~exhaustive ? [17:08]
diana_coman: mircea_popescu: what do you mean? how do you even decide "where should they be" if there's no standard they should be there/here/x ? [17:09]
mircea_popescu: you mean eulora doesn't look in always the same place ? [17:09]
diana_coman: I don't know how that archive was put together and I have a hard time thinking that the archive was the result of exhaustive search [17:09]
diana_coman: no, I mean the .blend files don't a. have all the same things b. even when they have the same things, in the same places. [17:09]
mircea_popescu: yeah. so some suck, why would you care. [17:10]
mircea_popescu: "because how thefuck do i pick which is the right set" [17:10]
diana_coman: the write to eulora's xml mess was the less troublesome part aka once I figured out where they should go, they went in there (added to the pile, sure) and that was that. [17:10]
diana_coman: exactly. [17:10]
mircea_popescu: so, to return to the original point of discussion, why exactly can't we simply declare "make it like so and put x and y there and that's the format" [17:11]
diana_coman: (fwiw I still have that archive of .blend files in the…archives, too, yes) [17:11]
mircea_popescu: what size is it ? [17:11]
diana_coman: a few gigs as stated above, don't recall exactly; do you want me to dig it out to see? [17:12]
mircea_popescu: not urgently but yes [17:12]
diana_coman: we can declare anything, sure; what's it worth though if we go at it …uhm, on what basis exactly? [17:12]
mircea_popescu: let's revisit : http://ossasepia.com/2020/01/16/eulora-logs-for-16-Jan-2020#1001411 [17:13]
ossabot: Logged on 2020-01-16 12:14:57 mircea_popescu: firstly, if man says "i went as far as i could, but as i reached X-seashore, i needed either a boat or a plane to continue. for lack of either, i had to turn back." then man is held to show three tings : 1. that indeed the X-seashore is liminal, a categorical discontinuity in the medium ; 2. that indeed "boat or plane" ennumerates the list of possible manners of crossing ; 3. that indeed he lacks each of them for fundamenta [17:13]
mircea_popescu: http://ossasepia.com/2020/01/16/eulora-logs-for-16-Jan-2020#1001414 [17:14]
ossabot: Logged on 2020-01-16 12:17:19 mircea_popescu: thus, to be able to say, like we have, "look, can't continue here, because we don't know what we want the data to look like, and we don't know how to find out" we must, besides the various cases we've covered, also explain what is wrong with ~the thing we're currently using~. [17:14]
mircea_popescu: that's the basis : "this is how IT CURRENTLY WORKS. fuck you all." [17:14]
diana_coman: I see. [17:14]
mircea_popescu: that was the original problem, yes ? http://logs.ossasepia.com/log/trilema/2019-12-30#1956382 [17:15]
ossabot: (trilema) 2019-12-30 mircea_popescu: diana_coman, let's restate this, so currently work on nailing down the comms protocol is stalled on a definitive universal data model, which is stalled on graphical use in the client, that about it ? [17:15]
mircea_popescu: i suspect an implicit, never verbalized but quite fucking poisonous wart built in all that is, specifically, [17:15]
diana_coman: I suppose part of my trouble – maybe only mine – is that hard "definitive universal" [17:16]
mircea_popescu: "what if in x time a holier-than-thou moron shows up, be his name stanislav dumbkopskyi, and starts whining about how shit that works differs from his retarded 9yo boy's apprehensions of the world, what do we say to him ? what if he's uncommonly gifted and very VERY good at theoretical masturbation ???" [17:16]
mircea_popescu: definitive here means that i'll affix gifted boys of the masturbatory theoretical persuasion by it with rusty nails driven through their guts ; not that i'll hang the people that made it work off it at the instigation of beings an engineer. [17:18]
mircea_popescu: it's definitive in the sense death&damnation is definitive, not in the sense mathematics is definitive. [17:18]
mircea_popescu: definitive as a painful and insulting imposition upon the "human rights" of the living. [17:18]
diana_coman: I see; and indeed, I was working with mathematics-definitive definition rather. [17:19]
mircea_popescu: i am elated we finally managed to actually put this idiocy in words. [17:19]
diana_coman: so the idea is: get back to (which version of) client and see *what could be made to work* to send the damned graphics? [17:20]
mircea_popescu: the idea is — we skipped a step, specifically that one. [17:20]
mircea_popescu: i'm not committed to it as such, for all anyone knows maybe it's not worth the skinning. but shouldn't we at least ~look~ ? [17:21]
diana_coman: tbh I always thought it had been already done/planned before, hence never questioned it as such; huh. [17:21]
mircea_popescu: because in my notes it doesn't actually figure we indded did look. are my notes out of whack even ? [17:21]
diana_coman: we didn't look at that specifically, as per above; I thought it had been looked at before my time, when CS was selected namely. [17:21]
mircea_popescu: but the look back then came out with "well… it should work, mostly" [17:22]
mircea_popescu: that, mind, was like 2012. it'll soon be a decade. not that anything ever changes, but, you know, computervomit. [17:22]
diana_coman: trouble is that this sort of thing either is looked at in quite the detail to *know* it works or otherwise it tends to be more of the "seem like it should work, in principle" and then,well. [17:24]
diana_coman: in the end all code will work for anything – it just takes more or less…re-writes. [17:24]
mircea_popescu: this is so. [17:24]
mircea_popescu: the proposed solution however can't be "let's withdraw into a solipsistic hell of our own making". [17:25]
diana_coman: I'm not arguing for any such solution, no. [17:25]
mircea_popescu: do you see another ? [17:25]
mircea_popescu: it seems to me to be going straight for ye olde "is it better to have loved and lost than never loved at all" [17:25]
diana_coman: atm I'm not even arguing for any particular solution as such; still trying to grok what options there might be. [17:26]
mircea_popescu: alright. but as far as the needs of conversation go, you're as satisfied as i am we actually understand each other re the original ingrown hair that started the whole discussion today ? [17:27]
diana_coman: the "definitive"; the lack of a clear evaluation regarding usefulness for us of the existing cs/ps/cal3d formats [17:28]
mircea_popescu: that and otherwise some bells and whistles, right. [17:29]
diana_coman: and obviously, the clear need for it. [17:29]
diana_coman: on the bright side, I can say that at least I'm better prepared now to even look at it than I was in 2016, there is that. [17:30]
mircea_popescu: absolutely. [17:30]
diana_coman: mircea_popescu: at any rate, if we go for the "small improvements delivering benefits", then it's anyway gradually grafting stuff on the currently working client. [17:36]
diana_coman: or rather: off of. [17:36]
diana_coman: mircea_popescu: library with .blend files was 3.7GB [17:39]
mircea_popescu: aha. [17:41]
mircea_popescu: as far as i can discern this was never billed or reported as anything but small experimental run. "spent a few hours getting some stuff" [17:41]
diana_coman: that seems fitting really [17:42]
diana_coman: as I was saying recently, there are TONS of .blend files and quite intricate/loads of stuff [17:43]
diana_coman: by now I suppose the potential issue is that they'll be so huge as to end up unusable for being too slow/millions of vertices whatevers [17:44]
diana_coman: this part possibly changed from 2012 to now. [17:44]
mircea_popescu: i dunno, steam regularly downloads 20gb of crap for a game that doesn't even work. [17:45]
diana_coman: well yes, unusable but …large [17:46]
mircea_popescu: what im saying is that i suspect largeness stopped connoting unusability cca 2014. [17:46]
mircea_popescu: look at a webpage sometime. yes it's nice that eulora is so compact it works at 100fps on mobo included gfx chips [17:47]
mircea_popescu: but since they're paying me 0 for this priviledge, it has 0 priority on my balance sheet. [17:47]
diana_coman: trouble may be deeper aka the way it processes that ton of vertices; precisely because it doesn't expect whatevers otherwise [17:48]
mircea_popescu: possibly. [17:48]
mircea_popescu: http://ossasepia.com/2018/03/30/my-first-2-years-as-cto-for-minigame/?b=at\%20the\%20moment&e=looking#select << heh, re-reading i am reminded we ended up with like a month+ of downtime in 2018, too. totally forgot about it. [20:37]
mircea_popescu: holy shit pizarro was a pos. [20:37]

January 15, 2020

#eulora Logs for 15 Jan 2020

Filed under: #eulora_irc,Logs — Diana Coman @ 12:00 am
mircea_popescu: hi Guest64608 [11:02]
Guest64608: oY [11:03]
Guest64608: mircea_popescu: what's good? :P [11:03]
mircea_popescu: slow blowjobs and raw steak [11:04]

January 14, 2020

Notes on Computer Graphics: Formats, Exporters and Blendering

Filed under: Coding,Computer Graphics — Diana Coman @ 9:03 pm

Blender is true to its name at least with respect to forever mixing up 1 its API so no exporter you ever write can work reliably for more than one frozen Blender version. I had already some experience with this back in 2017 when I was still naively thinking that it really is the lack of direct path from Blender to CS that keeps all those supposedly eager artists from contributing anything at all to Eulora’s client. At the time the plan was to pick one Blender version and actually support that fully. Meanwhile, experience informed that the whole pile is rotten in all the places where one cares to look, from a weird sort of anti-management at the top to a full embrace of Python’s own wrong choices, ant-like overspecialisation and overfitting of artists and the resulting impossibility of any productive work coming through meaningful interaction from those quarters. And given the stark choice at the beginning of this year together with the return to Eulora’s 0.1.2b client as part of a wider return to pragmatism, my new take on Blender’s blendering is to simply look at potential options for setting out one *working* path for *extraction* of assets to the extent that this is even feasible, more like a way of *interfacing* at most, rather than supporting anything anymore 2.

Taking the simpler route of interfacing and extracting rather than supporting anything, I had a look at existing graphics formats and existing exporters for various tools in which the overspecialised merrily toil at one thing or another. There are of course the specific formats of each of those tools (e.g. Blender has .blend 3, 3D Studio Max has .3ds, Unity has .unity, Unreal has .unreal), as well as various attempts of all sorts to define some “standard” format. For all those standardisation attempts though, the end result really seems to be more of a “everyone makes their own format” than any sort of standard so that there’s no lack of formats to look at, if one really wants to review the whole mess. For instance and to go through only a brief list: .x3d and .x (vrml) are xml-based and supported by the Web3D Consortium so potentially with working exporters perhaps although unclear if fit for purpose (and spec is quite large since it wants to supports all sorts); .ply focuses on one object at a time described as a collection of vertices, faces and corresponding properties; .dae builds up on the older collada format and it’s xml-based again without any clear gain compared to .x3d; .obj supports geometry only; .dxf seems mostly fit for CAD systems and it has by now so many versions since its beginning in 1982 that it’s even dubious to call it “one” format really.

At any rate, in addition to the above, I further looked at quite a few other formats, from the ISO/IEC 86321-1:1999 standard (revised and confirmed in 2016) that is better known as CGM 4 to the binary, proprietary and quite widespread 5 FBX 6, IGES 7 and its contenders (e.g. sat, catia, step, parasolid), as well as the newer OpenGEX 2.0 8 that seems at least to have been designed out of practical necessity combined with frustrating experience with the state of Collada and glTF. Can’t beat such root causes as far as I can see it and the result is quite comprehensible and sanely documented too with some plugins provided for 3D Studio Max, Maya and Blender. So off I went and tested the Blender plugin, what’s there to lose for some tests anyway?

To start with and since I was getting into Blender again, I had a more systematic look this time at the various versions of Blender 9 & Python: it turns out that last Blender version using Python 2.x is Blender 2.49b that is also the last version of Blender that ships without its own Python so that it uses (rather: attempts to use) whatever is installed locally; from Blender 2.5 on, it’s Python 3.x that comes also packed within the .tar.gz 10 so at least relatively contained aka without requiring further infection of your environment 11 with an actual installation of Python 3.x. Summarising, the current status of Blender & Python versions 12 that I looked at 13:

  1. Blender 2.49b – this is the last version of Blender that ships without Python bundled in and expects otherwise Python 2.6 installed on the machine where you attempt to run it. While you can go the “purist” way and work with this because Python 2.x, I don’t quite see much point to this stance here since anyway there’s plenty of other unknown stuff you are getting in there just by not compiling Blender from source for instance. And so might as well just stand the thing on a toilet box, use whatever version of Blender works best for your graphical needs, export the result and then consider it done. In fewer words: use Blender as if it were the enemy, because it is.
  2. Blender 2.5Alpha (20MB) – this is the very first version of Blender that ships with Python bundled in (3.1.1) and that starts the “will work with Python 3.x ONLY” current cycle.
  3. Blender 2.62 (44MB) – comes with Python 3.2.2
  4. Blender 2.66 (64MB) – comes with Python 3.3.0. This was the version I considered back in 2017, mainly because there was the cal3d exporter that sort of worked with it. From a user point of view, the jump from 2.5 to 2.6 series is directly visible, the whole damned gui of Blender changes and supposedly there is some useful functionality added too for drawing and rigging.
  5. Blender 2.72 (87MB) – comes with Python 3.4.0. This is the version for which the OpenGEX current exporter was written and as such, the one I looked at in more detail, see below.
  6. Blender 2.79 (137MB) – this already failed to work on my test machine because it wanted a newer GLIBC! On my CentOS 6.10 machine 14 for graphics and all that jazz, ldd –version reports GNU libc 2.12 while Blender 2.79 looks for 2.14, 2.15 or 2.17. It turns out that it’s the GLIBC version the limit in the end for what version of Blender I even try out, what Python.
  7. Blender 2.81a (161MB) – this is currently the latest version of Blender, hence why it made this list. Of course it fails just like 2.79 above, as it wants the same newer versions of GLIBC.

Going further with the practical tests, I settled on Blender 2.72 since that was the one for which the OpenGEX exporter was made to start with and I don’t see all that much to be gained by going back to Blender 2.66 or something since Python will still be 3.x and otherwise what’s the big difference anyway. The exporter is simply this OpenGex-Blender.py file and it installed without error from within Blender, quote my notes: File->User Preferences->Addon->Install from File + navigate and select the .py file; it goes into Import-Export and it NEEDS to be ticked to activate.

To see the exporter in action, I had first an attempt to model some basic character as a way to know exactly what is in there before looking afterwards at what gets exported. So I followed some tutorials for Blender and I even got to obtain a sort of head of something but it bored me out of my skull and with such intensity as I haven’t experienced in quite a while, so that I exercised more my self-control than anything else. While most of the issue really is the activity itself, there was the added and steadily increasing annoyance at what seems to be the “blender-approach” of basically having to remember a set of arbitrary shortcuts for doing this and doing that 15.

Given that the point was after all to test the exporter rather than my full patience to the extremes, I left my “model” in its half-made state and simply downloaded some .blend files that are apparently abundant under “creative commons, personal use” only with all the bells and whistles that one might wish for. It kind of boggles the mind that the same people who are not interested apparently in doing some work for gaining something are nevertheless happy in such numbers to do possibly even more work just as long as it’s branded “for personal use”. Anyways, confronted with a whole set of animated characters looking quite nicely even and ranging from furry spiders to aliens, I just picked one at random, downloaded the .blend file that weighs in at 34MB – it has a ton of polygons too so not exactly a low-poly shape at all – and opened it up in Blender (it reports 171 bones in this alien), obtaining a view of both alien and helpful notes of the author, Dennis Haupt, on the side:
alien_1_640.png

Some playing around with the model revealed among other surprises that the alien is rather hollow inside although nicely textured nevertheless so supposedly that’s just how alien overgrown cockroaches develop, with the teeth visible through their bottoms, let me illustrate with a view from behind the thing:
alien_1_640.png

Hollow or not, exporting it went quite smoothly: a simple File->Export->OpenGEX + selecting the location for the output file resulted in one single file that proved quite readable as a description of the “scene” but at the same time missing entirely all sorts (animation most obviously). This was not entirely unexpected but more of a test – there’s this annoying thing that what the plugin exports depends on the “scene” that you have selected to see in Blender 16 and since the default scene for this Alien was not the one containing the animations as such, they were not exported.

For take 2 of the export test, I switched the scene to “Baked Actions” 17 and run the exporter again for what proved to be a slow and painful ride: it took some 30 minutes during which Blender was unresponsive as the exporter worked and at some point the whole system was unresponsive too for a while. At any rate, the result of this take 2 was another .ogex file weighing however 41MB . A quick look at it revealed the sort of expected sparse values thing: all the bones and materials and animations but with lots and lots of 0 values, what can one do.

Since I did 2 exports, might as well do the 3rd one on the remaining scene, namely the one containing “the animated model for editing”. This took about 5 minutes although it still blocked Blender for most of that time. The result was yet another .ogex file ~8MB in size. Bones, materials and animations seemed to be still in place but more condensed – presumably the animations here contain only the various poses as opposed to intermediate steps or at least this is my current understanding of it all as I haven’t sunk in that much time to fully figure it out since it’s not yet even clear if this is going to be useful at all going ahead. There was no error reported on any of the 3 runs 18 and the .ogex files as far as I could see appear well formatted and complete so I’d class the exporter as working – as in it does what it knows how to do, although the extent to which that is useful depends of course on the as-yet-not-fully-specified what one wants it to do exactly.

Being at testing stage, I went ahead and attempted to export the same alien with the x3d exporter that Blender ships with. This was quick and resulted in all the usual glory of an xml file but exported only the lights and transforms from the scene that supposedly contains “the animated model for editing”. So yeah, the result of exporting even from the same scene will of course depend on each specific implementation of an exporter, not like there’s some way to standardise that either.

In addition to the above, my notes mention a few tests with some glTF exporters but those failed with some complaints about materials not set as it expected and otherwise a final error spew in the console. It still produced as output a few .png files for textures but I didn’t really sink more time into looking in any more detail at this. Moreover, it would seem that one can just get the same assets directly in something other than .blend format if going for the formats for which Blender supposedly ships directly with exporters. So I just weighed the files 19 provided for various formats of this same alien directly from where I downloaded the .blend file though be warned that a comparison is not straightforward here since each “export” will contain different stuff really:

  1. .dae (3.32MB .zip)
  2. .x (1.53MB .rar)
  3. .fbx (24.7MB .zip)
  4. .unitypackage (31.46MB .zip)
  5. .3ds (0.7MB .zip)
  6. .obj (1.11MB .zip)
  7. .dxf (2.78MB .zip)
  8. .blend (33.65MB .zip)

To conclude this adventure with Blender, exporters and various graphics formats, I’ll only add that the OpenGEX format is at least well structured 20, easy to follow even with the naked eye and otherwise apparently having a working exporter for Blender 2.72 if not for anything else (I doubt it’s really *possible* to have an exporter working properly for more than one version of Blender unless literally changing it to accommodate each time something else gets blenderised yet again).

Looking at the above from the opposite side though, it could equally well be argued perhaps that one can then go directly for extracting stuff out of the .blend format, relying on that metadata that ensures compatibility across various Blender versions and bypassing the Blender environment and its Python mess altogether. After all, if it gets to cutting idiotic knots, might as well go for a more crucial knot and be done with it. Just use a bigger and sharper sword if you get into sword wielding anyway, right?

  1. Blendering perhaps? I think I’ll call this blendering, yeah. As in: you are totally blendering your life putting up with that shit.[]
  2. I guess the whole experience of those past years can be easily described as nothing more than a stream of repeated rejections (if in different forms and shapes, sure) of all and any attempts to offer support. So fine, support is not wanted, I finally get it.[]
  3. As a side note, this is a “format” in the true blendering style since the structure of a .blend file is quite specific to the version of Blender from which it was exported; supposedly this is mitigated through the addition of metadata in the file to maintain compatibility between files imported/exported on different versions of Blender.[]
  4. Computer graphics metafile. The whole thing is not only HUGE as specifications go – the darned spec has 470 pages and the file itself weighs 3.4MB archived, do you hear me? – but also confusing to the point that ISO/IEC itself came afterwards with “Minimum Recommended Capabilities” since nobody would ever implement that full behemoth anyway. Even so, the result is that various implementations will choose various bits and parts resulting in …incompatibilities of course, what else. Isn’t this such a useful standard? The type of “standard” that one could not imagine if not for all previous experience with similar glorious achievements in this vein really.[]
  5. It’s ok, ants don’t mind it if they are owned, what’s it to them?[]
  6. FBX supposedly stands for filmbox; it’s been owned by Autodesk since 2006.[]
  7. International Graphics Exchange Specification – this is meant and used mainly for /from CAD systems and as such it’s perhaps not terrible but not all that suited for S.MG’s current needs either; for one thing there is simply the difference of domain interest (e.g. lacking animation support really) and for another thing it focuses on surface definition and rather ignores most else, volume properties included.[]
  8. Eric Lengyel, 2017[]
  9. Pre-compiled versions as downloaded from the release repository. I really did not see the point in sinking now whatever many days into getting all sorts of Blender versions to compile locally since no, it’s not that straightforward, of course not. Currently Blender claims that they will maintain forever this repository with all previous versions always available.[]
  10. Do note how the archive keeps growing and only growing from version to version![]
  11. If you are running Blender on it, to my mind it’s already quite infected since you have to have the full graphics stack and all that so not exactly the cleanest of computers anyway.[]
  12. While the console within Blender in principle reports the version of Python at the top, I still did the import sys followed by print (sys.version) to find out what is reported as Python version.[]
  13. At least if you already have a machine for testing, it’s quite painless to have as many different versions of Blender as you want: just keep each of them in its own dir and they are quite self-contained so you can even run several of them at the same time without any clash (I ended up with 3 running at some point mainly because I had forgotten to close some before starting the others.).[]
  14. GCC is 4.9.4, Python is 2.6.6[]
  15. As written in my notes: Steps for mirror modifier:
    zoom; tab to go to “edit mode” (instead of object mode); A to select all faces; w key to get the full menu -> subdivide (+ change in the menu on the left-hand side toolbar the number of subdivides ie to get 2 or 3 etc); !!!needs face-select from the toolbar at the bottom of the screen to show those dots and allow select of divisions /faces; shift for multiselect; to switch perspective, either numpad 5 for ortho or from bottom left “view” -> view persp ortho; with press s -> scale and can sort-of extrude the cube into a weird sphere; 1 numpad for front view; loop cut from left-handside bar but click + right click to have it EXACTLY in place; there is “limit selection to visible” on bottom bar (to select/deselect); b key for “box select”; x to delete (and can do it in several “modes”); modifiers are UNDER THE WRENCH TAB in properties window (aka right hand side, gah); the “apply” button makes the modifier permanent; NEED to check “clipping” in the mirror modifier to avoid holes and the like.[]
  16. This exclusive focus on “scenes” in the CG world drives me nuts. It’s all scene this and scene that, can’t have just the full damned thing to use otherwise wherever and however one wants, it has to be directly preset just-so.[]
  17. Note that those names are given by the model’s author, they are not standard in any way, so there is effectively no way of knowing for each model just what scene is the one containing what you are after.[]
  18. There were though 2 warnings namely that “region type 5 missing in name:File” and “region type 6 missing in – name:File” but those didn’t seem to break in any way the exported file as such.[]
  19. Note that they archived mainly for fun because there is very little the compression does for those formats.[]
  20. It comes with a simple grammar too as well as an even simpler, more general underlying format, OpenDDL -Open Data Description Language- described in an Appendix.[]
« Newer PostsOlder Posts »

Work on what matters, so you matter too.