All right, so first things first what I'm going to do is I'm going to drop down a geometry node So I'm currently inside of the OBJ. That's the the root most area inside of Houdini here So what I want to do is hit tab on the keyboard All right, that brings up my tab menu and start typing out geometry Now what this allows me to do is it allows me to create a node that contains geometry It actually can contain quite a few things, but for now just to keep things simple and basic Let's just look at this node as a container for geometry.  So then what I want to do is I'm going to double-click this Okay to jump into the node and now if you want to use the keyboard Hotkeys for this you can use the U key to go up and out of a node or the I key on the keyboard to jump in So it's I for in you for up. All right, because we're navigating a network hierarchy right here Okay, cool. So inside of here what I'm going to do is drop down a grid All right, and this grid is going to turn into Magically into wood planks. All right, so a couple of parameters I want to set up on this particular grid here. I'm going to leave the size of 10 by 10 now You can leave it at any size you want But when we do need to take these sizes into account I'll point it out so that way you know to adjust it to the size that you said it But I would highly recommend just sticking to 10 until you see, you know, this entire technique To the end. All right, so let's type in two and two for the rows and columns and now that will give us just a Single quad right there and what I really want to do is I want to increase my rows now this Slider here is going to become the slider that allows us to control how many rows of planks we have Okay, so let's just keep it at 10 for now or maybe a little bit more. Let's do something like 12 make some small planks Okay Cool. So with that what I want to do is now I want to go through each one of these particular primitives here All right, and I want to do some sort of operation to them now to do this It's really easy inside of Houdini. We can drop down a for each loop and a specific type of for each loop So I'm going to tab again on the keyboard and what I'm going to do is type out for each and Select the for each primitive. Okay. I'm gonna wire this guy up there Like so and turn on the blue display flag For the end there. All right. Now what this allows us to do let's talk about the for each a little bit more Okay, so what this allows us to do is it allows us to loop through each primitive now inside of Houdini a primitive is a Face so if you're coming from like my r max or any other 3d package It's the triangle or it's the face. Okay, so anytime you see a solid piece of geometry That's a primitive inside of Houdini and we can always look at the number of primitives We have or the current ID for a primitive inside of Houdini by hitting this little flag right here to display the primitive numbers Okay, and you can see that it starts at zero and goes all the way up to the number of primitives that we have So in this case, we have 12. All right, it starts at zero one two three four five six seven So on and so forth. So we have 12 primitives here And what we can do is we can loop through with this for each loop right here We can loop through each one of those primitives Okay, so what I'm going to do is I'm going to turn on single pass just so we can see this in action So now I have the way the ability to look at each primitive individually All right, so I can see the results of the operation and inside of this loop here. What I can do is I can perform some operations on every single Primitive individually all right, so if I were to do this without a for loop I would have to figure out a way to process each one of these Planks here are these pieces of geometry these primitives All is one piece of geometry, but the for each loop allows us to go over each one Okay, so the the thing that I really want to do is I want to add some more divisions right here All right, this will be the last thing I do in this particular Elector, so what I'm going to do is I'm going to drop down a group node Okay, now this group node allows us to group geometry. So I'm going to give it a name I'm going to call this the borders like so All right, I'm going to turn on the display flag for that and now you can see that I actually have a default Set up in my particular version of Houdini here What I've done is I've gone in and set dollar OS now that just stands for the operator string So whatever I named the actual node, it's going to use that name of the node for the actual group name, okay? Hopefully that makes sense and to make it default What I did is I I typed it all in and I set all the settings the way I wanted And I hit this little cog wheel up here and I said save presets But you can also say save as permanent defaults So when you do that every single time I create a group node over here All right, it comes with that preset Cool. All right. So now we have this borders in here Okay, and this borders is going to look for some edges and I'm looking for border edges But specifically I want this bottom edge right here. All right and this top one So I'm gonna hit s on the keyboard and I'm just going to highlight these for you guys I'm not gonna select them. All right, just turn I just hit the s key just to enter into the edit mode okay, and So I want to select both these guys. All right, but I don't want to do it manually I need to do a procedural. Okay, and that's just because I have a thing for proceduralism and everything's got to be procedural You could totally just go manually select that but let's look at the procedural way. Okay, so let's go and Turn on a specific feature in this group create node. So I'm gonna turn on the Keep in bounding regions. All right, and what I want to do is I want to get this little blue box into the middle first of this Primitive that we see here. So what I want to do is I want to utilize an expression Okay, and inside of Houdini we use expressions to create procedural relationships. It allows us to take data from other nodes and Set the values. All right. This is really at the core of a lot of the proceduralism. So what I'm going to do is I'm going to use the centroid Function all right, and I'm going to type in zero for the first argument now you can see that We get this little IntelliSense pop up here and it gives us examples of how to use this particular node or this function I should say and What it's looking for is a string and a float. All right. Now you may be wondering why I just typed in a zero All right. So if we look at the example here, we have a string Which is pointing to some path to a node that exists inside of Houdini here, and we have this Variable that corresponds to the components of the centroid. So the centroid of a primitive is its center Literally it's center in 3d space. Okay So what I want to do is I want to actually pull in the data That's coming into this first input right here, and that's why I put in a zero Any time you put in a zero it'll pull in that First input geometry Cool. So now let's just use DX for the X component. All right, and let's Select all of this and let's go into the Z component and let's type in DZ All right, now you can see that we've centered up nicely on this guy now because we don't have any, you know Y Value in our grid here this particular prim We don't need to put anything in but you could you could go in in here and just type in D underscore Y Like so now it's centered up perfectly So now what I want to do is I want to make this thing just a little bit wider And actually it's if you look at the top view so it's base bar two on the keyboard or you can just hit two To swap between all these guys. All right, so it's one two three four get to all your views All right You'll notice that the box is actually overlapping, but just for Completeness here in this course what I want to do is I want to set this box the size of this primitive So to do that we're going to introduce another expression function So I'm going to use the BB box Function again, I'm going to type in zero because I want to take in the data that's coming into this first input right here Okay, and this time you can see that the variables that it's looking for is DX min D Y min Z min Z max all those cool features and values that are very useful in procedural modeling So what I'm going to do is I'm going to use the D Z size Like so and now we have a box that is perfectly The same size as our primitive So what we can do is just add on a little extra So I'm going to say zero point one so plus zero point one so you can see how we can build up these expressions So if the size of this primitive ever changes This box will change too. So now we have a fully procedural system of selecting edges now You might notice that our edges aren't actually selected Okay, and that's just because these edges are partially contained inside of this box So we just need to turn that guy on right there And we need to make sure that our group type is set to edges as well. And there we go So now if I were to ever change the size of those guys All right, so let's say we add more and let's actually hook this into the the for each loop so I can Look at all these There we go. So you can see it's always selecting it. So we can always change this stuff You got to update that. All right, so fully procedural edge selection right there All right, so let's go back in our perspective view like so and what I want to do is add some divisions because I want to make You know individual planks and in here. So I'm going to use that group that borders group Another little tip to you can hit this little guy right here and you can view your book your groups All right, so it gives you another way to visualize where your groups are or what your groups contain Cool. All right, so let's go and drop down an edge divide node like so Very cool wire that in like so and let's use that group. So I'm going to say let's use that borders group Okay, and you don't see anything just yet. That's really weird. So let's go and say connect points Voila because this division is a set to two we get the division They're right down the middle there now It might be easier for you guys to see if I go and turn the background to dark So I just hit D on the keyboard Selected the background tab and selected dark Let's turn off the grid There we go, and you can see we have a new edge and we can go we can add more edges Beautiful, and that's exactly what we are looking for Okay, so I'm going to close out this lecture here and in the next lecture We're going to take this even farther and start to get our wood planks all situated


