Hi, my name is Jan Richter-Wogmann and I'm going to talk about five robust verification of countermeasures against fault injections, which is a joint work with Ein, Ries, Ayesha, Nizadi, Pascal, Sastrich, Ami, Moradi and Tim Ginesu. And as implementations of cryptographic algorithms can be broken by active fault injection texts, researchers came up with the plesora of countermeasures. However, the verification process of such countermeasures is often a manual and error-prone task. And therefore, we propose a fault verification framework that works on a gate-level net list in order to analyze countermeasures against fault injection attacks designed for FPGAs and ASICs. And to inject a fault in an ongoing encryption or decryption process, an attacker can use several techniques, which range from simple clock glitches or voltage glitches over more advanced techniques like using electromagnetic pulses or the high energy from a laser beam. And as I mentioned before, there are different methods to protect a cryptographic implementation against fault injection attacks. And the most simple one is to use temporary redundancy and encrypt or decrypt the same input several times. A similar approach, encrypts or decrypts the same input in parallel, which is done by spatial redundancy. More advanced techniques use linear error-correcting codes, where the input is encoded and processed in an adapted version of the cryptographic algorithm. And finally, especially in the last three years, there were many dedicated countermeasures against CFA proposed. And currently, the state of the art tool to verify these fault countermeasures is VARFI, which is the first automated open source cryptographic fault diagnostic tool, which works on a gate level net list. And as an input, you can pass a fault model to VARFI, which is basically, if you would like to inject bit flips or set or reset faults, then an adversary model which contains the number of faults you would like to inject, then the location of fault and the target block cycle. So you can really define a sub-model which you would like to fault and the target block cycle. And you have to define a set of input test vectors, which are used for the verification. And as output, you will get the total number of faults, the number of non-detected faults, and the location of the effective faults, and also the faulty outputs. But the problem is that you have to define the input test vectors, that you have to define a set of input test vectors that are used for the evaluation. And as an example, let's consider the present S-box, which is protected by a single parity bit. So at the top, we have the S-box, implementation S, and at the bottom, we have the redundant circuit S prime, which is used to compute the parity bit concurrently to the S-box computation. And what you can see is this S-box is not protected against single bit faults. So if you inject a fault, a single bit fault, the fault can propagate to two output bits, and if both output bits are toggled, the parity bit is not able to detect this fault. And this is the problem in WERPHY, because WERPHY can report faults' positives. And this is, in this example, this happens when we inject the red set of input vectors. So if we inject the green one, so 045DE or F, WERPHY can report or will report all single bit faults that can occur in the design. But if we select 1, 2, 3, 6, 7, 8, 9, A, B, or C, WERPHY is at least one non-detected single bit fault, which is not detected by WERPHY, and WERPHY would report OK, your design is secure, you can use it. But at the end, it's wrong, there are test vectors where the design is not secure. And this is why we developed or propose FIVAR, which is short for fault injection verification. And our verification approach also works on a gate-level netlist, and the gate-level netlist is passed into a directed isoaclic graph, and then we are working on the duck, we are working on BDDs, which are used to evaluate the circuit. And all of this happens in an initialization phase. And after this initialization phase, we go on with an evaluation phase where we use symbolic fault injection, and after a symbolic fault injection, we apply a diagnosis where we compare the correct model with the faulty model, and then we can report if the circuit is secure or not. OK, so let's step through the different phases and steps here. So first, we will create a deck. So let's consider this circuit here. And first of all, we constrain our set of gates which we support by FIVAR. So we have sequential gates, which are basically just registers. Then we have combinational gates, which are not NAND or NOR, XOR and XNOR gates. And then we unite all gates in a set G. So G contains all valid gates, which are supported by FIVAR. And then such a circuit can be translated into a duck. And first of all, we will introduce one single input node for each original input of the circuit. And also we will introduce an output node for each output. And then each gate is translated to a dedicated node. So for each OR gate, for example, we will have a node which is associated with an OR gate and so on. OK. So this is very straightforward and a common way if you would like to build a model from a digital circuit. But then we will build BDDs for each node in our duck. And what does it mean? So normally, we have our duck representation and now it's just a simple example here. So we have three inputs, X0, X1 and X2, and two gates or two N gates. And we will have an output Y. And then we can represent this function by a simple truth table or we can represent it by a BDD. And in this case, we will introduce one BDD variable for each input node. So X0, X1 and X2. And then the BDD looks as follows. So if we evaluate X0 and X0, X0, we directly know, OK, the output of Y will be zero and we can directly jump to the output zero. But if X0 is one, we have to evaluate X1 and then here's the same. If X1 is zero, we can jump to zero. But if X1 is one, we have to evaluate X2. And then if X2 is one as well, we will jump to the final output one. So this representation is the BDD of the second AND gate. And we will do this for every node in our duck. So first, we will start by introducing a BDD variable for each input node. And then we will go through the duck and evaluate each node of the duck. OK.  And first of all, how do we inject faults? So and here we are following a paper which we proposed also in this year where we revisited fault adversary models. And we say we can model a fault by replace a Boolean function. So in this case, let's consider we would like to inject the fault in this AND gate here. And then we say, OK, our fault model, for example, considers that we exchange the AND gate by an OR gate by a M-set or by a RESET fault. And then we will start by replacing the AND gate with an OR gate. And by doing so, we have to re-evaluate all nodes that lie in the propagation path of the OR gate. So all the red nodes here. And this means we have to re-evaluate all BDDs. And at the end, this results in a faulty duck D prime. OK. But as I mentioned earlier, fiber should prevent faults positive. And that means that we not only would like to evaluate fault injections over all possible or all valid input vectors, but also over all possible fault combinations that can occur in a given circuit. And to do so, we introduce a set lambda. And in the set lambda, we collect all nodes that are associated with a given location L. And by location L, we refer to sequential gates or combinational gates or both. And for this example, let's assume L is equal to C. That means our set lambda would contain all nodes from 7 to 14 and from 19 to 22. And of course, all nodes that will come after these last line of nodes will include it in lambda as well. OK. So this is the first step. Then in the second step, we will divide lambda into different sets, theta i's, where each theta i contains all nodes from one specific logic stage. So in this example, we have two logic stage, stage 0 and stage 1. And that means theta 0 will contain the node 7 to 14 and theta 1 will contain the node 19 to 22. OK. And then the next step is that we would like to incorporate the parameter n, which says how many faults do we inject simultaneously in one logic stage? So we collect in gamma i's the valid combinations up to n. So in this example, let's consider n is equal to 2. Then we build two sets, gamma 0 and gamma 1, which contains all valid pairs of nodes that are available in our circuit. So for example, for gamma 0, we have 7, 8, 7, 9, 7, 10, 7, 11, 7, 12, and so on and so on. And for gamma 1, yeah, the similar combinations. Now as I mentioned earlier, we inject faults by replacing a Boolean function. And we will cover all valid replacements here. So for example, let's consider we would like to fault the or and the end gate at the top. Then we will look up the fault mapping. So we say the end gate is mapped to an or gate or to a set or reset fault. And so or gate is, for example, mapped to a nor gate or a set and a reset fault. And all in all, this gives us nine different possibilities to inject the fault or nine different fault mappings, which just has to be, which just have to be tested for this combination 7, 8 of the node 7 and 8. And then our tool also supports univariate and multivariate fault injections. And yeah, if you just consider univariate fault injections, faults can solely injected into one single gamma i. So we first will inject all possible faults in gamma 0 and then in gamma 1. So this is very straightforward. But this gets more complicated if we would like to analyze multivariate fault injections. And here we say we can inject up to n faults in one single logic stage. So let's assume we would like to analyze b-variate fault injections, then we would be equal to 2 and we would inject two faults in the first logic stage and two faults in the second logic stage. So in total, we have 2 or v times n nodes that affected per fault injection. So in our example, four nodes. And this again increases the number of fault injection drastically. And as you see, not only the parameter v, but also the parameter n and the fault mapping will increase the number of valid fault combinations that need to be evaluated drastically. So therefore we came up with two optimization strategies. And the first optimization strategy exploits the optimization passes of each node, which is located in our fault model in our DAG. And here we do not reevaluate the entire DAG every time, so after every fault injection, not only the nodes which lie in the propagation paths of the faulted node. And the second one is called complexity reduction. And here we reduce the initial set lambda, or we reduce the nodes in the initial set lambda. So by ending up with a lower set of faults which need to be evaluated. But more details can be found in the paper. Okay, and finally we have the diagnosis. And here we assume that we have our golden model from the DAG D and our faulty model of the DAG D prime. And let's assume we inject a fault in the XOR gate here and inject the set fault. Then we have, or we could have two faulty output bits. And to check this, we introduce some additional layer, let's say, which is where we do not really introduce new DAG nodes, but only BDDs are created. And we create XOR BDDs between the outputs of the DAG, of the golden DAG and the faulty DAG. And the nice thing when using BDDs is that we can check the outputs really efficiently. So we can count all satisfying variable assignments at the output over all possible input combinations. And as you can see, we have the same BDD variables for the golden DAG and for the faulty DAG, so in 0 to in 6. So we have the same input variables and therefore we consider the same input vectors. And therefore we can directly check for given fault injection over all possible input combinations if a fault is effective or not. Okay. And yeah, finally, we performed a few case studies for CRAFT, LED and AES. We considered detection and correction countermeasures, which are based on linear error correcting codes. Then we considered only variate and multivariate fault models. And we showed that the optimization strategy based on the complexity reduction is effective. And all our experiments were done on an Xeon E5 CPU with 3.2 GHz. The machine was equipped with 128 GB of RAM. We used 8 threads for our tool and each thread was allowed to use up to 8 GB of RAM. And maybe let's have a look on some numbers. So first, when we evaluate a CRAFT one round or one round CRAFT design, we have 766 valid combinations here. We just used a bit flip model and injected one fault. And then our tool is very fast and can verify the design in under one second. If we inject two bit faults, we have 330,000 combinations and the tool just takes 1.5 seconds here. And this gets a little bit more complicated. So if we increase the circuit, so the countermeasure is now able to detect up to three bits and we inject three bits here and we do not use any complexity reduction, then we have 90 million valid combinations. And these combinations can be checked in roughly 3,000 seconds. And we are also able to analyze an entire AS128 round, which is equipped with a detection countermeasure. And the first design is able to detect one bit or one bit faults. And here we have 24,000 or roughly 25,000 combinations, which can be checked in 22 seconds. And if we increase the countermeasure, such that the countermeasure is able to detect two faults, we have a huge number of combinations. So if we would not use any complexity reduction, there would be 300 million combinations. And yeah, we are not able to check these amount of combinations for such a large circuit. So we can see here, we can check a huge amount of combinations, but the circuit is smaller for the LEDs design, but the AS design is too large, so the program would not finish. But if we apply our complexity reduction, we just have 56 million combinations. And then our tool day needs 470,000 seconds. But it is possible to analyze or to verify such a design. And if you are interested in our design, you can find it on GitHub on our share for security engineering site slash Fiverr. But of course, there are some limitations. So first of all, the circuit size. As you could see, if you use large circuits, our tool is not able to pass the circuit and translate it into BDDs. So this is one drawback, but we are able to pass an entire AS round. But for example, using two AS rounds would not be possible. And the next thing is a fault model, which is a natural limitation, because if we increase N and V, we would have too many combinations that need to be checked. And then our tool would not be able to finish in an adequate time here. And finally, the circuit structure. As we are using DAX as a model, as a circuit model, we are not able to pass circuits where we have a loop. So if you would like to use Fiverr and check a design, you first have to unroll the design and then you can pass it into our data structure. Okay. And to wrap up, once again, here's our flow or tool flow and our tool works on a gate level net list and we will pass the gate level net list into a DAX. Then the DAX nodes are evaluated and BDDs are created. And then we can exhaustively check all possible fault combinations over all valid input vectors and all these possible combinations are checked in our diagnosis step. And this gives us a tool which is really fast. So we can check 90 million fault injection for a single round of craft in under 50 minutes while testing all two to the power of 128 input assignments. So this is pretty impressive. Yes. Thank you very much for listening to my talk and watching the video. You can see our references. And if you have any questions, do not hesitate to contact us and we will be happy to help you with a tool or to answer any questions. Thanks a lot.


