Welcome back to the breakfast on Plus TV Africa. Our next conversation now is on a story of about 29 generals in the Nigerian army who have been asked to go on a one-month leave. They have been speculations with regards what this means and if this is normal military procedure, of course after the placement of Faruk Yahya as the new chief of army staff, what happens to military officers who were senior to him in the army and of course they were on courses 35 and 36 and the likes. This one we're going to be speaking with retired Brigadier General Anthony Uppu. Good morning. Thanks for joining us, sir. Good morning. Hello, good morning. Good morning to you. Thanks for joining us. I'm going to start by asking if this is regular military procedure. If there is an appointment of a general or an army officer into a position, is it normal procedure that every officer above him has to be retired? Okay, you're not very clear but if I understand what you are saying, you're trying to find out about the appointment of a chief of army staff. Yes, and if it is regular army procedure that every officer with a higher rank than he has to be retired? No, no, no, no, not necessary. The terms and conditions of service provide that only one person can be made chief of army staff at any one time. And the appointment of the chief of army staff is the prerogative of the commander in chief. So he can pick for many calls as long as the person has reached a particular rank, a general rank. Now, once appointed, all those who are senior to him have the option of retiring voluntarily if they so desire. Because the minimum length of service for a regular combatant officer is 15 years. So most of the officers who get to general rank would have put in their 15 years service already. After that, they are free to voluntarily retire without any penalties and they will get their full pension. So it is left to the senior officers who are senior to the officer who has been appointed chief of army staff if they do not wish to serve under him, they can then submit their voluntary retirements. So it is not mandatory that they would be retired. Okay. There are other other jobs that they can do within the military. In the joint service, the agents, joint service headquarters, there is Ministry of Defense, there are military appointments. So there are very many jobs that they can be deployed to. So really speaking, it's not compulsory. Okay. So Mr Uppo, we know that in 2014, when Goodluck Jonathan got new service chiefs, about 50 generals reportedly retired. And then one year later in 2015, when President Muhammad Wari appointed new service chiefs, about 25 other generals retired and now 29 to go and leave and then a one-year cost because someone lower than the rank have been appointed as chief of army staff. So do you think this practice should continue or should it be a law for the president to appoint the most senior officer or general? It really depends on the president's commander in chief. The president in his capacity as president can deploy officers as he wishes. In his capacity as chief commander in chiefs, he can do the same thing again. So it is not the norm. What I hear if it is true is not the norm. During military government, the practices were different because of the issue of perceived loyalty. So if the commander in chief thinks that the people that have been bypassed will not be loyal, then he gives them the option of retiring or be retired. But in the democratic government, it is different. So what I hear is happening now about go on leave and go on training and so on is unusual. I don't think it should be institutionalized. It should not. So what should it be? What do you think standard practice should be going forward? Maybe looking for the next president of the country. How should the procedure be for the appointments of chief of staff and other levels like this? The practice, the well-tested practice that has always been there should be maintained. Do not forget that the military has terms and conditions of service. People tend to forget that the military, just like the civil service, has terms and conditions of service and it should be adhered to. Now as you go higher in rank, the possibilities of appointment into certain positions reduce. So if you are a general and they need to appoint a chief of staff, they can only be one chief of staff among so many generals. So the practice has always been that before you get to the rank of general, you would have even reached the rank where you can voluntarily retire. So it would be, I for example, I voluntarily retired. I was given the option of voluntary retirement or compulsory retirement. It was during a military government and I chose to go voluntarily. I had opted to resign much earlier anyway. So I chose to retire voluntarily. So I wanted to ask you to react to people who say, when you appoint someone who's on a lower level and the others have to go and leave, you're basically losing about once a generation of people who have lots of experience on the field. How do you react to that? No, sorry, I didn't get you very clearly. Can you say it again gently and slowly? Can you hear me now? Yes. I'm saying how do you react to people who say this practice of the presidents appointing anyone he so chooses basically just makes people or other generals who have more experience just makes that go to waste? Like I said, the prerogative of appointment is that of the chief of the commander-in-chief. He has his own way, he has his own guideline. Every commander-in-chief has his own guideline for selection. So it is not for us to decide the guideline that the commander-in-chief used. So I think we should just go along with it. Does this in any way affect the loyalties to service knowing that there's a possibility that you might get to the peak of your career and then be asked to resign because you didn't hit the chief of army staff position? Does this in any way also affect the emotional attachments to the Nigerian army to all the military officers still finding their way to the top of their careers? Everybody wishes to be chief of army staff, but everybody cannot be chief of army staff. I think that is the long and short of it. So if you have been by past, the commander-in-chief has his reasons. And so you should accept it with grace and retire. It does not mean that it is the best, tactically or strategically, that is selected. Once you get to the rank of colonel, appointments become literally what we say, political. But isn't that dangerous? Always be that you are the one who can plan battles the best or who can fight the best that will be at the top. There are other considerations, political considerations, economics, strategic. So many considerations are put in before chief of army staff is appointed. So I don't know what the considerations were for picking up the present chief of army staff. So I cannot be specific to that point. Yeah, but what I'm asking is the considerations you've mentioned, political and economic and the likes, aren't they dangerous with regards to the strength of our army and now the ability of the Nigerian army to deliver? Should, would you advise that we have a specific format with which any person attains the post of a chief of army staff instead of based on the considerations of whoever is commander-in-chief? Well, you know, in a developing environment, even in a non-development environment, in America, for example, a number of people have been made chiefs of army staff and so on who were far, far junior to their colleagues. Like I said, it depends on the perception of the president, commander-in-chief. The issue of loyalty is always number one. The issue of performance comes second. Because if you have an officer who is very efficient, tactically competent, strategically sound, but not loyal to the system. Yeah, but how do you judge? You cannot command the army and be loyal to orders that are given to him by the president. Yeah, but how do you judge? The law is still very key. Yeah, sorry, general.  How do you then say, well, all 20 of you are not loyal enough to me as a president? And so I'm going to drop all of you, even if you've given all your life and service to the military. How do you judge that loyalty? Look, there are various ways that the commander-in-chief gets this information. He has his intelligence services that feed in with information.  You're going to appoint such a person as the chief of army staff or the chief of defense staff because you then know that the man might overthrow you. So that means of judging loyalty. It is not a test. It's not an examination. Loyalty is something that is presented to the quality. Oh, well. Anthony, well, thank you very much. I think we can wrap up here. Thanks for speaking with us this morning. And we wish you a very interesting day ahead. Thank you very much. Thank you. All right.  You know, if everyone has given all their lives in service and loyalty to who exactly, should it be loyalty to the person or loyalty to the country? I believe that, you know, the training and the service, you know, in the military, I've never been there, but I believe that it should be loyalty to the country, not loyalty to a person. Yeah, but apparently it's a longstanding military tradition here. So what can we say? Yeah, it doesn't make it entirely right, you know, because I don't, I don't, I think it's also one of, you know, the challenges that we're currently dealing with in Nigeria today, where we see government agencies, you know, openly say, oh, we are loyal to the president. It should be loyal to the country. But loyalty aside, I think the focus should be on who you think can get the job better. You know, the president felt that, you know, right now with the demise of the former chief of army staff, that the new one, you know, is more competent, has more ideas, then I think that should actually come more than who's older and who's older and who's younger. Absolutely, competence should always, you know, be key, a key factor in these things.  But loyalty is, loyalty is a very vital concept in the military anyway. So anyway, that's why we wrap it up with this conversation with the 29 generals who are going and leave, we'll follow up on that as more information unfolds. We're going to break here and return to talk about the price of bread.


