فشرف بالشتغالي بالعلم ولا تبغي به ما عشت يا دادا دالا ويا له من شراف عظيمي الحمد لله رب العالمين له الحمد الحسن والثاناء الجميل وشدوى الله إلا الله وحده لا شريك له يقول الحق وهو يهدي السبيل وشدوى النسيدنا ونبيئنا محمد صلى الله عليه وعلى آله وأصحابه والتابعين لهم بإحسان إلى يوم الدين أما بعد وإن الشرف عبد الكتاب التحفة السرية في شرح المقدمة الأدومية written by ابن أجر روم رحمه الله تعالى أن الشرف عزمتن بايمحمد محيدين عبد الحميد سرى كت مقدمة written by ابن أجر روم أن الشرف عزمتن بايمحمد محيدين عبد الحميد رحمه الله تعالى نحن were in last lesson نيابة الفتحة عن الكسرح we spoke about that the فتحة فتكون علامة للخفض في الاسم الذي لا ينصرف we stopped at this point and we said the فتحة is shown in place of what the كسرح okay when the اسم is what اسم الذي لا ينصرف when the اسم is اسم الذي لا ينصرف and we said in the next lesson we're going to leave that point because it requires great explanation and it needs from us to go in great detail regarding what is meant by اسم الذي لا ينصرف so let's go to the شرح written by شيخ محمد محليدين عبد الحميد and let's see what he says he says علامة على الخفض الاسم وهو اسم الذي لا ينصرف ومعنى كوني لا ينصرف أنه لا يقبل الصرفة وهو التنوين so he says to you the فتحة takes the place of the كسرح only in one place there's only one time that you're going to see in which the word becomes what فتحة instead of a كسرح and that is he said it is وهو اسم الذي لا ينصرف and then he defines for you what it means اسم الذي لا ينصرف he says ومعنى كوني لا ينصرف the meaning that is meant by لا ينصرف it means أنه لا يقبل الصرفة that he doesn't accept صرف وهو التنوين and the صرف is what the صرف is what is تنوين the صرف is it is تنوين والاسم الذي لا ينصرف هو and the اسم that does not accept تنوين is now brothers you have to understand the definition of what is meant by the اسم that does not accept تنوين are you together والاسم الذي لا ينصرف the اسم that does not accept صرف it is أنه يشبه الفعلا it is the one that this is the ضابد that the شغرحم الله has placed for it and the grammarians have put for it it is أن اسم الذي لا ينصرف هو the اسم that doesn't accept تنوين is أنه يشبه الفعلا it is the one that has it looks like a verb في وجود إلتيني فرعية تيني because it has to what it has to إلت to defects it has to defects that are فرع subbranches okay what does it mean it has to إلت there are subbranches what does that mean what does he mean it's the verb so it's the noun that looks like the verb so when you say إلتيني here and you say فرعية تيني he's not talking about the noun what's he talking about he's talking about the verb he's already أشبه الفعلا it looks like the verb في وجود إلت the verb is إلتيني فرعية تيني the اسم is looking like the verb because of to إلت to defects that are both subbranches they're not أصل they're both subbranches I'll explain what it means both of that but I want Sa'a to try it إلتيني what does it mean so the okay good so the تُعِلَّ that the فِعِل has that the اسم has become like it is what number one is what and the second one is it's معنا what does it mean what does the شيخ mean when you say لف إلتيني إلتيني in the verb what does it mean yeah no verb except something else we found an اسم here are we all together and this اسم it doesn't accept and win so the question is why can it have why does it happen that a noun does not accept and win we said looks like a verb okay good what is it that it looks like the verb with we said that the verb so we have to first tell what the verb is and then we can tell what the noun looks like the verb in right so let's first of all talk about what the verb is the verb we said it has two إلا in it those two إلا فرعيتيني they are two إلا which are they are two defects إلا means defect okay and both of those إلا عوات فروع فرع صبرانج stands from an اسم good so I'm asking you what is meant by the first of the two you said to me it's ترجع إلا الله that it goes back to the wedding I asked what it's meant by it goes back to the wedding you then said to me it's pronunciation I said no yeah what do you mean the way it's written so the verb then resembles something it's an ongoing no what is it no no yeah good I mentioned this before the first إلا that it's in the verb is what the first إلا it goes back to the wedding what does it what do we mean when we say it goes back to the wedding the word ضرابة the word ضرابة is it not a فعل it's ضرابة فعل ضرابة where has it been taken from it's been taken from a مصدر a verb now hey what's the muscle that it's taken from yeah it's taken from ضرب right ضرابة is taken from من ضربي taken from ضرب right good so here we have ضرابة and it's taken from something and then the first إلا that in it is what that the فعل that you see is مشتق is muted from something are you with me are we all together on that so what is it so the first one we said it's إلا that's إلا what does it mean فرعية when he says فرعية yeah yeah yeah does anyone know he said it's إلا he said إلا تيني and then he said فرعية تيني both of them are فرع what does it mean by both of them are فرع yeah yeah a branch from where you just answered it if you think about what you said if the word is rooted from something then it's not the فرع right so it's not the أصل so it's the فرع فطارباء is taken from الضرب which is the أصل إذا it's a فرع it's a sub-branch right إذا مشتق is taken from the what مشتق منه how is it from the مشتق منه صحيح which is a measure here right am I making sense قاعد قعود قارع قراع أكل الأكل أوله those are what any verb you bring this is taken from the verb now قاعد is taken from what is taken from قعود صحيح all of those words any verb that you see is مشتق is taken from something good فرعية تيني means what because it's a فرع the verb is a فرع the أصل is what the measure is the أصل صحيح is the أصل is the measure good the second one is what the second one is here it says to you now الذي أشبه الفعل في وجود إلتيني فرعية تيني إحداهما ترجعوا إلى اللفضي one goes back to the اللفضي والأخرى and the second one is ترجعوا إلى المعنى it goes back to the meaning هاي ساعد what's meant by the meaning that's the isim you go to the isim we're going to go to the isim what's going on with the isim first remember we have to explain what the isim is and then we're going to talk about what the isim resembles it in we're talking about about the إث فعل because he said to you the isim الذي لا ينصرف is what what's the isim الذي لا ينصرف the isim that doesn't accept and win is the isim that looks like a verb in two things so we're talking about the verb here the first one is that it looks like the verb in two إليs that are in the verb the first إلي that's in the verb is what إحداهما ترجعوا إلى اللفضي one goes back to the wedding and the other and the second one is ترجعوا إلى المعنى it goes back to the meaning it wasn't meant by the meaning yeah hey عمران you should have said I got this don't worry man I know this properly so you sure you sure yes I am I asked you صح if you knew it what did he say now what did he say I'm gonna say are you sure what did he say so the second one is what ترجعوا it goes back to the meaning what do we mean by it goes back to the meaning yeah the reason I'm asking you guys because I mentioned this to you guys in a متنمة I explained this to you guys in a متنمة احتياجه إلى الفعلي the verb always needs a verb this word the meaning always requires something that did it are we all together احتياجه the second is that it requires and it needs it's hungry احتياجه إلى الفعلي it requires a فعلي and this is the إله which is معنوية right this is إله معنوية now that you can never see a verb that's will ever because we're not atheists are we are we atheists no we're not we believe every action it has a doer right every action what does it require الفعلي are we all together does that make sense إذا when the sheikh says الذي أشباه الفعلا في وجود إلا تيني فرعية تيني إحداهما one of them ترجعه إلى اللفضي it goes back to the wadi we know what it means إلا اللفضي right if I ask you إلا اللفضي what does he what do you say اشتقاقه من المصدر it's rooting اشتقاقه من المصدر it's rooting from a مصدر والأخرى ترجعه إلى المعلى and the second one it goes back to the معلى you say احتاجهه إلى الفعلي it's needing of a فاعل صح so here we have إلا تيني فرعية تيني the first one is إلا which is إلا اللفضية and the second one is إلا إلا إلا معنوية are we all together إلا إلا معنوية very good both of the two are they فرع okay we understand المشتق is a what yeah the mushtaq is taken from what المشتق منه are you worried about how is the معنوية فرع how is the معنوية فرع yeah hey what's the that's the first one that's the wording now don't say that the إلا that goes back to that إلا is the wording we agree on that it's always going to carry on in every example but it's always going to there's a إلا also in the meaning that's independent from the wording and we have this the شخص that is فرعية it's a fara so how is a fara in the meaning how about you want to try yeah you're thinking you're thinking out loud okay will you break break that down yeah the محتاج is always the فرع of what المحتاج منه صح just like the مشتق is the فرع of the مشتق منه it's a branch that doesn't have anything without this one so it's a it's a fara from it it's a branch that stands from it I'm a the محتاج إليه sorry very good the محتاج إليه does that make sense now now إن شاء الله تعالى that we've understood that the sheikh goes on to saying أو وجد فيه إلا أو أعلا is found in it that إلا تقوم مقاما العلا تيني that إلا by itself can stand what it can stand in the place of two it can actually take the place of the إلا اللفضية نعلم عنوية if this one by itself it can take both of them are we all together إذن the إلا that go back to the اسم are all those three that's why he says well إلا لتتو جدو في الإسم و تدلو على الفرعية so here what we're looking at is what are we all together we're looking at the فرعية the إلا here that we're pondering on is we're finding an اسم which is a فرع are we all together does that make sense we're finding an اسم which is a sub branch that's not an اسم does that make sense the first one of the إلا is the one I wrote on the board المبنوء من الصرف right the first إلا is what إلا so here it is تو إلا there's words that have two إلا in it the first one is إلا علمية and what what's fear right are you with me علمية is what it comes from the word علم علم صح and what does علم mean علم means it comes in other words علم a sign when you make a sign for something that's علم علم is basically whatever makes a person be known for a name whatever that's what an علم is called are we all together generally people use the word علم as a name right are we all together because the word اسم generally is more broader than an علم علم is actually a name like an اسم is actually a noun okay are we all together pay attention علم is a name are we all together the علم is what it's a fara of the a تنكير the اسم is what that no one is known the اسم is نكرة the تنكير is the اسم so the علم is a fara of what is a fara of the تنكير is a fara of the the نكرة does that make sense the صفة which is here is a fara of the موصوف is a fara of the موصوف and then we have the فرع here so we're finding are we all together we're finding an اسم we're finding sorry an اسم that has these characteristics with what the فعل are we all together so this is what we're going to tackle in sha Allah so now we understood علم is what it means right we understand what علمية means right are we all together and we understand what وصفية means right which is that is taken from her the صفة is a fara of the what is the موصوف pay attention here now let me finish my point first the علمية goes back to which one of the two when we talk about اللفضية and معنى which one is it going to go to how does it mean both of them go back to the معنى how okay look for example the word رجل صح what's the originally taken the word is originally taken from what what's the زيادة here where's the where is it originally taken from it's taken originally from where's the مشتق taken from the مشتق منه does that make sense so it goes back to the left this one علمية is اللفضية it's just a wording I have no meaning connection on it this one has a meaning though it needs it it requires صفة requires a more صوف it's hungry for it doesn't make sense you can't have a character description without the person who you're describing a description cannot just stand without the person or the thing that you're describing does that make sense صح this is the احتياج and this is the what the fact that it's taken from it anything that's معرفة is taken from اي نكرة no one is known اصل nothing is known اصل the asset is that things are not known am I making sense yeah no even then محمد is not known it's not specifically your name it's نكرة اصل the asset is that no one is known we can go into more details regarding that now we're going to go into the علمية how many forms they come into and the وصفية how many forms they come into are you with me are we all together in that regard so let's go to the علمية which is six that the شيخ رحمه الله mentions how many does he mention he mentioned six the first of the six is what yeah so the first one is العالمية the first one is a name مع التأنيف is what with a it's a feminine it's a female but it's what بغيري ألفن without an alif صح pay attention sisters and brothers I want you to pay attention the شيخ said the first one the first example is a تأنيف a female word that doesn't have an alif it's a female this is a female but it doesn't have alif صح the female words in the Arabic language are three times the words that are feminine that we say it's feminine how many types are they the first one is تأنيف it's معنث and it's what it's with تأمر بوطة باطمة صح and etc I'll go together am I making sense the second type of تأنيف is what yeah the second type is ألف the word is معنث but it's معنث because it's ألف مقصورة or ممدودة it doesn't matter صح the word is it's معنث because of an alif at the ending حمايرا it's معنث word where is it because of the alif صح قصوة it's معنث how do you know it's an alif صح and the third one is تأنيث في المعنى the word is معنث but in the meaning not in the are we all together it is تأنيث في المعنى it is معنث in terms of what in terms of like زينب زينب there's no sign of the fact that she's what but it's in the meaning we know زينب is a female صح yeah pay attention here so the first one is تأنيث تأنيث بغير the alif what enters there when we say تأنيث بغير the alif anything that's معنث in terms of it's meaning and the other one that's معنث in terms of it's تأمر بوطة so it's حمزة in there it's حمزة in there when you put it in تأنيث بغير the alif yeah from what we see here صح we put حمزة in there زينب going there تأنيث بغير the alif فاطمة going there تأنيث بغير the alif فاطمة goes in there are we all together it all of them enter there very good so any word تأنيث تأنيث تأنيث معنث are we all together any معنث بغير the alif عالمية تأنيث تأنيث the second one is العالمية مع العجمة the second one is عجمة عجمة here means that this word is what it's a foreign word it's not an Arabic word but it got turned into the Arabic language later صح a question are we all together does the Quran have none Arabic words in there yeah good does the Quran have words that we can say they're not Arabic they're not Arabic is there words in the Quran that are Arabic they're not Arabic words the Quran is بالسان العربية المبين الله ستا بالسان العربية المبين صح but when we have names like عجمة for example عقوب and إبراهيم and in grammar here it's عجمة it's not an Arabic name إبراهيم is not an Arabic name إبراهيم it's not an Arabic name يعقوب it's not an Arabic name they're عجمة they're all foreign names do you not have these names in the Quran يعقوب إبراهيم you have these names in the Quran and you do how do you reconcile between that what you have to remember is that what you bring what you study in grammar generally speak it don't take it with you in the Quran some things that are said in grammar that are not taken into the Quran صح like for example وخوليق الإنسان وضعيفة خوليق الإنسان خوليق is مبنول المتول it's a it's three four letter word بما أول هو كسر ما قبل آخره صح خوليق خوليق so in Arabic when we look at the eye what do you say مبنول المتول the one who did it is unknown ها can you say that grammatically yeah we used to say that but now when it comes to the Quran we have to have good etiquette we know who created we know who created the human right and then some things when you do in grammar and you come to the Quran the form in which you deal with it is different in grammar you can call it عجمة if you want to but when it comes to the Quran the word إبراهيم it became what it became an Arabic word when the Quran took it for example we Somalis have words that are word إتاليين that we took from Italy إتاليين the words that we took from the Abyssinians the words we took from the Arabs now this word to us is a word it's a Somali word what is it it's a considered as a Somali word if somebody said to you what language are you talking and what are you going to say to them I'm speaking Somali but you know there's two-three words in there that are what that are outside the Somali language you took it out it was borrowed it becomes part of that language and language is borrowed from languages all of these are علمية that's why أمران all of these are علمية لاستعلا where's Ahmed where's Ahmed علم the علم already is the what فراه the second type is عجمة more details this that we left out we leave from another book عجمة we did the third one is التركيب المسجي the third one is what the third one is التركيب المسجي what is a تركيب المسجي تركيب المسجي what does it mean the تركيب in نحو are three types but they are more than that outside grammar but they are generally three the first one is called what تركيب إسنادي تركيب إبافي and تركيب what مسجي there are other types that scholars mentioned تركيب وصفين what does it mean تركيب إبافي is when it's two words مباف مبافون إلي and they both made a meaning like عبد الله the two words they are one now does that make sense it's a compound in word عبد الله is تركيب إضافي عبد is a slave الله is a what is the creator of the heavens and the earth الله سبحانه وتعالى and this is called تركيب إضافي somebody can come up to you and say to you that this if somebody comes up to you and says to عبد الله what are you going to say to them if somebody comes up to you and says to عبد الله عبد الله what are you going to say to them عبد الله what are you going to say to them you're going to look for more عبد الله what what do you mean عبد الله you're going to look but you can't say to you but it wasn't a كرامة بأقل ما يتعلف منه كلمة او اكتق it's two words I'll give you two words isn't it a complete sentence عبد الله is one now but this تركيب is called تركيب إضافي this تركيب is called what عبد الله is مضافة مضافة the slave of who Allah he's been attributed to Allah there's another type of تركيب which is called تركيب إسنادي تركيب إسنادي is when they're speaking about a word and they're saying that the word has to be more than one the تركيب that they're talking about is this one are we all together this is the تركيب that they're talking about the compounded word meaning جاعم وحمد it's two words but this is إسنادي it's what it's a تركيب which is تركيب which is إسنادي good what's the third one تركيب which is مسجد تركيب مسجد is really a person who takes two words like for example جاعم وحمد is what it's تركيب إسنادي right I can memorize now names called جاعم وحمد he calls himself جاعم وحمد and that becomes his name are you there you can't now them to say جاعم وحمد it's a sentence it's a complete sentence that's his name and that happened so many things like the word حضرة الموت you know حضرة موت right where's حضرة موت it's a place in Yemen right but it's حضرة الموت death came are you with me it's two words حضرة and then موت it came together this is called تركيب مسجد حضرة موت is a place you can't say حضرة and موت used to become it's a complete sentence and they used to stand independently you can't okay this is called what تركيب مسجد there are many words like that تأبط الشراء مثلا تأبط الشراء تأبط الشراء was a man's name but what does it mean تأبط الشراء it means that he put evil into his armpits that's a word تأبط الشراء a person put evil in their armpits okay they took their weapon and they put it in their armpits but then it became a man's name are we all together معديك رب it's two different words بعلا بك these are تركيب مسجد تركيب مسجد what does مسجد mean actually when two things become one مسجد in Arabic language means when two things mix together and they become one if Africa never stand by itself it's an incomplete sentence like the مسجد comes from what the إسنادي آه it's referring to one thing now does that make sense أبط الله it can't be a what سليف الله it's still an incomplete sentence are we all together like in the مسجد it's a complete sentence the مسجد is a complete sentence but it became one word of one person right number four is any any that finishes with what أليف and what what does it finish with أليف and نون such as أثمان ربوان أفان and etc زيادة أليف and نون is like أثمان ربوان these are what زيادة أليف and نون number five is وزنول فعلي what does وزنول فعلي mean is like أحمد it's like what it's like أحمد and يزيد it's like أحمد and what and يزيد أحمد and يزيد what does it mean وزنول فعلي because we know زيادة أليف and نون we know تركيب المسجد you what it meant we know وعجمه it meant we know تأنيس بغير أليف and what that meant but what does it mean وزنول فعلي it's basically any verb so any noun that comes in the form of a what أفعل أحمد comes in the form of a what say I praised Allah how do you say it أحمد الله I praised Allah right أحمد الله hey what's his name this man same does he not look the same وربع يزيد الله واللدينا تدو يزيد الله الله increases يزيد زمان's name يشكر is also the same صح there are many people's names who are what it's a form of it's the وزن it's the construction of a verb good number six is عدل what does عدل mean عدل means أن يكون الإسم that the noun is what معدولا بي عن وزن آخر that it's taken from a letter another word that it was from it went through straight stages that the word went through stages or a stage of course this عدل is really what تقديري لا حقيقي it's مقدر you can't see it it's implicit it's never explicit you can't see it is that the words how do you know it's تقديري the grammarians made this they said that they saw the grammarians saw that there were words that came in the words of what فعال any word that came in the word of فعال they saw it's غير مصارفة it doesn't there's no surf and there's no other thing except this عالبية and that's not enough for it to be ممنوع من a surf there has to be four under one of these five that were previously mentioned so they said it's مقدر that it came from it got rooted from another word so this so they said it's مقدر that it came from it got rooted from another word so the قاعدة can be مستقيم the قاعدة can be مستقيم so عمر was taken from what عامر عمر is from عامر زوفر and زوفر so عمر زوفر and قثم مثلا زحل and بولع all of these words they are معدول for example عمر is taken from عمر زوفر is taken from زافر قاثم زاحل بالع taking from those words good those are the six that are what ستة إلى six defects which are اللفضية they all go back to the wordings no that's not the reasoning okay yes but أصل إلا that brought it into this discussion is the fact it's عالمية are we all together are we all together are we in عمر that's taken from عمر how we don't it's not something really how did grammarians know ask them where do you get this from it's مقدر they made this ليستقيم القضية so the issue because they saw عمر it's not going to take it it's not taking it so then they said that this is the only reason we can find for it because no other thing they could do with it except that they said it's مقدر this is the every point we can have more details discussions about it إن شاء الله تعالى okay those are the six إن شاء الله تعالى we'll stop there by evening I'll take questions and answers from you all anything which I have said that was wrong or incorrect is from me إن شاء الله his message are free from it سبحانك اللهم بحمدك أشهد أن لا إله إلا الله ستغسروا قتولا


