Web

Reducing RTMPT disconnects on RED5

RED5RTMPT streams provided by RED5 are notorious for randomly disconnecting.

Chris Georgoulis and I extensively debugged this for a project and were able to reduce the disconnection rate from 90% to 40% for connections that lasted over 5 minutes. This was for a teleconferencing application that required 4 RTMPT streams in total (2 outgoing, 2 incoming) with a maximum buffer of 200ms.

RED5 by default has a maximum of 100 keep-alive requests. On the 100th request the server returns connection-close . By setting the limit to infinite we were able to improve the performance. RTMPT is quite vulnerable to disconnections and closing and reopening the socket connection plays a role.

As described by Chris, please go to /{red5_folder}/conf/jee-container.xml and modify the following element group with the extra <property> tags(this should be at line 21), and then restart red5:

More

Simulating Keypresses / keystrokes with Javascript using Greesemonkey in Google Docs

This is a quick post about creating dispatching events using javascript and specifically key press events (for use with greesemonkey or whatnot and firefox).

Note that this will not work for the latest versions of firefox in many instances. I believe this is due to security updates.

Personally I am using this dispatch keypresses to google docs from a greesemonkey script.

Below the code for typing “hello world” to google docs from a greesemonkey user script.

I suspect there may be a more efficient ways though I noticed not all browsers support the same API ūüôĀ .
Specifically, on http://help.dottoro.com/ljbwbehw.php  we see that initKeyEvent is only available in firefox. On the other hand, initTextEventis available in IE, chrome, and Safari.

Sample Greesemonkey Script:

More

Reading web data with VBA from excel using Microsoft HTML Object Library and Microsoft Internet Controls

Excel VBA

Excel VBA

Description:

This is a sample script showing how I pull web-banking balances off the internet when I want to have a total picture of how my finances are. For the boring reasoning go to the last page. Otherwise technical details follow.

Project References:

Add the following to the references for this to work:

-Microsoft HTML Object Library
-Microsoft Internet Controls

VBA references

VBA references

 

Code:

The code below is an example of how to do this missing error handling. As it uses IE, it saves the developer the task of implementing SSL in VBA. 

Navigating the Site

Public oBrowser As InternetExplorer
Sub Login_2_Website()

    Dim oHTML_Element As IHTMLElement
    Dim sURL As String
    Dim text As String
    Dim avarSplit As Variant

    sURL = "https://secure.alpha.gr/e-services"
    Set oBrowser = New InternetExplorer
    oBrowser.Silent = True
    oBrowser.navigate sURL
    oBrowser.Visible = True

    Do
    ' Wait till the Browser is loaded'
    Loop Until oBrowser.readyState = READYSTATE_COMPLETE

    oBrowser.document.all.Item("_contentPlaceHolder__loadedControl_NewLayoutSignOn__userName").Value = "USER"
    oBrowser.document.all.Item("_contentPlaceHolder__loadedControl_NewLayoutSignOn__Pswd").Value = "PASSWORD"
    oBrowser.document.all.Item("_contentPlaceHolder__loadedControl_NewLayoutSignOn__login").Click

Do
    ' Wait till the Browser is loaded'
    Application.Wait DateAdd("s", 0.1, Now)
    Debug.Print (oBrowser.document.readyState)
    Debug.Print (oBrowser.LocationURL)
Loop Until oBrowser.document.readyState = "complete"

oBrowser.navigate "https://secure.alpha.gr/e-services/AWBPage.aspx?service=balancesStatements"

Do
    ' Wait till the Browser is loaded'
    Application.Wait DateAdd("s", 2, Now)
    Debug.Print (oBrowser.readyState)
    Debug.Print (oBrowser.LocationURL)
Loop Until oBrowser.document.readyState = "complete"

Application.Wait DateAdd("s", 2, Now)

oBrowser.document.all.Item("_contentPlaceHolder__loadedControl_balancesStatements__productsPagedDropDownList__selectionList").selectedIndex = 1
oBrowser.document.all.Item("_contentPlaceHolder__loadedControl_balancesStatements__productsPagedDropDownList__selectedIndexHiddenField").Value = "1"
oBrowser.document.all.Item("_contentPlaceHolder__loadedControl_balancesStatements__balancesButton").Click

Do
' Wait till the Browser is loaded'
    Application.Wait DateAdd("s", 0.1, Now)
    Debug.Print (oBrowser.document.readyState)
    Debug.Print (oBrowser.LocationURL)
Loop Until oBrowser.document.readyState = "complete"

getBalance

End Sub

 

 

