 Thank you all for coming out today. So today I'm going to talk to you about a programming language called Noordar Created while I was at the Rijker Center. Again my name is Ahmed Abdallah. So to understand why I created this language, first you need to understand that I'm from Sudan, a country where the first language or the main language is Arabic. And I moved to the US when I was nine years old and I realized that I would have never learned to program if I didn't learn English when I came here. But in the year 2013 I came across a post on Hacker News by a programmer here in Brooklyn called Ramzi Nasser and he created an Arabic programming language called Qalb. And Qalb means heart and it's a functional, Lisp-based programming language. And I thought, wow, this is so cool. It'd be great if kids around the Arabic world had a language they could use to learn programming. Because to learn the program in English requires a lot of English proficiency. You have to understand docs and tutorials and stack traces. It's not like a minimal amount of English you need to know to get started in programming. And this is the same time when everybody is jumping onto Code Academy for Kids and all these things, get everybody learning to program. And where I'm from in Sudan to learn to program or to have this amount of English fluency requires a lot of privilege. You have to be wealthy to go to international schools or to get a really good education in English. And so I thought it'd be a great experiment to take a language like this and make it more mainstream. But my one thing about Ramsey Nossar's Qalb is that, and this is my ignorance at the time, is that it's a functional, Lisp-based programming language. And I'm like, oh, this is great. But it'd be nice if it was like imperative, algo-based. And thankfully, that was like an ignorance I had at the time about functional, Lisp-based programming language. But thankfully for this ignorance, because it led me to start this project. So NOR is an imperative, algo-based programming language that I created specifically thinking about myself. If I was a little kid, if I was a high school or middle school, what would be natural for me to learn? And this is a sample program in NOR. I think you can all tell what this program does. But in case you can't, we'll walk through it anyways. And so the first line in this program says, le coulis-che-fi one to 100, which basically means that for each thing in the range of one to 100. And then the second line is take the number in the for loop, and then get the mod 3 value of it. And so there's a function invocation and assignment expression. And then the third line is just print the number in the for loop. And then the third thing is check if the mod 3 is equal to 0. If it is, it's clearly divisible by 3. Print that out, print fizz if it's divisible by 5, print buzz. And then the final parts to this program here are the keywords bus, which in Arabic means the end or the end. And in this program, I make a call to a function here on the second line. And that function is just get the mod with 3 of the number. And this is the function in NOR. And so the function starts off with instruct a worker. And I try to make it like this child-like silly language, because I want it to be like more natural feeling. And then you say you give the function name. Then you give the function arguments that it will take. And then you say to do, because if I was a little kid, I kind of want to understand it as tell something to do these things for me. And then you have the function body. And in this case, I take the argument that was passed in. I mod it with 3. And I store the result in a variable called dal or d. And then I return that. And so that was a fizzbuzz in NOR. And I won't be able to get into the internals of how I created NOR, but I'll just tell you that I used a tool called pegjs, which creates a compiler for you. And it's a really nice tool. If you want to create your own small DSL, you should check it out. But one thing that sort of came into question while I was working on this is, how do I go about choosing key words? And Arabic is like a big language. There's a lot of variety to it. And there's classical Arabic. There's modern standard Arabic. And there's my own dialect of Arabic. And if you don't understand it, the tree's kind of something like this, it's an approximation. So you have classical Arabic, which is like a really old Arabic dating back to the 7th century. And then you have dialectic Arabic, which is what people use on a day-to-day basis. This is what me and my mom talk with. And you have modern standard Arabic. This is what official court documents are in. This is what the news is in, like Al Jazeera. They want to reach a wide audience. So they'll use this very formal Arabic that's not particular to anybody. But for Nour, I especially used my Sudanese dialect. Because I was thinking about myself. It's like, what would I really get me started on this? And just to show you a map of all these dialects and how they vary, I'm from Sudan. And so this is the area where my dialect is really prevalent. But there's different dialects across North Africa and the Middle East. And when Nour got public, some people really liked the fact that I used my own dialect. Some people thought that I was Egyptian because they're trying to triangulate where I'm from based on a few key words. And that's kind of hard to do. Some people, I thought I was from the Gulf, and I'm not from the Gulf. And some people really didn't like it. Some people are like, oh, it'd be great if you would have used real Arabic. That's OK. I knew they were coming. But my goal or the reason I intentionally did this anyways is because if you go to the Middle East and you listen to an Egyptian TV show, it's in the Egyptian Arabic dialect. If you listen to a Syrian song, it's in the Syrian dialect. So all these media and artists export their own dialects. So I'm going to export my dialect here. But the general question is, is a programming language supposed to be this generic tool, like a court document that should follow strict guidelines? Or does a programming language reflect the aesthetics of the creators behind it? And the thing is, whatever language you're using, there's no right or wrong about the syntax. It's reflecting whatever the people in the language community behind it chose to do. But also during this experience, I created Noor on the browser using PegJS. And initially, I wanted to do it in Python. And I was going to make it as a desktop app. And when I created a download of Kivi, which is a GUI framework in Python, I created my editor. And I started typing into my keyboard. And the Arabic text was showing up all broken. I was like, what the heck is going on? Maybe I'm missing a plug-in. Maybe I need to download something. Something just didn't make sense. And that's when I really came to learn about how Arabic text is rendered on your computer. There's actually, it's not handled by the operating system or whatever, the framework that you're using has to handle it for you. So I went to a fun deep dive about how all that works. And I'll just show you how that is. So when a user types Arabic, or when you see encounter Arabic text in a file, you have to run it through an algorithm known as the BiDi algorithm, which is a unicode bi-directionality algorithm. Then you have to reshape that text. And then you finally get a nice look in Arabic. As for how the unicode bi-directionality algorithm works, so Arabic is a right-to-left language. So the unicode bi-di algorithm specifies a base direction or a line direction. And this bottom long red line here specifies the direction that the text will flow in when it's rendered as the user is typing it. And then for every single word, it has its own direction. So this word, or this line right here says bang bang con 2018 in New York City. And the terms bang bang con obviously flow from right to left because they're Arabic keywords. But in Arabic, read numbers from left to right. So the visual cursor as the user is typing in a number has to start flowing from the left to the right. Then when the user types an Arabic word again, the cursor, the visual cursor needs to jump back to the end of the line and start flowing from right to left. And if they type an English word, it starts to flow again from left to right. So I was about to implement my own Arabic text editor, but it was out of scope because there's a lot of rules to handling by die. But it was good to learn. And then the other thing that you have to do when handling Arabic text is that you have to reshape it. So Arabic letters don't take the same form as they do in English. And Arabic letters have to be connected. And they take a different shape depending on where they're at in the word. So in this top line, I have the Arabic letter HHH space H. And the way this actually gets displayed is like so below. So letter H looks like this when it's in the initial state. It looks like this when it's in the middle state. And then it has a different look in the final state. And then you have to reshape it. There's more to reshaping than just simply looking up the letter and where it belongs. There's also these things as ligatures. Certain Arabic ligatures are mandatory. So if you see two letters, you don't just look up the initial and final forms, but you have to look up. There's a precedence where the ligature takes. It has to be shown. And there's more to Arabic text reshaping and Bidai. But this is just sort of like some of the nuances I came across when it comes to rendering Arabic text. But if you do that all correctly, you finally get to see nice flowing Arabic text that you can read from right to left. And when it comes to Bidai, it's also an algorithm that applies to Hebrew, Yiddish, Urdu, Persian, and a host of other Arabic or host of other right to left languages. But when I was doing research for Nura, I was trying to look at what did old mathematicians use in their math work. So there's a lot of programming ties to math in some really close ways. And I was trying to think of what did Al-Khwarizmi, who's a guy who created Al-Gibra, or he's known a lot for Al-Gibra, what did he use in his textbooks? And I came across the term shay, which means thing, which is a term I use in everyday Arabic even now. And in my FSBUS program, this term is right here. It's the value in the for loop that I iterate with. And it turns out, shay is how we get the letter x in math. Like, if you went to school here for mathematics, they're always like, find x. Or y is x squared plus x equal plus 1. It turns out it comes from this word shay way back when. So this was a fun random fact I'll leave you all with. But thank you for your time. That's all I have.