Tommy here from Orange Systems. Have you been considering using Ubiquiti in your company? Well, I want to make a video talking about the nuances and details of whether or not you should choose this product line. Full disclosure, this video is not paid for, endorsed, or sponsored in any way by Ubiquiti. I am not paid for, endorsed, or sponsored by Ubiquiti. Ubiquiti and me have a relationship, though, where they do occasionally send me products. It actually started with this product I bought in 2013. I did a video review, and it's actually my review of the product, and this is actually how a lot of my YouTube channel videos work out. I'll review something, and then the company contacts me and goes, hey, you reviewed our product. We'd like to send you one of our new versions of the product, and you can review it. And I just close that in my videos. I have all ethics policy where I dive into that. But there's been many times people will comment in videos, and I just want to be upfront that, no, I'm not directly not any type of compensation other than getting to keep pieces of hardware, minimal amounts of pieces. That's my compensation for doing any of the videos. If you want to look at his compensation, I don't have to return the hardware. I get to keep it and do what I want with it. Usually, it just ends up in our lab back here. It's pretty much where all the Ubiquiti equipment that gets sent to us. It's not something we go install on customers. It just, yeah, we stick it in the lab. Before we go any further, let's first, if you'd like to learn more about me and my company, head over to LauranceSystems.com. If you'd like to hire a short project, there's a hires button right at the top. If you'd like to help keep this channel sponsor free, and thank you to everyone who already has, there is a join button here for YouTube and a Patreon page. Your support is greatly appreciated. If you're looking for deals or discounts on products and services we offer on this channel, check out the affiliate links down below. They're in the description of all of our videos, including a link to our shirt store. We have a wide variety of shirts that we sell, and new designs come out, well, randomly. So check back frequently. And finally, our forums. Forums.LauranceSystems.com is where you can have a more in-depth discussion about this video and other tech topics you've seen on this channel. Now back to our content.  And I think this is an important thing to think about when you look at a company, because I've seen when decisions were made and fully disclosure upfront, yes, I'm as angry as everybody else about the whole discontinuance of Unify video. That was actually one of the product lines we were getting into. We thought it was a great small business solution. Unify has done a great job on user interface, not just for network equipment, but also for their video equipment until they discontinued the Unify video platform and pivoted to the Unify protect platform. I'll leave a link to that video. So I'm not going to be talking much about those, that particular product lines. But yeah, I think that was short-sighted. But when people say the company's going out of business, I just referenced this page right here, that their current stock price is $198 a share as of October of 2020. Their current market cap is about $12.67 billion. And their CEO is on the Forbes fortune list, etc. They're not going anywhere. Doubt it. They had a product line that I think they made mistakes on. And I think this is something you have to look very objectively at these type of companies. Unify's money comes from this line of business that they have here, selling wireless products, wired products, and all their networking stuff under the Unify moniker. So we have the network equipment and we have the protect equipment, which is now their video line that was used to be called the Unify video. They've dabbled in phones. And I say dabbled because there's a phone box, phone offering right here, one. And the door access is another line of business you're trying to get into. I did a review of it. I think it's interesting, but it's also very new. They built their company on their networking gear. And that is where I believe the mainstay of all their revenue comes from is from this. And they have quite a bit of offerings on here. And we have used quite a few of their site-to-site pieces of site-to-site equipment. And some of the edge products are a little bit more targeted towards the ISP space, but the edge products are pretty good too. But narrowing it back down to the Unify equipment and the gap that they have left in the market. So this was bought, I think, around 2013 or 2014. And it worked perfectly fine until I pulled it out of my house. I just moved and realized, wow, this is a really old APLR 2.4 gigahertz. But this was, you know, one of the original ones when we first got started around 2013 with using Unify equipment and testing it out. And it's been amazing. We've done all these deployments and years later, we're coming around to upgrade those deployments and we're pulling out working units and upgrade them to people who want faster Wi-Fi, etc. Or adding more to cover gaps. And the amazing part is this is still supported after seven years. It's under their long-term support contract. They're letting us know there's an end-to-life date to it. But still, seven years for network equipment in the field, that's pretty good. Five years, probably a more reasonable life cycle. But hey, they supported it until this year when they said it's going into long-term support. We have an end-of-life date for this. But that's kind of my point as we have found the Unify networking gear. Specifically, the Unify switches and Unify access points to be an absolute excellent product line that have really held up with extremely low failures based on the quantity over seven years we've installed. And because we do consulting and network engineering consulting, that includes a lot of the Unify equipment, that is something that we become very familiar with these large installs, whether or not there was problems with them. They just seem to work. It's been something that we've been very happy about. But when it comes to the entire product line, you can't look at it the same way. Now, the first problem with Unify is going to be the gaps they have. First gap is support. Flat out. This may be a real problem for you as an IT or MSP company going, I don't like the support they offer because it's kind of non-existent. Yep, you do not have an easy, grab the phone, pick it up and someone's going to, you know, hold your hand through network setups. But there are gaps that are created in markets and there's people who feel those gaps. There are more than me who offer consulting on setting up network equipment. That being said, what you save in licensing fees and that's what makes them kind of a market differentiator, you get the Unify controller software for free, you configure it, you adopt all of these different devices to it, you can even have it set up for a multi-tenant where you don't have to have one controller per site, one controller can host many sites and that scales up quite a bit. So you can have one server that you host as an IT provider, manage all of your clients through this dashboard and pay no licensing fees for it. But of course, you should charge for your time to manage all of your clients. Therefore, your margin is whatever you want to charge versus if you use a company that has licensing fees, your margin is whatever you added on top of what those other companies charge. So you can look at it two ways. You can learn yourself like we did and fill that gap of knowledge. You can hire a third-party consultant like us or any other company that offers this type of service and say, all right, I want to hire this company to train us to set it up and get it going and turn over the keys, which we do. Once we turn over the keys, so to speak, and configure it for a client, that client will go on and manage it. And that client for us is sometimes internal IT teams that we set these up for. School districts are a pretty good example where they look at it and they go, the licensing is coming up again on this popular brand, whatever it is, of wireless access points and switches. And that will lead to them going, okay, we don't want to pay that renewal again, that's kind of high on licensing, can you set up this Unify equipment and we'll just host the controller internally in our building because we have our own server stack and away you go. Now, this is something I think Unify does a great job of. I think this is where their bread and butter is, is being able to sell those type of solutions. Now, another reason you may not like them though is the reason these companies have all the hardware and didn't buy the hardware from us and just bought a level of consulting from us is another problem a lot of IT MSPs have because they're trying to make margin on all the hardware and Unify sells to anyone. You can buy this on Amazon, you can buy it on Unify's website, you can find the prices and people contact us all the time, Tom, who's the best wholesaler because I called around and they're almost like no markup on these. I'm like, yeah, that's pretty much how Unify sells it. The margin is extremely low. Even if you're buying bulk of them, you're not going to make the margin you'll make on companies that sell Channel Partner Direct. That is another reason you may or may not want to do it. If you're trying to make all your money selling hardware, not selling solutions, that's fine. That's a business model a little bit different than we follow. Not saying it's wrong. If you're making money at it and your customers are happy, you've got a good business model. That being said, this may be why ubiquity is not a good solution or fit for your MSP because you make margin on hardware and you need someone to help you out with all the network engineering because you don't want to stop and take the time to learn it. That's perfectly fine. Someone has to be paid for the knowledge exchange. You either pay the company by licensing fees, which covers covering a help desk at a hotline so you can get help. And then the Channel Partner Program and everything related to that. So it doesn't get sold directly to your clients. You have to go between where the clients anytime they want more equipment, they can't just add it. They have to buy it through you and you make your margin percentage you set on it. That being said, maybe you want to do it, they maybe don't. Now, this is all those things about ubiquity that I kind of like though is the upfrontness, the fact that they put technology relatively affordably in hands of tons of people, lots of consumers, lots of end users, lots of small IT teams. It got the time to sit and read through the documentation. They have a lot of documentation. That's how we learned it. We did not get certified from ubiquity. We did not go through any training programs. We literally read what is completely available on our website, books you can find and download that are available on our website. And there's even third-party authors. I'm writing a third-party author books. I've only read the free stuff that you can get from Unify, but I'm aware that third-party authors have also created documentation on the Unify equipment if you want to read further into it and become an expert. For us, it's just seven years of usage that has brought us to where we're at. Now, one more little side note. The controller itself is free, but some people don't know how to set up a server to host it on because that may be a skill set not every IT person has. And this is where Riley Chase, who is the owner of Hostify, developed his software as a service once again to fill a gap. Unify, for whatever reason, never got really into offering a hosted version of their controller where you could host an instance of it and pay them. Some people perfectly are fine with doing this. And this is where Riley Chase and Hostify, he said, well, that's a market gap. I'm going to solve that market gap by doing Hostify, which basically, if you don't want to maintain the controller, maintain the updates, maintain the server and secure it, this is where you can reach out to Hostify. By the way, a couple things. I have an affiliate link down below to get you a discount to get started with Hostify if you're interested. And I'll link to the videos where I interviewed Riley and we talk about Hostify as a product of note. My video is older and it references a free version that he had, that free version is no longer offered. Sorry about that. He does have minimums, but he is very helpful in setting up these. If you don't want to deal with hosting the controller yourself, you reach out to Riley. He'll take care of that part of it as well. Now, the final thing I'm going to talk about with Unify is the exact products we use. And I'm going to bring this up because there's a signal to noise ratio problem. And I don't mean with Wi-Fi. When you sell a product to the general public, you end up with the general public immediately skipping any part where it said, here's these step-by-step instructions and going right for plugging it in and going, it didn't do the thing I thought when I plugged it in. I thought I would just plug this in and magic Wi-Fi would show up. This is the downside when you have a lot of inexpensive equipment put in the hands of consumers. They create tons of noise in forum posts. This is the double-edged sword. That $12 billion market cap has to do a lot with selling massive amounts of equipment. Once you open the world up to the consumer market, you get to first, sell lots of equipment. Second, get lots of people who may be complaining about said equipment because now the bar for entry is an Amazon Prime account and free shipping to get this or just going over to Unify's website and buying it directly from them. But yeah, you can get this in the hands of consumers so easily that, well, you end up with a trouble of trying to figure out, is there really a problem with the switches or is it a lot of people that don't understand VLANs because, well, the majority of people that just get started in networking things like VLANs and how the integration of all this works, that's sometimes a little bit challenging. But before we get too far off topic on that, I will comment, though, all the equipment that we use, access points and their switching equipment and their varied switching equipment like the rack mounted or even the not rack mounted equipment, we've seen extremely few failures and great reliability and very good serviceability in terms of features and function, but their routing equipment, the Unify Dream Machine, Dream Machine Pro, USG, USG Pro, anything that Unify has made for routing equipment right up here to October 2020 has been lackluster. It will check boxes that make marketing people happy saying it has filtering and gives you this or that. It's all just in deployment and practice, extremely basic. That is the one thing we just don't deploy out in the field and this comes up constantly where people call us for network engineering help and are trying to get the Unify routing equipment to do something beyond its capabilities and then they are stunned and shocked how a company with a market cap that big and a popularity that they have doesn't have all these features that they thought it would have such as the way the VPN works or the filtering features or the way it does any DPI. It is so basic. It's enough to make the marketing team happy they can put it on the box and say this supports deep packet inspection until you actually use it and realize how basic it is. It's not particularly useful. So when it comes to actually deploying all this equipment and what we actually stand behind and put in our clients and do a lot of support with and recommend to people, it's always the same thing. It's the switches, it's the access points, it's setting up the controller to easily manage them and give visibility. It's just not the routing equipment. That is still something that they, for reasons unknown to me, they've taken the time to develop into the door access field, but they've decided to not fill all the gaps and feature requests that have been suggested in their forums for like five years that even adding multiple IPs to the WAN, yes, that basic of a feature is missing from the routing equipment. So if I have a block of IPs, static IPs I want to assign to the WAN side, the UI doesn't currently, as of right now, not in talking about beta or future, have an option where I can just assign blocks of IPs easily to a WAN interface. That is a pretty basic function that you'll find even in some of the lowest 10 to firewalls and, you know, if I is just not gotten around to it despite years of requests. So in terms of what we stand behind, what we recommend, how we feel is that their routing and switching is top notch, that their firewalls are me and, but the good news is they're using standard. So the compatibility with whatever firewall, we actually have a company that's got a Meraki firewall and Unify switches and it works fine. We've seen mix and match of Aruba. We've seen mix and match with a variety of equipment. We haven't really found any major compatibility issues between Unify and mix and matching your network. So if you only wanted to go with access points from Unify, you could. If you only want to go with their switches, you can and vice versa. If you want to go with their switches and access points, which do give really nice visibility in their dashboards, but then use something that's a more full featured firewall, insert your favorite brand here. That is great. We've used them with PF Sense. We've used them with Untangle, creating VLANs across these variety of brands has not been really an issue. And the majority of the problems that we get consulting calls for have very little to do with the hardware and almost always to do with the misunderstandings people have with network engineering. And that's not just for Unify. This goes for pretty much anything. We've helped people sort out problems with their Cisco networks and you name the product we've probably at some level worked with those devices and found a network engineering problem. Someone didn't read the documentation. Someone didn't understand the implementation and Unify is not immune to that. You just see a lot more noise about it because they see it sell to the consumers. So this is my thoughts on Unify product line. I feel confident selling it. We have done 300 plus access points, thousands of users on these devices. They've held up well over the years. We've got apartment buildings we've done. We've done stadiums. We've done a lot of outdoor indoor venues and we found they're going to be very reliable. But any of those venues, zero of them have a USG, zero of them have a Unify dream machine in there. Any of their routing stuff has just been kind of just not really up to par in my opinion for doing these type of deployments. So that's my thoughts on Unify.  The other stuff is I did mention though the protect and I'll leave a link again like I said to the video where I talk about them discontinuing it and my review of the protect line. I have a few videos on those. I still think and we've moved some of our small businesses over to protect because well when they discontinued Unify video we did have to do something for them so we had to replace the recording devices. That's actually been pretty reliable. They still make me a little nervous because of the road map problem they have but you know I think this is not a terrible product line and I'll leave a link to that video in case you're wondering but it's unfortunately for those wondering also doesn't tie directly to the same dashboard so you don't get as much visibility as you thought but it's worth mentioning. That's one of the reasons I put this in here. We do still sell a few of these. I'm going to do an updated video pretty soon on my review of protect because it's had a few updates and a few features but that being said if you're interested in this you don't have to sign up. You don't have to become any type of ubiquity partner. I don't really dive into any partner programs with them or I'm not aware of any that would offer you anything unless you're buying absolute incredible quantities and you want to go directly to them. The margins are not that great focused on selling the solution and that's what we do and if you need consulting hey like I said in my little trailer in the beginning we do offer consulting for equipment and if you're interested in hosting for it I got a link to hostify down below if you're interested in them. Also you can talk to Riley and see his opinion on Unify Equipment as well. He books times to help people and their decisions with things related to it if you've got questions about it. All right thanks and thank you for making it to the end of the video. If you like this video please give it a thumbs up. If you'd like to see more content from the channel hit the subscribe button and hit the bell icon if you like YouTube to notify you when new videos come out. If you'd like to hire us head over to laurancesystems.com fill out our contact page and let us know what we can help you with and what projects you'd like us to work together on. If you want to carry on the discussion head over to forums.laurancesystems.com where we can carry on the discussion about this video other videos or other tech topics in general even suggestions for new videos they're accepted right there on our forums which are free. Also if you'd like to help the channel out in other ways head over to our affiliate page we have a lot of great tech offers for you and once again thanks for watching and see you next time.