Bernie and the members of Support Network, what a great impact. He was a person who was our patron, not just a patron, he wasn't a figurehead, he was a person who rolled up his sleeves, got stuck into it, attended all our committee meetings and really enjoyed his work, his passion. People who knew Bernie know about his passion, his immense pride and hunger region, his rubby roots, where he came from from the country. Well he transferred that all to the members of Support Network. Bernie was a classicist and he was a man who was inspired by the love of Latin literature. Latin literature was always with Bernie, he was passionate about Virgil Zanier and it inspired him, it informed his values and his way of life and he was also a teacher, an amazing teacher who could convey his love of Latin literature and the Roman world to his students and his gift to all of us who were lucky enough to be taught by him is a passion and a love of the ancient world, a love of Latin literature and its messages and its beauty. Bernie's probably very well known for the work that he's done with sport and the development of sport in the university. He was fundamental in the development of the forum and the naming of the forum, again going back to his classical love of the classics, his classical era and as well as that, Bernie also helped develop the myriad of sporting associations that the university has. His particular passion was rugby and the University's Rugby Club and I think we can all understand how tolerant Mary must have been during those times when Bernie had other things sporting like on his mind. So Bernie was a great person, I'm very proud to have worked with Bernie over seven years and I really cherished the friendship that we were able to establish. He loved his family, he loved the university, he cared deeply for his friends and like many people I miss him. The Broadmeadow Rail project meant everything to Bernie. Bernie's impact on the Broadmeadow project was that he was able to go and speak to people, open doors, he was able to take the presentations that we had done to people and discuss them with them on a level that only Bernie could do. Bernie was the linchpin for the whole of the project as far as being able to bring people together and that was his great strength. Bernie was the founding warden of Everett House and I was lucky enough to live at Everett when it was first established so for four of Bernie's seven years as warden, the university couldn't have picked a better person to lead Everett House at that time. Bernie was warm, approachable, kind, caring, very much a father figure and a mentor to all of these kids moving to Newcastle from the country first time out of home and Bernie just had enough of Country Larriken in him I guess as well to take everybody under his wing and really establish the traditions and the spirit and the pride in Everett that still exists there today. He's made a huge impact pretty much on everyone he met he had an impact but for me personally I think it's around how to treat people and the importance of really getting to know someone and to treat everyone with that respect and interesting and give your time. He was so generous in his time and I think in terms of the university the impact he gave on thousands of students and was able to help them through various things from the sporting field to accommodation to a scholarship to study at the university he had an incredible impact on so many people. Bernie started the scholarship scheme at Hunter Valley Grammar School which is quite unique I think for high school to provide scholarships for their students leaving the school so it's primarily to assist those entering into the next stage mostly at university so he was the instigator of that it still goes today we have a number of sponsors and the school themselves provide support for students in that regard. In terms of rugby I've known Bernie for a bit over 20 years I think around that and there are many people have known him well before that and he stage at rugby here but he was a player then a captain then a coach a president of the club and all sorts of other roles and then patron so it was so appropriate that the field is named after him. I think that first experience brokered by by Bernie with with a donor just helped me to realise how transformative and powerful it is to work with philanthropists and how important the quests and donations can be to our workers researchers and clinicians and to do our jobs and so I've since been a beneficiary of the Braun Fellowship which is so critical in helping me build a team now of people and researchers who are all working really hard to address depression and anxiety and substance use in our society and we just couldn't do it without that sort of support without that connection without those relationships. I think connection is key to everything that we do whether you're talking about connectedness to the natural world whether you're connectedness to your family connectedness with your friends I think that's the ultimate source of strength and that on the basis of that connectedness you have a better view of the world a better understanding of the world a connect is made up of two words nectar to bind con neck is to bind together so it's a binding together of people through natural interests through courses with its sport and getting people to connect people connected the easiest word in the language is community it's the easiest word the hardest thing is building community and that's one of the things that I've tried to do through classics department through university sport through community relations through alumni relations and essentially with the fundraising arm of the university to connect and build community


