Ossa Sepia

July 30, 2020

What’s Eulora’s GUI Going to Be Like?

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

Against my own expectations, it seems there’s little resistance left even in that mess of paws: it took less than a week to map it all out quite fully this time, discard yet another set of dead parts of it, cut its remaining tendrils and pretense to “independent plugin, part of a common trunk, not just some code in the client”, bring it therefore quite in line (though not to internal sanity, it still is what it is) and ready to be made use of, without crashing and without complaining that it doesn’t have graphics or skins or resources or whatever else it previously imagined that the user must provide. For instance, here’s the gui just using the system’s mouse pointer if nothing else is available and the help window gladly showing whenever it’s asked to show, looking as best it can with whatever is available at that time:

pawsgui_1_640.png

Having thus made sure that indeed, I can make paws do something useful after all, I’m literally staring at the pile of neatly sorted entrails of the whole thing and I can’t make up my mind for the life of me – *what* is even the desired use of this paws-paste? So I’ll first write down the brief description of what’s there and then I’ll spell out this generic question into several more specific questions that can hopefully be answered.

The current client’s GUI interface is essentially a lame and broken attempt at implementing the world hierarchy from a… visual perspective 1. There’s a top “controlling” 2 window that keeps track of all the others and does in fact the generic figuring out as to what window is the user interacting with, which ones should show and which ones should hide, all that sort of thing. Being of course a visually controlled world, the top window ends up being… that menu bar at the top (see? it’s at the top, right?) of the screen, with the inventory and the quit button and whatnot. It’s true that there is otherwise *also* a “mainwidget” thing but… that’s just the overall container and doesn’t do much at all. Don’t ask me why can’t that mainwidget be actually main and therefore control the rest, it just isn’t. And because those are just windows and the whole codebase at the time simply couldn’t do without managers, there’s on top of this top a pawsManager with its very own textureManager.

The pawsManager is meant as far as I can tell as the entry point to the paws itself – at least when entertaining the delusion that paws is or can somehow be separate of the rest. The textureManager is one of those endless glorified list-keepers: it keeps its own list of filename-resourcename equivalencies for all images that the GUI uses and otherwise interfaces load/find from the engine’s own textureManager, of course. The meagre claim to purpose it has beyond that of list-keeping would be that it packs in one place some format-related processing of 2D images that are supposedly helpful in some cases (though it’s unclear if there are all that many such cases in current use). Anyways, aiming to keep changes to a minimum, it can live as such and keep its list too, since I have no intention of saddling EuCore with any internals of the GUI/skin now. There’s of course a whole dance around in both pawsManager and its textureManager with translating strings (literally, the “localization” because apparently it makes somehow sense to shove that concern in there), defining “styles” (there’s skins and then there’s… styles; because one S is not enough and nevermind there’s no game worth even one capital letter, yet, we’ll add styles to the interface and that’ll be grand!) and making oh-so-sure that one is never, ever, under any possible circumstances somehow left without – gasp! – a loaded “skin”. Additional, even smaller concerns abound too but by now we get to the microscopic so I’ll let them be already, suffice to say that if I’ll ever need an example of pointless polishing of irrelevancy, I can certainly use that code.

Past the 2 managers and 2 top-widgets, there is the indistinct mass of …more widgets. Basically *everything* in the GUI is a widget, from one single slot in the inventory window to the whole inventory window itself. Here I can happily report that indeed, the “off with its dolly” task was most satisfyingly carried out: there were 2 (two!) classes on top of all the usual widget+xml defined just to *support* that and several tendrils sneaking out into non-paws parts too and oh, what joy to cut them out already!

Dolly cast aside and readily forgotten, the reduced pile of widgets is still a considerable pile and otherwise waiting for either full chop or partial cut, depending on what exactly turns out in the least useful in there. The “design” of the whole thing is that each widget has a code class (in client/gui mostly) that is meant to implement what the widget does (and even if it doesn’t – there still has to be this code present as a means to register and create the thing, useless as it might be) and an .xml file (in data/gui currently) that defines in principle the layout of the corresponding window to be shown in game, including size, position, contained widgets and used “resources” aka icons and other images. In practical terms this means that new or different widgets still require touching the client, there’s no “download this” and run with it really. At a stretch, the .xml layout files could be made perhaps part of the “GUI” .zip and so something that can be downloaded from the server and used but there’s a very tight coupling between the code and the .xml so that it’s unclear to me if there’s much point to it anyway. So Q1 of those more specific questions would be here: is the layout of various GUI windows something we even consider part of a “skin” definition and hence up to GUI designers to produce as part and parcel of offering a client skin for use?

Even after the above trim, there still are about 100 widgets with their corresponding 100 .xml files, so I would rather not list them in here – the list is anyway quite easy to get with a simple ls data/gui in the deployed client’s dir. The more specific question here is Q2: what windows do we actually need in the whole interface anyway? I can’t quite see the point of 100 windows and it really all seems to me more a matter of ill-thought “design” in the first place, fitting slots in places by hand and adjusting them to be just-so, the usual sort of “artistic” approach to it all. I rather think there has to be a small subset of elements that will do it all and better anyway but at least currently I don’t even quite know where to start from with it, as it’s not all that clear to me what sort of things we need in the first place. I can even see the point in saying it’s too early to bother with that and move on to implementing more of the functionality so that what is needed emerges from there but on the other hand the GUI has to start with something/from somewhere too.

Going through the list of main things as seen from a player perspective so far in Eulora, the Q2 above can get further refined: the most complex window in there is the chat window – does this even still make any sense or should this be only and at most a cli window in fact? Windows like the storage for instance were relatively ok in the beginning and then an utter pain when one has a full storage, reminding me quite precisely of the more generic windows-vs-cli computer use really – do we still want a storage window at all? And where does this stop anyway, as on one hand I can keep going and wonder if the inventory window is useful as such (perhaps it’s at least pretty to see them all!) or the container or …which of those 100 total, in the end? (Then again, I’m a cli radical apparently (hence my asking here), regardless of all the fun I had making textures, heh.)

Windows and widgets aside for a moment, the GUI graphical elements as such would be a set of tiny icons like arrow-this-way and that-way, backgrounds, buttons, scrollbars and the like. Currently even this is a bit of a mess in that there’s no standard set at all, but a proliferation of arrow-up and arrowUp that are two different arrows pointing “up” (and this is probably what they tried to solve with the whole “styles” layer of grime on top, myeah). Nevertheless and as boring as it sounds to do it, a basic set can certainly be extracted and then forced even upon the existing widgets, certainly. The potentially troublesome part though comes from a current ugly mix of actual GUI elements (e.g. buttons) and 2D representations of game objects (e.g. a key in inventory). The currently deployed client makes no real difference and effectively lists those 2D representations as GUI “resources” like all the rest (so for all the fun, one could in principle very well set their buttons to look like Omlette Du Disgorge, why not). While I have nothing against buttons looking like omlette-du-disgorge, game objects are a very different category from GUI elements and I don’t think they should be mixed at all. Even focusing solely on the very practical perspective, GUI elements get their representations (if any) from a skin.zip file (if it exists at all), while game objects are first of all a potentially infinite set, not known upfront and even potentially changeable on an item by item basis during play. So question Q3 here would be: does this separation make sense or is there some better way to go about sorting this out? (As I’ll need to sort out this part at some point anyway, it can’t really remain as it is.)

All the above out of the way and in the open for discussion, I can happily report that the client’s code continues to shrink for now as it increases in usefulness and otherwise there are still parts that will end up most likely discarded in the end, as they get increasingly left behind (the original net part comes first to mind). While there is still quite a lot to implement on both client and serverside, I think the next steps will have to be alternating client and server development, introducing the new things (finally!) and sorting out otherwise what troubles remain, as they pop up. In other words, there’s still a lot of hard work ahead but finally getting out of the swamps and it’s such joy to be out of them too!

  1. The attempt is so visible and the whole thing is so broken from so many points of view that I don’t even have the heart to laugh at it anymore. It’s one of those things that are not even wrong yet.[]
  2. The corresponding parent classes are even called exactly that, for bonus points of similarity of names being a great thing in code: controlwindow and controlledwindow.[]

July 24, 2020

Those Zip Files of Eulora’s Client Graphics

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

Wandering all alone and growing quite bored of seeing the same familiar empty space, the twisted hopeful glanced all of a sudden an unexpected shiny item sticking out of the ground and in plain view:

csmesh_1_640.png

What could that be and where did it come from? It wasn’t there before and there’s no guarantee it will remain there either but there is now finally the possibility for any number of such items to be anywhere at all in Eulora. And now that this part is done as well, the client has finally all it needs to render -though not yet to control or interact with- all three main types of 3D things: the world itself (terrain, sky, water), moving characters be they NPCs or players (Cal3D) and non-moving items (CS meshes). In all cases, the “graphical representation” is simply a .zip file. The contents of this .zip file can change and there’s plenty of flexibility in there with only a few “must-have” things nailed down for now – even those can change later on without much trouble, since a .zip file remains a .zip file otherwise and knowing how to use what is inside is entirely a client concern.

The current client 2.0 aims to look for and use what it knows, while not getting stuck on anything additional that might be in there. So it uses currently some very simply conventions regarding filenames inside those .zip archives and simply picks up the first matching files it finds inside: anything starting with “tex” is assumed to be a texture and its extension is assumed to match the format (.dds, .png, .jpg all work fine); anything starting with “mesh” is assumed to be a mesh description and interpreted depending on the context as either CS mesh format or Cal3D format (binary or xml depending on extension); anything starting with “skel” is a skeleton file; animation files are always exactly walk.caf, idle.caf (so far those 2 are the only ones the client knows about). As examples, here’s what the current test set of .zip files contain:

  • For Outdoors (the filenames here are fixed indeed as they all have very specific roles):
    • basemap.png
    • heightmap.png
    • lightmap.png
    • materialmap.png
    • norm_1.dds
    • norm_2.dds
    • norm_3.dds
    • normalmap.png
    • sky.png
    • tex_1.dds
    • tex_2.dds
    • tex_3.dds
  • For Cal3D:
    • skel.xsf – the file containing the skeleton in Cal3D format. This can be either xml (.xsf) or binary format (.csf) and the client will simply use whatever is provided.
    • walk.caf – the animation to be used when this character “walks”. This has to be currently in binary Cal3D format because reasons.
    • idle.caf – the animation to be used when this character is standing/sitting still. As for walk, this has to be in binary Cal3D format.
    • mesh_*.xmf – this hopeful happens to be made out of 26 meshes so there are 26 such files, simply numbered mesh_1.xmf to mesh_26.xmf. The client will just load as many mesh files as it finds, that’s all.
    • tex.png – the texture to use on all meshes. In principle there could be as many texture files as meshes so that each mesh has its own texture. It’s not a big trouble to adapt the client to use them but at the moment it just picks the first tex* file it finds and it uses it for all meshes in that .zip file.
  • For CS mesh:
    • meshfact_1.xml – the description of the mesh in CS “meshfact” xml format (NOT library format, see below the more detailed discussion why not library).
    • tex_1.png – the texture to use for this mesh. This can be in principle *any* graphical format. The current client can and will happily use .dds, .png or .jpg just as well.

Compared to the previous iteration, the “outdoors” type bundled together water, terrain and sky because in practical terms they always go together indeed. There is here one part that I’m still hesitating about: while the size of “sectors” is fixed and doesn’t need to be therefore sent (or at least not at this level), it’s unlikely that this will also match any indoor areas that are to be separate areas as such and the trouble is that the loader needs to specifically set those. One way to go about this would be perhaps to make a different type specifically for “indoors” and give all this additional information required there in the euloran object itself (arguably even the outdoors type might be better off with some specified there, if or when they may change). The main question I have here is: what is fixed about outdoors and indoors (as the cs part has a lot of parameters and very few turn out to be of any use in the end)? More specifically, given the protocol specification, the size of an outdoors sector is fixed and as a result, the client can just create a fixed-size sphere for “sky” for instance and a fixed “cell” size for the terrain and so on. Is this size fixed for indoor places too or could those be smaller/larger?

As to the latest addition from the list above, namely the CS mesh items, getting them to work included a few ugly surprises that slowed me down a bit more than I initially expected. Nevertheless, as there’s otherwise less resistance left in that paste than at the initial stages, it didn’t take all that much to whip it up into something useful. First, the format I had used previously based on existing client’s “art” files turned out to be less than ideal for a rather unexpected reason: the CS loader would happily load it but it wouldn’t provide any means to obtain directly a way to reference the loaded mesh – it assumed the caller would know that from somewhere else or otherwise find it somehow 1. To fully get this: CS insists on referencing everything by “name” hence effectively by string-ids and the names of loaded stuff from a library file are …specified in the xml but otherwise not returned by the loader itself! So to find a factory or a mesh, the code would need to either read it specifically from the xml (ugh!) or otherwise assume it matches something else through some convention forced thus by… lack of options (because no, I don’t want to have the server now be concerned with fixing the names of meshes clientside, wtf). The solution I found to this is to not use “libraries” at all since anyway each of them contains exactly one meshfactory and then load that factory with whatever name there might be in the xml but *change* it from the code to the name that is useful to the client (and that’s …the ID of the darned object, ofc, what else, only made into a string to fit CS’s expectations, yes). It took a while to figure this out, mainly because finding the way to simply rename things is made… interesting by means of Object Oriented (OO) obfuscation layers so that the code can end up at times like this: meshWrapper->GetFactory()->GetMeshObjectFactory()->GetMaterialWrapper()->QueryObject()->GetName(). Count the layers and laugh at it but know that it’s not even the worst that OO can do!

Once the above sorted, there was some more work to cut that GEM crap on items too and then to follow up and look into all the resulting, inevitable crashes given the spaghetti pointers running all around. At least I used the opportunity to look also into the way that PS used to do “effects” – it’s a useless pile of crap on top of some tidbits of usefulness from the underlying CS, not that it comes as any surprise. The surprising part was that “labels” (e.g. names of characters) used to be… “effects” and thus bringing in the whole crashing monster of stuff. Well, labels presumably will be useful so they are on my list to add as part of sorting out the 2D part of the interface but I refuse to bring in for this reason a whole set of useless “managers” and corresponding plugins and 1001 classes that do the same thing only now it’s called labels and then it’s called shadows and then again it gets its name changed so that a different “contributor” can sign at the top of the file. Such contributions that one is way, way better off without any of them.

At any rate, having now sorted non-moving items as well, the next step really has to be looking into the 2D GUI stuff more closely, hence… PAWS. There’s no estimate I can really make (only heavy guesstimates) on how long it will take to make *that* into something useful but I’ll keep to my heuristic that served me very well so far and I’ll write up whatever stage I got to, whenever it needs unloading and certainly not later than in 2 weeks’ time.

  1. How? well, that’s I suppose exactly how one ends up with all those .xml files just to tell what is in those other .xml files and then load some upfront and expect they know it all, too. Like will all madness, it’s not that there’s no logic involved, there is in fact plenty and at each step – it’s only that the root is entirely misplaced. And yes, I am fully aware that those perceiving the roots of my own work as misplaced will therefore assign the madness label to my own work and my own self. A label though never did anything though, nor will it ever do by itself.[]

July 16, 2020

Client-Paste Says Yes, It Can

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

There’s still quite some work to do before having a fully working client as well, but I can happily report that the most important part for that auto-updating version of the client is indeed in place and working: an initial prototype client 2.0 can now start happily with nothing at all (no keys, no graphics, no knowledge of the world at large) and then generate keys, obtain an account, retrieve (and check) sector and model files, load them when it got them, even let the resulting euloran move about and admire its reflection in the wonderful water by the rocks:

client20_1_640.jpg

For future reference and current unloading of a fresh set of troubles sorted, here’s the list of main updates done on the clientside:

  1. EuCore (data acquisition logic, Ada):
    1. Setting RNG source via config file: whatever string the user provides in there (e.g. “/dev/urandom” or “/dev/ttyUSB0” or “/silly/ass”) will be used as source of “random bits”; NB: the indicated source, whatever it might be, is considered already initialised in whatever manner is required, since it makes no sense at all to try and initialize from EuCore’s code a source that can be set to anything at all. For all the apparent “easy” label on this additional knob, there was a significant headache to make it right, since the RNG source is used from both C/CPP code and Ada code so that it has to be set across language-borders, not to mention in the precise direction previously-avoided-to-keep-things-neat-and-less-confusing. Not that I can recall *any* time when I got to keep over long term any of those parts that were easier, it’s just not my thing or something. What can I say – it’s done now and it’s working (the default is urandom).
    2. Setting a “sync” interval – meaning how often the user wants EuCore to attempt to resync its local data with the server. This is important mainly as a means for the user to find the compromise they want between generating traffic (which has a cost) and otherwise keeping their local data cache up to date (since out of date information can presumably make play rather less than ideal). Worth noting here that this “sync” interval is important for movement update and for requesting World Bulletins regardless of other triggers that might apply.
    3. Creating account and obtaining BOTH sets of Serpent keys from the server – this got a refactoring and update to reflect the clear separation between EuCore that does *all* data logic, acquisition, storage and so on (hence it’s the only part that can request creation of RSA keys for a new account for instance) and what is simply a dumb GUI – the former “client” that will focus exclusively on using and presenting data that is present, nothing more. There was also still pending – due to previous lack of clarity at least in my understanding of this part – the issue regarding the initial set of Serpent keys for communication with the client. While the protocol allows for the client to generate those and send them to the server, at the moment the client will simply keep sending request for an account until it receives those too. Perhaps at a later stage I’ll get back to this and implement also the option + knob to generate them locally and send them to the server but this can certainly still wait.
    4. Updated EuCache (the actual data storage structure that provides thread-safe access) to reflect the latest, streamlined data model.
    5. Updated the data acquisition logic to actually send requests to the server for each and any bit of missing data (be it object or file) as soon as it becomes aware it’s missing. This includes proper packing of file requests in as few messages as needed (instead of firing up the wasteful one message for each request).
    6. Updated handling of objects to fully update local data cache correctly (in short: adding those in server’s view and not in client’s view, deleting those in client’s view but not in server’s view, asking for anything missing and fully walking the structure at regular intervals, to ensure re-sync).
    7. Updated handling of file received messages so that chunks are saved as received and the Keccak hash of the file is calculated + checked against expected value at the end, deciding on whether the resulting file is kept and made available to the GUI or otherwise deleted (+ new request sent to the server, to resend it). NB: the approach here is very basic for now in that chunks are literally saved in the order received and therefore it’s enough to have 1 message lost or out of order to result in an incorrect file and therefore repeat the request. I’m sure that this can be made better – not so sure though that it’s worth the trouble to sink time to make it better *right now* and so there it is, low hanging fruit for anyone who wants to improve their client.
    8. Updated interface towards the GUI to reflect the new understanding that the actual needs of the GUI are way, way simpler than the full complexity that the protocol and more generally the world structure allows (and here’s an example of where the doing-it-all kind of made me stumble because even when it’s the “same thing”, it’s from different perspectives, of course and so I need to keep them all in mind at the same time and change swiftly between them, oh joy). At any rate, now the interface provides the sort of packing that the GUI finds useful, while taking otherwise advantage of EuCache’s data structures that reflect the actual hierarchy of the world. That’s pretty much the part that wasn’t quite that obvious for me until now – the dumb GUI is in fact way, way flatter than the actual world as it were and as such, there’s really no point to make the GUI more intelligent than it can handle. Let the GUI be an idiot that is forever concerned only with “what can I see *right now*” and that’s that, everything all of a sudden starts to fit, too.
  2. GUI (the former “client”, cpp) side:

    1. Refactored the SMGData interface to work with the latest EuCore interface and provide a single point of access to all data, from objects to files. Sorted out here some unexpected issues with importing constants from Ada into C as well.
    2. Nailed down a working model for this whole GUI stuff: there’s a logic (such as it is) part that will then make use of all the paste that used to be pompously “the client”, from pscelclient to psmovementmanager and whatever. Sorting this out was a pain but the result is a very welcome insulation from the rapidly-spiralling-into-madness mess. In other words: while the mess is still there for it will take ages to fully eradicate, one doesn’t have to work neck-high into it *at all times* anymore! At times, a descent into that is still needed but I’m finally at the stage where it’s “at times” as opposed to “all the time”.
    3. Updated and refactored loader actually capable of making full use of .zip files that were acquired *after* client startup! This was such a pain to get working, as the virtual file system thing is rather poorly documented and quite clunky at times. Nevertheless, it … works!
    4. Prototype implementation of “soft reset” – essentially the PS code insisted that one needs to go through 1001 things in 10001 places to just clean up if/when the sector changes for instance but then it turned out that CS has this nice and shiny red button to …DeleteAll! And once that is done, PS can go and get stuffed since there’s not much it can do anyway. So the prototype so far aims to simply do such a soft reset if something crucial like the sector or the player themselves suddenly change – it would seem possible that we don’t actually have to end up with the sort of Windows-style-restart-the-client, after all.

Aside from the above, there are many other smaller details and issues sorted as they appeared – some of them might even further change as everything takes further shape. So far though I’m satisfied that the former client-code is finally just about paste-enough to be of some actual use instead of unrelenting pain and misery.

The next steps are for now to iron out some remaining weirds in the current minimal prototype and to further develop the actual use of data from the GUI since for now there’s really only the sector+player check, retrieval and loading of corresponding graphics assets but nothing further connected. Local movement works, of course, but it’s all local and moreover, the GUI doesn’t yet request from EuCore anything *other* than the player itself and the sector where they happen to be.

On the write-up front, there’s the structure of the .zip files for sector + cal3d models to write and publish. All is quite clear and neat there but I need to find some time for it and I might possibly do first the loading of CS meshes too.

On the iffiest client-side part remaining, the paws widgeting mess looms largest. At the moment I can’t tell if or to what extent I can sidestep it/any of it but I’m certainly not keen at all to get into that swamp even an inch more than is absolutely and unavoidably required.

July 12, 2020

#eulora Logs for Jul 2020

Filed under: #eulora_irc,Logs — Diana Coman @ 10:36 pm
Day changed to 2020-07-12
feedbot: http://trilema.com/2020/minigame-smg-statement-on-q2-2020/ << Trilema S.MG — MiniGame (S.MG) Statement on Q2 2020 [22:36]
Day changed to 2020-07-16
feedbot: http://ossasepia.com/2020/07/16/client-paste-says-yes-it-can/ << Ossa Sepia Eulora — Client-Paste Says Yes, It Can [19:18]
Day changed to 2020-07-24
feedbot: http://ossasepia.com/2020/07/24/those-zip-files-of-euloras-client-graphics/ << Ossa Sepia Eulora — Those Zip Files of Eulora's Client Graphics [14:46]
Day changed to 2020-07-30
feedbot: http://ossasepia.com/2020/07/30/whats-euloras-gui-going-to-be-like/ << Ossa Sepia Eulora — What's Eulora's GUI Going to Be Like? [15:02]

Making Short Work of a Squirrel’s Winter Stores

Filed under: Lyf,Young, old and oldest — Diana Coman @ 3:35 pm

Once upon a time, in a far-far away countryside, we, the half-foreign, part-time inhabitants of a house rather than a tree, had to be quicker and craftier than the local squirrels to get and enjoy any walnuts from all those mighty trees that lined the slopes we used to call our courtyard. We were smaller then and younger then so we didn’t care much to make a difference anyway but walnut hunting was serious business indeed – at least for those of us that loved the fruit, I guess. Armed with sticks and nothing else, we turned the leaves around and otherwise we slowly inched our way forwards, one foot at a time, gently setting it down tentatively on the thick blanket of fallen leaves, alert to feel underneath, without breaking it, the tough and round shape of a walnut quite invisible otherwise in the very place where it belonged – where it simply blended in, just another fallen thing from the same tree, like all the rest.

Once a walnut found, we’d take it as it was and keep it alongside others directly at our breast, full of dirt for sure, with remains of decaying, soft, once-green covering still hanging in tatters around its not yet dry shell otherwise. Sometimes the squirrels had gotten to it first and we’d know it as soon as we lifted the walnut for it felt too light and then it showed easily the little hole through which the goodness inside had been taken away already – what was left, feeling way too light in our small hands, was simply a bit of almost wood, something to throw perhaps in the stove as easy offering to a young and still hesitant flame but nothing more.

When we – or rather our tops – couldn’t carry anymore, we’d go and unload them all in a pile, letting them dry for a while, out of the reach of our reddish competitors with furry tails and marble eyes. Then we’d clear away the last remains of the soft coverings, we’d eat our fill and set the rest within metal wire containers made especially for the purpose – for the storage of all dried fruit was up in the attic, where squirrels could and did get at times but where the heat from the stove downstairs would make the air both dusty-dry and fragrant otherwise with the aromas of everything set up there as dry preserves. And on cold, white winter evenings, when bored of our games or simply made hungry as only that mountain air can make children hungry, we’d climb through the squeaky trap-door of the attic into that store-room of our own and bring downstairs anything we wanted to snack on, for it was rightly ours after all, won fairly and squirrely. We ate most of it too quickly to allow for much preparation or further cooking otherwise and in fairness all that fruit really was perfect exactly as it was – at least perfect for us, the biggest squirrels in that neighbourhood at the time.

Meanwhile I grew up and I went far away from those walnut trees, those slopes, that old attic with its squeaky trap-door and dust dancing in the filtered light of early afternoons. I’m not really hunting for walnuts on the garden floor either, though possibly I’m still a bit of squirrel since I still like walnuts quite a lot – it’s only that I got now way better ways to get them all cleaned up and ready to eat, waiting for me in a bowl at any time. But since there’s abundance of walnuts, as well as time freed up by not having to hunt for them one by one, I take the opportunity at times and make short work of a whole squirrel’s winterstores in one go, just scroll forwards for the pictures of this one single batch out of many and deplore those who have no idea what they are missing.

It all starts with walnuts – lots of them, but set out in batches neatly on a cutting board, for heartless crushing with a rolling pin (well, a rolling pin makes it easy but if you want to sweat it out, use whatever else you can find around, sure):

susan_3_640.jpg
susan_4_640.jpg

While walnuts are getting crushed, sugar – brown or otherwise – gets heated in a pan until it melts and is quite ready to take your skin off if you are silly enough to touch it directly. This is definitely an activity entirely not “safe” and otherwise fully discriminating against the unexperienced (as well as the idiots) in the kitchen – I therefore enjoy it all the more and use it at times to scare any silly kids around, age irrespective:

susan_2_640.jpg
susan_5_640.jpg
susan_6_640.jpg

Crushed walnuts get then tipped into bubbling sugar-lava and a wet wooden spoon is most useful to mix it all up quickly enough so it sticks together without gluing your spoon to the pan itself (you can use your finger instead, if you fancy it burnt to the bone, sure):

susan_7_640.jpg

Tip it off back on to the cutting board that meanwhile got washed and is therefore nicely wet (so you don’t end up needing to scrape it all off the board). Wet a big knife too – the bigger the better, especially if you have to scare anyone away at the same time – and flatten the hot but quickly setting mass into whatever shape you want, cut it into pieces of the exact size and shape your heart desires, set them onto a plate and try to find the camera before they all vanish mysteriously behind your back:

susan_8_640.jpg
susan_9_640.jpg

We used to call the above walnuts-in-caramel sweet “susan” and that would stand for “sesame”, though happily I can fully testify that it has nothing whatsoever to do with sesame, indeed!

July 8, 2020

EuCrypt addition: Keccak File Hashing

Filed under: Coding,EuCrypt — Diana Coman @ 1:37 pm

Since the client data model includes Keccak hashes for files received from Eulora’s server and the files themselves may be of any size whatsoever, it follows that both client and server have to be able to use EuCrypt’s Keccak sponge sequentially too – basically feeding it data in chunks as opposed to all in one go, as a single input (be it bitstream or bytestream). 1 So I got my Ada reference book out on the desk again and it turns out that it’s not even all that difficult really – even though this addition has to be yet another package on top of the existing ones in EuCrypt, mainly because such type of use breaks by definition the stateless guarantee provided by the “single input” use and in turn, this would then propagate to all code that uses the Keccak package (and that’s the encryption scheme, mainly). Therefore, rather than forcing now stateful code everywhere just because there’s a need to calculate hashes for files on the disk, I simply provide this file-hashing as a separate package using the same underlying sponge. Quite as it should even be, I would say: there is only one sponge implementation but there are now two options to using it for hashing, namely a stateless one for data that is held entirely in memory (the one that existed already) and a stateful one for data that is fed sequentially (my new code). As this is now implemented, tested and integrated into the respective parts on both client and server, I’d rather take the time and write it down as well, to unload it and have it all in one place.

