Asterisk PBX


  • BINNED

    This will be an on-going thing as I (re)discover gems of utter annoyance frustration WTFery uniqueness in Asterisk.

    I mentioned a few times here I work with PBX software. At the core of the whole thing, dealing with all the actual calling and whatnots, is Asterisk, an open source PBX that lets us do all the fancy stuff the users actually see. Other two main components are a C++ service that handles some rather nasty realtime monitoring stuff (some of the reasons for even having that coming up), and a web interface so the users can click on pretty icons.

    Now, even with all custom and in-house the bells and whistles around it, the base telephony configuration is still done in Asterisk itself. And what a wonderful thing it is.

    extensions.conf

    Along with the basic config (which is all in ini-style files), you need some logic to route the calls, redirect calls to queues etc. That's where extensions.conf file comes in. Allow me to introduce you to the wonderful world of Asterisk conf syntax:

    exten => 100,1,Verbose(1,Incoming call to extension 100)
    exten => 100,2,Answer()
    exten => 100,3,Dial(SIP/100)
    exten => 100,3,Hangup()
    

    This code will simply print some text to console (here mostly just to pad the code), ring the phone with extension 100 and end the call once one of the participants hangs up.

    Did you notice the beauty of manual line numbers? Yup, you need those. Oh, and Asterisk calls them "priorities", so if you have any prior programming knowledge good luck with reading the documentation. Which... I'll get to it.

    Ok, good news, we can fix this, somewhat:

    exten => 100,2,Verbose(1,Incoming call to extension 100)
     same => n,Answer()
     same => n,Dial(SIP/100)
     same => n,Hangup()
    

    Well, at least it saves you some typing...

    Goto(spaghetti)

    Sooner or later, there will be need for some control structures. You know, if, switch, while... Well, tough, all you get is Goto, GotoIf and GotoIfTime(no, I'm not kidding with that one). Well, there's one more but... in it's time.

    So yeah, goto considered harmful? You don't get anything else, so jam that noodle. At least labels are straightforward and not at all confusing... right?

    exten => 100,1(this_is_a_label),Verbose(1,Incoming call to extension 100)
     same => n(also_this),Answer()
     same => n,Dial(SIP/100)
     same => n,Hangup()
    

    Well, shit.

    Functionally suboptimal

    Speaking of control structures, there's also one thing you expect as a programmer. Functions. Well... kinda? You get "subs" (QBASIC, anyone?). so, how do you use subs?

    [subAddStuff]
    exten => s,1,Verbose(1,This is a sub)
     same => n,Verbose(1,The thing with square brackets is called a "context", and in this case it is the name of the sub)
     same => n,Verbose(1,First argument is ${ARG1}. ${varname} is how you get the value of a variable)
     same => n,Verbose(1,Second argument is ${ARG2}... etc.)
     same => n,Verbose(1,Return value is saved into a global variable GOSUB_RETVAL)
     same => n,Return(Math is fun: $[${ARG1}+${ARG2}] is what you get when you add ${ARG1} and ${ARG2})
    

    Did you notice my irrational fear of spaces by this point? Yeah, it's justified. If you call a sub and put spaces between the comma and the argument it will actually add a space to the argument. WTF.

    So yeah, last flow control commands you have are GoSub and GoSubIf. They are a source of endless joy.

    Also, you might be wondering what's up with s extension in the sub example. I'll get to that next time. Now I should go do some real work. In Asterisk. shudders

    Edit: Fixed a major fuckup in example code... Forgot Dial, so it basically did nothing 😊


  • BINNED

    @Onyx said:

    Asterisk

    I was going to say Asterisk is the RWTF but then the rest of the text did just that.

    <Blakeyrand>ASTERISK IS SO FUCKING SCREWED. IT IS PROOF OF THE SHIT QAULITY OF ALL OPEN SOURCE SOFTWARE</Blakeyrand>


  • BINNED

    @Luhmann said:

    I was going to say Asterisk is the RWTF but then the rest of the text did just that.

    To be fair, once configured the thing is rock solid. And efficient as all hell. I saw it running on a Mikrotik router, the cheapest one available at that, with no problems.

    But dear $DEITY, the syntax!



  • The real real real WTF is that you guys haven't heard of AEL2, or are not using AGI/AMI at this point. Instead you choose to be masochists.


  • BINNED

    @wft said:

    The real real real WTF is that you guys haven't heard of AEL2, or are not using AGI/AMI at this point. Instead you choose to be masochists.

    <movie announcer voice> Coming next in this thread. </movie announcer voice>

    I felt that opening that can of worms required some [context] so I started with oldschool conf files. You do know AEL/AEL2 gets parsed to this in the background, right? Also, there are some consequences to using subs (which AEL2 macros get parsed to) that I will come to.

    Oh, and AMI? I did mention a C++ service, didn't I? What do you think I hooked it up to?


  • BINNED

    @Onyx said:

    <movie announcer voice> Coming next in this thread. </movie announcer voice>

    OOOOOOOh .... I can hardly wait!



  • @Luhmann said:

    <Blakeyrand>

    Is that the unholy child of Blakey and Ayn Rand?



  • The "s", for "start". Or for "catch-all", depending on context.

    What's wrong with you?


  • BINNED

    @wft said:

    The "s", for "start". Or for "catch-all", depending on context.

    I know what it does. I'll explain my gripe with that (not the s extension itself, but some of the stuff Asterisk does with it) in the next wall-o-text. Coming later today when I return home.



  • Let's better bring it to a more general WTF: a piece of software is started with some simplistic assumptions which feel very elegant at its very first release. Then it expands upon them, while retaining backwards compatibility with those initial assumptions, growing ugly warts on the way. One day a newcomer comes and screams, Hey! You are SO FUCKING INCONSISTENT! What the royal fuck!

    You can apply that to, most notably, Perl, or Asterisk, or PHP, which mostly consist of warts (perceived by some as ugly and others as cute; it's a totally love-hate thing). Actually, most pieces software in actual use, with a decade or couple of decades of history, have this pattern to some extent.

    And guess what, that's right. Sorta.

    Because historical reasons are actually a thing. You disregard them, and they bite you.

    If you are a for-profit company, like Digium is, you have to care for your client base, and that's what compatibility is for. And they might need supporting their old configurations, which means they might have resources for occasional patching and combing, but not for a full-blown rewrite. And most important, those clients are the ones who were giving you their bucks from the day one, so you can't just dismiss them without being a total asshole.

    I happen to like Asterisk because it does what I require from it and it's terrific; I don't have profound knowledge of it, though, because it suffices for me that I do Perl every day in two biggish projects.


  • BINNED

    Dude. Chill on the fanboy rage.

    Did I ever state that I hate Asterisk? <blakey>Stop putting words into my mouth!</blakey>

    I actually commended it on being fast and stable as all hell. I really think you'll sooner get the Linux kernel to panic than crash Asterisk (if you didn't fuck up the config that is). And I barely ever managed to panic my kernel anyway.

    Look, I give same shit to PHP, but I still use it, and it does the job. I give shit to JS, but hell, I still use it and get shit done. And I use C-freaking-plusplus, which most of the people here hate with passion (my reading of it at least). And while everyone pretty much knows about PHP, JS and C++ bullshit, almost no-one knows about WTFery that's Asterisk configuration. Hell, I wish I saw a post like mine when I started dealing with it. Because I'd know about caveats I had to learn on my own and not lose days figuring out that I just need to remove a freaking space character.

    Maybe I should've placed a disclaimer in my OP. But then again, I always take everything I read with a grain of salt anyway. Doubly so on TDWTF. So how about we just have fun, laugh, and cry together, and not go on a crusade next time someone says "TRWTF is PHP!". Deal?


  • ♿ (Parody)

    @Onyx said:

    Maybe I should've placed a disclaimer in my OP.

    No. I hope that doesn't become a thing.


  • BINNED

    @boomzilla said:

    No. I hope that doesn't become a thing.

    It would be boring if I did anyway. At least I sparked some flaming this way.


  • ♿ (Parody)

    Yeah. I think we all know that backwards compatibility and weird shit that piles up is (usually) there for a good reason. That doesn't mean we can't bemoan the WTFiness of it all.



  • @Onyx said:

    Dude. Chill on the fanboy rage.

    Where did you see a rage, dude? Huh.

    @Onyx said:

    And while everyone pretty much knows about PHP, JS and C++ bullshit, almost no-one knows about WTFery that's Asterisk configuration.

    Because Asterisk-wielding engineers are considerably rarer beasts to find than junior PHP programmers from dumbfuckistani bodyshop companies. It's kinda expected, don't you find?

    All I told was actually that those WTFs you see are a lesser evil, given the alternatives (rewrite everything from the ground up). And that there's a whole class of WTFs grown that way.

    Note that I actually managed to belly up Asterisk 1.6.x. There was something in its event loop that made it busy-loop and burn 100% of CPU instead of idly polling sockets.


  • BINNED

    @wft said:

    Where did you see a rage, dude? Huh.

    Misrepresentation of the tone of the post on my part in that case. Text-only communication is fun!

    @wft said:

    Because Asterisk-wielding engineers are considerably rarer beasts to find than junior PHP programmers from dumbfuckistani bodyshop companies. It's kinda expected, don't you find?

    Yes. And that's why I wanted to shed some light on it. As I said, if I knew all of this when I started learning about Asterisk it would save me literally days of work. Actually, even more due to dreaded s extension thing that I'll write up. I don't want to do it now since I don't trust the combination of Discurse and flaky mobile connection.

    @wft said:

    All I told was actually that those WTFs you see are a lesser evil, given the alternatives (rewrite everything from the ground up). And that there's a whole class of WTFs grown that way.

    Then we agree they are WTFs and worthy of laughing/crying (take your pick) about them? Justified in a way? Yes. But if they are WTFs they are worthy of being here.

    @wft said:

    Note that I actually managed to belly up Asterisk 1.6.x. There was something in its event loop that made it busy-loop and burn 100% of CPU instead of idly polling sockets.

    Heh, nice. I started on Asterisk 11.0 and the only way I managed to crash it so far was my own stupidity.

    Note for people who think 1.6 was centuries ago: it wasn't. 11 followed 1.8 IIRC. Yeah, that bullshit. I hate that, whoever does it. Looking at you, Sun.



  • @Onyx said:

    Then we agree they are WTFs and worthy of laughing/crying (take your pick) about them? Justified in a way? Yes. But if they are WTFs they are worthy of being here.

    These WTFs should rather serve as warnings to both beginner and seasoned software architects who need to have at least a bit of insight of how their creations might grow, and willpower not to succumb to "cute-looking" or "witty" (Monty Python style) solutions. A little polar bear cub looks astoundingly cute, white and fluffy, but then it grows 160 centimeters high, gets razor sharp carnivorous teeth and cravings for bloody meat, all the while staying white and fluffy overall. Fluffiness notwithstanding, it's hardly cute. Software is totally like that.

    I'm pretty damn sure that this "s" extension was a real win when it first came out.



  • @Onyx said:

    Note for people who think 1.6 was centuries ago: it wasn't. 11 followed 1.8 IIRC.

    1.4 (praised as one of the best asterisks around, still widely deployed and magnificently stable, a Windows XP and FreeBSD 4.11 of all asterisk versions), 1.6 (hell hole of bugs and grue waiting to eat you), 1.8 (grue mostly gone but a few sheep-sized bugs roaming free), 10 (now those features get usable), 11 (it's okay, really).


  • BINNED

    @wft said:

    Because historical reasons are actually a thing

    The PBX part in the name also demands it to be backwards compatible with some '60 💩. No matter who makes the PBX, how well the lights blink and how shiny the web management interface is there is somewhere a 💩 hidden just because it is supposed to be compatible with rules and regulations almost from when Bell invented the damn thing.


  • BINNED

    Ah. I thought there was a 10, but since it never comes up in any results when I look for something Asterisk-related I thought it was just my memory playing tricks on me. For once, I should've listened to my own head.


    Filed under: Usually a bad idea though


  • BINNED

    Ok, so, time for part two I guess. And since there was much contention about the s extension, it's high time I addressed it.

    Now, purely from the standpoint on getting telephony shit done, it's a great tool. As @wtf said, it's a catch-all. You can use it to create subs, do generic stuff you need happening for every call... It's a great tool to have overall. There are also two more generic extensions: i for invalid, and h for hangup, which executes after a call is hung up (if it's in the same context).

    I should elaborate on the context as well. Think of it soft of like a namespace. You can assign extensions, trunks (be it SIP or otherwise), and generally any kind of code really to a context. And unless you explicitly specify it, Asterisk will never execute any code outside of the context it's currently in.

    Calling Mr. s

    In previous post I noted that sub name is the same as the name of the context. That's because GoSub (and variants) is actually just syntactic sugar. All it does is it sends the call to a context (sub), and since you (by convention) declare only one extension in it, it gets caught by the catch-all s.

    And therein lies the problem once you step away from the problem of "make the phone ring" and go into user interfacing land. What's the most important thing users want to see that's related to their phone system? CDRs (Call Detail Records) of course. They want to see call listings, billing information, missed calls, that kind of stuff. Now, Asterisk provides a built-in CDR facility. Unfortunately, it pretty... basic.

    This is where I met the dreaded Mr. s. I should note here that I was brought on to the team as "the web guy". The premise was simple: Asterisk dumps CDRs into MySQL. I write a UI that can read that data and present them in pretty tables.

    But Asterisk takes a very simplistic approach to CDRs. All it does is it dumps the current Caller ID and extension it's on (along with other data, but this is the important bit atm) into the DB. You see the problem? As a good programmer, you broke up your code into manageable chunks. All your common operations (playing voice messages, waiting for user input, etc.) are now in neatly separated subs, each doing one thing and doing it well.

    But what happens when a caller gives up and hangs up during one of those subs? Well, naturally, Asterisk dutifully records that, and you can now proudly show your user that their customer, calling from 555-2345, talked to good old Mr. s.

    Now, I had to write this whole wall of text so you could understand why I didn't do the things I will describe later on in a much simpler fashion. It can all be blamed on Mr. s. These days, however, me and Mr. s are good friends. Though I do have a bone to pick with some of it's progeny. But I have to leave something to write about for the next time I'm bored.



  • NEEDS MOAR GLOBAL STATE!!! :)

    (And a paragraph to make discourse happy)


  • BINNED

    @wft said:

    NEEDS MOAR GLOBAL STATE!!!

    Oh, the variable scope thing you mean? Will not get left out, believe you me. I'm getting to AEL and it's easier to explain code with AEL than with old format :P



  • Once I came close to having to do work in Asterisk. It was completely incomprehensible. Your posts make this mess somewhat clearer. And also make me happier my would-be project fell through.

    Keep them coming.


  • BINNED

    @cartman82 said:

    Once I came close to having to do work in Asterisk. It was completely incomprehensible. Your posts make this mess somewhat clearer.

    They tried to create a language where people who know their shit when it comes to telephony but don't know a thing about programming could do stuff. Weirdness was expected. They did produce some avoidable WTFs IMHO where most of my gripes come from.

    Really, my biggest complaint is that AEL, that was, from the looks of it, created to fix that mess wasn't a clean cut. The whole Asterisk is very modular. If they just created a separate module that parses pure AEL I'd probably not even post these rants.

    Edit: To clarify: in their situation I'd leave 2 modules: old conf file module that is backwards-compatible, and new AEL module that's a clean slate when it comes to interpreting user configuration.


  • BINNED

    So, I have my automated script downloading and installing Asterisk running on a machine (oh, the irony) so I have a few minutes to write here. Onwards!

    Joining the team

    At this point I should probably explain that I joined a small team of sysadmins and telephony engineers as the only "real programmer". That is to say, a guy that was tasked for writing a web interface we could offer our customers so they could interface with their PBX easier.

    Now, there are stuff like Elastix, Trixbox and FreePBX which are Linux distros with Asterisk preinstalled and web-based configuration interfaces, but they suffer from a few problems like being a pain in the ass to add custom code to, and, of course, the dreaded Mr. s. So we decided to roll our own.

    As time went on (and I waged my battle against Mr. s and his friends messing with my queries) I heard other people in the team being annoyed at getting stuck trying to add some customer-specific function. So I slowly started poking around Asterisk with them, helping out with the general programming logic and finding solutions. As time went on my voice became an important one outside of just being "the web guy". And while pulling my hair once more trying to graph out all the GoToIfs we'll need I clicked on a link on the wiki. It read AEL - Asterisk Extension Language.

    Meet AEL, our  Lord and savior

    There was the sense of being saved from drowning at the last second as I scrolled through documentation. Proper control structures! Loops! Switch-freaking-case statements! Proper single- and multiline comments using // and /* */, not ; like in the old .conf files. This is the shit! So, to recycle my previous code, I present to you, the majesty of AEL:

    100 => {
        Verbose(1,Incoming call to extension 100);
        Answer();
        Dial(SIP/100);
        Hangup();
    }
    

    Right now people who never saw Asterisk are probably going: Hey! I can deal with that! Oh, you still didn't see the best part. Subs? We don't need no stinkin' subs! We got macros bitch!

    macro addStuff(x,y)
    {
        Verbose(1,This is a macro... bitches!);
        Verbose(1,It has a proper name now!);
        Verbose(1,And you can name arguments! Oh yes! Value of x is ${x});
        Verbose(1,Second argument value is ${y}... etc.);
        Verbose(1,And now, adding stuff!);
        z=${x}+${y};
    
        return;
    }
    

    But wait, you ask, why "macro", why not "function"? Look at the return. No, I didn't fuck up. You can't return values from it. Which is even more weird once you understand that AEL gets translated back into old .conf files! So the expansion should be simple, really!

    &macroName(arg1,arg2); // &name is how you call a macro
    
    //Gets translated to:
    Gosub(macroName,~~s~~,1(arg1,arg2)) // ~~s~~? Yup, told you Mr. s has progeny.
    

    So really, the proper expansion with return values should be nothing more complicated than:

    x=&macroName(arg1,arg2);
    
    // Gets translated to:
    Gosub(macroName,~~s~~,1(arg1,arg2))
    Set(x=${GOSUB_RETVAL})
    

    But nope. I guess they feared someone trying to create a recursive function and didn't want to deal with it. Don't know really, but it is what it is.

    Unfortunately, this one is, once again, relatively WTF-free since I spent all this time explaining shit and now I have to go back to work (and I was just getting to the fun bit). I probably could've just skipped all this but I'm kinda in the mood of writing in this semi-narrative style. Deal with it or don't read at all I guess.



  • Does the Asterisk configure script still output its logo in ASCII art when you run it?

    configure: Menuselect build configuration successfully completed
                   .$$$$$$$$$$$$$$$=..
                .$7$7..          .7$$7:.
              .$$:.                 ,$7.7
            .$7.     7$$$$           .$$77
         ..$$.       $$$$$            .$$$7
        ..7$   .?.   $$$$$   .?.       7$$$.
       $.$.   .$$$7. $$$$7 .7$$$.      .$$$.
     .777.   .$$$$$$77$$$77$$$$$7.      $$$,
     $$$~      .7$$$$$$$$$$$$$7.       .$$$.
    .$$7          .7$$$$$$$7:          ?$$$.
    $$$          ?7$$$$$$$$$$I        .$$$7
    $$$       .7$$$$$$$$$$$$$$$$      :$$$.
    $$$       $$$$$$7$$$$$$$$$$$$    .$$$.
    $$$        $$$   7$$$7  .$$$    .$$$.
    $$$$             $$$$7         .$$$.
    7$$$7            7$$$$        7$$$
     $$$$$                        $$$
      $$$$7.                       $$  (TM)
       $$$$$$$.           .7$$$$$$  $$
         $$$$$$$$$$$$7$$$$$$$$$.$$$$$$
           $$$$$$$$$$$$$$$$.
    

  • BINNED

    Yup, still there and not going anywhere at a guess.



  • Is AEL2 broken in the same way? (Answering myself: yes it is.)


  • BINNED

    @wft said:

    Is AEL2 broken in the same way? (Answering myself: yes it is.)

    Note:

    I'm talking about AEL2 all the time actually, I'm just not used to specifying it as such and just refer to it as AEL. Hard to shake that when you talk about it daily in that manner.

    It's like just saying C++ instead of C++11, most of the time it's not important unless you're highlighting the differences specifically.


  • BINNED

    So... I was tired and now I can't sleep. Just awesome. So... another chapter?

    All your syntax is belong to us

    So last time I said that this works:

    x = ${whatever};
    

    Well... kinda. As I said, AEL gets parsed back into the old .conf format. And the parser has some weird ideas at times.

    First of all, the variable first gets expanded and then shoved back into a Set(). That means it will pass the value into it, not ${whatever}. That also means that, when .conf finally gets parsed it will misinterpret what you meant in frustrating hilarious ways. So, some general rules:

    • Don't you dare use commas! It will think it's another argument, and since Set() takes only one argument it will spew a syntax error at you.
    • You can't use pipes. Well, you can, but expect to be showered by millions of warnings. You see, long long time ago Asterisk didn't use commas as parameter separators. It used pipes. And to this days it screams at you for not converting your dialplan properly. I usually just open the source code and comment the damned warning. It sounds stupid, but it really doesn't change a thing other than suppressing useless warnings.
    • Quotes are evil. In general. Oh, you'd think quoting means string. BZZZT! WRONG! Everything is a string anyway unless you specifically say it's not. So your variable is now quoted. Have fun using ${x:1:-1} (strips first and last character from the value) everywhere.
    • Semicolons? Don't even think about it!

    Well, there's a solution at least. If you use Set(x=${whatever}); in AEL it won't get mangled. So much for nicer syntax.

    Oh, and what if you want a NULL value? As in, empty string? Set(x=""); will result in value of x being two literal quotes. Don't worry, there's a way:

    Set(x=);
    

    Yup. Oh, it will scream bloody murder at you, but it will work. Well, you probably could do:

    Set(x="");
    Set(x=${x:1:-1});
    

    But that's just too much work. Fuck it. And before you ask, yes, there is a reason I called it NULL. Because there's a function called ISNULL. There's just no sane ways to set a variable to NULL.

    Regexes are fun!

    Oh, you can do regexes. In multiple ways even. First, there's Asterisk's regex used for matching extensions. But it's pretty limited. You have a . which is equal to [0-9]+. You have a ! which is equal to [0-9]*. And then you have X which is equal to [0-9], Z which is equal to [1-9]... There are more but I don't remember them off the top of my mind.

    Now, for proper, PCRE regexes there are two functions. One is REGEX("regex" string) (yes, that's a space as delimiter there). It will return 1 or 0 only.

    Now, the second one is more fun: $[string:regex] will return either 0 or a backreference. A backreference. The first one to be more exact. And you can, technically, use it to replace things. You see where this is going. So, I present to you the actual code, my own private abomination, the thing that should burn in the fires of Mt. Doom but I fucking need it and by some miracle of $DEITY, it works!

    macro regexMatch(p_regex,p_string)
    {
        Set(r_regexMatch=0);                 // Match success
        Set(i=1);                            // Backreference counter
    
        if(${LEN(${p_regex})}=0 || ${LEN(${p_string})}=0) return;
        
        Set(match=$["${p_string}":"${p_regex}"]);
        
        if(${LEN(${match})} > 0)
        {
            if(${match} > 0)
            {
                Set(matchedString=);   // Contains actual matched substring
                Set(r_regexMatch=1);   // Indicate a successful match
        
                // "Ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn"
                while($["${p_regex:1:-1}":".*\([^\)]+\)"] || $["${p_regex}":".*\([^\)]+\)"])    // While we have more groups to process
                {
                    // Save the first backreference
                    Set($${i}=$["${p_string}":"${p_regex}"]);
    
                    // Get the string length of first regex group
                    Set(matchLength=$["${p_regex}":"^[^\(]*?\([^\)]+\)"]);
    
                   // Append the next part of regex to matched substring
                    Set(matchedString=${matchedString}${\${i}});
    
                   // Remove the first group from regex    
                    Set(p_regex=${p_regex:$[${matchLength}]});
    
                   // Remove the first group from regex
                    Set(p_regex=${matchedString}${p_regex});        
                    Set(i=$[${i}+1]); // Increment counter
                
                    if(${i}>9) break; // Max out at 9 backreferences, anything more is ambigous
                }
            }
        }
    
        // Clean up any extra backreferences from previous macro calls
    
        // Loop until we find a non-set variable or exceed the backreference limit
        while($[${ISNULL(${\${i}})} != 1 && ${i}<=9])
        {
            Set($${i}=);
            Set(i=$[${i}+1]);
        }
    
        return;
    
        // Formatting this was a PITA
    }
    

    Oh, and did I mention? Since if gets parsed into GotoIf whose syntax is:

    GotoIf($[expression]?label_for_true:label_for_false)

    it will constantly throw warnings about expressions being redundantly wrapped in $[]. but it won't work if you don't wrap them. So there.

    Yes, it's a regex. Parsing a regex. And saving backreferences to global variables named $1 ... $9.

    Ah, yes, globals... getting to that next time I think.



  • @Onyx said:

    First of all, the variable first gets expanded and then shoved back into a Set().

    wat.mkv (13GB)

    They must be kidding.

    On my previous job I've had to work with a web beast, written in Perl, for which the original authors had this great idea of making their own template engine, because it's, you know, fun. The parser there works in recursive ascent fashion: expanding the variables and the deepest nested macros, working its way up until there are no macros left.

    A recipe for disaster, thus, is as follows:

    • The nested macros
    • EVAL macro which can take any perl code
    • User input

    Because if you put into some database field anything resembling a macro, it will get interpreted. Fuck fuck fuck fuck fuckity fuck it!

    I actually managed to execute an SQL statement using that fucked system.

    Also, I thought they were the only ones stupid enough to come up with a parser like that. Note, they all have CS degrees and are fucking proud of it. Now I see that there are other such "graduates" in Digium, too...


  • Discourse touched me in a no-no place

    @wft said:

    I thought they were the only ones stupid enough to come up with a parser like that.

    It's a common WTF. Getting a macro system right is surprisingly hard…



  • There are more books on writing parsers and compilers that I would be able to read in my limited lifetime.


  • BINNED

    @wft said:

    @Onyx said:
    First of all, the variable first gets expanded and then shoved back into a Set()

    wat.mkv (13GB)

    I haven't really checked in source, mind. But if you try to set a variable to a value of something that contains a comma you'll get a syntax error at runtime. Shoving it into a Set() from the start works.

    So whatever it does to it, it's broken. But using Set right away skips the broken part and executes as it would if you put it in a .conf file.



  • But it's fucking sick that I must actually give a fuck what the fucking translator translates my code to. It defeats the whole point of AEL being there in the first place. When I write AEL code, the only thing I ever need to give a fuck about is AEL itself.

    It's as if I need to care about endianness of every fucking number that's passed on to my function because someone was a lazy moron.



  • (Please don't mind the number of "fuck" occurrences. It was actually cut by 2/3.)


  • ♿ (Parody)

    I would say it's as if the AEL documentation is incorrect in that they don't tell you not to do this stuff.



  • I found your post hugely therapeutic. I have had the unfortunate experience of using Asterisk for over two years now and I have never had a week where it has functioned without issue.

    This sneeze-and-you'd-break-it Private Branch Exchange is "marketed" as an out of the box solution geared towards providing society with a Private Branch Exchange at a fraction of the cost of paying a business telecoms company to provide the same service.

    I was attracted by the façade that Digium created by the potential that appeared to be presented to me to offer charitable services out of my pocket through a network of work from home Volunteers with the telephone support to back this up on a shoestring budget. I receive no funding and I have always believed it is good to try and provide support to people who are less fortunate than myself. As a person who is out of work and disabled, I have little option but to avoid costs of setting up an expensive corporate infrastructure as I simply cannot afford to do so.

    I started my venture into the murky "Asterisk" world in early 2013 by visiting the Digium website. I subsequently utilised an old laptop to install a package that included CentOS, FreePBX and Asterisk as a package known as "Asterisk Now". I started off with a home internet connection with Sky here in the UK and had a dynamic IP. I spent several months with the help of a kindly chap in the #Asterisk IRC channel on Freenode (the channel that later became the bairn of my life) attempting to make up for the lack of security that Digium shipped within the package.

    I should mention that I am not a seasoned programmer, I knew next to nothing about Linux and, in return for the glossy enticement of Digium, I delved into a massive undertaking that required a massively steep learning curve. Digium does not make clear the level of programming knowledge needed in order to maintain what I later learnt to be a contraption loosely contrived as a "system" where the "components" have never appeared to like each other very much. Asterisk is very much marketed as an out of the box solution even being shipped with the FreePBX Graphical User Interface (GUI) to take care of day to day management of the features commonly used within a call centre environment.

    The installation of the package, might, if it were to hold a genuine intention of making life simple, include Fail2ban, for example, and it might even include an easy "wizard" for the configuration of Fail2ban. It is reasonably conceivable that a package that includes the CentOS Operating System might be an entirely new phenomenon for its' host. The SSH port also ships on Port 22 where it would not be overtly exerting for Digium to provide a system for the reallocation of a more secure port number and a simple notification to its' host. There is a certain whiff of arrogance on behalf of Digium, manifested largely through the Digium ridden IRC channel #asterisk that, if you are not proficient with Linux then you shouldn't be using Asterisk - this only becoming apparent once a significant amount of time has already been wasted on the cause.

    I became concerned about sharing my bed with Asterisk fairly early on but I found (and I suspect I will not be the first) that the more time I put into attempting to get Asterisk to work, the more time I dedicated, effectively becoming a compulsive gambler and slave to the cause. Of course, the Casino always wins. In total, until this evening, I have wasted round about 6 months of my time, the only time I had to spare during the last two years as an investment in my future and my community.

    Whilst struggling with funding for business ventures because of my Bipolar and being out of work through it, I needed to make a name for myself by volunteering (and because I care) in order to run a profitable business whilst being fairly unreliable within full time employment through ill health, this leaving me virtually unemployable. I needed to be able to work at my own pace and from home without the hassle of Management when I am unwell. The time I have dedicated to Asterisk has come at huge personal cost, in addition to time: I worked towards my future attempting to use Asterisk for key infrastructure over a significant period whilst my Mother was unwell (she passed away last year) and i've been made ill by my experiences that I wholly attribute towards the underhand manner in which Digium market their product as an out of the box solution and the way in which users of the IRC channel #asterisk speak to people who need help.

    My experiences with #asterisk have significantly contributed to me feeling suicidal on several occasions and worthless as an individual. I was, however, in truth, set up to fail. The #asterisk IRC channel were made fully aware that my attempts at setting up a PBX were of a charitable and not a profitable nature - I was simply mocked, disbelieved and not asked for any evidence. There were numerous times when I was offered paid for services whilst in the channel, something now clearly detailed as against channel policy.

    I must, at this juncture, thank apb1963 for his assistance and authenticity through my experience on #asterisk. It should be noted, however, that I should not have required his expert guidance to set up a firewall solution as the so called Asterisk in a Box solution ("Asterisk Now") should not be shipped pretty much insecure. There is little point in closing loopholes (as has been suggested on other websites, to Asterisk's credit) whilst leaving the front door unlocked, defective and requiring the expertise of a locksmith.

    Once apb1963 had assisted me with working to secure my CentOS running laptop to run with Volunteers operating on dynamic IP addresses, the fun began. I experienced issues with Asterisk and FreePBX corrupting as soon as I used the built in update functions through the FreePBX GUI leaving me with constant headaches including sound issues where one party could not hear the other and with calls disconnecting mid-flow (with and without sound). I can only conclude that this corruption left a system not fit for purpose without the Administrator having the same level of skills as the Developers themselves leaving Asterisk offering anything but convenience and bringing into question the point of shipping a system such as Asterisk under the façade that it works out of the box in terms of core functionality.

    Where does one go when they need assistance? They turn to search engines such as Google, Developer documentation, the Digium forum, the FreePBX forum and of course the somewhat hateful IRC #asterisk channel. The latter being where the fun truly began. I quickly dismissed the documentation as being designed for people with extensive networking, Linux, programming and telephony experience and the documentation might as well have been speaking a foreign language to a newbie.

    There was no element of newbie friendliness within the documentation and there was a distinct lack of materials available elsewhere aimed at newbies. There was clearly an overarching expectancy that the would be reader would already be an expert and there was no assistance with the steep learning curve leaving the marketing of Digium at odds as an "out of the box" solution, by implication, with the requirement for the would be reader to be as technically apt as those who developed Asterisk in the first place.

    Not through a lack of trying to obtain meaningful assistance, the Digium forum and the FreePBX forum are not a place for a newbie to gain answers that make any sense without a significant background knowledge. In practice, these forums appear to be a ground for bugs to be found (outside of conventional bug reporting procedures) and a place for Digium to seek feedback on the failings of their contraption, not a place where assistance can be gained in "English". I strongly suspect the Plain English Campaign would have a field day.

    Next, the IRC #asterisk channel on the Freenode Network. The channel, largely dominated by the same members day in, day out including one rather aptly self named individual known as [TK]Defender, serves to do anything but assist newbies through a culture of denial, delusion and endless references to anywhere ring-leading members can possibly think of that result in a newbie becoming exhausted and in my opinion deliberately and covertly directed to seeking a paid offering of support from Digium or its' affiliates instead of the newbies learning how to manage their own PBX.

    I have come to believe that this is the intention behind Digium offering an Open Source version of Asterisk alongside their paid offerings. Whilst Digium serve to distance themselves from the Open Source Asterisk counterpart, the Open Source counterpart is made available and distributed from the Digium website.

    Personally, I started being much more assertive in the #asterisk channel and ended up at a stage where I approached the channel sarcastically before long in any given visit because I had become long in the tooth and I knew the drill. This was in response to the sarcasm and hostility presented towards me first. I had no other option to attempt to garner any assistance but to sink to the same low standards matching the attitude of the ringleaders within the channel.

    I was frequently asked repeatedly to copy lengthy debugs and paste these to Pastebin only to be criticised for posting too lengthy debugs, to be asked to repost curtailed versions (although I had made clear I was not sure what to post and what not to and this was never clearly explained to me) and then to be asked to repost debugs again as they did not include the key information. I was also asked regularly to grab screenshots to prove what I was saying. All in all I got to the point where I dreaded the need to visit the #asterisk channel or even interact with the system to find out what the next issue was that would be thrown at me.

    One of the reasons I changed to a more sarcastic tone, for example was that I was quickly referred to as a "retard" by [TK]Defender on one particular occasion and the hostility was never any less on other occasions. To [TK]Defender's credit, on one occasion [TK]Defender private messaged me in the channel and went through the setting up of an external SIP trunk but not without several insults hurled at me leaving me wondering how much narcissistic benefit he gained from what I deem an exploit. I asked a friend to witness [TK]Defender's attitude by joining me silently in the #asterisk channel and [TK]Defender unwittingly made the comments about me being a "retard" to him to.

    In all of my dealings with [TK]Defender who was the first to dominate #asterisk as soon as I asked a question and others hesitated to respond first, he has always failed to mention his affiliation with Digium. Frankly, I hardly think [TK]Defender would be a glowing advertisement describing potential Customers (and that clearly is the intention behind Digium's counterpart free offering) as "retards" (not to mention the complications with his clear affiliation bringing all sorts of equality legislation breaches into consideration).

    A number of Digium Employees also sit in the #asterisk channel including ■■■■■■■■■■■■, "Qwell" but do little to quell [TK]Defender's dominance and "abrasiveness", something I have more recently been described as in the channel myself.

    This evening culminated in my decision to discontinue my involvement with Asterisk and rather sums up the wider attitude of those involved as so called "experts". I had a conversation in #freepbx with drmessano, lorsung_cu and latterly, X-Rob, a self professed Asterisk Developer.

    Having spent a weekend being referred to countless amounts of overly complex documentation more widely on IRC relating to Linux, Asterisk and FreePBX, I managed to manipulate Asterisk/FreePBX totally of my own accord to avoid calls dropping by setting my IP address to "public" instead of "static" after I was ignored for the whole afternoon after an afternoon the previous day spent enduring overly complex responses from [TK]Defender and his demonstration of impatience with me as a newbie.

    After a calmer response from another channel participant yesterday afternoon, I /ignored [TK]Defender as I was quickly becoming very stressed by him. Despite my being forced to set my IP as "public" within FreePBX, My IP is static but this is more widely symbolic of how buggy Asterisk can be. Whilst it is to be expected that open source software can exhibit bugs, Asterisk is not truly open source operating so closely with and funded by Digium. Basic functionality should, therefore, not be compromised and there is no excuse.

    Once I had resolved the issue with calls dropping and one sided (and in some cases no) audio, I came to find that my voicemail module had become totally corrupted. The only work I have ever undertaken is to keep FreePBX and Asterisk up to date through the built in update facilities and attempt to work with the package to build an IVR and utilise it. It was at this point that I was told what had been denied for two years whenever I criticised Asterisk:

    To quote drmessano at 22:35:30:

    "AsteriskNOWs issue is lack of support. You can't kernel update without breaking things and they don't follow kernel updates like Qwell did when it was his baby"

    Lorsungcu_ agreed: 22:34:43:

    " greenlanegreb: asterisknow is generally awful, in my experiences"

    Lorsungcu_ continued at 22:37:20 and 22:37:41:

    "greenlanegreb: at this point, i would put my efforts towards migrating to freepbx distro, what you have isn't something you'll be able to nicely maintain, and it sounds like its been a pain for you, anyway"

    drmessano added at 22:41:48:

    "Asterisk just works. It sounds like you got sucked into AsteriskNOW before it go left hung out to dry"

    drmessano [sic] and lorsungcu_ changed his tune and others within the room were overly defensive of Asterisk, perhaps beyond that of regular users and more akin to Developers, Affiliates and direct Employees of Digium who clearly, as a group could not handle criticism. I am greenlanegreb:

    22:41:51: "I really have this suspicion that there are certain people who guide in a certain way towards installing the wrong kind of things or to annoy people asking for help beyond comprehension so as they pay for Digium support otherwise, why would the same people be in here day in day out"

    Cutting through some of the conversation where the named participants took offence to my comments, I cut to the chase:

    drmessano said at 22:45:34:

    "If you are talking about your rub with [TK]D-Fender, get over it. He's one of the foremost experts on the platform. You may not like his way of doing things, but you also didnt help yourself in that scenario"

    lorsungcu_ added at 22:45:39:

    "greenlanegreb: you're delusional, and it is insulting"

    I was criticised about not understanding the concept of community and then there were the following comments:

    At 22:51:10 I said:

    "the best communities are founded on diplomacy and democracy, neither of which is being displayed here"

    22:51:32 lorsungcu_ added:

    "greenlanegreb: your opinion is that there is a secret group of pricks in here that purposefully made you downloadn [sic], install, and use asterisknow for more than 2 years"

    At 22:51:39 drmessano responded:

    "greenlanegreb, lets be honest here.. You are butthurt because you got a distro that became unsupported. You dont have the skills to support it yourself, and you dont have the intestinal fortitude for interacting with different personality types in an open forum. Open source probably isnt for you"

    and at that point lorsung_cu chimed in at 22:51:59:

    "greenlanegreb: and from that, you've generalized a bunch of other shitty ideas..." [Democracy, Diplomacy et al]. "...i'm not sure what you expect in the way of a response."

    I have wasted money upgrading my internet capability to fibre optic subscribing to an 18 month contract to allow for the capacity of what Asterisk and the wider package is painted to be able to achieve. Instead, it was money wasted as Asterisk has never worked for more than a week. I have leased an outside telephone number that I have never been able to utilise and that is not to mention the amount I have drunk and smoked becoming frustrated and spending countless hours being messed around in #asterisk by people who really do not like newbies. On some early occasions, members within the IRC Channel even sent me to a website link where it provided an animation of how to search for a particular term on Google.

    In short, #asterisk comprised and compromises of bullies who serve to justify their existence by holding their knowledge as power only provided to newbies in return for a narcissistic fulfilment in destroying that newbie's confidence and self worth. The channel is in effect not free but paid for through a bunch of power hungry (admittedly very intelligent) bullies intimidating new users for self fulfilment. I suggest, bluntly, that these people really should get a life and a lot can be said for the fact that they never appear to actually leave the channel/work. Hiding behind a computer screen to bully others is not brave and it isn't smart, these people often, in person, are the most socially awkward specimens in human nature.

    I rather question how the competence of Digium can be trusted when they offer an open source (to be fair "as is") solution "out of a box" that goes on to be recognised as a system that breaks as soon as you update it. The close connections between commercial and their open source endorsed counterpart are far too close to ignore. It was suggested to me that I should upgrade to the latest open source offering. How do I know that that will not have a limited shelf life to by which time I will be left even more high and dry?

    For a package like Asterisk to be marketed out of the box and provided open source and be at all reliable, it should not have a time by which it is totally abandoned (a shelf life) and the fact that my install is no longer supported after only two years is testament to how flawed it was to begin with for anybody other than a significantly advanced Engineer who would be just as capable of developing their own bespoke solution without all of the built in headaches.

    The business model, to me, is clearly about reeling in Customers by showing them what Asterisk is capable of. It is made overly complicated to deter self maintenance whilst being advertised as, effectively, user friendly. It is then for those Customers to give up helping themselves, largely assisted by a staged presence within the #asterisk channel (where Digium staff appear to hang out with [TK]Defender defending Asterisk as the Chief Henchmen) of help and support being available whilst the aim truly appears to be diverting such people to paid support through exhaustion. As I have hinted at, I do not think anyone beyond newbies would form a genuine customer base for a system provided by Digium that is so fraught with unnecessary complications and instability.

    If my assessment of the business model is accurate, and I believe it is, the model is fundamentally flawed. People are not "retards" as [TK]Defender referred to me, people are not gullible and people are much more likely to remember a business for what it did wrong than what it did right. A display of a system that breaks when effectively being issued underhandedly as a "trial version" at the most simplest of updates is not going to attract a customer to pay for support but it will attract a customer to assess the cost of paying for what will obviously amount to significantly increased maintenance leading them to contrast the outlay against simply paying a conventional business telephone service provider outright to provide a system that does not break in the first place.

    Asterisk is clearly a package that requires constant oversight and maintenance and it simply cannot be left to run alone. I suspect that the excessive cost associated to the overwhelming pitfalls of Asterisk in hiring an Engineer to be constantly on hand to resolve issues would be hugely circumvented by pursuing a conventional alternative. It is for this reason that Asterisk should, under no circumstances be considered as an option for a newbie (disappointingly) as they will be in for a lot of heartache and, more widely, I fail to see the point of Asterisk at all since it requires such a level of technical expertise that would render said suitably skilled Technician capable of building a much better bespoke solution themselves. The overall benefit is clearly in lining Digium's pockets so why would any skilled Developer want to contribute their time at no cost whilst Digium effectively sell such contributions on at profit?

    As demonstrated in the post to begin with, so rightly, a lot of what Asterisk offers actually creates unnecessary headaches in what is effectively a package where a new programming language has been created by people who know what they are doing with telephones but who are not programmers at all. Programming language convention and syntax, therefore, goes out the window. I might not know about programming (really) either but Asterisk certainly did not tell me I was not it's intended audience and I am pretty damn good at business, smelling a rat and adding up.

    I suppose I am not their intended customer as, like any other capitalist company, Digium are interested in the profit margin and not in helping people like me who cannot afford to pay them significant amounts of cash.

    I think i'll do without a PBX (unless anyone recommends a free alternative) and, as a much as I hate them, one day, I will look to BT Business or Virgin Media Business when I can afford it as I value my sanity a lot more than #asterisk and Digium do. I also, thankfully, never have to deal with [TK]Defender again in #asterisk.

    That said, if Digium want a newbie's perspective and input on improving Asterisk, I am available, as a Usability Consultant, at the same cost as they charge Consumers and, of course, on the basis that [TK]Defender is well and truly fired.



  • Uhm, well, I've never used any of the GUI layers that exist for Asterisk for more than a week, because they're all pretty terrible. And I haven't done a lot of requesting in the #asterisk IRC channel, so I can't speak to that experience.

    But the asterisk-users mailing list (http://lists.digium.com/mailman/listinfo/asterisk-users) usually provides clear suggestions & guidance for people working with the straight CLI/configuration files in a short amount of time (though, if you ask the question in a way that sounds like "do my homework for me" without showing any previous effort on your own, you will unfortunately get ignored at best or abused at worst). And the CLI/config files method of Asterisk works very reliably (I support a clustered system with between 50-100 paying customers, and never make any changes except to add/delete clients), and can do a lot of really cool stuff. Plus, my office uses it for a full-up hotdesking system, and I have another client who has one PBX supporting 4 offices with 50 or so hotdesked extensions.

    Some of the Digium staff have a freely available book that is about as close to a "for Dummies" title as you get in Linux land -- http://it-ebooks.info/book/2332/. The documentation from within the CLI -- "core show application X" or "core show function Y" -- is very accurate, and more clear & concise than most OSS documentation I've worked with.

    If you haven't given completely up on the Asterisk option, and would like some assistance with setting up a CLI install, feel free to contact me via PM -- I'm quite comfortable on Open Source Asterisk 11 (CLI) on top of CentOS 6.



  • @astercrap said:

    I fail to see the point of Asterisk at all since it requires such a level of technical expertise that would render said suitably skilled Technician capable of building a much better bespoke solution themselves.

    Should only take six weeks, as long as they write all their own libraries as well.


  • BINNED

    I'm still processing my coffee so I still haven't read the whole thing, but I second @izzion's offer to help if needed, just PM me or invite me to PM chain if need be. We run everything on CLI based Asterisk 11 on Debian here (used to use CentOS, moved because some other components of our system require newer versions of libraries than CentOS easily provides), and it all runs smoothly and stable.


  • BINNED

    @astercrap said:

    "AsteriskNOWs issue is lack of support. You can't kernel update without breaking things and they don't follow kernel updates like Qwell did when it was his baby"

    I have no idea how they did that, other than failing to recompile proper versions of DAHDI. Are you using any kind of analogue technology in your setup? Failing that, something in their update script is horribly and utterly broken. Mine has like... 7 lines of bash code and has never failed, broke anything, nor left my system in some weird state.

    @astercrap said:

    As demonstrated in the post to begin with, so rightly, a lot of what Asterisk offers actually creates unnecessary headaches in what is effectively a package where a new programming language has been created by people who know what they are doing with telephones but who are not programmers at all.

    Pretty much. AEL helps a lot, really, you just get annoyed by caveats at times, but it's perfectly serviceable up until you start doing some weird things (and I have done some weird things, believe you me).

    Also, I don't know if I read this correctly so just to clear it up: all you need is a single system that works and all you need to maintain and potentially change is adding more extensions from time to time? That's pretty much peanuts compared to what I'm dealing with and what @izzion described, so really, we should be able to help you get it running in a short enough time.

    Note: the peanuts comment is not meant to dismiss your problems, I'm just comparing the scale of the systems talked about here. Sorry if I misunderstood it.



  • Also, one other thing came to mind while I was reprocessing your post after a caffeine injection (though it probably won't be much "help" for you) --

    AsteriskNOW & FreePBX are not Digium-provided products. They're an extension written on top of Asterisk (CLI, the Digium product) but were put out and maintained by Schmooze. IIRC, they're currently owned by Sangoma, and I have no idea if Sangoma is going to update and properly maintain FreePBX, or drop it like a hot potato. But that's also part of why #asterisk wouldn't have given you great help for FreePBX.

    Filed under: only useful for Google Search posterity


  • BINNED

    @izzion said:

    But that's also part of why #asterisk wouldn't have given you great help for FreePBX.

    They do tend to be a bit dismissive initially in any case. I had like an hour long discussion about something on there like 2 weeks ago where the general stance was that I am stupid and Doing It Wrong™ until I managed to prove to them that it is truly broken and is throwing errors where there are none.

    Fortunately, the errors were innocuous and I can ignore them for now because the whole thing still works, but it's annoying as all hell.



  • @Onyx said:

    Also, I don't know if I read this correctly so just to clear it up: all you need is a single system that works and all you need to maintain and potentially change is adding more extensions from time to time? That's pretty much peanuts compared to what I'm dealing with and what @izzion described, so really, we should be able to help you get it running in a short enough time.

    Note: the peanuts comment is not meant to dismiss your problems, I'm just comparing the scale of the systems talked about here. Sorry if I misunderstood it.

    Hi Onyx,

    I've just been reading through the replies and thanks for taking the time to reply. What I needed from my Asterisk install was GUIs which I find necessary because I am not a Programmer and I find the Command Line hugely difficult. Due to the complexity of the IVR's, Voicemail Requirements and other things which i've incorporated into my current install, I would not be able to do this in an efficient time if I were to have to stop and work with the Command Line at every juncture. The IVR's are multilevel and I have something in the region of 20 of them set up.

    I sought a solution that could be easily up-scaled as necessary by me with minimal help as I know that help is pretty hard to come by, unless of course, you have the money to pay (thus bringing up my point that Asterisk installs (in whatever guise) appear to actually create issues that would likely cost more to resolve than using a conventional telco.

    I can well imagine that you guys deal with much more complex problems but you do, by contrast, have a much more advanced skillset. I need a solution that can be implemented quick (within the constraints above) and in a way where I can manage it myself - for me, a GUI is required, not least also due to my Dyslexia complicating the issue. I find pushing buttons rather than deleting, editing and adding text in files generally avoids breaking things unnecessarily.

    It does appear, from initial reading of the replies that to use a GUI seems to equate to using a version of Astercrap rather than Asterisk. There doesn't seem to have been much more positive feedback about GUIs.

    Thank you for your kind offer of support, it would be good to talk further about this in a more private capacity. I couldn't find any option to send a private message, however. Thank you also (and to others who have replied) for being so kind in your replies - an approach that is very refreshing compared to the coldness and often outright abusive responses I have received in the past related more to requests for help.



  • @izzion said:

    Also, one other thing came to mind while I was reprocessing your post after a caffeine injection (though it probably won't be much "help" for you) --

    AsteriskNOW & FreePBX are not Digium-provided products. They're an extension written on top of Asterisk (CLI, the Digium product) but were put out and maintained by Schmooze. IIRC, they're currently owned by Sangoma, and I have no idea if Sangoma is going to update and properly maintain FreePBX, or drop it like a hot potato. But that's also part of why #asterisk wouldn't have given you great help for FreePBX.

    <small>Filed under: <a href="#">only useful for Google Search posterity</a></small>

    Hi Izzion, thank you to for your post.

    Yes, these are the technicalities, forks and split hairs that seem apparent when looking at Digium's model. They endorse a project (and are therefore affiliated to it) and then abandon it when it turns out to be Astercrap. That's been further complicated by the Sangoma's takeover of Schmooze who, yes, published FreePBX. Looking at Digium's takeover of Fourloop Technologies in 2007 where they had made Switchvox, it seems to me that Digium take on projects that work and quickly stamp their name all over them whilst seeking to deny all knowledge of those projects that don't (AsteriskNOW in it's prior form).

    If you check out the #asterisk and #freepbx channels on Freenode, you will see that the channels largely compromise of exactly the same people but for the occasional variation with a Newbie turning up. Isn't that interesting? Having just checked, ■■■■■■■■■■■■ (Qwell)'s in the #freepbx room (working for Digium) as is two Developers including X-Rob from yesterday.

    The concern is that AsteriskNOW has so far demonstrated to me how easily open source Asterisk based products can be discontinued and how badly managed they can be in the first place. From my early interactions with the IRC channels it was made clear to me that updating was a very thorny issue "if not done properly". I found the "if not done properly" part of what was said very amusing since the reason the updates had to be performed in an over-complex manner was because the system was fundamentally broken from the start. You couldn't, in other words, simply use the update button in FreePBX.

    It's one thing to create an open source project for the good of the community (This is a release by Digium directly as far as i'm concerned and the same Developers develop both the open source and commercial strands of Asterisk) and it's another to effectively undermine the business end of the product by putting out open source release adaptations of Asterisk that do not work in terms of core functionality - i.e. without a lot of engineering expertise, the system will not work in the first place or will break as soon as you sneeze. AsteriskNOW is one such example of an open source project that, to me, is intended as an advertisement and enticement towards Digium's paid for offerings because, effectively, it is is Astercrap. It's not for the benefit of the community at all.

    Substandard Asterisk adaptations in the open source community do not create a great advertisement for Asterisk more widely and it is in Digium's interests to reign in substandard projects so that people like me do not end up with irretrievable Astercrap. Of course, they haven't and I don't think they are that stupid not to unless there are other forces at play.

    I don't think anybody in their right mind would create a product and allow for it to be demonstrated at its' worst through thorough incompetence ("Look what i've done everybody, i've broke it!") generating terrible PR. Digium appear to see this as good for business.

    I actually think what Mark Spencer has achieved is cool, i'm nowhere near so sure about Digium's underhand tactics and business plan that serves to entice customers into paying for support following an experience of an Asterisk install demonstrating Astercrap.

    There is an underlying arrogance in this approach and it's very patronising - people are attracted to a system that works not one that doesn't. I guess, this is where Digium cleverly uses the open source Developers as a justification of why Customers need their paid support - the only problem is there are clearly a number of Developers who you get in paid support that are the same as those who work on the open source releases of Asterisk. Very smart and also, very convenient.

    I leave you with a thought about Microsoft Windows and a hunch. Microsoft Windows sells because it has a GUI - a GUI that did away with the need for programming experience. Of course, computers were for Mathematicians and Scientists, originally, but Microsoft created a new marketplace (I appreciate that they were not the first but they were, clearly, the most successful), of non-scientific users thus creating a new marketplace and changing the accepted use of computers before Microsoft came along. Yes, there was RISC OS and the like but it really didn't take off.

    Microsoft has demonstrated the ability of a GUI to change the IT marketplace and open it up to widening and emerging marketplaces. I would suggest, that it is hugely, in Digium's interests to ensure the continuing deployment of a GUI and I rather suspect this is why Digium Employees are still hanging around in the #freepbx forum (of course, it is just a hobby for them....of course it is) - I think the next move with FreePBX will be Digium's direct acquisition rather supporting my earlier point that if a project shows potential, Digium snap it up, if it doesn't work Digium distance themselves entirely. Whilst, yes, granted, FreePBX has a bad press, it does show potential. There is also the more sinister question of whether FreePBX has been unfairly blamed when Asterisk might be the real issue not playing ball in the correct fashion with the deployed instructions of FreePBX in a given installation and deployment.

    Izzion, it would be good to talk to you further in a private setting to (happily with Onyx), I can't find how to private message or link us all in within a private conversation though. Thanks for the offer - it's very kind :-)



  • The whole situation with FreePBX is why Digium took a hard line about 4 years ago with regard to using the Asterisk name in derivative projects. If they were to release it for the first time today, they would have had to call the bundled solution AsteriskBasedNOW 😛

    I suspect you can't create a new PM at this point because you're a relatively new account. Once I'm not on mobile, I'll set something up (assuming @onyx doesn't beat me to it)



  • @astercrap said:

    including one rather aptly self named individual known as [TK]Defender

    Oh hey, you've found your own Bert Glanstron.


    Seriously though, should've ran away while you still could. Didn't you, at any chance, get the realization that "this is way over my head, I'd better get some real assistance, brush up my related knowledge of networking and Linux, or simply give it up and try something else"?

    I know jack shit about Asterisk, but I'm also not going to try it no matter how shiny it looks, since all I know about phones is that you talk to one side, and the voice comes from the other.



  • @Maciejasjmj said:

    Didn't you, at any chance, get the realization that "this is way over my head, I'd better get some real assistance, brush up my related knowledge of networking and Linux, or simply give it up and try something else"?

    Managers have the symbiotic characteristic of being unable to stop themselves believing in the lies told to them by marketroids, especially when those lies include the magic words "smart" or "easy".


Log in to reply