All right, it looks like it's time. Hi, everybody. I see a few familiar faces from the Four Kitchens booth. If you've come by and seen the watercolor painting robot, you'll learn just a little bit more about some of what makes that work today. Looks like we've got a few more rolling in. In the words of my incredibly smart co-workers, we should not punish the punctual. So I'll just go ahead and get started. Here's my slide button. This will work. Welcome, everybody. My name is James Todd. I'm a developer and engineer at Four Kitchens. You can find me on GitHub at Tech Ninja, or on Twitter at Tech Ninja 42. Feel free to tweet all about this. I have been dribbling for over 10 years, and I recently transitioned from contracting to full-time at Four Kitchens, and I haven't looked back. In my free time, I toured Bad Camp, Maker Faire, and the world with my eldest progeny, working to get girls and kids into STEAM and programming through community outreach. In addition to this and other work, I support and maintain two fully open-source electron application projects. Oh, I also put another one in there. I'm also a co-author for an exciting series of Arduino programming books for kids. And I also support and maintain two open-source programs for in-electron called RoboPaint and Pancake Painter, both of which you can come down and see demos of at the Four Kitchens booth. So, let's get into it. For those just starting out or not well-versed in how JavaScript development goes, don't worry. Even though I'm going to cover a whole lot in the next 45 minutes or so, I've built in plenty of time at the end for questions or comments or anything else that you are curious about, or even stuff I didn't entirely talk about. So, just hold your questions to the end and everything will be great. Thank you. All right, so quick, just a little term reference for anyone who doesn't know about some of this stuff. We'll just kind of go over what some of these things are about. If you want, you can take pictures of these and reference them. So, JavaScript, this is the programming language originally created for web browsers back in the day and in use around the world. Node.js, this is a JavaScript build for servers or regular computers, and it now runs many popular sites and services you may have used. NPM, this is the Node package manager for Node.js. It lets you download modules and libraries by name that let you extend functionality. So, other people write libraries and stuff and then you can download them and use them immediately. An API, when we say API, we mean it is an interface written to let programs do something with it. A programmer will make something and then you can program with it. Restful, this stands for representational state transfer and in general it's used to reference when you have a standard for running APIs over the web. If you visit a website, you've used it. And then we have the DOM or the document object model for web page elements. If you think of HTML tags and other low level data attached to them on a web page, that's what that is. We have React. This is a popular Facebook framework created for component-based user interfaces and holding on to state, which state is where you hold on to information and then see where it changes. Express is a very popular Node.js web server and Restful API router. If you wanna host an API or a web application on Node.js, it's a popular option. Headless, if you're running a system or service, it's headless, that means that you're running the backend without directly connected front-end. This is a very popular thing to do with Drupal these days. All right, so what is this Electron thing? We have a quick show of hands. Who knows about what Electron has seen it? Look at that, get you guys. This'll be easy. So in simple terms, Electron is basically a slimmed down version of Chrome that's yours to customize to your web and make pretty much anything with. Using its world-class HTML and style sheet renderer combined with the power of Node.js. More technically, it's a shell, an API layer on top of Chromium, the open source base for Google's Chrome web browser, that also happens to contain V8, the engine that runs Node.js. This means that basically every web application or site that runs in Chrome can run in Electron and JavaScript code running within it has access to the full Node.js API, allowing you to build Node.js applications using modules, using Require, installed by NPM or Yarn, while still using native document object model and window-based interface that you're used to working with in a browser. It is the best of both worlds and in one easy-to-install package, and it rocks. It builds for Windows, Mac, and Linux natively. Every system Chromium has a build for, which can include things that don't exist just yet, and includes a huge variety of APIs and native OS-specific dialogues and notifications and a whole heck of a lot more. Different than other Node and browser shell implementations like NW.js, Electron uses a main process and a renderer process. Using these two separate processes, it allows you to run your app and entirely window-less if you want to, and be able to control browser crashes or other low-level configuration while remaining multiprocess and extremely quick. On multiprocess machines, this is a huge boon. Using Electron makes development a snap with a single JavaScript code base for all systems for your application. You can implement with any of the common frameworks or libraries already used in millions of sites across the web for client-side, and you can quickly debug style sheets, screen drawing updates, network connectivity, and tons more with the debug tools you're already used to inside of Chrome. And after the initial application download, local files are network-agnostic so your app can be used completely offline as long as it's written to do so. So who is using Electron out there in the world right now to ship modern native desktop applications? Here's one. Electron's backing by GitHub and subsequent dogfooding in their flagship text editor, Atom, means they've fully committed to its support and rapid development over the past four years. A bit little by some devs who find its memory consumption at startup time a little bit much. Thanks to its web standards, UI, and Node.js backing, it's garnered a huge following and over 5,000 published extension packages to improve or augment its functionality and over one million active monthly users to date. As long as Atom continues to thrive in its community, Electron itself will continue to gain quick fixes and updates as both Chromium and Node.js communities use cases grow. It is really awesome. If you haven't tried it, you should definitely give it a try, totally free. And then spurred on by movement to have an uncolored space for writing WordPress Maker Automatic recently released a WordPress desktop, a dedicated interface for managing content and writing posts, calling it a seamless cross-platform experience that allows you to focus on your content design with no browser tab to distract you. By using Electron, a small team of two to four developers were able to leverage other teams' efforts in implementing React and Calypso to build the desktop app in just a couple of months. It really is that easy. Microsoft's recent expansion into open source includes one of their latest forays into web and code development with Visual Studio Code. Another code editor, but with their own Visual Studio Spin, you can run code natively, do debugging on the fly and integrate with other systems and run times like PHP. It's noticeably different than Atom and definitely worth a try if you're in the mood to experiment and see what Microsoft has been up to with open source. I've actually talked with the development team on this and they're really dedicated to it. They're gonna be continuously updating it and it really is worth a try. There's also a ton of other ones from smaller companies and Slack. You might have used that one. But you don't have to take my word for it. Go ahead, go to electron.atom.io slash apps and check out the other tools and experiments available there. And if you make an app, you can submit it and it'll show up on that list. So, when in Rome, making your sleek, powerful web app into a desktop application may seem simple, fun and amazing, and you'd be right. But it doesn't necessarily mean you should do it. Ask yourself a few questions before nosing into the deep end of desktop development as the application boomerang makes its turnaround from the web back to desktop. Are you writing it for the right reasons? Just a few weeks ago, a post from October, 2016 came across Hacker News by noted developer Joseph Gentle. It titled, Electron is Flash for the Desktop. An incendiary title and post, a deriding memory and CPU usage in Slack and accusing electron developers as being lazy for packing together an entire web browser along with their application. This soon sparked literally thousands of comments across both Hacker News and Reddit. Some agreed with them and others rallied against the ideas presented and the rest were either indifferent or rallied in defense of individual applications and developers' needs or choices in the matter. Policy bets, big league hacker for the Slack Electron app and maintainer for a number of electron tools and modules soon had the top comment on Hacker News, stating simply that it's delusional to think the same effort could be spent to build the exact same apps that are being built for Electron. These apps simply wouldn't exist at all in the existing technology for building native cross-platform desktop apps without that electron without that. Possibly requiring 10 times the resources to build and support, sorry. My throat's a little dry, sorry. This is not the end of the conversation, of course. I implore everyone to do their own due diligence and look into these comment threads in original post for useful information before diving in and signing the contracts on your next project. If you need to make a desktop app, there are definitely other options and with their own pros and cons. I will say that you're unlikely to find such an incredible breadth of community and resources than those available to Electron right now and in the near future. I have water now, thank you. We can do this. But first, before going headlong into a project, ask yourself these few questions. Can your app run offline reliably? Many desktop apps are expected to with the obvious accession of chat or other social media or internet centric apps. You need to consider some semblance of offline mode or app usage just as with mobile apps. You may need to queue something, you may need to access some form of API or authentication. Gotta think about it. Can you meet the needs of your users with a clean application update path and installation support? These are often completely new avenues for most users as application install can get messy. And even if it works 99% of the time, you still have fringe users with strange configuration issues on weird or old machines. Chromium does not support every single operating system. That is important. Can your users get enough benefit from the added download and runtime aspects? Electron can be spelt if you write it that way, but it takes effort to keep processor and memory usage down. And will the app bring enough value to a user to benefit not just having another web app? These are all things to take into account, but it needs to be noted. Some aspects of Electron are impossible to find elsewhere. Do you need to run low-level native functionality like reading or writing very large files or listing files locally on a hard drive? Hardware access, running native C libraries, not usually found in the current or near future web APIs? Complex image or video processing by GPU access with upload times or running expensive servers are not possible. Do you need to quickly port a node or node-only server or other application for simple client-side use? As a web app with access to a whole computer, you have the ability to run servers, compile node libraries, and a whole lot more. Do you need more multi-processing power with DOM access? Using Electron's WebView Abstraction, which we'll talk about in just a minute, you can have the power of an entirely separate Chromium process at your disposal with optional node support to use within your shared code base. Using IPC for communication, you can orchestrate incredibly efficient and fast user interfaces that asynchronously process and display data. And if you're still in the fence and you're worried about the cons or future possibilities, just give it a go. Because of the shared technology stack along with everything else on the entire pipeline, I encourage any curious developer just to give it a try. So many parts of the process are similar to existing ones, and there are so many helpful resources available that you too could have an Electron app up and running in a day. Or even before the end of this session. Long-term user support and release infrastructure be damned if all you need to do is see if your idea is possible. Not to mention developing with Electron can be just plain fun. So in the words of the great poet, ship stuff every day, or something like that. In the next section here, I'll show you a little about what I ship on the weekends in Electron. Should help you give you a little background on what a single developer can accomplish given a little time. As I said in my introduction, I personally maintain two open source Electron projects in my spare time. I've been the sole developer from the start and have been learning to get a bit better at everything by simply doing. I'm not 100% up to snuff on ES6, nor am I utilizing the best and greatest frameworks, but I am shipping real applications to hundreds of users around the world, and I think that counts for a bit. Going from Drupal and PHP development to JavaScript has been a long learning process for me, but I find that using Electron removes a ton of barriers for entry and allows me to experiment in a solid and reliable environment and allow for quick turnaround time. My first project, RoboPaint, started back in 2013. It's an experiment to try and drive my eldest child's watercolor bot project using JS and low level serial port communications in straight node JS. Originally created as the CNC server project using a simple express server, hosting web pages to load SVG files and parse them in a complimentary restful API abstraction to make talking to drawing robots easier. This exposes a simple set of drawing endpoints and manages queuing and buffering stateless commands against an inherently stateful physical robot over serial. This sounds pretty complicated. Oh, but it is, yeah. The end result is a simple to use drawing API that allows for color tool changes and compression buffering to allow seamless and fast drawing on robots from pretty much anywhere. And you can see a live demo of this over at the Four Kitchens booth. Due to a strange series of events, we ended up at the White House Science Fair and using the CNC server API running on a Raspberry Pi. I managed to cobble together in a few short weeks a live demo allowing President Barack Obama to draw Go STEM through an iPad app. Upon returning, we ran a successful Kickstarter to release the robot as a kit and I decided to release the script as a simple to install desktop applications for users via Node WebKit. In 2015, we switched over to Electron and we have not looked back. Thanks to Adam and other big name projects supporting it, the community behind Electron ensures that bugs that come downstream from Chromium are squashed quickly and features and fixes come in nearly weekly releases. The RoboPane application runs far, far faster and allows for really incredible multi-process support. So all of it has benefited users incredibly. One additional awesome feature I love about Electron which I mentioned earlier is the WebView tag. It's basically like your own little cloned Electron Sandbox iFrame. By simply embedding a tag in the window HTML with the source of another page, Electron manages running whatever code is given for the HTML in a new Electron process which you can send messages to and from via Electron. Electron's built-in inter-process communication or IPC modules. You can also attach a preload script to this optionally load node modules or run arbitrary code, transparently into the global scope for the WebView. I should have had more water today. This is the basis for drawing modes in RoboPane. The main application manages the connection to the robot and some basic API wrappers for modes and then modes are their own node projects stored on NPM. You just do NPM, install, Electron, mode, edit. And there it is. These are loaded dynamically from the node modules folder based on a few specific keys in the node module package.json. Each mode is its own application, running its own code, but simply interacting with RoboPane SVG input-output interface or through direct robot control. One second. Thank you, Randy.  What would I do with that? Yay!  This all leverages the incredible extensibility WebView provides and allows the main window process to run seamlessly even when the mode uses 100% of its own available CPU usage on multi-core machines. We have the watercolor bot running over at the four kits booth, as I mentioned before, so you can come by and check it out. It just so happens that the Slack application uses WebViews in the exact same way to sandbox different organizations within the application. And they have a great blog post on how they're working to keep memory usage down for power users as running these separate processes can get a little heavy with so many DOM operations running at the same time. Water saved me. My second open source electron app is Pancake Painter, a simple purpose built drawing import-export program for the pancake bot. The world's first open source commercial pancake printing machine. We were hoping to have this down at the booth, but getting the pancake batter was tricky. That would have been fun. Back in August of 2015, the creator, Miguel Bones, Waila, contacted me out of the blue and asked if I would build a desktop software and after seeing my work on RoboPaint. I said sure, and we worked out a base set of features in a week, and in about a month, I was able to build the entire app from scratch, from drawing, file format, saving, settings, menu, and everything. It's open source from the start. I created and managed everything through issue queues on GitHub, and you can trace every step of the applications for my commits and pull requests. Hopefully that'll help somebody. The app itself strives for simplicity, allowing users to directly control where batter should be placed in lines or fills for the notably difficult work of printing multi-shade pancake art with real batter. It uses the incredible open source vector drawing library. I know I'm not a very good artist. I should have done better with that. I just did it quick. It uses the incredible drawing library, paper.js for path drawing, breakdown of the drawing into G-code, editing, layering, interface tooling, file type export, complex path Booleans, and a bunch of other stuff. Paper.js is pretty darn amazing. You should go check it out. The app granted me the top red AMA on the 1st of January this year, and I hope in answering the hundreds of questions that there have, I hope to have inspired other junior developers out there who need to worry. I'm not sure what I wrote here. This is strange. Doesn't matter. It's more important to try and build something, an experiment, than to worry about making it exactly right. Give it a try, experiment. All that is really important, and I try and get that across. Back in February this year, we released a new feature to allow automatic tracing of almost any input image into something printable as a pancake. You can see here by simply picking a raster image with a complexity preset. You can quickly make adjustments and render vector strokes and fills optimized for creating pancakes. All fluid user interface elements use Flexbox for positioning and sizing, and all UI animations and blur are powered by style sheets directly. Isn't that awesome? That's cool. This leverages an open source C++ application auto trace, pre-compiled for all release systems individually to take formatted images and output SVG artwork via the command line 10 to 100 times faster than equivalent JavaScript code could accomplish. Electron makes the seemingly impossible or just downright difficult requirements like these not only possible to implement, but simple enough for a single developer to handle and ship in mere months. Well, in some circumstances anyway. So creating your first application project is easier than you think. What skills might you need to dabble in Electron? Electron bases a lot of its logic and configuration in JavaScript, but you likely can get by with a working example applications and simply add your own HTML and style sheets for starters. The rest of what you need are a few simple terminal commands with simple arguments. A more complete working knowledge of the incredibly popular Node.js and its packet management ecosystem will undoubtedly benefit you. But if this is your first foray into JavaScript, you likely won't get too lost as long as you know the basics of how browsers, HTML and CSS work together. So let's go ahead and take a look. Before we begin, make sure your operating system meets the minimum system requirements for Electron. And then make sure you have Node.js and NPM installed. Go to Node.js.org and download the installer. Fresh working directory to save files in. Terminal and command line access to that directory. And lastly, bring your working knowledge of the web and it'll all start to make sense. I mean it. Bless you. For development, you'll need just three files. Package.json, main.js and index.html. Create the files locally in your projects directory. And this will be handed to Electron when you start the app and it'll do the rest. Now let's look at the base minimum content of these files. Yes, I can show it. First one up, package.json. A simple JavaScript object notation file for the top level metadata and configuration for storage. You can have a lot more fields than this, but they're not directly needed. This is the standard Node projects syntax. Name your app and reference your main application.js file with all the dependencies. Just make sure to include the Electron package itself and this will ensure when installed on different operating systems, it'll start natively and with the correct version during development. Note we also have a start script defined that will utilize our NPM installed Electron binary to execute the app for us. Very simple. Next up, a little more in the main.js file. This code is the main process that always runs as long as our app is and creates our very first window. Here we define the initialization code and create and manage our windows and renderer processes. We only have one here. This code simply says that when the main process is ready, a window at a given size, 800 by 600 pixels will be created and then it will load our next file, indexed on HTML. The standard HTML and JS rendered in its own process separate from the main inside its own window. Whatever JS runs here can access the main process variables via a shared IPC interface and it can access all of the page DOM, low-level Node APIs and modules and Electron's native APIs that are specific to each operating system. Behold the all-powerful Electron. Now we switch over to the terminal, go to the application directory and just run npm install. With a decent internet connection and a smidgen or two of patience, this will install the correct Electron binary we defined in the package.json dev dependencies and any other dependencies we had in there. With that done, we can now run npm start. What? npm start. This will run the script defined in the package.json under start, which will run the Electron binary downloaded against the dot directory, otherwise known as the current directory. It's gonna play again, it's fine. Your pinned Electron version will execute the main JS, initialize the window and ta-da! You'll see this message or you should. Now you have the power of the universe in your hands, close to it anyway. So to shortcut all of this, to not have to copy down any of those files and stuff, just go ahead and clone this repository, follow the eerily similar instructions in the readme and you'll be running in no time. Did you get your picture? Got it, okay, good.  And since you can use both in browser and node-based code, almost everything in the npm library just works. There's also a growing list of contributed modules to aid in the duality that Electron inhabits to make the development of Electron applications even easier. Yes, you can use jQuery if you want to. One of the greatest benefits of Electron is the powerful native APIs available. Everything from screen capture to custom dynamic windows, progress indicators, tree notifications, Mac, touch bar support, now in beta and tons more are available. Check out the API example app from the Electron homepage for an awesome demo of almost everything that Electron can do for a given OS. So you'll have to try it on different computers and you'll get different results. Now let's get into something a little more real, integration with a real life Drupal application. We are a DrupalCon, aren't we? Let's get it done. As quick aside, during my research for this session I found a project by incredibly enterprising developer, Sean Bousquet, who managed to figure out how to run Drupal directly inside of Electron using a portable PHP binary in Drupal 8. He stated that while this is technically possible, Drupal was really made for running on a PHP server deployed to the web and doesn't really lend itself well to the experience. Sean recommends running headless Drupal and interfacing with it via the Drupal API as we do here. Big thanks to some great work from infinite Luke Harrington and the Four Kitchens training team, members, thank you guys, for their Drupal 8 training and React to DoList application they held on Monday. I can show you how you can easily leverage an existing web application into Electron and use local resources to connect to remote Drupal data stores and APIs to keep app users up-to-date. Thank you, Randy. Take one for the team. Yeah, I was gonna say, this is just gonna keep going. All right, for those not in the know, Drupal 8 has been built from the ground up with external applications in mind containing a RESTful web API that allows for authentication of remote administration of entities and content with every site on it that's enabled. If you only run Drupal for content management and storage, not displaying or theming its content, directly it's referred to as headless or bodyless or decoupled, there's a bunch of names for it. Just to give you an idea of how popular this powerful method is becoming, just check out how many sessions at DrupalCon this year there are surrounding the topic. Every single one of these, it's incredible. If you go to these slides after I'm done, these are all links, so you can go directly to them and see the videos. This gives every properly configured Drupal 8 site the keys to allow a mobile external application, the ability to display or input content or data directly into your site. And with the waterwheel module installed on your Drupal 8 site, you can use the waterwheel JavaScript API to interact with your content in a more abstracted and cleaner way. With these abstractions and data separation, you can use React or something similar to that to control the display and distribution of content and let Drupal worry about the architecture, taxonomies and content administration. In case the idea is new, do you encourage everyone to learn more about how this distributed model is growing in efficiency, popularity and commonality? Check out some of these. Onto the demo. Now I've taken the waterwheel training application and simply built out a basic main.js wrapper. This is just an excerpt of it. Built off the Electron quick start example, given earlier, to launch a window from the index.html in the build directory and a little code to manage closing the app if the window is closed, something you'd likely not do on a Mac in a final application. There's a little bit more code you need for that but you'll see it in the example application. Next up, the package.json points to the js file and our index.html that we expect to load. And we had a specific line in the package.json for starting the app via Electron. As we did in the minimum example, including Electron as a dependency means it will download it just as we did for our minimum. Build of the application is running in for development. It's simple, using npm, we download the dependencies and when that finishes, when that finishes? Yeah, there's lots of stuff to get. I actually, I did actually use, I originally used yarn on this and it just, it died when it got to Electron. I think there may be something up with that. I'm not totally sure, but it took actually a lot longer. This part was faster though. I think this is the point at which we grab our swords and practice fencing and the hallways, no? Good piling. Oh, this isn't necessarily piling. Wow, that is long, isn't it? This is actually part of the joke. This is all prerecorded, so we don't need to watch this. I mean, we can if we want to. But man, I don't remember it being that, I don't know, whatever. Moving on, when finally done, we build the app with npm run build. This creates all the files in one place ready to be displayed by Electron. We wait for that to finish and then we run the application via npm start. This will launch Electron, pointing to our application directory just as we did with the minimum example. Am I actually gonna let it finish? Do I care? I don't care. Now that the Electron has been loaded up, I can log in with my Drupal test credentials and the app will load. I would data directly from the Drupal 8 site. I can see other to-do items on the list, give a thumbs up or even create brand new items. Each to-do item here is a node on the site and each thumbs up is also a node that references the to-do item for each node. From here, we could add operating system notifications to event triggers to to-do item event schedules, registering the app to run a startup window list and an operating system tray or add a whole host of other functionality. We now have access to the full Waterwheel API wrapper and through React to read, list, write and update content from our Drupal 8 installation, utilizing the JSON API standard. By default enabled, you can open the full Chromium DevTools and do full application debugging per window. We can run require on the console, pull global variables, mess with CSS, pretty much anything. We can also see network traffic, window drawing information, style sheets and even custom Chromium plugins, which there is one for React which would help you quite a bit. We say, ooh, ah, look at that. Yep, it really is that easy. Combine a mess of open source tools, a little patience and some great app work and you've got yourself a cross-platform desktop application that integrates with your existing platforms or APIs and looks really good while it does it. Be sure to check out the repo for that React training application to get a good idea of how React and the Waterwheel wrapper talk to Drupal and consume data. I seem to have a blank slide. We can just look at those cool design slides, or anything like that. Now, for those looking to ship for real, squirrel. Let's talk about what it's really gonna take to create your app, make it ready for users, get an updates, keep secure and use best practices and how to keep everything in its right place. The one I like trying to app boils down to a simple folder of files. You can't simply hand end users a zip file like this, though it really is all you need to develop from. You're going to need to build releases for all of your supported operating systems to give end users an easy to install single file download that does everything for them. The electron community has put a huge effort into making this as seamless as possible. For Windows, enter the squirrel framework. Squirrel was created to improve the tired, decades-old cliches of software installation on Windows, suggesting a better way forward with their five tenants of good modern software installation given on its readme. Integrating an app to use squirrels should be extremely easy, provide a client API and be developer friendly. Packaging is really easy, can be automated and supports delta update packages. Distributing should be straightforward. Use simple HTTP updates and provide multiple channels a la Chrome dev beta release. Installing should be wizard-free with no UAC dialogues to stop a user, does not require reboot and is .NET framework friendly. And updating in the background doesn't interrupt the user and does not require a reboot. It manages these goals incredibly well and the squirrel.mat counterpart mostly exists to make sure it uses the same update server architecture as the Windows version. If you're curious, Linux releases are expected to take advantage of existing package management systems, so it doesn't, there's not really a component for that. But Windows and Mac are kind of the harder systems to manage there. For building your app on all operating systems, package everything into a release folder using Electron Packager. You just run it on the command line. Then to create the installer for Windows, use the Electron Windows installer module. And with just a few simple command line configuration options, it'll manage signing, packaging, icon association, and creating a single EXE file to install. For Mac, using the module app DMG after packaging and app signing, you can automatically build a mountable DMG image with background and customizable icon positions. It's really cool. For Linux, there's modules for packaging Ubuntu and Debian .deb package files and one for Redhead RPM files. You can include extra information about the package description and company, et cetera, and it will actually show in the package manager. All of these operating systems assume they're being built on the target operating system. So some of these can run in other hosts. Mac builds are very picky about running on non-Mac systems. And parts of Windows builds can happen in Linux. But for the most part, I would recommend, sorry, building on the host system. You're gonna have the smoothest way forward. The good news here is there's plenty of top-notch, continuous integration services available that can run your release builds automatically on each operating system required in the cloud and on demand triggered from your repository updates. It's really cool. When you use your Execute to the Windows installer, they'll see a window centered on their screen that plays a gif while the setup installs. This is the one for the pancake painter. I actually contacted the guy on Reddit that made this. I was like, hey, can I use this? He's like, sure, go for it. Endless pancakes. All apps are installed to default user app storage locations so they don't need any dialogues to stop the user. And there's no setup to say where it actually goes to. Some people find this a little strange. So you can, in fact, use another installer. But I find that this is very straightforward. And for 90% of users, they have no problem with it whatsoever. One of the biggest aspects of having an electron app significantly different than a regular web application are offline files. These files sit in the application root directory and are served directly to electron windows and code. They load incredibly fast, but at a cost. They're not live on your server. This means your releases are locked in to whatever version a user last downloaded. In the land of web apps, this is a bit uncommon. With users expected to be downloading the resources on every visit to a website. In another way, this ensures your apps are at a given build at that version will be 100% guaranteed to work as expected for that version. So bugs or features, all of those things work. Assuming your external APIs are well-versioned and you have long-term support setup for them. On the other hand, it means that a user doesn't have the latest version and they're going to need to download an entirely new build and be notified when that new version even exists. Electron contains embedded module support for leveraging the squirrel automatic updates. With a little implementation, it allows your app to get notifications from a release server, download them in the background and then run the application from new files at start. To do this, here's a little course on it. Using the auto update module, you can connect to a release server on startup and check for updates. This requires a third-party server running on your own domain. But as long as it supports the squirrel framework standard, your setup is pretty straightforward. At the time of writing, the top two projects for this are Nuts and Electron Release Server. And there's some of the great features they include. With release server managing and getting update files from your correctly configured Electron app, all that remains is to implement autoupdater.check for updates and autoupdater.quit and install. Check the Electron API demo application for a complete autoupdater implementation to model your own Electron app. It is very, very cool. Next up, security and sandboxes. As a desktop application developer, you must both ensure that your code is safe and that external applications can't simply take advantage of your app, either outside or from within. To allow JavaScript within V8 to access window DOM data, node APIs, and OS interaction APIs, the protective sandbox that surrounds each renderer when acting as a web browser has been disabled. This is what makes powerful applications in Electron possible, but it opens the door to attacks. If you directly load external resources into these environments, imagine a chat application that doesn't properly scrub JavaScript tags and allows for arbitrary code execution. A successful cross-site scripting attack like this could trivially take over a user's host machine and cause untold damage. It is, it's dangerous. Thanks to some great work by the community though, as of version 1.1.1, you have some great tools to your disposal for dealing with external content. Node integration for entire windows and web view tags can be completely disabled so that you can have a safe place to display external content if you need to. Windows without node integration now cannot use web view tags because they are capable of running node code. And with node integration disabled, limited sandboxing is actually re-enabled for that. What's generally recommended, of course, is that if you need to display user content, always ensure it's being cross-site scripting sanitized before writing it to the DOM. The same, of course, always applies to content being entered into your app, passed through the API or otherwise. The rules don't change much for Electron when it comes to little Bobby Tables putting his name in the system. Always sanitize your data inputs. OXKCD, you slay me. As with many other applications, always be aware of user input getting into other users of your own servers. Always sanitize user data on input and output to prevent SQL injection or XSS. Prevent file bombs by having sane limits and restrictions on file types by MIME type. If at all possible, only ever load local HTML and JS and CSS resources in your Electron app directly. Restricting external interaction to scope limited APIs. And if you need to display externally hosted content, limit direct interaction and always disable node integration. Finally, if you want to know when problems happen on your apps or out in the wild, you're gonna want them to call home and say what happened. Electron comes with a built-in crash reporter module seen in here in the base minimum example code needed to initiate it. It makes a post to the server, given your submit URL with the full crash report and system information. It uses Google's breakpad format so you'll need a server like Mozilla's Sakura or Electron, or the Electron project supported mini breakpad server to send reports to.  But if someone handed you everything you needed to know, where would the fun be in learning and exploring on your own? I think some of the most important things you can take away from this session are that Electron is an incredibly active and constantly evolving project and it's still somewhat new. Chromium has been around the block, but new web technologies, build systems, and commercial use cases ensure it's constantly on the move. Electron is not always the right solution for an app. Of course, neither is Drupal sometimes. Do the research and experiment a bit and see if it's right for you. And when in doubt, just give it a try. The barrier for entry is incredibly small to get started and there's a ton of great tools in the community has made for making the rest of the work really a lot easier. Electron is incredibly powerful and has been used to ship thousands of awesome projects to users around the world. Though it's still young, it's got the chops for making real apps for users today. Thank you. And now, and now it's time, we're ready for questions from the audience. If you got something? Yeah. So in my use case, I've got a POS to be built with the need possibly for offline caching and handling. Obviously in that case, we'll be doing credit card transactions but cash transactions and the like. Is Electron a good fit for that? It could be. How does it handle it? Yeah, if you have an API that you're accessing, well, okay, so for credit card transactions you definitely do need to be connected but for cash transactions, you could probably buffer those somewhere, hold on to them as, you could probably even write them as files and then pull them back in. Just in case you've lost power or something like that, you don't want to just store those in memory. That might be bad. So you just hold on to them until you get service again. There's a couple modules out there. I'm not sure the name right now but there are some that you can get and they actually manage this for you so that you don't lose any of your data. Another great thing about Electron is that you have full access to its standardized web database and web storage so you can actually store data directly in it and it will manage writing that to files and ensuring that that stays with it so that when you reopen, I actually use that for configuration storage on both my applications. That's awesome, thank you. Oh, you're welcome. Can you speak about packaging Electron apps on Windows and Mac specifically? You mentioned CI. That's usually Linux but Mac and Windows, how do you do this? There are actually, is it back? Okay, that's good. There are actually CI systems that will allow you to boot up a Windows server or even a Mac server to be able to build natively on those systems. Yeah, can you name some? Like cloud providers, cloud CI systems? I know, yeah, CircleCI is pretty good. Does Windows and Mac? I think they have Mac and Windows and I believe that, what's the one with the mustache? Isn't that one? I've forgotten. It's the one that GitHub usually suggests. There's a number of them out there. I think a few quick Google searches. Travis, what's that? Travis with the mustache. It might have been Travis. I'm not sure actually. Yeah, Travis does Mac only. Windows is really. Mac only, they don't have Windows? Yeah, Windows is really hard to find so I'm really surprised. There are a few. The neat thing about Windows is that it's a little bit less picky for building. I know that I've done Windows builds on Linux before but there are certain parts that you need wine running in the background so that it can go and run a couple native Windows applications but the fact is that there is some things for that. I have not found very good support for writing DMGs on Linux. Yeah, that can be kind of tricky. Thank you. Are you welcome? Hey, thanks for the talk. Of course. My question is really kind of about packaging also as well across the different host OSes so I know in your talk you mentioned a little bit about how one of the closed buttons actually there was some conditional code that of course on a Mac it probably wouldn't actually close the application whereas Windows it probably would. So does the Electron app kind of like the APIs handle a lot of that functionality so it just takes lack for example, notifications would I be doing some kind of conditional code there just to kind of handle the different operating systems or does that do a lot of the heavy lifting with it with the core? Incredibly simple to check the operating system just like you do in Node you can say process.system and it'll tell you whether it's Darwin or whether it's Linux or whether it's Windows and you can simply put it the actual amount of code for that is tiny, it's very, very small and you can simply say if this is a Mac don't close everything, don't kill the process otherwise just exit out of everything. Gotcha so really it's kind of like fringe cases that you're really going to be doing conditional code? Yeah and there really are very few of them I've had to write very a couple in the applications and the applications are really pretty big there's a few more surrounding menus as the menu structure is something that it does fully support I didn't really talk a lot about it but you can set up different menus for different operating systems and have those be there. Another thing I didn't talk about is translations which you need to ensure that are part of that but actually RoboPaint has full translations for all of those using I18N, oh that's not what you asked I'm sorry, anyway, yeah. Well thank you, appreciate it. You're welcome. For something like your Pancake Maker how do you call the Pancake Maker from your Electron app? Are you posting like interfaces or? So the RoboPaint the first application has a direct connection with the robot we actually use a project called Node Serial Port which has a compiled aspect for it that actually has a low level controller to go talk to the serial port because it's different on both operating systems. For Pancake Painter it turns out that they wanted something a little simpler for home users so we just write the files directly so we create the gcode files that it needs and then people put those on SD cards so there is actually no direct connection but the RoboPaint does have that. All right, thanks, you're welcome. If I have a offline or a website that's capable of being pulled up offline and I wanna package that up into an electron application but I'd like to use an alternative backing store how would I do that in a way that doesn't add too many lines that is shared with the web client that's completely useless? You should be able to run most of the code. It kind of depends. I mean, there's a lot of ways to store data. Depends on exactly what you've got. Yeah, what, you got an idea? SQLite, which is... Right, not necessarily which backing store, any DB, like which backing store I use but rather alternating what I use so if I'm using local storage on the web but for my electron application I wanna use an actual file to store it, such as SQLite, how would you suggest switching that within the electron application without too much shared code basically? There is a possibility that you could run something locally that mirrors the exact same API that it uses to be able to go and do those communications. I'm not totally sure but you might have to write something custom for that. There might be something that exists. It is a fairly specific thing but I mean, yeah, there might be something that exists out there for it. Electron lets you do almost anything. All right, thanks. Sure. James, do you need any more water? I'm thinking about it. Okay, just let me know. Thinking about it. Thank you, Randy. Thank you, Randy. Another question that one of my coworkers actually asked was what version of Node.js is shipped with Electron? And the answer to that one is actually whatever version is about a month behind. If you check the release notes for Electron when you go in, you can see they actually pin it to a version of Node.js and a version of Chromium. I'll let you do pretty much anything with it. If that's all the questions, then thank you, everybody. Woo-hoo! Here it is for Contribution Sprints. What'd you think? Two minutes early. You like it, guys? My pie. That was awesome. And the timing was good, too. Is the water wheel example online? Is it open source to one? The to-do app. Is it all open source? No, the to-do app. Oh, the to-do app. The React to Do app is the Electron version is not, but believe it or not, the only changes I needed to make were the ones I showed on screen. Okay, thanks. Oh, yeah, I can totally release it. Yeah. Thank you. You're welcome.  And then they changed it, and then they did it again like three days later, they were able to crack it, but that was the first time I ever installed one, and I was like, oh, this is convenient as hell, because I'm not gonna make it just like that otherwise. Thank you. Appreciate it. Vector, like, a more generic.