Analysis follows on next page More

Extending Quick.CMS editor functionallity

The free version of Quick.cms has a very limited version of the MCE editor. Layers, images, and formatting were very disappointing.

As I wanted to give the biggest freedom to my client for editing their site, I decided to do some digging and upgrade the editor:

The code for the editor is contained within: templatesadminedit.tpl

I commented the original code:

<!–¬† <script language=”javascript” type=”text/javascript” src=”$config[dir_plugins]tinymce/jscripts/tiny_mce/tiny_mce.js”></script>
¬† <script language=”javascript” type=”text/javascript”>
    /*tinyMCE.init({
¬†¬† ¬†¬†¬† ¬†theme : “advanced”,
¬†¬† ¬†¬†¬† ¬†mode : “exact”,
¬†¬†¬† entity_encoding : “raw”,
¬†¬† ¬†¬†¬† ¬†elements : “sDescriptionShort,sDescriptionFull,sContent”,
¬†¬† ¬†¬†¬† ¬†theme_advanced_buttons1 : “bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,bullist,numlist,|,outdent,indent,|,undo,redo”,
¬†¬† ¬†¬†¬† ¬†theme_advanced_buttons2 : “link,unlink,anchor,cleanup,help,code,hr,removeformat,visualaid,|,charmap”,
¬†¬† ¬†¬†¬† ¬†theme_advanced_buttons3 : “”,
¬†¬† ¬†¬†¬† ¬†theme_advanced_buttons4 : “”,
¬†¬† ¬†¬†¬† ¬†theme_advanced_toolbar_location : “top”,
¬†¬† ¬†¬†¬† ¬†theme_advanced_toolbar_align : “left”,
        debug : false
    });
    */
</script> –>
and added the code for the full version tiny_mce which I found from an example here:
http://tinymce.moxiecode.com/tryit/full.php

¬†<!– BEGIN TINY_HEAD –>

<script type=”text/javascript” src=”/js/tinymce/jscripts/tiny_mce/tiny_mce.js”></script>
<script type=”text/javascript”>
tinyMCE.init({
        // General options
¬†¬†¬†¬†¬†¬†¬† mode : “textareas”,
¬†¬†¬†¬†¬†¬†¬† theme : “advanced”,
¬†¬†¬†¬†¬†¬†¬† plugins : “autolink,lists,spellchecker,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template”,

        // Theme options
¬†¬†¬†¬†¬†¬†¬† theme_advanced_buttons1 : “save,newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect,fontselect,fontsizeselect”,
¬†¬†¬†¬†¬†¬†¬† theme_advanced_buttons2 : “cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code,|,insertdate,inserttime,preview,|,forecolor,backcolor”,
¬†¬†¬†¬†¬†¬†¬† theme_advanced_buttons3 : “tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media,advhr,|,print,|,ltr,rtl,|,fullscreen”,
¬†¬†¬†¬†¬†¬†¬† theme_advanced_buttons4 : “insertlayer,moveforward,movebackward,absolute,|,styleprops,spellchecker,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,nonbreaking,template,blockquote,pagebreak,|,insertfile,insertimage”,
¬†¬†¬†¬†¬†¬†¬† theme_advanced_toolbar_location : “top”,
¬†¬†¬†¬†¬†¬†¬† theme_advanced_toolbar_align : “left”,
¬†¬†¬†¬†¬†¬†¬† theme_advanced_statusbar_location : “bottom”,
        theme_advanced_resizing : true,

        // Skin options
¬†¬†¬†¬†¬†¬†¬† skin : “o2k7”,
¬†¬†¬†¬†¬†¬†¬† skin_variant : “silver”,

        // Example content CSS (should be your site CSS)
¬†¬†¬†¬†¬†¬†¬† content_css : “css/example.css”,

        // Drop lists for link/image/media/template dialogs
¬†¬†¬†¬†¬†¬†¬† template_external_list_url : “js/template_list.js”,
¬†¬†¬†¬†¬†¬†¬† external_link_list_url : “js/link_list.js”,
¬†¬†¬†¬†¬†¬†¬† external_image_list_url : “js/image_list.js”,
¬†¬†¬†¬†¬†¬†¬† media_external_list_url : “js/media_list.js”,

        // Replace values for the template plugin
        template_replace_values : {
¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬† username : “Some User”,
¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬† staffid : “991234”
        }
});
</script>

Finally I also downloaded and added the newest tiny_mce scripts from http://tinymce.moxiecode.com/download/download.php and everything worked perfectly!! Below is the old and new version!