Oedden nhw i mi. Rhywun ni'n roi'r problem fel ychydig. Felly yna'r dystiad, heb cynllun bwysigwyr. Felly i'r rhai i'w gweld ydym i callu i'r adael. Bryddo'r ddiweddodd drwpl wedi gweld. Roeddwch gofyn y ddechrau ar treato ddyliau cyfaint anodol, gweld bod ni'n bod chi'n helpu i'w ddim. ac yn y cael ei wneud i chi wedi cael ei helpu, a gweithio bod rwy'n fawr bod ni wedi'i helpu i chi. Rwy'n cael ei wneud i chi'r ffordd o'r tŵlau a'r teimlach sydd wedi'i gweithio ar y dyfodol i'r sydd bwysig o'r cyntaf, i gweithio i chi'n bwysig o'r tŵlau a'r tŵr i chi. A gydig i'n meddwl i'n meddwl i'r cwmwyntion gyda'r ddechrau ar y cyfnodau o'r ddysgu'r cyfnodau a'r ddysgu'r cyfnodau a'r ddysgu'r cyfnodau a'r ddysgu'r cyfnodau sy'n meddwl i'r ddechrau, ond rydyn ni'n gwybod, yn y ddechrau ar y ddechrau. Rydyn ni'n gwybod i'n meddwl i'r ddau'r cyfnodau. Mae byw atod, yn r offended. Rwy'n gweithi, Gymraeg dwi'n gweithio perfi ond aron datblygu syddatesaeth. fears26.fm mwy ffordd hon yn i eich envoedd. Nad o'u gorfor, ddechrau mynd bwrdd fathasecondstaeth, ac yn hip ymin, yn fries iysgrinfodd, ac sy'n meddwl i ddechrau iawn i'r ddechrau erw. Well, I'm David, as I've said. I'm Cifah Thorney on just about all the social platforms, and if I estou no Cifah Thorney it's because I forgot my password and don't have access to the e-mail address. I've got cystic fibrosis, cystic fibrosis-related diabetes. What I have personally defined as functional depression, in terms of I can function from day to day, most of the time is about right people's interviews but it is written down to me as a schneller. I can function from day to day most of the time, but I am in an oppressive state. I have imposter syndrome and I have lots of other things that too many labels to reply to one person. I'm a back end developer predominantly, I'm a Drupal specialist since 2009 and I work for a company called Anatech based out of Ireland, but I work remotely from the UK. My last major burnout was in 2016 and my last major case of imposter syndrome actually was earlier today, I forgot to update the slide. Why am I doing this? I want to help promote better health awareness, it's too important. I dislike seeing people suffering in our community and I dislike seeing people leave our community because they feel they've burnt out or because they feel that the community isn't right for them because they are not good enough to be in the community for whatever reason. So I came up with this list of tips and tricks. I must say though I'm not a medical professional in any way shape or form, so your mileage may vary and some of these are kind of mutually exclusive, i.e. it's good for burnout, but it's not particularly good for my imposter syndrome for instance, or vice versa. So these tips can help kickstart your recovery of burnout and hopefully prevent or limit further relapses. I do not believe you can fully recover from burnout, I do not believe you can fully recover from imposter syndrome. But we can minimise it to the point that it is no longer relevant in your life hopefully. What we can't help you with, we can't solve all your problems, you have to want to be willing to accept that you want to help yourself. There is only so far advice can take you. By coming to this talk hopefully you've taken the first step in helping yourself because it was a choice and that there are some other really great alternatives on including social events etc. Some of this advice will not work for you if you are not currently in a good place, i.e. part of my advice is go out into the community. If you're in a position where you do not want to go out, obviously that's not going to work for you at the moment. So what have I tried? I've tried therapy, hypnotherapy and other talking therapies. I've tried putting myself out there, doing things like public speaking. I'm doing one now. I met my Drupal heroes and my mentors. I tried meditation, meditation, headspace, calms, other apps are available.  And I stuck my head in the sand. I've tried getting a new hobby, I tried starting up old ones again. What worked? Well therapy has helped a lot, particularly hypnotherapy for me, more on that in a moment. And that has helped both my imposter syndrome and my burnout. I've tried putting myself out there. That actually worked for me with regards to my burnout, but it was terrible for my imposter syndrome. I met my Drupal heroes. That actually really helped with my imposter syndrome. It didn't help for burnout because I wanted to do more. A new hobby really helped with my burnout. I stepped away from digital. I attended events such as Drupalcon, Drupalcamps, et cetera, all over UK and Europe. Personally I find that great for burnout, but it is very bad for my imposter syndrome. Changing job worked for me. I'm not saying quit, but if the opportunity arises and you genuinely think a new position, even if it's the same level, so back end developer specialist with some other company, that may help you, consider it, but don't do anything drastic like quit tomorrow because some guy at Drupalcon told you. I also explored me and I mean that at many levels. I mean that in terms of the meditation journey. I mean that in terms of deciding actually I don't care if socks and sandals look silly and I should be locked up by the fashion police, they're comfortable. So what worked? What didn't work? Oops, sorry. Do we get breast space? Meditation didn't actually work for me. I'm not going to promote meditation as a way of helping your imposter syndrome or burnout. It may well work for you. It works for a lot of people. Buying stuff really didn't work and sticking my head in the sand really didn't work either. Although I would hope that it is fairly obvious that sticking your head in the sand will not help. So I tried multiple types of therapy. Hypnotherapy worked really, really well for me compared with other talking therapies that are available through the National Health Service, which is the healthcare service within the UK. It's different to other talking therapies and it is only available privately. I'm in a very privileged position and I'm able to afford to do this. It allowed me to see the wood for the trees, work out which problems I needed to work on first, prioritise, choose your wording. And that allowed me to work out what I could let go very easily. And some of those surprised me. I would have thought they were bigger problems for me than they actually were. And in the three-ish years I've been working with my hypnotherapist, I would have said some of what I would have considered core issues if you just said what's your biggest problem. They actually weren't. They were gone within six months. We are getting to the point now, hopefully, that we're dealing with what are my core issues because the same things are coming up over and over again. That to me suggests they're bigger issues. And I will continue to work with hypnotherapy and encourage people who are in a position to be able to afford it to do so. And if you're not, I encourage you to try to find a way of looking at alternatives to what might be available through your insurance provider or healthcare system nationally. There might be people that are willing to do pro bono work, I don't know. There might be charities that help with donations for this kind of thing. Putting myself out there, as it were, really, really helped. And this is part of my continuing journey with putting myself out there. I'm talking at Drupalcom. For a Drupalist, or to me at least, there is no higher honour. It's one of the top two, in effect, places to talk about Drupal. It's also the most difficult thing to do from an imposter syndrome perspective. Who wants to listen to me talking about burnout in imposter syndrome? Roughly 25 people, I think, apparently. That's brilliant. I was hoping for double figures. It's marginally easier from a burnout perspective for me because I find particularly things like Drupalcom are so energetic, it's infectious. And it pulls in inspiration for me to want to go away, do something, learn something. That doesn't work for everyone, though. I'm very, very aware, I'm potentially more unusual in that regard. But the infectious energy I got from Driesi's keynote on Tuesday or some of the other sessions that I've been to today has really helped me from a burnout perspective. It's Drupalcom, it's not a holiday, but it feels as good as a holiday to me. As I say, I've attended things like Drupalcom Dublin in 2016, spoken at many local user groups. Drupalcamp London, Drupal Europe last year, and now Drupalcom. And each time the area I have spoken about has been different, but it's been targeted to a different-sized audience. Drupal Europe, I went particularly niche, Drupalcamp London. I went for something that would hopefully attract a similar-sized audience to this. This has a potentially unlimited audience because I do believe it affects everybody. I've got future plans to continue putting myself out there. I speak French and Spanish to a level standard, which is exams we take at school at 18. I want to do this talk in Spanish and or French within the next 12 months. I'm actively seeking ways to help me to do that in terms of how in the world do I say half of these terms in Spanish properly, because what I look up in the dictionary is not necessarily what people say. And I also find pushing myself to the point of discomfort really important. It's one of those things that I... It just energises me in an unusually large way. I feel I have to say that because most people I know don't find that. I'm actually going to leave that slide in twice. Meeting my Drupal mentors and heroes, these are some of my colleagues at Anatech.  I personally don't believe the don't meet your heroes you'll be disappointed is a thing. You should meet your heroes and your mentors, because you'll discover they're human. You'll discover they have imposter syndrome. You might even discover that actually the areas you feel you are good in are areas they struggle in. More on that in a moment. I work with amazing people. I've learned so much from them, from a back end of support, a front end perspective. It really helps. Really should read my slides more carefully, more often. Mark in particular really, really helped me. He's front end lead at Anatech. He's taught me more about front end than I actually needed to know, but I did want to know. He inspired me to contribute to CORE through the Out of the Box initiative. Ironically it got me my second patch into CORE. I didn't realise some documentation I had contributed a long time ago got in. To me it was my first contribution to CORE because I knew I was actively contributing to CORE. He helped me rebuild my confidence by actually asking me to mentor him for back end work and vice versa. He refers other Anatech staff to me rather than somebody else helping me realise I do actually know things which really helps my imposter syndrome. Slightly less helpful on the burnout because I am the sort of person that will go that extra mile, but that's a personal thing. It didn't work, meditation. My mind just doesn't work that way. I couldn't quiet my mind. I solved lots of debug problems. I found plenty of missing semicolons in my head, but I couldn't quiet my mind. Meditation does teach you to just allow that to happen, but within five, ten minutes of finishing a 20 minute session, I was raging about the same thing that caused me to walk away in the first place, which is why I say for me it doesn't work. Buying stuff. I would hope that it's fairly self-explanatory why buying stuff you do not need doesn't help you with either burnout or imposter syndrome. It led to debt. It led to fear of I have to work to pay this off. Oh God, how am I going to do it? Nobody wants to lie to me. Same with ignoring it. I would hope this is self-explanatory. Just don't. Find someone you can talk to. It doesn't matter whether it's a family member, a close friend, a work colleague. Everybody is having problems with this. To an extent it doesn't matter what industry. It might help talking to someone outside of our industry for you as an individual. Personally I have found that doesn't help because I'm an analytical mind. I'm technically detailed and they can't keep up with what I'm trying to say because I will moan about Line 76's semicolon or why does the Drupal error message about entity reference keep looping because you've accidentally referenced the entity reference field yet again. So where do we go from here? As I've said, I'm personally doing nothing special. I want to put these ideas out. I want to start a conversation within the community.  I will make sure that that goes into notes on my session page once I work out how to put notes on my session page about that. One of the things we're going to look into doing initially is getting a list of places people can go to and find help, so charities within the UK that might be able to help you. I will need help filling that in for other countries. Once that is set up, I will make sure it's spread far and wide. I will speak to people in the diversity and inclusion initiative, speak to people in contribution and mentoring initiative, speak to the DA to try and get that message out. And hopefully, given we've got representation in a large portion of the world, we will relatively quickly be able to produce a list of places that people can turn to whether you're from the UK, whether you're from Holland, Russia, America. I also feel that it's important to realise there is no one solution to the problems. I also feel in line with what Boris was saying in his keynote yesterday sometimes you just have to accept that more burnout is going to happen and you need to spend that week in bed. I have started as an individual pushing hard with actually listening to my body. If I need to sleep, I go to sleep, I don't care if it's four in the afternoon. I'm lucky enough to work for a remote company that's very understanding and realise that not everyone can fall asleep at their desk at four o'clock in the afternoon and it not matter. But even if that's, I get home at six and pretty much go straight to bed and then wake up at two in the morning. I feel so much better for listening to my body that it puts me in an automatically more positive place because I realise things aren't as bad as they were eight hours earlier. Small stats. As I say, talking about ideas, where do we go from here, I'm going to see, I don't know if individuals can create channels in Slack. I'm also going to try and get a Slack channel started for this where we can push around ideas. I don't want it to be a I am so and so help me with this but I would also hope that if someone does ask that we are able to direct them to the right place in terms of, I don't know, the Samaritans which is a UK charity, mind which is a UK charity or your national equivalent. So, any questions? So, can you describe what exactly is imposter syndrome? Yeah, sure, so for the benefit of the recording the question was what exactly is imposter syndrome.  So, as a back-end developer in a group of really talented other back-end developers I might not feel good enough to be part of that circle. It's feeling do I actually know enough to do this? Do I think that people will listen to me? Have I got something I can contribute? Or that is what it is to me. I don't actually know what the psychological definition of imposter syndrome is. I'm too scared to look it up. Because I will find some other definition in a hypochondriac kind of way, think, oh God, I've got that too. So basically feeling not good enough? To me that's what it is, yes, feeling not good enough. And I found the reason I found putting myself out there particularly good for dealing with mind-poster syndrome was, or why I thought it would be really good for mind-poster syndrome was it would help show me that actually I can do this. It's taken a lot of Drupal columns, a lot of Drupal camps for me to start realising that. I've been walking around today, I've been having conversations with people who remember me from two, three Drupal columns ago, which is great. That actually helped me more than being in a conversation with Driess in 2011 about why I wanted to contribute to Drupal. But don't get me wrong, I valued that connection with Driess. So, if you want to contact me, here's several ways and a link to the presentation. I will make sure that the presentation is updated and made available through the Ancelam website as well. And finally, if you are ever feeling useless, remember someone made a protective cover for the Nokia 3310. There is always going to be someone or something worse off. And contribution days, please come along tomorrow and help, contribute if you can. I unfortunately can't, but I will be doing so when I get home. And please fill in the session questionnaires. I want your feedback, I want to improve and develop this. I want to take this on the road and talk at various places. I need to know where I've gone wrong, above and beyond. I will check my slides again and again and again. Thank you very much.