Item number SCP-011 Object Class Safe Special Containment Procedures Item SCP-011 and the areas surrounding it are to be cleaned once every day. For safety purposes, cleaning should start at least 30 minutes after sundown. Cleaning should always be performed by at least two personnel, who are also advised to know anything unusual about the item or the debris cleaned up. In a situation where the item cannot be cleaned for more than two days, local residents must be contacted and instructed not to approach the item. Containment Procedures Nullified 2004 Description SCP-011 is a simple war memorial statue located in Woodstock, Vermont. The statue is the image of a young male soldier holding a musket at his side and is carved out of granite quarried within the area. Occasionally, SCP-011 has been observed lifting its musket to the sky to fire at birds which attempt to land or defecate on it. Reports detailed that its movements produced soft grinding sounds, but did not cause any structural failure. Oddly, the gunfire is very similar to that of a standard firearm, despite observation that the item only loads granite bullets and granite powder into the musket, which is also unharmed by the firing. In spite of its efforts, some fecal matter does manage to strike SCP-011, and it has reportedly become distressed when it has had a large amount of feces on it, on some rare occasions even firing at humans. Addendum Those assigned to maintain SCP-011 are to see Document No. 011-1 for instructions. Document No. 011-1, Maintenance Brief Document Archive 2004 Accessible to personnel with security clearance 2 forward slash 011 or higher Additional Information SCP-011's seeming sentience has increased since the first report of activity in 1995. As of 2004, the item's containment procedures have been dropped, but it remains under constant observation, recorded below our landmark events in its activity. Timeline March 12, 1995 Woodstock residents report the statue's eyes moving, first sign of activity. September 30, 1995 Statue shoots musket for the first time October 9, 1995 Statue begins shooting birds from the sky January 25, 1996 Registration of SCP-011 Containment procedures begin April 14, 1997 SCP-011 observed moving casually and looking around May 3, 2000 After caretaker ████████ Jokingly shouts good shot to SCP-011, the item replies thank you in a reportedly very human voice. First speech from Statue October 22, 2001 SCP-011 has conversation with caretaker ██████, 2001 shooting of bird stops February 6, 2004 At the imploring of ██████, SCP-011 steps down from its pedestal 2003-2004 SCP-011 reaches a human level of self-awareness November 10, 2004 Containment procedures dropped, custody of SCP-011 transferred to ████████ May 17, 2005 Reports that SCP-011 is romantically attracted to her August 29, 2006 Most recent psych test reports An IQ of 133