Let's go to the girls side. Bemidji back at home against Crookston. First period, Pirates trying to strike first, but Brooklyn Delap is there to make the save.  Maggie Markott, top shelf back hander about a minute into the second. Then later, it's Lexi Lightner. She's gonna squeeze it home. That'll close out the frame. Two-nothing Bemidji after that. That would end up being your final score. Lumberjacks, their second win of the year. If you've enjoyed this segment of Lakeland News, please consider making a tax deductible contribution to Lakeland Public Television.


Okay, let's do our best to stay on time tonight. And let's wrap up tonight talking about potager gardens. I must confess, I've never heard of that term before, but so I'm really interested in this situation here. These gardens use design elements and companion plants to create areas that are both beautiful and produce delicious vegetables. So here to provide some tips on this type of garden is Carrie Knudsen. She's the horticulture agent in Grand Forks County. Carrie's been with NDSU Extension for 14 years and plants and gardening are her passion. And she provides garden related programming to a wide variety of audiences. Her favorite programs are youth gardens and then going out to house calls to help her county residents figure out the horticulture problems. So Carrie, welcome to the forums. All right, thank you, Tom, and good evening, everyone. I must admit, like Tom, when I first heard about potager gardens, I was interested in them trying to, wanting to learn more about them. And it was actually my master gardeners that introduced the topic to me. So I'm kind of doing this presentation for some selfish reasons. I wanted to learn about the topic as well. And if you were on the webinars last week, John talked about creating diversity in the soil. So this evening, we're going to talk about creating diversity above the ground. We're going to go through some background information on potager gardens. That is as close as I'm going to get to the French pronunciation. Sometimes English pronunciation, we do say potage gardens or potager gardens. We're going to discuss some design principles you can incorporate into your current garden design. We're going to go through some different planting options and some companion planting ideas to help you get the most out of your garden and create that biodiversity. So potager is a French word based on potage, which means soup of broth with vegetables. So a potager garden is simply just a vegetable garden. They are year-round kitchen gardens whose sole purpose is to supply the kitchen with produce. Usually a potager garden has herbs, vegetables and flowers and fruit trees, all within a structured plan based on repetitive geometric designs. Potager gardens go way back into ancient Rome, Greece, Egypt, and they stretch into the Middle Ages in the walls of medieval monasteries. These cultural outposts were small, isolated and mostly self-sufficient. Within the monasteries, the monks tended fruits and vegetable gardens that were laid out in geometric forms. The beds were usually clustered in symmetrical groups intended by hand so the plots were small. During the Renaissance, French landscapes were reconfigured into large-scale geometric gardens based on the monks' designs, but these gardens were designed to be seen as an extension of the house and divided into rooms connected with paved paths. The rooms were kitchen gardens, orchards, green spaces and mazes. Along with literature and clothing, the French took food in the kitchen gardens to new heights of complexity and extravagance. As seen in this picture here, these are the kitchen gardens at the Chateau Vélandre and the vegetables were still designed to be used in the kitchen, but they were planted based on their design elements such as color, texture and shape. The good news for us is that we don't have to own a castle or a large estate to incorporate the principles of a potager garden. These gardens, as in the picture you see here, can be extremely informal and they're also very similar to English kitchen gardens or cottage gardens. So as we have seen, potager gardens are not something new. However, the design principles were lost as the early American gardens and gardeners basically treated their gardens like field crops. The settlers depended on large amounts of produce for fresh fruits and vegetables during the summertime and also to have enough to preserve and store for their families over winter. So they were seen as more utilitarian in nature and the result was gardening moving away from the beauty and benefit of designs that included diverse plants. Today some of us are still stuck in that rut, myself included, of the traditional garden with straight rows, only one plant in a row and enough space in between the rows to get your weeding done. Now trends are moving back towards kitchen gardens and potager style gardens, creating vegetable gardens that please the eye produce a bountiful harvest and benefit the environment. I love this quote, inspiration is complicity with nature rather than desire to impose order. And it's talking about how to plan a potager garden and it's from kitchen gardens beyond the vegetable patch from the Blocren Botanic Gardens. I think it gives us gardeners permission to get out of our traditional gardening row and then not being so strict in our layout and try something different. So when you're thinking about designing your potager type garden, it should be designed like your favorite room and feel like your favorite chair. You also wanna consider the framework around it. How do you want the garden to feel? What image do you want it to portray? Do you want it to be a more formal type garden or more informal like an English cottage or kitchen garden? Before you start making plans, you need to consider how your new ideas are gonna fit into your existing garden space. The best thing to do is make a map of your garden, draw it out on paper and do a quick site analysis. You wanna consider the views from your windows that you might spend a lot of time by or seating areas in the garden or in your lawn. And don't forget about the views from above, especially if you have a second story house. What do you wanna see maybe from your window when you wake up in the morning? Also think about existing structures, whether it's a fence or a utility building and how that can fit into your design and how you can use microclimates within your yard to your advantage. Maybe you have an area that you've been ignoring that is maybe a little bit hotter and drier and you can find some plants that do well in that area for you. And also if you have an area that's a little cooler and wetter, what plants could you grow in there? You also need to think about how you're gonna maintain your garden and the pathways you'll need for access and just function in your landscape. When thinking about design for a portrait garden, you wanna try to divide your garden space into units or modules. And this allows you to group plants together for better crop rotation. And it also allows you to keep the dimensions smaller. Typically about the dimensions you would use for any raised beds, so about four feet across. So you can easily reach in from the other side and this helps reduce soil compaction or getting muddy feet as you're working in the garden as well. Units are naturally created if you're using a raised bed or if you have a traditional in-ground large vegetable garden bed, you can divide the bed into units or modules with mulch. Repetition can also be used to create a pleasing overall design. The same types of plants can be used multiple times to create unity with color or texture. Consistent use of materials throughout the garden also helps unify the design. For example, if you are have raised beds or are gonna build raised beds, building a lot of wood, maybe using trellising materials that are wood or installing a fence that has wood material. If you want to hide garden structures or there's hardware in your garden that you wanna hide, the best color for it to be is black because it will naturally recede into the background and let the green leaves shine through. We often forget that a garden should have a vertical orientation when we are doing our traditional type gardening. Vertical aspects can be easily added to any garden situation. They can be boundaries such as walls or fences, even fences that are more practical on purpose for keeping pests out. Or you can add a vertical element by using trellises and then having binding plants grow up them. Also consider adding living walls for vertical aspects. You can have deciduous fruit or shrubs or trees that will add the element into your potager garden as well. Don't forget about the doorway to your garden, a gate or even just simply an entrance into your garden sets the first impression for the garden and the tone for the garden. It can be bright or colorful or minimalized and maybe even more metaphorical in nature depending on your situation. Another thing to think about when talking about a potager type garden is the floor. Floors can be informal like your lawn or turf. So if you have different units of your garden throughout your lawn, how are you gonna connect them with your turf? And if you have a larger in-ground bed using mulch, what shape are your pathways gonna be? Pathways can also be more formal and permanent by the use of hardscape materials like rock, bricks or stone. Another design element that is used in potager type gardens is counterpoint. And this requires using contrasting elements or themes to create an overall balanced effect. Use one form and then punctuate it with its exact opposite. So in a potager garden, it's usually, the dilemma is usually to create balance between order and chaos. Usually when we talk about order in a garden, it can be the layout of the beds or the structure of the bed that provides the order and the control and the plants provide the chaotic counterpoint, especially if you have large flowing plants like tomatoes or squash. If you have raised beds or are going to put in raised beds, you'll naturally have the order or control element in the edges. For in-ground beds, you can have, make sure your beds have a good crisp edge, maybe if you use a spade or if you use some other edging material to help you achieve that effect. The opposite can also be done. You can have beds with curved flowing edges and then the plants that we planted in straight rows, the plants would be in uniform size to provide the counterpoint of control. This can also be done with colors. Using one color predominantly with accents of complementary colors or you can plant contrasting colors next to each other. For example, having alternating rows of green and red lettuce or planting yellow flowers with blue flowers. You can also use different plant structures to create counterpoint. You can plant a large leaf zucchini with a smaller leaf silocia or a large leaf cabbage with dahlias. So let's look at a couple of pictures and see if you guys can pull out some of the design elements that are create a portrait type garden. When you look at it, you definitely see the doorway. You see the gate in the wooden fence. You also see the wood in the fence as creates unity with the wood that the raised beds are made out of. There is a very formal hard scape brick path that draws your eye into the garden. And this bed also has a lot of vertical elements in each of the raised beds with the trellis and vines and also in the background with the taller grasses and trees and shrubs. And this next picture I chose to show because it shows the having controlled plants in a garden for counterpoint. This is an aerial view. You can see that the plants they chose in this garden are very similar in leaf shape and size and the bed looks very controlled and orderly. And one last picture in this bed, it showcases the counterpoint of different colors. And you can see the blue trellis and blue trellis materials and the blue flowers. And just at the bottom, just starting to peek out as the counterpoint of red and orange flowers. Other ideas to design a portrait type garden is to simply do as you would any other annual or perennial garden, excuse me, order plants from tallest to shortest. So in the picture, I apologize, the slides kind of got mixed up when it got converted, but in the back are some flowers. In the middle are zucchini and in front is kale. And then you can also use geometry in your planting instead of planting things in the straight rose plants and circles, triangles and swirls. I've seen in the picture on the bottom with the green and red lettuce. All right, let's switch over to companion planting. Companion planting, intercropping or polyculture is a management strategy of planting different crops together. The idea is that planting two more plants together will enhance the growth and quality of nearby plants. The oldest type of companion planting is a three sisters method with corn, squash and beans. Corn is the trellis for beans. Beans give nitrogen to the corn and squash provides ground cover to prevent weed growth. Scientists have found that there are definite benefits to adding diversity to your garden, primarily because certain plants attract and support beneficial insects, which helps control pests and aids in pollination. Also the presence of different plant species growing together can disrupt the ability of pests to find their host plants. Specific plant feeding insects find their hosts by sight and smell and these cues can be disrupted by aromatic or bushy plants. That being said, there is not a perfect companion plant out there that can address all the needs of a given vegetable, a given garden or a given location. Many of the recommendations out there in terms of companion planting are not always tested in a research study but are more anecdotal in nature. Therefore results are gonna vary from gardener to gardener and location to location. There is no harm in growing plants in a companion plant situation. If you planted basil to hopefully deter some insects and it doesn't work, you still have the basil. Unless you planted the basil with not intending to use it, then you're kind of losing your space in the productivity of your garden. So look at the information that I, we're gonna go through here or the information that you find out on the internet as a basis for your own information, for your own experimentation, not as a proven guide to success. As he said, many factors will influence productivity so keep detailed notes from year to year so you can remember what to do. Nature makes no distinction between the plants we grow for food or the plants we grow for beauty. So you as the gardener has to make that decision. When you're planting a garden with companion planting or portrait type elements, your task is to determine the right plants that match together and the right setup for a companion planting. So when you're deciding what to plant next to each other, you should be thinking about plant growth habits. Annual versus perennial, maybe more importantly, spaced requirements, light requirements and nutrient requirements. And also if the plants have an aggressive growth habit or if they're gonna reseed year after year. There are lots of ways to pair plants. You can pair plants using contrasting or complimentary properties. For example, sun loving plants providing shade to shade loving plants. So maybe planting lettuce in the shade of a taller tomato plant in hopes that it gets a little bit cooler temperature and won't bolt during the heat of our summers. You can also plant deep-rooted plants with shallow-rooted plants, slow-going with fast-growing, heavy feeders with light feeders and you can also plant based on an appearance more of a design effect. This year in my gardens, I did a lot of research on this and one thing that I kept finding was the recommendation to plant radish with carrots. The radish plants will germinate quickly and act as a natural thinning agent for the slower to germinate carrots. So I'm kinda interested in trying that out this year and seeing how it works. Now just because you're planting different plants together doesn't mean you can crowd them. The plants are still gonna compete for light, water and nutrients. So you wanna select companion plants that will not be overly competitive with each other and you want to follow at least the minimum space requirements or use the average space requirements if your grouping of plants has different needs. Also keep your family rotations in mind so that you're able to move from unit to unit year after year and not plant the same plants or the same family in the same plot year after year. So how do you start adding diversity to a protege type garden? The easiest way to do that is to start with herbs. Herbs are desirable plants themselves because they often produce small flowers that attract and support predators and parasite toids. They also tend to be aromatic in nature. So this list that I have on the slide here are herbs that have been shown to attract natural enemies or repel pests at least in some studies. Basil is pretty common when we're talking about companion planting. There are lots of books that say plant basil with tomato as it will enhance the tomato's flavor. Dill does well if you're gonna plant that in a companion type setting with cabbage, lettuce, onion, sweet corn and cucumbers. But the research I found said it was not recommended to plant with carrots or tomatoes. Garlic does well with just about everything as well except for peas and beans. So keep that in mind if you're including herbs in your garden. So how about vegetables? Should you continue to plant vegetables in straight rows or mix everything up and do more of a grid-like pattern and alternate? What should you try together? So on this list here, this is not an extensive list. It's just the basic, I guess, vegetables that one would put into a garden. And I have an equal sign for crops that in my research I found that they get along with or at least there weren't any, as they say, harmful results from planting them next together. Or if there's a not equal sign, it would be things not to plant next to the crop. So if you take a second and look through here, there's gonna be a couple things that might pop out at you. Most of what I found is everything's, for the most part, gonna get along together except the tomato family, your tomatoes, potatoes, peppers, eggplants, will not get along with your cold crops. They don't get along with broccoli, cauliflower, cabbage and even kale. So try to keep those crops separate. Another vegetable that might be a little harder for other plants to get along with is our pole beans. So plant those a little farther apart from other vegetables. And then as I mentioned in the previous slide, alliums, garlic and onions may not get along with peas or beans. So try to avoid planting those close together. It's also important to include animal flowers in companion planting situation, and especially in a potager type garden for that design element, for that beauty. The flowers on the slide here do well in companion planting settings. They also provide a wide array of benefits to natural predators and to pollinators. One thing to remember as you're going through trying to figure out your plan for next year, what you want to plant together is don't think just by using companion planting methods in your garden, you're not gonna have any pests. It's still important to practice some integrated pest management. Make sure you're in the garden, that you're out there working and if you have insect problems, make sure that you're taking care of. Just because you maybe planted something in there to help deter a pest doesn't mean it's working. They just might be somewhere else in the garden. It's also a good idea, especially for potager type gardens to include some perennials, native perennials that would be beneficial to pollinators is a good idea. I know Esther McGinnis has a publication out, beautiful landscapes for pollinators that has some great information on native plants to include. And also don't forget about our woody elements, the small trees and shrubs that would flower in the spring for the pollinators and provide you with fruit as well. So hopefully I've inspired you to think outside the traditional gardening box, if you will, and try something new. So whether that is adding some potager design elements to your garden or mixing up your planting, trying companion planting, the garden clock is ticking. And in my case on the eastern side of the state, it's been completely reset with the snow cover that we've got. So get out your pen and pencil and start planting. Thanks, Carrie. We got a minor blizzard going on in Bismarck at this time. So you're right, our clock for nature has been changed a little bit, but it'll come back. Spring is coming. Hopefully. Right. Okay, we invite people's questions. We have one here. Are there patterns or directions available for trellises that use twine? Are there patterns or directions for trellises that use twine? Yeah, I don't quite understand. You know, I would think if you would go out there and search, they would give you different ways to design trellis systems, but I don't know any of them off the top of my head. Right. How about some of these recommendations that you have like don't plant tomatoes near cold crops or tomatoes taste better, basil grows around them. Is that science-based? Is that university, is that research-based or just anecdotal? That, as I said earlier, a lot of it is just anecdotal. In nature, it is not research-based. There were a few research studies that mostly did with production based on a large scale for purposes to be sold in the grocery store. And what they did find is that mixing your plants does provide a benefit, whether it's pest interruption or if it is plant interactions, there is a benefit to mixing up your plantings, but the nothing specific in terms that has been studied that, yes, basil, if you plant it next year, tomatoes, they're gonna taste better. It's more anecdotal in nature. Look at it as a chance to experiment on your own and see what happens. Hey, nothing wrong with basil. How about, you know this question we had about the twine in trellises? And the person comes back to us like the type of trellises that you showed in your pictures. Or maybe you can also say, is there a good resource book that you'd recommend on Portage Gardens? There is a lot of resources out there. And if you go back to my, if you can get back to my slides, I did have my references there. And there were a couple of good books on there. Or they might be on the handouts too. Yes, the last slide on your handout, that's there, it's full of references. That's great, yep. That's in the reference. There you go, thank you. Yeah, there we go. Sorry, I'm drawn a blank, I could remember. But yeah, the first three are pretty good references for Portage-type gardens. And they also had a lot of plans in there too and ideas for you to transition from, taking it with a grain of salt, to transition from cool season crops to your warm season summer crops and then back to cool season, to garden with the seasons as well. Okay, does anybody else have any questions out there? Everybody's tired and wants to go to bed. I want to look at it personally. I want to look at the winter. That too. You know, I think I have to stay in general, you know, with the kind of talks we're having this year. We're having a lot of these sessions like they're out of the box, you know, they're like, like that traditional garden he had, like, okay, here's my roll of onions. And then three feet over, I'm gonna have my roll of tomatoes and then there I'm gonna have my roll of whatever. And so we're kind of, the thrust of what we're having is like with John's talk, you know, your talk, using crafted plants. It really is kind of, it really is thought provoking. It's inspirational. It's, you know, it could be, you know, it could be, it's really interesting.  It's a great, you know, I think that's a great theme. Even growing those crazy pomados, they taught that that Chewan was talking about, that it's kind of fun to explore and try new things. Okay, last call for questions. Oh, I see, the problem is Carrie, they're just, you got them thought provoking, you know, they're just- Okay, that's good. Write down those notes. Maybe they're kind of bewildered a little bit.  Wow, so much ideas. What can I do? So that brings, okay, let's, you know, I'm gonna thank you Carrie for tonight. Again, that was very inspiring.  And Bob Birch, our outstanding person, he processes and edits them and then we post them on the Spring Fever website. So just give us a few days and we'll get these presentations so I can tell your friends to watch it. Maybe you missed the last week's sessions. Both sessions are on the Spring Fever website and we'll, we've done that for years and we'll continue doing that. So we always have our sessions recorded. I really want to give a special thanks to both Bob Birch and Scott Swanson in Department of Agriculture Communications. We could not do this without you two guys.  And so I'll just wish everybody a good night and we'll see you again next week, next Thursday night where we're gonna be featuring fruits and landscapes. So we'll see you next week, everybody. Good night.