{"id":70854,"date":"2025-12-02T03:01:00","date_gmt":"2025-12-01T17:01:00","guid":{"rendered":"https:\/\/www.rjmprogramming.com.au\/ITblog\/?p=70854"},"modified":"2025-12-01T18:22:45","modified_gmt":"2025-12-01T08:22:45","slug":"talking-select-multiple-webpage-palette-speech-bubble-tutorial","status":"publish","type":"post","link":"https:\/\/www.rjmprogramming.com.au\/ITblog\/talking-select-multiple-webpage-palette-speech-bubble-tutorial\/","title":{"rendered":"Talking Select Multiple Webpage Palette Speech Bubble Tutorial"},"content":{"rendered":"<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"https:\/\/www.rjmprogramming.com.au\/HTMLCSS\/select_palette.html\" rel=\"noopener\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Talking Select Multiple Webpage Palette Speech Bubble Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/select_palette_talking.gif\" title=\"Talking Select Multiple Webpage Palette Speech Bubble Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Talking Select Multiple Webpage Palette Speech Bubble Tutorial<\/p><\/div>\n<p>Our &#8220;second cab off the rank&#8221; with this current Intranet feeling macOS text to speech (via <a target=\"_blank\" title='say command information from Apple' href='https:\/\/ss64.com\/osx\/say.html' rel=\"noopener\">&#8220;say&#8221;<\/a>) interface thinking relates to the Speech Bubble work we last talked about with <a target=\"_blank\" title='Select Multiple Webpage Palette Speech Bubble Contact Tutorial' href='https:\/\/www.rjmprogramming.com.au\/ITblog\/select-multiple-webpage-palette-speech-bubble-contact-tutorial\/' rel=\"noopener\">Select Multiple Webpage Palette Speech Bubble Contact Tutorial<\/a>.   There is no PHP (except to interface to) here and we fleshed out the new HTML &#8230;<\/p>\n<p><code><br \/>\n&lt;div id=divsayf style=display:none;&gt;&lt;\/div&gt;<br \/>\n<\/code><\/p>\n<p> &#8230; using new Javascript, <font color=blue>as below<\/font> to help &#8230;<\/p>\n<p><code><br \/>\n  <font color=blue>var dcontit='', lastdcontit='', saywords='', sayvoice='Alex';<br \/>\n  var talkdo=false, talkvoice='';<br \/>\n<br \/>\n  var voicedrop=\"&lt;select style=\\\"display:inline-block;\\\" onchange=\\\"window.opener.dotalk(this.value);\\\" name=\\\"voice\\\" id=\\\"myinputvc\\\" value=\\\"\\\"&gt;&lt;option id=\\\"commopt\\\" value=\\\"\\\"&gt;Optionally add commentary with Voice ...&lt;\/option&gt;&lt;option value=\\\"Alex\\\"&gt;Alex en_US    # Most people recognize me by my voice.&lt;\/option&gt;&lt;option value=\\\"Alice\\\"&gt;Alice it_IT    # Salve, mi chiamo  e sono una voce italiana.&lt;\/option&gt;&lt;option value=\\\"Alva\\\"&gt;Alva sv_SE    # Hej, jag heter . Jag \u00e4r en svensk r\u00f6st.&lt;\/option&gt;&lt;option value=\\\"Amelie\\\"&gt;Amelie fr_CA    # Bonjour, je m\u2019appelle . Je suis une voix canadienne.&lt;\/option&gt;&lt;option value=\\\"Anna\\\"&gt;Anna de_DE    # Hallo, ich hei\u00dfe  und ich bin eine deutsche Stimme.&lt;\/option&gt;&lt;option value=\\\"Carmit\\\"&gt;Carmit he_IL    # \u05e9\u05dc\u05d5\u05dd. \u05e7\u05d5\u05e8\u05d0\u05d9\u05dd \u05dc\u05d9 \u05db\u05e8\u05de\u05d9\u05ea, \u05d5\u05d0\u05e0\u05d9 \u05e7\u05d5\u05dc \u05d1\u05e9\u05e4\u05d4 \u05d4\u05e2\u05d1\u05e8\u05d9\u05ea.&lt;\/option&gt;&lt;option value=\\\"Damayanti\\\"&gt;Damayanti id_ID    # Halo, nama saya . Saya berbahasa Indonesia.&lt;\/option&gt;&lt;option value=\\\"Daniel\\\"&gt;Daniel en_GB    # Hello, my name is . I am a British-English voice.&lt;\/option&gt;&lt;option value=\\\"Diego\\\"&gt;Diego es_AR    # Hola, me llamo  y soy una voz espa\u00f1ola.&lt;\/option&gt;&lt;option value=\\\"Ellen\\\"&gt;Ellen nl_BE    # Hallo, mijn naam is . Ik ben een Belgische stem.&lt;\/option&gt;&lt;option value=\\\"Fiona\\\"&gt;Fiona en_scotland # Hello, my name is . I am a Scottish-English voice.&lt;\/option&gt;&lt;option value=\\\"Fred\\\"&gt;Fred en_US    # I sure like being inside this fancy computer&lt;\/option&gt;&lt;option value=\\\"Ioana\\\"&gt;Ioana ro_RO    # Bun\u0103, m\u0103 cheam\u0103  . Sunt o voce rom\u00e2neasc\u0103.&lt;\/option&gt;&lt;option value=\\\"Joana\\\"&gt;Joana pt_PT    # Ol\u00e1, chamo-me  e dou voz ao portugu\u00eas falado em Portugal.&lt;\/option&gt;&lt;option value=\\\"Jorge\\\"&gt;Jorge es_ES    # Hola, me llamo  y soy una voz espa\u00f1ola.&lt;\/option&gt;&lt;option value=\\\"Juan\\\"&gt;Juan es_MX    # Hola, me llamo  y soy una voz mexicana.&lt;\/option&gt;&lt;option value=\\\"Kanya\\\"&gt;Kanya th_TH    # \u0e2a\u0e27\u0e31\u0e2a\u0e14\u0e35\u0e04\u0e48\u0e30 \u0e14\u0e34\u0e09\u0e31\u0e19\u0e0a\u0e37\u0e48\u0e2d&lt;\/option&gt;&lt;option value=\\\"Karen\\\"&gt;Karen en_AU    # Hello, my name is . I am an Australian-English voice.&lt;\/option&gt;&lt;option value=\\\"Kyoko\\\"&gt;Kyoko ja_JP    # \u3053\u3093\u306b\u3061\u306f\u3001\u79c1\u306e\u540d\u524d\u306f\u3067\u3059\u3002\u65e5\u672c\u8a9e\u306e\u97f3\u58f0\u3092\u304a\u5c4a\u3051\u3057\u307e\u3059\u3002&lt;\/option&gt;&lt;option value=\\\"Laura\\\"&gt;Laura sk_SK    # Ahoj. Vol\u00e1m sa  . Som hlas v slovenskom jazyku.&lt;\/option&gt;&lt;option value=\\\"Lekha\\\"&gt;Lekha hi_IN    # \u0928\u092e\u0938\u094d\u0915\u093e\u0930, \u092e\u0947\u0930\u093e \u0928\u093e\u092e \u0932\u0947\u0916\u093e \u0939\u0948. \u092e\u0948\u0902 \u0939\u093f\u0928\u094d\u0926\u0940 \u092e\u0947\u0902 \u092c\u094b\u0932\u0928\u0947 \u0935\u093e\u0932\u0940 \u0906\u0935\u093e\u091c\u093c \u0939\u0942\u0901.&lt;\/option&gt;&lt;option value=\\\"Luca\\\"&gt;Luca it_IT    # Salve, mi chiamo  e sono una voce italiana.&lt;\/option&gt;&lt;option value=\\\"Luciana\\\"&gt;Luciana pt_BR    # Ol\u00e1, o meu nome \u00e9  e a minha voz corresponde ao portugu\u00eas que \u00e9 falado no Brasil&lt;\/option&gt;&lt;option value=\\\"Maged\\\"&gt;Maged ar_SA    # \u0645\u0631\u062d\u0628\u064b\u0627 \u0627\u0633\u0645\u064a . \u0623\u0646\u0627 \u0639\u0631\u0628\u064a \u0645\u0646 \u0627\u0644\u0633\u0639\u0648\u062f\u064a\u0629.&lt;\/option&gt;&lt;option value=\\\"Mariska\\\"&gt;Mariska hu_HU    # \u00dcdv\u00f6zl\u00f6m!  vagyok. \u00c9n vagyok a magyar hang.&lt;\/option&gt;&lt;option value=\\\"Mei-Jia\\\"&gt;Mei-Jia zh_TW    # \u60a8\u597d\uff0c\u6211\u53eb\u7f8e\u4f73\u3002\u6211\u8aaa\u570b\u8a9e\u3002&lt;\/option&gt;&lt;option value=\\\"Melina\\\"&gt;Melina el_GR    # \u0393\u03b5\u03b9\u03b1 \u03c3\u03b1\u03c2, \u03bf\u03bd\u03bf\u03bc\u03ac\u03b6\u03bf\u03bc\u03b1\u03b9 . \u0395\u03af\u03bc\u03b1\u03b9 \u03bc\u03b9\u03b1 \u03b5\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03ae \u03c6\u03c9\u03bd\u03ae.&lt;\/option&gt;&lt;option value=\\\"Milena\\\"&gt;Milena ru_RU    # \u0417\u0434\u0440\u0430\u0432\u0441\u0442\u0432\u0443\u0439\u0442\u0435, \u043c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 . \u042f \u2013 \u0440\u0443\u0441\u0441\u043a\u0438\u0439 \u0433\u043e\u043b\u043e\u0441 \u0441\u0438\u0441\u0442\u0435\u043c\u044b.&lt;\/option&gt;&lt;option value=\\\"Moira\\\"&gt;Moira en_IE    # Hello, my name is . I am an Irish-English voice.&lt;\/option&gt;&lt;option value=\\\"Monica\\\"&gt;Monica es_ES    # Hola, me llamo  y soy una voz espa\u00f1ola.&lt;\/option&gt;&lt;option value=\\\"Nora\\\"&gt;Nora nb_NO    # Hei, jeg heter . Jeg er en norsk stemme.&lt;\/option&gt;&lt;option value=\\\"Paulina\\\"&gt;Paulina es_MX    # Hola, me llamo  y soy una voz mexicana.&lt;\/option&gt;&lt;option value=\\\"Samantha\\\"&gt;Samantha en_US    # Hello, my name is . I am an American-English voice.&lt;\/option&gt;&lt;option value=\\\"Sara\\\"&gt;Sara da_DK    # Hej, jeg hedder . Jeg er en dansk stemme.&lt;\/option&gt;&lt;option value=\\\"Satu\\\"&gt;Satu fi_FI    # Hei, minun nimeni on . Olen suomalainen \u00e4\u00e4ni.&lt;\/option&gt;&lt;option value=\\\"Sin-ji\\\"&gt;Sin-ji zh_HK    # \u60a8\u597d\uff0c\u6211\u53eb \u3002\u6211\u8b1b\u5ee3\u6771\u8a71\u3002&lt;\/option&gt;&lt;option value=\\\"Tessa\\\"&gt;Tessa en_ZA    # Hello, my name is . I am a South African-English voice.&lt;\/option&gt;&lt;option value=\\\"Thomas\\\"&gt;Thomas fr_FR    # Bonjour, je m\u2019appelle . Je suis une voix fran\u00e7aise.&lt;\/option&gt;&lt;option value=\\\"Ting-Ting\\\"&gt;Ting-Ting zh_CN    # \u60a8\u597d\uff0c\u6211\u53eb\u3002\u6211\u8bb2\u4e2d\u6587\u666e\u901a\u8bdd\u3002&lt;\/option&gt;&lt;option value=\\\"Veena\\\"&gt;Veena en_IN    # Hello, my name is . I am an Indian-English voice.&lt;\/option&gt;&lt;option value=\\\"Victoria\\\"&gt;Victoria en_US    # Isn't it nice to have a computer that will talk to you?&lt;\/option&gt;&lt;option value=\\\"Xander\\\"&gt;Xander nl_NL    # Hallo, mijn naam is . Ik ben een Nederlandse stem.&lt;\/option&gt;&lt;option value=\\\"Yelda\\\"&gt;Yelda tr_TR    # Merhaba, benim ad\u0131m . Ben T\u00fcrk\u00e7e bir sesim.&lt;\/option&gt;&lt;option value=\\\"Yuna\\\"&gt;Yuna ko_KR    # \uc548\ub155\ud558\uc138\uc694. \uc81c \uc774\ub984\uc740 \uc785\ub2c8\ub2e4. \uc800\ub294 \ud55c\uad6d\uc5b4 \uc74c\uc131\uc785\ub2c8\ub2e4.&lt;\/option&gt;&lt;option value=\\\"Yuri\\\"&gt;Yuri ru_RU    # \u0417\u0434\u0440\u0430\u0432\u0441\u0442\u0432\u0443\u0439\u0442\u0435, \u043c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 . \u042f \u2013 \u0440\u0443\u0441\u0441\u043a\u0438\u0439 \u0433\u043e\u043b\u043e\u0441 \u0441\u0438\u0441\u0442\u0435\u043c\u044b.&lt;\/option&gt;&lt;option value=\\\"Zosia\\\"&gt;Zosia pl_PL    # Witaj. Mam na imi\u0119 , jestem g\u0142osem kobiecym dla j\u0119zyka polskiego.&lt;\/option&gt;&lt;option value=\\\"Zuzana\\\"&gt;Zuzana cs_CZ    # Dobr\u00fd den, jmenuji se . Jsem \u010desk\u00fd hlas.&lt;\/option&gt;&lt;\/select&gt;\";<br \/>\n<br \/>\nfunction dotalk(towt) {<br \/>\n   var huhvc=('' + window.sessionStorage.getItem('say_voice_speech_bubbles')).replace(\/^undefined\/g,'').replace(\/^null\/g,'');<br \/>\n   if (towt == '') {<br \/>\n   talkdo=false;<br \/>\n   sayvoice='Alex';<br \/>\n   if (huhvc != '') { window.sessionStorage.removeItem('say_voice_speech_bubbles'); }<br \/>\n   } else {<br \/>\n   talkdo=true;<br \/>\n   sayvoice=towt;<br \/>\n   if (huhvc != '') { window.sessionStorage.removeItem('say_voice_speech_bubbles'); }<br \/>\n   window.sessionStorage.setItem('say_voice_speech_bubbles', towt);<br \/>\n   }<br \/>\n   talkvoice=towt;<br \/>\n}<br \/>\n<br \/>\nfunction gettalk() {<br \/>\n   return talkvoice;<br \/>\n}<br \/>\n<br \/>\n  function dcontitf() {<br \/>\n    if (document.getElementById('dstyle')) {<br \/>\n    dcontit=dstyleit(document.getElementById('dstyle')).replace(\/[^\\x00-\\x7F]\/g, '');<br \/>\n    if (!talkdo) {<br \/>\n    dcontit=dcontit.replace(\/[^\\x00-\\x7F]\/g, '');<br \/>\n    lastdcontit=dcontit;<br \/>\n    } else {<br \/>\n    saywords=dcontit;<br \/>\n    if (lastdcontit != '') {<br \/>\n    if (dcontit.replace(\/[^\\x00-\\x7F]\/g, '').indexOf(lastdcontit.replace(\/[^\\x00-\\x7F]\/g, '')) == 0) {<br \/>\n    saywords=dcontit.replace(\/[^\\x00-\\x7F]\/g, '').split(lastdcontit.replace(\/[^\\x00-\\x7F]\/g, ''))[1];<br \/>\n    }<br \/>\n    }<br \/>\n    if (saywords.trim() != '') {<br \/>\n    \/\/document.title=saywords;<br \/>\n    dcontit=dcontit.replace(\/[^\\x00-\\x7F]\/g, '');<br \/>\n    lastdcontit=dcontit;<br \/>\n    \/\/alert(\"&lt;iframe name=isayf id=isayf\" + Math.floor(Math.random() * 198978654) + \" title='' style=display:none; src='\/About_Us.html' onload=\\\"if (this.title.length == 0) { this.title='say';  window.open('http:\/\/localhost:8888\/macos_say_record.php?justsayingforafriend=y&saythis=\" + encodeURIComponent(saywords) + \"&voice=\" + encodeURIComponent(sayvoice) + \"','isayf'); }\\\"&gt;&lt;\/iframe&gt;\");<br \/>\n    if (document.URL.indexOf('localhost:8888\/') != -1) {<br \/>\n    if (document.getElementById('divsayf').innerHTML == '') {<br \/>\n    document.getElementById('divsayf').innerHTML=\"&lt;iframe name=isayf id=isayf title='' style=display:none; src='http:\/\/localhost:8888\/macos_say_record.php?justsayingforafriend=y&saythis=\" + encodeURIComponent(saywords) + \"&voice=\" + encodeURIComponent(sayvoice) + \"' data-onload=\\\"if (this.title.length == 0) { this.title='say';  window.open('http:\/\/localhost:8888\/macos_say_record.php?justsayingforafriend=y&saythis=\" + encodeURIComponent(saywords) + \"&voice=\" + encodeURIComponent(sayvoice) + \"','isayf'); }\\\"&gt;&lt;\/iframe&gt;\";<br \/>\n    } else {<br \/>\n    \/\/alert('http:\/\/localhost:8888\/macos_say_record.php?justsayingforafriend=y&saythis=' + encodeURIComponent(saywords) + '&voice=' + encodeURIComponent(sayvoice));<br \/>\n    document.getElementById('isayf').src=('http:\/\/localhost:8888\/macos_say_record.php?justsayingforafriend=y&saythis=' + encodeURIComponent(saywords) + '&voice=' + encodeURIComponent(sayvoice));<br \/>\n    }<br \/>\n    } else {<br \/>\n    if (document.getElementById('divsayf').innerHTML == '') {<br \/>\n    document.getElementById('divsayf').innerHTML=\"&lt;iframe name=isayf id=isayf title='' style=display:none; src='\/About_Us.html' onload=\\\"if (this.title.length == 0) { this.title='say';  window.open('http:\/\/localhost:8888\/macos_say_record.php?justsayingforafriend=y&saythis=\" + encodeURIComponent(saywords) + \"&voice=\" + encodeURIComponent(sayvoice) + \"','isayf'); }\\\"&gt;&lt;\/iframe&gt;\";<br \/>\n    } else {<br \/>\n    window.open('http:\/\/localhost:8888\/macos_say_record.php?justsayingforafriend=y&saythis=' + encodeURIComponent(saywords) + '&voice=' + encodeURIComponent(sayvoice),'isayf');<br \/>\n    }<br \/>\n    }<br \/>\n    }<br \/>\n    lastdcontit=dcontit;<br \/>\n    }<br \/>\n    }<br \/>\n  }<br \/>\n<\/font><br \/>\n<br \/>\n  function dotdotdotten() {<br \/>\n     var preta='', anotherdata='', locationhash=('' + location.hash).replace(\/^undefined\/g,'').replace(\/^null\/g,'').split('#td')[0].replace(\/^\\#\/g,'');<br \/>\n     document.body.title=document.title + ' ... swipe from top right down and left for email and swipe from bottom up for SMS ... click\/tap to manage Speech Bubble(s) or Lines of Text display here.  Speech Bubbles may occur when there are line feeds entered by the user, and note, then, that the content can contain YouTube 11 character video IDs (optionally linkable to) or email address or international SMS number linking.';<br \/>\n     if (window.opener) {<br \/>\n     var wodiv=window.opener.document.getElementById('dcont').innerHTML;<br \/>\n     var wasrec=amrecipient;<br \/>\n     amrecipient=window.opener.trueifrec();<br \/>\n     if (amrecipient && !wasrec) { fixwho(); }<br \/>\n     \/\/alert(amrecipient);<br \/>\n     if (wodiv.indexOf('&lt;svg') != -1) {<br \/>\n       anotherdata=' data-notfirst=y ';<br \/>\n       locationhash='';<br \/>\n       preta='&lt;details id=wodt open&gt;&lt;summary id=wosm&gt;Speech Bubble(s) so far ...&lt;\/summary&gt;' + window.opener.document.getElementById('dcont').innerHTML + '&lt;\/details&gt;&lt;hr&gt;&lt;br&gt;';<br \/>\n     }<br \/>\n     <font color=blue>var tset='';<br \/>\n     var fromval=' value=\"\"&gt;';<br \/>\n     var toval=' value=\"\"&gt;';<br \/>\n     var fromtwoval='Optionally add commentary with Voice ...';<br \/>\n     var totwoval='Optionally add commentary with Voice ...';<br \/>\n     var disis='inline-block';<br \/>\n     if (document.URL.indexOf('localhost:8888\/') == -1 && ('' + navigator.platform).toLowerCase().indexOf('mac') != 0) { disis='none'; }<br \/>\n     if (window.opener.gettalk() != '') {<br \/>\n       fromval=' value=\"' + window.opener.gettalk() + '\"&gt;';<br \/>\n       toval=' value=\"' + window.opener.gettalk() + '\" selected&gt;';<br \/>\n       totwoval='Suppress commentary currently with Voice ' + window.opener.gettalk() + ' ...';<br \/>\n     }<\/font><br \/>\n     if (oktoemail && !oktosms) {<br \/>\n     document.body.innerHTML=preta + '&lt;textarea placeholder=\"Add your next bit of content (where ~~ on a single record of data can be line feed(s)).\" id=myta style=width:100%;height:50%; ' + anotherdata + ' data-done=\"n\" onblur=\" if (oktoemail) { if (!oktosms) { document.getElementById(' + \"'butsms'\" + ').disabled=true; } setTimeout(function(){  document.getElementById(' + \"'butemail'\" + ').click(); }, 3200);  }  if (oktosms) { if (!oktoemail) { document.getElementById(' + \"'butemail'\" + ').disabled=true; }  setTimeout(function(){ document.getElementById(' + \"'butsms'\" + ').click(); }, 3400); } this.style.cursor=' + \"'progress'\" + '; setTimeout(function(){ document.getElementById(' + \"'myta'\" + ').setAttribute(' + \"'data-done','y'\" + '); }, 5000);\"&gt;' + decodeURIComponent(('' + locationhash).replace(\/^\\#\/g,'')).replace(\/\\&lt;br\\&gt;\/g, String.fromCharCode(10)) + '&lt;\/textarea&gt;&lt;br&gt;&lt;br&gt;&lt;button onclick=\"setTimeout(function(){ window.opener.doemail(); }, 2000);\" id=\"butemail\"&gt;Email &#128231;&lt;\/button&gt;&nbsp;&nbsp;&lt;button onclick=\"setTimeout(function(){ window.opener.dosms(); }, 2000);\" id=\"butsms\" disabled&gt;SMS &#128223;&lt;\/button&gt;<font color=blue>&nbsp;&nbsp;' + voicedrop.replace('inline-block',disis).replace(fromval,toval).replace(fromtwoval,totwoval)<\/font>;<br \/>\n     } else if (!oktoemail && oktosms) {<br \/>\n     document.body.innerHTML=preta + '&lt;textarea placeholder=\"Add your next bit of content (where ~~ on a single record of data can be line feed(s)).\" id=myta style=width:100%;height:50%; ' + anotherdata + ' data-done=\"n\" onblur=\" if (oktoemail) { if (!oktosms) { document.getElementById(' + \"'butsms'\" + ').disabled=true; } setTimeout(function(){  document.getElementById(' + \"'butemail'\" + ').click(); }, 3200);  }  if (oktosms) { if (!oktoemail) { document.getElementById(' + \"'butemail'\" + ').disabled=true; }  setTimeout(function(){ document.getElementById(' + \"'butsms'\" + ').click(); }, 3400); } this.style.cursor=' + \"'progress'\" + '; setTimeout(function(){ document.getElementById(' + \"'myta'\" + ').setAttribute(' + \"'data-done','y'\" + '); }, 5000);\"&gt;' + decodeURIComponent(('' + locationhash).replace(\/^\\#\/g,'')).replace(\/\\&lt;br\\&gt;\/g, String.fromCharCode(10)) + '&lt;\/textarea&gt;&lt;br&gt;&lt;br&gt;&lt;button onclick=\"setTimeout(function(){ window.opener.doemail(); }, 2000);\" id=\"butemail\" disabled&gt;Email &#128231;&lt;\/button&gt;&nbsp;&nbsp;&lt;button onclick=\"setTimeout(function(){ window.opener.dosms(); }, 2000);\" id=\"butsms\"&gt;SMS &#128223;&lt;\/button&gt;<font color=blue>&nbsp;&nbsp;' + voicedrop.replace('inline-block',disis).replace(fromval,toval).replace(fromtwoval,totwoval)<\/font>;<br \/>\n     } else {<br \/>\n     document.body.innerHTML=preta + '&lt;textarea placeholder=\"Add your next bit of content (where ~~ on a single record of data can be line feed(s)).\" id=myta style=width:100%;height:50%; ' + anotherdata + ' data-done=\"n\" onblur=\" if (oktoemail) { if (!oktosms) { document.getElementById(' + \"'butsms'\" + ').disabled=true; } setTimeout(function(){  document.getElementById(' + \"'butemail'\" + ').click(); }, 3200);  }  if (oktosms) { if (!oktoemail) { document.getElementById(' + \"'butemail'\" + ').disabled=true; }  setTimeout(function(){ document.getElementById(' + \"'butsms'\" + ').click(); }, 3400); } this.style.cursor=' + \"'progress'\" + '; setTimeout(function(){ document.getElementById(' + \"'myta'\" + ').setAttribute(' + \"'data-done','y'\" + '); }, 5000);\"&gt;' + decodeURIComponent(('' + locationhash).replace(\/^\\#\/g,'')).replace(\/\\&lt;br\\&gt;\/g, String.fromCharCode(10)) + '&lt;\/textarea&gt;&lt;br&gt;&lt;br&gt;&lt;button onclick=\"setTimeout(function(){ window.opener.doemail(); }, 2000);\" id=\"butemail\"&gt;Email &#128231;&lt;\/button&gt;&nbsp;&nbsp;&lt;button onclick=\"setTimeout(function(){ window.opener.dosms(); }, 2000);\" id=\"butsms\"&gt;SMS &#128223;&lt;\/button&gt;<font color=blue>&nbsp;&nbsp;' + voicedrop.replace('inline-block',disis).replace(fromval,toval).replace(fromtwoval,totwoval)<\/font>;<br \/>\n     }<br \/>\n     document.getElementById('myta').placeholder+=' ' + String.fromCharCode(10) + 'Real textarea line feed usage can help you start creating speech bubble(s). ' + String.fromCharCode(10) + 'Lines of data that are just ~~ separate your entry of multiple speech bubbles. ' + String.fromCharCode(10) + 'Starting with a ~~ line of data starts afresh with all data.' + String.fromCharCode(10) + 'Speech Bubbles may occur when there are line feeds entered by the user, and note, then, that the content can contain YouTube 11 character video IDs (optionally linkable to) or email address or international SMS number linking.';<br \/>\n     document.getElementById('myta').placeholder+=' ' + String.fromCharCode(10) + String.fromCharCode(10) + String.fromCharCode(10) + prmptstr.replace(\"To share on today's Bulletin Board enter a username \", \"You can append username\/contact details to the end of a line here with To: (then optional privacy space(s)) for Group Talk definition with or without privacy \").replace(\", and append space to remember, append another space to apply to all other Speech Bubbles\", \" applies to all Speech Bubbles\");<br \/>\n     } else {<br \/>\n     if (decodeURIComponent(('#' + location.hash)).indexOf('#bodyih=') != -1) {<br \/>\n       document.body.innerHTML=decodeURIComponent(('#' + location.hash)).split('#bodyih=')[1];<br \/>\n     }<br \/>\n     butnotif=true;<br \/>\n     addcontents(document.getElementById('mysel').title.replace(\/\\.\\.\\.\/g, '... ~~'));<br \/>\n     butnotif=false;<br \/>\n     document.getElementById('mysel').title=document.getElementById('mysel').title.replace(\/\\.\\.\\.\/g, '... ' + String.fromCharCode(10));<br \/>\n     linesofcontent=[];<br \/>\n     linesofbcss=[];<br \/>\n     stylebit='';<br \/>\n     \/\/document.getElementById('mysel').readonly=true;<br \/>\n     \/\/document.getElementById('mysel').disabled=true;<br \/>\n     }<br \/>\n  }<br \/>\n<br \/>\n  function atstart() {<br \/>\n  document.body.style.zoom = 1.0<br \/>\n<br \/>\n  var scale = 'scale(1)';<br \/>\n  document.body.style.webkitTransform =  scale;    \/\/ Chrome, Opera, Safari<br \/>\n  document.body.style.msTransform =   scale;       \/\/ IE 9<br \/>\n  document.body.style.transform = scale;     \/\/ General<br \/>\n  wow=eval(window.outerWidth);<br \/>\n  woh=eval(window.outerHeight);<br \/>\n  wiw=eval(window.innerWidth);<br \/>\n  wih=eval(window.innerHeight);<br \/>\n  \/\/alert('' + wih + ' vs ' + woh);<br \/>\n  if (window.opener) {<br \/>\n    firstone=false;<br \/>\n    if (document.URL.indexOf('oktoemail=') != -1) {<br \/>\n    oktoemail=true;<br \/>\n    window.opener.settodoemail(false);<br \/>\n    } else if (document.URL.indexOf('oktosms=') != -1) {<br \/>\n    oktosms=true;<br \/>\n    window.opener.settodosms(false);<br \/>\n    } else {<br \/>\n    setTimeout(function(){<br \/>\n    oktoemail=window.opener.gettodoemail();<br \/>\n    oktosms=window.opener.gettodosms();<br \/>\n    window.opener.settodoemail(false);<br \/>\n    window.opener.settodosms(false);<br \/>\n    }, 2000);<br \/>\n    }<br \/>\n  }<font color=blue> else if (document.getElementById('dstyle')) {<br \/>\n    var huhvc=('' + window.sessionStorage.getItem('say_voice_speech_bubbles')).replace(\/^undefined\/g,'').replace(\/^null\/g,'');<br \/>\n    if (huhvc != '') {<br \/>\n   talkdo=true;<br \/>\n   sayvoice=huhvc;<br \/>\n   talkvoice=huhvc;<br \/>\n    }<br \/>\n    dcontit=dstyleit(document.getElementById('dstyle')).replace(\/[^\\x00-\\x7F]\/g, '');<br \/>\n    lastdcontit=dcontit;<br \/>\n    setInterval(dcontitf, 10000);<br \/>\n  }<\/font><br \/>\n<br \/>\n  }<br \/>\n<\/code><\/p>\n<p> &#8230;  in <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/select_palette.html---------------------GETME\" rel=\"noopener\">the SVG tspan 11 more legitimate letter word YouTube reference Speech Bubble changed<\/a> <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/select_palette.html---------------------GETME\" rel=\"noopener\">select_palette.html<\/a> <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/select_palette.html\" rel=\"noopener\">web application<\/a>, building on the &#8220;first cab off the rank&#8221; work of yesterday&#8217;s <a title='Talking Message Board Tutorial' href='#tmbt'>Talking Message Board Tutorial<\/a>.<\/p>\n<p><!--p>You can also see this play out at WordPress 4.1.1's <a target=\"_blank\" href='\/\/www.rjmprogramming.com.au\/ITblog\/talking-select-multiple-webpage-palette-speech-bubble-tutorial\/' rel=\"noopener\">Talking Select Multiple Webpage Palette Speech Bubble Tutorial<\/a>.<\/p-->\n<hr>\n<p id='tmbt'>Previous relevant <a target=\"_blank\" title='Talking Message Board Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/talking-message-board-tutorial\/' rel=\"noopener\">Talking Message Board Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"https:\/\/www.rjmprogramming.com.au\/PHP\/prepend\/talk_about_it.php\" rel=\"noopener\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Talking Message Board Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/text_to_speech_talking.gif\" title=\"Talking Message Board Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Talking Message Board Tutorial<\/p><\/div>\n<p>Using yesterday&#8217;s <a title='Text to Speech Hashtagging Tutorial' href='#tsht'>Text to Speech Hashtagging Tutorial<\/a>, as our &#8220;first cab off the rank&#8221; in it&#8217;s &#8220;first incarnation of usage&#8221; is a potentially &#8230;<\/p>\n<blockquote><p>\nTalking Message Board\n<\/p><\/blockquote>\n<p> &#8230; last talked about at <a trget=_blank title='Message Board One Liners Span Inline Talents Tutorial' href='https:\/\/www.rjmprogramming.com.au\/ITblog\/message-board-one-liners-span-inline-talents-tutorial'>Message Board One Liners Span Inline Talents Tutorial<\/a> where the proviso &#8230;<\/p>\n<blockquote><p>\nThat is, if you have an underlying macOS and MAMP system with macos_say_record.php placed into Document Root folder.\n<\/p><\/blockquote>\n<p> &#8230; holds sway, as a new piece of Text to Speech interfacing functionality.  This optional idea kicks into play &#8230;<\/p>\n<ol>\n<li>should a macOS user choose one of the <a target=\"_blank\" title='say command information from Apple' href='https:\/\/ss64.com\/osx\/say.html' rel=\"noopener\">&#8220;say&#8221;<\/a> voices off a new dropdown (ie. select element) &#8230; combined with &#8230;<\/li>\n<li>a new entry is added to the Message Board<\/li>\n<\/ol>\n<p>Our favourite codeline regarding this concerned an HTML iframe starting out with a public &#8220;src&#8221; attribute URL and empty title attribute, and then an <i>onload<\/i> event allows for Internet to meet Intranet via a window.open reimagination so that the &#8220;say&#8221; command can be constructed and executed at the underlying macOS command line via the PHP exec function conduit &#8230;<\/p>\n<p>&lt;?php<br \/>\n<code><br \/>\n       $ifsay=(\"&lt;iframe name=isayf id=isayf title='' style=display:none; src='\/About_Us.html' onload=\\\"if (this.title.length == 0) { this.title='say';  window.open('ht<font color=black>tp<\/font>:\/\/localhost:8888\/macos_say_record.php?justsayingforafriend=y&saythis=\" . urlencode(nobrk($afters)) . \"&voice=\" . explode(\" \",str_replace('+',' ',urldecode($avoice)))[-1 + sizeof(explode(\" \",str_replace('+',' ',urldecode($avoice))))] . \"','isayf'); }\\\"&gt;&lt;\/iframe&gt;\");<br \/>\n<\/code><br \/>\n?&gt;<\/p>\n<p> &#8230; regarding &#8230;<\/p>\n<ul>\n<li><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/prepend\/prepend.php-------GETME\" rel=\"noopener\">the changed<\/a> <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/prepend\/prepend.php-------GETME\" rel=\"noopener\">prepend.php<\/a> PHP (ie. serverside) &#8230; to help out &#8230;<\/li>\n<li><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/prepend\/talk_about_it.js-------GETME\" rel=\"noopener\">the changed<\/a> <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/prepend\/talk_about_it.js-------GETME\" rel=\"noopener\">talk_about_it.js<\/a> external Javascript (ie. clientside) &#8230; to help out &#8230;<\/li>\n<li><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/prepend\/talk_about_it.php-------GETME\" rel=\"noopener\">a changed<\/a> <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/prepend\/talk_about_it.php-------GETME\" rel=\"noopener\">talk_about_it.php<\/a> PHP <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/prepend\/talk_about_it.php\" rel=\"noopener\">Message Board<\/a> web application you can <a href='#mytable'>try below<\/a> &#8230;<\/p>\n<\/ul>\n<table id=mytable style=width:100%;>\n<tr>\n<th colspan=2>Message Board<\/th>\n<\/tr>\n<tr>\n<th>User 1<\/th>\n<th>User 2<\/th>\n<\/tr>\n<tr>\n<td>\n<iframe src='\/\/www.rjmprogramming.com.au\/PHP\/prepend\/talk_about_it.php' style=\"width:100%;height:1500px;\"><\/iframe>\n<\/td>\n<td>\n<iframe src='\/\/www.rjmprogramming.com.au\/PHP\/prepend\/talk_about_it.php' style=\"width:100%;height:1500px;\"><\/iframe>\n<\/td>\n<\/tr>\n<\/table>\n<p> &#8230; as helped out via a <a target=\"_blank\" title='macos_say_record.php' href='https:\/\/www.rjmprogramming.com.au\/macos_say_record.php----------------------------------GETME' download='macos_say_record.php' rel=\"noopener\">download<\/a> to a macOS MAMP port 8888 Document Root folder <a target=\"_blank\" title='macos_say_record.php' href='https:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=https:\/\/www.rjmprogramming.com.au\/macos_say_record.php----------------------------------GETME' rel=\"noopener\">the changed<\/a> PHP <a target=\"_blank\" title='macos_say_record.php' href='https:\/\/www.rjmprogramming.com.au\/macos_say_record.php----------------------------------GETME' rel=\"noopener\">macos_say_record.php<\/a> (where macOS users who have downloaded to an 8888 port MAMP local Apacahe web server can click\/try the user editable <span contenteditable=true style=text-decoration:underline;cursor:pointer; onclick=\"window.open(this.innerHTML.replace(\/\\&#038;amp\\;\/g,'&#038;'),'_blank','top=50,left=50,width=500,height=500');\">HtTp:\/\/localhost:8888\/macos_say_record.php?justsayingforafriend=y&#038;saythis=Welcome+one+and+all&#038;voice=Karen<\/span>) and try at the public RJM Programming website via <a target=\"_blank\" href=\"https:\/\/www.rjmprogramming.com.au\/macos_say_record.php\" rel=\"noopener\">this link<\/a>.<\/p>\n<p><!--p>You can also see this play out at WordPress 4.1.1's <a target=\"_blank\" href='\/\/www.rjmprogramming.com.au\/ITblog\/talking-message-board-tutorial\/' rel=\"noopener\">Talking Message Board Tutorial Tutorial<\/a>.<\/p-->\n<hr>\n<p id='tsht'>Previous relevant <a target=\"_blank\" title='Text to Speech Hashtagging Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/text-to-speech-hashtagging-tutorial\/' rel=\"noopener\">Text to Speech Hashtagging Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"https:\/\/www.rjmprogramming.com.au\/macos_say_record.php\" rel=\"noopener\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Text to Speech Hashtagging Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/text_to_speech_hashtagging.gif\" title=\"Text to Speech Hashtagging Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Text to Speech Hashtagging Tutorial<\/p><\/div>\n<p>Around here &#8230; it&#8217;s official &#8230;<\/p>\n<blockquote><p>\nwe&#8217;re having a morph!\n<\/p><\/blockquote>\n<p>Please &#8230; please &#8230; no congratulations yet?!  And thanks for the tomatoes &#8230; very ripe?!<\/p>\n<p>Anyway, yesterday&#8217;s <a title='Local Operating System Menu Intranet Feel Commentary Tutorial' href='#losmifct'>Local Operating System Menu Intranet Feel Commentary Tutorial<\/a> has struck a chord in that for &#8230;<\/p>\n<p><code><br \/>\nmacOS<br \/>\n<\/code><\/p>\n<p> &#8230; users we think there is a different aspect to ideas revolving around &#8230;<\/p>\n<ul>\n<li>speech &#8230; and &#8230;<\/li>\n<li>text<\/li>\n<\/ul>\n<p> &#8230; we want to pursue.  We&#8217;ve already forewarned above, of exclusions, but for <i>full functionality<\/i> with these ideas there probably will be more to follow.<\/p>\n<p>Around here there is no adage &#8220;let perfection be the enemy of the good&#8221; and so &#8220;on we go&#8221;, but, a precursor is to introduce &#8230;<\/p>\n<ul>\n<li>our inhouse macOS <a target=\"_blank\" title='say command information from Apple' href='https:\/\/ss64.com\/osx\/say.html' rel=\"noopener\">&#8220;say&#8221;<\/a> interfacing PHP &#8230; to &#8230;<\/li>\n<li>more independent hashtagging smarts<\/li>\n<\/ul>\n<p> &#8230; hashtagging <font size=1>(as we&#8217;ve been harping on about more and more recently)<\/font> being &#8230;<\/p>\n<ul>\n<li>able to support a lot of data up at any URL (eg. of a web browser address bar, and so can help interface a public domain &#8220;Internet&#8221; URL talking to a local (eg. <a target=\"_blank\" title='MAMP for Apache\/PHP\/MySql on Mac OS X local web server' href='http:\/\/www.mamp.info' rel=\"noopener\">MAMP<\/a> Apache web server based) web server &#8220;Intranet&#8221;<sup> feeling<\/sup> URL) &#8230;<\/li>\n<li>can support dynamic scenarios with web application webpages (especially PHP ones) where the webpage can achieve things dynamically without navigating to another webpage<\/li>\n<\/ul>\n<blockquote><p>\nBut aren&#8217;t we going to confront CORS restrictions here?\n<\/p><\/blockquote>\n<p>Well &#8230; shhhhhh &#8230; but a name<sup>d<\/sup> HTML <font color=blue>iframe child<\/font> and a <font color=purple>window.open<\/font> &#8230;<\/p>\n<p>&lt;?php<br \/>\n<code><br \/>\n $issayable='';<br \/>\n $vcb=\"Alex\";<br \/>\n $vvcb=\"\";<br \/>\n if (PHP_OS == \"Darwin\") {<br \/>\n   $issayable='y';<br \/>\n   if (isset($_GET['saythis']) && $vvcb == \"\") {<br \/>\n     $vvcb=str_replace('  ',' +',str_replace('+',' ',urldecode($_GET['saythis'])));<br \/>\n   }<br \/>\n   if (isset($_GET['voice'])) {<br \/>\n     $vcb=explode(' ',str_replace('+',' ',urldecode($_GET['voice'])))[0];<br \/>\n   }<br \/>\n   if (isset($_GET['justsayingforafriend']) && $vvcb != \"\") {<br \/>\n     exec('say -v ' . $vcb . ' ' . $vvcb);<br \/>\n     exit;<br \/>\n   }<br \/>\n }<br \/>\n<\/code><br \/>\n&lt;?php echo &#8221;<br \/>\n<code><br \/>\n  var saymode='\" . $dsm . \"';<br \/>\n  var issayable='\" . $issayable . \"';<br \/>\n  var lastlhis='', lastlhthingo='',lhlook=false;<br \/>\n<br \/> <br \/>\n function lastlhex() {<br \/>\n           if (lastlhis != document.getElementById('theproofif').src) {<br \/>\n              lastlhis=document.getElementById('theproofif').src;<br \/>\n           } else if (lastlhthingo != ('' + location.hash)) {<br \/>\n              lastlhthingo=('' + location.hash);<br \/>\n   if ((issayable == 'y' || ('' + navigator.platform).toLowerCase().indexOf('mac') == 0) && ('' + document.URL + '#' + decodeURIComponent(('' + location.hash))).indexOf('saythis=') != -1 && ('' + document.URL + '#' + decodeURIComponent(('' + location.hash))).indexOf('media=') == -1) {<br \/>\n     if ((issayable == 'y' || ('' + navigator.platform).toLowerCase().indexOf('mac') == 0) && ('' + document.URL + '#' + decodeURIComponent(('' + location.hash))).indexOf('voice=') != -1 && ('' + document.URL + '#' + decodeURIComponent(('' + location.hash))).indexOf('media=') == -1) {<br \/>\n       if (document.getElementById('svoicecode').innerHTML.indexOf(decodeURIComponent(document.URL.split('voice=')[1].split('&')[0].split('#')[0]).replace(\/\\+\/g,' ').replace(\/\\ \\ \/g,'  +') + '\\\"') != -1) {<br \/>\n         document.getElementById('svoicecode').value=document.getElementById('svoicecode').innerHTML.split(decodeURIComponent(document.URL.split('voice=')[1].split('&')[0].split('#')[0]).replace(\/\\\\+\/g,' ').replace(\/\\\\ \\\\ \/g,'  +') + '\\\"')[0].split('\\\"')[eval(-1 + document.getElementById('svoicecode').innerHTML.split(decodeURIComponent(document.URL.split('voice=')[1].split('&')[0].split('#')[0]).replace(\/\\\\+\/g,' ').replace(\/\\\\ \\\\ \/g,'  +') + '\\\"')[0].split('\\\"').length)] + decodeURIComponent(document.URL.split('voice=')[1].split('&')[0].split('#')[0]).replace(\/\\\\+\/g,' ').replace(\/\\\\ \\\\ \/g,'  +');<br \/>\n       }<br \/>\n     }<br \/>\n     document.getElementById('thewords').value=decodeURIComponent(document.URL.split('saythis=')[1].split('&')[0].split('#')[0]).replace(\/\\+\/g,' ').replace(\/\\ \\ \/g,'  +');<br \/>\n     if (56 == 56) {<br \/>\n     if (issayable == 'y') {<br \/>\n     document.getElementById('theproofif').src='HTTP:\/\/localhost:8888\/macos_say_record.php?justsayingforafriend=y&voice=' + document.getElementById('svoicecode').value.split(' ')[eval(-1 + document.getElementById('svoicecode').value.split(' ').length)] + '&saythis=' + encodeURIComponent(document.getElementById('thewords').value);<br \/>\n     } else {<br \/>\n     <font color=purple>window.open('HTTP:\/\/localhost:8888\/macos_say_record.php?justsayingforafriend=y&voice=' + document.getElementById('svoicecode').value.split(' ')[eval(-1 + document.getElementById('svoicecode').value.split(' ').length)] + '&saythis=' + encodeURIComponent(document.getElementById('thewords').value), 'theproofif');<\/font><br \/>\n     }<br \/>\n     } else {<br \/>\n     zhr = new XMLHttpRequest();<br \/>\n     zform=new FormData();<br \/>\n     zform.append('justsayingforafriend', 'y');<br \/>\n     zform.append('saythis', document.getElementById('thewords').value);<br \/>\n     zform.append('voice', document.getElementById('svoicecode').value.split(' ')[eval(-1 + document.getElementById('svoicecode').value.split(' ').length)]);<br \/>\n     zhr.open('get', 'HTTP:\/\/localhost:8888\/macos_say_record.php', true);<br \/>\n     zhr.send(zform);<br \/>\n     }<br \/>\n   }<br \/>\n              }<br \/>\n }<br \/>\n<\/code><br \/>\n&#8220;; ?><br \/>\n&lt;?php echo &#8221;<br \/>\n<code><br \/>\n<font color=blue>&lt;iframe data-onerror=alert(564); onload=resproof(this); name=theproofif id=theproofif style=display:none; src='\/About_Us.html'&gt;&lt;\/iframe&gt;<\/font><br \/>\n<\/code><br \/>\n&#8220;; ?><\/p>\n<p> &#8230; can be that &#8220;Fred and Ginger&#8221; pairing to make this &#8220;Internet and Intranet&#8221; interplay seamless &#8230; shhhhhhh!<\/p>\n<p>That being said, if you are a macOS user with a local web server like MAMP installed we&#8217;d ask you to <a target=\"_blank\" title='macos_say_record.php' href='https:\/\/www.rjmprogramming.com.au\/macos_say_record.php----------------------------------GETME' download='macos_say_record.php' rel=\"noopener\">download<\/a> to a macOS MAMP port 8888 Document Root folder <a target=\"_blank\" title='macos_say_record.php' href='https:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=https:\/\/www.rjmprogramming.com.au\/macos_say_record.php----------------------------------GETME' rel=\"noopener\">the changed<\/a> PHP <a target=\"_blank\" title='macos_say_record.php' href='https:\/\/www.rjmprogramming.com.au\/macos_say_record.php----------------------------------GETME' rel=\"noopener\">macos_say_record.php<\/a> (where macOS users who have downloaded to an 8888 port MAMP local Apacahe web server can click\/try the user editable <span contenteditable=true style=text-decoration:underline;cursor:pointer; onclick=\"window.open(this.innerHTML.replace(\/\\&#038;amp\\;\/g,'&#038;'),'_blank','top=50,left=50,width=500,height=500');\">HtTp:\/\/localhost:8888\/macos_say_record.php?justsayingforafriend=y&#038;saythis=Welcome+one+and+all&#038;voice=Karen<\/span>) and try at the public RJM Programming website via <a target=\"_blank\" href=\"https:\/\/www.rjmprogramming.com.au\/macos_say_record.php\" rel=\"noopener\">this link<\/a> or below &#8230;<\/p>\n<p><iframe style=\"width:100%;height:1200px;\" src=\"https:\/\/www.rjmprogramming.com.au\/macos_say_record.php\" rel=\"noopener\"><\/iframe><\/p>\n<p><!--p>You can also see this play out at WordPress 4.1.1's <a target=\"_blank\" href='\/\/www.rjmprogramming.com.au\/ITblog\/text-to-speech-hashtagging-tutorial\/' rel=\"noopener\">Text to Speech Hashtagging Tutorial<\/a>.<\/p-->\n<hr>\n<p id='losmifct'>Previous relevant <a target=\"_blank\" title='Local Operating System Menu Intranet Feel Commentary Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/local-operating-system-menu-intranet-feel-commentary-tutorial\/' rel=\"noopener\">Local Operating System Menu Intranet Feel Commentary Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"https:\/\/www.rjmprogramming.com.au\/open_extravaganza.php\" rel=\"noopener\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Local Operating System Menu Intranet Feel Commentary Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/open_extravaganza_commentary.gif\" title=\"Local Operating System Menu Intranet Feel Commentary Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Local Operating System Menu Intranet Feel Commentary Tutorial<\/p><\/div>\n<p>Further to yesterday&#8217;s <a title='Local Operating System Menu Intranet Feel Operator Tutorial' href='#losmifot'>Local Operating System Menu Intranet Feel Operator Tutorial<\/a> there are a couple of macOS specific additional pieces of functionality we&#8217;d like to offer users, they being &#8230;<\/p>\n<ol>\n<li>the macOS open command has the ability to try to open any windows it creates in the background via it&#8217;s &#8230;<br \/>\n<code><br \/>\n<a target=\"_blank\" href='https:\/\/scriptingosx.com\/2017\/02\/the-macos-open-command\/' rel=\"noopener\"> -g <\/a><br \/>\n<\/code><br \/>\n &#8230; switch <\/li>\n<li>as we are on macOS why not offer a Text to Speech means of adding commentary as macOS open commands are issued via its &#8230;<br \/>\n<code><br \/>\n<a target=\"_blank\" title='say command information from Apple' href='https:\/\/ss64.com\/osx\/say.html' rel=\"noopener\">say<\/a><br \/>\n<\/code><br \/>\n &#8230; command<\/li>\n<\/ol>\n<p>?  <font size=1>And closing arguments against this will be accepted up until the end of Black Friday sales, whenever that is?!<\/font><\/p>\n<p>We decided to pass these over as your usual get arguments on the address bar URL, being as we are always using PHP $_GET[] data, now, so far, in this project.<\/p>\n<p>And so, yet again, perhaps, you may want to (re-)try <a download=\"open_extravaganza.php\" target=\"_blank\" href=\"https:\/\/www.rjmprogramming.com.au\/open_extravaganza.php-----GETME\" rel=\"noopener\">download<\/a> as <a data-download=\"open_extravaganza.php\" target=\"_blank\" href=\"https:\/\/www.rjmprogramming.com.au\/open_extravaganza.php----GETME\" rel=\"noopener\">open_extravaganza.php<\/a> filename (changed  <a data-download=\"open_extravaganza.php\" target=\"_blank\" href=\"https:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=https:\/\/www.rjmprogramming.com.au\/open_extravaganza.php-----GETME\" rel=\"noopener\">this way<\/a>) to MAMP&#8217;s Document Root folder\/directory), and we think it is now less boring for macOS or Windows users to begin with interfacing to our public RJM Programming website <font size=1>(though if you have no Apache\/PHP\/MySql local web server, and want to install one, a right click on the dropdown below, for your non-mobile platform is a possibility for port 8888 on macOS and port 80 (ie. the default) on Windows)<\/font> or <a href='#thisiffy'>try it below<\/a> &#8230;<\/p>\n<p><!--p>You can also see this play out at WordPress 4.1.1's <a target=\"_blank\" href='\/\/www.rjmprogramming.com.au\/ITblog\/local-operating-system-menu-intranet-feel-commentary-tutorial\/' rel=\"noopener\">Local Operating System Menu Intranet Feel Commentary Tutorial<\/a>.<\/p-->\n<hr>\n<p id='losmifot'>Previous relevant <a target=\"_blank\" title='Local Operating System Menu Intranet Feel Operator Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/local-operating-system-menu-intranet-feel-operator-tutorial\/' rel=\"noopener\">Local Operating System Menu Intranet Feel Operator Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"https:\/\/www.rjmprogramming.com.au\/open_extravaganza.php\" rel=\"noopener\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Local Operating System Menu Intranet Feel Operator Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/open_extravaganza_operator.gif\" title=\"Local Operating System Menu Intranet Feel Operator Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Local Operating System Menu Intranet Feel Operator Tutorial<\/p><\/div>\n<p>Further to yesterday&#8217;s <a title='Local Operating System Menu Intranet Feel Options Tutorial' href='#xlosmifot'>Local Operating System Menu Intranet Feel Options Tutorial<\/a> we broach the issue &#8230;<\/p>\n<blockquote><p>\nWhat happens when a <i>delimiter<\/i> character is the same as an <i>operator<\/i> character in amongst data sent via HTML form from one webpage to the next webpage?\n<\/p><\/blockquote>\n<p>We&#8217;re talking about the <i>+<\/i> character which can be &#8230;<\/p>\n<ul>\n<li>a space encryption character used a lot when PHP is the receiving webpage&#8217;s language<\/li>\n<li>an operator in mathematics, for addition<\/li>\n<\/ul>\n<p>If the latter is the meaning of a <i>+<\/i> plus character within that form data sent out, how can we know it is not just a space character encrypted?<\/p>\n<blockquote><p>\nExcellent question, that we grapple with in different ways around here, all the time!\n<\/p><\/blockquote>\n<p>Today, as far as this goes, take a look at <font color=blue>the value<\/font> attribute of <i>a new macOS dropdown option<\/i> we introduced today &#8230;<\/p>\n<p>&lt;?php<br \/>\n<code><br \/>\n    $selstuff=\"&lt;br&gt;&lt;br&gt;&lt;form onsubmit=\\\"formclickmode=0; document.body.style.cursor='pointer'; if (lastselo) { lastselo.style.cursor='pointer'; lastselo=null; } if (document.getElementById('opsel')) { if (document.getElementById('opsel').value.length &gt; 0) { this.action=document.getElementById('opsel').value;  }   } return perhaps(true,this);\\\" id=myform method=GET action='.\/open_extravaganza.php'&gt;&lt;select title='Right click can modify dropdown choices' style=background-color:yellow; size=18 id=mysel multiple name=afteropen onchange=\\\"if (this.value.length != 0) { if (1 == 1) { formclickmode=prg(1,event.target); } else { document.getElementById('sbutmac').click(); } } \\\"&gt;&lt;option oncontextmenu=ocmopt(this); value=''&gt;Select macOS open command type(s) below ...&lt;\/option&gt;&lt;option oncontextmenu=ocmopt(this); value=' -a Finder'&gt;Finder&lt;\/option&gt;&lt;option oncontextmenu=ocmopt(this); value=' -a Preview'&gt;Preview&lt;\/option&gt;&lt;option oncontextmenu=ocmopt(this); value=' -a TextEdit'&gt;TextEdit&lt;\/option&gt;&lt;option oncontextmenu=ocmopt(this); value=' -b com.apple.VoiceMemos'&gt;Voice Memo&lt;\/option&gt;&lt;option oncontextmenu=ocmopt(this); value=' -b com.apple.QuickTimePlayerX https:\/\/www.rjmprogramming.com.au\/Windows\/windows_step_recorder.mov'&gt;QuickTime Player&lt;\/option&gt;&lt;option oncontextmenu=ocmopt(this); value=' -b com.apple.VoiceOverUtility'&gt;VoiceOver Utility&lt;\/option&gt;&lt;option oncontextmenu=ocmopt(this); value=' ~\/Desktop\/Screen\\\\ Shot\\\\ *.png'&gt;Preview all screenshot files&lt;\/option&gt;&lt;option oncontextmenu=ocmopt(this); value=' -a Firefox https:\/\/www.rjmprogramming.com.au'&gt;Firefox&lt;\/option&gt;&lt;option oncontextmenu=ocmopt(this); value='<font color=olive> -a Safari http:\/\/localhost:8888\/macos_say_record.php?saythis=Welcome\\\\&voice=Karen\\\\&audioname=;open<\/font> -a Safari http:\/\/localhost:8888\/macos_say_record.php'&gt;Safari interface attempt to say&lt;\/option&gt;&lt;option oncontextmenu=ocmopt(this); value=' -b com.apple.ScriptEditor2 ~\/Desktop\/test_gvp.scpt'&gt;AppleScript example ready to Script-&gt;Run&lt;\/option&gt;<i>&lt;option oncontextmenu=ocmopt(this); value=\\\"<font color=blue>IGVjaG8gJzU2NCs5ODc2NScgfCBiYw==<\/font>\\\"&gt;Add 564 to 98765&lt;\/option&gt;<\/i>&lt;option oncontextmenu=ocmopt(this); value=' ~\/Documents ~\/Desktop ~\/Downloads'&gt;Open the D folders&lt;\/option&gt;&lt;option oncontextmenu=ocmopt(this); value=' https:\/\/google.com'&gt;Google&lt;\/option&gt;&lt;option oncontextmenu=ocmopt(this); value=' https:\/\/wikipedia.org'&gt;Wikipedia&lt;\/option&gt;&lt;option oncontextmenu=ocmopt(this); value=' https:\/\/www.rjmprogramming.com.au'&gt;RJM Programming&lt;\/option&gt;&lt;option oncontextmenu=ocmopt(this); value='ls -l . | open -f'&gt;Pipe folder listing into TextEdit&lt;\/option&gt;&lt;option oncontextmenu=ocmopt(this); value='x-man-page:\/\/open'&gt;Show man page in Terminal&lt;\/option&gt;&lt;\/select&gt;&lt;br&gt;&lt;br&gt;&lt;input id=sbutmac type=submit value='Execute'&gt;&lt;\/input&gt;&lt;\/form&gt;\";<br \/>\n<\/code><br \/>\n?&gt;<\/p>\n<p>Do you recognize any new encryption pattern with this option&#8217;s value?   Yes, it is the &#8230;<\/p>\n<blockquote><p>\nbase64 encoded\n<\/p><\/blockquote>\n<p> &#8230; version of &#8230;<\/p>\n<p><code><br \/>\n echo '564+98765' | bc<br \/>\n<\/code><\/p>\n<p> &#8230; as a macOS Terminal application command line way to add 564 + 98765 via the macOS <a target=\"_blank\" title='macOS bc' href='https:\/\/ss64.com\/mac\/bc.html' rel=\"noopener\">bc<\/a> command, we got wind of via &#8230;<\/p>\n<p><code><br \/>\n&lt;html&gt;<br \/>\n&lt;body&gt;<br \/>\n&lt;script type=text\/javascript&gt;<br \/>\n  var x=prompt('' + <a target=\"_blank\" title='Javascript btoa information from w3schools' href='https:\/\/www.w3schools.com\/jsref\/met_win_btoa.asp' rel=\"noopener\">window.btoa<\/a>(\" echo '564+98765' | bc\"), '' + window.btoa(\" echo '564+98765' | bc\"));<br \/>\n&lt;\/script&gt;<br \/>\n&lt;\/body&gt;<br \/>\n&lt;\/html&gt;<br \/>\n<\/code><\/p>\n<p> &#8230; and please be assured if one of your own dropdown option entry values contains a <i>+<\/i> character you do not have to do the work above <font size=1>(unless you are a masochist, <span><a target=\"_blank\" title='?' class=\"audioytplay\" href='https:\/\/www.youtube.com\/watch?v=PtR4cWb4HNg' rel=\"noopener\">that is<\/a><\/span>)<\/font>, rather the web application can help you out.<\/p>\n<p>Which begs the question &#8230;<\/p>\n<blockquote><p>\nIf <i>window.btoa<\/i> is the &#8220;Fred&#8221; of the Javascript side of the work, what is the PHP receiving side&#8217;s &#8220;Ginger&#8221;?\n<\/p><\/blockquote>\n<p>Well, <a target=\"_blank\" title=\"?\" href='https:\/\/www.youtube.com\/watch?v=Bq7VQc7kLAo' rel=\"noopener\">yes<\/a>, would that be <i>base64_decode<\/i> <font color=purple>pray tell<\/font>?!<\/p>\n<p>&lt;?php<br \/>\n<code><br \/>\n  <font color=purple>$plusin='+';<br \/>\n  $plusout=' ';<\/font><br \/>\n  $fromsc='~\/Desktop\/test_gvp.scpt';<br \/>\n  $tosc='~\/Desktop\/test_gvp.scpt';<br \/>\n  <br \/>\n  <font color=purple>function oururldecode($ofwhat) {<br \/>\n    global $plusin, $plusout, $fromsc, $tosc;<br \/>\n    $interim=str_replace($fromsc,$tosc,urldecode($ofwhat));<br \/>\n    if (strpos($interim, ' ') === false || substr(($interim . 'x'),0,1) == '+') {<br \/>\n      $plusin=' ';<br \/>\n      $plusout=' ';<br \/>\n      return str_replace($fromsc,$tosc,<a target=\"_blank\" title='PHP base64_decode information' href='http:\/\/php.net\/manual\/en\/function.base64-decode.php' rel=\"noopener\">base64_decode<\/a>($ofwhat));<br \/>\n    } else {<br \/>\n      $plusin='+';<br \/>\n      $plusout=' ';<br \/>\n    }<br \/>\n    return $interim;<br \/>\n  }<\/font><br \/>\n  <br \/>\n  if (isset($_GET['afteropen'])) {<br \/>\n    if (sizeof(explode('afteropen=', '?' . $_SERVER['QUERY_STRING'])) &gt; 2) {<br \/>\n    for ($thisone=1; $thisone&lt;sizeof(explode('afteropen=', '?' . $_SERVER['QUERY_STRING'])); $thisone++) {<br \/>\n    array_push($afteropens, str_replace('  ',' '<font color=purple> . $plusin<\/font>,str_replace(<font color=purple>$plusin,$plusout,<\/font><font color=purple>our<\/font>urldecode(explode('#',explode('&',explode('afteropen=', $_SERVER['QUERY_STRING'])[$thisone])[0])[0]))));<br \/>\n    }<br \/>\n    } else {<br \/>\n    $afteropen=(trim(str_replace('  ',' '<font color=purple> . $plusin<\/font>,str_replace(<font color=purple>$plusin,$plusout,<\/font><font color=purple>our<\/font>urldecode($_GET['afteropen'])))) == '' ? '' : ' ' . trim(str_replace('  ',' ' . $plusin,str_replace($plusin,$plusout,oururldecode($_GET['afteropen'])))));<br \/>\n    $afteropens=[$afteropen];<br \/>\n    }<br \/>\n  }<br \/>\n<\/code><br \/>\n?&gt;<\/p>\n<p>This offers a dynamic way to swap between the concepts, whose logic depends a bit on that first value character always being a space in this project.   But that is so, and so this thinking helps a lot, and allows for that differentiation of <i>+<\/i> character meaning between (the rare) <i>+<\/i> operator (in mathematics) meaning and the <i>+<\/i> character PHP space character encryption meaning.<\/p>\n<p>Today we&#8217;re also introducing an AppleScript interfacing option, and with the &#8220;say&#8221; option we now <font color=olive>allow for command conjoining<\/font> with the dropdown option value as long as the <i>open<\/i> directly follows on from the semicolon conjoining <sup>think it&#8217;s an<\/sup> operator!<\/p>\n<p>And so, again, perhaps, you may want to (re-)try <a download=\"open_extravaganza.php\" target=\"_blank\" href=\"https:\/\/www.rjmprogramming.com.au\/open_extravaganza.php----GETME\" rel=\"noopener\">download<\/a> as <a data-download=\"open_extravaganza.php\" target=\"_blank\" href=\"https:\/\/www.rjmprogramming.com.au\/open_extravaganza.php---GETME\" rel=\"noopener\">open_extravaganza.php<\/a> filename (changed  <a data-download=\"open_extravaganza.php\" target=\"_blank\" href=\"https:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=https:\/\/www.rjmprogramming.com.au\/open_extravaganza.php----GETME\" rel=\"noopener\">this way<\/a>) to MAMP&#8217;s Document Root folder\/directory), and we think it is now less boring for macOS or Windows users to begin with interfacing to our public RJM Programming website <font size=1>(though if you have no Apache\/PHP\/MySql local web server, and want to install one, a right click on the dropdown below, for your non-mobile platform is a possibility for port 8888 on macOS and port 80 (ie. the default) on Windows)<\/font> or <a href='#thisiffy'>try it below<\/a> &#8230;<\/p>\n<p><b><i>Did you know?<\/i><\/b><\/p>\n<p>Have you noticed in amongst the macOS <i>open<\/i> command values lots of ones starting with the switch &#8230;<\/p>\n<p><code><br \/>\n -b<br \/>\n<\/code><\/p>\n<p>?  Well, <a target=\"_blank\" href='https:\/\/scriptingosx.com\/2017\/02\/the-macos-open-command\/' rel=\"noopener\">The macOS open command<\/a>, thanks, told us &#8230;<\/p>\n<blockquote cite='https:\/\/scriptingosx.com\/2017\/02\/the-macos-open-command\/'><p>\nYou can specify just the name of an application or the full path, i.e. \/Applications\/Preview.app. If you need to be specific, you can also specify an application\u2019s bundle identifier with -b com.apple.Preview.\n<\/p><\/blockquote>\n<p> &#8230; found out, we&#8217;ve been finding, successfully, via &#8230;<\/p>\n<ol>\n<li>in Finder right click the application of interest<\/li>\n<li>click Show Package Contents<\/li>\n<li>open the info.plist file in your favourite Text Editor<\/li>\n<li>look for &#8230;<br \/>\n<blockquote><p>\nCFBundleIdentifier\n<\/p><\/blockquote>\n<p> &#8230; within, for example, AppleScript&#8217;s info.plist &#8230;<br \/>\n<code><br \/>\n&lt;key&gt;CFBundleIdentifier&lt;\/key&gt;<br \/>\n&lt;string&gt;com.apple.ScriptEditor2&lt;\/string&gt;<br \/>\n<\/code><br \/>\n &#8230; to come up with, for example &#8230;<br \/>\n<code><br \/>\nopen -b com.apple.ScriptEditor2<br \/>\n<\/code><br \/>\n &#8230; as a way to open macOS application AppleScript (or Script Editor)\n<\/li>\n<\/ol>\n<p><!--p>You can also see this play out at WordPress 4.1.1's <a target=\"_blank\" href='\/\/www.rjmprogramming.com.au\/ITblog\/local-operating-system-menu-intranet-feel-operator-tutorial\/' rel=\"noopener\">Local Operating System Menu Intranet Feel Operator Tutorial<\/a>.<\/p-->\n<hr>\n<p id='xlosmifot'>Previous relevant <a target=\"_blank\" title='Local Operating System Menu Intranet Feel Options Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/local-operating-system-menu-intranet-feel-options-tutorial\/' rel=\"noopener\">Local Operating System Menu Intranet Feel Options Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"https:\/\/www.rjmprogramming.com.au\/open_extravaganza.php\" rel=\"noopener\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Local Operating System Menu Intranet Feel Options Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/Windows\/open_extravaganza_share.gif\" title=\"Local Operating System Menu Intranet Feel Options Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Local Operating System Menu Intranet Feel Options Tutorial<\/p><\/div>\n<p>A static list of options in the functional dropdown, as with yesterday&#8217;s <a title='Local Operating System Menu Intranet Feel Windows Tutorial' href='#losmifwt'>Local Operating System Menu Intranet Feel Windows Tutorial<\/a> does not sound as much fun as &#8230;<\/p>\n<ul>\n<li>dropdown (ie. select element) options that if you right click bring up a means by which &#8230;\n<ol>\n<li>existant option can be modified<\/li>\n<li>a new option can be added<\/li>\n<li>the option pointed at effectively nullified<\/li>\n<li>an option to remember for next time on that web browser when the web application is re-opened<\/li>\n<li>an option to forget the previous option&#8217;s work &#8230; <font size=1>it works!  &#8230; we&#8217;ve already forgotten!  &#8230; chortle, chortle<\/font><\/li>\n<\/ol>\n<p> &#8230; and we decided also, now that the user has some control over functionality, then &#8230;<\/li>\n<li>offer email and\/or SMS sharing including or excluding any option tinkering as described above<\/li>\n<li>offer more Windows explorer.exe options thanks to <a target=\"_blank\" title='https:\/\/www.geoffchappell.com\/studies\/windows\/shell\/explorer\/cmdline.htm' href='\/\/www.geoffchappell.com\/studies\/windows\/shell\/explorer\/cmdline.htm' rel=\"noopener\">https:\/\/www.geoffchappell.com\/studies\/windows\/shell\/explorer\/cmdline.htm<\/a><\/li>\n<li>offer the chance off an RJM Programming incarnation&#8217;s top <a target=\"_blank\" title='MAMP for Apache\/PHP\/MySql on Mac OS X local web server' href='http:\/\/www.mamp.info' rel=\"noopener\">MAMP<\/a>\/macOS\/Windows dropdown (ie. select element, now showing with size attribute 3) right click chances to adjust Apache (eg. MAMP) port setting assumptions<\/li>\n<\/ul>\n<p>And so, perhaps, you may want to (re-)try <a download=\"open_extravaganza.php\" target=\"_blank\" href=\"https:\/\/www.rjmprogramming.com.au\/open_extravaganza.php---GETME\" rel=\"noopener\">download<\/a> as <a data-download=\"open_extravaganza.php\" target=\"_blank\" href=\"https:\/\/www.rjmprogramming.com.au\/open_extravaganza.php--GETME\" rel=\"noopener\">open_extravaganza.php<\/a> filename (changed  <a data-download=\"open_extravaganza.php\" target=\"_blank\" href=\"https:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=https:\/\/www.rjmprogramming.com.au\/open_extravaganza.php---GETME\" rel=\"noopener\">this way<\/a>) to MAMP&#8217;s Document Root folder\/directory), and we think it is now less boring for macOS or Windows users to begin with interfacing to our public RJM Programming website <font size=1>(though if you have no Apache\/PHP\/MySql local web server, and want to install one, a right click on the dropdown below, for your non-mobile platform is a possibility for port 8888 on macOS and port 80 (ie. the default) on Windows)<\/font> or <a href='#thisiffy'>try it below<\/a> &#8230;<\/p>\n<p><!--p>You can also see this play out at WordPress 4.1.1's <a target=\"_blank\" href='\/\/www.rjmprogramming.com.au\/ITblog\/local-operating-system-menu-intranet-feel-options-tutorial\/' rel=\"noopener\">Local Operating System Menu Intranet Feel Options Tutorial<\/a>.<\/p-->\n<hr>\n<p id='losmifwt'>Previous relevant <a target=\"_blank\" title='Local Operating System Menu Intranet Feel Windows Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/local-operating-system-menu-intranet-feel-windows-tutorial\/' rel=\"noopener\">Local Operating System Menu Intranet Feel Windows Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"https:\/\/www.rjmprogramming.com.au\/open_extravaganza.php\" rel=\"noopener\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Local Operating System Menu Intranet Feel Windows Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/Windows\/windows_extravaganza.gif\" title=\"Local Operating System Menu Intranet Feel Windows Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Local Operating System Menu Intranet Feel Windows Tutorial<\/p><\/div>\n<p>Yesterday&#8217;s <a title='Local Operating System Menu Intranet Feel Multiple Tutorial' href='#losmifmt'>Local Operating System Menu Intranet Feel Multiple Tutorial<\/a>&#8216;s smarts regarding dropdown multiple selections gets passed through to today&#8217;s &#8230;<\/p>\n<blockquote><p>\nWindows MAMP PHP 7.4.16\n<\/p><\/blockquote>\n<p> &#8230; <sub>oh, oh<\/sub><sup> &#8220;They&#8217;re mentioning version numbers &#8230; that can&#8217;t be good&#8221;<\/sup> &#8230; interfacing work.<\/p>\n<p>And yes, it was a struggle, with this PHP version on MAMP disallowing &#8230;<\/p>\n<ul>\n<li>file_put_contents &#8230; and, we would guess, file_get_contents &#8230;<\/li>\n<li>exec or shell_exec or passthru or system<\/li>\n<li>fopen writing to any *.bat<\/li>\n<\/ul>\n<p> &#8230; and so, what we ended up with was an &#8220;as you login it starts&#8221; <i>lookfor_extravaganza.bat<\/i> we wrote that has less qualms with all these security matters happening in PHP, looking like <a target=\"_blank\" title='lookfor_extravaganza.bat' href='http:\/\/www.rjmprogramming.com.au\/Windows\/lookfor_extravaganza.bat_GETME' rel=\"noopener\">lookfor_extravaganza.bat<\/a> (where you could consider the <i>timeout<\/i> command rather than our <i>ping<\/i> means to introduce a sleep\/wait) &#8230;<\/p>\n<p><code><br \/>\nrem lookfor_extravaganza.bat<br \/>\nrem RJM Programming<br \/>\nrem November, 2025<br \/>\nrem Help out open_extravaganza.php on local Windows MAMP incarnation regarding no file_put_contents nor exec nor shell_exec allowed<br \/>\nrem Installed via ...<br \/>\nrem Win + R<br \/>\nrem shell:startup<br \/>\nrem ... copied into place via advice of ...<br \/>\nrem https:\/\/www.google.com\/search?q=continuousnning+in+background+at+login&rlz=1C5OZZY_en&oq=continuousnning+in+background++at+login&gs_lcrp=EgZjaHJvbWUyBggAEEUYOTIJCAEQIRgKGKABMgkIAhAhGAoYoAEyCQgDECEYChigAdIBCjc1MjA1ajBqMTWoAgCwAgA&sourceid=chrome&ie=UTF-8<br \/>\n@echo off<br \/>\ncd C:\\MAMP\\htdocs<br \/>\necho y > c:\\MAMP\\htdocs\\open_extravaganza.y<br \/>\n:top<br \/>\nif exist c:\\MAMP\\htdocs\\open_extravaganza.bxt rename c:\\MAMP\\htdocs\\open_extravaganza.bxt open_extravaganza.bat<br \/>\nif exist c:\\MAMP\\htdocs\\open_extravaganza.bat call c:\\MAMP\\htdocs\\open_extravaganza.bat<br \/>\nif exist c:\\MAMP\\htdocs\\open_extravaganza.bat erase c:\\MAMP\\htdocs\\open_extravaganza.bat < c:\\MAMP\\htdocs\\open_extravaganza.y\nping \/w 5000 127.0.0.1 > NUL<br \/>\ngoto top<br \/>\n<\/code><\/p>\n<p> &#8230; leaving the PHP to just arrange that <i>c:\\MAMP\\htdocs\\open_extravaganza.bxt<\/i> gets written via fopen means.  Did you read above about where to &#8220;plonk&#8221; a DOS *.bat so that it starts up on logging in, as per &#8230;<\/p>\n<blockquote><p>\nWin + R<br \/>\nshell:startup<br \/>\n &#8230; copied into place via advice of &#8230;\n<\/p><\/blockquote>\n<p><a target=\"_blank\" href='https:\/\/www.google.com\/search?q=continuousnning+in+background+at+login&#038;rlz=1C5OZZY_en&#038;oq=continuousnning+in+background++at+login&#038;gs_lcrp=EgZjaHJvbWUyBggAEEUYOTIJCAEQIRgKGKABMgkIAhAhGAoYoAEyCQgDECEYChigAdIBCjc1MjA1ajBqMTWoAgCwAgA&#038;sourceid=chrome&#038;ie=UTF-8' rel=\"noopener\">this great advice, thanks<\/a> &#8230; being, perhaps, simpler than Task Schedular thoughts?!<\/p>\n<p>No time to see what else explorer.exe File Explorer is capable of &#8230; that is for another day we&#8217;re thinking?!<\/p>\n<p>Anyway, you may want to (re-)try <a download=\"open_extravaganza.php\" target=\"_blank\" href=\"https:\/\/www.rjmprogramming.com.au\/open_extravaganza.php--GETME\" rel=\"noopener\">download<\/a> as <a data-download=\"open_extravaganza.php\" target=\"_blank\" href=\"https:\/\/www.rjmprogramming.com.au\/open_extravaganza.php--GETME\" rel=\"noopener\">open_extravaganza.php<\/a> filename (changed  <a data-download=\"open_extravaganza.php\" target=\"_blank\" href=\"https:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=https:\/\/www.rjmprogramming.com.au\/open_extravaganza.php--GETME\" rel=\"noopener\">this way<\/a>) to MAMP&#8217;s Document Root folder\/directory), and we think it is now less boring for macOS or Windows users to begin with interfacing to our public RJM Programming website <font size=1>(though if you have no Apache\/PHP\/MySql local web server, and want to install one, a right click on the dropdown below, for your non-mobile platform is a possibility for port 8888 on macOS and port 80 (ie. the default) on Windows)<\/font> or <a href='#thisiffy'>try it below<\/a> &#8230;<\/p>\n<p><!--p>You can also see this play out at WordPress 4.1.1's <a target=\"_blank\" href='\/\/www.rjmprogramming.com.au\/ITblog\/local-operating-system-menu-intranet-feel-windows-tutorial\/' rel=\"noopener\">Local Operating System Menu Intranet Feel Windows Tutorial<\/a>.<\/p-->\n<hr>\n<p id='losmifmt'>Previous relevant <a target=\"_blank\" title='Local Operating System Menu Intranet Feel Multiple Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/local-operating-system-menu-intranet-feel-multiple-tutorial\/' rel=\"noopener\">Local Operating System Menu Intranet Feel Multiple Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"https:\/\/www.rjmprogramming.com.au\/open_extravaganza.php\" rel=\"noopener\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Local Operating System Menu Intranet Feel Multiple Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/open_extravaganza_multiple.gif\" title=\"Local Operating System Menu Intranet Feel Multiple Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Local Operating System Menu Intranet Feel Multiple Tutorial<\/p><\/div>\n<p>Our normal tack regarding the <i><a target=\"_blank\" title='HTML form method attribute information from W3schools' href='https:\/\/www.w3schools.com\/tags\/att_form_method.asp' rel=\"noopener\">method<\/a><\/i> attribute to use on an HTML form element when the recipient webpage is written in PHP is &#8230;<\/p>\n<ul>\n<li>preferably use method=POST &#8230; because so much more data can be handled that way &#8230; but today we&#8217;re &#8230;<\/li>\n<li>preferring to use method=GET &#8230; for several reasons &#8230;\n<ol>\n<li>we cannot see that the data will get too long for method=GET<\/li>\n<li>we&#8217;re allowing dropdown (ie. select element) <a target=\"_blank\" title='HTML input multiple property information from W3schools' href='https:\/\/www.w3schools.com\/tags\/att_input_multiple.asp#:~:text=The%20multiple%20attribute%20is%20a,types%3A%20email%2C%20and%20file.' rel=\"noopener\"><i>multiple<\/i><\/a> selection mode and we found it easier to handle data wise for the recipient to use method=GET with a PHP recipient <font color=blue>$_SERVER[&#8216;QUERY_STRING&#8217;]<\/font> able to help better parse a method=GET <a target=\"_blank\" title='MAMP for Apache\/PHP\/MySql on Mac OS X local web server' href='http:\/\/www.mamp.info' rel=\"noopener\">MAMP<\/a> style URL like &#8230;<br \/>\n<code><br \/>\nht<font color=black>tp<\/font>:\/\/localhost:8888\/open_extravaganza.php<font color=blue>?afteropen=+https%3A%2F%2Fgoogle.com&afteropen=+https%3A%2F%2Fwikipedia.org&afteropen=+https%3A%2F%2Fwww.rjmprogramming.com.au<\/font><br \/>\n<\/code><br \/>\n &#8230; as per &#8230;<br \/>\n&lt;?php<br \/>\n<code><br \/>\n  $afteropens=[];<br \/>\n  $thisone=1;<br \/>\n  <br \/>\n  if (isset($_GET['afteropen'])) {<br \/>\n    if (sizeof(explode('afteropen=', '?' . $_SERVER['QUERY_STRING'])) &gt; 2) {<br \/>\n    for ($thisone=1; $thisone&lt;sizeof(explode('afteropen=', '?' . $_SERVER['QUERY_STRING'])); $thisone++) {<br \/>\n    array_push($afteropens, str_replace('+',' ',urldecode(explode('#',explode('&',explode('afteropen=', $_SERVER['QUERY_STRING'])[$thisone])[0])[0])));<br \/>\n    }<br \/>\n    } else {<br \/>\n    $afteropen=(trim(str_replace('+',' ',urldecode($_GET['afteropen']))) == '' ? '' : ' ' . trim(str_replace('+',' ',urldecode($_GET['afteropen']))));<br \/>\n    $afteropens=[$afteropen];<br \/>\n    }<br \/>\n  }<br \/>\n<\/code><br \/>\n?&gt;<br \/>\n &#8230; whereas method=POST loses those $_SERVER[&#8216;QUERY_STRING&#8217;] possibilities\n<\/li>\n<li>there will be method=GET URLs anyway coming from the newly arranged RJM Programming origin form elements presented now if <i><a target=\"_blank\" title='navigator.platform' href='https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/Navigator\/platform' rel=\"noopener\">navigator.platform<\/a><\/i> indicates your underlying operating system is either macOS or Windows (ie. it takes a punt on the form action <i>localhost<\/i> attribute defined pointing at a local web server (eg. MAMP) &#8230; where there is no harm done just trying)<\/li>\n<\/ol>\n<\/li>\n<\/ul>\n<p>And so, improving on yesterday&#8217;s <a title='Local Operating System Menu Intranet Feel Tutorial' href='#losmift'>Local Operating System Menu Intranet Feel Tutorial<\/a> &#8230;<\/p>\n<ul>\n<li>the Execute button now means something &#8230; ie. you click it ahead of a 10 second allowance before the web application clicks it &#8230; allowing for &#8230;<\/li>\n<li>multiple operating system actions off that dropdown list can be attempted in any one foray<\/li>\n<li>the RJM Programming incarnation of it may show more functionality possibilities than it used to &#8230; all within the limitation of non-mobile platforms only<\/li>\n<\/ul>\n<p>The advice, then, becomes <a download=\"open_extravaganza.php\" target=\"_blank\" href=\"https:\/\/www.rjmprogramming.com.au\/open_extravaganza.php-GETME\" rel=\"noopener\">download<\/a> as <a data-download=\"open_extravaganza.php\" target=\"_blank\" href=\"https:\/\/www.rjmprogramming.com.au\/open_extravaganza.php-GETME\" rel=\"noopener\">open_extravaganza.php<\/a> filename (changed  <a data-download=\"open_extravaganza.php\" target=\"_blank\" href=\"https:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=https:\/\/www.rjmprogramming.com.au\/open_extravaganza.php-GETME\" rel=\"noopener\">this way<\/a>) to MAMP&#8217;s Document Root folder\/directory), and we think it is now less boring for macOS or Windows users to begin with interfacing to our public RJM Programming website <font size=1>(though if you have no Apache\/PHP\/MySql local web server, and want to install one, a right click on the dropdown below, for your non-mobile platform is a possibility for port 8888 on macOS and port 80 (ie. the default) on Windows)<\/font> or <a href='#thisiffy'>try it below<\/a> &#8230;<\/p>\n<p><!--p>You can also see this play out at WordPress 4.1.1's <a target=\"_blank\" href='\/\/www.rjmprogramming.com.au\/ITblog\/local-operating-system-menu-intranet-feel-multiple-tutorial\/' rel=\"noopener\">Local Operating System Menu Intranet Feel Multiple Tutorial<\/a>.<\/p-->\n<hr>\n<p id='losmift'>Previous relevant <a target=\"_blank\" title='Local Operating System Menu Intranet Feel Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/local-operating-system-menu-intranet-feel-tutorial\/' rel=\"noopener\">Local Operating System Menu Intranet Feel Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"https:\/\/www.rjmprogramming.com.au\/open_extravaganza.php\" rel=\"noopener\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Local Operating System Menu Intranet Feel Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/open_extravaganza.gif\" title=\"Local Operating System Menu Intranet Feel Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Local Operating System Menu Intranet Feel Tutorial<\/p><\/div>\n<p>Because we are fortunate enough to have the great <a target=\"_blank\" title='MAMP for Apache\/PHP\/MySql on Mac OS X local web server' href='http:\/\/www.mamp.info' rel=\"noopener\">MAMP<\/a> local Apache\/PHP\/MySql web server in our macOS MacBook Air programming life &#8230;<\/p>\n<ul>\n<li>we have a great testing platform to go to before uploading any software to the public RJM Programming domain (quite often as a web application) there<\/li>\n<li>it can be an &#8220;Intranet feeling&#8221; partner to our public RJM Programming domain<\/li>\n<\/ul>\n<p>So, what do we mean by &#8220;Intranet feeling&#8221;?  Well, have you ever been involved at a workplace that combined &#8230;<\/p>\n<ul>\n<li>a public facing website on the <strong>Internet<\/strong> &#8230; but which had a &#8230;<\/li>\n<li>members area for &#8220;office use only&#8221; that if you logged into would take you into a woooorrrrllllddd of procedures and advice and documentation and health and safety rules etcetera etcetera etcetera related to that company, the data of which is &#8220;not public&#8221; &#8230; well, that &#8220;not public&#8221; bit can sometimes be referred to as an <strong>Intranet<\/strong>\n<\/li>\n<\/ul>\n<p>?   Well &#8230; &#8230; &#8230; &#8230; <font size=1>(four holes in the ground)<\/font> &#8230; <font size=1>(make that 5 or 6)<\/font> &#8230; we did\/have.  And we are awwwwwffffuuuulllllyyy fond of the concept.  The thing is though, we are using that &#8220;non public&#8221; &#8230;<\/p>\n<blockquote><p>\nIntranet &#8220;feeling&#8221;\n<\/p><\/blockquote>\n<p> &#8230; interfacing to, by and large, offer new web application (quite often PHP) ideas because back at the MAMP local Apache\/PHP\/MySql local web server we have the freedom to install software not allowed when you host a public website (as well as macOS having some brilliantly unique command line commands such as &#8220;open&#8221; and <a target=\"_blank\" title='say command information from Apple' href='https:\/\/ss64.com\/osx\/say.html' rel=\"noopener\">&#8220;say&#8221;<\/a> <font size=1>(for which we&#8217;d ask you to <a target=\"_blank\" title='macos_say_record.php' href='https:\/\/www.rjmprogramming.com.au\/macos_say_record.php---------------------------------GETME' download='macos_say_record.php' rel=\"noopener\">download<\/a> to a macOS MAMP port 8888 Document Root folder the PHP <a target=\"_blank\" title='macos_say_record.php' href='https:\/\/www.rjmprogramming.com.au\/macos_say_record.php---------------------------------GETME' rel=\"noopener\">macos_say_record.php<\/a>)<\/font> to offer) perhaps that little bit different to the usual Intranet usage <font size=1>(hence <a target=\"_blank\" href='\/PHP\/animegif\/nala_timelapse.mp4' rel=\"noopener\">Nala<\/a>&#8216;s use of the word <strike><a target=\"_blank\" title=\"?\" href='https:\/\/www.youtube.com\/watch?v=eTHPe7wFMOY' rel=\"noopener\">fillings<\/a><\/strike>feelings)<\/font>, unless you run the hosting company, <span><a target=\"_blank\" title='?' class=\"audioytplay\" href='https:\/\/www.youtube.com\/watch?v=PtR4cWb4HNg' rel=\"noopener\">that is<\/a><\/span> &#8230; and <span><a target=\"_blank\" title='?' class=\"audioytplay\" href='https:\/\/www.youtube.com\/watch?v=PtR4cWb4HNg' rel=\"noopener\">that is<\/a><\/span><sup>n&#8217;t<\/sup><\/a> us &#8230; though if <a target=\"_blank\" href='\/HTMLCSS\/nala_downstairs.jpg' rel=\"noopener\">Nala<\/a> wants to entertain a gentleman caller one of these days &#8230; well &#8230; what are we going to say?!   Hmmmmm?!<\/p>\n<p>Now, when we presented <a target=\"_blank\" title='YouTube API Caller Radio Play Playlist Windows Local System Tutorial' href='https:\/\/www.rjmprogramming.com.au\/ITblog\/youtube-api-caller-radio-play-playlist-windows-local-system-tutorial\/' rel=\"noopener\">YouTube API Caller Radio Play Playlist Windows Local System Tutorial<\/a> we threw down the gauntlet, <a target=\"_blank\" title='Luna' href='\/HTMLCSS\/luna_car.jpg' rel=\"noopener\">Luna<\/a> would say, venturing &#8230;<\/p>\n<blockquote><p>\n\u2026 as your starting gambit, here, where the equivalent of macOS\u2019s \u201copen\u201d is \u201cexplorer.exe\u201d on Windows (ie. the File Explorer) \u2026 <strong>almost as cute<\/strong>!\n<\/p><\/blockquote>\n<p><strong>The audacity<\/strong><sup>, <a target=\"_blank\" title='Nala' href='\/nala_praise_be.jpg' rel=\"noopener\">Nala<\/a><\/sup>?!<\/p>\n<p>Well, we don&#8217;t want to involve ourselves in a &#8220;software war&#8221; here, but the &#8220;bedside better scrutiny&#8221; of the great <a target=\"bank\" tite='https:\/\/scriptingosx.com\/2017\/02\/the-macos-open-command\/' href='\/\/scriptingosx.com\/2017\/02\/the-macos-open-command\/' rel=\"noopener\">https:\/\/scriptingosx.com\/2017\/02\/the-macos-open-command\/<\/a> advice has only enhanced respect for the macOS <a target=\"bank\" tite='https:\/\/scriptingosx.com\/2017\/02\/the-macos-open-command\/' href='\/\/scriptingosx.com\/2017\/02\/the-macos-open-command\/' rel=\"noopener\">open<\/a> command&#8217;s talents, which go far beyond just being able to open a URL from the macOS &#8220;Terminal application&#8221; command line in your default web browser.<\/p>\n<p>How do we count the ways &#8230; <a target=\"_blank\" title='Luna' href='\/HTMLCSS\/luna_vehicle.jpg' rel=\"noopener\">Luna<\/a>?!!!!   See the compartmentalization and modularization at play <font size=1>(not the command)<\/font> here, <strike>Dumbo<\/strike><strike><sub><a target=\"_blank\" title=\"?\" href='https:\/\/www.youtube.com\/watch?v=lPKjA_7MVgQ' rel=\"noopener\">web master<\/a><\/sub><\/strike>bugalugs?!<\/p>\n<p>Anyway, we&#8217;re off and running on a new project with these themes.  The first draft concentrates on ..<\/p>\n<ol>\n<li>macOS .. open &#8230; MAMP &#8230; but &#8230;<\/li>\n<li>Windows &#8230; explorer.exe &#8230; MAMP<\/li>\n<\/ol>\n<p> &#8230; is there for the popcorn and beer nuts <font size=1>(best in that order)<\/font> and as you can see below this new web application (best <a download=\"open_extravaganza.php\" target=\"_blank\" href=\"https:\/\/www.rjmprogramming.com.au\/open_extravaganza.php_GETME\" rel=\"noopener\">downloaded<\/a> as <a data-download=\"open_extravaganza.php\" target=\"_blank\" href=\"https:\/\/www.rjmprogramming.com.au\/open_extravaganza.php_GETME\" rel=\"noopener\">open_extravaganza.php<\/a> filename to MAMP&#8217;s Document Root folder\/directory) is kind of boring to begin with interfacing to our public RJM Programming website <font size=1>(though if you have no Apache\/PHP\/MySql local web server, and want to install one, a right click on the dropdown below, for your non-mobile platform is a possibility for port 8888 on macOS and port 80 (ie. the default) on Windows)<\/font> &#8230;<\/p>\n<p><iframe id=thisiffy src='\/open_extravaganza.php' style=width:100%;height:800px;><\/iframe><\/p>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d70747' onclick='var dv=document.getElementById(\"d70747\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/open\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d70747' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d70772' onclick='var dv=document.getElementById(\"d70772\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/multiple\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d70772' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d70783' onclick='var dv=document.getElementById(\"d70783\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/sleep\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d70783' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d70792' onclick='var dv=document.getElementById(\"d70792\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/share\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d70792' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d70798' onclick='var dv=document.getElementById(\"d70798\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/operator\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d70798' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d70820' onclick='var dv=document.getElementById(\"d70820\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/commentary\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d70820' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d70825' onclick='var dv=document.getElementById(\"d70825\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/hashtag\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d70825' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d70840' onclick='var dv=document.getElementById(\"d70840\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/talk\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d70840' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d70854' onclick='var dv=document.getElementById(\"d70854\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/speech\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d70854' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Our &#8220;second cab off the rank&#8221; with this current Intranet feeling macOS text to speech (via &#8220;say&#8221;) interface thinking relates to the Speech Bubble work we last talked about with Select Multiple Webpage Palette Speech Bubble Contact Tutorial. There is &hellip; <a href=\"https:\/\/www.rjmprogramming.com.au\/ITblog\/talking-select-multiple-webpage-palette-speech-bubble-tutorial\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12,14,29,37],"tags":[3028,85,112,126,1653,3697,2829,2397,174,4033,2127,2147,319,327,5344,1750,360,3471,380,386,400,5341,5342,5343,436,452,4387,557,3961,587,621,624,714,2178,744,773,1830,2092,4032,3987,870,3049,885,2269,2273,899,932,1740,950,1772,997,1761,5346,5345,1069,2350,1114,1866,1116,3169,1133,1137,3942,2359,1159,1179,2398,2334,1215,5347,5348,1254,1258,2027,1319,1343,1345,3214,4525,1411,1583,4483,1433,1435],"class_list":["post-70854","post","type-post","status-publish","format-standard","hentry","category-elearning","category-event-driven-programming","category-operating-system","category-tutorials","tag-action","tag-apache","tag-attribute","tag-background","tag-base64","tag-base64_decode","tag-btoa","tag-bubble","tag-button","tag-commentary","tag-cursor","tag-delimiter","tag-desktop","tag-did-you-know","tag-dmain","tag-document-root","tag-download","tag-dropdowm","tag-email","tag-encryption","tag-event","tag-explorer","tag-explorer-exe","tag-file-explorer","tag-finder","tag-form","tag-functionality","tag-hashtag","tag-hashtagging","tag-iframe","tag-internet","tag-intranet","tag-local-web-server","tag-macos","tag-mamp","tag-message-board","tag-method","tag-multiple","tag-navigator-platform","tag-oncontextmenu","tag-onload","tag-open","tag-operating-system-2","tag-operator","tag-option","tag-parse","tag-php","tag-ping","tag-platform","tag-port","tag-programming","tag-prompt","tag-public-domain","tag-public-website","tag-right-click","tag-say","tag-security","tag-select","tag-selection","tag-sessionstorage","tag-share","tag-sharing","tag-shell_exec","tag-sleep","tag-sms","tag-speech","tag-speech-bubble","tag-submit","tag-submit-button","tag-talk","tag-talking","tag-text","tag-text-to-speech","tag-timeout","tag-tutorial","tag-upload","tag-url","tag-user-interaction","tag-wait","tag-web-server","tag-window","tag-window-btoa","tag-window-open","tag-windows"],"_links":{"self":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts\/70854"}],"collection":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/comments?post=70854"}],"version-history":[{"count":5,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts\/70854\/revisions"}],"predecessor-version":[{"id":70859,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts\/70854\/revisions\/70859"}],"wp:attachment":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/media?parent=70854"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/categories?post=70854"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/tags?post=70854"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}