We've got two talks for you. The first one is a free start collision for full Xiaowan. It's a joint work with Marc Stavis, Pierre Carman and Tomas Perret. And Marc Stavis will give the talk. Okay, thank you Bert. First some background. Of course, as we all know, Xiaowan is a cryptographic hash function standardized by NIST in 1995 and basically maps arbitrary length bit strings to a bit string of 160 bits that's basically random looking. Although we cannot formally define collision resistance for these dedicated hash functions, an informal definition of collision resistance of Xiaowan is that it's practically infeasible to find different messages X and Y that have the same output hash function. Now, of course, it's a generic birthday search attack that basically allows you to find such collisions in about to the power 80 Xiaowan calls. And we can already see that basically 80 bit security is not enough nowadays if you look at Bitcoin and that and we can basically see that with the current Bitcoin computing power it would take about two months that's too much computing. So, widely used digital signature standards like Xiaowan RSA, Xia2 RSA and before MD5 RSA are all built upon the hashed and signed principle where if you want to sign a message you first hash it then this hash is actually then signed with a public key cryptography RSA with a private key and to verify basically anybody can do that by comparing a recomputed hash from the message and by recovering the sort of a encrypted hash from the signature using the public key. Now, because these signature standards use the hash directly the security of these standards depend on the collision resistance of the hash function because if an attacker can already build a collision for Xiaowan and basically gets one message signed by someone then the signature for that message is also a valid signature for the other hash function because basically the hash you compute from the message side is the same as you can reconstruct from the signature and of course this would not be possible if the signer actually would use randomness so instead of a hash function would for instance use a Mac with a randomly generated key that's supplied together with this signature. Well, it's well known that Xiaowan is not collision resistance already in more than 10 years ago in 2005 Wang Edel presented a collision attack with complexity to the power of 69 and this has only been later improved to about to the power of 61 in 2013. Well, that's still not really practical so there are no collisions have been found yet and Schneier basically has a blog post about projected costs of Xiaowan collisions basically showing the declining costs to compute such as Xiaowan collision over the years due to Moore's law and so he predicted in 2012 it would cost about almost 3 million but it would drop by about today to 700,000 and by 2021 would drop to 33,000 by just renting computing power on Amazon EC2. Now, Xiaowan accepts arbitrary length bit strings and basically processes them using Merkle-Dumkart construction so it splits the entire message into 512 bit blocks and processes them these iteratively using a compression function that only takes fixed size inputs. Now of course there is this security reduction that basically if you have a Xiaowan collision you can basically determine a collision for the compression function and this basically means that if the compression function is collision resistant if it's infeasible practically infeasible to find collisions for the compression function then it's also practically infeasible to find collisions for Xiaowan and but it also implies that once we found a collision for the compression function then basically this whole security reduction does not hold anymore. So, Xiaowan freestart collisions. Example Xiaowan collisions have been thought to be an eminence ever since this first attack yet if we look over the years what's been happening it really shows that analysis is more complicated than we've thought and even so even still the 2 to the power 61 is remains a too high cost to really quickly compute this. So in this work we basically want to follow these research sections where we wanted to focus on freestart collisions meaning a collision attack on the compression function not Xiaowan itself it's a weaker attack on Xiaowan and a collision attack it's it's more practical more easier. We also to make it more practical we looked at using massively parallel architecture specifically NVIDIA graphics cards because they have a really a significantly higher performance per cost ratio compared to regular CPUs and naturally to really make sure we get everything out of the crypt analysis we use joint local collision analysis which is a very precise analysis over later steps of Xiaowan to ensure that we get optimal complexity there and maximized amount of degrees of freedom. So in a previous work we already created a freestart attack on Xiaowan reduced rounds only 76 steps out of the 80 and there we actually only applied as a message modification to only neutral bits with a very simple form of message modification a speed-up technique but still the attack was very very quick it's only took about five days to to generate such freestart collisions for 76 steps Xiaowan. In this weird work we've really built on top of this and we've extended our GPU framework now we that we can also do boomerangs a much more advanced type of speed-up technique a message modification technique to cover the full 80 rounds and it has been well known that basically very at the end covering more rounds of Xiaowan the attack complexity really quickly increases but nevertheless with the additional tool boomerangs finding freestart collisions for full Xiaowan only takes about 640 GPU days and we actually built a cluster of 64 GPUs 16 machines just regular desktops with four graphics cards inside and took only about 10 days to do this computation. Now this is the first practical attack on full Xiaowan and we have an example collision on our website the shappening and also we will make there the source code available for other people to run on but this is not a collision for full Xiaowan yet and so but based on this work we can still estimate what we can present new updated estimated costs for finding a full Xiaowan collision and basically using GPUs we estimated would take about 40,000 GPU days and if you rent this on EC2 this was cost about 100,000 which is significantly lower than than SNIOS estimates before. So as a overview of our attack works so if we look at the Xiaowan compression function we have the message 16 words which is expanded to 80 words using a linear recurrence relation and we have a chaining value which is consists of five words which is then expanded up to 85 words using a nonlinear function that each uses one single expanded message words and then finally there's the Davies Meyer forward where this input chaining value of five words is basically added to the last five words computed in this fashion. Of course the main tool for the collision attacks are differential paths where we consider two strongly related computations of the compression function and we look at the differences and the difference of path is basically a precise description of the propagation of those differences through the compression function and here it's very important to note that the basically the last 60 steps determine most of the attacks complexity as we'll see basically the first few steps are easily dealt with and it's really the last 60 steps that we really have to optimize and that's there we use GCLA that was already developed in 2013 and improved in 2015 and 16 where we basically consider the set of all differential paths adhering to this so-called disturbance vector and then we can basically determine the maximum success probability and then also the maximized amount of freedoms. Now if we have this differential path we basically have to translate it into a system of equations to solve which is very easy and what we basically get is we get linear equations on the first 16 words of the message so that's very simple and for the state bits we may have very simple equations. Now the first 16 steps can easily be solved just by just choosing the correct values but this already determines the remaining 64 steps which are definitely harder to cope with. We have some speed-up techniques neutral bits and boomerangs and these basically make very predictable changes in up to step 24 where we can generate new pairs set in fine conditions very cheaply that's why the conditions up to step 24 which basically means we only have real control over Xiaowan up to about step 24 and then the remaining steps the remaining conditions that are left they basically have to be filled probabilistically so we have to generate many solutions over up to step 24 and basically check whether they're satisfied. Now in a free start collision attack we're not going to start completely from the beginning we're going actually going to start from the middle and basically the advantage is that the hardest part actually becomes a little bit cheaper that's our freedom we have a lower attack complexity and the disadvantage is that we now we don't have full control over the input anymore so we can't build a collision for Xiaowan but we only get a collision for the compression function and we basically have differences at the beginning and at the end but we use the feet forward to basically ensure that these are chosen such that they cancel out and we really get a collision. Now for the GPUs we used the NVIDIA GTX 970 there was already a new generation upcoming which promises even higher price performance ratio and these are basically 1600 cores running at 1.2 GHz with a very high good throughput just one per cycle per core except for bitwise cyclic rotations and it's very cheap just 350 euros. Now this is of course very different from a regular CPU because the GPU has a single instruction multiple threads model where execution is bundled in warps of 32 threads and they basically have to execute the same instruction and if they don't do that then basically everything is serialized so every this distinct instruction is executed in a separate cycle so it's really important to minimize branching. Well on the GPU you can actually run more threads than you have actual cores because it has transparent scheduling of actionable warps to cores so this is another advantage of the CPU for the GPU because you can basically hide the latency of computations and of memory access in this way but you also have to be very careful about memory reads they have to be very close to each other and not for the every memory operation of the threat to the warp have to be very close to each other basically in the same bank and then everything is very fast if they're too far away then again every memory access is serialized again. So normally a collision search is a depth first tree search so it's very highly branching and to make this work very efficient on a GPU we've basically split the entire computation into steps and we use shared buffers in between steps that basically stores partial solution and then to set a warp to have a warp compute something it basically looks at the very last queue where there's work and then every thread of a warp loads one solution basically goes over all the remaining degrees of freedom for that particular step verifies the condition if it doesn't satisfy the condition it throws it away and if it satisfies the condition then basically together with the other threads in the warp stores these solutions partial solutions for the next step in the next shared buffer and basically that first search we always process in the last queue with enough work and we've basically removed all the branching just to the decision of which step to process but the entire warp does the same thing so there's no real branching there and basically there's only a minor branch in whether whether or not to store something and even with the storing everything is loaded basically very closely together so we've really optimized the the parallelism in instructions but also in in memory access so we've we have a free start collision an actual free start collision for full shall one which is the first practical attack on show one and the Schneider predicted in 2012 that in around 2015-16 it would cost about 700k dollar based on Amazon EC2 rates Moore's law and work in 2012 and with our analysis we actually come up with new predictions for the cost of collision for full shall one where you basically take the best attack to the power 61 and we basically estimate this cost about 40,000 GPU days on the older GPUs that Amazon EC2 uses so if it actually on on the GTX 970 that we used it would actually take less GPU days and if we look at the Amazon EC2 spot prices then you can basically this would cost about 100k dollar and this is really a factor 7 lower cost in 2015 and it also really puts a lot more stress on that on how fast we have to deprecate shall one so to conclude I'm actually very fast we have a first practical attack on full shall one and this really invalidates shall one security reduction but there is no shall one collision yet and so this work and also the previous free start collision work has really served as to build up towards the the real shall one collision attack so now we have the GPU framework and all the tools built for that that we can actually can now start undertaking this and the industries deprecation of shall one has been really really slow if we basically for all the secure websites there are still plenty of shall one certificates out there and they're basically still accepted until the end of this year while NIST already said in 2011 that shall one should be deprecated for digital signatures at the end of 2013 so it's the industries deprecation is really slow and that's why we really want to build practical example shall one collision to really speed up this deprecation but that's a future work okay thank you any questions very nice work can you just clarify something so this estimate of seven hundred thousand dollars is for two to the 80 computations I assume with low memory accesses sorry the 700k from Schneider or ours no for Schneider right yeah I assume it's two to the 80 computations to the power 60 actually Schneider's estimation in 2012 is based on a attack also to the power 60 okay I was assuming it was boot force sorry okay I wasn't sure about the relation between those numbers thank you very much other questions so I guess you're all looking for natural collision now yes are you making any progress or for shall one collision we basically are building an identical prefix collision and not a chosen prefix collision like has been done for md5 to rogca so identical prefix which is not as powerful I think we still have a very powerful example that we are building for it but it will not be based on certificates so we've built the application example and for identical prefix you basically need to have two near collision attacks so basically two separate attacks on the compression function and we've finished the first one and we're working on the second one but we still need to adapt our our framework a little bit more for the to cope with the increase in the first few steps are more over-defined the system of question over the first few steps more over-defined so they're harder to cope with and we still have to adapt our framework for that but we're working on it and thanks any other question so first of all this is great work thank you for for continuing to work on this I one question I have for you based on what you've you've seen is you feel like it's absolutely certain that you can get a collision you know just is it just a matter of more work or are there still likely to be places where you still have to untangle things you know find unresolved conflicts that you didn't have to find a new way around or what do you think is it just a matter of throwing more force at it yeah I mean given all the tools and we really have a lot of degrees of freedom left in the overall attack so and we really understand everything about all the parts so I don't see any big hurls the more immediate hurl here is that now the first few steps is over the fine so it's a little bit harder to find a solution for the first few steps but if you look at the complete attack cost that's the complexity you spent on the first few steps is completely negligible with all the speed up techniques they really spend the time there so maybe just one solution over the first few steps is sufficient to do the entire attack so but we did not have to cope with that before so now there's mostly a man our issue in that we have to adapt the tools for that to get that but then basically I see no no real issue except of course actually running the attack on really a lot of GPUs which of course isn't like a very big distribution computing projects it's also take some effort so I think with the available computing power we have it's now actually the available man hours is more of a hurdle than the computing power thanks any other question okay if there are no other questions that's thanks mark again