Yeah, read the movie. If you look at the movie, notice, I'm the one who fixes the bug, right? Joe and Mike are just sitting there complaining about it. I'm the one who actually fixes the bug. Yeah, that is Mars, from the picture from the Curiosity rover. I haven't got Alang on Mars yet, but it's a goal. So yeah, okay. Oh. So yeah, the Alang rationale.  Okay, that's the goal anyway. So we have to start. Okay, so what's a rationale, right? It's sort of fundamental reasons, the basis, next position of principles or reason. Just trying to explain why things look like, what they look like and why they look like they do. And the question is, why should we bother having one? And a simple reason, well, one simple reason is it just helps users to understand how and why they should use things. So you can see this concept, this construct was designed to do this, which makes it easier to understand when you should use it. To help the language designers, if you're going to extend the language, try and keep track of what's going on, help the implementers, of course, so they can say what features we consider interesting and help people wishing to extend the language. I can say now, one very serious error we made is that we never wrote down why things look like they do. Okay, so we had long discussions about this. We had discussed things for years, literally, and we arrived at a solution and we thought this was good, but we never wrote down why things look like they do. After all, I worked with them, we thought they were self-evident, right? So how could anyone else, how could anyone not do it this way?  Not everyone agreed. But so I would say it's a recommendation to Chasse and the Alexia team, if you, when you make a decision for something, describe why you've made that decision, why you've done this and not something else, right? It will help people along for much later. And one more thing, I haven't found this very important because we were talking to people later on who we considered to be in the know and they did not realize why we did some things. Actually, what was the reasoning behind it? Well, actually, why things looked like they did. So it's a very, I think it's a very important issue. Yeah, I found, I've forgotten one slide, concurrency and parallelism. So our language originally is all about concurrency. OK, so concurrency, from my point of view, is well, what's the difference between concurrency and parallelism? Now, if you go and look at definitions, many people just equate them. I don't. I take another view, which is not mine. I've taken it from others. Where concurrency, that's a feature of the language, of the problem or of your solution. The problem has lots of things going on and more or less at the same time. Therefore, I want a concurrent way of describing that solution. That's the problem. Paralism, that's what your underlying system provides for you. So you might have one core, you might have 100 cores, you might have 100 machines or 1000 machines. That's the parallelism of it. And they're two different things. So you can run a concurrent language on top of a single system, which was what our language was done for the first 10, 15 years. And then you'll still get all the concurrency, but you won't have parallelism. You can run on a parallel system and you'll get parallelism and concurrency. So yeah, that's just it. So the problem, this was the problem we were trying to solve. So Ericsson had, well, a switch called AXE, they still have it. And it was and is a very successful product. It made Ericsson a ton of money, it was a very successful product as such. But how do you make programming these and maintaining these applications easier? So it was a difficult thing to maintain and keep and work and extend. But you had the requirement of the characteristics. They could not change how to behave, exactly the same characteristics of the system. And a bit about the problem domain here. So yeah, this is from a thesis my, well, the boss at the lab, Bjarne Decker wrote about some of the problem domain we were looking at. So yeah, if you look through some of them, you need the concept of time in the system. Things will happen at a certain time, we should not take, we should take a certain time to do things. They need to be distributed. Again, if you are, we'll get back to that more later, but if you want to make a truly fault tolerant system, you need at least two computers. However good your system is on one computer, when someone pulls a plug on that, it goes right, you need at least two computers. So you need distribution. Okay, we were controlling hardware, it was a very large software system. It was quite complex functionality in it. So I've got a big system, I make a change here and it affects a lot of other things I probably hadn't thought about originally. It should be in continuous operation over many years. And this is the cruncher, really. So typically from those days, I mean a telephone switch, that could be something the customer be using for 20 years, right? And it should not go down very often. So if the thing crashes, that would have cost Ericsson a lot of money, that should just not crash. And the maintenance should be, you should be able to do everything while the system is running, code upgrades and what have you. Quality requirements, yes. Fault tolerance. Again, the system should not go down if something goes wrong. You should be able to accept the fact that something, things will go wrong and how do you design the system in such a way it keeps on going anyway. And the last one is large number of concurrent activities. Even in those days, we're talking here late 80s. We were thinking of switches which might have hundreds of thousands of connections, maybe tens of thousands of calls going on at the same time, plus all the things the switch is doing anyway. So that's what I thought was quite fun reading a couple of years ago about the C10K problem that came up and which was supposed to be a very cruncher. For us, C10K was always trivial, right? If our system could not manage, well if our system could not manage more than C10K, it just wasn't interesting, right? I think they've got to see 100K now, haven't they? Or see 1 million K or something like this. But that's the level of concurrency we were thinking of. So yeah. And so some reflections on this, around this, I think might be important to point out. We were not trying to implement a functional language. The reason it is functional is because it became functional as we were working with it. We were not trying to implement the ACTA model. We actually hadn't heard of the ACTA model while we were developing it. I know the ACTA model is about from the same time. So we're not trying to say we were stealing it, we just hadn't heard of it at all. Someone came along afterwards and said, you're implementing the ACTA model. So then you go out and look at the paper and you find the ACTA model and say, oh yeah, we are. Right, yes. But that was not a goal, right? So what we're trying to do, we were trying to solve the problem. We had this problem, we were trying to make a system to solve the problem. And I want to point out here, it's not just the language. The language is part of the system. The system is a whole we're trying to work on. And yeah. So this actually had one benefit. It made the development of the language and the system was very focused. We had our problem, right? So what do we do, what do we need to be able to design this problem? And we were lucky to have a very, from very early on a small user group who were much more knowledgeable about the actual application than we were. Well, Joe and I knew quite a little, well, sorry, back. We originally started by Joe Armstrong and the reason a lot of it looks like it does is he was working on a prologue system doing a set of rules for implementing telecoms. And he says I'm number two. I don't know, I can't remember from those days, but I'll trust him on that one. And the third person was Mike Williams. And Joe and I were pretty not very knowledgeable about telecoms or the internals of telecoms. I can make a telephone call if that was about it. Mike had done quite a lot of telecoms programming, so he knew what it was about. But we had this user group. And every time we could come with a new feature, we could give it to them and say, is this useful? Is this useful for your problem? And they would come back and say, yes, this idea is very good. We can use this. They would come back and say, no, this is totally useless. We can't use it. Which actually happened quite a few times, actually. So yeah, that made our focus very narrow on it. And so it was about to solve the problem. So it also meant we avoided a problem. Some language and system has is that the designers have a lot of very good ideas and you find a lot of things coming into the system. And maybe each one in itself is good, but the whole becomes too much. We could avoid that problem because say, is this feature useful? Yes, then we put it in. No, we just don't put it in. Now I think Francesco said that probably Joe and I were more interested in adding new fun features into the language than Mike was. He was a sort of sensible person here for this. But yeah, that's one reason why if you look at the language and you look at the system, it's very basic. There are a few other reasons for that as well too, but that's why. So where we ended up? So the language would develop iteratively with our ideas, their feedback, etc., etc. And we arrived at a number of first principles, I'll call them. So lightweight concurrency must handle a large number of processes literally even from the beginning of thinking, sort of hundreds of thousands of processes and process creation, context switching, communication must be fast. You should not have, that's something, from our point of view, using the concurrency was a fundamental design goal or design factor. So if you're coming from an OO world, you start thinking about the classes, you're coming from the concurrency oriented world, you start thinking about which processes the system has. Asynchronous communication, this is what the application needed and we thought it was a much better base to build things on. You need process isolation. So what happens in one process must not directly or indirectly affect what happens in another process. And this gets back to error handling. The system must be able to detect and handle errors. That was not an option. If it couldn't do that, it was uninteresting. You need continuous evolution of the system, which in this case referred to being able to upgrade the system with code while the system was running. Some other principles as well. Well, we need a higher level language to get real benefits. In those days we were considering languages like C, Pascal, Ada, we needed something much higher level. And the language should be simple. Simple in the sense that you need a small number of basic principles and if you get those right, you can build everything on top of that. Then you get, there needs to be a small number of them and quite powerful, then it's good. So small in this case is good. You want to avoid the case where you've got a bunch of features in the language, then you find you need something else but you can't do it with the existing features, then you have to add a new feature and then you get sort of a heaping creatureism and the whole thing builds. And the last point is what we found out the hard way. Provide tools for building the system, not solutions. Most of the time we tried to provide solutions, that's when we got the problem wrong and the solution wasn't usable. So there are a couple of, I can give some examples later on about things like that. So yeah, these are some of the basic principles of it and that sort of reflects very much into the Arlang system, to the language and to the Arlang system. So getting on a bit. So we had the sequential language and we wanted a functional language. It is a functional language. It has a different syntax. Most functional languages have a different syntax. I don't think you'll find a functional language that looks like something with the C-style curly braces. But it's a very simple language. If you look at the Arlang syntax, you'll find it is much simpler than most other languages. It might be different, but it is a very simple and it's a very consistent syntax. Safe, well yeah, no pointer errors of course. That's a good way of crashing the system. Reasonably high level. It was then and it still is actually. It's dynamically typed. I'll talk a bit more about that later. And the same thing with the last point, there are no user defined types in it. That was not by accident. That was by design. Dynamically typed. I think someone said it because we couldn't implement a type checker. Well, we implemented a compiler. We implemented the language implementation. So if we wanted a type checker, we could have done that as well too. I mean, we taught ourselves the other bit. So what we could have done that as well too. There are a lot of papers. Yes. We had quite a lot of different backgrounds. So Joe would be working before with a Swedish space agency. So he was designing systems for controlling satellites, right? Written in Fortran. Michael, he'd worked a long time in telecoms. He was a very proficient C programmer. Before I started YALANG, I'd done quite a lot of work with Lisp. Well, C, Pascal, Lisp. Both implementing and using. The same thing with logic languages. Using and implementing logic languages, especially concurrent logic languages. So we had a very broad base. And we could have done a type system. It wouldn't have a problem. I like dynamically typed languages. So about concurrency. Lightweight concurrency, yes. Millions of processes are possible. And to do that, I'll say green here. I don't know if that's the current word for it. You can't use the operating system processes. We'll just allow you to do that. Just too much memory for it. So you can have millions of YALANG processes. And I think WhatsApp's the best example of that. The best example I know of anyway. They came out two years ago and said they were running two million concurrent TCP connections on one machine using YALANG. That would mean at least two million YALANG processes. So it's possible to do it. And it works. We use processes for everything. There is no global state. So I use processes for concurrency, yes. And also for managing state and any form of resources. And processes are isolated so you can quite happily crash them without affecting anything else. And there is no global data in the system. Really, there isn't any. Yeah. So one of the first principles behind things is with YALANG things. I'm not going to call them objects but it means too much to many people. There are two basic types of things in YALANG. We have immutable data structures. That's it. YALANG terms, they're all immutable, that's it. And we have processes. And if you look in the system there, there are actually two different type of things you have in the system. The X-Table. Yes, there's an X-Table which I was mentioning that. It's in there. The table itself is immutable data structure but all the data that's in it is a normal standard immutable YALANG data. So I can go in and put new things in the table but I can't modify one of the actual data in the table. It's all immutable data structure. And actually if you look at the X-Table how it's implemented and how it works it's very process-like. You could actually implement the X-Table I've done it once with a process and get exactly the same functionality for it. So from our point of view what's a process? So from our point of view it's something which obeys the process semantics. Duh. It's parallel independent execution. The processes are independent and they run independently of each other. They communicate by using asynchronous message passing and you have links and monitors for error detection and handling. So if it's a process I can link to it and I'll find out when the process crashes. And they obey exit signals. So if it's a process and I send an exit signal it will die. That's what a process is. And how you actually implement it from our point of view is completely irrelevant. So a bit more here. Everything's run in a process. You cannot run anything outside a process. And all processes are equal. Allowing is a very egalitarian system. All processes are equal. There are no special processes, no nothing. There's nothing like you sometimes get the feel of in other systems with concurrency that you have a central threat of execution and they might start other bits and pieces like that. There is no central threat of execution. So for example, the outlink shell is just a process like anything else. That's why you can start up lots of shells if you want to. And there's no process hierarchy. Flat process space. And again as I say before process use for many things managing state, concurrency, etc. etc. Again, process communication. Everything's by messages. There is no backdoor communication method between processes. If I want to tell a process something, I have to send it a message. And all the messages are asynchronous. Okay. A biff here. That's the outlink term for built-in function. They're the ones that are basically all in the module outlink. I know LXC has split those out and moved them into different modules amongst other things, process and kernel. But they're what's built into the actual system. And all the biffs around processes and communication are asynchronous. All they do is check arguments. Then they just send things off. It happens. And there is actually one exception, also half exception to that. That's when you send to a registered name. You're actually going in a synchronous fashion and checking that registered name exists before you send to it. But the actual sending is then asynchronous. A very nice feature with this is it works with distribution. I'll talk a bit more about that later. If you want to do synchronous stuff with distribution, it's difficult. The underlying mechanism does not properly support it. If I send a message to another machine, it's very difficult to keep track of whether it actually arrives or not. OK, it might maybe be a local network, but here we're thinking wide. So it's very difficult to do that. And we mostly got that right. But we actually ended up in one case where one of the reasons, well, people hadn't realized what we were thinking of here was the asynchronous. So if you look in the definition of the link function, the return value is not asynchronous. Originally it was. You tried to link to a process. The process wasn't there. They sent back asynchronous again, saying it wasn't there, but now they put some synchronicity in there. That was just one case they hadn't realized how we were thinking since it was out. Communicating with the outside world ports. Well, there are two methods. There are ports which makes the outside world look like a process. They may process semantics.  You link to them. You send very nicely with the Alan Wave thinking. We use ports to talk to hardware in the general sense. So when you open a TCP connection you're actually opening a port to the outside world. And ports on the inside port needs to talk to someone. If something comes from the outside world it's going to become a message and it has to be sent somewhere so the port has the concept of a connected process. It only processes the port. Anything that comes in from the outside world will be sent to that connected process. There are a number of biffs now working on ports. You've got port command and a few others as well too. They didn't exist originally and if you don't want to use them you can still just send messages to the port to get exactly the same feature. Actually implementing these the feature misfeature of having the biff-port biffs actually makes the implementation more difficult. Because now the implementation has to both handle asynchronous things and biffs which also should behave asynchronously at the same time so the implementation has become a bit more complex. And honestly we had a long discussion whether we should have a data type called a port at all or just make them the same as PIDs processes. So you still really bake in the internal thing here. I'll get back to this in a moment. So error handling. The basis here is of course errors will always occur. No matter how good you are no matter how fantastic your system is no matter how much help you have in your system you will always get errors. And I don't agree with people who say if we had a fantastic type system we wouldn't get errors. You can always get errors. That's easy. Bad input. Something goes wrong in the system. Something I don't have any control over does something with my system so I get errors. So that's just a fact of life. And again if you want to build a robust system you have to handle errors in it. It will go down. So from our point of view the system must never go down. So parts of it might crash and burn you'll get errors coding errors, hardware errors, whatever but the system must never go down. Okay this was for our type of system. We're thinking here telecoms type of systems so yes if something goes wrong you might lose a call but the switch itself will keep on going. And that of course may vary or will vary depending on your type of application. So the basis here is you have to sit down and think and work out what happens when something goes wrong. What should my system do when something goes wrong? That's what Greg was mentioning yesterday in his talk about. You have this thing and it forces you to sit down and consider what should happen when something goes wrong. Should I let it crash? Should I try and save state so I can go back etc. but it forces you to think of that problem. From our point of view crash it, let the system go on. Yeah, Francesco when he flew over he had to let it crash t-shirt on, right? I don't think anyone reacted to it but never mind. Pardon? So yeah, with the other hand so yes, so this is what a system must do it must be able to detect the errors, contain the error, contain the effect of the error and handle the error and recover from it and you designing your system must decide what handling and recovering from means for you. So yeah, robust systems must always be aware of errors but you don't want to write error checking everywhere. When it explodes the code you're always going to get it wrong so I've been there done that or you just don't do it because you don't want to do it. So classic Unix programmer every system called just ignore the return values anyway, right? So what we want to do is we want to avoid writing error checking code everywhere, right? And we want to be able to handle processes crashing among cooperating processes. So the idea is that the general case is you'll have a bunch of processes working together doing something. It might be a connection, it might be a telephone call, might be something else depending on what you're doing and usually if one of those processes crashes the other processes really can't do anything sensible. So might as well crash them anyway, right? And you want to interact well with process communication. So it must fit in with the standard communication mechanisms otherwise it can become all strange. So the basic philosophy, yeah, let it crash right. If something goes wrong in a process don't handle the error cases program as for the correct case which is nice and easy, if something goes wrong crash the process. Someone else will clean up after you, right? It's a very nice idea. So yeah. And the other handling is process based, yes. If one process crashes then all cooperating processes in this case processes which are linked together should crash as well. And system process the system can then monitor processes, actions, tasks, jobs, whatever you want to call them and when they go down and crash that system can clean up after them and knows what to do. It can reset stuff, it can reset hardware, can reset resources, whatever it might be. It might be restart them. Maybe these processes are always running so the system will then restart them. Sometimes however it can be quite reasonable to handle errors locally. It might be sensible to do it locally. I'm doing something and if I get an error here I can do a sensible thing then of course you do it. But don't be scared of crashing the processes. So in our line this again applies. So far everything I've said here applies to Elixir as well. I think most of my presentation will apply to Elixir about three slides that don't. We're not scared of errors. We're not scared of errors. We're not scared of processes crashing. We know what to do. So the modules and code and code loading only have compiled code in the system. That's it. Yeah. Module is the unit of code handling. Both the unit of compilation and the unit of code loading.  If you delete a module, you delete code. You delete the module. There's no way around that. You can have multiple versions of modules. You can have two currently. I don't know exactly why we chose two originally but we did. And this means there are no inter-module dependencies at all in the system. That means you can quite happily delete and reload modules on a perlop module basis and you know you'll not make anything funny with other modules. They might try and call you and in your new code you might not have the refunction there or the module might have been deleted but you won't be... there's no dependencies between the modules. And all functions belong to a module and again, all modules are equal. Sometimes you'll see in documentation things like system modules but there's nothing special about a system module. They're just modules. The only difference is who wrote them. And there's no module hierarchy. It's a flat module space. And yes, this causes problem with module naming. LXEA has one way of handling it by implicitly... well, first prefixing the module name with LXEA then allowing dotted module names. That's just a way of getting around the flat module space. Yeah, there are quite a few things that we're missing from the very early Alang systems. Actually, the systems used to write the first products. Well, code handling... well, that was very, very, very early while we're still running on top of the Prolog system because then we're just using Prologs code handling but as soon as we started writing our own emulator about 1990 we started doing code handling. Binaries took a while before they get in. So the first couple of years we didn't have binaries at all. So when you were talking about outside worlds, the list of bytes you were sending backwards and forwards we didn't have ETS tables either. They also came in later. Funds were much later. OTP came about 1995, 1996 and NIFs are very recent. It worked, anyway. But a lot of these things you take for granted today in which are fantastic just didn't exist. Distribution, loosely coupled nodes processes. We were thinking very dynamically here so nodes could come and go. It wasn't like you set up a system with predefined system with a set of nodes on it. It was very dynamic. And it's completely transparent if you want to. So I mean you can do all the communication mechanisms with the error handling to distributed nodes transparently if you want to. Sometimes you do, sometimes you don't. And having everything asynchronous the communication and error handling mechanisms asynchronous made it actually much easier to implement implement distribution. Except for this one feature of sending to a registered name on another node. I think Cluck at class V extremity did the actual distribution I think he said something like there were four different error cases you had to handle just to get that relatively simple feature working properly. So synchronous stuff is a pain. Yeah, OTP. OTP of course wasn't the first attempt to writing systems with Ally. And the first product products made they they tackled all these problems and we've thought a lot about how do you build a system. That's one reason why some of the features look like they do because then you could use them to build systems. So most of the concepts you will find in OTP they existed before. So the first product they attacked these problems they made a system called the boss the basic operating system which solved these problems. But it was for them, it was for their product it wasn't generic. So when other products came along you needed a generic system for doing this. So a lot of these ideas, these ideas were supervision trees and linking and how you build things together they all existed in the boss they existed before the boss when we're doing things anyway. So it's a large set of libraries basically all the libraries are part of OTP it's a set of rules and design patterns for building robust systems. That's the goal, how can I make a system which is robust and fault tolerant etc etc etc. That's the goal that's the whole goal of the language. Generic behaviors, patterns tools etc supervision trees it has the concept of an application which is actually a very bad name because it doesn't mean it all means exactly what most people think about when they hear the word application so if you're looking at OTP and it talks applications think of components it's more like what it is. And each application here will have its own supervision tree using supervisor for the code in it and you build a supervision tree to handle the case to keep track of when processes die and more specifically if you need to restart them. If you don't need to restart them you don't have to put them in supervision tree you can of course, but you don't have to. The systems point of view our systems built with our language tend to be very OS like. So if you look at you start up your typical operating system whether it's Unix or whether it's Windows or whatever it might be if you look there you'll find a large number of processes running in the system which provide services in a more generic sense. They're just there talking about the system. That's very much like when you do an Alling system you'll find the system provides you with a lot of services whatever they might be. There is very seldom a central threat of execution. There's very seldom you have one threat of execution which might start its further processes as they go. That's just not, typically not the way they look. You might have something which starts processes for example if you're doing a web server you will have one process which sits and receives connection requests but then it will start another process it will start another process to handle that connection and will go back again. It's most likely will not sit and handle the fact or monitor that process or anything like this for you. So it's a very operating system like. Again getting back to the fact you can have lots of shells. Of course you can run lots of shells in your operating system as well too. You can do the same thing here. So there's seldom a central threat of execution and that reflects again into the basic primitives that went into the that exist in OTP in the Alling system. So it's not often well it can happen of course when I'm doing my thing I'll start up another something else that I'll run in parallel to do something and then get the value back from it. I might send requests to other services of course most likely I will but they're already there right they're already there and running. So there's, well just some examples so the system IO it's process based of course everything's process based here it's built around the concept of IO server for time almost. It's built around the concept of IO server and IO server is something which on one side talks to it a device whatever that might be and on the other side it talks to the Alling system and it's the interface between them. So it allows me from my code side to have generic IO functions so I can do an IO I can do an IO write to something it will go to an IO server and the IO server knows exactly what the hardware or the outside world expects from this write. So back in those days for example the bad old days you would have file systems or files which were say a set of lines of a predefined length the IO server would handle that I could write lines that were any length it would handle the fact that it might need padding or whatever it might be or things like this for and the other way around is I've got my generic IO server which knows how to talk to a device and into that I can plug in IO functions so I can have one device and I can do lots of different IO to it I don't have to read Alling terms or lines or characters I can freely mix between these things because I've separated the functionality where I've merged it in one place and I found out later that the concept we've been done for doing input that would have been rediscovered in the Haskell world and they called it an ITERAT but it's exactly the same thing how the input side from the IO in the IO servers work and it uses concepts called process groups and group leaders so there are actually process groups in Alling again we're talking about the Alling system here they're much simpler all the processes in group they just have the same group leader the group leader has no idea the process in this group is just a thing and that for example is how the front end is used so when you start up an Alling system you get a shell if you press control G in the shell you'll get back to this thing I call the user driver there and that's got a small little AI that's got a small little interface where you can for example start new shells which is what Chasse showed and I can switch between shells so I can have multiple shells running or multiple other things they don't have to be shells they can be any program any system that you start with with a start function running there and they will get a group leader and also all the default IO for each of those tasks or jobs will go to the same way and this user driver I can then use to select which one of these jobs I'm looking at typically around the problem if you look at most say running on Unix systems you start up a lot of things in parallel and they're all doing IO and you screen just a big mess this allows you to choose it that's just something in the system again it shows the operating system thought think behind the system and it's one of those things which is not really documented anyway so yeah in general cases some more specific things which I think most people here have found already pattern matching is great it's fantastic we use them everywhere you'll find the same thing in Alexia everything is for controls for doing everything for them and we have the goal which we managed to fulfill that you have a constructor how you construct data the syntax for a pattern for pulling it apart is the same so if you on the right hand side it builds things on the left hand side it pulls things apart just to make it easier to do it that works right guards they were added because sometimes you can't express everything in a pattern I might have something here which I want to be an integer and I want it to be bigger than 10 but less than 20 trying to put that it's impossible to put in a pattern I have seen patterns not alling patterns but other patterns in other languages where you can put this type of information in the pattern but I think it became very unreadable I found this was much easier for it so guards are they're tests they're not expressions they guard tests slightly not clear here they're tests most simply because they behave differently on failure so when an expression fails you got a process crash or something like an exception a process crash when a guard test fails all that happens is the guard itself says it fails and you go on to the next option so if I try and add two atoms together an expression I'll get a bad error there if I try to add two atoms together in a guard the guard just fails and being able to do building expressions in them it's a good thing but it's made the difference between between them less clear so that's see we got some alling stuff right variables just bind one references yes I know I like it if you want to complain about it don't complain about it to me what we did get what we actually got wrong I think is the variable scoping in alling so in the body of a function of a function clause there is just well no scope or one scope however you want to look at it and a variable there is the same variable everywhere there is no scoping for it and that can be confusing to be honest so if you're running from the alling point of view and you get an unsafe variable error from the compiler that means you're trying to use a variable in a strange way because of the scoping rule you might be thinking you're getting a new variable but you're not and yeah ok this affects patent well not the scoping but it affects the patent matching so if you use an already bound variable in a patent it's an implicit test it's not a rebind in LXC it's an automatic rebind unless you've prefixed it with the up arrow in which case it means you're testing against the value and the equals operator originally was a simple assignment but then we found we needed something more sometimes you need a patent so it was extended turn the left hand side you have a patent so it's typically a right to left type thing and yeah we added records which we've had a lot of flak I think after semi-colons, commas, dots and the if the records syntaxes things most people complain about if you go on to the net they were there to solve the problem so our first user group were actually doing a building a product using it said they wanted named fields and tuples so they were using tuples for our gates but wanted named fields and tuples it's a perfectly reasonable request but they wanted exactly the same efficiency as the normal tuple operations otherwise they would not use them this meant we couldn't do anything dynamic without slow so it had to be compile time so it's a compile time feature and the lack of typing means you had to include the record name for the record operations that's just a fact of life it also means from the Alling point of view I cannot use that syntax x-person.name equals Robert to set the name field of the x record because what that means is I'm taking Robert and trying to extract it from the name field and check against it that's actually a function call so I'm going to get an error we've got the Alling if, we're almost done this is let's say after semicolons commas and dots this is the thing people complain about it's a hack to be honest it's a hack so what we've found is originally there was only functions we didn't have cases we added a case but sometimes you've got the case we've got the case of the case on the left hand side there I wasn't actually interested in the pattern matching I just wanted the guard tests so you get people writing things like that on the left hand side which however you look at it is not very nice it's not beautiful so then we did the simple hack we just removed the pattern matching bit and keep the guard tests in and call it if instead that went into the compiler it was an easy thing to do and the compiler was syntactically easy it was a quick fix they only used guards it was very simple well the result was it wasn't used very much so we didn't really think about it it wasn't used very much but it does have its limitations so I'm almost done now so getting back to the problem domain if you look at these things we were thinking from the telecom side if you look at these features or these requirements of the problem you'll find they are actually quite common so most systems today say web systems or whatever any form of servers have these requirements on them if you really start questioning the people who want them most of the time they don't realise they want this to be honest they'll say yeah we want lots of throughput but you want to do lots of things at the same time yes of course a lot of these things of course you want these things type of requirements on them and there's one I forgot to put there not in there low latency that of course was a definite requirement but what goes into timing requirements for example low latency of the system and if you ask people what things they take for granted and they'll complain about when you don't provide it but they won't be in the requirement list so this thing is not just most of these things are not just telecoms okay and that's the reason why our link and elixir in this case is actually useful today because it provides a solution to a lot of these problems and most other systems don't you'll find a lot of other systems that don't provide these things GO for example provides concurrency but it doesn't it can't handle errors you just can't do the error handling you cannot use it to build a fault tolerance system or a great difficulty and also another feature is that the our link concurrency model of doing communication and doing error handling scales the fact that everything's asynchronous the fact that processes don't share state scales and non-sharing a state for example scales but actually it makes many things more efficient so you get this quite funny state you have for example cash coherency yes the system provides cash coherency but the further away your cause are from each other the more expensive the coherency becomes so yes you get it but you pay for it but you don't see it and in some cases having separate copies of it is actually more efficient because I can look at my local copy the local version of it that's much faster than looking at someone else's version of it so a lot of the things that the standard what to say thoughts about building systems break down when you get into concurrent systems we get into parallel systems especially we get into real high-scale parallelism so the model scales that's another reason why it works and just as a final pat on the back here to say how good we are these are some companies using Alling in this case I mean using Alling seriously in products so yeah I mean what's that of course they're the big one but a lot of the other ones are using Alling here as well too Eric's now it's used in their products used in some of their products used internally for testing environments Haruku, Basho, of course React and you've also found I haven't got a slide for it but there are quite a few things implemented in Alling which people use although they're not interested in Alling for example the React I'd say a lot of React users don't care it's written in Alling because it's not going to do an Alling interface anyway same thing with CouchDB part of that's implemented in Alling because they don't care they're not going to see the Alling anyway they can but you don't have to RabbitMQ same thing there eJabbaD same thing there so yeah that's it okay that's about done yes