Hey guys, welcome back to Six Sister Stuff. Today, we're making chicken zucchini casserole. So I'm Kristen, and I'm Elise. And usually you just see me on the YouTube, but now the sisters are joining me. So we're so excited to have her here. So we love sharing easy, simple recipes with you guys. We've had our website since what, 2011. And I think we've shared over 3,000 recipes. But we jumped onto YouTube to show you instant pot recipes, but now we're gonna start incorporating a lot of other easy recipes. Some of our favorites. Exactly. So the recipe we're making today is our chicken zucchini casserole. And our sister Camille has a killer garden. Her husband's a gardener. They're way into it. And every year she's like, please take some of my zucchini. And they're like massive. I wish I had that problem. I think I have like black thumbs.  Me too. But she was looking for a recipe to use all her zucchini. So we've got zucchini bread recipes. We have a ton of zucchini recipes on the site. But this is one of our absolute favorite zucchini recipes. And not only that, like, our audience loves this recipe. I think it's one of our most popular ones. Yeah, it's been our top recipe for a couple months, for good reason. It's easy. You'll see the ingredients. It's super simple ingredients, but it's so good. Even our picky eaters love it. Exactly. My kids don't even realize that they're eating zucchini as they're eating this recipe. All right, so we're gonna first cut up about four zucchini. Now, if you love zucchini and you want more, you can always make it with like six zucchini. But we like about four, because it's pretty even. You do the chopping. Okay, I can do that. I'm gonna tell you guys. So Kristen was talking about how we're all about easy dinner. And so a couple of years ago, we decided we need to make dinner time easier for everybody. And the hardest part about dinner, at least for us, is we've each got four kids. Life is crazy. We work, our husbands work. We thought we need to make dinner time easy for other moms or busy parents, working parents. So we developed a program. It's a menu plan program. And every week we send out a new menu plan to tell you exactly what recipes to make for the week.  With a picture. So we'll show you what it's gonna look like in the end. You'll get main dish recipes, side dish recipes, dessert recipes, new recipes every single week. And then it comes with a detailed chopping list down to like the half teaspoon.  Like I hate it. But if I can have Pinterest all day looking for what recipes to make. I mean, even if it's just for some ideas and then making my shopping list, since it comes with the shopping list, it's like, okay, so I get the email, I print this out and I'm like, okay, I'm ready for the week. Or if you're like, I've already got all these spices. You can take those off your shopping list. We've had people cut their grocery bills completely in half because they're not throwing all this extra stuff in their cart or they do the online grocery shopping and make it that much easier. So that's at six sisters menuplan.com. We can put a link to that. There's sample plans there, so you can check those out, try them. We have five different plans available. I think my favorite one is the healthy one. We're trying to eat a little bit healthier. So there's actually, so there's, let me get this right. So there's a small healthy one and then there's the large family healthy one. These six state people are regular healthy plants. Every recipe's 500 calories are less. It has the nutrition info and yeah, just makes dinner time that much easier. Awesome. That's the last thing we need is to worry about what's for dinner. Exactly. Well, Kristen's chopping that. I'll show you the topping that goes on this chicken zucchini casserole. So you're just gonna use a package of stove top stuffing mix. We're using the chicken flavor. But I mean, you can use turkey too. I kind of just. The savory one's really good too. They just have one that's not. I didn't know they have meat. Meat flavor. So whole box of that obviously uncooked. And then we've got a half cup of melted butter. We're just pouring on top. Okay. So this will be, this doubles as the topping for the casserole as well as a thickener in the casserole itself. So just mix that together. And then you're gonna set aside about a half cup of this stuffing and butter to sprinkle on top. Okay. You want to just put it in there? Awesome. Okay. So I finished up cutting the zucchini. Now I like to cut it in about bite size. Like bite size. So my kids can eat it and not have a huge chunk of zucchini in their mouth. So, okay. Zucchini's done. Put that aside. Kay, what's next? So we're just gonna mix everything in one large bowl. So the zucchini, Kristen cut up. How are we gonna do this? We're gonna do it this way. There we go. I'm pouring that in. Just man handle it. I like it. That's it. We'll mis-hap, that's okay. It's all mixing together. And then I'm gonna add the stuffing mixture that remains after I set that half cup aside. Perfect.  We're gonna be pushing. Yeah, this one's gonna be. Pushing it with us. A little overflowing. But that's okay. And then we've got one half onion that's just been diced. Now if you love onions, you can add a whole onion, but my kids kinda struggle. So we're gonna have onions. We're making this for the kids. Exactly. We're cutting it for the kids. And then three chicken breasts that have been cooked and shredded or diced. Now you can go the cheater route and get like the rotisserie chicken. Yes. They even make rotisserie chickens that are already cut and shredded for you. I love getting those when they're available. All right. Kristen actually made this in the Instant Pot. I did it. Kicked my chicken in the Instant Pot this morning. And then we're doing a half cup of shredded mozzarella. Now the mozzarella is not in the recipe, but I like to add a little cheese. Add a little flavor to it. And then we had a half cup of sour cream. So really this is low fat, low calories. It's not raw. Good. But the candy covered food that your picky eaters will like. And then just one can of cream of chicken soup, right? All right. Do you want to get that spoon for me? Yeah. So we're just going to mix this together. Nice. In our two small bowl. Very, very carefully. Do you want to do it or do you want me? I trust you. Oh, guys, guys. So sometimes when I am in a big hurry, I'll actually spray my pan, dump everything in the pan and mix it in the pan. Just so it's one less bowl I have to do. And this is a recipe you could make ahead of time. A lot of time I'll get my dinner all prepped while my kids are at school or a toddler's napping. Get it to this point before it's baked and just stick it in your fridge and then you could throw it in at dinner time. So your oven would be preheating to 350 and then it cooks for 40 to 50 minutes. So plan accordingly as to how much time you need to get it. Right. And I love this too because it usually, so I have a family of six.  But this will feed us twice. Like I love having the leftovers of it. And it's filling enough. Like you've got a vegetable, you've got protein, some carbs. Some goodness. There we go. All right. The struggle is real here, but we're getting it. It's okay. And it all kind of melts together when it bakes that it's, this is a super forgiving recipe. If you're just starting out cooking this chicken zucchini casserole is quick, easy. It's a crowd pleaser. I like to make this and give it to people when they have babies or people in the neighborhood who need a meal. This is a good meal to bring to people. Okay. I'm gonna give you the spoon and I'm gonna hold the bowl. So we're just putting in the pan that's been sprayed with the nonstick cooking spray and then spread it out. Yes. And then that half cup of topping you reserved. Oh yeah, the stuffing. The stuffing and butter is just gonna go right on top. Thank you. And this will make like a nice, crunchy, crispy topping. Now, if you could also save the cheese and put the cheese on top and then the stuffing or you can incorporate the cheese in like we did. Yeah. Either way, it tastes so good. Can't go wrong. All right. We're gonna stick to the oven for about 45, 50 minutes. Uncovered 40 to 50 minutes. Okay, perfect. Okay. So cooked in the oven for about what? 40 minutes or so? 40 minutes at 350. Nice. Oh, and okay, let's check the zucchini. Yep, zucchini is like perfectly done. I love how it's, oh, sorry.  Perfect consistency. There you go. I love it. Now this is one recipe my kids love. Now this recipe is also on our menu plan, right? Yes. So this is from our standard menu plan, tried and true family recipes. You can view a sample plan of that at SixSistersMenuPlan.com and get more information about what types of recipes are on there, but the most important part is that it's easy recipes anybody can make and help you get dinner on the table. Right, the goal is just to make our lives and your lives easier, right? Now if you want this recipe, we'll put a link in the description for you. You can find this recipe on our menu plan at SixSistersMenuPlan.com. All right guys, I'm curious. Like, zucchini is our favorite, what, I would love to hear one of your favorite zucchini recipes and what you're making this fall with all the zucchini. Yes, your favorite. All right, we will see you guys next week. Bye.