الحمد لله نحمده و نستعين به و نستغفره و نتوب إليه وأشهد أن لا إله إلا الله وأشهد أن محمدا عبده و رسوله أرسله بالهدى و بين الحق للغهراه على الدين كله ولو كريه المشركون يا الله أوسيكم وأيئه بتقوى الله و الكرو نعمق الله عليكم إذ كنتم أعداء فألف بين قلوبكم وأصبحت بالعمته إخوانا و كنتم على شفا حفظة من النار فأن تغفن منها الحمد لله على نعمة الإسلام الحمد لله على نعمة الديمين الحمد لله على نعمة القرآن الحمد لله على نعمة حبيبنا وسيدنا محمد صلى الله عليه وسلم خاتم البياء والمسهين الحمد لله على نعمه كلها ظاهرها وباطنها الحمد لله على نعمة يوم الجمعة يوم يتلاق فيه المسلمون ويتلاق فيه المؤمنون ويفاتلون السران السلام عليكم ورحمة الله وبركاته السلام عليكم أما بالنسبة اليوم ما أردت أن أدرس أو تكشف هو أن نتحدث عن إمجار ورنول وكذلك أن نعتقد على future لكن أريد أن أضع إمجار من أفضل محمد صلى الله عليه وسلم ولكن أيضًا نتحدث عن كل المسلمون يمكن أن نتحدث عن المسلمون في هذا العالم أن نبدأ هو أن نبدأ مع أدم لأن أدم بالنسبة هو إمجار من المسلمون إلى المسلمون لأن الله سبحانه وتعالى قمت أدم وإمجار إلى هذا العالم ونحن نقول that that was an act of immigration or a form of immigration the reason I wanted to speak about immigration is the current debate that we have in this country and especially the four point plan that have been put forth during the present state of the union the pieces of this land is very important one is the daughter or the dreamer which is the young kids that were brought to this country at an early age but the fourth point is about stopping or ending chain migration and I want to focus on this concept of chain migration so I'll get back to this and talk about the prophet إبراهيم علي السلام now the prophet as we know from the narrative he was born raised in present day must victimia or present day Iraq and then his family and tribe persecuted him so much so that his own father issued the judgment again to be thrown in the fire الله intervened with the angels and says but from that and ended up in the land of Canaan or the land of الكنعالي يوم one of the early branches of the earth present day Palestine when they said when they were migrating they said we're go to Gaius which for us we can get an indication that the act of migration are embedded in it as a search for الله سبحانه و تعالى in this case both إبراهيم that going out of must victimia to the land of Canaan Palestine was an act to search for and arrive to or to be in the companionship of Allah سبحانه و تعالى so we have today because we are on the path هو الذي سمعكم المسلمون but we are because from the lineage lineage of prophets that goes to Bani Israel and as well as Isma'il and then from the lineage of Isma'il A.S. we get the A.S. so migration resulted in new connection to Allah سبحانه و تعالى the story of Yusuf A.S. جوز A.S. his own brother the waterway what they thought to be the competition because Yusuf and Benjamin so they throw him in the this is just we can't do much with this kid so they sold him into slavery African Americans that were brought to this country right as a commodity and they invest in a very very small than to buy a slave because they don't attend they'll attend more to the investment because again you could get from it old times old buy products are involuntary immigrants to the United States so immigrants don't have this example with African Americans that tend to be one in three African Americans end up in jail in a but Allah he was being rises up and becomes a minister in the house of Pharaoh coming to trade Yusuf says that he recognizes his brother to Egypt right can they say Yusuf was engaged in chain migration in the term chain migration depersonalized decontextualized dehumanized which is to actually have family instead of thinking wives husband person because nobody thinks of their lineage or the family as a chain completely depersonalized and also conceptualizing a threat so for those who migration framing the text the biblical text they're reading reading the story of Yusuf because again bringing his family that gives us the lineage of Yusuf and then from the lineage of Yusuf comes Moses علي السلام Prophet صلى الله عليه وسلم migration a Muslim without thinking to the centrality of migration of the companions including including that the first Muslim community to practice to Medina to start the first community that is engaged or became their helpers now I have not seen in history where a community of who had arrived and moved history European history America exclusion on every term there is not a single case in history where those who we look to the society who is actually invited them not only that this is to conceptualize the problems of Allah actually appointed to lead the community now if you don't understand the boastfulness of the tribe was experienced it was a complete transformation had it not been for the of the Muslim world another agility of Hijra many of those who went to Habacha to Abassinian parts of Asia the companions made it to the Indians of Contina who documented the history of Asia they said some of the companions and part of the coastal Asia and they became the beginning going to Islam as companions as we did as early as 16 and you drive about 2 hours the mosque is still there and the mosque and the gift is still hanging in the middle of the mosque today new centers and new places where people can articulate Islam so what I want is a tradition both from Prophet Ibrahim to use it to know a city of prophetic traditions and period without thinking about refugees persecution إبراهيم الموت بوضع المساعدة نبدأ بالنسبة again with a dehumanizing term chain migration rather than people needing help the conversation in this country is very important it's to change the conversation of how the framing is to be undertaken chain migration is done in a very sophisticated way to actually reframe the discussion and to completely problematize the human that is actually needing help rather than addressing the much more complex problem of why migration is taking place why refugees are occurring and so on so actually rather than addressing the role good causes of the shift as human being we begin to problematize the person that is arriving at the door so we no longer can live it and the understanding of why we have the crisis through this rudimentary dehumanization, conceptualization that are taking place is that both our religious texts Muslims, the religious texts the biblical texts the Torah and religious traditions is actually centered on welcoming the stranger and we need to challenge people that are using religious discourse in this country today as a way of trying to limit and create walls as a way of thinking that's how to solve and address the problem of human beings people don't live their homes unless there is some crisis both economic, political or war that leads them to leave their homes because everybody likes to stay where they are at so we need to think about how to address the problems that are at the beginning point rather than to problematize the end and again in Europe there are many phrases that says we are here because you are there meaning without colonization without political economic intervention destabilization that is religious globalization we don't end up having these mass people actually being left out without having any safety and the end result is for them to migrate without having any sense of protection so we need to re-ship the discussions and the debate inshallah أقولوا قليارا أستخدوا أستخدوا الحمد لله نحمده وانا استعينه وانا استخدوه وانا توبه وأشهدوا أنه إلهي الله وأشهدوا أنه محمدا عبده ورسوله أرسله بالهدى ودين الحق بيضغيره وعلى ديني كله ولا الكريهة مش يكون now the act of migration always is connected to renewal which in our tradition is changed and one of the most important part of renewal is building institutions wherever a religious community went and migrated they built institutions because individuals can pass their tradition in a very narrow structure to their immediate circle but you cannot transfer the totality of the tradition and it's meaning unless you have institutions to do so and again the history of this plan is about building institutions to transform and transfer all of the collective knowledge that a tradition is about and again looking at the history of this plan whether it's from small schools to institutions that are universities to economics system in terms of Alqaf to hospitals all that was institutions that collectively have managed and continued to transmit collectively the understanding and the tradition of a particular group if you go to the Catholics when they arrived to this country they built institutions Protestants when they came to the country they built institutions the Buddhists when they arrived in this country they built institutions so institutions makes possible for the continued renewal of the collectivity of the society so it's a critical piece of migration and renewal of the collective and we have many issues in our collective for rising a model for our own community how to understand the various ways a community can develop do we have an internal what you call apprentice program in the different guilds or different aspect of the businesses do we have a way to invest for the future do we have a venture capital fund to actually create companies within our own community that will actually benefit and return some of the benefit to the community do we have lawyers that actually are not able to chase us but actually chase us of justice do we have muslim hospitals that actually are run by muslims so we speak about evensina in history who could actually take people to live today and we have a structure that makes it possible for future ideas to be actually attained and put into practice now I'm saying this specifically because I've been engaged in zaitouna college as an institution the first muslim accredited institution in the west not only in america but in the west there is nothing in europe nothing in the uk and i've been in France in germany and norway the only accredited muslim college the brogards college in this country and we are still attempting to build for a future horizon meaning to be able to deal with the multiplicities of issues that we need to think about a college can make it possible to do so because you could engage in research you could engage in writing you could actually have the possibility of thinking I know it's very difficult these days to say I'm thinking they might arrest you because it's not highly valued because we're in an age of talking heads and think tanks that do nothing but actually be in a tank without much thinking taking place so in order for us to actually take the time for that to occur we have that institution so I asked for the mock talk to allow us that we have a fundraiser on Sunday in sha Allah in Santa Clara Marriott myself Imam Zaid and Sheikh Hamza will be there to give you an update where the college is at we just recently acquired a really a magnificent property of 9.4 acres so to give you the plans moving forward and how the community this is a collective effort in terms of what is taking place and again we aspire to create a college the college is created and now actually how to plan for the next 5 10 to 15 to 20 years and collectively this would be the most important contribution in order for us to actually cover the circle from mosque to school to nonprofit organizations and community organizations to having a college that begins to train individuals that could actually fill the larger context of coming and fulfill all the roles that are there so in sha Allah if you could take the flyers there's flyers that are going to be handed out for you to be in sha Allah with us يعيدوكم دعالكم طلقا


