tag:blogger.com,1999:blog-16428513443292335832024-02-19T04:36:30.126-10:00Brent WongWeb Developer / IT Manager / Magic MakerBrent Wonghttp://www.blogger.com/profile/14273804178870499098noreply@blogger.comBlogger94125tag:blogger.com,1999:blog-1642851344329233583.post-20911891088438676822017-09-29T14:59:00.000-10:002017-09-29T14:59:03.328-10:00Using VFP Ole DB in PHP on Windows Server 2012 R2Just a quick note.<br />
<br />
I was working on getting the <a href="https://www.microsoft.com/en-us/download/details.aspx?id=14839" target="_blank">Visual Foxpro Ole DB package</a> working on a Windows Server 2012 R2 install. The package installed fine, but PHP was saying that it couldn't find the provider or it was setup incorrectly. As it turns out, vfpoledb.dll is 32-bit and needs the 32-bit version of PHP installed. Newer is not always better (or compatible) when it comes to outdated languages.Brent Wonghttp://www.blogger.com/profile/14273804178870499098noreply@blogger.com0tag:blogger.com,1999:blog-1642851344329233583.post-51976181120757025392014-04-07T18:10:00.002-10:002014-04-07T18:10:40.082-10:00Growing a VMware ESXi DatastoreGrow the HP Array using hpacucli:<br />
<a href="http://devbios.wordpress.com/2012/04/21/esxi-5-expanding-datastore-by-extending-local-array/">http://devbios.wordpress.com/2012/04/21/esxi-5-expanding-datastore-by-extending-local-array/</a><br />
<br />
Grow the local disk:<br />
<a href="http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1009125">http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1009125</a>Brent Wonghttp://www.blogger.com/profile/14273804178870499098noreply@blogger.com0tag:blogger.com,1999:blog-1642851344329233583.post-7042889882254718682014-03-18T11:59:00.001-10:002014-03-18T11:59:45.179-10:00Problems configuring your Netgear Smart Switch?I was working on a GS748TS the other day and noticed some of the expected settings weren't loading in the web configuration. The particular area was the VLAN membership. Apparently there are few javascript errors that keep this page from loading correctly. You may not even notice if you aren't in debugging mode. Things are just missing.<br />
<br />
Q: What do you do to fix this?<br />
A: Get a really old browser.<br />
<br />
A support forum <a href="http://forum1.netgear.com/showpost.php?p=464623&postcount=11" target="_blank">post</a> guided me to <a href="http://sourceforge.net/projects/portableapps/files/Mozilla%20Firefox%2C%20Portable%20Ed./Mozilla%20Firefox%2C%20Portable%20Edition%203.5.18/FirefoxPortableLegacy35_3.5.18_English.paf.exe/download" target="_blank">Firefox Portable</a>. Version 3.5.18 worked for me.Brent Wonghttp://www.blogger.com/profile/14273804178870499098noreply@blogger.com0tag:blogger.com,1999:blog-1642851344329233583.post-40263813791938306942013-12-04T15:49:00.003-10:002013-12-04T15:50:09.678-10:00Zend Skeleton App default ZF2 path?<p>I'm playing around with the Zend Skeleton Application to see how useful it will be to build an application in the future. I got it all installed correctly using a combination of git and composer and everything is working fine...until I try and update the autoloader.
</p>
<p>As it turns out, composer seems to have installed the zend framework in a different area than it was expected in the Zend Skeleton Application default configuration.</p>
The default autoloader file init_autoloader.php looks like this<br />
<pre class="brush: php">$zf2Path = false;
if (is_dir('vendor/ZF2/library')) {
$zf2Path = 'vendor/ZF2/library';
} elseif (getenv('ZF2_PATH')) { // Support for ZF2_PATH environment variable or git submodule
$zf2Path = getenv('ZF2_PATH');
} elseif (get_cfg_var('zf2_path')) { // Support for zf2_path directive value
$zf2Path = get_cfg_var('zf2_path');
}</pre>
<p>The composer install put everything in vendor/zendframework/zendframework/library and not in vendor/ZF2/library. A quick little update like below and I was all set.</p>
<pre class="brush: php">
$zf2Path = false;
if (is_dir(vendor/zendframework/zendframework/library')) {
$zf2Path = 'vendor/zendframework/zendframework/library';
} elseif (getenv('ZF2_PATH')) { // Support for ZF2_PATH environment variable or git submodule
$zf2Path = getenv('ZF2_PATH');
} elseif (get_cfg_var('zf2_path')) { // Support for zf2_path directive value
$zf2Path = get_cfg_var('zf2_path');
}
</pre>
Brent Wonghttp://www.blogger.com/profile/14273804178870499098noreply@blogger.com0tag:blogger.com,1999:blog-1642851344329233583.post-22950531604922710102013-11-15T08:57:00.003-10:002013-11-15T09:12:44.675-10:00Opening up web server ports on CentOS/selinux<p>I was setting up a test webserver that I could run a couple different web apps. There are a few things you need to know in order to set this up. There are three modifications that you need to make to be able to do this from a default installation. These mods are through httpd, selinux, iptables.</p>
<p>Let's say I want to open a port on 8000. First, make your modifications to the apache config. This should be located in /etc/httpd/conf/httpd.conf</p>
<pre class="brush: bash">
Listen 8000
<VirtualHost *:8000>
# ServerName I.dont.need.one.of.these.for.my.purposes
DocumentRoot /path/to/web/directory
SetEnv APPLICATION_ENV "development"
<Directory /path/to/web/directory>
DirectoryIndex index.php
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
</pre>
<p>Great, that's all set up. Let's try and restart the httpd service</p>
<pre class="brush: bash">
service http restart
Stopping httpd: [OK]
Starting httpd: [FAILED]
(98)Address already in use: make_sock: could not bind to address [::]:8000
</pre>
<p>What? What's going on? Listing the services using netstats doesn't reveal that the port is taken. Doing some research reveals that CentOS is shipped with selinux setup and that I need to open a port for that</p>
<pre class="brush: bash">
semanage port -a -t http_port_t -p tcp 8000
</pre>
<p>After this step, go ahead and restart the httpd service.</p>
<pre class="brush: bash">
service http restart
Stopping httpd: [FAILED]
Starting httpd: [OK]
</pre>
<p>Yay, everything is working right? Navigate to http://192.168.0.1:8000 and nothing responds. Check the apache logs and there's not even an access attempt. Do a little more research and it looks like the default CentOS installation comes with iptables installed and tightly regulated. You'll find the config file at /etc/sysconfig/iptables. Add the following line.</p>
<pre class="brush: bash">
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 8000 -j ACCEPT
</pre>
<p>Now all we need to do is restart iptables and we're all set</p>
<pre class="brush: bash">
service iptables restart
</pre>Brent Wonghttp://www.blogger.com/profile/14273804178870499098noreply@blogger.com0tag:blogger.com,1999:blog-1642851344329233583.post-16064256927929365402013-11-15T08:31:00.001-10:002013-11-15T09:13:09.101-10:00Installing Git on CentOS 5I was working with an older version of CentOS today and found out that the git repositories didn't exist. So just a quick note on getting git set up on CentOS 5.<br />
<br />
Install the dependencies<br />
<pre class="brush: bash">yum install gcc gettext-devel expat-devel curl-devel zlib-devel openssl-devel</pre>
<br />
Get the <a href="http://kernel.org/pub/software/scm/git" target="_blank">latest git tarball</a>. The latest for me was git-1.8.4.3.tar.gz<br />
<pre class="brush: bash">wget https://www.kernel.org/pub/software/scm/git/git-1.8.4.3.tar.gz</pre>
<br />
Untar the tarball<br />
<pre class="brush: bash">tar -xvfz git-1.8.4.3.tar.gz</pre>
<br />
Make...profit.<br />
<pre class="brush: bash">cd git-1.8.4.3
make prefix=/usr/local all
make prefix=/usr/local install</pre>
Brent Wonghttp://www.blogger.com/profile/14273804178870499098noreply@blogger.com0tag:blogger.com,1999:blog-1642851344329233583.post-69243613640114453622010-11-30T00:19:00.008-10:002010-12-06T23:55:46.370-10:00Creating a blog with the Zend Framework part 2: Laying the groundworkThis is the second part in a series on creating a blog using the Zend Framework and the Zend Tool. If you missed part one, don't forget to <a href="http://bdewong.blogspot.com/2010/11/creating-blog-with-zend-framework-part.html">check it out</a>.<br /><br />Using the Zend Tool on the command line is a quick way to get a project up and running. Through the Zend Tool, you can easily create the project, create controllers, and create actions and views through those controllers. There is also quite a bit more you can do, but we'll just focus on these actions for this step.<br /><br />Let's look at what controllers we'll need. Keeping it simple, we can have an index controller to view the blog and a post controller to handle the viewing of the posts, all the CRUD (create, read, update, delete) and posting of comments.<br /><br />Now we'll go over the layout.<br /><ul><li>index controller<ul><br /><li>index action</li><br /><li>page action</li></ul></li><br /><li>post<ul><br /><li>index action (by default)</li><br /><li>create action</li><br /><li>read action</li><br /><li>update action</li><br /><li>delete action</li><br /></ul></li></ul><br /><br />And now we can start actually creating the project. From the command line (I'm running this in windows) type the following:<br /><pre class="brush: plain"><br />zf create project blog<br /></pre><br /><br />We are given a couple controllers when we create the project; an index and an error controller. Great, that is one less step we need to do. We just need a post controller now which is created by typing the following:<br /><pre class="brush: plain"><br />zf create controller post</pre><br /><br />Since each controller comes with a default "index" action as a default, we'll just create the others now:<br /><pre class="brush: plain"><br />zf create action page index<br />zf create action create post<br />zf create action read post<br />zf create action update post<br />zf create action delete post<br /></pre><br /><br />While we've created the controller and the actions, we still need a model. Let's go ahead and create the base for those as well.<br /><pre class="brush: plain"><br />zf create model posts<br />zf create model comments<br />zf create model users<br /></pre><br /><br />Voila. Our framework has been layed. Of course there is still quite a bit to do but we have the very basic basics down.Brent Wonghttp://www.blogger.com/profile/14273804178870499098noreply@blogger.com2tag:blogger.com,1999:blog-1642851344329233583.post-87170082420891679242010-11-29T23:08:00.006-10:002010-11-30T22:22:46.728-10:00Creating a blog with the Zend Framework part 1: Creating the tablesOkay, I want to experiment some with the Zend Tools by creating a simple blog. Later I would like to do the same in a few other languages but we'll start with the Zend Tool and PHP.<br /><br />To start, we need to create the tables. I've borrowed a little bit from the Wordpress table setup and simplified it quite a bit. We'll just create three tables: users, posts, and comments. The users table will cover all the people that can create posts and also who can comment. The posts will contain all the post information and the comments will contain all the comment information. The posts table has a one to many relationship with the comments table.<br /><br /><pre class="brush: sql"><br />CREATE TABLE IF NOT EXISTS `users` (<br /> `id` BIGINT NOT NULL AUTO INCREMENT,<br /> `user_login` VARCHAR(60) NOT NULL ,<br /> `user_pass` VARCHAR(64) NOT NULL ,<br /> `user_name` VARCHAR(50) NOT NULL ,<br /> `user_email` VARCHAR(100) NOT NULL ,<br /> `user_url` VARCHAR(100) NOT NULL ,<br /> `user_registered` DATETIME NOT NULL ,<br /> `user_activation_key` VARCHAR(60) NOT NULL ,<br /> PRIMARY KEY (`id`) )<br />ENGINE = InnoDB;<br /></pre><br /><br /><pre class="brush: sql"><br />CREATE TABLE IF NOT EXISTS `posts` (<br /> `id` BIGINT NOT NULL AUTO_INCREMENT ,<br /> `post_author` BIGINT NOT NULL ,<br /> `post_date` DATETIME NOT NULL ,<br /> `post_title` TEXT NOT NULL ,<br /> `post_content` LONGTEXT NOT NULL ,<br /> PRIMARY KEY (`id`) )<br />ENGINE = InnoDB;<br /></pre><br /><br /><pre class="brush: sql"><br />CREATE TABLE IF NOT EXISTS `comments` (<br /> `id` BIGINT NOT NULL AUTO_INCREMENT ,<br /> `post_id` BIGINT NOT NULL ,<br /> `comment_author` TINYTEXT NOT NULL ,<br /> `comment_author_email` VARCHAR(100) NOT NULL ,<br /> `comment_author_url` VARCHAR(200) NOT NULL ,<br /> `comment_author_ip` VARCHAR(100) NOT NULL ,<br /> `comment_date` DATETIME NOT NULL ,<br /> `comment_content` TEXT NOT NULL ,<br /> PRIMARY KEY (`id`) )<br />ENGINE = InnoDB;<br /></pre>Brent Wonghttp://www.blogger.com/profile/14273804178870499098noreply@blogger.com0tag:blogger.com,1999:blog-1642851344329233583.post-21952672949910900642010-11-29T13:03:00.004-10:002010-11-29T23:08:23.384-10:00SyntaxHighlighter brush for FoxproI've added <a href="http://alexgorbatchev.com/SyntaxHighlighter">SyntaxHighlighter</a> version 3 to the blog to help highlight make the code more readable and make it easier when preparing updates. I saw that there wasn't any "brush" for Foxpro, so I decided to try my hand at building my own. You can see how it worked out in my post <a href="http://bdewong.blogspot.com/2010/11/moving-from-foxpro-to-mysql.html">moving from foxpro to mysql</a>.<br /><br />There are a couple things I've noticed. First of all, my regular expression trying to capture inline comments isn't working. This is the line in question:<br /><pre class="brush: js">/&&.*$/g</pre><br />I believe the syntax is correct but I could be wrong. This expression works with a standard regex tester just not with the syntax highlighter. Any ideas?<br /><br />I've also noticed that sometimes the quotes, single and double, don't come out correctly.<br /><br />Below is my code. I've also hosted <a href="https://github.com/bdewong/shBrushFoxpro/blob/master/shBrushFoxpro.js">shBrushFirefox.js as GitHub</a>.<br /><pre class="brush: js"><br />;(function()<br />{<br /> // CommonJS<br /> typeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null;<br /><br /> function Brush()<br /> {<br /><br /> //Contributed by Brent Wong (bdewong)<br /><br /> var keywords = 'abs accelerate accept access aclass acopy acos activate activatecell activecolumn activecontrol activedoc activeform activeobjectid ' +<br /> 'activepage activeproject activerow adatabases adbobjects add addbs addcolumn additem additive addlinefeeds addlistitem addobject ' +<br /> 'addproperty addrelationtoenv addtableschema addtabletoenv addtoscc adel adir adjustobjectsize adlls admin adockstate adocodepage ' +<br /> 'aelement aerror aevents afields afont after afterband afterbuild afterclosetables aftercursorattach aftercursorclose aftercursordetach ' +<br /> 'aftercursorfill aftercursorrefresh aftercursorupdate afterdelete afterdock afterinsert afterrecordrefresh afterreport afterrowcolchange ' +<br /> 'afterupdate again agetclass agetfileversion aindent ains ainstance alanguage alen ' +<br /> 'alias align alignment alignright alines all allowaddnew allowautocolumnfit allowcellselection ' +<br /> 'allowdelete allowexternal allowheadersizing allowinsert allowmodalmessages allowoutput allowresize allowrowsizing allowsimultaneousfetch ' +<br /> 'allowtabs allowtabs+ allowupdate alltrim alt alter alternate alwaysonbottom alwaysontop ' +<br /> 'amembers amouseobj anchor and anetresources ansi ansitooem any aplabout ' +<br /> 'app append application applydiffgram aprinters aprocinfo array as asc ' +<br /> 'ascan ascending ascii aselobj asessions asin asort asqlhandles assert ' +<br /> 'asserts assist astackinfo asubscript asynchronous at at_c ataginfo atan ' +<br /> 'atc atcc atcline atgetcolors atline atlistcolors atn2 attach attributes ' +<br /> 'aused autoactivate autocenter autoclosetables autocomplete autocompsource autocomptable autofit autoform ' +<br /> 'autohidescrollbar autoinc autoincerror autoincrement automatic autoopen autoopentables autorelease autoreport ' +<br /> 'autosave autosize autoverbmenu autoyield availnum avcxclasses average avg backcolor ' +<br /> 'backstyle bar barcount barprompt baseclass batchmode batchupdatecount before beforeband ' +<br /> 'beforebuild beforecursorattach beforecursorclose beforecursordetach beforecursorfill beforecursorrefresh beforecursorupdate beforedelete beforedock ' +<br /> 'beforeinsert beforeopentables beforerecordrefresh beforereport beforerowcolchange beforeupdate begin bell bellsound ' +<br /> 'between bind bindcontrols bindevent bintoc bitand bitclear bitlshift bitmap ' +<br /> 'bitnot bitor bitrshift bitset bittest bitxor blank blink blob ' +<br /> 'blocksize bof border bordercolor borderstyle borderwidth bottom bound boundcolumn ' +<br /> 'boundto box breakonerror browse browsealignment browsecellmarg browsedestwidth browseime browseimecontrol ' +<br /> 'browserefresh brstatus bucket buffering buffermode buffermodeoverride buffers build builddatetime ' +<br /> 'builderlock buttoncount buttonindex buttons buttonsbof by calculate call canaccelerate cancel cancelreport ' +<br /> 'candidate cangetfocus canlosefocus capslock caption carry cascade case cast catalog catch ' +<br /> 'cd cdow cdx ceiling center centered central century cga change changestocursor ' +<br /> 'char character chdir check checkbox checkin checkout childalias childorder childtable chr ' +<br /> 'chrsaw chrtran chrtranc circle class classlib classlibrary clauses cleanup clear cleardata ' +<br /> 'clearresultset clearstatus click clipcontrols cliprect clock cloneobject closable close closeeditor closetables ' +<br /> 'cls clsid cmonth cmonth cnt cntbar cntpad codepage col collate collection ' +<br /> 'color colorscheme colorsource column columncount columnheaders columnlines columnorder columns columnwidths com ' +<br /> 'com1 com2 comarray combobox comclassinfo command commandbutton commandclauses commandgroup commandtargetexec commandtargetquery ' +<br /> 'comment compact comparememo compatible compile completed compobj compress comprop compute comreturnerror ' +<br /> 'concat confirm conflictcheckcmd conflictchecktype connectbusy connecthandle connection connections connectname connectstring connecttimeout ' +<br /> 'connstring console container containerrelease containerreleasetype continue continuousscroll control controlbox controlcount controlindex ' +<br /> 'controls controlsource conversionfunc copies copy cos cot count coverage cpcompile cpconvert ' +<br /> 'cpcurrent cpdbf cpdialog cpnotrans create createbinary createobject createobjectex createoffline crsbuffering crsfetchmemo ' +<br /> 'crsfetchsize crsmaxrows crsmethodused crsnumbatch crsshareconnection crsusememosize crswhereclause csv ctobin ctod ctot ' +<br /> 'curdate curdir currency currentcontrol currentdatasession currentpass currentx currenty currleft currsymbol cursor ' +<br /> 'cursoradapter cursorattach cursordetach cursorfill cursorgetprop cursorrefresh cursorschema cursorsetprop cursorsource cursorstatus cursortors ' +<br /> 'cursortoxml curtime curval curvature custom cycle data database databases dataenvironment dataobject ' +<br /> 'datasession datasessionid datasource datasourceobj datasourcetype datatoclip datatype date dateformat datemark datetime ' +<br /> 'day dayname dayofmonth dayofweek dayofyear db4 db_buflockrow db_buflocktable db_bufoff db_bufoptrow db_bufopttable ' +<br /> 'db_complette db_deleteinsert db_keyandmodified db_keyandtimestamp db_keyandupdatable db_localsql db_noprompt db_prompt db_remotesql db_transauto db_transmanual ' +<br /> 'db_transnone db_update dbalias dbc dbc_activate dbc_afteraddrelation dbc_afteraddtable dbc_afterappendproc dbc_afterclosetable dbc_aftercopyproc dbc_aftercreateconnection ' +<br /> 'dbc_aftercreateoffline dbc_aftercreatetable dbc_aftercreateview dbc_afterdbgetprop dbc_afterdbsetprop dbc_afterdeleteconnection dbc_afterdropoffline dbc_afterdroprelation dbc_afterdroptable dbc_afterdropview dbc_aftermodifyconnection ' +<br /> 'dbc_aftermodifyproc dbc_aftermodifytable dbc_aftermodifyview dbc_afteropentable dbc_afterremovetable dbc_afterrenameconnection dbc_afterrenametable dbc_afterrenameview dbc_aftervalidatedata dbc_beforeaddrelation dbc_beforeaddtable ' +<br /> 'dbc_beforeappendproc dbc_beforeclosetable dbc_beforecopyproc dbc_beforecreateconnection dbc_beforecreateoffline dbc_beforecreatetable dbc_beforecreateview dbc_beforedbgetprop dbc_beforedbsetprop dbc_beforedeleteconnection dbc_beforedropoffline ' +<br /> 'dbc_beforedroprelation dbc_beforedroptable dbc_beforedropview dbc_beforemodifyconnection dbc_beforemodifyproc dbc_beforemodifytable dbc_beforemodifyview dbc_beforeopentable dbc_beforeremovetable dbc_beforerenameconnection dbc_beforerenametable ' +<br /> 'dbc_beforerenameview dbc_beforevalidatedata dbc_closedata dbc_deactivate dbc_modifydata dbc_opendata dbc_packdata dbf dbfdblclick dbgetprop dblclick ' +<br /> 'dbmemo3 dbsetprop dbtrap dbused dde ddeaborttrans ddeadvise ddeenabled ddeexecute ddeinitiate ddelasterror ' +<br /> 'ddepoke dderequest ddesetoption ddesetservice ddesettopic ddeterminate deactivate debug debugger debugout decimals ' +<br /> 'declare declarexmlprefix declass declasslibrary default defaultext defaultfilepath defaultsource defaultvalue defbutton defbuttonorig ' +<br /> 'defheight define definewindows defleft defolelcid deftop defwidth degrees delaybind delayedmemofetch delete ' +<br /> 'deletecmd deletecmddatasource deletecmddatasourcetype deletecolumn deleted deletemark deletetables deletetrigger delimited delimiters desc ' +<br /> 'descending description design desktop destroy details development device dif difference dimension ' +<br /> 'dir directory disabled disabledbackcolor disabledbyeof disabledforecolor disableditembackcolor disableditemforecolor disabledpicture disableencode disconnected ' +<br /> 'diskspace display displaycount displayorientation displaypath displayvalue displayvaluedirty displogin disppageheight disppagewidth dispwarnings ' +<br /> 'distinct dll dlls dmy do doc dock dockable docked dockposition docmd ' +<br /> 'docreate documentfile dodefault doevents dohistory domessage dos doscroll dosmem dostatus double ' +<br /> 'doverb dow down downclick downpicture drag dragdrop dragicon dragmode dragover dragstate ' +<br /> 'draw drawmode drawstyle drawwidth driver drivetype drop dropdown dropoffline dtoc dtor ' +<br /> 'dtos dtot duplex dynamicalignment dynamicbackcolor dynamiccurrentcontrol dynamicfontbold dynamicfontitalic dynamicfontname dynamicfontoutline dynamicfontshadow ' +<br /> 'dynamicfontsize dynamicfontstrikethru dynamicfontunderline dynamicforecolor dynamicinputmask dynamiclineheight each echo edit editbox editflags ' +<br /> 'editoroptions editsource editwork ega25 ega43 eject elif else empty ems ems64 ' +<br /> 'enabled enabledbyreadlock enablehyperlinks encrypt encrypted encryption end endcase enddefine enddo endfor ' +<br /> 'endfunc endif endprintjob endproc endscan endtext endtry endwith enginebehavior enterfocus environment ' +<br /> 'envlevel eof erase erasepage error errormessage errorno escape eval evaluate evaluatecontents ' +<br /> 'eventhandler eventlist events eventtracking evl exact except exception exclude exclusive exe ' +<br /> 'execscript exists exit exitfocus exp export expression extended external f11f12 fchsize ' +<br /> 'fclose fcount fcreate fdate fdow feof ferror fetch fetchasneeded fetchmemo fetchmemo ' +<br /> 'fetchmemocmdlist fetchmemodatasource fetchmemodatasourcetype fetchsize fflush fgets field fields fieldsf file fileclass ' +<br /> 'fileclasslibrary filer files filetostr fill fillcolor fillstyle filter finally find firstelement ' +<br /> 'firstnestedtable fixed fklabel fkmax flags fldcount fldlist float flock floor flush ' +<br /> 'foldconst font fontbold fontcharset fontclass fontcondense fontextend fontitalic fontmetric fontname fontoutline ' +<br /> 'fontshadow fontsize fontstrikethru fontunderline footer fopen for force forceclosetag forceext forcefocus ' +<br /> 'forcepath forecolor foreign form format formatchange formattedoutput formcount formindex formpagecount formpageindex ' +<br /> 'forms formsclass formset formsetclass formsetlib formslib found fox2x foxcode foxdoc foxfont ' +<br /> 'foxgen foxgraph foxobject foxplus foxpro foxtask foxview fputs fractiondigits fread free ' +<br /> 'freeze french from frxdatasession fseek fsize ftime full fullname fullpath function ' +<br /> 'fv fw2 fweek fwrite gather gdiplusgraphics general german get get getautoincvalue ' +<br /> 'getbar getcolor getcp getcursoradapter getdata getdir getdockstate getenv getexpr getfile getfldstate ' +<br /> 'getfont getformat gethost getinterface getkey getlatestversion getnextmodified getobject getpad getpageheight getpagewidth ' +<br /> 'getpem getpict getprinter getresultset gets getwordcount getwordnum global go goback gofirst ' +<br /> 'goforward golast gomonth gotfocus goto graph grid gridhittest gridhorz gridlinecolor gridlines ' +<br /> 'gridlinewidth gridshow gridshowpos gridsnap gridvert group grow halfheight halfheightcaption handler hasclip ' +<br /> 'having header headerclass headerclasslibrary headergap headerheight heading headings height help helpcontextid ' +<br /> 'helpfilter helpon helpto hidden hide hideappobj hidedoc hideselection highlight highlightbackcolor highlightforecolor ' +<br /> 'highlightrow highlightrowlinewidth highlightstyle history hmemory home homedir hostname hotkey hour hours ' +<br /> 'hproj hscrollsmallchange hwnd hyperlink iblock icase icon id idhistory idletimeout idxcollate ' +<br /> 'if ifdef ifndef ignoreinsert iif image imemode imestatus import in include ' +<br /> 'includepageinoutput increment incrementalsearch indbc index indexes indexseek indextoitemid information init initialselectedalias ' +<br /> 'inkey inlist inner input inputbox inputmask inresize insert insertcmd insertcmddatasource insertcmddatasourcetype ' +<br /> 'insertcmdrefreshcmd insertcmdrefreshfieldlist insertcmdrefreshkeyfieldlist inserttrigger insmode instancing instruct int integer integralheight intensity ' +<br /> 'interactivechange intersect interval into is isalpha isattribute isbase64 isbinary isblank iscolor ' +<br /> 'isdiffgram isdigit isexclusive isflocked ishosted isleadbyte isloaded islower ismemofetched ismouse isnull ' +<br /> 'isometric ispen isreadonly isrlocked istransactable isupper isxmldomelement italian item itembackcolor itemdata ' +<br /> 'itemforecolor itemiddata itemidtoindex itemtips ixmldomelement japan join justdrive justext justfname justpath ' +<br /> 'justreadlocked juststem key keyboard keyboardhighvalue keyboardlowvalue keycolumns keycomp keyfield keyfieldlist keymatch ' +<br /> 'keypress keypreview keyset keysort label languageoptions last lastkey lastproject lcase ldcheck ' +<br /> 'ledit left leftc leftcolumn len lenc length level library like likec ' +<br /> 'line linecontents lineno lineslant linked linkmaster list listbox listcount listenertype listindex ' +<br /> 'listitem listitemid load loadpicture loadreport loadxml local locate locfile lock lockcolumns ' +<br /> 'lockcolumnsleft lockdatasource lockscreen log log10 logerrors logout long lookup loop lostfocus ' +<br /> 'lower lparameter lparameters lpartition ltrim ltrjustify lupdate mac macdesktop machelp mackey ' +<br /> 'macro macros macscreen mail mainfile maketransactable map19_4tocurrency mapbinary mapn19_4tocurrency mapvarchar margin ' +<br /> 'mark master max maxbutton maxheight maxleft maxlength maxmem maxrecords maxtop maxwidth ' +<br /> 'mblock mcol md mdi mdiform mdown mdx mdy memberclass memberclasslibrary memlimit ' +<br /> 'memlines memo memory memos memowidth memowindow memvar menu menus message messagebox ' +<br /> 'messages method middle middleclick min minbutton minheight minimize minus minute minwidth ' +<br /> 'mkdir mline mod modal modify module mono mono43 month monthname mouse ' +<br /> 'mousedown mouseenter mouseicon mouseleave mousemove mousepointer mouseup mousewheel movable move moved ' +<br /> 'moveitem moverbars movers mrkbar mrkpad mrow mtdll mton multilocks multiselect mvarsiz ' +<br /> 'mvcount mwindow name naptime native navigateto ndx near negotiate nest nestedinto ' +<br /> 'network newindex newitemid newobject next nextsiblingtable nextvalue noalias noappend noclear noclose ' +<br /> 'noconsole nocptrans nodata nodataonload nodebug nodefault nodefine nodelete nodialog nodup noedit ' +<br /> 'noeject noenvironment nofilter nofloat nofollow nogrow noinit nolgrid nolink nolock nolog ' +<br /> 'nomargin nomdi nomenu nominimize nomodify nomouse none nooptimize noorganize nooverwrite noprojecthook ' +<br /> 'noprompt noread norefresh norequery norgrid norm normal normalize nosave noshadow noshow ' +<br /> 'nospace not notab note notify notifycontainer noupdate novalidate noverify now nowait ' +<br /> 'nowindow nowrap nozoom npv ntom null nulldisplay nullstring number numberofelements numeric ' +<br /> 'numlock nvl object objects objnum objref objtoclient objvar occurs odbchdbc odbchstmt ' +<br /> 'odometer oemtoansi of off oldval olebasecontrol oleboundcontrol oleclass oleclassid oleclassidispout olecompletedrag ' +<br /> 'olecontrol olecontrolcontainer oledrag oledragdrop oledragmode oledragover oledragpicture oledropeffects oledrophasdata oledropmode oledroptextinsertion ' +<br /> 'olegivefeedback oleidispatchincoming oleidispatchoutgoing oleidispinvalue oleidispoutvalue olelcid oleobject oleobjects olepublic olerequestpendingtimeout olerequestpendingtimou ' +<br /> 'oleserverbusyraiseerro oleserverbusyraiseerror oleserverbusytimeout oleserverbusytimout olesetdata olestartdrag oletypeallowed on onetomany online only ' +<br /> 'onmoveitem onpreviewclose onresize open openeditor opentables openviews openwindow optimize optionbutton optiongroup ' +<br /> 'or oracle order orderdirection orientation os otherwise outer output outputpage outputpagecount ' +<br /> 'outputtype outshow overlay overwrite pack packetsize pad padc padl padl padprompt ' +<br /> 'padr page pagecount pageframe pageheight pageno pageorder pages pagetotal pagewidth paint ' +<br /> 'palette panel panellink paperlength papersize paperwidth parameters parent parentalias parentclass parenttable ' +<br /> 'partition password passwordchar path pattern pause payment pcol pcount pdox pdsetup ' +<br /> 'pemstatus pen percent pfs pi picture picturemargin pictureposition pictureselectiondisplay picturespacing pictureval ' +<br /> 'pivot pixels plain platform play point polypoints pop popup popups power ' +<br /> 'precision preference prepared preservewhitespace pretext preview previewcontainer primary primarykey print printer ' +<br /> 'printform printjob printjobname printquality printstatus private prmbar prmpad procedure procedures processid ' +<br /> 'production progcache progid program programmaticchange progwork project projectclick projecthook projecthookclass projecthooklibrary ' +<br /> 'prompt proper protected prow prtinfo pset public push putfile pv qpr ' +<br /> 'ppr quarter query queryaddfile querymodifyfile querynewfile queryremovefile queryrunfile querytimeout queryunload quietmode ' +<br /> 'quit radians raise raiseevent rand random range rangehigh rangelow rat ratc ' +<br /> 'ratline rd rdlevel read readactivate readbackcolor readborder readcolors readcycle readdeactivate readerror ' +<br /> 'readexpression readfiller readforecolor readkey readlock readmethod readmouse readobject readonly readsave readshow ' +<br /> 'readsize readtimeout readvalid readwhen recall reccount recentlyusedfiles recno recompile record recordmark ' +<br /> 'recordrefresh recordsource recordsourcetype recover recsize rect rectclass recycle redit reference references ' +<br /> 'refresh refreshalias refreshcmd refreshcmddatasource refreshcmddatasourcetype refreshignorefieldlist refreshtimestamp reindex relatedchild relatedtable relatedtag ' +<br /> 'relation relationalexpr relative relativecolumn relativerow release releaseerase releasetype releasewindows releasexml remote ' +<br /> 'remove removefromscc removeitem removelistitem removeobject removeproperty rename render repeat replace replicate ' +<br /> 'report reportbehavior reportlistener reprocess requery requestdata required reset resettodefault resheight resizable ' +<br /> 'resize resource resourceon resources resourceto respectcursorcp respectnesting rest restore restrict resume ' +<br /> 'reswidth retry return revertoffline rgb rgbscheme right rightc rightclick righttoleft rlock ' +<br /> 'rmdir rollback rollover rotateflip rotation round row rowcolchange rowheight rowset rowsource ' +<br /> 'rowsourcetype rpd rstocursor rtljustify rtod rtrim ruleexpression ruletext run runscript runtime ' +<br /> 'rview safety same sample save saveas saveasclass savepicture say scale scalemode ' +<br /> 'scaleunits scan scatter sccdestroy sccinit sccprovider sccstatus scheme scols scoreboard screen ' +<br /> 'screens scroll scrollbars scrolled scrollscrollbars sdf sdiform sec second seconds seek ' +<br /> 'select selectcmd selected selectedbackcolor selectedforecolor selectedid selecteditembackcolor selecteditemforecolor selection selectionnamespaces selectonentry ' +<br /> 'selfedit sellength selstart seltext sendgdiplusimage sendupdates separator serverclass serverclasslibrary serverhelpfile servername ' +<br /> 'serverproject set setall setdata setdefault setfldstate setfocus setformat setmain setresultset setup ' +<br /> 'setvar setviewport shadows shape shareconnection shared sheet shell shift shortcut show ' +<br /> 'showdoc showintaskbar showolecontrols showoleinsertable showtips showvcxs showwhatsthis showwindow shutdown sign sin ' +<br /> 'single sizable size sizebox skip skipform skpbar skpbar skppad som some ' +<br /> 'sort sorted sortwork soundex sourcename sourcetype space sparse specialeffect spinner spinnerhighvalue ' +<br /> 'spinnerlowvalue splitbar sql sqlasynchronous sqlbatchmode sqlcancel sqlcolumns sqlcommit sqlconnect sqlconnecttimeout sqldisconnect ' +<br /> 'sqldisplogin sqldispwarnings sqlexec sqlgetprop sqlidledisconnect sqlidletimeout sqll sqlmoreresults sqlprepare sqlquerytimeout sqlrollback ' +<br /> 'sqlsetprop sqlstringconnect sqltables sqltransactions sqlwaittime sqrt srows stacklevel standalone startmode status ' +<br /> 'statusbar statusbartext std step sticky store str strconv stretch strextract strictdate ' +<br /> 'strictdateentry string strtofile strtran structure stuff stuffc style subclass substr substrc ' +<br /> 'substring sum summary supportslistenertype suspend sylk sys sysformats sysmenu sysmenus sysmetric ' +<br /> 'system systemrefcount tab tabfixedheight tabfixedwidth tabhit tabindex table tableprompt tablerefresh tablerevert ' +<br /> 'tables tableupdate tablevalidate tabordering taborientation tabs tabstop tabstretch tabstyle tag tagcount ' +<br /> 'tagno talk tan target taskpane tedit terminateread text textbox textheight textmerge ' +<br /> 'textwidth themes then this thisform thisformset threadid throw time timeout timer ' +<br /> 'timestamp timestampdiff timestampfieldlist titlebar titles tmpfiles to tocursor toolbar toolbox tooltiptext ' +<br /> 'top topic topindex topitemid total toxml toxml tracking transaction transactions transform ' +<br /> 'trap trbetween trigger trim truncate try ttoc ttod ttoption twopassprocess txnlevel ' +<br /> 'txtwidth type typeahead typelibclsid typelibdesc typelibname ucase udfparms uienable unbindevent unbinds ' +<br /> 'undefine undocheckout undock unicode union unique unload unloadreport unlock unlockdatasource unnest ' +<br /> 'unpack up upclick updatable updatablefieldlist update updatecmd updatecmddatasource updatecmddatasourcetype updatecmdrefreshcmd updatecmdrefreshfieldlist ' +<br /> 'updatecmdrefreshkeyfieldlist updatecmdsource updatecmdsourcetype updated updatedatasource updategram updategramschemalocation updatename updatenamelist updatestatus updatetrigger ' +<br /> 'updatetype upper upsizing usa use usecodepage usecursorschema used usededatasource usememosize userid ' +<br /> 'users uservalue usetransactions utf8encoded val valid validate value valuedirty values var ' +<br /> 'varbinary varchar varcharmapping varread vartype verb version versioncomments versioncompany versioncopyright versiondescription ' +<br /> 'versionnumber versionproduct versiontrademarks vfpxmlprogid vga25 vga50 view viewportheight viewportleft viewporttop viewportwidth ' +<br /> 'views visible visualeffect volume vscrollsmallchange wait waittime wasactive wasopen wborder wchild ' +<br /> 'wcols wdockable week wexist wfont whatsthisbutton whatsthishelp whatsthishelpid whatsthismode when where ' +<br /> 'wheretype wherewheretype while width windcmd windhelp windmemo windmenu windmodify window windowlist ' +<br /> 'windowntilist windows windowstate windowtype windquery windscreen windsnip windstproc with wizardprompt wk1 ' +<br /> 'wk3 wks wlast wlcol wlrow wmaximum wminimum wontop wordwrap workarea woutput ' +<br /> 'wp wparent wr1 wrap wrapcharincdata wrapincdata wrapmemoincdata wread write writeexpression writemethod ' +<br /> 'wrk wrows wtitle wvisible xcmdfile xl5 xl8 xls xml xmladapter xmlconstraints ' +<br /> 'xmlfield xmlname xmlnameisxpath xmlnamespace xmlprefix xmlschemalocation xmltable xmltocursor xmltype xmlupdategram xsdfractiondigits ' +<br /> 'xsdmaxlength xsdtotaldigits xsdtype year yresolution zap zoom zoom window zoombox zorder zorderset ' +<br /> 'and not null or t f .and. .not. .null. .or. .t. .f.' +<br /> '_activatehandler _activateidle _activatemenu _alen _alignment _alloca _allochand _allocmemo _asciicols _asciirows _assist ' +<br /> '_beautify _box _breakpoint _browser _builder _calcmem _calcvalue _cliptext _codesense _converter _countitems ' +<br /> '_coverage _curobj _datetimeformat _dbappend _dblclick _dblock _dbread _dbreccount _dbrecno _dbreplace _dbrewind ' +<br /> '_dbseek _dbskip _dbstatus _dbunlock _dbunwind _dbwrite _deactivatehandler _deactivateidle _deactivatemenu _defaultprocess _dialog ' +<br /> '_diarydate _disposeitem _disposemenu _dos _edactive _edclosefile _edcopy _edcut _eddelete _edgetchar _edgetenv ' +<br /> '_edgetlinenum _edgetlinepos _edgetpos _edgetstr _edindent _edinsert _edlasterror _edopenfile _edpaste _edposinview _edredo ' +<br /> '_edrevert _edsave _edscrolltopos _edscrolltosel _edselect _edsendkey _edsetenv _edsetpos _edskiplines _edundo _edundoon ' +<br /> '_error _errorinfo _evaluate _execute _fchsize _fclose _fcopy _fcreate _feof _ferror _fflush ' +<br /> '_fgets _findmemo _findvar _findwindow _findwindowp _fontclass _fopen _foxbaseclass _foxcode _foxdoc _foxdragdrop ' +<br /> '_foxdroptarget _foxgraph _foxref _foxtask _fputs _fread _freehand _freeobject _fseek _fwrite _gallery ' +<br /> '_gengraph _genhtml _genmenu _genpd _genscrn _genxtab _getapihandle _getexpr _gethandsize _getitemcmdkey _getitemid ' +<br /> '_getitemsubmenu _getitemtext _getnewitemid _getnewmenuid _getnextevent _getobjectproperty _globaltolocal _globaltolocalp _handtoptr _helpwebdevonly _helpwebdirectory ' +<br /> '_helpwebfiller1 _helpwebfiller2 _helpwebmsdnonline _helpwebmsfthomepage _helpwebsearch _helpwebtutorial _helpwebvfpfaq _helpwebvfpfreestuff _helpwebvfphomepage _helpwebvfponlinesupport _helpwebvfpsendfeedback ' +<br /> '_helpwebvsprodnews _hlock _hunlock _include _incseek _indent _inkey _lmargin _load _mac _mac ' +<br /> '_mbr_appnd _mbr_cpart _mbr_delet _mbr_font _mbr_goto _mbr_grid _mbr_link _mbr_mode _mbr_mvfld _mbr_mvprt _mbr_seek ' +<br /> '_mbr_sp100 _mbr_sp200 _mbr_szfld _mbrowse _mda_appnd _mda_avg _mda_brow _mda_calc _mda_copy _mda_count _mda_label ' +<br /> '_mda_pack _mda_reprt _mda_rindx _mda_setup _mda_sort _mda_sp100 _mda_sp200 _mda_sp300 _mda_sum _mda_total _mdata ' +<br /> '_mdiary _med_beaut _med_bldex _med_clear _med_copy _med_cut _med_cvtst _med_exblk _med_find _med_finda _med_goto ' +<br /> '_med_insob _med_link _med_obj _med_paste _med_pref _med_pstlk _med_redo _med_repl _med_repla _med_slcta _med_sp100 ' +<br /> '_med_sp200 _med_sp300 _med_sp400 _med_sp500 _med_sp600 _med_undo _medit _memavail _memberdata _memcmp _memfill ' +<br /> '_memmove _memochan _memosize _menudesigner _menuid _menuinteract _mfi_clall _mfi_close _mfi_export _mfi_import _mfi_new ' +<br /> '_mfi_open _mfi_pgset _mfi_prevu _mfi_print _mfi_printonecopy _mfi_quit _mfi_revrt _mfi_savas _mfi_save _mfi_saveashtml _mfi_send ' +<br /> '_mfi_setup _mfi_sp100 _mfi_sp200 _mfi_sp300 _mfi_sp400 _mfi_sysprint _mfile _mfiler _mfirst _mlabel _mlast ' +<br /> '_mline _mmacro _mmacro _mmb_delet _mmb_gener _mmb_gopts _mmb_insbr _mmb_insrt _mmb_mopts _mmb_prevu _mmb_quick ' +<br /> '_mmb_sp100 _mmb_sp200 _mmb_sp300 _mmbldr _mouseevents _mouseeventsnodbl _mousepos _mouseposp _mpr_beaut _mpr_cancl _mpr_compl ' +<br /> '_mpr_do _mpr_docum _mpr_formwz _mpr_gener _mpr_graph _mpr_resum _mpr_sp100 _mpr_sp200 _mpr_sp300 _mpr_suspend _mprog ' +<br /> '_mproj _mrc_appnd _mrc_chnge _mrc_cont _mrc_delet _mrc_goto _mrc_locat _mrc_recal _mrc_repl _mrc_seek _mrc_sp100 ' +<br /> '_mrc_sp200 _mrecord _mreport _mrqbe _mscreen _msm_data _msm_edit _msm_file _msm_format _msm_prog _msm_recrd ' +<br /> '_msm_systm _msm_text _msm_tools _msm_view _msm_windo _mst_about _mst_ascii _mst_calcu _mst_captr _mst_dbase _mst_diary ' +<br /> '_mst_docum _mst_filer _mst_help _mst_hphow _mst_hpsch _mst_macro _mst_msdnc _mst_msdni _mst_msdns _mst_office _mst_puzzl ' +<br /> '_mst_samp _mst_sp100 _mst_sp200 _mst_sp300 _mst_specl _mst_techs _msysmenu _msystem _mtable _mtb_appnd _mtb_cpart ' +<br /> '_mtb_delet _mtb_delrc _mtb_goto _mtb_link _mtb_mvfld _mtb_mvprt _mtb_props _mtb_recal _mtb_sp100 _mtb_sp200 _mtb_sp300 ' +<br /> '_mtb_sp400 _mtb_szfld _mti_callstack _mti_dbgout _mti_locals _mti_runactivedoc _mti_trace _mti_watch _mtl_browser _mtl_coverage _mtl_debugger ' +<br /> '_mtl_gallery _mtl_macro _mtl_optns _mtl_sp100 _mtl_sp200 _mtl_sp300 _mtl_sp400 _mtl_spell _mtl_wzrds _mtools _mvi_toolb ' +<br /> '_mview _mwi_arran _mwi_clear _mwi_cmd _mwi_color _mwi_debug _mwi_hide _mwi_hidea _mwi_min _mwi_move _mwi_rotat ' +<br /> '_mwi_showa _mwi_size _mwi_sp100 _mwi_sp200 _mwi_toolb _mwi_trace _mwi_view _mwi_zoom _mwindow _mwizards _mwz_all ' +<br /> '_mwz_applic _mwz_application _mwz_database _mwz_form _mwz_foxdoc _mwz_import _mwz_label _mwz_mail _mwz_pivot _mwz_query _mwz_reprt ' +<br /> '_mwz_setup _mwz_table _mwz_upsizing _mwz_webpublishing _nametableindex _netware _newitem _newmenu _newvar _objectbrowser _objectcmp ' +<br /> '_objectreference _objectrelease _olebasecontrol _oledragdrop _onselection _oracle _padvance _pageno _pagetotal _pbpage _pcolno ' +<br /> '_pcopies _pdparms _pdriver _pdsetup _pecode _peject _pepage _pform _plength _plineno _ploffset ' +<br /> '_ppitch _pquality _pretext _pscode _pspacing _putchr _putstr _putvalue _pwait _rectclass _release ' +<br /> '_reportbuilder _reportoutput _reportpreview _retchar _retcurrency _retdatestr _retdatetimestr _retfloat _retint _retlogical _retval ' +<br /> '_rmargin _runactivedoc _samples _scctext _screen _sethandsize _setitemcmdkey _setitemsubmenu _setitemtext _setmenupoint _setmenupointp ' +<br /> '_setobjectproperty _shell _spellchk _sqlserver _startup _store _strcmp _strcpy _strlen _tabs _tally ' +<br /> '_tasklist _taskpane _text _throttle _toolbox _tooltiptimeout _transport _triggerlevel _unix _usererror _vfp ' +<br /> '_viewport _vsbuild _wattr _wbottom _wbottomp _wclear _wclearrect _wclearrectp _wclose _webdevonly _webmenu ' +<br /> '_webmsfthomepage _webvfphomepage _webvfponlinesupport _wfindtitle _wgetcursor _wgetcursorp _wgetobjectclientwindow _wgetobjectwindow _wgetport _wheight _wheightp ' +<br /> '_whide _whtohwnd _windows _wizard _wleft _wleftp _wmainwindow _wmove _wmovep _wontop _wopen ' +<br /> '_wopenp _wposcursor _wposcursorp _wputchr _wputstr _wrap _wright _wrightp _wscroll _wscrollp _wselect ' +<br /> '_wsendbehind _wsetattr _wsetport _wsettitle _wshow _wsize _wsizep _wtitle _wtop _wtopp _wwidth ' +<br /> '_wwidthp _wzoom';<br /><br /> this.regexList = [<br /> { regex: /^\s*\*.*$/g, css: 'comments' }, // one line comments<br /> { regex: /&&.*$/g, css: 'comments' }, // inline comments<br /> { regex: SyntaxHighlighter.regexLib.doubleQuotedString, css: 'string' }, // strings<br /> { regex: SyntaxHighlighter.regexLib.singleQuotedString, css: 'string' }, // strings<br /> { regex: /^\s*#.*$/g, css: 'preprocessor' }, // preprocessor tags like #region and #endregion<br /> { regex: new RegExp(this.getKeywords(keywords), 'gi'), css: 'keyword' } // vb keyword<br /> ];<br /> };<br /><br /> Brush.prototype = new SyntaxHighlighter.Highlighter();<br /> Brush.aliases = ['foxpro'];<br /><br /> SyntaxHighlighter.brushes.Foxpro = Brush;<br /><br /> // CommonJS<br /> typeof(exports) != 'undefined' ? exports.Brush = Brush : null;<br />})();<br /></pre>Brent Wonghttp://www.blogger.com/profile/14273804178870499098noreply@blogger.com2tag:blogger.com,1999:blog-1642851344329233583.post-72972073384958647242010-11-27T17:21:00.002-10:002010-11-27T18:16:46.285-10:00christmas card<div style="WIDTH: 425px; HEIGHT: 494px" class="sflyProductPreviewWidget"><div style="BACKGROUND-IMAGE: url(http://cdn.staticsfly.com/img_/share/preview/msc/widget/top.gif); HEIGHT: 6px" class="sflyProductPreviewWidgetTop"></div><div style="BACKGROUND-IMAGE: url(http://cdn.staticsfly.com/img_/share/preview/msc/widget/bg.gif); PADDING-BOTTOM: 0px; PADDING-LEFT: 6px; PADDING-RIGHT: 6px; BACKGROUND-REPEAT: repeat-y; HEIGHT: 482px; PADDING-TOP: 0px" class="sflyProductPreviewWidgetCenter"><div style="PADDING-BOTTOM: 0px; PADDING-LEFT: 14px; WIDTH: 105px; PADDING-RIGHT: 0px; HEIGHT: 34px; PADDING-TOP: 14px" class="sflyProductPreviewLogo"><img src="http://cdn.staticsfly.com/img_/share/preview/msc/widget/logo.gif" /></div><div style="TEXT-ALIGN: center; PADDING-BOTTOM: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; HEIGHT: 350px; PADDING-TOP: 0px" class="sflyProductPreviewContainer"><a href="http://www.shutterfly.com/cards-stationery"><img src="http://images-community.shutterfly.com/prs/v1/0BaMmzZuybsy/0BaMmzZuybsycl/p/67b0de21b3127d902548/JPEG/1290917728000/0/" /></a></div><div style="TEXT-ALIGN: center; PADDING-BOTTOM: 15px; LINE-HEIGHT: 19px; BACKGROUND-COLOR: #f4f4e9; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; HEIGHT: 55px; PADDING-TOP: 15px" class="sflyProductPreviewMessageContainer"><div style="FONT-FAMILY: arial, sans-seris; COLOR: #333333; FONT-SIZE: 15px; FONT-WEIGHT: bold" class="sflyProductPreviewTitle"><span style="font-size:+0;">Classic Script Wishes Christmas</span></div><div style="FONT-FAMILY: arial, sans-seris; COLOR: #333333; FONT-SIZE: 13px" class="sflyProductPreviewSEOText"><span style="font-size:+0;">Shop Shutterfly.com for elegant <a style="COLOR: #6666cc" href="http://www.shutterfly.com/cards-stationery/christmas-photo-cards">Christmas photo cards</a>.</span></div><div style="FONT-FAMILY: arial, sans-seris; COLOR: #333333; FONT-SIZE: 13px" class="sflyProductPreviewViewCollection"><span style="font-size:+0;">View the entire <a style="COLOR: #6666cc" href="http://www.shutterfly.com/cards-stationery">collection</a> of cards.</span></div><img border="0" src="https://os.shutterfly.com/b/ss/sflyshareprod/1/H.15/111?pageName=sharekey&c1=msc&c2=blogger" width="1" height="1" /></div></div><div style="BACKGROUND-IMAGE: url(http://cdn.staticsfly.com/img_/share/preview/msc/widget/bottom.gif); HEIGHT: 6px" class="sflyProductPreviewWidgetBottom"></div></div>Brent Wonghttp://www.blogger.com/profile/14273804178870499098noreply@blogger.com0tag:blogger.com,1999:blog-1642851344329233583.post-24283031737760506772010-11-18T12:05:00.002-10:002010-11-29T23:06:23.505-10:00Spiceworks 5.0 is outWell, since I didn't post about any versions since 4.5 I thought I'd at least post about the next major version release. 5.0 is out now. If you use an older version or haven't used Spiceworks yet, what are you waiting for? <a href="http://www.spiceworks.com/">Go get it</a>. Now.Brent Wonghttp://www.blogger.com/profile/14273804178870499098noreply@blogger.com0tag:blogger.com,1999:blog-1642851344329233583.post-74120121171058887442010-11-18T11:38:00.007-10:002010-11-29T23:03:18.974-10:00Moving from FoxPro to MySql<p>It's been a while since I posted and I thought I'd get some more notes down. I work with some software written in FoxPro and am trying to update it since I it is now dead.</p><br /><p>The first step in moving over to a new system is getting the databases moved over to a new database system. I chose MySQL since there are quite a few free tools you can use such as the MySQL Workbench. MySQL Workbench handles the database administration, you can enter queries into it, and you can map the databases using the EER tool. The last is what I am looking to use. The reason being that the tables weren't created with normal database rules and I'll need to abstract some of the data and move it around.</p><br /><p>While looking for an easy way to do this, I came across a <a href="http://pirringers.com/mysqlblog/?p=17">post by someone named Martin</a>. Well great that has everything I need.</p><br /><p>To go this route, you need to do a few things (assuming MySQL is already installed).</p><br /><ol><br /><li>Set up a new schema</li><br /><li>Install the MySQL ODBC connector</li><br /><li>Set up a new System DSN</li><br /><li>Perform some magic</li></ol><br /><p>Okay, setting up a new schema is simple enough. It can be empty. Just make sure you have a user that has "create" and "drop" permissions.</p><br /><p>Now just run over to download the newest and greatest <a href="http://www.mysql.com/downloads/connector/odbc/">MySQL ODBC connector from the MySQL website</a>. The install is a breeze.</p><br /><p>To set up a new System DSN on Windows XP, just navigate to the Start Menu->Settings->Control Panel->Administrative Tools->Data Sources (ODBC). From there just click on the System DSN tab, go to add, find the MySQL Connector you installed, and click finish. Give it a name that's easy to remember and add in your database information and you're all set.</p><br /><p>Now there is that magic part. Oh yeah just look down. Walking through the code, it will go through all the tables in a directory, and add them into the MySQL database. Most of this code is straight from "Martin" modified slightly with a few extra datatypes that will keep your program from freezing up.</p><br /><br /><pre class="brush: foxpro">GLOBAL gnConn<br />LOCAL lcPath, lcTable<br /><br />lcPath = "g:\careplanet\data\" && This is the path<br /><br />ON ERROR DO errhand && errhand is the error handler procedure<br /><br />gnConn = SQLCONNECT('MYSQLDSN', .T.)<br />IF gnConn <= 0<br /> MESSAGEBOX('Cannot make connection', 16, 'SQL Connect Error')<br /> DO errhand<br />ELSE<br /> MESSAGEBOX('Connection made', 48, 'SQL Connect Message')<br /> CD (lcPath)<br /> ADIR(laFiles, '*.DBF')<br /> FOR i=1 TO ALEN(laFiles,1)<br /> lcTable = RTRIM(laFiles[i,1], 1, '.DBF')<br /> IF !CreateTable(lcPath + lcTable, lcTable)<br /> MESSAGEBOX('Unable to create table ' + lcTable, 16, 'Table Create Error')<br /> EXIT<br /> ENDIF<br /> ENDFOR<br />ENDIF<br /><br />SQLDISCONNECT(gnConn)<br /><br />***************************************<br />* CreateTable<br />***************************************<br />FUNCTION CreateTable<br />PARAMETERS lc_sourcetable, lc_desttable<br /><br />USE (lc_sourcetable) AGAIN ALIAS a_conv<br /><br />ln_c = AFIELDS(la_f)<br /><br />lc_sql = "DROP TABLE IF EXISTS `"+lc_desttable + "`"<br /><br />IF !MYSQLEXEC(lc_sql, .f., "Cannot drop table")<br /> RETURN .f.<br />ENDIF<br /><br />lc_sql = "CREATE TABLE `"+lc_desttable + "` ("<br /><br />FOR ln = 1 TO ln_c<br /> IF ln > 1<br /> lc_sql = lc_sql + ", "<br /> ENDIF<br /><br /> lc_sql = lc_sql + "`" + la_f(ln, 1) + "` "<br /><br /> DO CASE<br /> CASE INLIST(la_f(ln, 2), "C", "V")<br /> lc_sql = lc_sql + "VARCHAR(" + ALLTRIM(STR(la_f(ln, 3), 10, 0)) + ")"<br /> CASE la_f(ln, 2) = "D"<br /> lc_sql = lc_sql + "DATE"<br /> CASE la_f(ln, 2) = "T"<br /> lc_sql = lc_sql + "DATETIME"<br /> CASE la_f(ln, 2) = "M"<br /> lc_sql = lc_sql + "TEXT"<br /> CASE la_f(ln, 2) = "L"<br /> lc_sql = lc_sql + "BIT"<br /> CASE INLIST(la_f(ln, 2), "N", "B", "F")<br /> lc_sql = lc_sql + "DECIMAL(" + ALLTRIM(STR(la_f(ln, 3), 10, 0)) + ", " + ALLTRIM(STR(la_f(ln, 4), 10, 0)) + ")"<br /> CASE la_f(ln, 2) = "I"<br /> lc_sql = lc_sql + "INTEGER"<br /> CASE la_f(ln, 2) = "G"<br /> lc_sql = lc_sql + "MEDIUMBLOB"<br /> CASE INLIST(la_f(ln, 2), "W", "Q")<br /> lc_sql = lc_sql + "BLOB"<br /> CASE la_f(ln, 2) = "Y"<br /> lc_sql = lc_sql + "DECIMAL(19,4)"<br /> ENDCASE<br /><br /> IF !la_f(ln, 5)<br /> lc_sql = lc_sql + " NULL"<br /> ELSE<br /> lc_sql = lc_sql + " NOT NULL"<br /> ENDIF<br /><br /> IF !EMPTY(la_f(ln, 9))<br /> lc_sql = lc_sql + " DEFAULT `" + la_f(ln, 9) + "`"<br /> ENDIF<br />NEXT<br />lc_sql = lc_sql + ") ENGINE = INNODB"<br />IF !MYSQLEXEC(lc_sql, .f., "Cannot create table")<br /> RETURN .f.<br />ENDIF<br />RETURN .t.<br /><br />***************************************<br />* mysqlexec<br />***************************************<br />FUNCTION mysqlexec<br />PARAMETERS lcQuery, llSmthing, lcMessage<br /><br />LOCAL lcReturn<br /><br />IF gnConn <= 0<br /> MESSAGEBOX('No active SQL Connection', 16, 'SQL Connect Error')<br />ELSE<br /> lcReturn = SQLEXEC(gnConn, lcQuery)<br /> IF lcReturn<0<br /> MESSAGEBOX(lcMessage + CHR(13) + lcQuery, 16, 'mysqlexec Error')<br /> ELSE<br /> RETURN .T.<br /> ENDIF<br />ENDIF<br />RETURN .F.<br /><br />***************************************<br />* errhand<br />***************************************<br />PROCEDURE errhand<br /><br />= AERROR(aErrorArray) && Data from most recent error<br />CLEAR<br /><br />? 'The error provided the following information' && Display message<br /><br />FOR n = 1 TO 7 && Display all elements of the array<br /> ? aErrorArray(n)<br />ENDFOR<br /></pre>Brent Wonghttp://www.blogger.com/profile/14273804178870499098noreply@blogger.com0tag:blogger.com,1999:blog-1642851344329233583.post-6553129362516307702009-11-13T09:59:00.007-10:002009-12-14T09:35:18.213-10:00Spiceworks 4.5 Beta III is out; my adventureI use <a href="http://www.spiceworks.com">Spiceworks</a> to keep track of everything connected to our network and also as a help desk solution. To tell you the truth, I use it as a help desk solution much more than any other of the millions of tools built into Spiceworks.<div><br /></div><div>So when I heard that version 4.5 was going to be released, I immediately signed up for the beta so I could test out all the new and cool features.</div><div><br /></div><div>I installed the Beta I and couldn't get the service started. I ended up uninstalling it and didn't have time to troubleshoot the problems before Beta II came out. So I installed Beta II and ended up with a "503 service unavailable" error. I reinstalled once and came up with the same error. Since the Spiceworks team is so fast at coming up with new versions, they had already come out with Beta III by the time I had gotten a chance to look into the problems I was having. I installed that version the day it came out. I tried to log in and received another 503 error. It was really pretty frustrating.</div><div><br /></div><div>I came in the next day and logged in to my computer only to find it was running really really slow. I opened up the task manager and found that spiceworks-finder.exe was running and hogging all my resources. I thought to myself "hmm isn't that executable only running if Spiceworks is running?" So I went to the login screen, and voila, it was running. Needless to say I was excited.</div><div><br /></div><div>Looking back, I realize that I probably wasn't having any problems with the Spiceworks beta, I just have too many things installed on my machine and too many services running so it took forever to load.</div><div><br /></div><div>So far, I've only taken a quick look around and am quite excited by what I've seen so far. The first place I looked was the plugin screen. It looks so much better than before with customizable ticket rules and views built in.</div><div><br /></div><a href="http://picasaweb.google.com/lh/photo/yeADLV04rO0q07AD8uGyoA?authkey=Gv1sRgCNTUsPGekrSR6QE&feat=embedwebsite"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj41nGfMjzl7iTrRTxgg09Qq0mitndu9TqWumqzCPB8kkkClWrIMDoo3cvJEY_faRYREVTIAYyu8MhxC0EPU7ZGmx-sOmV5d41ax0ANYKK4TFWy6kRsO2V3Mme_PBEdu-VdL2jSxWUNAEfE/s800/Spiceworks%20-%20Manage%20Extensions_1258140545442.jpg" /></a><div><br /></div><div>The next place I looked was the plugin editor. I had heard that there were improvements made to the editor so I needed to check it out. All I have to say is wow. They separated out the title, description, and versioning to keep you concentrated on the actual code in the code area. And you can separate the code into different files inside the editor. These are really nice improvements.</div><div><br /></div><a href="http://picasaweb.google.com/lh/photo/98Nlz1O-1yWbBV2YfNEJvg?authkey=Gv1sRgCNTUsPGekrSR6QE&feat=embedwebsite"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXn3qZZrD8znOv29tr4jKNvn_JTx4exkx6EnbPGbmw-6iP1TrEjP1PNbOCIg6zpnjwnsTsda56edqPOGmvhN735UHvB39-lj3CMZZZrOeMcAiJwshTQXadnYRAWbcLtlh-hLU4s1T2OLEi/s800/Test%20Plugin_1258142115574.jpg" /></a><div><br /></div><div>Here is a video sneak-peek of 4.5 from Spiceworks.<br /><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="437" height="347" id="viddler"><param name="movie" value="http://www.viddler.com/simple_on_site/6a725c3a"><param name="allowScriptAccess" value="always"><param name="allowFullScreen" value="true"><embed src="http://www.viddler.com/simple_on_site/6a725c3a" width="437" height="347" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" name="viddler"></embed></object></div>Brent Wonghttp://www.blogger.com/profile/14273804178870499098noreply@blogger.com0tag:blogger.com,1999:blog-1642851344329233583.post-43253856537051590832009-10-30T07:31:00.003-10:002009-10-30T07:54:30.333-10:00Version 1.0 of the Helpdesk Customization Plugin<p>Well, it has finally happened. I've hit version 1.0 of the Helpdesk Customizations Plugin.</p><p>In the most recent version, I've added info for tickets relating to software items and fixed a bug where the plugin would only retrieve 100 tickets in the info bar.</p><p>If you run into this problem, here is the code to get around it for now.</p><br /><pre>tkt_ct = (new Ajax.Request('/api/tickets.json?total_count=true&filter=open', {method:'get', asynchronous:false})).transport.responseText.evalJSON().count;</pre>Brent Wonghttp://www.blogger.com/profile/14273804178870499098noreply@blogger.com1tag:blogger.com,1999:blog-1642851344329233583.post-42829969568886424612009-10-26T13:43:00.002-10:002009-10-26T13:55:39.004-10:00The Spiceworld 2009 AftermathI wasn't able to attend Spiceworld Austin this year but it sounds like it was a fun event. I just want to say congratulations to the plugin and poster winners.<br /><ul><li>Help Desk - <a href="http://community.spiceworks.com/plugin/161">Ticket AutoAssign</a> by Sean Wilson</li><li>User Portal - <a href="http://community.spiceworks.com/plugin/101">User Portal Submission Tracking</a> by Justin Davison</li><li>Inventory - <a href="http://community.spiceworks.com/plugin/139">Help-Desk, Inventory, Reports, & My Tools User Role</a> by Robert Netzel</li><li>Most Useful - <a href="http://community.spiceworks.com/plugin/148">Keyboard Shortcuts</a> by Justin Dorfman</li><li>Most Fun - <a href="http://community.spiceworks.com/plugin/57">Dilbert</a> by Dominic</li><li>Grand Prize - Justin Dorfman</li><li>Poster Contest - <span class="status-body"><span class="entry-content">Denise Parish</span></span></li></ul><div>Great job everybody.</div>Brent Wonghttp://www.blogger.com/profile/14273804178870499098noreply@blogger.com0tag:blogger.com,1999:blog-1642851344329233583.post-77522908269603866272009-10-05T07:01:00.002-10:002009-10-05T07:14:38.678-10:00<p>Giorgio Sironi just finished his writeup on an introduction to PHPUnit testing. If you are new to PHPUnit, you should check it out.</p><br /><ul><br /><li><a href="http://giorgiosironi.blogspot.com/2009/09/practical-testing-in-php-part-1-phpunit.html">part 1: PHPUnit usage</a></li><br /><li><a href="http://giorgiosironi.blogspot.com/2009/09/practical-testing-in-php-part-2-write.html">part 2: write clever tests</a></li><br /><li><a href="http://giorgiosironi.blogspot.com/2009/09/practical-testing-in-php-part-3.html">part 3: assertions</a></li><br /><li><a href="http://giorgiosironi.blogspot.com/2009/09/practical-testing-in-php-part-4.html">part 4: fixtures</a></li><br /><li><a href="http://giorgiosironi.blogspot.com/2009/09/practical-testing-in-php-part-5.html">part 5: annotations</a></li><br /><li><a href="http://giorgiosironi.blogspot.com/2009/09/practical-testing-in-php-part-6.html">part 6: refactoring and patterns</a></li><br /><li><a href="http://giorgiosironi.blogspot.com/2009/09/practical-testing-in-php-part-7-stubs.html">part 7: stubs</a></li><br /><li><a href="http://giorgiosironi.blogspot.com/2009/10/practical-testing-in-php-part-8-mocks.html">part 8: mocks</a></li><br /><li><a href="http://giorgiosironi.blogspot.com/2009/10/practical-testing-in-php-part-9-command.html">part 9: command line options</a></li><br /></ul>Brent Wonghttp://www.blogger.com/profile/14273804178870499098noreply@blogger.com0tag:blogger.com,1999:blog-1642851344329233583.post-67706698900529323382009-08-27T07:37:00.002-10:002009-08-27T07:39:33.892-10:00Free extending Spiceworks webinarPretty exciting webinar for those looking to get into Spiceworks plugin creation but haven't yet jumped in. Plugin writers can win some neat prizes just as mentioned below.<br /><br /><blockquote>Love Spiceworks but wish it did one thing differently? With the plugin functionality you can extend Spiceworks to meet the needs of your network. From fun widgets and skins to new functionality you can make Spiceworks yours. Join this webinar and learn how you can get started writing plugins & more. Plus you could win an all expense paid trip to SpiceWorld Austin and a $250 Amazon gift card by submitting your plugin to the plugin contest.<br /><br />Title: Extending Spiceworks<br />Date: Tuesday, September 1, 2009<br />Time: 10:00 AM - 11:00 AM CDT<br />Registration Link: https://www2.gotomeeting.com/register/246101330</blockquote>Brent Wonghttp://www.blogger.com/profile/14273804178870499098noreply@blogger.com1tag:blogger.com,1999:blog-1642851344329233583.post-71719511898929792062009-08-25T15:12:00.011-10:002010-11-29T10:54:35.372-10:00A new version of Spiceworks, a new helpdesk customization revisionWell Spiceworks released version 4.1 of their software so I have gone and updated the helpdesk optimization plugin. You will notice that there is a check for version 4.1 due to a small bug in the search for devices, but not to worry, as everything works. For the next release, I plan on having info for software too and not just devices.<br /><br />Anyway, the code is as follows:<br /><pre class='brush: as3'><br />// ==SPICEWORKS-PLUGIN==<br />// @name Help Desk Customizations Clone<br />// @description Adds minor enhancements to your Help Desk, including ticket status in the toolbar, colors for past due tickets and private messages, and information on devices in the Related To field.<br />// @version 0.9<br />// ==/SPICEWORKS-PLUGIN==<br />//<br />// Author: Brent Wong<br />// Date: June 30, 2009<br />// SW Version: 3.6, 4.0, 4.1<br /><br />var is4 = SPICEWORKS.version && SPICEWORKS.version.is(">= 4.0");<br />var is41 = SPICEWORKS.version && SPICEWORKS.version.is(">= 4.1");<br /><br />var helpdeskCustSettings = [<br />{name:'past_due_color', label:'Past Due Highlight Color', type:'string', defaultValue:'#ffdede', example:'Default: #ffdede'},<br />{name:'private_note_color', label:'Private Note Color', type:'string', defaultValue:'#cccccc', example:'Default: #cccccc'},<br />{name:'tickets_open_display', label:'Display Open Tickets', type:'checkbox', defaultValue:true},<br />{name:'tickets_due_display', label:'Display Past Due Tickets', type:'checkbox', defaultValue:true},<br />{name:'tickets_unassigned_display', label:'Display Unassigned Tickets', type:'checkbox', defaultValue:true},<br />{name:'priority_low_color', label:'Priority Low Color', type:'string', defaultValue:'#c9dcc8', example:'Default: #c9dcc8'},<br />{name:'priority_med_color', label:'Priority Medium Color', type:'string', defaultValue:'#ffffd7', example:'Default: #ffffd7'},<br />{name:'priority_high_color', label:'Priority High Color', type:'string', defaultValue:'#fc939c', example:'Default: #fc939c'}<br />]<br /><br />// Setup based on Spiceworks version<br />if (is4){<br />// For version 4.0<br />var strToolbar = 'main-toolbar';<br />var strToolbarDown = 'span.right';<br />var strDevLink = 'related_to_property';<br />var strDevLinkDown = '.value a';<br />var strDevURL = 'devices/';<br />var strDevInfoAdd = 'related_to_section';<br />}else{<br />// For older versions<br />var strToolbar = 'toolbar';<br />var strToolbarDown = 'span.advanced_controls';<br />var strDevLink = 'ticket_review_summary_view';<br />var strDevLinkDown = 'p.related_to a';<br />var strDevURL = 'id-';<br />var strDevInfoAdd = 'ticket_purchase_container';<br />helpdeskCustSettings.push(<br /> {name: 'expanded_height_enabled', label:'Enable Increased Window Height', type:'checkbox', defaultValue: false},<br /> {name: 'expanded_height', label: 'Ticket Window Height (in px)', type: 'string', defaultValue: '500', example: 'Default: 500'}<br />);<br />}<br /><br />plugin.configure({<br />settingDefinitions: helpdeskCustSettings<br />});<br /><br />function refreshToolbarTicketInfo(){<br />// display ticket stats<br />if (plugin.settings.tickets_open_display || plugin.settings.tickets_due_display || plugin.settings.ticket_unassigned_display){<br /> var displayString = '';<br /><br /> if (plugin.settings.tickets_open_display){<br /> displayString += '<span><strong>Open:</strong> ' + SPICEWORKS.data.Ticket.find('all', {filter:'open'}).length + '</span>';<br /> }<br /> if (plugin.settings.tickets_due_display){<br /> displayString += '<span><strong>Past Due:</strong> ' + SPICEWORKS.data.Ticket.find('all', {filter:'past_due'}).length + '</span>';<br /> }<br /> if (plugin.settings.tickets_unassigned_display){<br /> displayString += '<span><strong>Unassigned:</strong> ' + SPICEWORKS.data.Ticket.find( 'all', {filter:'unassigned'}).length + '</span>';<br /> }<br /><br /> var toolbarTicketInfo = $(strToolbar).down(strToolbarDown + ' span.toolbar_ticket_info');<br /><br /> if (toolbarTicketInfo){<br /> toolbarTicketInfo.remove();<br /> }<br /> <br /> $(strToolbar).down(strToolbarDown).insert({top:'<span class="toolbar_ticket_info">' + displayString + '</span>'});<br />}<br />}<br /><br />SPICEWORKS.app.helpdesk.ready(function(){<br />// set styling<br />if (is4){<br /> SPICEWORKS.utils.addStyle("\<br />span.toolbar_ticket_info{margin-right:20px;padding:0 5px;border:1px solid #999;}\<br />span.toolbar_ticket_info span{margin-right:5px;}\<br />#related_to_summary{clear:both;border:1px solid #ccc;padding:10px;margin:5px 0;overflow:hidden;}\<br />#related_to_summary ul{margin:0;padding:0;text-align:left;}\<br />#related_to_summary p{float:right;}\<br />.filter-priority-low td.priority{background-color:" + plugin.settings.priority_low_color + ";}\<br />.filter-priority-med td.priority{background-color:" + plugin.settings.priority_med_color + ";}\<br />.filter-priority-high td.priority{background-color:" + plugin.settings.priority_high_color + ";}\<br /> ");<br />}else{<br /> SPICEWORKS.utils.addStyle("\<br />span.toolbar_ticket_info{font-size:1em;color:#000;float:right;background:#e8e8e8;padding:3px 5px;border:#888 1px solid;}\<br />span.toolbar_ticket_info span{margin-right:5px;}\<br />#related_to_summary{clear:both;border:1px solid #ccc;padding:10px;margin:5px 0;overflow:hidden;}\<br />#related_to_summary ul{margin:0;padding:0;}\<br />#related_to_summary li{float:left;width:200px;}\<br />#related_to_summary p{float:right;}\<br />.filter-priority-low td.priority{background-color:" + plugin.settings.priority_low_color + ";}\<br />.filter-priority-med td.priority{background-color:" + plugin.settings.priority_med_color + ";}\<br />.filter-priority-high td.priority{background-color:" + plugin.settings.priority_high_color + ";}\<br /> ");<br /><br /> // Only Expand the height on version 3<br /> if(plugin.settings.expanded_height_enabled){<br /> SPICEWORKS.utils.addStyle("body.tickets #active_overview {height: " + plugin.settings.expanded_height + "px !important;}");<br /> }<br />}<br /><br />// mark past due ticket rows<br />$('td.past_due').each(function(item){<br /> item.up().setStyle({backgroundColor: plugin.settings.past_due_color});<br />});<br /><br />refreshToolbarTicketInfo();<br /><br />});<br /><br />SPICEWORKS.app.helpdesk.ticket.closed(function(){<br />refreshToolbarTicketInfo();<br />});<br /><br />SPICEWORKS.app.helpdesk.ticket.ready(function(){<br />// color private messages<br />$('li.private').each(function(item){<br /> item.setStyle({backgroundColor: plugin.settings.private_note_color})<br />});<br /><br />// add device summary<br />var deviceLink = $(strDevLink).down(strDevLinkDown);<br />if(deviceLink) {<br /> var deviceURL = deviceLink.readAttribute('href');<br /> var startIndex = deviceURL.indexOf(strDevURL);<br /><br /> if(startIndex != -1) {<br /> var substring = deviceURL.substring(startIndex);<br /> var deviceID = substring.gsub(/[^\d]/, '');<br /> if (is41) {<br /> var devices = SPICEWORKS.data.Device.find('all', {ids:deviceID});<br /> var device = devices.first();<br /> } else {<br /> var device = SPICEWORKS.data.Device.find(deviceID);<br /> }<br /> if(device) {<br /> var displayInfo = '<div id="related_to_summary" style="display:none;"><ul>'<br /> var listStyle = '<li>'<br /> if(device.ip_address && !device.ip_address.empty()) {<br /> displayInfo += listStyle + '<strong>IP:</strong> ' + device.ip_address + '</li>';<br /> }<br /> if(device.mac_address && !device.mac_address.empty()) {<br /> displayInfo += listStyle + '<strong>MAC:</strong> ' + device.mac_address + '</li>';<br /> }<br /> if(device.manufacturer && !device.manufacturer.empty()) {<br /> displayInfo += listStyle + '<strong>Vendor:</strong> ' + device.manufacturer + '</li>'; <br /> }<br /> if(device.current_user && !device.current_user.empty()) {<br /> displayInfo += listStyle + '<strong>Last Login:</strong> ' + device.current_user + '</li>';<br /> }<br /> if(device.primary_owner_name && !device.primary_owner_name.empty()) {<br /> displayInfo += listStyle + '<strong>Owner:</strong> ' + device.primary_owner_name + '</li>';<br /> }<br /> if(device.asset_tag && !device.asset_tag.empty()) {<br /> displayInfo += listStyle + '<strong>Asset Tag:</strong> ' + device.asset_tag + '</li>';<br /> }<br /> if(device.operating_system && !device.operating_system.empty()) {<br /> displayInfo += listStyle + '<strong>OS:</strong> ' + device.operating_system + '</li>';<br /> }<br /> if(device.serial_number && !device.serial_number.empty()) {<br /> displayInfo += listStyle + '<strong>Serial No:</strong> ' + device.serial_number + '</li>';<br /> }<br /> displayInfo += '</ul><p><a href="#" onclick="new Effect.BlindUp(\'related_to_summary\', {duration:0.20}); return false;">hide</a></p></div>';<br /> $(strDevInfoAdd).insert({after: displayInfo});<br /> deviceLink.insert({after: '&nbsp;&nbsp;(<a href="#" onclick="new Effect.BlindDown(\'related_to_summary\', {duration:0.20}); return false;">info</a>)'})<br /> }<br /> }<br />}<br />});<br /></pre>Brent Wonghttp://www.blogger.com/profile/14273804178870499098noreply@blogger.com1tag:blogger.com,1999:blog-1642851344329233583.post-57153235293842517662009-07-28T08:16:00.001-10:002009-07-28T08:16:31.034-10:00Why will socialized health care work?<div xmlns='http://www.w3.org/1999/xhtml'>What I want to know is why people think that socialized health care will work. I mean let's break this problem down into it's components, the actual problem and the solution.<br/><br/>What I am told is that the problem we are facing are rising health care costs. Over the last few years health care costs have continued to rise and are going to increase at a more rapid pace. I am not going to say that this doesn't happen, because it does, but let's take a look at the reasons that health care costs have been rising. Health care costs can be split into two different categories from my point of view, medical insurance and out-of-pocket, or a-la-carte, expenses. First, the insurance costs go up because insurance companies have to make a profit and their costs go up because of both administrative costs and reimbursement costs. Let's say that administrative costs only <b>need</b> to go up when there is a raise in the minimum wage or there is added red tape, and therefore could be pretty much static. That leaves us with the reimbursement costs being the main factor in the rise of medical insurance rates. There are also two main factors in the rise of reimbursement costs, rising cost of service and increase in the number of services performed. We'll say that reimbursement costs are equivalent to costs incurred by someone paying out-of-pocket.<br/><br/>Okay, we've looked at the problem, so let's take a look at the solution. The proposed governmental solution is one of socialized health care in the form of a tax based public insurance option. In other words, everybody pays into this system and is helping to support it. Well, gee, if it is another insurance option, isn't it still affected by reimbursement costs. Why, yes, yes it is. And the only way that an insurance company can cut those costs are by decreasing the number of services performed or to lower the cost of service. To decrease the number of services performed, the government could put in age restrictions or just other restrictions on procedures. And to lower the cost of service, the government can put caps on the price of services performed. Are either of those options going to make health care better?<br/><br/>What I'm not saying is that insurance companies are the best option. What I am saying is that a government run insurance company isn't a better option. What our Nation was founded on is Capitalism and competition breeds lower prices and innovation.<br/><br/><div class='zemanta-pixie'><img src='http://img.zemanta.com/pixy.gif?x-id=3101aa56-de29-8865-858d-61f17c1ce225' alt='' class='zemanta-pixie-img'/></div></div>Brent Wonghttp://www.blogger.com/profile/14273804178870499098noreply@blogger.com0tag:blogger.com,1999:blog-1642851344329233583.post-52002938278562185062009-07-28T07:42:00.001-10:002009-07-28T07:42:13.396-10:00Regular Expressions and an MVC introduction<div xmlns='http://www.w3.org/1999/xhtml'>This morning, upon reading my RSS feeds, I came across two interesting and very useful posts. The first titled <a href='http://reinholdweber.com/php/mvc-anatomy-for-php-developers/'>"MVC anatomy for PHP developers"</a> is a great introduction as to why the model, view, controller design is good and is really meant for people just beginning out with PHP or have never used the MVC design before. The post doesn't go into much depth, but it does cover that first step.<br/><br/>The next post I came across was <a href='http://www.catswhocode.com/blog/15-php-regular-expressions-for-web-developers'>"15 PHP regular expressions for web development."</a> This post goes across some basics of regular expressions but then goes on to list some very useful and commonly used ones. There are a couple strictly WordPress regular expressions in there, but most of them are universal.<br/><br/><div class='zemanta-pixie'><img src='http://img.zemanta.com/pixy.gif?x-id=0bacb715-546a-88f6-a7a4-9f377c3c11b9' alt='' class='zemanta-pixie-img'/></div></div>Brent Wonghttp://www.blogger.com/profile/14273804178870499098noreply@blogger.com0tag:blogger.com,1999:blog-1642851344329233583.post-80678343296250140672009-07-09T08:34:00.002-10:002009-07-09T09:57:56.080-10:00The caveats of phone conversationsSo I was having a chat with someone about PHP over the phone the other day and they ask me to explain the "Foreesh" pattern in PHP. To which I am saying to myself "Is there a 'foreesh' pattern, I've never heard of it." but respond with "I'm sorry, can you say that one more time?". The person I am talking to tries to spell it out "F-O-R-E-S-E-H" at which point I am more confused than ever.<br /><br />This is one of the biggest problems with talking to people over the phone (especially with people that have a different accent than you), you are just very limited in ways of communication. When you are chatting with someone in person, there is body language, you can watch the way their mouth moves, hand gestures, and even writing or drawing things out on a piece of paper. I have heard that video chats work better but then you are stuck with slow imitation of the real thing.<br /><br />BTW, I think the person I was talking with meant foreach.Brent Wonghttp://www.blogger.com/profile/14273804178870499098noreply@blogger.com0tag:blogger.com,1999:blog-1642851344329233583.post-51999206286344694642009-07-07T12:14:00.002-10:002009-07-07T12:21:32.973-10:00This just in...Michael Jackson is deadI don't know if you guys have heard or not because not many places are reporting this, but Michael Jackson died. I mean it's like no one even cares about him.<br /><br />Okay, really, he was great for pop back in the 80's and 90's, but recently he hasn't even done anything notable. I think this just goes to show the sad state of America where we care more about one person two weeks after his death than the state of our Nation.Brent Wonghttp://www.blogger.com/profile/14273804178870499098noreply@blogger.com0tag:blogger.com,1999:blog-1642851344329233583.post-3435114822847807152009-06-30T14:41:00.005-10:002010-11-29T10:57:57.762-10:00Updated the spiceworks helpdesk customization pluginJust a quick update with the source code. I added a field to the toolbar thanks to Paul_Maxim and now all of those fields are optional. Oh yeah, I separated the css out from the inline styling.<br /><br /><pre class="brush: js">// ==SPICEWORKS-PLUGIN==<br />// @name Help Desk Customizations Clone<br />// @description Adds minor enhancements to your Help Desk, including ticket status in the toolbar, colors for past due tickets and private messages, and information on devices in the Related To field.<br />// @version 0.6<br />// ==/SPICEWORKS-PLUGIN==<br /><br />plugin.configure({<br /> settingDefinitions: [<br /> {name:'past_due_color', label:'Past Due Highlight Color', type:'string', defaultValue:'#ffdede', example:'Default: #ffdede'},<br /> {name:'private_note_color', label:'Private Note Color', type:'string', defaultValue:'#cccccc', example:'Default: #cccccc'},<br /> {name:'tickets_open_display', label:'Display Open Tickets', type:'checkbox', defaultValue:true },<br /> {name:'tickets_due_display', label:'Display Past Due Tickets', type:'checkbox', defaultValue:true },<br /> {name:'tickets_unassigned_display', label:'Display Unassigned Tickets', type:'checkbox', defaultValue:true }<br /> ]<br />});<br /><br />function refreshToolbarTicketInfo(){<br /> // display ticket stats<br /> if (plugin.settings.tickets_open_display || plugin.settings.tickets_due_display || plugin.settings.ticket_unassigned_display){<br /> var displayString = '';<br /><br /> if (plugin.settings.tickets_open_display){<br /> displayString += '<span><strong>Open:</strong> ' + SPICEWORKS.data.Ticket.find('all', {filter:'open'}).length + '</span>';<br /> }<br /> if (plugin.settings.tickets_due_display){<br /> displayString += '<span><strong>Past Due:</strong> ' + SPICEWORKS.data.Ticket.find('all', {filter:'past_due'}).length + '</span>';<br /> }<br /> if (plugin.settings.tickets_unassigned_display){<br /> displayString += '<span><strong>Unassigned:</strong> ' + SPICEWORKS.data.Ticket.find( 'all', {filter:'unassigned'}).length + '</span>';<br /> }<br /><br /> var toolbarTicketInfo = $('main-toolbar').down('span.right span.toolbar_ticket_info');<br /><br /> if (toolbarTicketInfo){<br /> toolbarTicketInfo.remove();<br /> }<br /> <br /> $('main-toolbar').down('span.right').insert({top:'<span class="toolbar_ticket_info">' + displayString + '</span>'});<br /> }<br />}<br /><br />SPICEWORKS.app.helpdesk.ready(function(){<br /> // set styling<br /> SPICEWORKS.utils.addStyle("\<br />span.toolbar_ticket_info{margin-right:20px;padding:0 5px;border:1px solid #999;}\<br />span.toolbar_ticket_info span{margin-right:5px;}\<br />#related_to_summary{display:none;clear:both;border:1px solid #ccc;padding:10px;margin:5px 0;overflow:hidden;}\<br />#related_to_summary ul{margin:0;padding:0;text-align:left;}\<br />#related_to_summary p{float:right;}\<br /> ");<br /><br /> // mark past due ticket rows<br /> $('td.past_due').each(function(item){<br /> item.up().setStyle({backgroundColor: plugin.settings.past_due_color});<br /> });<br /><br /> refreshToolbarTicketInfo();<br /> <br />});<br /><br />SPICEWORKS.app.helpdesk.ticket.closed(function(){<br /> refreshToolbarTicketInfo();<br />});<br /><br />SPICEWORKS.app.helpdesk.ticket.ready(function(){<br /> // color private messages<br /> $('li.private').each(function(item){<br /> item.setStyle({backgroundColor: plugin.settings.private_note_color})<br /> });<br /><br /> // add device summary<br /> var deviceLink = $('related_to_property').down('.value a');<br /> if(deviceLink) {<br /> var deviceURL = deviceLink.readAttribute('href');<br /> var startIndex = deviceURL.indexOf('devices/');<br /> <br /> if(startIndex != -1) {<br /> var substring = deviceURL.substring(startIndex);<br /> var deviceID = substring.gsub(/[^\d]/, '');<br /> var device = SPICEWORKS.data.Device.find(deviceID);<br /> if(device) {<br /> var displayInfo = '<div id="related_to_summary"><ul>'<br /> var listStyle = '<li>'<br /> if(device.ip_address && !device.ip_address.empty()) {<br /> displayInfo += listStyle + '<strong>IP:</strong> ' + device.ip_address + '</li>';<br /> }<br /> if(device.mac_address && !device.mac_address.empty()) {<br /> displayInfo += listStyle + '<strong>MAC:</strong> ' + device.mac_address + '</li>';<br /> }<br /> if(device.manufacturer && !device.manufacturer.empty()) {<br /> displayInfo += listStyle + '<strong>Vendor:</strong> ' + device.manufacturer + '</li>'; <br /> }<br /> if(device.current_user && !device.current_user.empty()) {<br /> displayInfo += listStyle + '<strong>Last Login:</strong> ' + device.current_user + '</li>';<br /> }<br /> if(device.primary_owner_name && !device.primary_owner_name.empty()) {<br /> displayInfo += listStyle + '<strong>Owner:</strong> ' + device.primary_owner_name + '</li>';<br /> }<br /> if(device.asset_tag && !device.asset_tag.empty()) {<br /> displayInfo += listStyle + '<strong>Asset Tag:</strong> ' + device.asset_tag + '</li>';<br /> }<br /> if(device.operating_system && !device.operating_system.empty()) {<br /> displayInfo += listStyle + '<strong>OS:</strong> ' + device.operating_system + '</li>';<br /> }<br /> if(device.serial_number && !device.serial_number.empty()) {<br /> displayInfo += listStyle + '<strong>Serial No:</strong> ' + device.serial_number + '</li>';<br /> }<br /> displayInfo += '</ul><p><a href="#" onclick="new Effect.BlindUp(\'related_to_summary\', {duration:0.20}); return false;">hide</a></p></div>';<br /> $('related_to_section').insert({after: displayInfo});<br /> deviceLink.insert({after: '&nbsp;&nbsp;(<a href="#" onclick="new Effect.BlindDown(\'related_to_summary\', {duration:0.20}); return false;">info</a>)'})<br /> }<br /> }<br /> }<br />});<br /></pre>Brent Wonghttp://www.blogger.com/profile/14273804178870499098noreply@blogger.com0tag:blogger.com,1999:blog-1642851344329233583.post-9036910727974197412009-06-23T08:19:00.002-10:002009-06-23T08:23:41.137-10:00Cost and Time EstimationIbuildings had a great little post on <a href="http://www.ibuildings.nl/blog/archives/1557-Best-Practices-in-Estimating.html">best practices in estimating</a>. I think it is a good lesson for people who are just getting in to running their own business or as a reminder for people who are already. The main points laid out are:<br /><ul><li>Right size your estimating process to the project</li><li>Use qualified people</li><li>Constantly monitor your estimates and estimators</li><li>The estimate is what it is</li></ul>Brent Wonghttp://www.blogger.com/profile/14273804178870499098noreply@blogger.com0tag:blogger.com,1999:blog-1642851344329233583.post-62942685810953020572009-06-23T08:12:00.003-10:002009-06-23T08:19:36.425-10:00Follow up: An Open Letter to our Nation's LeadershipI hope this is okay to repost. I feel it is very important so I wanted to give everyone a chance to <a href="http://www.glennbeck.com/content/articles/article/198/26742/">read it</a>. This is the letter that started the <a href="http://www.thepetitionsite.com/8/an-open-letter-to-our-nations-leadership">online petition</a> that <a href="http://bdewong.blogspot.com/2009/06/open-letter-to-our-nation-leadership.html">I posted last week</a>.<br /><blockquote>I'm a home grown American citizen, 53, registered Democrat all my life. Before the last presidential election I registered as a Republican because I no longer felt the Democratic Party represents my views or works to pursue issues important to me. Now I no longer feel the Republican Party represents my views or works to pursue issues important to me. The fact is I no longer feel any political party or representative in Washington represents my views or works to pursue the issues important to me. There must be someone. Please tell me who you are. Please stand up and tell me that you are there and that you're willing to fight for our Constitution as it was written. Please stand up now. You might ask yourself what my views and issues are that I would horribly feel so disenfranchised by both major political parties. What kind of nut job am I? Will you please tell me? <p>Well, these are briefly my views and issues for which I seek representation: </p> <p>One, illegal immigration. I want you to stop coddling illegal immigrants and secure our borders. Close the underground tunnels. Stop the violence and the trafficking in drugs and people. No amnesty, not again. Been there, done that, no resolution. P.S., I'm not a racist. This isn't to be confused with legal immigration. </p><p>Two, the TARP bill, I want it repealed and I want no further funding supplied to it. We told you no, but you did it anyway. I want the remaining unfunded 95% repealed. Freeze, repeal. </p> <p>Three: Czars, I want the circumvention of our checks and balances stopped immediately. Fire the czars. No more czars. Government officials answer to the process, not to the president. Stop trampling on our Constitution and honor it. </p> <p>Four, cap and trade. The debate on global warming is not over. There is more to say. </p> <p>Five, universal healthcare. I will not be rushed into another expensive decision. Don't you dare try to pass this in the middle of the night and then go on break. Slow down! </p> <p>Six, growing government control. I want states rights and sovereignty fully restored. I want less government in my life, not more. Shrink it down. Mind your own business. You have enough to take care of with your real obligations. Why don't you start there. </p> <p>Seven, ACORN. I do not want ACORN and its affiliates in charge of our 2010 census. I want them investigated. I also do not want mandatory escrow fees contributed to them every time on every real estate deal that closes. Stop the funding to ACORN and its affiliates pending impartial audits and investigations. I do not trust them with taking the census over with our taxpayer money. I don't trust them with our taxpayer money. Face up to the allegations against them and get it resolved before taxpayers get any more involved with them. If it walks like a duck and talks like a duck, hello. Stop protecting your political buddies. You work for us, the people. Investigate. </p> <p>Eight, redistribution of wealth. No, no, no. I work for my money. It is mine. I have always worked for people with more money than I have because they gave me jobs. That is the only redistribution of wealth that I will support. I never got a job from a poor person. Why do you want me to hate my employers? Why ‑‑ what do you have against shareholders making a profit? </p> <p>Nine, charitable contributions. Although I never got a job from a poor person, I have helped many in need. Charity belongs in our local communities, where we know our needs best and can use our local talent and our local resources. Butt out, please. We want to do it ourselves. </p> <p>Ten, corporate bailouts. Knock it off. Sink or swim like the rest of us. If there are hard times ahead, we'll be better off just getting into it and letting the strong survive. Quick and painful. Have you ever ripped off a Band‑Aid? We will pull together. Great things happen in America under great hardship. Give us the chance to innovate. We cannot disappoint you more than you have disappointed us. </p> <p>Eleven, transparency and accountability. How about it? No, really, how about it? Let's have it. Let's say we give the buzzwords a rest and have some straight honest talk. Please try ‑‑ please stop manipulating and trying to appease me with clever wording. I am not the idiot you obviously take me for. Stop sneaking around and meeting in back rooms making deals with your friends. It will only be a prelude to your criminal investigation. Stop hiding things from me. </p> <p>Twelve, unprecedented quick spending. Stop it now. </p> <p>Take a breath. Listen to the people. Let's just slow down and get some input from some nonpoliticians on the subject. Stop making everything an emergency. Stop speed reading our bills into law. I am not an activist. I am not a community organizer. Nor am I a terrorist, a militant or a violent person. I am a parent and a grandparent. I work. I'm busy. I'm busy. I am busy, and I am tired. I thought we elected competent people to take care of the business of government so that we could work, raise our families, pay our bills, have a little recreation, complain about taxes, endure our hardships, pursue our personal goals, cut our lawn, wash our cars on the weekends and be responsible contributing members of society and teach our children to be the same all while living in the home of the free and land of the brave. </p> <p>I entrusted you with upholding the Constitution. I believed in the checks and balances to keep from getting far off course. What happened? You are very far off course. Do you really think I find humor in the hiring of a speed reader to unintelligently ramble all through a bill that you signed into law without knowing what it contained? I do not. It is a mockery of the responsibility I have entrusted to you. It is a slap in the face. I am not laughing at your arrogance. Why is it that I feel as if you would not trust me to make a single decision about my own life and how I would live it but you should expect that I should trust you with the debt that you have laid on all of us and our children. We did not want the TARP bill. We said no. We would repeal it if we could. I am sure that we still cannot. There is such urgency and recklessness in all of the recent spending.</p> <p>From my perspective, it seems that all of you have gone insane. I also know that I am far from alone in these feelings. Do you honestly feel that your current pursuits have merit to patriotic Americans? We want it to stop. We want to put the brakes on everything that is being rushed by us and forced upon us. We want our voice back. You have forced us to put our lives on hold to straighten out the mess that you are making. We will have to give up our vacations, our time spent with our children, any relaxation time we may have had and money we cannot afford to spend on you to bring our concerns to Washington. Our president often knows all the right buzzword is unsustainable. Well, no kidding. How many tens of thousands of dollars did the focus group cost to come up with that word? We don't want your overpriced words. Stop treating us like we're morons.</p> <p>We want all of you to stop focusing on your reelection and do the job we want done, not the job you want done or the job your party wants done. You work for us and at this rate I guarantee you not for long because we are coming. We will be heard and we will be represented. You think we're so busy with our lives that we will never come for you? We are the formerly silent majority, all of us who quietly work , pay taxes, obey the law, vote, save money, keep our noses to the grindstone and we are now looking up at you. You have awakened us, the patriotic spirit so strong and so powerful that it had been sleeping too long. You have pushed us too far. Our numbers are great. They may surprise you. For every one of us who will be there, there will be hundreds more that could not come. Unlike you, we have their trust. We will represent them honestly, rest assured. They will be at the polls on voting day to usher you out of office. We have cancelled vacations. We will use our last few dollars saved. We will find the representation among us and a grassroots campaign will flourish. We didn't ask for this fight. But the gloves are coming off. We do not come in violence, but we are angry. You will represent us or you will be replaced with someone who will. There are candidates among us when hewill rise like a Phoenix from the ashes that you have made of our constitution. </p> <p>Democrat, Republican, independent, libertarian. Understand this. We don't care. Political parties are meaningless to us. Patriotic Americans are willing to do right by us and our Constitution and that is all that matters to us now. We are going to fire all of you who abuse power and seek more. It is not your power. It is ours and we want it back. We entrusted you with it and you abused it. You are dishonorable. You are dishonest. As Americans we are ashamed of you. You have brought shame to us. If you are not representing the wants and needs of your constituency loudly and consistently, in spite of the objections of your party, you will be fired. Did you hear? We no longer care about your political parties. You need to be loyal to us, not to them. Because we will get you fired and they will not save you. If you do or can represent me, my issues, my views, please stand up. Make your identity known. You need to make some noise about it. Speak up. I need to know who you are. If you do not speak up, you will be herded out with the rest of the sheep and we will replace the whole damn congress if need be one by one. We are coming. Are we coming for you? Who do you represent? What do you represent? Listen. Because we are coming. We the people are coming. </p></blockquote>Brent Wonghttp://www.blogger.com/profile/14273804178870499098noreply@blogger.com0