Right, so let's talk about no-herd. So for us it's a bit old about freedom zero, that is the ability to use software, basically. For any purpose, and for us the important thing is that you shouldn't have to ask the system administrator for things. You should be allowed to do whatever you want. So for instance, why is FDisk, MQ2FS, et cetera, hidden in slash has been. I want to be able to build disk images, play with them, mount them, et cetera. So just be able to work with the kind of disk and network access I have and do whatever I want with this. So it's about freedom to innovate as well if I want to use an experimental file system just play with it without being afraid of crashing the machine. You should be able to just run the file system and let the system administrator be happy with this because it's safe to do this. And also it's a way to provide freedom from misbehaving programs like a driver which doesn't work so well or something like this. So just to give an idea, in GNU Heard, so you have the kernel which does basically almost nothing just managing tasks, the memory and inter-process communications and then you have a lot of daemons doing the actual stuff. So the PFI net is the TCP IP stack, X2FS does the file system thing and then you have the user just running programs. And these tools just actually just talk to the daemons through the micro-cernel. The micro-cernel doesn't do much, it just passes requests along. So for instance, if a server crashes then that's fine. For instance, a driver crashes, or hangs, you just can kill it and then PFI net will reopen a new instance of the driver and it will just work thanks to TCP just continuing to ping the other computer. So it's just a narrow, it's not something of the death. At some point on my desktop I could switch off the light and then that would crash my laptop because switching off the light would reboot my hard disk, a USB hard disk and then the kernel of the laptop wouldn't like this. This is not something which is supposed to happen. So with a server approach this is completely fixed. It's also easier to debug, it's really nice to be able to GDB a TCP IP stack when there is something happening in there, just run GDB, you can jpeg it etc. You can also there more crazy things. For instance, the Linux console doesn't support much because we don't want to put too much complex code in there. On GNU Heard, the console actually supports things like Chinese double width support etc. which is not supported by the next console and that's right because you don't want to put too crazy stuff. Here, since it's just a user land program then you're fine and so we do have Chinese support in actually text mode in the Debian installer. Okay, so just to show an example, so here I have FTPFS which uses the TCP IP stack to actually mount a remote directory and then I can use ISOFS to mount an ISO image which is inside that FTP server and then I can just let Cp copy a file from the ISO image which is on the server. So this translates that way. So I've turned this command a long time ago just to say that FTP colon in my home directory is whatever FTP and then I can take tilt FTP slash etc. a URL and give that to ISOFS and then mount that on my MNT and then I can just browse inside the ISO image without having to download the whole ISO image without having to ask root for this kind of things etc. And I can also permanently store this in X2FS so just to give an example I have a translator on my signature file which just calls fortune so when I cut that signature I get one signature or another because each time I open the file it's a new instance of fortune which is started so you can see that indeed this is stored in my signature file. So this is fun. Another example, as a user I can start my own TCP IP stack and tell it to use virtual network interface and then put the TCP IP service on some node in my home and then I can run OpenVPN to actually put and push and pull packages from that virtual interface and build a VPN with somewhere else and then I can remap the system what is supposed to be the system TCP IP stack into my own socket and then I get a new shell for which the system TCP IP stack is actually my own TCP IP stack and so I can decide which program actually use this TCP IP stack and just do my own VPN without having to ask anything to the administrator but also for instance it happens quite often that you have a binary maybe not SH but like Python or Perl or whatever you have a program which wants slash bin slash SH to be actually bash or whatever so I want to change this and so I can remap this so for instance if I look at SH so as usual it's green but you can see here it's dash and if I remap bin SH into bin bash for instance I get a new shell and actually a set is not the same so it's remapped into slash bin slash bash and so it's actually bash which shows up here so I do really choose how I work what my environment looks like and for instance I can even remap the whole slash bin directory into my own directory where I expose slash bin and also other things so that programs which have slash bin slash something hardcoded into them I can use them without having to ask the administrator to install stuff inside slash bin so it's kind of interesting it's a bit like Stowe next geeks but done in a nice way so how does it work well it's actually relatively simple in the principle simply that libc doesn't talk with the kernel or whatever it always uses rpcs so to ask nicely about opening files etc and so it's really natural in GNU HURD that you can redirect things so for instance the remap and translator here is like maybe 200 300 lines because it's just a matter of you open a file okay is it something I want to translate yes I translate that and then I open the real file and give the new handle to the program and that's all so it's extremely simple so everything in GNU HURD is an RPC and so it is interposable and then translators get exposed inside the file system so we have seen the tcpip stack it's just a path inside the file system and then the user can decide whatever it wants to do to interpose whatever so for instance fakeroot in Linux is quite a big because it has to interpose libc symbols and every time libc invents something new then it breaks in fakeroot because fakeroot has to know about this new symbol etc sorry interpose them so either through ptrace or ld or whatever in GNU HURD fakeroot is like a thousand lines long because it just implements a few basic things and then everything just works we just interpose basic authentication hooks and libc uses them all the time so it's fully virtualizable and with a really fine grain interface because you can precisely decide which RPC I interpose or which file in the file system I interpose and then you can just use your home directory the tcpip stack and pile stuff over it the way you want so just to give a crazy example so we have a lot of stuff so I actually have a nicer image inside a partition disk image on ftp over vpn and this is not so crazy maybe the ISO image inside a partition disk the ISO image is a bit too much but one file inside a partition disk image on ftp over vpn it's not so crazy because maybe you're on a hostile network so you have to use a vpn and then you want to access a file you know is inside a disk image I don't know an ARM based disk image I did on a public ftp server and you don't want to download the whole image just to get I don't know the readme file or something like this so it's not so crazy and it just works nicely so a bit more debian stuff porting packages to hurt is quite easy in principle because it's just a POSIX system there is a lot more than just a POSIX but it provides a POSIX interface so portable programs should be really fine just for fun some dumb issues so for instance some programs think that if it's not Linux or BSD then they can include windows.h why not if the system has mar.h that must be macOS because macOS is the only system in the world that use mar I don't know why but I will try to grab cpu info which doesn't exist on gnuherd yet so they basically just run mac-j which just explodes the system even on a lignix system it's just the same unless it's a small program but with a lot of c++ files it's horrible some people include linux.h from linux instead of just standard one a problematic thing is people who hard-code erno values the values of erno are not standardized so you shouldn't hard-code them like in test-tweet results or things like this and quite often in configure it's hard-coded that only linux knows about LP threads or LDL etc so quite often programs are not generic enough and that's just easy to fix but we have more so we have a portal page developing a bit more about this I wanted to talk a bit more about pathmax so it is not defined on gnuherd for a very good reason and it is allowed by posix not to define this just to say that there's no limitation on the pathmax value we don't have a limit on the size of the path and indeed it has a fragile semantic it has never meant a reasonable size for an array of characters to store a path on linux it's 4000 that's a whole page that's a whole TLB entry for just one file name it's extremely costly most people don't have a so long path and so it's really a pity to use so much memory because it's always a whole page always a line on 4k etc so that's a waste for one and paths can actually be longer there's no strict limitation you can mkdir something cd into that mkdir again cd etc you can do that as much as you want there's no limitation on this it's just that when you call get current working directory you won't get it completely and maybe some programs behave misbehave in that case because they won't see these files they will be quite actually hidden or protected or I don't know you cannot remove them just giving the path you have to cd cd cd and then you can access the file and for no reason actually because linux inside doesn't doesn't have such limitation actually and also POSIX didn't really say precisely whether the final slash 0 actually is included in pathmax or not so people would allocate pathmax plus 1 or maybe not so we have a lot of code which doesn't maybe actually work but nobody tests it actually because they don't never have so long path so I'm a bit afraid of all this got using pathmax so you should be afraid as well just to give another view of the state so we have a 386 support we have a 64 bit support which has started so we have the kernel booting and now it's mostly translating between 32 and 64 in RPCs we have drivers for network boards in as user translator using the DD layer so we have disk we have extend port we have preliminary sound support which was announced today using Rump, the Rump kernel we don't have USB yet it is quite stable I haven't reinstalled my boxes for like a decade I don't remember when I installed them actually and the building machines just keep building packages for weeks without a problem 81% of the archive we have the native and Debian is started working which is really working great recent work is like interesting thing is a distributed mtime translator to provide slash proc slash mounts in a hurtish way we have quite a few optimizations which went in to improve the performance we had release quite some time ago I really recommend to have a look at this one it's fun so we released some Weezy and Jesse snapshots they are not official but for us it's really an official thing and the important thing I wanted to discuss this week is the removal from ftpments master so this is due since quite a few years now honestly it's really not useful to mirror the hurt packages over the whole world because they are not even as many users as the number of mirrors so okay that's fine for just the removal from the main archive in terms of mirroring but then we have a lot of consequences so for instance builddbm.org is really an important thing because that is where the release team schedules transitions and losing this for us would be really tedious work because I've been there doing actually the transition work the same work as the release team and it's really painful to do this again so we would really like to have solution for this so maybe get that fed from Debian ports and then that's fine we can be on Debian ports as long as at least there is some synchronization between something and also getting exposed on the buildd package status page so that people are aware that there is some port which is failing and maybe they are keen on spending some time on it maybe not that's fine but at least get them know about it and also a corner thing when we have a version upgrade like GCC or Perl the release team ask okay we'll have to upgrade the buildd's and at the moment they don't even have an account on them so they cannot check whether the version is good or not so maybe we should just provide an account we just need to know who we need to give an account to so basically my idea would be okay that's fine not being on FTP master the thing is we still want to have most of the support of Debian to make our life less burden as much as possible without any extra load on the release team etc we do understand well that we don't want to put work on people's hand but we would like to still get some benefit and probably there are solutions for this and conversely all this I mean putting more work on us herd porters would actually be the same solutions that existing ports on Debian ports would be really happy to have to improve their life to have less work to do than they currently have it's really a problem so maybe we want to think about a real status for second class citizens so like herd but also the spark etc so maybe we want to have some both at some time so we can gather and discuss about this okay so future work interesting thing is probably the most interesting thing is probably using the ramp drivers because at the moment we use DDE but it's not really going forward we thought it would be a way to get newer drivers, Linux drivers without extra effort but it doesn't actually happen at the moment while ramp does go forward we see work being done with Xen etc so this is probably a long term solution maybe we'll have another distribution through Geeks this is progressing we are quite far from doing this so for now Debian is really the only herd distribution that we have so we'll see and of course just come and have fun with your pet project just try thanks any quick questions before we run to lunch hello I just wondered if you're using herd I wonder if you're using herd on that laptop with you there to give the presentation yeah yeah this is running herd yes so it's quite like usable every day well not every day because without USB you cannot mount a USB stick for instance so that's quite inconvenient but yeah I could probably use it every day I don't I mean for work I cannot for this but yeah also we don't have wireless drivers at the moment we hope that with the run drivers we would get this so yes some people do use it every day not me but those would be the major things missing for more people to be able to use it thanks any more questions if there are any more questions then thanks again right and I think we are out to lunch