First of all thanks for inviting me it was a bit of a surprise I haven't floated for it's either 39 or 40 years so and I miss it actually so it was an interesting invite. This talk is a rerun we have to roll the clock back to the 1970s this is the state hospital in North Dakota that entire entity including the farm you see behind it is the state hospital the slaughterhouse the power plant all the buildings that entire thing is the state hospital they had about 2,000 patients back then the state hospital actually predates the state and this this actually is a photo off of the asylum project which tracked insane asylums throughout the United States and the history of that but when we went to work there in the 70s it very much resembled the movie one flew over the cuckoo's nest in fact for those of you who remember the movie these could been pulled off of the movie except the color on the right hand side kind of gives it away as a little bit of a modern picture the three beds in the small room were in fact very common overcrowding was the nature of the institution and it was really an awful place it's not like they didn't do therapy and for any of you who are a little bit squeamish I'd like close your eyes for a moment the upper left is electroshock the lower left is lobotomy the upper right is hydrotherapy and hydrotherapy actually was a lucky thing for us because when they renovated the wing of the building for our lab we got the old hydrotherapy area which no longer was being done after psychiatric medications came around they cut down on the use of some of the older more well they were kind of insane therapies actually hydrotherapy they would take boiling water in a in a tub and stick a big felt pad in it and squeeze all the water out and then lie it along the spine of the individual and they would basically become have a heat stroke essentially so if you're manic they would do that to you if you were under activated they would shoot you with hot and cold water jets I mean it was really an awful circumstance and then obviously the lower right is the cell and quite quite often people were housed in the cell during the day 1970s changed the hospital rather dramatically first of all the courts ruled that unless you're really a danger to yourself or others you couldn't be forced to stay in a hospital and that essentially let a whole bunch of people out you have to remember there were wards full of people that all that was wrong was them as Parkinsonism but there was an entire word full of them and they weren't a danger to themselves or others they just needed care so and drugs for behavioral management had come about they discharged the bulk of the people in the state hospital system during the 1970s the population in California was dropped by a factor of two basically by opening the doors and kicking people out North Dakota got a gold award they were the cream of the crud that this was the best bad system that you could imagine they actually did set up systems to receive people in the local communities so as this was happening they hired lots of people from the local universities in North Dakota that were teaching at that time the relatively newer approach of humanistic psychology and we had some of the professors actually go to work at the state hospital and recruited students to come through for internships and as employees and because of that it was kind of an interesting environment this was before they had IRBs and when they hired us they basically gave us free access to any patient in the state hospital to do whatever pretty much we wanted to with the applied psychophysiology techniques that we were using so we wrote a grant and had a state hospital laboratory built for us in 1972 and that laboratory was a wing it was a hydrotherapy wing so it had lots of hot and cold running water and lots of space because it wasn't being used anymore and this was a T at the end of a building eight rooms on either side of the T and we basically made a big door to close the whole area off and that became our lab and one wing as you walked into the right the last room was custom built 8 foot by 8 foot in an 8 by 12 room a tank and it didn't look anything like these wonderful tanks you have here this was very crude and quite ugly but it worked essentially we had this 8 by 8 tank with a little bit of filtration and sanitation hardware in the entry area but we had built it because my lab partner was had heard of it and we thought it might be interesting to record physiological signals inside of it and this obviously poses the problem of recording electrical signals inside of a saline environment which is next to impossible the difficulty of recording the EEG inside the tank was one of the big difficulties now at the time we would do by feedback training by feedback therapy was good for muscle relaxation it was good for temperature training for migraine brainwave alpha training was pretty much the only kind of brainwave training that was being done in the early 1970s and at that point we actually applied the EEG alpha training to alcoholics and had a grant for alpha training and alcoholics which was turned down by NIH in 1974 but they had quit funding any neurofeedback research in the US at that point so it was no real big surprise that we didn't get funded we also were playing around with restricted sensory input gonds fell glasses and headphones in a reclining chair kind of like you've seen in the hallway out here and for that we basically were using that for people that had high levels of anxiety and tension that could tolerate it because not everybody that was anxious could tolerate the lack of input some people didn't tolerate it really quite badly now we happen to be working at the time with a group of humanistic psychology folks and one of them had gone out to the east coast and learned a new technique called transactional analysis or TA and TA was the I'm okay you're okay psychology and I'm not a therapist I'm a brain geek so I didn't do any of the therapy end of this I just set up the tanks and techniques and all of this so I'm not into transactional analysis in fact my lab partner and I found that the therapist was actually extremely narcissistic and we had to do a little bit of a setup and try it on one of us first and the audio recording we did a tape loop to try and program in the taped message to replace a bad message someone would have in their head from early in their life and my lab partner and I decided we had to give this a try and we tried it on me unfortunately we used his voice on the tape which we didn't know if you get a tape played to you in the sensory deprivation environment you're going to hear that voice and so I had my lab partners voice were rattling around my head for a little over a week after a one-hour session and so we realized well it has to be the patient's voice and not only that you have to adjust the frequencies because you don't hear yourself like we do you hear yourself through bone conduction so you have a lot more base so we had to change the equalization to make it sound like you so the therapist would work with the people for months and come up with the script that was bad and they would come up with a re-script that they wanted to replace it with and at that point we did one session with Gonsfeld glasses to see whether they would tolerate the lack of input because some people didn't tolerate that the ones who could we ended up with five patients within the one year and in that was the last year we operated the lab and during that time these patients experienced only five sessions during one week and essentially when you get into the sensory deprivation environment your lack of input allows your brain to slow and what we observed is essentially that the general dominant what you would normally see as eyes closed EEG but in a tank you don't have input so you end up with the eyes closed EEG pattern even with your eyes open and it takes a little bit of time for that to happen but essentially you have an eyes open alpha state now as you're in the tank for a bit of time the EEG slows and you become theta dominant which is the state that you're in in the hypnagogic state as you're falling asleep or as you're waking up the colorful dreams that you might have and essentially that theta state was what we were shooting for if you think about it if you have a bad message that was put into you when you were very young it was put into you during a state that you're not in now as an adult state dependent learning you were in a slow theta state at the time until you achieve that same state you're not going to be able to overwrite the message so we were putting people in the tank recording their EEG now the EEG was recorded at the back of the head we glued the electrode on with collodion those of you don't know what collodion is it's essentially a protein dissolved in ether and you squirt it on and it glues on really solidly if you grab the wire and pull really hard you'd have some tissue on the end it wouldn't come off now if you move the wire it changes the recording so we not only glued on the electrode we would glue the wire on next to it so that if you reach the end of this of the wire it wouldn't tug and wiggle the electrode it would simply tug on the wire where it was attached to your scalp so once the electrode was glued on by the way two electrodes for any one electrode that you expected to record from because electrodes go bad and you don't want to take somebody out of the tank to fix an electrode to put them back in so two electrodes go on for any one that you want to record if it goes bad you simply switch the input to the amp and as the person sits there and relaxes their initial experience is that there's an underwater speaker playing pink noise and white noise is harsh you know pink noise is kind of a softer sound and essentially that noise kind of fades away if you hear that staticky noise long enough you just don't pay attention to it anymore and as your brain waves change to a slower pattern the EEG being picked up essentially at that point switched the these were analog filters and Schmidt triggers but the old analog technology everything's nice and digital now but essentially the tape would kick in the pink noise had fade out the your voice would fade in and the I'm okay message would come on now that I'm okay message was tailored to the individual and again I'm not the therapist and after 40 years I don't remember specifically what any one of those messages was but the messages would essentially play in the background if you focused on it if you paid attention to it your brain waves would speed up the message would turn off and you if you focused on it all you got was pink noise as soon as you quit focusing on it in went the tape message again so this was an involuntary reprogramming which is why back then when we finished with the five patients during that one year we didn't present any of this data be most of your from I've been around for the last day at most you're too young to remember the early 70s but the politics then was not that friendly and we didn't think that this brainwashing technique was good to hand out to the US government at the time so we didn't present any of our outcomes now they do stuff that makes this look like child's play and honestly it was we were kids you know just playing but essentially the big trick was to seal off the electrode from any of the water and that was done with petroleum jelly which now we can take out a lot better back then we didn't have the dawn dishwashing detergent which they use on geese and ducks that get in the grease and stuff well it works really well to take grease off we didn't have it back then so at the time I had a long ponytail I could sit on and it was pretty slick back at a ponytail because the grease was in it was hard to get out and I had spent hundreds of hours in the tank back then it was it was a really fun time my my my first experience before any of this hookup for the experiment happened my first time sitting in the tank you know my my partner was the one who knew about tanks at all and he had told me that this was going to be a fabulous trippy experience and you know the 1970s altered consciousness was a thing people aspired towards and I thought well you know why not let's give it a try and I got in the tank and I'm sitting there laying and well it's supposed to be some trippy thing oh this is a dark place that's wet and I'm an old swimmer so the wet wasn't anything new and I'm starting to get bored and I thought well gee this isn't anything like it was cracked up to be and then I started to see little bits of light and then I felt like there's a pressure underneath me and I start to spin around and around flying towards the light now we're talking this is more like what they were talking about so I you know it was a really fun initial experience and the ones after that were equally interesting not just sensorily but with respect to internal journeys knowing yourself I mean there's nobody else there in the tank who else are you gonna know so we basically enjoyed playing around in the tank for the few years we were there the lab ran from 72 to 75 and the last year was when we were doing this experiment but we had the tank constructed after our first six months of operation and we didn't really know what we were doing there weren't a lot of people around like you all and there weren't instruction books on how to do this and so by trial and error we ended up throwing all this together and at this point it could be done so much better than we did it I mean goodness you can see the quality of them the tanks is phenomenal the quality of the chemistry of the tanks is phenomenal as we heard a little earlier and believe me this tank you could smell the chlorine like a bad swimming pool when you walked into the into the lab so it's nice to have modern technology and and if this were to be done again the updated version of this would be a total rewrite of what we had been doing again the technology that we used was ancient by comparison the amplifiers were all made by us because you couldn't purchase good EEG amplifiers at the time so that this was essentially a homemade tank with a homemade amplifiers the analysis that we were doing was on mainframe computers all of the data ended up going to the mainframe computer but the triggering and filtering and everything was done right there we tracked the EEG spectrum using the IBM mainframe in Fargo North Dakota a hundred miles away from the state hospital by the way is anybody here from North Dakota and I don't see anybody here from North that's the way it goes very few folks there you know if this were to be redone the the big trick again was simply to get the dry contact for the electrode to keep it from shorting through the saltwater and from what I hear there's a 10 channel wireless system that may be dry now which it sounds like the good old times weren't the good old times they were the bad old times by comparison so especially if you flip back to those therapies that were done previously I mean we were a little leery of what we were doing with the patients but when you compare that to what had been done to patients for so long you know you can see why there was really no IRB at that moment now since then obviously people have seen the wisdom of regulating crazy researchers and what we did then probably couldn't have been done under an IRB now very easily you're talking about reprogramming somebody's pre-conscious subconscious material with a technique and you know you might not get a whole bunch of people lining up to approve that so I if somebody wishes to try to move this forward in current times I'd be happy to offer our experience as a pilot but good luck IRBs are there to protect the patient and they need lots of protection from the old days luckily the typical experience of a transactional analysis therapist is that you can talk to your client about the change and you they can get a they know what the message should be but it's really hard to get back down into those deep states to change it in the five sessions these people reported a total change in their life and there was a slide earlier as floating to change somebody's life and you know these people had a dramatic life changes the messages that they had before were totally supplanted they had their own message in there now not some bad message that had been put there and it took five sessions within one week to do it the transactional analysis therapists were working six months to a year to get anything even close to that and it never really took with some of the people these five people had a total change in their unconscious view of themselves by having the programming put in and let me share a brief anecdote about the my pilot experience the therapist who was a transactional analysis therapist who was referring the people to us my lab partner and I knew him really well and this is a very narcissistic person he's so full of himself and when my lab partner put me into the tank to do the experiment to see whether the the filters and trigger Schmidt triggers would change and whether this would be too much of a change I would orient to it or any of that we put in a tape in my lab partner's voice and as more of a joke we were just testing to see if that the sound worked and and all of that so it was like somebody saying check check check but we wanted to be a bit of a message my lab partner thought well I'm okay you're okay is the whole transactional analysis thing and given his opinion of the therapist he put the message I'm okay I'm okay it's all about me and that's what I heard for over a week you know in his voice so it literally puts it in in a way that you can't stop it you can't stop it if you you'd have to sit up and and stay focused so you didn't have any slow brain activity for it to have as a target that's the only way to have avoided it so it's totally an involuntary change now they you know they were voluntarily entering into the tank their therapist had worked with them for a long period of time to come up with a message that they needed and everything so this wasn't just grabbing somebody off the street and doing some brainwashing to put a message in but again we figured that that could be what somebody did with the technique so we just when we shut the lab down we shut it down and we didn't present this data anywhere to anybody and actually when I was called to talk about this here I was a bit surprised you know it's never been published it's hardly ever been talked about but Bryant is here somewhere I can't really see very well and he had heard stories from years and years of hanging out in the lab and he had kind of heard about this so last year he shared the anecdote and that's why I got invited no I'm fine with sharing it now in the 1970s we didn't publish it we didn't present it we didn't talk about it outside of the immediate people we're working with because we thought that this was a dangerous technique and I'd be happy again if somebody wants to do this kind of a thing and they need to talk about this with a regulatory body or something this is the pilot study so I'd be happy to talk about it or write it up if somebody needs it for something but other than that it's just an old story from the early 70s and it's an old story at this point the the tank is gone the lab is gone when in 1975 I moved to California to start manufacturing biofeedback devices and I got out of that business fairly quickly you know how to make a small fortune in biofeedback start with a big one yeah so you know luckily the float business works very very well manufacturing for a niche market as soon as you sell into the niche and you saturate the market your sales are gone so you know I quickly went into the service industry instead of the sales and that worked very nicely I've been doing EEG services for ever I was the first tech in the world to be certified in computer analysis of the brain's electrical patterns so if anybody wants to get a hold of me for purposes of sharing this for a regulatory hurdle reason or something feel free to get a hold of me other than that this probably unless it's to help somebody out I probably am not going to spend the time to write this up most of the time at this point I'm doing high-level brain analysis to predict medication success and failure in psychiatry and I have quite a bit of writing about the genetic basis of the EEG that endophenotypes identified in the EEG so I'm tied up with a lot of other stuff but if it would it would benefit somebody that's trying to get this kind of a thing done again I'd be happy to help out but I don't have any particular need to write this up myself unless it would help somebody