The approach here is very straightforward: keep a sponge’s state locally, read from the input file blocks as big as the sponge can handle in one go (and add if needed padding to the last block), pass each block as soon as read on to the sponge, scramble the state and repeat until the whole file has been processed; then squeeze out of the sponge a block and return its first 8 octets given that the hash is meant to be that size. Ada’s Sequential_IO package simply needs to be provided with the type of element to read and then it works like any other file input/output, without any trouble. In principle, the most effective implementation would be to read a whole block (ie as many octets as the sponge can absorb in one go) each time but this means that one has to handle at file reading time the special case of the last block that may be incomplete. For now at least I preferred to sidestep this and I went instead for the cheap and angry solution that seems however perfectly adequate for current needs: simply read a file octet by octet, so that there is no special case at all. Here’s the code that does it all:

  -- for reading files one Octet at a time
  package Octet_IO is new Ada.Sequential_IO(Element_Type =>
                                              Interfaces.Unsigned_8);

  function Hash_File(Filename: in String; Hash: out Raw_Types.Octets_8)
      return Boolean is
    F: Octet_IO.File_Type;
    S: Keccak.State := (others => (others => 0));
    Block_Len: Keccak.Keccak_Rate := Keccak.Default_Byterate;
    Block: Keccak.Bytestream(1..Block_Len);
    Pos: Keccak.Keccak_Rate;
  begin
    Octet_IO.Open(F, Octet_IO.In_File, Filename);
    -- check that this is not an empty file as hashing of that is nonsense
    if Octet_IO.End_Of_File(F) then
      Octet_IO.Close(F); -- close it before returning!
      return False;
    end if;

    -- read from file and absorb into the sponge
    while not Octet_IO.End_Of_File(F) loop
      -- read block by block
      Pos := 1;
      while Pos <= Block_Len and (not Octet_IO.End_Of_File(F)) loop
        Octet_IO.Read(F, Block(Pos));
        Pos := Pos + 1;
      end loop; -- single block loop
      -- if it's an incomplete block, it needs padding
      if Pos <= Block_Len then
        -- pad it with 10*1
        Block(Pos..Block'Last) := (others => 0);
        Block(Pos) := 1;
        Block(Block'Last) := Block(Block'Last) + 16#80#;
      end if;
      -- here the block is complete, padded if needed.
      -- absorb it into the state
      Keccak.AbsorbBlock( Block, S);
      -- scramble state
      S := Keccak.Keccak_Function( S );
    end loop; -- full file loop
    Octet_IO.Close(F);

    -- now squeeze a block and get the 8 octets required
    Keccak.SqueezeBlock( Block, S);
    Hash := Block(1..8);

    -- if it got here, all is well, return true.
    return True;
  exception
    when others =>
      Octet_IO.Close(F);
      return False;
  end Hash_File;

Note that the above returns the *raw* Keccak hash, meaning the direct output of the sponge, as a set of octets. This is normally fine and well but if one specifies the hash as “unsigned 64”, it means that the above set of octets has to be interpreted as a number – and in turn, this means that byte/bit order matters. Since this can and does create confusion quite easily, I’ll state it here plainly again: the raw output of the Keccak sponge is MSB/b, meaning that on a little endian machine, you’ll need to flip both bytes and bits if you want to get the exact same number as you would on a big endian machine! Since this is however something that I already sorted out before, I added to the above convenient wrappers to do this properly so that the whole code should work seamlessly on both big and little endian computers anyway:

  function Hash_File(Filename: in String; Hash: out Interfaces.Unsigned_64)
      return Boolean is
    Raw: Raw_Types.Octets_8;
  begin
    -- calculate the raw hash and then convert it
    if Hash_File(Filename, Raw) then
      Hash := Hash2Val(Raw);
      return True;
    else
      return False;
    end if;
  end Hash_File;
  function Hash2Val( Raw: in Raw_Types.Octets_8 )
      return Interfaces.Unsigned_64 is
    B8: Raw_Types.Octets_8;
    U64: Interfaces.Unsigned_64;
  begin
    -- convert to U64 (NB: no need to squeeze etc, as block_len has to be > 8)
    -- for this to remain consistent on both little and big endian machines:
    -- on little endian, octets and bits need to be flipped before conversion
    if Default_Bit_Order = Low_Order_First then
      for BI in 1..8 loop
        B8(BI) := Keccak.Reverse_Table(Natural(Raw(Raw'First+8-BI)));
      end loop;
    else --simply copy as it is
      B8 := Raw(1..8);
    end if;
    -- convert and return
    U64 := Raw_Types.Cast(B8);
    return U64;
  end Hash2Val;

Using the above, one can now test Keccak hashes of files both raw and in the more usual numerical format (e.g. hex as given for instance by the keksum implementation). More importantly for me, Eulora’s client can now check the hash of a received file when it gets the last chunk of it and therefore it can decide whether the whole thing is any good or not! I’m quite happy to inform as well that initial tests are running fine – the data acquisition part of the client successfully requests files and receives them apparently unmolested (even when there are quite a few chunks, so far I tested with several thousands meaning up to 10MB files), writing them neatly to disk exactly as and where intended. Hooray!

The above out of the way, the uglier next step is to get that hideous gui-code to actually *use* those files properly, too!

  1. This is not something entirely new, since vtools for instance has previously adapted my Keccak implementation to a similar use, in order to calculate the hashes for vpatches. However, the approach taken there (by phf) apparently aimed to wrap the Ada implementation for C/CPP use and I don’t want this at all. First, I’d much rather move C/CPP code to Ada if/when possible than the other way around. Second, there is absolutely no good reason in this case to force any C/CPP code in the mix since Ada actually provides all that is needed to interact with files on the disk without any trouble whatsoever.[]

July 1, 2020

#ossasepia Logs for Jul 2020

Filed under: #ossasepia,Logs — Diana Coman @ 9:08 pm
Day changed to 2020-07-01
diana_coman: dorion – your gbw article is quite an interesting read actually, as it covers a lot of ground and as a side effect, all sorts of tangles and weirds-if-coming-at-them-fresh pop all the clearer into view, hm. [21:08]
jfw: spyked: looks like feedbot's not recovered from netsplit [21:11]
jfw: dorion: coupla broken hrefs in there [21:14]
diana_coman: for 1 sec I thought sonofawitch had some netsplit-misadventure too – until I realised it knew better than me that it's July so the log is in a fresh article, lol [21:16]
diana_coman: jfw – btw, that jwrd.net page still says the famous "coming soon…" [21:20]
jfw: so it does. [21:21]
jfw: dorion: fixpoint.welshcomputning.com ? I don't think you documented putting that in hosts file prior to reading your article! [21:23]
jfw: (imho, since there's specific article links already, the toplevel one isn't really adding much) [21:25]
trinque: hello diana_coman, sorry, been afk for a bit. I'll send an invoice now, and we can start the 1yr today. [21:29]
diana_coman: looking around jfw's blog for a single-point-of-entry clearer on gbw to suggest to dorion as a link on the gbw name itself, I almost got it and then found the last comment. [21:29]
diana_coman: trinque no worries. [21:30]
trinque: !!invoice diana_coman 0.006 1yr of deedbot service [21:30]
deedbot: Get your OTP: http://paste.deedbot.org/?id=Eap8 [21:30]
trinque: !!v 6B4A72AE8878BE7DBA6A118B07384C35983EAABADE4C172BD18913ED3ABF0F62 [21:31]
deedbot: Invoiced diana_coman 0.006 << 1yr of deedbot service [21:31]
diana_coman: !!help [21:32]
deedbot: http://deedbot.org/help.html [21:32]
jfw: how about the spec (also linked by pingback on that preliminary plan article) [21:34]
sonofawitch: 2020-06-02 21:38:51 (#ossasepia) jfw: ftr, our wallet is built to a spec from last year, vpatches are at gbw-node, gbw-signer, and the interpreter gscm, what's missing is mainly writeups introducing those. [21:34]
diana_coman: jfw, yeah, that was where I went next and well, it works in the sense that there's nothing better for the role atm, that's about it. [21:36]
jfw: right, it's not an introduction and an introduction is still needed. [21:38]
diana_coman: !!v 7A03C8A5312B8C9F24525C8CFC2DABCE69053D945D2BFCED98E49044DAEE41BE [21:44]
deedbot: diana_coman paid trinque invoice 1 [21:44]
trinque: ty! [21:44]
diana_coman: trinque – meant to ask, can deedbot announce deeds in here too? [21:44]
trinque: can be done; it's easier to announce deeds from everywhere on all channels, but curious what your preference is. [21:46]
trinque: right now they're all being announced in #trinque [21:46]
diana_coman: trinque – that works fine with me; basically what I want is to know of deedbot's deeds regardless of where they were sent to deedbot [21:46]
diana_coman: hm, come to think of it I guess there's the page too, except that's basically check by polling. [21:48]
jfw: rss deedfeed? [21:48]
trinque: as long as it doesn't have to filter by channel, this is very easy, happy to do so. [21:48]
trinque: couple-line change [21:48]
trinque: jfw: that isn't so hard either. useful? [21:49]
diana_coman: trinque – no filter needed for me; thing is, I obviously can't speak about others and their chans, hence my request was for my chan specifically. [21:49]
trinque: we'll start with that and see how it goes [21:49]
jfw: trinque: prolly not that useful given it can announce directly without the separate service. [21:49]
diana_coman: aha ^. [21:50]
trinque: sg [21:50]
jfw: diana_coman, dorion: I'm curious now how one ends up in this kind of self-punishment. Is it just my lack of providing a ready-made script at work here? Of all the manual ways this one seems about the most laborious [22:17]
jfw: possible, both for the doing and the writing up! [22:17]
jfw: (and in this case there even was a readymade script, in the very previous step, but I can see the point of being sure the V really does build itself) [22:19]
jfw: (and of having all the source patches oneself) [22:20]
diana_coman: jfw – eh, the shortest answer to that is "as a result of all the missed interactions", really. [22:23]
diana_coman: and not only from the side of "the one". [22:24]
jfw: mhm [22:24]
dorion: http://ossasepia.com/2020/07/01/ossasepia-logs-for-Jul-2020/#1027502 – thanks diana_coman. [22:37]
sonofawitch: 2020-07-01 21:08:02 (#ossasepia) diana_coman: dorion – your gbw article is quite an interesting read actually, as it covers a lot of ground and as a side effect, all sorts of tangles and weirds-if-coming-at-them-fresh pop all the clearer into view, hm. [22:37]
dorion: http://ossasepia.com/2020/07/01/ossasepia-logs-for-Jul-2020/#1027504 – thanks fixed. [22:38]
sonofawitch: 2020-07-01 21:14:53 (#ossasepia) jfw: dorion: coupla broken hrefs in there [22:38]
dorion: http://ossasepia.com/2020/07/01/ossasepia-logs-for-Jul-2020/#1027540 – hm, I could've said, open http://fixpoint.welshcomputing.com/v/v/ in your browser and download the seals and vpatches, but I can't offer that as command. it was a pain to write that, but now it's done. [22:45]
sonofawitch: 2020-07-01 22:17:01 (#ossasepia) jfw: diana_coman, dorion: I'm curious now how one ends up in this kind of self-punishment. Is it just my lack of providing a ready-made script at work here? Of all the manual ways this one seems about the most laborious [22:45]
dorion: or I could've eschewed the brace expansion and written wget for each item. maybe it'd be easier to read, but the reasoning was it's not too hard to parse if you know what you're reading and easier to execute. [22:49]
dorion: jfw do you have a ready example of a better way ? [22:50]
jfw: dorion: several, though not meeting your desire for 'just type these 100k characters and it'll work': use external browser and 'scp'; use onboard 'links'; use external 'wget -r' (because yeah, the busybox one doesn't support crawling); paste the urls into a script and run that [22:52]
jfw: not to imply that a fully-working recipe is a bad goal, if recipe is what you're going for [22:53]
jfw: but – and I know this cuts both ways – can you actually imagine someone typing that all in from the blog page? even if the offscreen overflow gets cleaned up [22:55]
jfw: steps 19+ look good tho! [23:00]
dorion: jfw thanks. yeah, I was going for more of a recipe and for sure it'd be a big pain to type out. [23:02]
jfw: personally I would cp/mv things to the system paths rather than using symlinks into the build dir, as I tend to treat build / press dirs as temporary, but since you have them following the patch names it would work if you remember you're doing it. [23:03]
jfw: (steps 11b and 19) [23:04]
dorion: that's a good point too. [23:06]
jfw: The BINDIR change in footnote 2 is harmless but unnecessary – gales doesn't distinguish a /usr but has the symlink for compatibility. [23:09]
jfw: ah and step 16 you do use a copy but to a ? path – I'd just put that in [/usr]/local/bin the same as V [23:13]
jfw: I've indeed tended to use ~/bin before so this is probably a needn't-have-been-problem you've picked up from me; basically I'm making efforts here to cut down on unnecessary optionality. [23:23]
Day changed to 2020-07-02
feedbot: http://thetarpit.org/2020/on-the-power-of-words << The Tar Pit — On the power of words [15:09]
feedbot: http://ossasepia.com/2020/07/01/ossasepia-logs-for-Jul-2020/ << Ossa Sepia — #ossasepia Logs for Jul 2020 [15:10]
feedbot: http://ztkfg.com/2020/07/guitar-practice-log-15-july-1st-2020/ << whaack — Guitar Practice Log 15, July 1st 2020 [15:10]
feedbot: http://ztkfg.com/2020/07/spanish-practice-log-8-july-1st-2020-ordinales/ << whaack — Spanish Practice Log 8, July 1st 2020 – Ordinales [15:13]
feedbot: http://dorion-mode.com/2020/07/gbw-node-gales-bitcoin-wallet-node-verified-acquisition-build-install-and-run-in-21ish-short-simple-steps/ << Dorion Mode — GBW-NODE : Gales Bitcoin Wallet Node verified acquisition, build, install and run in 21ish short, simple steps. [15:14]
diana_coman: http://ossasepia.com/2020/07/01/ossasepia-logs-for-Jul-2020/#1027559 – yeah, but it's not as much the recipe's fault really, it's more of the underlying mess and lack of sane alternative. [21:10]
sonofawitch: 2020-07-01 23:02:51 (#ossasepia) dorion: jfw thanks. yeah, I was going for more of a recipe and for sure it'd be a big pain to type out. [21:10]
diana_coman: http://ossasepia.com/2020/07/01/ossasepia-logs-for-Jul-2020/#1027565 – you know, all those are good but the trouble made plain there is essentially that current trb requires some level of desperation/insanity/passion-in-the-religious-sense to deploy, pretty much. [21:12]
sonofawitch: 2020-07-01 23:23:38 (#ossasepia) jfw: I've indeed tended to use ~/bin before so this is probably a needn't-have-been-problem you've picked up from me; basically I'm making efforts here to cut down on unnecessary optionality. [21:12]
jfw: diana_coman: I'm not sure that's just in the deployment either; e.g. the still unhealed miner/node externality [21:21]
diana_coman: jfw – ah, certainly; the deployment is just the surface/first-contact part, sure. [21:22]
diana_coman: and a consequence in the end. [21:23]
jfw: I suppose the question is whether in the end it demands less insanity and works better than what they call bank accounts these days [21:26]
diana_coman: for that matter and to add layers of either sadness of laughter to it all, there isn't even any discernible purpose or intention, only side effects. [21:32]
diana_coman: jfw – eh, only different insanity and one that tends to be more familiar for most; but comparing levels of insanity is not all that meaningful, you know? [21:33]
diana_coman: (the above re bank accounts) [21:33]
jfw: diana_coman: purpose/intention in what? [21:35]
diana_coman: jfw – in that requirement of passion. [21:35]
diana_coman: ie it's not that anyone set on purpose to make it painful; nevertheless (and predictably once looking at it properly), that's how it ends up. [21:36]
diana_coman: anyway, in more practical considerations, there's no reason why it has to remain as insane as that forever and ever or something. [21:40]
jfw: certainly. [21:40]
jfw: I see what you're saying now about making it painful but don't yet have the vantage point where it's predictable. [21:42]
diana_coman: well, that's the top of a whole forest so maybe another time; but look at the simple fact that the moment the whole thing is exposed worse-than-usual, the first reaction is to "fix" … the person exposing it, not the thing. [21:48]
diana_coman: this is btw exactly why I was saying that dorion's gbw article is quite an interesting read – exactly because it's not written by the usual too-familiar-with-the-madness-to-find-an-easier-way-around-it. [21:50]
sonofawitch: 2020-07-01 21:08:02 (#ossasepia) diana_coman: dorion – your gbw article is quite an interesting read actually, as it covers a lot of ground and as a side effect, all sorts of tangles and weirds-if-coming-at-them-fresh pop all the clearer into view, hm. [21:50]
diana_coman: hm, that should be clearer perhaps as too familiar with it to go a longer/harder route. [21:53]
jfw: on the surface those read as opposites, but I take your meaning as: too familiar with the trails through the forest to bother clearing & paving a road [21:55]
diana_coman: too familiar to *not* find an easier route; apparently I lost the "not" in there, but it's long anyway. [21:56]
diana_coman: http://ossasepia.com/2020/07/01/ossasepia-logs-for-Jul-2020/#1027592 – almost; a bit worse in that it's more like too familiar with dodging poisonous darts at each step to even pay much attention to all the crazy moves (sure, also doing as a result of familiarity the best moves there, most effective etc;) [22:00]
sonofawitch: 2020-07-02 21:55:37 (#ossasepia) jfw: on the surface those read as opposites, but I take your meaning as: too familiar with the trails through the forest to bother clearing & paving a road [22:00]
diana_coman: in the end the difference is simply "this is insane and has to change" vs "this is unfortunate/not pleasant but inevitable" [22:02]
jfw: are you saying dorion had that first perspective while I had the second, or what? because I'm not seeing that at all [22:06]
diana_coman: jfw – no, I'm saying that dorion's article is more useful to give one that first perspective. [22:08]
jfw: ah ok, indeed. [22:09]
diana_coman: what perspective each person has is up to them in the end; I don't have any need to highlight other people's perspectives on this now, lol. [22:11]
jfw: I'd say I was in between – not "unfortunate but inevitable" but that there's a cost to improving it which I didn't see as a high priority, while the article's perhaps pushing me in that direction. [22:12]
diana_coman: I can see it. [22:13]
diana_coman: worth perhaps noting also that absent any other ways to commit to one or another piece of work, what gets done or not (and in a more general sense, not specifically about trb now) is always decided simply by perceived cost-of-improvement vs pain-of-current-state, there isn't much else left. [22:27]
diana_coman: even decided and then re-decided, as the balance shifts, of course. [22:27]
jfw: yep, and that got a chuckle from me. [22:32]
diana_coman: heh, glad to hear it did! [22:34]
Day changed to 2020-07-03
feedbot: http://trilema.com/2020/the-journall-of-the-good-mr-archibald-pizdys-as-laid-in-his-own-hand-for-the-year-of-our-king-charles-19th-week-13/ << Trilema — The journall of the good Mr. Archibald Pizdys, as laid in his own hand for the year, of our King Charles, 19th, week 13. [11:33]
feedbot: http://trilema.com/2020/the-journall-of-the-good-mr-archibald-pizdys-as-laid-in-his-own-hand-for-the-year-of-our-king-charles-19th-week-12/ << Trilema — The journall of the good Mr. Archibald Pizdys, as laid in his own hand for the year, of our King Charles, 19th, week 12. [20:11]
diana_coman: aww, why so fickle lately, feedbot [20:36]
Day changed to 2020-07-04
feedbot: http://bimbo.club/2020/07/a-conversation-in-the-foggy-forest/ << Bimbo Club — A conversation in the foggy forest. [08:30]
diana_coman: lolz [17:16]
diana_coman: !!up #ossasepia DoomS [17:16]
deedbot: DoomS voiced for 30 minutes. [17:16]
diana_coman: hello DoomS [17:16]
DoomS: hello :> [17:16]
diana_coman: how did you find your way in here? [17:17]
diana_coman: ori zi pe romaneste daca-i problema de engleza [17:18]
DoomS: asa, acuma sunt pe zona.. [17:21]
DoomS: am citit pe forum la Mircea, si am gasit pe acolo o cale prin care sa intru si aici pe canal :) [17:21]
diana_coman: de intrat ai intrat da' …ai idee in ce ai intrat? lol [17:22]
DoomS: lol [17:23]
DoomS: aici intra cine vrea si iese cine poate ? sau de ce intrebi ? [17:23]
DoomS: pentru mine e doar un simplu canal de IRC, chiar nu stiu in ce m-am bagat.. :D [17:24]
diana_coman: ahaha, neah, nu-i greu de iesit; din experienta zic ca-i eventual mai greu de ramas decat de plecat da' in fine [17:24]
diana_coman: numa' eram curioasa ce cauti cum ar veni, aia-i [17:25]
diana_coman: si in fine, trolam aici bietii oameni altminteri ca nu citesc toti romana acum; [17:25]
diana_coman: DoomS da' in fine, vezi ca-i logat cum zice si-n status e.g. http://ossasepia.com/2020/07/01/ossasepia-logs-for-Jul-2020/#1027612 si altminteri de acolo gasesti ma gandesc restul. [17:26]
sonofawitch: 2020-07-04 17:16:38 (#ossasepia) diana_coman: !!up #ossasepia DoomS [17:26]
diana_coman: DoomS – cand zici "pe forum la Mircea" tu zici adica blogul lui, trilema.com , este? [17:28]
DoomS: e vorba de blog diana_coman, da. am gresit eu. trilema.com [17:29]
diana_coman: nu-i bai. [17:31]
feedbot: http://ztkfg.com/2020/07/spanish-practice-log-9-july-4th-2020/ << whaack — Spanish Practice Log 9, July 4th 2020 [20:42]
diana_coman: whaack – how's it going with scoping that block explorer? [21:02]
Day changed to 2020-07-05
feedbot: http://trilema.com/2020/please-dont-eat-the-daisies/ << Trilema — Please don't eat the daisies [18:42]
Day changed to 2020-07-06
whaack: diana_coman: it's going poorly, all I've done are a few passes of jfw's articles on bitcoin transactions and their signing, and a skim of one of his gbw node article. I've been flopping around putting time into new saltmines, side projects, spanish study, and derpage, and haven't found the ability to structure my day to allow for long enough stretches to make good progress [19:37]
diana_coman: whaack – so maybe promote one of the side projects to "front project", what's the trouble. [20:58]
Day changed to 2020-07-07
whaack: diana_coman: No I don't think that works, because I find the block explorer much more important than anything else I'm doing. [20:22]
whaack: diana_coman: I read through jfw's series on gbw node yesterday. Some articles I digested more than others. It seems that gbw node is just a few settings and a small interface away from being a block explorer. [20:24]
diana_coman: whaack – so ask jfw where/what doesn't quite make sense, no? [20:36]
whaack: diana_coman: yes of course. Mostly I mean that some of the details, such as all the various functions needed to craft bits into the correct encoding, were skimmed. [20:39]
diana_coman: so install it, give it a spin, write up the whole thing, the works; I wouldn't be all that surprised if there's in there most of what you need for a block explorer, perhaps only even more than absolutely needed for that as such, but not like there's any loss in getting to know that code properly. [20:41]
whaack: jfw: Does the following sound like a feasible/reasonable way to go about making a block explorer. (1) Get a beefy machine (specifics to be calculated, but 2 TB of SSD, 16GB of Ram, 3.0Ghz processor are some ballpark estimates) (2) Install trb and gbw node. (3) Configure gbw to watch *all* addresses, and give a public interface for the sql db [20:41]
whaack: I'm setting my goal for today to build trb and gbw node locally. I'm going to read http://thebitcoin.foundation/trb-howto.html and dorion's guide here http://dorion-mode.com/2020/07/gbw-node-gales-bitcoin-wallet-node-verified-acquisition-build-install-and-run-in-21ish-short-simple-steps/ first. [21:00]
diana_coman: sounds good. [21:01]
whaack: while setting, up trb locally I hit an error upon running `make ONLINE=1` . I was curious to see if running the command again required redownloading/compiling everything, so I ran it again, and I hit a new error. Then I was intruiged by hitting a 2nd error, so I ran it again, and got a 3rd error. I've decided to stop before running it a 4th time. Here are the errors I've received: [22:32]
whaack: http://paste.deedbot.org/?id=uZyS [22:32]
whaack: I'm giving http://fixpoint.welshcomputing.com/2020/build-system-overhaul-for-bitcoind/ a read now, seems like I may have hit some problem from LD_LIBRARY_PATH getting set when setting up eulora [22:36]
whaack: Looks like the problem may have been that my path variable was wrong, setting my gcc to some gcc 8.x used by GNAT [22:50]
Day changed to 2020-07-08
whaack: Now, using jfw's new build system overhaul patch, I ran make ONLINE=1 again, and I sat and watched the spew of logs. I saw a bunch of python errors somewhere in the middle, so I have a hunch that I have a problem for having python 2.6.6 installed instead of python 2.7. [00:32]
whaack: ^ This was the problem, I had a successful build by switching my python to 2.7 [00:49]
whaack: jfw: I have bitcoind running, the debug logs say I'm at height 100k or something. I wanted to see if I could watch the address 1Q2TWHE3GMdB6BZKafqwxXtWAWgFt5Jvm3 that allegedly received 10 btc at [block 170] [https://www.blockchain.com/btc/tx/f4184fc596403b9d638783cf57adfe4c75c605f6356fbc91338530e9831e9e16] I did the following steps which I believed would result in being able to see a balance for [01:43]
whaack: that address http://paste.deedbot.org/?id=byob but instead I saw a balance of 0 after scanning above block 170. [01:43]
feedbot: http://ztkfg.com/2020/07/spanish-practice-log-10-july-5th-2020/ << whaack — Spanish Practice Log 10, July 5th 2020 [04:14]
feedbot: http://ztkfg.com/2020/07/spanish-practice-log-12-july-7th-2020/ << whaack — Spanish Study Log 12, July 7th 2020 [04:19]
feedbot: http://ztkfg.com/2020/07/spanish-practice-log-11-july-6th-2020/ << whaack — Spanish Practice Log 11, July 6th 2020 [04:36]
jfw: I'm alive, just in a bit of a hole owing to various accumulated sins against time. Light's on the horizon though. [04:57]
jfw: whaack: much of the code in gbw-node would be directly useful for a block explorer, indeed. I would definitely suggest some schema tweaks though. [05:01]
jfw: for example adding a table to track blocks and factoring block_hash and block_height out of tx into that, referenced by integer primary key [05:04]
jfw: (32 byte hash -> 8 byte rowid, multiplied by every transaction in bitcoin would save quite some space I expect.) [05:06]
jfw: and removing the "input" table (which I believe I mentioned in the schema article) [05:07]
jfw: whaack: as is it can't be told to track "all" addresses; there's a list and that list won't fit all possible seen & unseen addresses. If you mean changing the code to remove the 'watched address' checks and index all seen addresses, then yes that's the way to go. [05:12]
jfw: Possibly even the way gbw-node itself ought to be – though the full index will have a hefty size cost. [05:12]
jfw: incidentally if TRB had used SQL this tradeoff would literally be a one-liner CREATE INDEX. [05:13]
jfw: 2T/16G wouuld be plenty beefy enough, indeed 1T/4G probably fine [05:16]
jfw: the extra ram can always be thrown at database cache though so won't hurt. [05:17]
jfw: re make errors, haven't looked specifically but without my patch, repeating 'make' can indeed produce different errors because it gives 'make' no way to see that an openssl/bdb/boost build failed and it just proceeds. [05:20]
jfw: python errors in trb build? that's a bit surprising, my guess would be Boost as it has some python binding thing, "shouldn't" be necessary for trb tho [05:22]
jfw: however 2.7 is a hard requirement for gbw-node as I haven't found a non-glacial alternative to memoryviews given the volume of deserialization it has to do. [05:24]
jfw: whaack: re block 170, I bet your problem is that the site you got the address from is revising history to imply that "1-addresses" were used back then. They weren't; the standard script was pay-to-pubkey, no hash. I dunno how it was presented in the early UI but at least would have been a longer string. [05:27]
jfw: if you look at the 'disassembly' of the scriptPubKey on such a site, and compare to a more sample, you'll see the difference. [05:29]
jfw: *more recent sample [05:29]
jfw: "more recent" as in past the first couple 10k, iirc. [05:30]
jfw: whaack: I un-lazied and clicked your link, this is indeed the situation. [05:32]
jfw: gbw-node indexes only actual "1-addresses", i.e. scripts matching the standard p2pkh form. For a block explorer, a middle ground between that and writing special cases for all sorts of weird species of script would be indexing the script itself as a blob. [05:35]
jfw: out_script_address is the filtering/extraction function there. [05:38]
whaack: jfw: Addressing a few things: Yes I meant changing the code to remove watched addresses and index all seen addresses. [05:39]
whaack: jfw: Indeed, I believe the problem was with building Boost. [05:40]
jfw: whaack: cool. Off to sleep now but I should be back tomorrow. [05:41]
whaack: jfw: gn [05:42]
diana_coman: http://ossasepia.com/2020/07/01/ossasepia-logs-for-Jul-2020/#1027648 – o.O *what* gnat did you ever install there to have such monstrosity as gcc 8.* ? [09:54]
sonofawitch: 2020-07-07 22:50:20 (#ossasepia) whaack: Looks like the problem may have been that my path variable was wrong, setting my gcc to some gcc 8.x used by GNAT [09:54]
diana_coman: http://ossasepia.com/2020/07/01/ossasepia-logs-for-Jul-2020/#1027650 – I guess it's good to know it requires 2.7 [09:55]
sonofawitch: 2020-07-08 00:49:46 (#ossasepia) whaack: ^ This was the problem, I had a successful build by switching my python to 2.7 [09:55]
diana_coman: http://ossasepia.com/2020/07/01/ossasepia-logs-for-Jul-2020/#1027656 – glad to hear you're alive! wondering if it's enough of a hole to keep you from repeating it in the future, too. [09:55]
sonofawitch: 2020-07-08 04:57:33 (#ossasepia) jfw: I'm alive, just in a bit of a hole owing to various accumulated sins against time. Light's on the horizon though. [09:55]
diana_coman: http://ossasepia.com/2020/07/01/ossasepia-logs-for-Jul-2020/#1027663 – heh. [09:56]
sonofawitch: 2020-07-08 05:13:57 (#ossasepia) jfw: incidentally if TRB had used SQL this tradeoff would literally be a one-liner CREATE INDEX. [09:56]
whaack: jfw: Interesting, I did not know that once-upon-a-time outputs provided a script w/ a pub key that was not hashed. http://ossasepia.com/2020/07/01/ossasepia-logs-for-Jul-2020/#1027674 seems like a good plan. [15:29]
sonofawitch: 2020-07-08 05:35:48 (#ossasepia) jfw: gbw-node indexes only actual "1-addresses", i.e. scripts matching the standard p2pkh form. For a block explorer, a middle ground between that and writing special cases for all sorts of weird species of script would be indexing the script itself as a blob. [15:29]
whaack: diana_coman: gnat –version gives "GNAT Community 2019 (20190517-83)" on the first line [15:30]
diana_coman: whaack – ah, that explains it, yeah; but I would think you'd run into all sorts of other trouble trying to compile that client on that version of gcc, really; not like I don't have the 2016 gnat mirrored on my site and all that, even if you don't want to go through the more intricate steps of building one of ave1's versions, huh. [15:32]
feedbot: http://ossasepia.com/2020/07/08/eucrypt-addition-keccak-file-hashing/ << Ossa Sepia — EuCrypt addition: Keccak File Hashing [15:38]
whaack: diana_coman: I am not quite sure why I wound up with that monster gnat, I believe it was from doing the eulora install hastily. In any case I made sure to compile bitcoind with gcc 4.4.7 [15:48]
feedbot: http://ztkfg.com/2020/07/building-trb-on-centos-69-notes-on-a-few-gotchas/ << whaack — Building TRB on CentOS 6.9, Notes on a Few Gotchas [16:33]
feedbot: http://trilema.com/2020/the-worlds-great-though-unfortunately-populated-sau-mula-n-beige/ << Trilema — The world's great though unfortunately populated, sau mula-n beige [20:17]
feedbot: http://ztkfg.com/2020/07/how-to-test-gbw-node-by-viewing-the-first-ever-transaction-containing-a-p2pkh-address/ << whaack — How To Test gbw-node By Viewing The First Ever Transaction Containing a p2pkh Address [20:48]
diana_coman: seems like whaack is having fun with jfw's gbw-node, not bad [21:01]
jfw: :) [21:46]
jfw: http://ossasepia.com/2020/07/01/ossasepia-logs-for-Jul-2020/#1027656 – might even be. "woah, time management & communication skills aren't just for YH or TMSR but the outside world too?" kinda thing [21:55]
sonofawitch: 2020-07-08 04:57:33 (#ossasepia) jfw: I'm alive, just in a bit of a hole owing to various accumulated sins against time. Light's on the horizon though. [21:55]
jfw: ah wrong quote – http://ossasepia.com/2020/07/01/ossasepia-logs-for-Jul-2020/#1027684 [21:55]
sonofawitch: 2020-07-08 09:55:52 (#ossasepia) diana_coman: http://ossasepia.com/2020/07/01/ossasepia-logs-for-Jul-2020/#1027656 – glad to hear you're alive! wondering if it's enough of a hole to keep you from repeating it in the future, too. [21:55]
jfw: on the bright side, I got 4200 words out in two days or thereabouts. [21:57]
diana_coman: jfw – was that sudden writing-productivity necessity induced? (little time, must-deliver thing) [21:58]
jfw: yeah [22:06]
jfw: whaack: what V are you using these days? [22:10]
diana_coman: jfw – aha; basically there's too little real pressure here to deliver proper change, lol. [22:13]
jfw: money's the best alternative I know of to actual whips in that regard [22:16]
whaack: jfw: I'm using v.pl version 99991 [22:16]
jfw: "grades" stopped doing it for me around age 12 [22:17]
jfw: whaack: thought so. you might notice it's quite slow on pressing or anything else on the trb tree; I've since patched it for that [22:18]
diana_coman: jfw – supposedly it was internal, hence wanting to be here in the first place; not "grades", certainly not; and for that matter, if a 30 yo was still after grades as motivation, ugh. [22:19]
whaack: jfw: It wasn't instant, but also not very slow on my machine. Regardless I'll take a look at your article about fixing up v.pl [22:21]
jfw: diana_coman: do you mean the "real pressure around here" as internal? [22:23]
diana_coman: jfw – I mean that via an irc chan I can provide mainly feedback, not whips! and so it's unsurprising that it works only to the extent that there is internal motivation for that change; I guess previously, the missing-the-tmsr-boat provided additional whip but once that gone, it shows if there was anything else or to what extent. [22:30]
jfw: I see I've gone silent here. I won't say I've had much internal motivation to write for example, otherwise sure, I'd have been doing it more already. As far as change as a whole, not sure what to make of it yet. [22:53]
diana_coman: eh, internal motivation is more general than that sort of "to write" or "to do X", it's basically motivation to *improve*; the idiocy of compartmentalizing is just as much idiocy when/if applied to this as to anything else; other than that, "choice" comes into it only when indeed, there are so many opportunities identified and *taken* that there's just no time for another one – more of a mythical [23:01]
diana_coman: situation than ever a real one. [23:01]
jfw: I think I see. [23:05]
Day changed to 2020-07-09
feedbot: http://ztkfg.com/2020/07/spanish-study-log-13-july-8th-2020/ << whaack — Spanish Study Log 13, July 8th 2020 [05:10]
feedbot: http://ztkfg.com/2020/07/a-bitcoin-block-explorer-the-why-the-how/ << whaack — A Bitcoin Block Explorer – The Why & The How [18:44]
Day changed to 2020-07-10
feedbot: http://bimbo.club/2020/07/triles-an-tribinlations/ << Bimbo Club — Triles an' Tribinlations [06:54]
feedbot: http://bimbo.club/2020/07/bimbo-at-the-gates/ << Bimbo Club — Bimbo at the gates. [10:35]
feedbot: http://trilema.com/2020/what-i-said-was/ << Trilema — What I said was… [16:21]
Day changed to 2020-07-11
whaack: jfw: do you have a way to display the hash of a txn nicely inside of your sql interpreter? [19:09]
diana_coman: !!up #ossasepia danuker [20:35]
deedbot: danuker voiced for 30 minutes. [20:35]
diana_coman: hello danuker [20:35]
jfw: whaack: not sure what you mean by interpreter but possibly ".mode quote" in ~/.sqliterc ? [20:41]
jfw: whaack: then there's still the issue that the satoshi code reverses byte order for no apparent reason; /package/gbw-node/library/swaphex.py can be used for that conversion [20:43]
jfw: whaack: the sqliterc part I mentioned here but I plan to put it in the README too. [20:46]
diana_coman: !!up #ossasepia danuker [21:07]
deedbot: danuker voiced for 30 minutes. [21:07]
diana_coman: fwj jwf and all possible combinations – when do you plan to add tab-completion to yrc? [21:08]
jfw: diana_coman: I'd have to say it's not among my priorities at this time, or JWRD's as far as I can see (dorion, do you agree?), and likely won't be for a few months. I'm sorry if that's not adequate, and if that means you won't use it, I'll understand. [21:16]
jfw: if it and the other editing features were a straightforward change I'd do it, but they're not. [21:16]
diana_coman: jfw – the sooner known the better; fine. [21:18]
jfw: right, and I should have said this earlier; optimism strikes again. [21:19]
jfw: A TRB patch downloader of one form or another is on for this week though. [21:21]
dorion: jfw I agree yrc isn't a high priority atm. [22:11]
feedbot: http://trilema.com/2020/survivor-legacy-or-vidya-games-are-dead/ << Trilema — Survivor Legacy, or vidya games are dead [22:17]
jfw: dorion: ack. [22:21]
whaack: jfw: by interpreter I meant the text interface that allows you to query the db when you run "sqlite3 ~/.gbw/db" . What you linked to looks like what I need. Although apparently sqlite v 3.7.17 doesnt have quote mode.. [22:53]
Day changed to 2020-07-12
jfw: whaack: oh I see; I was going to suggest ".mode insert" instead but on testing the centos6 version I find it produces nonsense in some cases e.g. select X'80'; => INSERT INTO table VALUES(X'ffffff80'); What a pain! [04:44]
jfw: whaack: found the fix in http://archive.is/dDtit which looks to have quietly slipped into 3.7.12. Previously my documented minimum requirement was 3.7.0, which I now see the centos6 rpm doesn't meet. Expect transactional throughput to very much suck due to lack of WAL journal mode (or sacrifice crash consistency). [05:52]
jfw: ah but you said 3.7.17, d'oh. Should be good on those counts then, so go with ".mode insert". [06:13]
diana_coman: <danuker> salutari! as vrea sa va multumesc pentru datele de labac: http://ossasepia.com/bac-data/ – da' cu placere! In general sunt online pe aici pe la 7UTC, cred ca-i 10 ora ro. [10:04]
diana_coman: !!up #ossasepia danuker [10:05]
deedbot: danuker voiced for 30 minutes. [10:05]
danuker: e 11 :) [10:05]
diana_coman: atunci 11 [10:05]
diana_coman: la ce-au folosit datele? [10:05]
danuker: am facut un top al liceelor mai recent; vreau sa fac o harta colorata [10:06]
danuker: analiza pe site-ul tau e doar din 2011 [10:06]
diana_coman: foarte frumos; ai un sit ori lucrezi cu careva? [10:06]
danuker: am site, https://danuker.go.ro/ [10:07]
diana_coman: eh, pai are ceva istoric, da [10:07]
danuker: dar nu e pus inca [10:07]
danuker: de vreme ce nu l-am nici terminat [10:07]
danuker: am aflat de ce nu folosesti HTTPS xD [10:07]
diana_coman: ha, si crypto, ce ai nimerit [10:07]
danuker: adica v-am nimerit pe voi? [10:07]
danuker: am cautat scraper de bac pe github [10:08]
diana_coman: intre timp cred ca or mai fi schimbat formatul ala de vreo 100 de ori [10:08]
danuker: eh; firma corupta [10:09]
diana_coman: danuker – da' hai sa trecem totusi pe iengleza ca mai citesc si altii bietii [10:09]
danuker: sure [10:09]
danuker: I found out what you do in #therealbitcoin [10:09]
diana_coman: ahahah [10:09]
danuker: after re-reading "reflections on trusting trust" I realized I can not find something not compiled with a C compiler [10:10]
diana_coman: danuker – here, have a read of some history there and the comments from those in #therealbitcoin [10:10]
danuker: thanks; I am paralyzed overflowing with information [10:11]
diana_coman: there's a deep rabbit… burrow, what hole, you found [10:11]
diana_coman: yeah, I can imagine; kind of trying to keep it to a minimum as it is [10:11]
diana_coman: !!key danuker [10:11]
deedbot: Not registered. [10:11]
danuker: yeh; I think they deleted my account for not logging in in ages [10:12]
diana_coman: danuker – no, deedbot is nothing to do with chanserv/nickserv and the like [10:12]
diana_coman: there's more to read (a lot!) right there! [10:12]
danuker: oh, haha [10:12]
diana_coman: hand around and you'll get to it though, there's time now, too much time even [10:13]
diana_coman: danuker – do you mind saying how old are you? [10:13]
diana_coman: hang around, I meant [10:13]
danuker: I'm 28; why? [10:13]
diana_coman: danuker – mainly to get some idea as to what makes most sense to you [10:14]
diana_coman: and otherwise irc-able made me curious; apparently younger people never-heard-of-irc-omg [10:15]
danuker: yeh :( the facebook and messenger and twatter drones [10:15]
diana_coman: danuker – at any rate, trust and its issues makes for quite a solid root of things around here, so you'll probably find a lot of interesting things [10:17]
diana_coman: I think messenger and twatter are so last season already, it must be discord nao! [10:17]
diana_coman: and telegram or whatwasit [10:17]
danuker: well, you got one trustpoint from me for that grade list; and one for NOT using HTTPS? [10:18]
diana_coman: danuker – did you stumble upon the web of trust (WoT) yet? [10:18]
danuker: yes, but I did not learn how to use it yet [10:19]
danuker: i'll just keep the trust in my mind [10:19]
diana_coman: well, for starters you need an identity to at least be part of it; that atm means a RSA keypair & registering it with deedbot, hence my earlier !!key [10:19]
diana_coman: !!help [10:19]
deedbot: http://deedbot.org/help.html [10:19]
diana_coman: as for the WoT, this is the canonical reference. [10:20]
danuker: I have to finish my map first; then I'll help you remove crud from BTC; though my C is very rusty [10:20]
danuker: haha, the official approved canonical WoT, eh? [10:20]
diana_coman: ahaha, no [10:21]
diana_coman: danuker – you'll trip over a LOT of things if you just take words to mean exactly what you found them to mean so far, you know? [10:21]
diana_coman: canonical reference for one thing has nothing to do with "approved wot" , lolz [10:21]
danuker: oh, I thought it was keys on that page [10:22]
diana_coman: it's the main source explaining *what the thing is* [10:22]
danuker: but it's teh technical manual [10:22]
diana_coman: well, reference, d'oh [10:22]
danuker: right [10:22]
diana_coman: not even that, lol! [10:22]
diana_coman: although thinking of trilema.com as a compendium of technical manuals makes me chuckle :)) [10:23]
diana_coman: danuker – if you want the keys and to explore the wot, you want wot.deedbot.org [10:24]
diana_coman: but note that WoT as a concept is one thing, while *one particular implementation of it* is another [10:24]
danuker: thank you; I hope I can find the reference again, I am in over my head [10:25]
danuker: I have to put all the links in one place [10:26]
diana_coman: btw re cleaning btc code and the like – for one thing it's quite a tall order to start directly with it (and yes, trust has to do with this too!), for another, there's more than what #therealbitcoin pretends there is. [10:26]
danuker: there are other projects? [10:26]
diana_coman: danuker – this chan is logged, you can always find all of it later, see e.g. http://ossasepia.com/2020/07/01/ossasepia-logs-for-Jul-2020/#1027771 [10:26]
sonofawitch: 2020-07-12 10:10:49 (#ossasepia) diana_coman: danuker – here, have a read of some history there and the comments from those in #therealbitcoin [10:26]
diana_coman: danuker – well, for starters, see jfw's , e.g. http://fixpoint.welshcomputing.com/2020/build-system-overhaul-for-bitcoind/ [10:28]
diana_coman: more links! [10:28]
diana_coman: danuker – what do you do other than highschool maps, if you don't mind saying? [10:28]
danuker: I was a web developer; but in the past few years I was not employed [10:30]
danuker: I worked on a project to do algorithmic trading [10:30]
diana_coman: heh, I was just typing "riding btc, eh?" [10:30]
danuker: on my own [10:30]
danuker: well, I hodled yes, and am still evaluating the system [10:31]
danuker: I am not positive it would make more money than lose yet :D [10:31]
danuker: my daily routine involves lots of youtube :( [10:32]
diana_coman: well, projects are around aplenty; fwiw, if you haven't found it yet, I'm cto for minigame and eulora (the game) has a lot of ~all sorts, just waiting for some intelligent people, really [10:32]
danuker: wow, I haven't seen it, but looks nice [10:33]
danuker: the game I mean [10:33]
diana_coman: so you have then the advantage that it's very, very easy to get all of a sudden way more productive – just ditch the stupid videos and read + write, it's way better for your mind [10:33]
diana_coman: danuker – if you manage to register a key with deedbot, I'll rate you and then you can simply !!up #ossasepia yourself so you can talk whenever you want to [10:34]
diana_coman: right on cue, deedbot, pfft [10:35]
diana_coman: !!up #ossasepia danuker [10:35]
deedbot: danuker voiced for 30 minutes. [10:35]
danuker: =D will do, thanks! [10:35]
diana_coman: no problem; and just ask when/if you're stuck with anything, this is *meant* even as a learning place to start with. [10:35]
danuker: does Ossa Sepia mean something? [10:36]
diana_coman: (that being said, it's usually around 7pm UTC that I get around to answer but others might be around anyway) [10:36]
diana_coman: well, ossasepia does; ossa sepia also; lol, see from my About page [10:36]
diana_coman: and perhaps younghands.club too (just in case you were running out of links already!) [10:37]
danuker: xD thanks for the chat, data, and community [10:38]
diana_coman: no problem; enjoy! [10:38]
danuker: I'm sure I clicked on that link also at some point today [10:38]
danuker: is ASCII-armored a joke name for plaintext, or an encryption method? [10:40]
diana_coman: lol, neither [10:42]
diana_coman: in a nutshell, it's binary to text [10:42]
diana_coman: !!key danuker [11:53]
deedbot: http://wot.deedbot.org/2888CDD3B497BA2C31B9CADF11E079C6CB0BE73B.asc [11:53]
diana_coman: oh hey, cool; well done, danuker! [11:54]
diana_coman: !!up #ossasepia danuker [11:54]
deedbot: danuker voiced for 30 minutes. [11:54]
diana_coman: I'll get around sometime today to rate you. [11:54]
danuker: No hurry; I don't have much to say, nor do I expect any trust. For all you know, I could be a covert agent. [12:18]
diana_coman: lol, a covert agent of…. what exactly? [12:54]
diana_coman: the "subversion with words" shtick anyways does exactly 0 [12:55]
diana_coman: !!v FA312C3C3E9FD093AB2CCDF9B3A164797E50EEF8221D651CB7E41FE101966602 [14:34]
deedbot: diana_coman rated danuker 1 << found his way around following the bac-data track; writes at danuker.go.ro [14:34]
diana_coman: danuker – there you go. [14:34]
danuker: why, thank you ^_^ [15:28]
danuker: by the way, I find it perplexing that many parents in Romania use the entrance exam averages to judge high schools, instead of the "exit exam" (bac). You should not judge a school by demand, but by performance! [15:30]
feedbot: http://ossasepia.com/2020/07/12/making-short-work-of-a-squirrels-winter-stores/ << Ossa Sepia — Making Short Work of a Squirrel's Winter Stores [17:39]
diana_coman: danuker – heh, no idea why that might be? (perplexing is usually a good sign there's more to the thing than you notice yet) [17:45]
danuker: diana_coman, you are right, I must state in my article that what goes in matters also; and that I do not keep track of that [18:18]
danuker: I changed to a local IRC client and I had to re-up myself; does that only happen when changing network? [18:19]
danuker: also, I am worried about polluting the channel; I don't know what this channel likes [18:21]
whaack: hey danuker, i had a debate with an irl friend the other day about using / not using https, thought you may have been him. there's no list of likes, but good questions are well received [18:33]
whaack: cruciform: what ever happened to you? you seemed to join at a moment I was inactive here, so never got to say hi [18:34]
diana_coman: danuker – there's even more to that evaluating-based-on-what-goes-in that simply "well, obviously can't make silk purse out of sow's ear"; a whole cultural trip just in there, if you truly want to make it. [18:43]
diana_coman: re deedbot – you'll have to re-up whenever you reconnect, basically; think of it: how can deedbot know it's still "you" if you reconnect? [18:43]
danuker: whaack, I am not that friend of yours, sorry [18:44]
danuker: my position on HTTPS right now is to make it optional [18:45]
danuker: and I will configure my website soon [18:45]
whaack: danuker: I learned when I saw the romanian [18:45]
diana_coman: http://ossasepia.com/2020/07/01/ossasepia-logs-for-Jul-2020/#1027867 – eh, for starters, don't worry – worry never helped anyone, ever; for follow up – don't worry about likes and in general about what the "outcome", focus instead of why and how as they are more important anyway; to follow up even further – basically what I'll bash on sight is [18:49]
sonofawitch: 2020-07-12 18:21:00 (#ossasepia) danuker: also, I am worried about polluting the channel; I don't know what this channel likes [18:49]
diana_coman: militant ignorance and stubborn idiocy, that's about it. [18:49]
whaack: jfw: ack re .mode insert, ty [20:13]
diana_coman: jfw, btw here's your previous question about why and how "curiosity" seems to come and go in fact answered plainly recently. [21:44]
sonofawitch: 2020-02-15 15:38:49 (#ossasepia) jfw: I mean that I'm not too aware of when or why that kind of motivation comes or goes, or how to make it more useful for me [21:44]
sonofawitch: 2020-07-02 22:27:02 (#ossasepia) diana_coman: worth perhaps noting also that absent any other ways to commit to one or another piece of work, what gets done or not (and in a more general sense, not specifically about trb now) is always decided simply by perceived cost-of-improvement vs pain-of-current-state, there isn't much else left. [21:44]
diana_coman: not as much about curiosity, after all. [21:44]
feedbot: http://trilema.com/2020/minigame-smg-statement-on-q2-2020/ << Trilema — MiniGame (S.MG) Statement on Q2 2020 [22:36]
feedbot: http://ossasepia.com/2020/07/12/eulora-logs-for-Jul-2020/ << Ossa Sepia — #eulora Logs for Jul 2020 [22:39]
danuker: motivation just magically appears after you start work – https://www.wisdomination.com/screw-motivation-what-you-need-is-discipline/ [22:41]
diana_coman: eh, danuker, that is true but hard to get across the ocean, you know? [22:43]
danuker: you mean the day-in-day-out, eh? [22:44]
diana_coman: no, I mean that your understanding of it comes rooted in a certain environment that is *very* different from theirs [22:44]
diana_coman: and as such, it makes way easier/more sense for you [22:45]
diana_coman: it is true – what works each and every time and without fail is indeed discipline [22:45]
diana_coman: trouble is that being disciplined is a habit itself [22:45]
danuker: I have no way of knowing what they are going through, that is right [22:47]
diana_coman: and one that is moreover supported or quite the opposite by the environment, too [22:47]
danuker: all I can say is good luck, then! [22:48]
danuker: I'm out for today [22:48]
danuker: laters [22:48]
Day changed to 2020-07-13
feedbot: http://ztkfg.com/2020/07/sorting-out-big-and-little-endian/ << whaack — Representing Data – Notes on Big And Little Endian Encodings [04:24]
diana_coman: danuker – maybe set up a bouncer or set it all on a vps somewhere and just let it connected instead of all the join/parts. [21:00]
jfw: waves, reads log [21:04]
danuker: well, I put my laptop to sleep when I was not home, but I'll just leave it on [21:13]
diana_coman: danuker – whichever solution works for you, really. [21:14]
diana_coman: jfw – the log is almost-one-year-long so it might soon wave back! [21:14]
jfw: diana_coman: hey, sure enough! [21:23]
Day changed to 2020-07-14
feedbot: http://dorion-mode.com/2020/07/in-defense-of-honoring-rutland-raider-power/ << Dorion Mode — In defense of honoring Rutland Raider Power. [01:48]
jfw: happy birthday #o ! [20:14]
jfw: I'll be on the road & occupied until later tonight. [20:15]
whaack: jfw: enjoy! working the past few days with gbw-node has been a pleasure [20:17]
jfw: whaack: nice, glad to hear it [20:18]
diana_coman: http://ossasepia.com/2020/07/01/ossasepia-logs-for-Jul-2020/#1027906 – why, thank you, jfw. [21:07]
sonofawitch: 2020-07-14 20:14:40 (#ossasepia) jfw: happy birthday #o ! [21:07]
Day changed to 2020-07-15
feedbot: http://ztkfg.com/2020/07/notes-on-how-to-speed-up-the-trb-resync-process-after-data-corruption/ << whaack — Notes on how to speed up the trb resync process after data corruption [00:08]
feedbot: http://trilema.com/2020/rosalbas-awakening/ << Trilema — Rosalba's awakening [16:09]
whaack: I would like some input as to what functions are necessary for a block explorer. There's really no end to all the features and different types of queries one can write and provide as an interface. So far I have prototypes for: utxos <address> , balance <address> , view-block <block-height> view-txn-by-hash <txn-hash> view-txn-by-pos <block height> <txn index> view-ancestors <block height> <txn [20:31]
whaack: index> view-descendents <block height> <txn index> [20:31]
diana_coman: whaack – the best way with sort of problem is to start with absolute minimum, have people use it and then ask+listen [20:31]
diana_coman: nobody can tell you in advance "what's the best thing to design" but it will become clear as people use it, as simple as that. [20:32]
diana_coman: with this* sort of problem [20:32]
whaack: alright, i'll put one more function for viewing the rax hex of a block, start cleaning up the code, vpatch it, and then begin work on making a small web interface into the program [20:33]
diana_coman: sounds like a plan; for sure best to get out a working minimal prototype and iterate *with practical use* than to spend whatever amount of time trying to get it perfect blindly like that. [20:34]
whaack: sure. my guess is that the next big TODO item will be viewing txns in the memory pool since from my personal experience buying/selling bitcoins you want to see a valid txn has at least been broadcasted during the moment of a sale [20:35]
diana_coman: so good, you just announced it, people can say something if they care and otherwise you have therefore already "what next" , all good. [20:36]
feedbot: http://trilema.com/2020/the-making-of-a-cuckold/ << Trilema — The making of a cuckold [20:36]
Day changed to 2020-07-16
feedbot: http://ossasepia.com/2020/07/16/client-paste-says-yes-it-can/ << Ossa Sepia — Client-Paste Says Yes, It Can [19:14]
Day changed to 2020-07-17
jfw: for the problem of the manual drudgery presently involved in getting started as well as infecting new systems with jfw-bitcoin, or jfw-wares more generally, I'm thinking to use the perfectly good sync script I already have; you'll simply get *all* my patches then take your pick of what to press. I was trying to prematurely optimize by thinking it needed an option to filter for a specific project. [05:42]
jfw: that can be the low-hanging fruit for anyone who wants to improve their client; a higher fruit on the same branch would be filtering for just the antecedents of a given patch, e.g. based on the manifest as rendered by a btcbase style patch browser. [05:49]
jfw: I think I'll be so bold as to house that script in the v.pl tree, remove the recursive-wget based sync that doesn't work on busybox, release a new V starter including my pubkeys, and that'll be that. [05:59]
jfw: It'd be great to have a federated pool of such "full nodes" based on each operator's choice of signers; the present scheme doesn't quite get there as it does hash-only verification, leaving sig checking to the V presser. A trial press with comparison of flow to output manifest might make a good condition for automated patch import there. [06:09]
jfw: although the priority on that optimization might go up if a V-enlightented Gales Linux starts pulling in gccs and kernels and such. [06:17]
jfw: (the filtering by project, that is.) [06:17]
diana_coman: http://ossasepia.com/2020/07/01/ossasepia-logs-for-Jul-2020/#1027925 – jfw, what would the current steps be if someone starts from 0 ie they go "I'll get a dedicated server for this, what is it going to take to have it running gales+jfw-bitcoin" ? [20:36]
sonofawitch: 2020-07-17 05:42:41 (#ossasepia) jfw: for the problem of the manual drudgery presently involved in getting started as well as infecting new systems with jfw-bitcoin, or jfw-wares more generally, I'm thinking to use the perfectly good sync script I already have; you'll simply get *all* my patches then take your pick of what to press. I was trying to prematurely optimize by thinking it needed an option to filter for a specific project. [20:36]
diana_coman: http://ossasepia.com/2020/07/01/ossasepia-logs-for-Jul-2020/#1027928 – as with all great things lately, it's more likely firmly in the camp of "if you make it, you'll have it"; but this aside for a moment, to the extent that you talk strictly of infrastructure what's the problem and otherwise if you talk of operators, well, the lack there is not going to be solved by better scripts or software in [20:39]
sonofawitch: 2020-07-17 06:09:29 (#ossasepia) jfw: It'd be great to have a federated pool of such "full nodes" based on each operator's choice of signers; the present scheme doesn't quite get there as it does hash-only verification, leaving sig checking to the V presser. A trial press with comparison of flow to output manifest might make a good condition for automated patch import there. [20:39]
diana_coman: general. [20:39]
diana_coman: that being said and to the extent that I follow what you are saying there, the only rather puzzling part for me is why "v-starter" is it's in fact a "trb-starter" you seem to be aiming for? [20:43]
diana_coman: danuker – how's it going with the reading around? do you need anything, do you have any questions? [20:45]
diana_coman: danuker – btw, I looked through your blog, wanted to comment and …couldn't, of course, because I'm not going to go through that disqus madness in order to …talk to you, wtf. [20:46]
diana_coman: fwiw, this tarpit of "will do static blog and then end up with disqus/similar for comments because there's no other solution" is the usual path indeed but for being usual it's still not going anywhere *useful*. [20:48]
danuker: diana_coman: I have looked through your blog, I am not really sure what to do [20:52]
diana_coman: danuker – how do you mean, what to do about what? [20:52]
diana_coman: in general like that… whatever you do won't be lost time, as long as you do it properly, what. [20:53]
danuker: diana_coman: I thought about rewriting the Bitcoin client, then I was thinking what language? and now I am reviewing programming languages [20:53]
diana_coman: danuker – oh dear, that's the …road to hell, lol [20:54]
diana_coman: danuker – did you notice this article for instance: http://ossasepia.com/2020/02/29/a-basic-requirement-for-the-literate-introducing-of-new-tools/ ? [20:55]
danuker: diana_coman: oh, so many long paragraphs, I did not notice it [20:56]
danuker: diana_coman: in the mean time I worked on my map; I put it on hold while I was looking for a KMZ reader (for the "open" data from the government) [20:56]
danuker: diana_coman: I need a project management tool [20:57]
danuker: how do you guys organize your goals? [20:57]
diana_coman: I get it that you want to contribute and you want to help and you want all the good and proper things indeed; but please, understand that this approach of "I'll just re-write this huge thing by myself and in my corner and then I'll come out with it and won't it be a huge help to everyone" is the very, very trodden path on which most youngsters end up …lost; and old, sure. [20:58]
diana_coman: nothing more though. [20:58]
diana_coman: danuker – what did those long paragraphs hide /what is it you didn't notice as I don't quite follow that sentence? [20:59]
danuker: diana_coman: I mean, I don't want to read it right now, since it will take time [21:00]
diana_coman: ah, you don't have to read it *right now*, no, lolz; I was curious whether you found it already, mainly because it might help you to digest it before you invest whatever hours/months into "developing this shiny new thing" ; this approach btw already has a name around here, it's called "man-aloning" ; it has a history too and many, many stories – they all end up badly for the main character! [21:03]
diana_coman: danuker – re "project management tool" dunno what you have in mind exactly; I suppose I use…. V; other than that, some awk scripts for time management, though it's more like periodic reviews now as hm, I'm rather …settled, let's say. [21:04]
diana_coman: you will likely notice around here a preference for …fewer, smaller and more useful tools really, rather than "more tools, yeee" [21:05]
diana_coman: danuker – if you really wonder "where to start from", I'd say start by looking at V and then probably some of jfw's stuff if you are totally focused on bitcoin-part [21:06]
diana_coman: he's around to ask for help too if you get stuck, he has quite a few things published, it's way, way better to start by trying to figure out *through use and reading* what IS there and what people are doing, than by re-writing anything, really [21:07]
danuker: diana_coman: I will try to avoid too much "man-aloning"; thanks for the heads-up [21:08]
diana_coman: you're welcome; and speak up/ask whenever stuck/in doubt/in need of bouncing some ideas off someone; people around here quite know what they are talking about. [21:09]
jfw: http://ossasepia.com/2020/07/01/ossasepia-logs-for-Jul-2020/#1027931 – that'd be a fairly lengthy list that I don't have available atm; starting from 0 you'd need to establish that your hardware is supported and create or ask nicely for a kernel config [21:10]
sonofawitch: 2020-07-17 20:36:46 (#ossasepia) diana_coman: http://ossasepia.com/2020/07/01/ossasepia-logs-for-Jul-2020/#1027925 – jfw, what would the current steps be if someone starts from 0 ie they go "I'll get a dedicated server for this, what is it going to take to have it running gales+jfw-bitcoin" ? [21:10]
diana_coman: jfw – do you have a list of supported hardware ie somewhere for the operator to go and look? or at least one relatively common/easily available config that one can find with hosters? [21:12]
jfw: what do you mean by "with hosters"? [21:14]
jfw: but no I haven't presently published kernel configurations. [21:14]
jfw: they are made available to customers with purchase of hardware, for which we presently have the Thinkpad x200 option and are working on an APU one. [21:15]
diana_coman: jfw – by configuration I meant hardware, not the kernel config as such; now though I get the impression that this is getting basically split between some conflicting aims there and possibly some not-yet-fully-clear strategy otherwise, hm. [21:17]
danuker: jfw: I would not trust a pre-installed system [21:18]
jfw: hi danuker. Indeed my Gales Linux distribution is rather unique in how little trust it demands; you can bootstrap it fully from source from a variety of unix-like starting systems. [21:19]
diana_coman: danuker – he means from his and dorion's business jwrd; it's not as such "pre-installed", no; maybe read eg about what jwrd does [21:19]
danuker: hi jfw :) sorry for butting in without knowing what you're talking about [21:20]
diana_coman: and about gales itself I guess, though I thought you had already got to that, lol. [21:20]
jfw: danuker: no worries and as diana_coman says feel free to ask things. [21:20]
diana_coman: jfw – to roll this back and get somewhere before I need to go as it's not that long today: is it correct to say that you are aiming there for a trb-starter rather than a v-starter as such? (sure, it includes V, of course) [21:22]
jfw: diana_coman: a common config with plenty of hosters that's known to work is of course VPS, lol [21:22]
diana_coman: jfw lol [21:22]
diana_coman: are you now suggesting to run trb on a vps? [21:23]
jfw: no, but hey, if you want "known to work" it's there [21:23]
diana_coman: eh; forget about that part, it's clearly too big a jump and it doesn't yet make sense to you, let it be. [21:24]
jfw: alright. I see what I'm going for as a V starter in the sense of V as a system including the software using it and a means of obtaining that, of which TRB is one of the more patch-heavy examples. [21:25]
diana_coman: the issue there is that trb is *also* the …least-mandatory part otherwise, lol [21:26]
diana_coman: ie I would get it if it were gales the patch-heavy example, seeing how it is an OS, but…why trb, I have no idea. [21:27]
diana_coman: this being said, you can of course package and name anything anyway you like, what's there to stop you. [21:27]
jfw: because "given a working OS, how to get TRB / gbw ?" was a pain point as illustrated by http://dorion-mode.com/2020/07/gbw-node-gales-bitcoin-wallet-node-verified-acquisition-build-install-and-run-in-21ish-short-simple-steps/ [21:31]
jfw: Gales, while not in V form as we've discussed, already had an automated download process for all the necessary sources. [21:33]
diana_coman: jfw – so exactly being "how to get trb/gbw" , it is therefore a …trb/gbw starter, that's all. [21:33]
jfw: diana_coman: if I then publish more things it becomes applicable to, does it then change to a trb+gbw+other_things starter, without my even touching it? [21:34]
diana_coman: in other words: there isn't anything particularly wrong that I can see with the idea of "will package existing script and make the whole a best fit for the task at hand", that's fine; it just isn't more than that though and if there is indeed a longer term strategy of which this is a part it's not clear, nor does it seem to fit such thing, that's about it all. [21:35]
diana_coman: jfw – so it's basically jfwsoftware-starter, pretty much. [21:35]
diana_coman: nothing wrong with that. [21:35]
diana_coman: I have to go, can pick it up back tomorrow if there's more. [21:36]
jfw: alright see ya. [21:36]
jfw: + thanks for the questions. [21:37]
danuker: jfw: do you know about the Glacier protocol? [21:52]
jfw: danuker: haven't heard of it, no [21:55]
danuker: I think you should look at it; they use QR codes instead of an Optical Data Diode; perhaps you could do the same in your process [21:55]
jfw: heh, what distinction do you draw there? [21:55]
jfw: I mean, is a QR code not a one-way low-bandwidth optical channel? [21:56]
danuker: well, yes it is [21:56]
danuker: lol [21:56]
danuker: I suppose with a diode you could sign chat messages realtime, instead of requiring the user to scan [21:57]
danuker: so the diode would be higher-bandwidth [21:58]
danuker: also, they use dice instead of the $500 TRNG [21:59]
danuker: but again, lower bandwidth [21:59]
danuker: depends on what your clients want [21:59]
jfw: dice certainly work if used properly but um… need rather a lot of patience. [21:59]
danuker: wow, 62 six-sided dice [22:01]
jfw: and *sigh* it was originally a ~$35 TRNG; vendor closed but the schematics are there waiting for someone to step up and make more [22:02]
danuker: wow [22:02]
jfw: also re qr codes – the scanning especially requires substantially more complex hardware + software compared to a UART based optoisolator. For secure systems especially one wants to keep things simple. That said, it's probably not that big a deal unless you're scanning with some non-dedicated usb webcam or phone or such horrors. [22:08]
jfw: mircea_popescu was known for airgapping by slavegirls manually typing base64 [22:09]
danuker: lol [22:10]
danuker: I understand. You'd need webcam drivers, yes [22:10]
jfw: danuker: I gotta run but am usually online 7pm UTC per diana_coman's schedule. [22:11]
danuker: see ya! [22:12]
Day changed to 2020-07-18
feedbot: http://trilema.com/2020/augmentum-gratiae/ << Trilema — Augmentum gratiae [20:46]
diana_coman: jfw – I had a go today at installing the whole gbw orchestra: on the positive side, it's apparently doable in less than a day (at least when having already in place a trb-compat node (for the online part), a gales install (for the offline part) and otherwise the whole pile of vpatches and the sources for all the stuff to add to a basic gales install); on the questions side – the check of gscm [21:07]
diana_coman: turned out 4 fails – are these known or what do I have wrong in there? [21:07]
jfw: diana_coman: heh, I suppose less than a day is a start at least. [21:08]
diana_coman: as additional observations: building and installing the whole pile of gports that were in fact required when starting with the most basic gales was indeed quite tedious [21:08]
jfw: yes the test failures are known (noted in package/README, iirc) [21:08]
diana_coman: for that matter hm, my very basic install seems to have been more basic than dorion's or something. [21:09]
jfw: and yes the not-quite-a-portage is… not-quite-usable :/ [21:10]
diana_coman: jfw – I was getting to the part of "less than a day is a start" indeed – it might be just me, but I finally managed to use that watch command of the gbw-node only after I …read the code for it specifically, lol [21:12]
jfw: re dorion's: yeah looks like there are autoconfs and the like not pictured [21:13]
diana_coman: re time though do note that I'm not that much used to gales and even less to the 2 new types of install (the gports + the /package etc); not that they are extremely complicated as such, either of them, but I was surely not terribly fast (and yeah, I found ways to mess it up, ofc, though through my mistake) [21:15]
jfw: re "watch", was the "help" hard to find, or not helpful enough or something else? I see it is pretty terse. [21:16]
diana_coman: jfw – help was easy to find; I even had the examples from both dorion and whaack; but me being me, if it said "list of addresses", I took it for instance first to mean that I can therefore go watch tag1 addr1 tag2 addr2 (with enter,s ure) [21:16]
diana_coman: then the more confusing thing was that watch tag addr [enter] addr2 actually imported correctly the first and crashed on the second for maximum puzzlement (until I read the code so I saw it wanted tag [enter] addr1 [enter] addr2 [21:18]
diana_coman: ah, I even got a case where it didn't crash but didn't add anything either, lol [21:19]
jfw: possibly missing an error check for excess CLI arguments; but yeah the tag is CLI arg while list of addresses is stdin. [21:19]
jfw: "linewise" could certainly be expanded in the help; thanks for noting the trouble. [21:23]
diana_coman: jfw – since atm the online part is still busy scanning so I won't poke it just yet, might as well ask first – if I add another address to watched list and I know already that it doesn't appear until block Y – can I set it to scan from there or is it just full reset? [21:27]
jfw: revisiting http://ossasepia.com/2020/07/01/ossasepia-logs-for-Jul-2020/#1027989 – I still see it as more general: it's adding to the v.pl tree the capability to fetch a complete set of patches from a given publisher, using a more streamlined scheme than mod6 had included. Indeed I'd be the only one publishing in that format at the start, but nothing says it has to stay that way. [21:28]
sonofawitch: 2020-07-17 21:35:45 (#ossasepia) diana_coman: jfw – so it's basically jfwsoftware-starter, pretty much. [21:28]
jfw: diana_coman: there's no easy command to scan from arbitrary height but setting the scan_height in the state table will do it. [21:29]
diana_coman: jfw – my understanding was that you were planning to add not only the capability but the hardcoded publisher=jfw since keys etc; ie adding the capability to my mind does not include specific keys of anyone. [21:30]
diana_coman: ah, setting in the table is good enough for sure. [21:30]
jfw: diana_coman: I see what you mean about the keys. [21:32]
jfw: so the change to the v.pl tree is general but the starter would be indeed be optimized for my stuff albeit re-targetable. [21:35]
diana_coman: so it sounds like a .vpatch that adds the capability itself and thus perfectly fine in the tree and otherwise a starter pack that is optimised for your use. [21:39]
jfw: exactly [21:40]
diana_coman: no problem that I can see there at all. [21:40]
jfw: cool, ty. [21:41]
diana_coman: and speaking of seeing problems – while the PORTS doc for gales was basically salvation itself, it was still an initially confusing salvation, lol [21:41]
jfw: haha [21:41]
diana_coman: that /var/build/gales-linux as "REPO" and then to expect REPO/gports ahem; specifically: I had /gales/gports [21:42]
diana_coman: and the sources as a tar separately so I was looking where to plonk those [21:43]
diana_coman: so reading that made me think they should be in /var/build/gales-linux but then…what gports there? [21:43]
diana_coman: to solve this for the logs: the sources in fact go into /gales/dist/src [21:45]
jfw: hm, I used to think of the gports tree as a separate thing like the portage tree; then decided it's simply a part of the larger gales tree (i.e. including the bootstrap stuff) hence REPO/gports. Perhaps instructions got crossed somewhere [21:45]
diana_coman: the gports are in /gales/gports [21:45]
diana_coman: one can of course create wherever any dir and link that to those but yeah, it's not src/gports [21:46]
diana_coman: jfw – yeah, it read a bit like that ie something left from older/changed stuff [21:46]
jfw: there isn't presently any assumption about the gports path: builds are done relative to working directory. might need to add one if another level of automation is added though, so in that case yes /gales/gports (or symlink from there) it is [21:49]
jfw: not mentioning the /gales/dist/src tarball-hopper in PORTS is indeed an omission. [21:52]
jfw: it's the equiv. of /usr/portage/distfiles. [21:52]
diana_coman: well, if it's any consolation, there were way, way funnier things to notice in the output of compiling stuff like perl and python [21:56]
jfw: I bet. [21:56]
jfw: Off to unwrap what I expect is my shiny new APU1 – aka "only x86 computer still on the market not known to be evil" or thereabouts [22:05]
feedbot: http://ztkfg.com/2020/07/block-explorer-progress-whats-done-whats-next/ << whaack — Block Explorer Progress – What's Done, What's Next [22:20]
whaack: jfw: Is there any reference (other than the trb codebase) that specifies the encoding for all the various data structures used to store a block and its transaction? The bitcoin wiki is closed to what I'm looking for https://en.bitcoin.it/wiki/Block_hashing_algorithm, with the field / size in bytes column, but I would like a full list that actually contained the type in addition to the byte size [23:00]
whaack: (i.e. big endian int, little endian uint) [23:00]
jfw: whaack: if you're looking for an authoritative reference that specifies things, then no, "the code is the spec" unfortunately. Secondary sources may still be helpful for introduction or quick reference although I've found the wiki to be of mixed (mostly poor) quality. [23:24]
jfw: I did however freeze a copy of it. [23:25]
jfw: https://developer.bitcoin.org/reference/ purports to descend from documents I once found helpful. [23:29]
jfw: possibly the gbw-node block/tx unpacking code? which itself cites trb source files [23:31]
jfw: http://fixpoint.welshcomputing.com/2019/draft-gbw-node-frontend-part-1/?b=Bitcoin%20data&e=parsing#select [23:34]
jfw: on endianness specifically, most everything is implicitly little-endian because Satoshi was in the Wintel bubble. [23:39]
Day changed to 2020-07-19
whaack: jfw: Alright, yes the gbw-node unpack code is the best reference I have for the moment but i'm looking for the way the extraneous fields (sequence number, version number) are stored. Arguably since they have no use their encoding is insignificant. [00:06]
jfw: whaack: from http://btcbase.org/patches/asciilifeform_aggressive_pushgetblocks/tree/bitcoin/src/main.h#L272 we see that nSequence is handled in the "usual" way. http://btcbase.org/patches/asciilifeform_aggressive_pushgetblocks/tree/bitcoin/src/serialize.h#L123 is the heart of the macro/template serialization monstrosity, wherein we see that basic types are simply done as a memory dump; from the [01:09]
jfw: context we then infer that an unsigned int is 32-bit little endian. [01:09]
diana_coman: whaack – re block explorer – do you plan to run this as a service as a free-for-all-to-push-whatever or as what? if after all those years and all the [http://ossasepia.com/2020/03/27/a-review-of-the-bitcoin-category-on-trilemacom/][experience made available, illustrated, brought home with a bigger hammer and pictures and [09:29]
diana_coman: everything one can possibly think of], the moment a new bitcoin-related service is supposedly designed the "decision" ends up in short order "let's make a web interface and do it for good measure with whatever seems convenient what-can-possibly-go-wrong-or-why-would-it-matter", there's really not much point in pretending any "concerned about making sure" anything, seriously. [09:29]
diana_coman: whaack – do me this favour and walk me through that decision process that ended up with "flask is the best option for this job", will you? [09:30]
whaack: diana_coman: What do you mean by a "free-for-all-to-push-whatever"? As for the flask decision, I guess it was a bit of a man-alone "this is what i think is the best decision based on my current knowledge." [19:33]
whaack: And perhaps this should not even be a web service at all, I'm not sure. One could argue that someone w/ a local blockchain is only going to want to explore blocks they can see on their own node, and one without shouldn't be given this service for free (as it only encourages them to not run their own node.) [19:49]
whaack: I had these doubts on my mind and decided to just tangentially mention them on my blog, I should have brought them here as direction questions. [19:50]
trinque: whaack: did you happen to read the #t threads on this? [19:56]
trinque: I'll point out, the content of *blocks* never changes. [19:57]
whaack: trinque: No I haven't, do you have a link handy? [19:58]
trinque: http://logs.nosuchlabs.com/log/trilema/2019-09-06#1934296 << I can only find me mentioning it. [20:03]
snsabot: (trilema) 2019-09-06 trinque: iirc at one point also a block explorer was contemplated that'd shit static html [20:03]
whaack: trinque: alright that's a good option. For the "block" explorer portion of the block explorer that works great. I also have functions to lookup information about a transaction or an address. The result of those two functions changes as outputs get spent / new txns come in that reference an address, respectively. [20:35]
diana_coman: http://ossasepia.com/2020/07/01/ossasepia-logs-for-Jul-2020/#1028076 – ok; why do you think it's the best decision? [20:50]
sonofawitch: 2020-07-19 19:33:04 (#ossasepia) whaack: diana_coman: What do you mean by a "free-for-all-to-push-whatever"? As for the flask decision, I guess it was a bit of a man-alone "this is what i think is the best decision based on my current knowledge." [20:50]
diana_coman: http://ossasepia.com/2020/07/01/ossasepia-logs-for-Jul-2020/#1028078 – whaack, especially when in doubt, just speak up in here, it can't possibly hurt, can it? [20:52]
sonofawitch: 2020-07-19 19:50:26 (#ossasepia) whaack: I had these doubts on my mind and decided to just tangentially mention them on my blog, I should have brought them here as direction questions. [20:52]
whaack: diana_coman: Because the amount of time getting setup with flask is pretty low, it does what I need, it's been used before successfully, and I don't know of any other python web framework (other than django) [20:54]
diana_coman: what is it you need done there? [20:55]
whaack: I need to redirect web requests pointed at different urls to different python functions while passsing in query parameter values as parameters to those functions. The functions need to be able to return a string that gets sent to the user as html. I need to make sure that whatever process is doing this can handle multiple simultaneous requests without getting locked up. [20:57]
diana_coman: why are *web requests* the need ? [20:58]
whaack: I imagine that the easy access + a point and click interface with addresses and txn hashes being links to view information about themselves will be seen as useful. [21:01]
diana_coman: that doesn't sound much like a "need", does it [21:01]
diana_coman: fwiw, point-and-click interface is not the best I can think of, no. [21:01]
whaack: I'm very willing to challenge that assumption [21:02]
whaack: (My own assumption that point and click interface is a good option, that is) [21:02]
diana_coman: at any rate, even taking all you said above as a given, entirely missing from the consideration in there is the amount of complexity this "time getting setup with flask is pretty low" brings in. [21:03]
diana_coman: whaack – as trinque pointed out, the blocks themselves ie the basic "what a block explorer even is" are not changing; basically what you have there is an instance of a wider class of problems namely data visualization [21:05]
diana_coman: as such, what you are in fact looking for (and what you were groping for earlier perhaps without quite realising it when you were asking for "what would be useful") are queries and data-views that harness best the data in there for various purposes [21:07]
whaack: correct. [21:07]
diana_coman: you know, depending on how deep you are interested to go with this, you can make it anything between a simple listing of blocks at the plainest end and otherwise a full-blown data explorer-cum-aggregator-cum-visualizer, whatever you come up with, at the other end [21:09]
whaack: I think taking it one step at a time towards the latter end is the right way to go forward. [21:09]
diana_coman: the thing is that the simplest thing is static, while the exploration required to find out the best *useful* selection out of the ton of possibilities further is not something best done via…web interface [21:10]
diana_coman: further and leaving all the above aside for a bit, I can't quite understand why "web interface" rather than…irc bot? can even plug it in with the wot relatively easy and so leverage further existing systems for access and so on; even if "web interface", I can't yet see at all the case for something terribly complex [21:12]
whaack: Okay. The other option I see then is to simply make READ on my database public and provide a script for some basic queries. [21:12]
whaack: ircbot works well too [21:12]
diana_coman: http://ossasepia.com/2020/07/01/ossasepia-logs-for-Jul-2020/#1028076 – this was specifically re the "push" command as I understood you want to provide this ie visitor to your website drops some raw transaction. [21:14]
sonofawitch: 2020-07-19 19:33:04 (#ossasepia) whaack: diana_coman: What do you mean by a "free-for-all-to-push-whatever"? As for the flask decision, I guess it was a bit of a man-alone "this is what i think is the best decision based on my current knowledge." [21:14]
whaack: yes atm it is a free-for-all-to-push-whatever. perhaps this is a dangerous idea [21:15]
diana_coman: whaack – you know, it depends also who exactly are your target users there; if you target those in dire need of "point and click", then I suppose you "must" web interface but in such case dunno, they already have a wide choice I should say, not exactly any lack of some website of this sort, is there? [21:16]
diana_coman: otoh I don't know that people around here are all that much into gotta click something (not to mention that uhm, bitcoin-related even less, if at all possible, lol) [21:17]
whaack: no there's not a lack of those websites, although they are all covered in ads and extraneous crap [21:18]
diana_coman: heh, it's what the customers expect, what [21:21]
diana_coman: http://ossasepia.com/2020/07/01/ossasepia-logs-for-Jul-2020/#1028110 – assuming you check what gets dumped in there, I don't see why would it be dangerous, no; only very wasteful as such and in my opinion a very poor strategic decision. [21:24]
sonofawitch: 2020-07-19 21:15:16 (#ossasepia) whaack: yes atm it is a free-for-all-to-push-whatever. perhaps this is a dangerous idea [21:24]
whaack: diana_coman: With the ircbot interface, how do you imagine I should give the response to a query? As a post to paste.deedbot.org? The responses will be too long to be dumped into a channel. [21:31]
diana_coman: whaack – probably a paste indeed [21:33]
diana_coman: basically the answer on irc would be a link to the raw paste and all is fine and easy to get at. [21:35]
whaack: diana_coman: Alright. Tbh I think the irc interface is a little more clunky, with one jumping around from client commands to pastes. [21:39]
diana_coman: whaack – hm? being raw, you get the data with a curl/similar, no? [21:42]
diana_coman: whaack – if you already have some sort of visualization that you know is great for whatever specific thing, sure, provide that in whatever form works best; but before you have that, there isn't much more than premature optimization that you can do there. [21:44]
diana_coman: whaack – alternatively you can go the mpex route I guess. [21:44]
whaack: diana_coman: the mpex route being you paste something signed somewhere and mpex reads it and responds with some signed message on a public board? or just that its a private service you connect to? [21:49]
whaack: bbl, ~20 mins [21:49]
diana_coman: whaack – whether signed or not is up to you (ie 2nd consideration); the benefit of irc is that you can leverage existing voice and so on to *not* ask people to sign each and every query (because ugh, it is excessive really); but if you want as alternative non-irc, you can still do that quite easily with rather basic html. [21:55]
diana_coman: will be back tomorrow. [21:55]
Day changed to 2020-07-21
feedbot: http://trilema.com/2020/la-grande-guerra/ << Trilema — La Grande Guerra [13:08]
diana_coman: whaack – meant to add re block explorer bot: at least some queries might be quite simple+ make sense to just answer in chan e.g. something like height or the like; and for that matter it could make it easier to just build it up gradually, starting with such simple stuff and then adding to it. [21:05]
feedbot: http://bimbo.club/2020/07/a-balcony-report/ << Bimbo Club — A balcony report [22:43]
jfw: bvt: ping re http://fixpoint.welshcomputing.com/2020/a-bevy-of-fixes-for-v-in-perl/#comment-313 ; turns out there's a Documentation/media/uapi/v4l/field-order_files/fieldseq_tb.pdf in linux-genesis.vpatch, and possibly a lot of Unicode too (e.g. CREDITS) [22:44]
Day changed to 2020-07-22
feedbot: http://trilema.com/2020/il-seduttore/ << Trilema — Il Seduttore [01:50]
diana_coman: lol, feedbot flood of comments published all at once on fixpoint, so I gather jfw remembered suddenly he had a blog too! [20:59]
dorion: lol. [21:03]
jfw: well pingbacks mostly but I ain't complainin'. [21:08]
jfw: whaack: endianism comment meanwhile overripening in ztkfg mod queue :D [21:10]
diana_coman: jfw – ha, so you *are* complainin', only from the other end of it! [21:11]
jfw: merely furtively deflecting a bit. [21:15]
diana_coman: wrong bit order – it didn't register :P [21:16]
trinque: snickers from the peanut gallery [21:16]
Day changed to 2020-07-24
feedbot: http://bimbo.club/2020/07/passing-days/ << Bimbo Club — Passing days [00:06]
feedbot: http://trilema.com/2020/the-last-blog/ << Trilema — The last blog [02:34]
feedbot: http://ossasepia.com/2020/07/24/those-zip-files-of-euloras-client-graphics/ << Ossa Sepia — Those Zip Files of Eulora's Client Graphics [14:42]
diana_coman: whaack – how's it going, did you get stuck on something (what)? [20:55]
whaack: diana_coman: Yes I did, but it was tangential – my motherboard finally gave in completely so I had to put my computer together again. [20:57]
diana_coman: the motherboard of the new computer?? [20:59]
whaack: The old motherboard had various issues but eventually all the usb ports died so I was unable to interface with my computer. [20:59]
whaack: Yeah the one I built about six months ago. [20:59]
diana_coman: o.O [20:59]
whaack: I can now confirm that certain problems that I suspected were hardware issues (such as the LAN port not working) were indeed hardware issues, as they have gone away with the installation of the new mobo. [21:01]
diana_coman: so it was as much of a scam as it seemed, ugh. [21:06]
diana_coman: well, hopefully the new motherboard at least is new and good. [21:09]
whaack: seems to be, thankfully billymg had a spare one to sell [21:10]
diana_coman: as a rule and in time it kind of pays off to have spare components of all sorts around anyway. [21:11]
jfw: Apropos, I'll disclose – now that I've given them two chances to fix it – that "SiliconKit" pulled quite the same "pcgamingcr" preassembly scam on my APU1 [21:14]
sonofawitch: 2020-07-18 22:05:04 (#ossasepia) jfw: Off to unwrap what I expect is my shiny new APU1 – aka "only x86 computer still on the market not known to be evil" or thereabouts [21:14]
jfw: Because the tariff, and the customs, somehow! [21:15]
diana_coman: it's probably the "consumers have come to expect"; I wouldn't be surprised if in time one can buy components as such only…unofficially; (and yeah, it's exactly that '80s in communist Romania flavour all over again). [21:16]
diana_coman: jfw – oh, there will always be plenty of becauses, lol. [21:16]
jfw: I'ma have good article fodder at least. [21:16]
jfw: well, if that's how it goes I'll have to be that intolerant minority that inexplicably won't buy kosher unless it's kosher [21:19]
diana_coman: hm, should I wish now for more trouble-with-buying components so that jfw starts writing? lolz [21:20]
jfw: would it help? [21:20]
diana_coman: by earlier line, it would give you good blog fodder so …maybe? [21:21]
jfw: the wishing I meant. the troubles will probably continue fine on their own [21:22]
diana_coman: ah, that depends on the …wishing ability! [21:24]
jfw: good to know! [21:24]
diana_coman: but yeah, I totally trust you to find enough troubles on your own! [21:24]
jfw: that must be an ability too. [21:25]
diana_coman: it is, it is. [21:26]
diana_coman: needs to step offline, will be back tomorrow as usual. [21:27]
Day changed to 2020-07-25
whaack: I'm taking the time to write a backup script for my computer, as the new mobo has granted me access to my HDD. I'm seeking recommendations for how to go about this. I'm considering running the backup script as root and storing everything from the top level "/". I also am considering just storing the home directory of the user I typically use for my work. [01:30]
trinque: whaack: for personal machines, I typically have a setup script, and back up only /home, maybe /var if there's anything interesting going on in there (db, etc) [01:45]
trinque: or hell, can dd if=/dev/sda | gzip > backup.gz [01:46]
trinque: really depends on what you want to accomplish [01:46]
trinque: obviously the latter you'd want to do with the thing not writably mounted [01:47]
whaack: trinque: Hm I'm not sure what you mean by your last statement. It may be because I don't understand well what "dd" does. From what I remember and a quick look at the man page that is going to copy all of the contents on /dev/sda and then gzip that and write the output to a file "backup.gz" in the scripts current directory (could be on the backup disk) [02:00]
trinque: sounds like you understand well enough [02:02]
trinque: but yes, latter would be a block-by-block copy of the device, compressed, and written elsewhere [02:03]
trinque: the reason I preference the former is that I don't need n copies of the same packages lying around. I just keep my install media around for distros/OS I use [02:04]
feedbot: http://trilema.com/2020/the-man-who-had-a-dog/ << Trilema — The man who had a dog… [16:44]
diana_coman: whaack, didn't you have those rsync cron jobs anyway, why are they not enough? [20:49]
Day changed to 2020-07-26
feedbot: http://trilema.com/2020/canzone-e-ciccio-cappuccio-orig-1892-reprint/ << Trilema — Canzone 'e Ciccio Cappuccio (orig. 1892 ; reprint) [19:17]
Day changed to 2020-07-27
feedbot: http://thetarpit.org/2020/but-do-yall-really-still-believe-in-coincidences << The Tar Pit — … but do y'all really still believe in coincidences? [18:32]
feedbot: http://fixpoint.welshcomputing.com/2020/the-fixpoint-used-car-checkup-checklist/ << Fixpoint — The Fixpoint used car checkup checklist [20:45]
jfw: will be off shortly to assist in person with application of the above. [21:03]
diana_coman: good luck ! [21:04]
jfw: thanks [21:04]
Day changed to 2020-07-28
feedbot: http://trilema.com/2020/der-zwiebelschnitzel-el-dia-de-tres-lluvias-sex-on-the-beach-c/ << Trilema — Der Zwiebelschnitzel, el dia de tres lluvias, sex on the beach &c [03:38]
feedbot: http://trilema.com/2020/riso-amaro/ << Trilema — Riso Amaro [19:21]
Day changed to 2020-07-29
feedbot: http://trilema.com/2020/san-jose-vive-and-other-narrative-fancies-of-the-failed-female-state/ << Trilema — San Jose Vive and other narrative fancies of the failed female state [00:18]
Day changed to 2020-07-30
feedbot: http://ossasepia.com/2020/07/30/whats-euloras-gui-going-to-be-like/ << Ossa Sepia — What's Eulora's GUI Going to Be Like? [15:02]
feedbot: http://trilema.com/2020/due-soldi-di-speranza/ << Trilema — Due soldi di speranza [19:06]
feedbot: http://thetarpit.org/2020/briefly-on-programming-irc-bots-using-common-lisp << The Tar Pit — Briefly, on programming IRC bots using Common Lisp [20:21]
diana_coman: fwiw and as I just saw spyked's trouble keeping a node in sync on mechanical HDD – I can confirm it's possible, at least so far. [20:59]
diana_coman: and I mean sync without feeding it blocks separately. [21:00]
diana_coman: jfw – what's the exact definition of a "sane system" as required by your build system for trb or is there a different distro you successfully tried it on? [21:03]
jfw: diana_coman: is an exact definition of sanity ever possible? anyway, so far not tested on distros besides Gales Linux. Apparently whaack had trouble building on CentOS which I mean to look into this week. [21:07]
diana_coman: well, all terms were in the given tech context, you know? [21:09]
diana_coman: so no, not asking for the philosophical exactd definition of sanity, lol [21:09]
jfw: well for instance, I'm sure it can be got to build on CentOS, but that would mean it ends up with glibc and probably some degree of dynamic linking, which for a certain view of what a bitcoin node is, won't count as sane [21:11]
diana_coman: aha; I simply wanted to figure out if it turned out so far more of a gales-advantage basically or there are other tested options. [21:16]
whaack: jfw: My trouble on centos was that I needed to make sure `python` pointed to python 2.7 (instead of 2.6.6) http://ztkfg.com/2020/07/building-trb-on-centos-69-notes-on-a-few-gotchas/ [21:24]
jfw: diana_coman: alright. my experience with HDD node which I'm guessing is what you saw [21:25]
jfw: whaack: right, and that python is involved at all seems somewhat interesting. Probably no end of such hassles though so long as the DWIM-heavy build systems of the dependency libs remain in place. [21:27]
diana_coman: jfw – that's the discussion, yes; thanks for linking it, too. [21:27]
jfw: np [21:27]
diana_coman: whaack – so then why not-sane re centos, I don't get it? [21:27]
diana_coman: because no python 2.7? [21:27]
jfw: meanwhile we've had a hot spell and I've left that test machine mostly off so the poor HDD node is a ways behind. [21:28]
diana_coman: jfw – should add re hdd that indeed, when starting from 0, it all depends on what "bearable time for sync" means for one; yes, I sync-ed a node like that; no, I didn't mind it took a few months to get there (after that it remained in sync without any trouble really) [21:30]
jfw: indeed. curious, did you do any bdb cache tuning there? I observed the default seems to be set quite low [21:31]
jfw: but casual tests haven't shown much difference for me [21:31]
diana_coman: no, I did not. [21:32]
whaack: diana_coman: I said that centos does not make the cut for being a sane environment because of the point jfw made about dynamic linking. I don't fully understand the ramifications though, from what I gather the problem boils down to you don't know if the binary you get from compiling on computer A == the binary you get from compiling on computer B [21:45]
whaack: I need to clear up some confusion of dynamic vs static linking and the problems with the former [21:49]
diana_coman: whaack, it's true that the default install of centos iirc does not come with static linking, but this doesn't mean you can't set it up for that, lol [21:51]
diana_coman: anyways, now I'm confused – did you manage to build trb statically linked on centos or not? [21:51]
whaack: erm…I ran `make ONLINE=1` and have a running bitcoind, I'm not quite sure that it is statically linked [21:52]
diana_coman: jfw – meant to say: I got around to give a spin to your full online/offline gbw orchestra and all went quite smoothly as far as that test went. [22:09]
jfw: thanks diana_coman. [22:12]
jfw: whaack, http://trinque.org/2019/12/29/a-republican-os-part-2/ might be a start for glibc vs. musl which is a somewhat distinct question from dynamic linking [22:12]
jfw: the enemy might make amusing reading re static linking – "it's no good, because I broke it" [22:13]
Day changed to 2020-07-31
trinque: > the libc [01:17]
trinque: the only one, indeed. [01:17]
feedbot: http://trilema.com/2020/il-delitto-di-giovanni-episcopo/ << Trilema — Il delitto di Giovanni Episcopo [01:51]
feedbot: http://trilema.com/2020/maddalena-zero-in-condotta/ << Trilema — Maddalena… zero in condotta [18:11]
jfw: whaack: it looks to me like the boost python build problem on centos is not about the version but that python binding development headers are not shipped with the basic python package, while boost assumes "have python interpreter therefore want python and can link to its library version" [22:15]
jfw: whaack: would you be interested in taking on taming the boost build system, i.e. replacing bjam with a plain makefile that builds only the necessary parts? [22:17]
jfw: I'd be happy to advise on that; and you'll learn technique that will apply to way more than just boost, though it seems like a good place to start as it's the biggest piece of deadweight in the TRB build. [22:22]

Work on what matters, so you matter too.