<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0cm;
        margin-right:0cm;
        margin-bottom:0cm;
        margin-left:36.0pt;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
p.msonormal0, li.msonormal0, div.msonormal0
        {mso-style-name:msonormal;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:1931113757;
        mso-list-type:hybrid;
        mso-list-template-ids:1884989376 134807553 134807555 134807557 134807553 134807555 134807557 134807553 134807555 134807557;}
@list l0:level1
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Symbol;}
@list l0:level2
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:"Courier New";}
@list l0:level3
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Wingdings;}
@list l0:level4
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Symbol;}
@list l0:level5
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:"Courier New";}
@list l0:level6
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Wingdings;}
@list l0:level7
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Symbol;}
@list l0:level8
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:"Courier New";}
@list l0:level9
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Wingdings;}
ol
        {margin-bottom:0cm;}
ul
        {margin-bottom:0cm;}
--></style></head><body lang=EN-US link=blue vlink=purple><div class=WordSection1><p class=MsoNormal><span style='mso-fareast-language:EN-US'>Spot on. I really should allow the rubber to hit the road now, which I am doing.<o:p></o:p></span></p><p class=MsoNormal><span style='mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span style='mso-fareast-language:EN-US'>For the record, what happened in 1991 wasn’t to that I started designing the server I talk about, but that is when I accepted it as my mission to solve a problem I could no longer ignore like others still do. Erlang/OTP was one of many things I filled my toolbox with for use as and when the time comes. <o:p></o:p></span></p><p class=MsoNormal><span style='mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span style='mso-fareast-language:EN-US'>Some of the hurdles and mental blocks I am looking to break through include:-<o:p></o:p></span></p><ul style='margin-top:0cm' type=disc><li class=MsoListParagraph style='margin-left:0cm;mso-list:l0 level1 lfo1'><span style='mso-fareast-language:EN-US'>the apparent manual labour involved in setting up and managing distributed Erlang nodes including setting up physical machines, configuring virtual machines, installing OS, installing Erlang, installing the app, controlling automatic startup and shutdown, plumbing the network and hooking up release management so changes in the experimental code gets rolled out orderly and automatically,<o:p></o:p></span></li><li class=MsoListParagraph style='margin-left:0cm;mso-list:l0 level1 lfo1'><span style='mso-fareast-language:EN-US'>the incredible performance of modern hardware in a single processor node,<o:p></o:p></span></li><li class=MsoListParagraph style='margin-left:0cm;mso-list:l0 level1 lfo1'><span style='mso-fareast-language:EN-US'>the cost and complexity of monitoring virtual machines’ activity on the underlying hardware,<o:p></o:p></span></li><li class=MsoListParagraph style='margin-left:0cm;mso-list:l0 level1 lfo1'><span style='mso-fareast-language:EN-US'>that generating suitable traffic to stress test candidate code might be more troublesome to simulate than it’s worth and<o:p></o:p></span></li><li class=MsoListParagraph style='margin-left:0cm;mso-list:l0 level1 lfo1'><span style='mso-fareast-language:EN-US'>programming isn’t what gives meaning to my life but I love it and tends to get too deeply involved and thus distracted by it from other responsibilities.<o:p></o:p></span></li></ul><p class=MsoNormal><span style='mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span style='mso-fareast-language:EN-US'>So by all means, come and join me and my project. Help me overcome and/or sidestep my issues so we can collaborate at the appropriate level on that setting up this adaptive hyper-scaling platform for matching requests and resources to deliver near-real-time responses. We might even call it NoQ, NoMQ or OPR (see, no Q </span><span style='font-family:"Apple Color Emoji";mso-fareast-language:EN-US'>😊</span><span style='mso-fareast-language:EN-US'>, or Optimal Processing Resources).<o:p></o:p></span></p><p class=MsoNormal><span style='mso-fareast-language:EN-US'><o:p> </o:p></span></p><div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm'><p class=MsoNormal><b><span style='font-size:12.0pt;color:black'>From: </span></b><span style='font-size:12.0pt;color:black'>Jesper Louis Andersen <jesper.louis.andersen@gmail.com><br><b>Date: </b>Thursday, 7 November, 2019 at 16:48<br><b>To: </b>"marthin@lobeshare.co.za" <marthin@lobeshare.co.za><br><b>Cc: </b>"Erlang (E-mail)" <erlang-questions@erlang.org><br><b>Subject: </b>Re: Solving the right problem<o:p></o:p></span></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><div><div><p class=MsoNormal><span style='font-family:"Arial",sans-serif'>On Mon, Nov 4, 2019 at 1:10 PM Marthin Laubscher <<a href="mailto:marthin@lobeshare.co.za">marthin@lobeshare.co.za</a>> wrote:<o:p></o:p></span></p></div></div><div><blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm'><div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>Hi everyone,<o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'> <o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>Please pardon my long absences from this awesome (mature) community and my limited knowledge which is likely outdated as well. I’ve known since 1996 when I was first told (in confidence by an Ericsson Radio Systems liaison) about Erlang that it would have to play a role when I eventually get to implementing the system I’ve been working on designing since 1991. That big day is drawing near, so now I’d like to reaffirm my high level understanding of what the language is suited for.<o:p></o:p></p></div></div></blockquote><div><p class=MsoNormal><o:p> </o:p></p></div><div><div><p class=MsoNormal><span style='font-family:"Arial",sans-serif'>If you have been working on this design since 1991, I would recommend you start some experiments into parts of the design. You can often simulate a large amount of devices, and you can also simulate the server side. If there are multiple servers involved, solving the problem in the small scale is often useful: you get to learn about some of the small-scale problems of the design right away. As you scale such a system up, you will run into trouble that has to be solved. But often such solutions stem from the smaller scale ideas you tackled first.<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-family:"Arial",sans-serif'><o:p> </o:p></span></p></div><div><p class=MsoNormal><span style='font-family:"Arial",sans-serif'>At scale, I claim any system breaks down. The real work starts when you reach that level. Almost any web server technology has a breaking point, and you will hit it sooner or later. Erlang has a breaking point and you will hit it sooner or later. It also depends on the nature of the problem you are trying to solve. If you are looking at number crunching, I'd definitely design a hybrid where that is outsourced to some other language suited for fast execution. On the other hand, if you are looking at a problem where you have massive concurrency, you might get away with Erlang or Go. If you add the requirement of robustness on top, at a fine granular level, then I know no other thing than the Erlang stack which can do it. Other languages achieve robustness by containerization of computation and then restarting faulty containers. Yet, the disadvantage of such a method are that errors in such systems can "bleed" to sibling requests. This might not be suitable, depending on the problem at hand.<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-family:"Arial",sans-serif'><o:p> </o:p></span></p></div><div><p class=MsoNormal><span style='font-family:"Arial",sans-serif'>But you really need to start experiments. It is almost impossible to design a software system without the duality of design and implementation helping each other along. That is, design leads to partial implementation. Partial implementation leads to insights. And insights leads to a better design. Over time, it is often the case the design shrinks to a fundamental core. You want that as small as possible as it makes it understandable.<o:p></o:p></span></p></div><p class=MsoNormal><o:p> </o:p></p></div></div></div></div></body></html>