Good morning, everyone. Thank you for coming. My name is Tanayasai. I work with Acvia out of India as a technical services manager, and this is my first presentation ever to a large audience like this, so pardon me. I did a small one at a local camp, but not too, so I'm a bit nervous, and so is my colleague.  So, yeah, and this is my colleague, JK. Hi, everyone. I'm Jay Krishnan, Jaypal, working in Acvia for us as a technical architect, and here we go. So we work out of here south of India, both of I and JK work remotely, although we have an office in Delhi, which is in the north of India. We keep shuttling from the south to the north almost every other week. And before we dive in, is there anyone who has already developed with solar? And to what extent have you used solar anyone so far? Awesome, that is great. And to set the expectations, like we intend to do everything that we can do out of the box without writing any code in this session. In this session, we'll be building a small website. I'll be showing wireframes of what we'll be building before we dive in. And we won't be writing any code at all in this session. And the modules and software that we use are Drupal 8, obviously, and the modules are Search API, which is a search framework available for Drupal. It's a contract module. I'm pretty sure many of you are already familiar with that. And Search API Solar, which allows, this module allows Search API to use Apache Solar as the search backend. And we'll also be using Facets module, which allows you to build these filters as blocks that you can use to drill down into the search results. And one thing that we won't be using this, you might not see this in action today, but when you are setting up your Search API Solar module, you might be required to add this library to your Drupal build, which is Solarium. This is what these are the things we'll be using on our demonstration today. And I won't go deep into what is Solar. I believe, like most of you, as you mentioned, that you have already worked with Solar are familiar with it. And it's an open source search platform built on Java called Lucene. And who uses Solar? As you can see, this is a screenshot from apache.org website, big names like Netflix, Disney, and all using Solar on the search on their website. So firstly, if we talk about why we need Solar in the first place, it essentially boils down to the search in Drupal Core being very slow and also not being scalable. And some features that you would find in most searches like stemming, we'll talk about what is stemming as well. Stemming and highlighting spell check are not out of the box or tricky to accomplish with the core search. And also, when you search for phrases, the search that is available in core doesn't really work great unlike it works with words. So these are the few reasons many customers and many projects go for Solar instead of core search. So essentially, you can summarize this as a Solar to be giving you fast access to big data on a budget. So it doesn't really cost much, and you should be able to spin up a typical Solar instance for as less than $10 a month. And when we speak of hosting Solar, like apart from the web server that you have your Drupal instance on, you would also need to have a Solar instance. It could be on the same machine that has your web server, or it could be on a different machine, although most of the times you would opt for a different machine. And some of the options you could consider, Acquia Search. So if you are building with Acquia Cloud, Acquia Search comes bundled with Acquia Cloud. And it's very easy to integrate. Like you would not even need to do any configuration, like just enabling the Acquia Connector module. Let's you connect directly into the Acquia Search instance. And one more option we are trying out recently is hostedapachysolar.com. This was nice as well. It is actually built and maintained by one of our colleagues, Jeff Gerling, whom you would probably know. And we stumbled upon this one yesterday at the booth. So measuredsearch.com, they provide similar hosted Solar solution. And you could also choose to set up an instance from scratch yourself on AWS or similar. And there are not too complex. And Solar is very well documented. And there are multiple block pieces about setting up Solar on any Linux instance. And to add to some context, like any of you who had worked with D7 on Solar would probably already know that we used to have two popular choices to implement Solar on D7. There used to be this Search API module. And there also used to be this Apache Solar module. And both of them were good in their own ways. But now with the D8, so these two modules have combined their forces. And we have one larger Search API module, which is amazing. I'll take all the questions at the end if you have any. So save your questions for the end. And we try to close this at least 20 minutes before the hour. So we have some time for questions if you have. And I'm not going through the process of, so we'll be building two views essentially, showcasing various things that you could do with Solar. I'll be doing the first part while my colleague JK will be doing the second part. In the interest of time, the first part, which is very basic, we're not building it live here. Instead, we have recorded some videos last night, which I'll be walking you through. And the second part, we intend to do it on a live website. And although we have a video as well, and all the site building that we do, I'll be sharing the link that has these videos at the end of my session. So as I said, I'm not going through the installation of Search API module. It's fairly very similar to how you would install any other module. And once you install Search API, this is essentially the configuration page that you would see. It won't have anything but just two links to add a server and add index. So server is essentially the hosted solar solution or the one that you set up earlier, the solar instance that you have set up. We will need to tell Search API about where that server is located and how to connect to it. That is what we would do when we add a server. And anyone not familiar with the term index so far? Like, I mean, I would take that as a no. Essentially, index is a cataloged way of having all the content indexes, our search backends a catalog of content. So it would be easier for the server to pick up to retrieve results whenever we do any search query. And we'll also see in the session how we add an index and how we add a server. And what we'll be building will look something like this. We'll be building a simple site search. So we'll be replacing the search in core. We have a simple site. I'll show you the content types you have got. And what we would be building is a very simple search, which has a search box, as you can see on the left, and a search button. And it is expected to show the search results matching those keywords in a very simple format like you would see on any search result with a title and a snippet of text. And so we have the site which has an article content type, which is just a title and some content and some tags around it. And we also have a phone content type, which allows us to store the phone title, like say iPhone 6S Plus, and also the various parameters and the configuration details of it. So we have a field for each of them, like operating system, camera resolution, and built-in storage options available, and such. And what we intend to build, so we have a content which has many of these phones, and what we intend to build is, this is the second part where we build something like this, just like you would see on Amazon or any website when you are searching for a phone, where you see the search results and a bunch of facets. So this is what we call facets when the filters on the left that you see which would allow you to drill down into the results to narrow down your selection, to match the parameters that you specify on these filters. So that is what we will try to build in this session. So first, a very simple site search, which has a search box and shows the results matching the keywords on the right. And the second will be a small tool that will help you find the phone that suits your needs. And, yep, when speaking of facets, I'm pretty sure most of you would have stumbled upon something like this. This is a screenshot from Amazon India where we have a bunch of facets that will allow me to drill down the phones by rating and price, discount, below discounts in India. So as I said, adding the server, I won't be doing it right now, although I'll be walking you through the screenshots. It's fairly simple. Like once you have procured a hosted solar solution, be it from Acquia Cloud or Acquia Search or one of the other options which I mentioned, this one is from hostedapachysolar.com. And once you procure any hosted solar instance or when you set up one yourself, you would be getting these details, the hosts, the port, the path and the name of the search score, which is what you would be required to key in when you say add server on your search API configuration. So the page looks like this. You would give a name and the backend would be solar and you could leave the solar connector to standard. And the details which I showed on the earlier screenshot, which you got from your solar vendor, you would key them in here and you can leave the rest of the configuration to the default values which work fine out of the box. And at the end, you would have an option like this which you could enable if you intend to use the same solar server for multiple websites on your multi-site setup. But you could leave it unchecked if you are just using it for a single simple website. As I said, now I'll walk you through that video which we have which shows building the index and then we'll do a simple site building which shows building the view that is required for the site wide search. And then my colleague JK will be walking you through building the more complex facets for the phone finder tool. We're starting with going to the search API configuration page. So here I have my server already added. You can ignore the second part where there's an index here. You would have just a server that you added in the earlier step. And I'll go with adding an index here. The index could have any name. And since I'm going to build one for my site search and the phone finder tool, I will key in an appropriate name. And this bunch of options here allow you to define what content from your Drupal site is to be indexed by this index. And it could be content here which refers to nodes. And you could also index blocks. This is especially useful when you are, when all the data that you have on any specific page is not belonging to just the fields that you have on that content type but on some blocks as well, especially when you are using panels, panelizer to have our paragraphs to refer to individual pieces of content on your landing pages. Although in this demonstration, we'll be sticking to the simple content where and assuming, wherein we have all the actual fields that we're indexing attached to the content type itself. And if you have some content on your terms and if your terms have fields, et cetera, you could select or if you want users, user details to be indexed as well and available on search, you could use other options about taxonomy, user, et cetera. And since I selected content, the next piece of configuration allows me to define what content types I would want to be indexed. And as I said in this site, I have an article content type, a phone content type and a basic content type which was available by default. Although I would want just the article and phone content types to be indexed. And if it is a multi-lingual website, you could define like what languages of content is to be indexed again. And in our case, it's just a single website that has only English content. I would leave the configuration to its default value. This is a bit tricky here, like especially when you are selecting the content types, it would initially, the first radio button will be clicked and I was actually enabling two content types and I was trying to see my search results. I could not find them until I read the labels here because intuitively when I selected just two content types, what it was saying was all except those selected content types, which was a default option that was selected. So keep an eye on that when you... And I will attach this index to one of the servers which I added in the earlier step. So in your case, probably if you're doing it for the first time you would have just one server. And you'll have an option here that will allow you to index immediately. So when you create any node or when you update any node, Drupal would need to send that updated details or new content to your solar server. And you could choose to have that happen immediately as you edit the index or if you leave this unchecked, Drupal will be sending that content to the solar server only on crown runs. And you can select how many pieces of content or nodes should be sent in one bunch on each crown. If you have a small site with not a lot of content that is very frequently updated, you can choose to select, you can choose to index the content immediately. If you have larger website where there is more frequent content rating, it is more recommended for performance reasons to have the content be indexed in batches through crown. And now I would need to tell my index what fields it should index. And so when you add a index, this is what you would see. You can run the initial index since it has just probably 10 nodes, it was very fast. So you'll be able to configure fields and processors here will go through both of them. And when you add a field, you need to very specifically add each field that you would want to be part of your index. And that would be every field that you intend to show on your view. Like when we saw the phone finder view, we had a bunch of fields that were displayed in the view. And also every field that you intend to use as a filter in the facets. I'm going to very quickly, so in this case I have my title field here and I have my body field here. I'll make sure I add both of them to my index. And the same with article as well. So I have these two fields on both my content types, article as well as body. And both of them actually use the same field. So I need to just add them once. And there are the specific fields about processor type and brand and features which are available only on my phone content type, which I will make sure to add to my index as well. And so these three fields over here, the title and the body text here and the image over here and the price field. I'll be adding all of them one after another. Adding the brand field and the features field and the price field, the image field. Okay, probably while I was making this video, I was not sure which image field to add because there was one image field in the article content type and there were two image fields essentially with the same label but with different machine names. So again, one reason why we should be more careful when labeling the fields. So this list actually shows all the fields from all the content types, not really sorted per content type. And once I have all my fields, and sorry about that watermark on that video by the way. So once you have all the fields added, you would have options, you would need to define what type of field it is to solar and any, so when it comes to text, you would see two options, one is string and one is full text. So any field that you intend to be available through textual search, you would need to mark it as full text and any shorter text fields that you intend to use in the facets or any other type of filter, you would be marking them as a string and the rest of integer decimal are very similar to what you would have as a field type on your Drupal as well. So these are the field types that we are defining to solar index about how solar should pursue these fields. And when I have multiple text fields, full text fields, you will see an option, a configuration here called boost. So what this boost allows you to do is if I search for a keyword and if that keyword is available in the title of my content on one node and in the body of my content in another node, I can increase the boost value of the title field so that the search results would show that the result that has the keyword in the title field first and gives lesser importance to the another search result which has the same keyword in the body field. And as I said, brand is a text field as well. Text or select list fields or even tax on me term reference fields as long as you are using them only in filters and not in or as long as you are using them in the filters like you need to make sure that you mark them as string fields and not full text fields. I'm gonna save my changes. So far we have built a index and marked the fields that we need to have on this index. And we are now getting into this processors tab which allows you to do some pre-processing and post-processing on the search results and the way they are indexed. The content is indexed. You have a bunch of options here. I don't go in detail about all of them. So enabling content access, what it does is if you have this checkbox enabled, if someone did a search result, only if they had access to that particular node via Drupal permission system that is when Solar would return this as one of the search results. So for example, if you had a content type which was restricted to a particular role and if that was available in the search result because Solar was indexing and the same content was viewable by rest of everyone on the search results because Solar was indexing all the content and showing all the results to all roles that would be bad, right? So that is when you would enable this checkbox. And similarly, anti-status would make sure only published content is shown on the search results. Highlight this field in the keyword in the search result. And you can make it ignore case. So if I search for Samsung with a capital S and if my content had Samsung with a small S, I would still want that content to be shown in the search results. So I will be enabling this ignore case flag here. And ignore characters, actually, this could be left unable. Like if you would want to ignore any special characters while indexing and when comparing with the keyword, you could do that. And those special characters can be configured at the bottom of this page. And here you will be able to configure the special characters. And we also chose to ignore HTML markup and you can configure what markup and what tags you would want to be indexed and not indexed. So here we go. We are almost done with creating the index and the next item would be building this view which building this particular view as you see on the right. So trying to display the search results like this and also building the search box. We'll be using a exposed filter of a view to build this. And let us see how we do it. I start by going to the views page and clicking on add view just like I would do with any other while building any other view. I'm going to give that name which defines it appropriately which is site search because I intend to use that view to display search results when I perform a search on my site search bar. And the main thing you need to probably note here is when you build a normal view, you would be selecting content or comments or users or tax on me terms depending on what you are building this view on. In this case you would be selecting the index which you created in the earlier step. So the index that you created in the earlier step would be available over here and you will be selecting that index. And I would want a page for it so that is where my search results will be shown. So and I'll give a title which looks fine and this would be the URL. And as my wireframe shows like we, yeah, Unfornmented List, this is about how you would want the search results to be displayed just like you would do with any other view. And so there are a couple of, so search API solar module is evolving and there are a couple of bugs here and there and I'm pretty sure when you try to do the same you'll be stumbling into a similar bug. So one of which is the preview would not actually update until we hit the save button on that view which is not usually the expected case. Also what we, when we started making this recording and our preparation, we used a search API module which was a few days old. We'll be also talking about what versions of modules works and what, and the issues with the module versions in the last, at the end of our session. So if you see me hitting the view, save a view button again and again, that is because it would not reflect the, it would not update the preview unless I do so. And I'm going to add some fields here and one field I'm adding is the search except field which comes from solar. And I'll be doing something here which actually I'll try to keep track of time. I think we're already over it. So I'm going to run through this a bit fast but this is very similar to how you would add fields to any typical, any view except that whenever you are searching for a view you would find two options. One is the view, the field name itself and the field name with a bracket that says indexed field. So any view, any field that is present in your search index will be available with that indexed field label. And I'm going to add the body tag while my title field was already there. Yep, as I said, so this body refers to the body field that is present in the database of your website while this body field refers to the body field present in your search index. So what I did here was sometimes the search, sometimes the search except field doesn't really show up because of a current issue that is open with search API module. So we're adding a fallback here where we're saying we would want to show the body field directly if the search except field isn't turning up and how we do that is, so we added this, so we added this body field although we enabled the checkbox that says display this field and at the same time for the search except field, we excluded this body field from the display and on the search except field when we give the displacement character as the fallback for a no result value. It's something to do with views more than solar. If you want to keep this simple you can just add the title field and the search except field and that should pretty much work in 90% of the cases. So here is how my site search looks at this point of time. As you can see, it's just showing all the results available and we haven't built the filters yet which we'll be doing right away. So now we have built a view that just shows all the search results, all the results available and now we would want to build that little search box over here and we'll be doing it through an exposed filter of the view. So I'm going to edit the view which I built in the earlier step and I'm going to add a filter and you'll find this new field which you would not usually see which is a full text search when you have your index added and here I can configure just like you would see with any exposed filter you will enable this checkbox which makes this filter available on the top of the view and this is very similar to how you would build a view with an exposed filter and the only thing you would probably need to take care of is selecting the fields which are available in the index which are actually full text fields and I'm going to save that view and you should be able to see this filter on the top which would allow you to search for any term and the view will be filtered to show only the matching results and again this is not in the sidebar as I did as we saw on the wireframe and the way that we move it to the sidebar is very similar to what you would do with any view which is you would expose the form by changing this parameter here to yes and that will now be available in your block layout and you can place that block anywhere and now once placed this search bar block will now be available in the I placed it in the sidebar first region so you have it here and this is how you could very easily replace a your site search with a very simple view that you built which uses solar on the back end I'll pass this on to JK who will be demoing on how we would build the facets for this phone finder over to you JK as the time is very less he's asking me to just show the videos and just pass it on okay so okay so here is the wireframe which we are planning to do it's a phased filter it's a search filter the brand features and prices will be there I will try to implement this so here I have a list of items which we need to do to accomplish the phased part first we'll check the index whether we have added all the fields required for showing in the search results page both the search filter and also on the right side section where we have image, title and description part and also price we'll do that and we'll create a views then so the views is nothing but the same way which we have created now for the site search but it will show only the type of phones and then we'll enable phased module then we'll create a brand phased so this is the plan now the same way like how you create the brand phased you will do the same way for price exposed filter and also the features phased and you just need to place a block on the left side section now we'll check whether we have added all the we have added all the fields on the index or not before going into that I just want to show you okay it's not that before just jumping on to that okay let's play this so we have now the site search I'm just going to the fields I'm making sure that we need this brand and features and price all the fields I'm just checking whether it's there or not so here the important point is that the title and body should be full text whenever because all the keywords will be passed to that title and body and we can retrieve that and all the other items like brand and operating system and price features other than a price it should be string then only it will be appearing on the phased filter search filter so we'll we need to make sure of that and the price can be a decimal and we have added a content type so that the type will be I mean currently we have added all the content on the index so there is a lot of chance it will retrieve both articles or blogs which you have in the site and for now for phone finder I don't want to show all the articles or blogs so we can add content type as a filter on the in the index and then we can use that and same way with the image like we are not going to index the complete image as a binary it's a binary so we'll use the media name which will be added in image I'm just adding here I'm just making sure the phases module is enabled and we'll add a view we'll name it as phone finder and again we'll add the index properly we are not seeing both aqueous search solar index and the phone finder index which was added earlier on the videos I've just deleted that this is the one which is having all the fields so we'll name it as phone finder and we'll have the path phone finder and I'm just making use of the table format so by default only the body fit will be there we'll add all other fields which is required and here I'm using this image which is indexed I use all the fields I'm just adding and rearranging it so that it'll be formatted properly stop me anywhere if you find like I want to know more details on this place how you did that if you have such things please stop me there I will explain more or I will make it slow so these are all just adding fields on the page I'm just removing the HTMLs which I don't want I'll go to the phone finder so here we have the phone finder the view which we have created okay so these are all the phased source which will be added by default when you are adding any index whenever you are creating any view based on the index so you have to select the source where you want to add the phased so I'm going to select the phone finder and I'm going to add the phased in the phone finder page so here we have a list of options which we can keep it on the search filter if you have seen the wireframe if you remember the wireframe the left hand side we have check boxes and we do have multiple options like that it can be a drop down or it can be a date list and all the options are open so for me I need a list of check boxes I'm selecting it and here we have some more settings on the result you can show like how many search results came for the particular keyword so that options can be selected in the settings and also we have some more options like by default in the search API and the phased when you are enabling it will give you the result but with the term ID if you are adding any taxonomy terms it will give you the term ID in the left so I don't want to use a TID I want to place a name for that so you can select that transform entity ID into label and here also we have some options like either I want to have or operator in between the phased items or I can have under option and if I don't have any phased available then I can just mark it as a display as a text and this is one more option the sorting of phased like when we are going to the phone finder page when I'm having some results in the left hand side we can see many options but it can be having like the sorting order can be different it can be either based on the search results what we had or it can be based on the count number of count how many results came from the index as a solar index and also the display value so these are all my multiple options I'm just removing the active state else yeah I will show you that first it's appearing it's not coming here I whenever you are creating a phased it will not appear directly on the page where you want so you have to create a block out of it so I'm just going to block layout and finding a phased's block by default I'm not selecting any other options you can leave it open or I can say like I want this brand phased to be available only on the phone finder page there we go this is how it's up here it's appearing the phased there is some CS issue we can correct it later or definitely we are not going to use this team in the production so similarly we can build all other phaseds now I will show you on the price phased which is a little bit different it's having a grouping item so how do you have a phased for a range so that can be shown here for that I'm not creating a phased actually that's going to be an exposed form exposed form block and also I see that I have all the content including the articles so which I want to filter it out just add the type I will add the price this is a small difference between the normal exposed filter and this particular range filter so we'll use grouped field filters I'm just selecting grouped and providing some values like less than or so this options you can keep it like less than 200 or 200 to 300 any range and for this particular difference or less than or greater than to be appearing here in the views when we are indexing any integers on the solar it should be decimal so we should be very careful with that it cannot be stringed there again it will appear on the top of the view so we'll move it to block so we can use this exposed form in block option to S so that it will be available as a block just placing the block on the sidebar there we go so we have this price range filters on the left side similarly we can build for operating system or any other features also can be placed before jumping on to the next slide I just want to hear from you like have you faced any problem when you are setting up the solar and indexing or have you not faced any problem at all when you are indexing and solar configuring this solar so yeah yes yeah in Drupal 8 you are adding the fields so you will make sure that whatever the fields you want to get to index it will be you are adding it so I will I will let Tanya take the stage so essentially what we did so far is we built a view and just like to show this search results and and we added some facets I I mean I understand this could have been I think this was a very fast pace that could have been slower I think we sort of messed up a bit there sorry about that I want to share this video of site building and its original speed I will be sharing the link at the end and one thing we definitely wanted to discuss was like when you try out search API module and when you install all this search API solar and facets module most of the recent versions don't work with each other out of the box so as they have been evolving what has been happening is we one version of the module works with another version of the module but when a new version comes out for search API it might not really work with the existing version of search API solar module so this is a version of modules which we found to be working when we started preparing for this so we used 8.3.1 and search API RC2 and search API solar beta 2 and facets alpha 9 although search API was actually like a day before yesterday they wrote out the first 1.0 version which I believe will be more stable than the earlier one and so when you pick the modules like watch out for the known versions of modules and and there are very high chances at least until the next few months that you would stumble into versions of modules that don't really work with each other and there are also a large number of modules in this search API ecosystem which add a lot of functionality for example this search API attachments module allows you to index the content of the PDFs or any other documents that are attached to your content for example if I had a specifications document which I attached to my phone finder, phone content type I could actually be able to search for the words that are present in the content of that attached PDF and which makes a search API and solar search even more powerful and also you might have noticed that to build that price filter we used an exposed filter to build that group would filter when we build the price facet which there are also some additional modules some of which are part of the search API pack itself and some of them are available as separate contract modules which provide more options for the UI for your facets like sliders and date range selectors etc so search API is a big ecosystem and it has a large number of modules around it and whenever you need something very specific and very customized do check out if there are any modules available that make it available out of the box and also autocomplete, multilingual and spell check aren't really working at this point of time with the versions of search API that we used although I think I believe it might have improved with the latest rollout but again like these I think should be far more stable in a few months and yeah we'll be closing about there wanted to showcase one small work we did a few months ago this was more on D7 it was more about module development than site building the module available on d.o which provides this language fallback capability so when you had a multilingual site and when you search for something and if you wanted the search to happen on the current language of the user and if a result is not found but it's available on a different language content you would actually show the current language result first and then show the default language only if there is nothing in the current language so this is a simple module you could try that out although it's on it works with D7 not D8 and also Apache Solar module not with search API and the videos that I showed you they're available over here you could bid.ly slash beyond solar b-e-y-o-n-d-s-o-l-r four videos over there and let me make that larger I'm not able to edit that so b-e-y-o-n-d-s-o-l-r bid.ly slash you could check out the videos and probably like at a better space and any specific questions? this may be more of a solar thing but in setting up searches that operate really well over multiple terms I found that the or choice gives way too broad of a set of results the and choice gives way too narrow a set of results is there something that's smart look kind of like Google search that's sort of in between where it gets as many as it can but it I think the best way to optimize that would be through the weights that you give to various fields and although I think that's not totally related to and or or but it's I've tried doing it with a solar parameter yeah I agree it's not very parameter setting it equal to two but that sort of helps but it's I was hoping there was something in that would really help that situation I don't think there's anything that exists right now that sort of like it's as smart as Google at least for solar on the counter space thank you everyone thanks for coming and have a great camp


I want to start down here on this end. Today is a take back the neighborhood graffiti cleanup event. Let's go ahead and get our rollers. Let's get started. So we're here at 1501 Albion Street. And we're painting all the graffiti that's in this area. Nobody likes to see graffiti in the neighborhood. It's just it's not a good look for the city.  And it's just important for the citizens and for the residents of the neighborhood. It's looking great. It's important for us that people see us that we're part of this community too. And we want to be out here showing that we are. It's important for DPD to get out here and do our part in the community as well as far as making it look good. Good job, everyone.