Next talk is by Arion Skarapanesu, who is from Amsterdam, and I'm also a boss, so that's why Daniel asked me to introduce him. He calls me both of us, and we organize meetups in Amsterdam about most of the lecture. And today, Arion wants to talk about nerves, because sometimes in his spare times he likes to go around with old telephone systems, and those kind of things. And he also has contributed a lot to the lecture community recently. One thing I also want to mention, like today, this evening you want to have a drink, like chat, for you probably won't have much time to talk now, but if you want to find us and have a chat, this evening we're also organizing a meetup at BrewDog, which is in the center of Brussels, at 9 o'clock. So, if you have time, please find us.  Hello, hello everyone. Thank you, Tonci, for that nice introduction. So, my name is Arion Skarapanesu. I'm very honored to be here. And today, well, I work at Bot Squad, which is a company that does things with elixir and chatbots. But today I'm not going to talk about that, but I'm going to talk about basically what is like a hobby project of mine. But still, I think very interesting. So, it's about nerves. So, let me get the context first, because I've been working a lot with artists as well to build like interactive installations in my past. I did that a lot, and lately I've been using, starting to use nerves for that. So, one of these projects that basically this whole talk is about is called Eat Tech Kitchen, which is like an art performance of two ladies who do cool stuff with food and technology. And it was like performance, series of performances, but it was also, still is also an interactive installation.  So, they made these like crazy food things for you to experience.  It's a device, you can talk to it and it will say something back. Sometimes it doesn't make any sense. Sometimes it does. So, you interact with this Google Home device and it basically, I'm sorry, I have to send it within here. Okay, yeah, sorry, I'm sorry. Just in front of this. Okay.  So, the way this is set up works like this. Google Home is connected to the internet which talks to a chatbot that I've built, a very simple one, a very basic chatbot. And then eventually it will print something on a printer, which is one of these like point of sales thermal kind of simple printers. And of course it needs to do that somehow. So, there's a Raspberry Pi here that I programmed to do that. So, I've been doing things with printers for this girl that I work with for quite a lot of time. And the first versions that I wrote for this software were in, I just took Resbian, you know, Debian distributions for Raspberry Pi. You can do a lot, you can install it. It's basically a mini computer that you can put somewhere like there's one over here. And I needed to somehow interact with this chatbot which uses Phoenix Channels which is like an interactive way for Elixir and Phoenix projects to talk over WebSocket. So, I wrote something in Node.js and I also need to drive some LEDs because there was some fancy lights. I wrote some more Node.js.  I didn't want to learn how to do that in Node. And then I know a bit of Python so I thought, let's just use Python for printing because the printer driver for Python was apparently better than the one that was in Node written for this thing. But, yeah, there was a printer driver so that was good.  But then suddenly when this was live, it suddenly got a phone call, yeah, sorry, but the Raspberry Pi broke, can you come? So, I needed to go to that place. It was broken and it turned out the SD card was corrupt. And what turned out was the SD card. When you unplug the power of Raspberry Pi while it's writing data, basically your SD card is broken beyond repair. So, it's really easy to destroy SD cards by just letting Linux write to your SD card and then somebody unplugging it. So, that's not ideal. So, I basically Googled that and then somebody said, yeah, you should use a read-only file system overlay in memory, bloody blast on. You know, I typed some more commands. But then also, basically then I just had like a read-only version of that software. And every time I unplugged and plugged it, it was back up and it restored that version and Linux could no longer write to the file system, which is pretty handy. But it also meant every time I need to update the note script, I had to boot again with a special flag and then made the file system read-write again and then et cetera. So, there's a lot of stuff. And there was a lot of moving parts.  I said, yes, sure, but I'm going to use a different technology this time. So, I need an excuse for a NERVS project. So, here it was. So, who of you don't know what NERVS is at all? Okay, that's quite a lot. That's good. So, I'm going to give like a very short two-slide primer. NERVS is like a way... It's like an IoT framework, I guess. I mean, correct me if I'm wrong for NERVS and other Beam languages. So, basically, it supports devices like the Raspberry Pi and Beaglebone, basically any like small Linux device that's not very, very small because if it doesn't have a memory management unit, then it doesn't really work well. It needs to have like a normal version of Linux that can run and then you can boot into NERVS. It's not the Linux distribution. Basically, the only things that runs on your Raspberry Pi when you use NERVS is the Linux kernel and then it directly boots into Erlang. So, there's nothing in between. There's no system D, there's no init scripts. Well, there's like... Well, I think there's one thing in between, but it's like it's very little. Basically, everything runs within your Erlang virtual machine. You can write all your software services in your Beam. And Beam is like your container for your whole application and your whole hardware thing. So, that's the only thing that runs there. And it makes it very small. I think if you do like the Hello World of NERVS, I think the image that you need to flash on the card is like 12 megabytes or something like that. So, in that size, it's very quick. You write it, you upload it, and then it runs. You configure the network. And it's actually pretty handy to do it this way because you would just have one code base to maintain.  So, everything is managed by using Erlang Elixir and the Beam. Where like the supervision mechanism of Erlang really replaces a lot of the things that system D would do normally for you. And the builds are reproducible. So, every time you build, you are pretty sure that it's the same thing as last time. And what's also very handy is that it has an update mechanism. So, it has actually two partitions like an A and a B. So, while it's running, you can copy a new firmware to it. And then when the firmware is uploaded correctly, it will reboot to the other firmware. If it doesn't work, it will fall back to the old one. So, it has all these nice things for small devices built in. And then the last thing that's out there and that's fairly new is the Nerf Hub, which is like a remote management system. Because you can imagine that if you have, like I use this for a hobby, but if you have like hundreds of these devices out there, you know, managing sensors for you or whatever, you don't want to upload those by hand. You want some kind of management system so that you can be sure that some version exists on your whole fleet of, you know, little devices out there. So, Nerf Hub has all that built in and also some cryptographic security so that you really know that it's your stuff and not somebody else's. And that nobody can access it, etc. So, with Nerfs out of the way, let's see how I implemented this little device. So, version two of the Raspberry Pinter was basically it has these requirements. Like, we needed to join this Phoenix channel, right? Because we needed to get messages from the bot in real time. We need to download that image that we... So, the bot would send an image like, hey, print this please. We would download that image and then we would print the image on the printer. Well, for joining the Phoenix channel, there's, of course, an Elixir library for it. So, that was not such a big deal. There's one called Phoenix Channel Client here. I think there's several others. So, for downloading the image file, there's also lots of options because that's just an HTTP request, right? So, in case of Tesla, it's also very easy and I think it uses Hackney under the hood, or it can at least. So, basically, you just get the image and it would just return the body as like raw bytes, the PNG image. So, that's also not a big issue. But then now we have the bytes. So, what do we do with the bytes? Well, we need to convert it, right? We need to convert it to some kind of thing that the printer understands. And then we need to write that to the printer. So, first step, of course, is to, you know, you have a PNG and we need to, you know, get the pixels out of the PNG because we need to decode it into something that it was. And for the first step, I looked on the Hack's PM website. You know, it doesn't seem like a very interesting task, right? You know, load the file and just get pixels out of it. And there's several, actually, several libraries that do something like that. For instance, X image info, but no, wait, it only reads the metadata.  Some stuff, but not the pixels. PNG is an Erlang library, I think. It only writes images. So, that's, now we need to reverse basically that process. So, that also didn't help me much. X magic is like an image magic wrapper. So, that's based on a NIF. And NIF is like a C library that is built into, that you can call out to C from Erlang. Image, that looked actually pretty interesting, but it does not expose the raw pixel data either. It just allows you to transform images. So, then I stumbled upon Imago. I don't know how you pronounce it. And it looks fairly interesting because Imago is a library. Basically, it has a read pixels, and that's exactly what I needed. I needed a read pixels function.  So, this is just the raw data. Although, you know, a list of bytes is not very the way to do it in Elixir because it takes up quite a lot of memory. So, you would probably use a binary for that because, you know, binary is just, you know, a chunk of memory basically. Anyway, it still could work, right, because the images are not so big. So, it turns out it was written in Rust. I don't have anything against Rust. But the thing was it doesn't support the latest version of OTP and I think NURBS only runs on the latest version of OTP or there was some kind of hard problems to do that. There was also quite a lot of, you know, it basically, this is an image library, so I'm just going to, you know, gimme all those decoders. So, it was, it went quite big and it felt like using a sledgehammer, you know, to crack this simple nut. And it turns out it doesn't quite cross-compile to NURBS and that was actually the hard thing that I could not figure out because I mean, I know a bit of C, et cetera, but I don't know so much about Rust and cross-compiling and environment variables and stuff. So, and I think everybody, like especially in the Slack NURBS channel, agrees that it should be fixed and maybe it's already fixed, I don't know. But it was kind of hard and I tried to investigate a bit and I got into screens like this and more screens like this and at some point I was just, I just do it myself. So, I decided to, you know, look, see if there's, because actually wrapping a C library in Erlang and like writing this NIF is not very hard. It's basically just, you know, taking something and putting some glue on it and then passing it back to the VM. So, I looked for like C libraries that were consistent just of one file, right? So, there's single header or single file that doesn't have any other dependencies because those you can just easily compile without having to do a lot of dependency stuff. And I named this library pixels. So, pixels basically takes two C libraries, like one's called load PNGs or one file and micro-JPEGs also just one file. And I just linked that to make a NIF and that way I finally got, you know, my RGB data as a byte. And basically right now the only function that it exposes is read file because there's no PRs welcome of course if you want to write file or whatever. So, this is actually, we got that problem solved. But there are actually two more problems that I want to cover. How am I doing on time by the way? Oh, okay. So, I have to speed up a bit, I'm sorry. There's a lot of stuff to tell. So, we need to convert this raw data into bitmap data and then write bitmap data to the printer. And printing is actually pretty easy because on Linux if you just plug in a device you get this thing, this LP device and just can write something to it because it's how a line printer works. You just write characters to the device. But if you want to do graphics, like proper graphics you have to actually read a spec like this. So, I looked at Python because there was a Python library and it turns out it does a lot of stuff and it does more stuff and basically builds up this hex encoded string and then decodes it to raw bytes and then writes it. I don't know. I'm going to skip over this a little bit because I want to do a demo at the end. But basically what bitmap encoding is is that you take your bitmap and you put all these different pixels, you put them in one byte. So, basically this is like the width 8. So, you can represent that as a list of binary encoded integers which is basically just this. So, this image encodes to this raw byte string here. And having said that, Elix and Erling have a really nice way of dealing with these bytes. You can really easily deconstruct bytes and then pattern match on them and also write bit by bit, not byte by byte, but even bit by bit you can append things into a new chunk of memory. So, basically that's what this code does. It recursively goes over the entire input data and it basically decides here if it's white or black. One of the components is larger than 200. It's black and otherwise it's white. And then we just append it here. So, just take the bit string and just append one single byte to it. Sorry, single bit to it. So, in the end you have this nice chunk of data. So, now I have this nice chunk of data. But I still need to print it to the printer. It was fairly easy, right? Because we had this nice LP device on the thing. But it turns actually out. We cannot really read it. But on nerfs you don't have these LP devices because there's no printer driver running. And it was actually quite a problem. So, I had to resort to use raw, like the libUSV data. Is it working? Yeah. And luckily somebody already made a libUSV wrapper for me. So, I used that to send the data. And this actually, I think nobody actually uses this library because it is a middle of a sad state and that's really unfortunate. Because there was some open things that I had to fix. It kept crashing on me. So, I'm just going to skip over these a bit. But it was not very straightforward. And I still have some PRs open. I hope that the original maintainer hears this talk. Please merge them. But once I did that, it was fairly easy. I could open the raw USB device and then send my data to it using this bulk send command. And that basically got my print working. So, then I only needed to ship it into firmware and put it on the device and then put it into production. So, this is how my development setup looked. It's a typical nerve development. You need to have a monitor, right? So, I have a TV. I think this is the actual Raspberry Pi connected to the printer and to some keyboard and I had to move some toys to the side. Anyway. And then at some point, it started crashing on me and I had to take pictures of the screen because it was scrolling so fast that I couldn't see what was going on. So, it made this nice gift for me, although I didn't intend to do that. But with some thanks to the Slack channel, I got it all working. And I actually, for this talk, I actually prepared like a slightly different demo than the E-Tech kitchen because I already made like a Hitchhiker's Guide Quotes voice action on Google Assistant and I decided to hook it up to the printer. So, let's see if it works. Okay, Google. Talk to the Hitchhiker's Guide Quotes. Mm-hmm. No. Wait. One more time. Okay, Google. Talk to the Hitchhiker's Guide Quotes. Fuck. Sorry. We cut that out. Okay, Google. Talk to the Hitchhiker's Guide Quotes. Here's en de beste zoekresultaat. Okay. So, once that went, it would print out this printer Well, I also did it on my phone. So, actually, now it it prints random quotes from the Hitchhiker's Guide. And so, you can say to the Google Assistant, you can say, print it for me, and then it will actually start to print it for you. Anyway, it becomes another one. But you can try it. You need to keep this online so people can, you know, print their own quotes. So, what's else there? Yeah, so, basically, the lessons learned here are I think NERVS is a really powerful framework, and it's really, you know, it's really well thought out, and there's a lot of support for the community. And it gets better every release. Like, in the last release, they released a new networking library to automatically set up an access point so you can log into it, and then you can configure the Wi-Fi for the device, and then it will automatically try to connect to the Wi-Fi, so it's really like a smooth, you don't have to hard-code to Wi-Fi credentials in your thing like I have to do now. So, it's really like starting to, you know, to be more solid and more user-friendly. And you don't have to, you see, there's a lot of support for different hardware and different little boards and LEDs and whatever.  Yeah, that's a very helpful community. And there's also a conference coming up, actually, in the U.S., I think, in October. So, you should go there or send in a paper or... Anyway. So, thank you very much for listening. This is the software. You can find it online. And thanks for listening. Any questions? Do you have an interface to deal with the GPIO pins in the Raspberry Pi and if it doesn't, are you able to use a port command, like GPOD or something like that? Yeah. So, the question is, does the NERVs have built-in support for the built-in ports of the Raspberry Pi, like GPIO? Yes, it does. So, there's a library. I'm not sure. I think Elixir Ale, that's the old one, there's like NERV circuits now. NERV circuits. So, that support, basically for all the circuits, like also SPI and I2C and all those kind of... Yeah, those are all supported. So, if you have a device that works like that, you just have to write a protocol. You don't have to do an EC. Yeah. You showed your development with that new release, because I've heard that you can SSH into NERVs and defuse from your laptop. Is that a thing? Yeah, because of this thing, I could actually show that. Or maybe it's either this one. Oh, there we go. So, this is... I'm now inside that device, basically. I'm not sure what it looks. So, if I try to do another print, it might show something. Let's just try that. And there we go. Oh, there we go. So, it does something. You see? Yeah, so that's standard. So, you can go in, you can debug, you can run code here. So, you could develop it on your own laptop? Oh, yeah, of course. I always develop it on my own laptop. It's basically only like in this situation, where you really don't know if there's a black box and it doesn't respond. You don't know in which stage it is not booting. And then you have to connect the monitor. But for the rest, I can now just upload a new firmware and just have it reboot. And I wouldn't need to do anything special. Yeah. Did you end up using Nerv's Hub for the art installation so you didn't have to go there anymore? Did I end up using Nerv's Hub? Well, I actually tried, but I just had one device. And I actually tried to do that. But there was some issue when I run into this. But it was very specific. So, the device kept crashing due to some cryptographic error. But I would definitely use it. I actually used it. But for this, like N equals 1, it's not really helpful. Only if you had more than two devices, then it would be really helpful, I think. Or if your installation is remote, right? Because that's also really handy. If your installation is a museum somewhere, you cannot SSH there. But you can go there to the Nerv's Hub and then do the bug at life. Yeah. All right. Thanks.