Guilty until proven innocent

Well, today I found why downloads of Overseer have significantly dropped off lately. The problem, is IE and Google Chrome have been giving nasty ‘warnings’ about the clean Overseer setup exe, like these:

 

 

Wow– that sure discourages a person from downloading! No wonder my #’s have dropped… What did I do to deserve such slanderous ‘warning’ messages?  I’m not popular. I’m not iTunes. Overseer hasn’t been downloaded enough. That’s it. This is a “not popular” warning. Only those that are popular get this removed, and only those that get enough downloads get popular…How is someone supposed to get enough ‘reputation’ with IE ‘SmartScreen’ or whatever Google is using to actually remove this slanderous business-killing warning message?!?  The internet is supposed to be the great equalizer– hence net neutrality and all that, but this ‘technology’ clearly favors big business over the little guy.

My only solution for now was to provide some verbiage in big green text on the download page trying to calm the fears of my potential customers– hopefully that helps. I’m also getting a code signing certificate which might help– but people are saying the red warning dialog simply changes to a yellow warning dialog with a signed executable…

Even internal projects at Microsoft have been bitten by this ill-conceived technology.

It sure seems to be a bad time to be a small independent software vendor(ISV)…

 

UPDATE: I received my code signing certificate($365 for 5 years) and changed my build process to sign the installer exe and the exe’s inside. I just tested, and Chrome appears to have removed their warning when downloading Overseer. Unfortunately, IE still warns people when downloading or trying to run the installer– even though it’s clearly properly signed. Maybe MS will eventually change their mind, and realize I’m not such a bad guy after all…

 

Managing multiple remote desktop connections

In my day-to-day work, I typically connect to over a dozen servers via Remote Desktop Protocol(RDP). While I don’t connect to every one on a daily basis, there are days that I connect to nearly a dozen, and there isn’t a day that goes by that I don’t connect to at least 2-3. Up until now, I’ve been using Windows 7 jump lists. This is OK, but I ran into a limitation, in that Win7 limits the ‘most recently used’ items– so all my servers don’t always show up.

Well, I recently found a solution. The “RDCMan”, or “Remote Desktop Connection Manager” tool, directly from Microsoft. This is a free tool that lets you manage multiple connections, configure groups, sub groups, etc. You can also define settings at the group or server level, which makes things very quick to setup(i.e. many of my servers use the same credentials, so I can set the credentials at the group level, instead of the server level).

The GUI is a little dated, but still fully functional. I can connect to the desktops within the RDCMan frame, or I can ‘undock’, and have the RDP connection free-floating– this is particularly good for a specific RDP connection that I leave open all day, and need quick and easy access to.

Here’s a screenshot, and an associated link to more information:

http://blogs.technet.com/b/exchange/archive/2010/06/11/3410093.aspx

Download link:

http://www.microsoft.com/en-us/download/details.aspx?id=21101

 

How to always run applications as administrator in Windows 8

I recently got a new laptop with Windows 8. I’ve been trying to not hate the removal of my start menu too much. One of the changes they also made, is that User-Account-Control can’t really be disabled without a registry change– and if you make that registry change, most of the Metro/Modern UI apps will no longer work! Having certain applications not run as administrator can really be a problem, however… Visual Studio needs admin access to create IIS web applications, for instance. Additionally, shelling out to cmd.exe for doing a multitude of different things will be very frustrating when you don’t have those admin privileges that are rightfully required to do administrative things…

Unfortunately, there’s no easy GUI way to tell Windows 8 to always launch applications as an administrator. You can right click on a shortcut and select ‘run as admin’ each time– or even define a shortcut and set ‘run as administrator’ on the compatibility tab– but this doesn’t work if you use start->run->’cmd.exe’, such as I do… It also doesn’t work if you’ve pinned solutions to your task bar, such as I do for Visual Studio.

Thankfully, after some searching, I found a solution. You can have any executable on your computer run as admin(assuming you have permission to do so), by adding entries to this registry key:

HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\

Simply add a new string value, paste the full path to the executable(such as c:\windows\system32\cmd.exe), and then edit the value to say ‘RUNASADMIN’. Next time you start that executable– through a shortcut, by going to start->run, through entries pinned to your taskbar, or double-clicking on an associated file in explorer, Windows 8 will actually run it as an admin, as you require.

Authoritive domain root list

I recently wanted to write some code that analyzed URLs to determine if the source was the same– eliminating sub-domains. For something simple like “sensiblesoftware.com” or “www.sensiblesoftware.com”, this is easy. However, what about othes countries? Something like “www.company.co.uk” or “company.co.uk”? It was clear I needed a list. Initially, I went and found the TLD/Top Level Domain list at the ICANN. It was clear by just looking at this, however, that it didn’t include individual country’s second level domains, such as “.co.uk”. This makes it difficult to use for getting the effective organization domain(which would be the ‘company’ in company.com or company.co.uk).

After looking, I eventually found a list of these, but it wasn’t formatted very nicely for use in programming, so I formatted it and I’m providing the list here– you can easily copy/paste this list into a text file for programmatic use.

.af
.com.af
.edu.af
.gov.af
.net.af
.org.af
.ax
.gov.al
.edu.al
.org.al
.com.al
.net.al
.dz
.com.dz
.org.dz
.net.dz
.gov.dz
.edu.dz
.asso.dz
.pol.dz
.art.dz
.as
.ad
.nom.ad
.ed.ao
.gv.ao
.og.ao
.co.ao
.pb.ao
.it.ao
.ai
.com.ai
.net.ai
.off.ai
.org.ai
.aq
.ag
.com.ag
.edu.ag
.co.ag
.net.ag
.nom.ag
.org.ag
.com.ar
.edu.ar
.gob.ar
.gov.ar
.int.ar
.mil.ar
.net.ar
.org.ar
.tur.ar
.am
.aw
.com.aw
.ac
.com.ac
.net.ac
.gov.ac
.org.ac
.mil.ac
.com.au
.net.au
.org.au
.edu.au
.gov.au
.csiro.au
.asn.au
.id.au
.act.au
.nsw.au
.nt.au
.qld.au
.sa.au
.tas.au
.vic.au
.wa.au
.archie.au
.conf.au
.gw.au
.info.au
.otc.au
.oz.au
.telememo.au
.cx
.hm
.nf
.at
.gv.at
.ac.at
.co.at
.or.at
.az
.com.az
.net.az
.int.az
.gov.az
.org.az
.edu.az
.info.az
.pp.az
.mil.az
.name.az
.pro.az
.biz.az
.bs
.com.bs
.net.bs
.org.bs
.edu.bs
.gov.bs
.bh
.com.bh
.info.bh
.cc.bh
.edu.bh
.biz.bh
.net.bh
.org.bh
.gov.bh
.com.bd
.edu.bd
.ac.bd
.net.bd
.gov.bd
.org.bd
.mil.bd
.bb
.com.bb
.net.bb
.org.bb
.gov.bb
.info.bb
.co.bb
.store.bb
.tv.bb
.biz.bb
.by
.be
.bz
.com.bz
.edu.bz
.gov.bz
.net.bz
.org.bz
.bj
.gouv.bj
.mil.bj
.edu.bj
.gov.bj
.asso.bj
.barreau.bj
.com.bj
.bm
.bt
.bo
.com.bo
.net.bo
.org.bo
.tv.bo
.mil.bo
.int.bo
.gob.bo
.gov.bo
.edu.bo
.ba
.org.ba
.net.ba
.edu.ba
.gov.ba
.mil.ba
.unsa.ba
.untz.ba
.unmo.ba
.unbi.ba
.unze.ba
.co.ba
.com.ba
.rs.ba
.bw
.co.bw
.org.bw
.adm.br
.adv.br
.agr.br
.am.br
.arq.br
.art.br
.ato.br
.bio.br
.blog.br
.bmd.br
.cim.br
.cng.br
.cnt.br
.com.br
.coop.br
.ecn.br
.edu.br
.eng.br
.esp.br
.etc.br
.eti.br
.far.br
.flog.br
.fm.br
.fnd.br
.fot.br
.fst.br
.g12.br
.ggf.br
.gov.br
.imb.br
.ind.br
.inf.br
.jor.br
.jus.br
.lel.br
.mat.br
.med.br
.mil.br
.mus.br
.net.br
.nom.br
.not.br
.ntr.br
.odo.br
.org.br
.ppg.br
.pro.br
.psc.br
.psi.br
.qsl.br
.rec.br
.slg.br
.srv.br
.tmp.br
.trd.br
.tur.br
.tv.br
.vet.br
.vlog.br
.wiki.br
.zlg.br
.io
.vg
.com.bn
.edu.bn
.org.bn
.net.bn
.bg
.bf
.net.mm
.com.mm
.edu.mm
.org.mm
.gov.mm
.bi
.per.kh
.com.kh
.edu.kh
.gov.kh
.mil.kh
.net.kh
.org.kh
.cm
.gov.cm
.ca
.ab.ca
.bc.ca
.mb.ca
.nb.ca
.nf.ca
.nl.ca
.ns.ca
.nt.ca
.nu.ca
.on.ca
.pe.ca
.qc.ca
.sk.ca
.yk.ca
.cv
.ky
.com.ky
.org.ky
.net.ky
.edu.ky
.gov.ky
.cf
.td
.cl
.gov.cl
.gob.cl
.cn
.ac.cn
.com.cn
.edu.cn
.gov.cn
.net.cn
.org.cn
.ah.cn
.bj.cn
.cq.cn
.fj.cn
.gd.cn
.gs.cn
.gz.cn
.gx.cn
.ha.cn
.hb.cn
.he.cn
.hi.cn
.hl.cn
.hn.cn
.jl.cn
.js.cn
.jx.cn
.ln.cn
.nm.cn
.nx.cn
.qh.cn
.sc.cn
.sd.cn
.sh.cn
.sn.cn
.sx.cn
.tj.cn
.tw.cn
.xj.cn
.xz.cn
.yn.cn
.zj.cn
.cx
.cc
.com.co
.org.co
.edu.co
.gov.co
.net.co
.mil.co
.nom.co
.km
.com.km
.coop.km
.asso.km
.nom.km
.presse.km
.tm.km
.medecin.km
.notaires.km
.pharmaciens.km
.veterinaire.km
.edu.km
.gouv.km
.mil.km
.cd
.cg
.co.ck
.org.ck
.edu.ck
.gov.ck
.net.ck
.gen.ck
.biz.ck
.info.ck
.cr
.ac.cr
.co.cr
.ed.cr
.fi.cr
.go.cr
.or.cr
.sa.cr
.ci
.hr
.cu
.ac.cy
.net.cy
.gov.cy
.org.cy
.pro.cy
.name.cy
.ekloges.cy
.tm.cy
.ltd.cy
.biz.cy
.press.cy
.parliament.cy
.com.cy
.cz
.dk
.dj
.dm
.com.dm
.net.dm
.org.dm
.edu.do
.gob.do
.gov.do
.com.do
.sld.do
.org.do
.net.do
.web.do
.mil.do
.art.do
.tl
.com.tl
.gov.tl
.ec
.com.ec
.info.ec
.net.ec
.fin.ec
.med.ec
.pro.ec
.org.ec
.edu.ec
.gov.ec
.mil.ec
.com.eg
.edu.eg
.eun.eg
.gov.eg
.mil.eg
.name.eg
.net.eg
.org.eg
.sci.eg
.edu.sv
.gob.sv
.com.sv
.org.sv
.red.sv
.gq
.com.er
.edu.er
.gov.er
.mil.er
.net.er
.org.er
.ind.er
.rochest.er
.w.er
.ee
.com.et
.gov.et
.org.et
.edu.et
.net.et
.biz.et
.name.et
.info.et
.eu
.co.fk
.org.fk
.gov.fk
.ac.fk
.nom.fk
.net.fk
.fo
.fm
.ac.fj
.biz.fj
.com.fj
.info.fj
.mil.fj
.name.fj
.net.fj
.org.fj
.pro.fj
.fi
.fr
.tm.fr
.asso.fr
.nom.fr
.prd.fr
.presse.fr
.com.fr
.gouv.fr
.gf
.pf
.com.pf
.tf
.ga
.gm
.ge
.de
.com.gh
.edu.gh
.gov.gh
.org.gh
.mil.gh
.gi
.gr
.com.gr
.edu.gr
.net.gr
.org.gr
.gov.gr
.gl
.gd
.gp
.com.gp
.net.gp
.mobi.gp
.edu.gp
.asso.gp
.org.gp
.com.gu
.com.gt
.edu.gt
.net.gt
.gob.gt
.org.gt
.mil.gt
.ind.gt
.gg
.ac.gg
.co.gg
.gov.gg
.net.gg
.sch.gg
.org.gg
.com.gn
.ac.gn
.gov.gn
.org.gn
.net.gn
.gw
.gy
.co.gy
.com.gy
.net.gy
.ht
.hm
.hn
.uk
.com.hk
.edu.hk
.gov.hk
.idv.hk
.net.hk
.org.hk
.hu
.2000.hu
.agrar.hu
.bolt.hu
.casino.hu
.city.hu
.co.hu
.erotica.hu
.erotika.hu
.film.hu
.forum.hu
.games.hu
.hotel.hu
.info.hu
.ingatlan.hu
.jogasz.hu
.konyvelo.hu
.lakas.hu
.media.hu
.news.hu
.org.hu
.priv.hu
.reklam.hu
.sex.hu
.shop.hu
.sport.hu
.suli.hu
.szex.hu
.tm.hu
.tozsde.hu
.utazas.hu
.video.hu
.is
.in
.co.in
.firm.in
.net.in
.org.in
.gen.in
.ind.in
.ac.in
.edu.in
.res.in
.gov.in
.mil.in
.nic.in
.ac.id
.co.id
.net.id
.or.id
.web.id
.sch.id
.mil.id
.go.id
.ir
.ac.ir
.co.ir
.gov.ir
.id.ir
.net.ir
.org.ir
.sch.ir
.iq
.gov.iq
.edu.iq
.com.iq
.mil.iq
.org.iq
.ie
.ac.il
.co.il
.org.il
.net.il
.k12.il
.gov.il
.muni.il
.idf.il
.im
.plc.co.im
.net.im
.co.im
.org.im
.ac.im
.ltd.co.im
.com.im
.gov.im
.it
.com.jm
.net.jm
.org.jm
.edu.jm
.gov.jm
.mil.jm
.jp
.ac.jp
.ad.jp
.co.jp
.ed.jp
.go.jp
.gr.jp
.lg.jp
.ne.jp
.or.jp
.je
.co.je
.org.je
.net.je
.sch.je
.gov.je
.jo
.com.jo
.net.jo
.gov.jo
.edu.jo
.org.jo
.mil.jo
.name.jo
.sch.jo
.org.kz
.edu.kz
.net.kz
.gov.kz
.mil.kz
.com.kz
.co.ke
.or.ke
.ne.ke
.go.ke
.ac.ke
.sc.ke
.com.ki
.biz.ki
.net.ki
.info.ki
.org.ki
.gov.ki
.edu.ki
.mob.ki
.tel.ki
.phone.ki
.kp
.kr
.co.kr
.ne.kr
.or.kr
.re.kr
.pe.kr
.go.kr
.mil.kr
.ac.kr
.hs.kr
.ms.kr
.es.kr
.sc.kr
.kg.kr
.seoul.kr
.busan.kr
.daegu.kr
.incheon.kr
.gwangju.kr
.daejeon.kr
.ulsan.kr
.gyeonggi.kr
.gangwon.kr
.chungbuk.kr
.chungnam.kr
.jeonbuk.kr
.jeonnam.kr
.gyeongbuk.kr
.gyeongnam.kr
.jeju.kr
.edu.kw
.com.kw
.net.kw
.org.kw
.gov.kw
.kg
.gov.kg
.mil.kg
.la
.lv
.com.lv
.edu.lv
.gov.lv
.org.lv
.mil.lv
.id.lv
.net.lv
.asn.lv
.conf.lv
.com.lb
.edu.lb
.gov.lb
.net.lb
.org.lb
.ls
.co.ls
.org.ls
.com.lr
.edu.lr
.gov.lr
.org.lr
.net.lr
.ly
.com.ly
.net.ly
.gov.ly
.plc.ly
.edu.ly
.sch.ly
.med.ly
.org.ly
.id.ly
.li
.lt
.lu
.mo
.com.mo
.edu.mo
.gov.mo
.net.mo
.org.mo
.mk
.com.mk
.org.mk
.net.mk
.edu.mk
.gov.mk
.inf.mk
.name.mk
.mg
.org.mg
.nom.mg
.gov.mg
.prd.mg
.tm.mg
.edu.mg
.mil.mg
.com.mg
.ac.mw
.co.mw
.com.mw
.coop.mw
.edu.mw
.gov.mw
.int.mw
.museum.mw
.net.mw
.org.mw
.my
.com.my
.net.my
.org.my
.gov.my
.edu.my
.sch.my
.mil.my
.name.my
.aero.mv
.biz.mv
.com.mv
.coop.mv
.edu.mv
.gov.mv
.info.mv
.int.mv
.mil.mv
.museum.mv
.name.mv
.net.mv
.org.mv
.pro.mv
.com.ml
.net.ml
.org.ml
.edu.ml
.gov.ml
.presse.ml
.com.mt
.org.mt
.net.mt
.edu.mt
.gov.mt
.mq
.mh
.mr
.gov.mr
.mu
.com.mu
.net.mu
.org.mu
.gov.mu
.ac.mu
.co.mu
.or.mu
.com.mx
.net.mx
.org.mx
.edu.mx
.gob.mx
.md
.mc
.tm.mc
.asso.mc
.mn
.gov.mn
.edu.mn
.org.mn
.me
.co.me
.net.me
.org.me
.edu.me
.ac.me
.gov.me
.its.me
.priv.me
.ms
.ma
.net.ma
.ac.ma
.org.ma
.gov.ma
.press.ma
.co.ma
.co.mz
.org.mz
.gov.mz
.edu.mz
.na
.com.na
.co.na
.org.na
.edu.na
.alt.na
.in.na
.info.na
.mobi.na
.ws.na
.nr
.edu.nr
.gov.nr
.biz.nr
.info.nr
.net.nr
.org.nr
.com.nr
.com.np
.org.np
.edu.np
.net.np
.gov.np
.mil.np
.nl
.an
.nc
.ac.nz
.co.nz
.geek.nz
.gen.nz
.maori.nz
.net.nz
.org.nz
.school.nz
.cri.nz
.govt.nz
.iwi.nz
.parliament.nz
.mil.nz
.ni
.gob.ni
.co.ni
.ac.ni
.org.ni
.nom.ni
.net.ni
.mil.ni
.ne
.com.ng
.org.ng
.gov.ng
.edu.ng
.net.ng
.nu
.nf
.com.nf
.net.nf
.per.nf
.rec.nf
.web.nf
.arts.nf
.firm.nf
.info.nf
.other.nf
.store.nf
.mp
.no
.com.om
.co.om
.edu.om
.ac.om
.sch.om
.gov.om
.net.om
.org.om
.mil.om
.museum.om
.biz.om
.pro.om
.med.om
.pk
.net.pk
.edu.pk
.org.pk
.fam.pk
.biz.pk
.web.pk
.gov.pk
.gob.pk
.gok.pk
.gon.pk
.gop.pk
.gos.pk
.com.pw
.net.pw
.org.pw
.edu.pw
.gov.pw
.belau.pw
.ps
.com.ps
.biz.ps
.net.ps
.edu.ps
.gov.ps
.sch.ps
.mun.ps
.net.pa
.com.pa
.ac.pa
.sld.pa
.gob.pa
.edu.pa
.org.pa
.abo.pa
.ing.pa
.med.pa
.nom.pa
.com.pg
.net.pg
.ac.pg
.gov.pg
.mil.pg
.org.pg
.org.py
.edu.py
.mil.py
.gov.py
.net.py
.com.py
.una.py
.pe
.edu.pe
.gob.pe
.nom.pe
.mil.pe
.sld.pe
.org.pe
.com.pe
.net.pe
.ph
.com.ph
.net.ph
.org.ph
.mil.ph
.ngo.ph
.i.ph
.gov.ph
.edu.ph
.pl
.com.pl
.org.pl
.gov.pl
.pl
.com.pl
.biz.pl
.net.pl
.art.pl
.edu.pl
.org.pl
.ngo.pl
.gov.pl
.info.pl
.mil.pl
.waw.pl
.warszawa.pl
.wroc.pl
.wroclaw.pl
.krakow.pl
.katowice.pl
.poznan.pl
.lodz.pl
.gda.pl
.gdansk.pl
.slupsk.pl
.radom.pl
.szczecin.pl
.lublin.pl
.bialystok.pl
.olsztyn.pl
.torun.pl
.gorzow.pl
.zgora.pl
.pt
.com.pt
.edu.pt
.gov.pt
.int.pt
.net.pt
.nome.pt
.org.pt
.publ.pt
.pr
.biz.pr
.com.pr
.edu.pr
.gov.pr
.info.pr
.isla.pr
.name.pr
.net.pr
.org.pr
.pro.pr
.est.pr
.prof.pr
.ac.pr
.com.qa
.org.qa
.edu.qa
.gov.qa
.net.qa
.ro
.arts.ro
.com.ro
.firm.ro
.info.ro
.nom.ro
.nt.ro
.org.ro
.rec.ro
.store.ro
.tm.ro
.www.ro
.re
.asso.re
.nom.re
.com.re
.ru
.com.ru
.net.ru
.org.ru
.pp.ru
.rw
.gov.rw
.net
.edu
.ac
.com
.co
.int
.mil
.aero
.asia
.biz
.cat
.coop
.info
.jobs
.mobi
.museum
.name
.org
.pro
.tel
.travel
.xxx
.gouv
.sh
.co.sh
.com.sh
.org.sh
.gov.sh
.edu.sh
.net.sh
.nom.sh
.kn
.org.kn
.net.kn
.gov.kn
.edu.kn
.lc
.com.lc
.org.lc
.net.lc
.co.lc
.l.lc
.p.lc
.vc
.com.vc
.net.vc
.org.vc
.ws
.com.ws
.net.ws
.org.ws
.gov.ws
.edu.ws
.sm
.st
.gov.st
.saotome.st
.principe.st
.consulado.st
.embaixada.st
.org.st
.edu.st
.net.st
.com.st
.store.st
.mil.st
.co.st
.com.sa
.edu.sa
.sch.sa
.med.sa
.gov.sa
.net.sa
.org.sa
.pub.sa
.sn
.rs
.co.rs
.org.rs
.edu.rs
.ac.rs
.gov.rs
.in.rs
.sc
.com.sc
.net.sc
.edu.sc
.gov.sc
.org.sc
.sl
.com.sl
.net.sl
.org.sl
.edu.sl
.gov.sl
.sg
.com.sg
.net.sg
.org.sg
.gov.sg
.edu.sg
.per.sg
.idn.sg
.sk
.si
.com.sb
.net.sb
.edu.sb
.org.sb
.gov.sb
.ac.za
.city.za
.co.za
.edu.za
.gov.za
.law.za
.mil.za
.nom.za
.org.za
.school.za
.ecape.school.za
.fs.school.za
.gp.school.za
.kzn.school.za
.mpm.school.za
.ncape.school.za
.lp.school.za
.nw.school.za
.wcape.school.za
.alt.za
.net.za
.ngo.za
.tm.za
.web.za
.agric.za
.cybernet.za
.grondar.za
.iaccess.za
.inca.za
.nis.za
.olivetti.za
.pix.za
.gs
.su
.es
.com.es
.nom.es
.org.es
.gob.es
.edu.es
.com.lk
.org.lk
.edu.lk
.ngo.lk
.soc.lk
.web.lk
.ltd.lk
.assn.lk
.grp.lk
.hotel.lk
.gov.lk
.sch.lk
.net.lk
.int.lk
.sd
.com.sd
.net.sd
.org.sd
.edu.sd
.med.sd
.tv.sd
.gov.sd
.info.sd
.sr
.sz
.co.sz
.ac.sz
.org.sz
.se
.a.se
.b.se
.ac.se
.bd.se
.c.se
.d.se
.e.se
.f.se
.g.se
.h.se
.i.se
.k.se
.l.se
.m.se
.n.se
.o.se
.p.se
.r.se
.s.se
.t.se
.u.se
.w.se
.x.se
.y.se
.z.se
.org.se
.pp.se
.tm.se
.parti.se
.press.se
.ch
.sy
.edu.sy
.gov.sy
.net.sy
.mil.sy
.com.sy
.org.sy
.news.sy
.tw
.edu.tw
.gov.tw
.mil.tw
.com.tw
.net.tw
.org.tw
.idv.tw
.game.tw
.ebiz.tw
.club.tw
.tj
.ac.tj
.aero.tj
.biz.tj
.co.tj
.com.tj
.coop.tj
.dyn.tj
.edu.tj
.go.tj
.gov.tj
.info.tj
.int.tj
.mil.tj
.museum.tj
.my.tj
.name.tj
.net.tj
.org.tj
.per.tj
.pro.tj
.web.tj
.co.tz
.ac.tz
.go.tz
.or.tz
.ne.tz
.ac.th
.co.th
.in.th
.go.th
.mi.th
.or.th
.net.th
.tg
.tk
.to
.tt
.co.tt
.com.tt
.org.tt
.net.tt
.biz.tt
.info.tt
.pro.tt
.name.tt
.edu.tt
.gov.tt
.tn
.com.tn
.ens.tn
.fin.tn
.gov.tn
.ind.tn
.intl.tn
.nat.tn
.net.tn
.org.tn
.info.tn
.perso.tn
.tourism.tn
.edunet.tn
.rnrt.tn
.rns.tn
.rnu.tn
.mincom.tn
.agrinet.tn
.defense.tn
.com.tr
.gen.tr
.org.tr
.biz.tr
.info.tr
.av.tr
.dr.tr
.pol.tr
.bel.tr
.mil.tr
.tsk.tr
.bbs.tr
.k12.tr
.edu.tr
.name.tr
.net.tr
.gov.tr
.web.tr
.tel.tr
.tv.tr
.tm
.tc
.tv
.ug
.co.ug
.ac.ug
.sc.ug
.go.ug
.ne.ug
.or.ug
.ua
.com.ua
.gov.ua
.net.ua
.edu.ua
.org.ua
.in.ua
.ae
.co.ae
.net.ae
.gov.ae
.ac.ae
.sch.ae
.org.ae
.mil.ae
.pro.ae
.name.ae
.ac.uk
.co.uk
.gov.uk
.ltd.uk
.me.uk
.mod.uk
.net.uk
.nic.uk
.nhs.uk
.org.uk
.plc.uk
.police.uk
.sch.uk
.ak.us
.al.us
.ar.us
.az.us
.ca.us
.co.us
.ct.us
.de.us
.fl.us
.ga.us
.hi.us
.ia.us
.id.us
.il.us
.in.us
.ks.us
.ky.us
.la.us
.ma.us
.md.us
.me.us
.mi.us
.mn.us
.mo.us
.ms.us
.mt.us
.nc.us
.nd.us
.ne.us
.nh.us
.nj.us
.nm.us
.nv.us
.ny.us
.oh.us
.ok.us
.or.us
.pa.us
.ri.us
.sc.us
.sd.us
.tn.us
.tx.us
.ut.us
.va.us
.vt.us
.wa.us
.wi.us
.wv.us
.wy.us
.dc.us
.as.us
.gu.us
.mp.us
.pr.us
.vi.us
.dni.us
.fed.us
.isa.us
.kids.us
.nsn.us
.com.uy
.edu.uy
.gub.uy
.net.uy
.mil.uy
.org.uy
.vi
.co.vi
.com.vi
.uz
.co.uz
.com.uz
.vu
.va
.com.ve
.edu.ve
.gob.ve
.mil.ve
.net.ve
.org.ve
.info.ve
.co.ve
.web.ve
.vn
.com.vn
.biz.vn
.edu.vn
.gov.vn
.net.vn
.org.vn
.int.vn
.ac.vn
.pro.vn
.info.vn
.health.vn
.name.vn
.wf
.com.ye
.co.ye
.ltd.ye
.me.ye
.net.ye
.org.ye
.plc.ye
.gov.ye
.ac.zm
.co.zm
.com.zm
.org.zm
.co.zw

If this list is out of date in any way, please let me know and I’ll udpate it. Thanks.

How to get word-of-mouth advertising

Not too long ago, I read an article discussing word-of-mouth advertising. I can’t remember where I read this article, but the basic idea, was that there is only one way to truly drive word-of-mouth advertising. Since then, I’ve been paying attention to myself– when do **I** spread the word about other people’s products and services? In that time, I’ve determined there’s not one, but two primary ways to drive word-of-mouth advertising.

Value

In the article I read, the author asserted that the only way to drive word-of-mouth advertising for your product or service, was to provide exceptional value– more value than what a consumer would typically expect in such a product or service. This absolutely is true– I find myself spreading the word about products or services that I’m incredibly impressed by. I feel that if I don’t tell my friends and colleagues about what I’ve found, I’m actually doing them a disservice… This is definitely the best way to drive word-of-mouth, and overall is the best way for anyone run a business, period– providing the best value possible to your customers needs to be the primary focus of all actions and decisions at your company.

 

Cheating Motivation

While people will naturally only tell their friends and colleagues about products that they truly believe provide exceptional value, there is a way to ‘cheat’. And that way, is to motivate. You can motivate your customers to tell their friends and colleagues about your service/product– even if it’s mediocre… You can provide your customers with direct monetary commission, guaranteed rewards, a chance to win something big(such as a drawing for a large reward), or even higher levels of your own service(such as Dropbox offering extra space for each referral). When you have little or no control over the value of the product or service you sell, this is often your only option– beyond the obvious benefits of ‘value add’ services, such as great customer support…  The key thing to remember with motivating customers to tell others about your product/service, is that their relationship with their friends/colleagues is probably more important to them than their relationship with you– so if you disappoint them in any way(bad customer service, bad product, etc.), they won’t tell others about you, regardless of what motivation you give them… Likewise, if you don’t treat your customer’s referrals with great care, your customer will hear about it– and be less likely to refer you in the future.

 

 

Windows 7 not saving RDP credentials when connecting to servers

In my line of work, I connect to many servers daily. I have these pinned to the Windows 7 taskbar, enabling me to easily connect to a server by simply right clicking on the taskbar icon and selecting the server. One thing that has annoyed me with Windows 7, is that when connecting to a server, I am always prompted for credentials– even if I’ve selected the option to save the credentials.

Well, I finally looked into it, and found a way to fix this. I’m sure Microsoft would claim there’s a “security” reason that it’s not enabled by default– but IMO, the checkbox to save credentials shouldn’t be there if it’s not configured to work…

To enable Windows 7 to save RDP credentials when connecting to Windows 2008 R2 servers, you must complete these steps on your client computer:

  1. Start->Run->gpedit.msc
  2. Navigate to Local Computer Policy -> Computer Configuration -> Administrative Templates -> System -> Credentials Delegation
  3. On the right, double click ‘Allow Delegating Default Credentials with NTLM-only Server Authentication’. Set the setting to ‘ Enabled’, click ‘Show’, and enter ‘*’ for the Value. Click ‘OK’ when done.
  4. Do the same with ‘Allow Delegating saved Credential with NTLM-only Server Authentication’

Now, the Remote Desktop client will remember your credentials– including ones you’ve previously saved. This may seem like a minor thing, but shaving seconds here and there will turn into hours saved later– plus any frustration/annoyance/distraction from fat-fingering passwords when connecting.

Resolving “Network path is not found” errors

Multiple customers of mine have had issues with the error message “Network path is not found”. Windows can throw this error message for a number of reasons.  This often becomes a problem when you’re trying to remotely monitor event logs, services, disk space, etc. using network monitoring software such as Overseer Network Monitor.

If you’re having this issue, try these things:

  • Make sure both Windows PCs(your computer and the remote computer) are running on the same network/LAN.
  • Disable the Windows firewall. If this works, you know it’s the firewall blocking traffic, and you can find what rule to add to the firewall to make things work.
  • Disable UAC!. Note that you may have to disable remote UAC in addition to the GUI disabling of user account control
  • Check the clocks on both computers. If the times are not within 15 minutes of each other, this problem may occur. Be sure to check the date and the time, as it’s easy to miss a different year when looking at just the time or day.
  • Check the status of these services and make sure they’re running on both ends:
    • Remote Registry Service
    • Server
    • Workstation
    • Computer Browser
    • Remote Procedure Call
    • TCP/IP NetBIOS Helper Service
  • Check your network card(s) properties, and check these options:
    • Client for Microsoft Networks
    • File and Printer Sharing for Microsoft Networks
    • Also make sure “Enable NetBIOS over TCP/IP” is enabled
    • Make sure “802.1x” authentication is disabled(potentially buried under ‘configure’ tab for network adapter
  • If using local accounts, be sure you’re referring to them as MACHINE\username, and **not** .\username. If you use .\username, you will get “network path was not found”, which is a very unhelpful in resolving this problem.

 

EventLogSession/EventLogReader error remotely accessing Windows XP/W2K3 machines

Sometimes, when searching Google it takes all of 30 seconds to find an answer to a question. Other times, it can take minutes, or even hours. I’m writing this blog post, because I was just researching an issue that took me hours to figure out– and in the end, it was so simple, yet disappointing at the same time…

For the new version of Overseer, the network monitoring software I write, I was adding support for extended event logs– these are the “Applications and Services Logs” event logs below the regular ones in W2K8’s event viewer. I found I had to use the new EventLogSession/EventLogReader API. I found it required .NET 3.5, so I upgraded my software to require .NET 3.5(it was v2 compatible up to this point).

I got things working, and I was able to monitor event logs(new and old style) using the code remotely accessing Windows 2008 and Windows 7 computers. I got an error when accessing Windows XP machines(and I’m sure W2K3 machines, but I didn’t have any to test with at the time). The error was “UnauthorizedAccessException – Attempted to perform an unauthorized operation.”  To most, including myself, this seems like a permissions issue– so I looked into all sorts of potential impersonation problems, etc. I scoured the web looking for anyone even having the same problem, but didn’t find it.

Eventually, I found a reference buried in some forum reply, that one of the API calls that the new EventLogSession/EventLogReader calls is Vista/W2K8+ only. That’s just great– the whole API is now Vista/W2K8+ only… Why Microsoft wouldn’t add a compatibility layer for Windows XP and Windows 2003 is beyond me… But once I found this, I at least was able to move on, realizing that I had to detect the version of Windows running on the remote machine and use the different API’s accordingly… If only Microsoft had included proper documentation clearly specifying this new API was Vista/W2K8+ only, had an error message indicating something of that sorts, or actually did the right thing and wrote a compatibility layer into it, I wouldn’t have wasted so much time on such an unproductive search.

 

 

How to find icons for a software application

Finding icons for your software application can be tough. There are many sources of free icons that you can easily find online with a Google search. If you’re on an incredibly tight budget, but have lots of time, this can make lots of sense. The problems with this, is the amount of time it takes to find the icons you need and often times you end up with an inconsistent look and feel in your application– your icons are often pulled from many different places, and your application looks that way.

I personally prefer to buy big sets of icons. IconShock has been selling icon sets for years, and I can highly recommend their entire icon collection which is only $299 right now– that’s over 600k icons, for only $300. That’s less than $0.0005 per icon… Or roughly 20 icons per penny. Buying icons in a set like this, it’s fairly easy to find just the right icon for every part of your application, and best of all they have the same look and feel(provided you pull from the same or a similar set).

I’ve also started to make my icons larger in my applications. Traditionally, icons are only 16×16 in menus, toolbars, etc… With higher resolutions on screens, I find it’s far best to use 24×24 icons in menus and either 24×24 or 32×3 icons in toolbars. This provides a larger area for the user to see what the icon is(showing off your snazzy new icons!), identify it with the function in your software, and click.

Perfectionism can be a major roadblock to productivity

I often look back at my younger years, and see all that I was able to accomplish in a small amount of time. Applications or websites I was able to create, etc. Everything seemed so easy, and I was able to just get things done. I wonder why that isn’t the case today. I tell myself it’s because I’m seasoned and what I write is simply better today– fewer bugs, fewer problems, better design, etc… And that may be true, but how much of that is holding me back from really being productive? Is it better to create it and then perfect it, or create it perfectly the first time?  There’s a balance to be found, but I think I’ve been leaning far too much towards ‘perfection the first time’…

I just read this article about Perfectionism vs. Success, and it strongly resonated with me. I often try to make things perfect the first time. Often times, I get so obsessed with doing something the ‘right way’, that it keeps me from doing it at all! This is particularly difficult when I don’t have an external force driving me to get something done– such as a client or customer request with a deadline(implicit or not). Recently, I’ve been acknowledging to myself that I have a problem, but I’ve incorrectly identified it as a lack of organization– which has led me to creating organizational tools and processes to “get organized”. While helpful, it doesn’t address my core problem of trying to be perfect.  Interestingly enough, creating my organizational tools went far quicker than expected, as I went into it with a “good is good-enough” attitude– as I know the tools won’t be customer-facing.

So, from here on out, I’m going to try to make a conscious effort to “just do it”, remembering “it doesn’t have to be perfect”– the first time, or potentially ever.

Linux Permission denied– not really

One of the things that pisses me off with Linux, is the lack of good error messages. Today I wasted a good amount of time tracking down this error:

_WARN: config: path “/var/lib/amavis/.spamassassin/user_prefs” is inaccessible: Permission denied

Now, you’d think based on the message that the user_prefs file or the directory above it didn’t have the proper permissions for the user/executable accessing it… That’s what “permission denied” means, right?  WRONG. After hours dicking around, I eventually found that the problem was that the permissions were TOO OPEN… Instead of 700 on the .spamassassin directory, I had it set to 666(and 660 at one point)… As soon as I set the permissions on the .spamassassin directory to 700, the problem went away…

Now, I’d guess this is the amavis developers’ fault at least partly– I’ve seen other linux-based apps say “permissions are too open” regarding file permissions before(ssh key files, for one)… Possibly there’s something in the file-accessing API that you can request that permissions aren’t too open, and they just have a single fall-thru that says “permission denied”…  Either way, this type of thing causes me to waste considerable amount of time, and is the primary reason I’m very shy about adopting Linux for too many things– as much as I’ve tried over the past 13 years… In this case, I was configuring a front-end mail server using postfix+amavis+dovecot+spamassassin, as I don’t know of any good alternative for Windows(MS SMTP front-end is incredibly weak).

SecuredOffers.com is a SCAM!

Today I was reading about some SEO tactics, and thinking about buying a better domain for one of my products, Overseer Network Monitor. I found overseer.com parked by a cyber-squatter, so I decided to look up the whois and contact them, seeing if I could work out a deal to buy it from them… I got an auto-response sending me to securedoffers.com, which wanted $19 to ‘connect you with the seller’…

Foolishly, I bought into the scam, and paid the $19 to make a reasonable offer for overseer.com. The Email I got back was demanding $9500 for the site– which is incredibly over-valued. I countered with $1000, and the seller refused to negotiate further. I then found that the overseer.com cyber-squatter was actually the OWNER of securedoffers.com, and therefore simply SCAMMED me out of $19 to Email with him…

When it became acceptable for a business to demand money to let you offer them money is beyond me. I suppose it takes a different sort of person to be a cyber-squatter– why I expected them to be anything more than scammers is beyond me…. I’ve disputed the charge with Paypal, but I highly doubt they’ll do anything… Either way, this blog post, a bad review online, and the Paypal dispute is my way of venting and getting some kind of closure. Even the smartest among us get taken by a scam(such as this one from securedoffers.com) sometimes.

Always have a software schedule

As some of you may know, I spend a large portion of my time contracting with a specific client. The rest of my time, I spend doing operations things, and trying to develop and promote my products, Overseer Network Monitor and Employee Scheduling Pro. The time demands of my primary contract, along with personal time demands, sometimes leaves me very little time to develop and/or promote my products. It can be quite frustrating at times. In the past 6 months or so, I’ve been doing my best to force myself to do a little bit every week. I created a whiteboard that tracks how many days it has been since my last release, blog post, sale, etc. for each of the products. As I see this number go up, I get more motivated to do something with the product so I can make a release, and therefore a blog entry, and hopefully all this will spur sales(or potentially do some marketing to make the sales # move)…

While this has been helpful to keep me from being totally idle on my products, I’ve found it’s caused a different problem. I’ll notice late in the week that a number is high, and be motivated to make a release to bring that number down to 0. So, I’ll search my feature database for something I can bang out in a couple hours or maybe a day– tops… If I have a bit more time, I’ll do a couple to make it a more substantial release… The problem with this, is I’m always pressed for time in a week– so only small enhancements get done… The exception to this rule, is when I have a customer specifically asking for features– then I focus all my development efforts on getting the list of features implemented that the specific [potential] customer requests. I feel I get a lot done in this manner, but it often spans multiple periods of my non-contract time. This is good, because I stay focused.

After noticing this pattern and doing some research online, I’ve come to the realization that I can’t continue without a little more structure. I need to start planning software releases– to create a simple schedule. I need to take some time, sit down, and choose a certain few features(big and small) to be included in a release. I then have to schedule out how long that’ll take, and get it done– accepting upfront that this will take numerous sessions– I can’t bang out a substantial release in an afternoon as I’ve been doing…

The evils of Captcha

I am finding more and more sites using Captcha and similar ‘verification’ systems to try to filter out spammers and bots. Unfortunately, the images are getting worse and worse, and hardly legible for legitimate humans, even with 20/20 eyesight to make out! As this article points out, it is simply lazy to use Captcha instead of simple Email verification and spam filtering… Even worse, I often see these captchas on small sites, or on ‘contact us’ pages– so when a potential customer needs to contact you, you must aggravate them by forcing them through this horribly designed ‘security measure’? Talk about great customer service…

Visual Foxpro– I need a drink!

This week I had a project for a client that involved writing code in Visual Foxpro. For those unfamiliar, this is a language/development platform that goes back multiple decades, and is based on DBase– a ‘data basic’ type of language… I started my professional career using VFP, and wrote a lot of code. I went beyond what most VFP developers ever do with it, by using extensive graphics for touchscreens, creating and maintaining complex web services, etc. Contrary to public opinion, the development platform is very capable…

Regardless, it’s also a major pain to work with. The IDE crashes constantly, the ‘compiler’ can’t catch even the simplest of mistakes, etc… I dread the projects that require me to work directly with VFP(more than tweaking a few lines of code, anyways)… It’s frustrating and slow to get anything done. Speed and efficiency is picked up if you develop with it daily, but if you take a hiatus for a while to develop in a contemporary language(such as C#), coming back to it will just be very frustrating…

While VFP is a pain for me to work with as a developer, I have to respect the fact that a lot of solid programs are written in VFP. Programs that have been around multiple decades, and still work on modern hardware without tweaking. Many businesses run on software written in VFP, even if they don’t know it. The question for many of the companies with these products is when/if to convert to a modern development environment such as C#/.NET… While every business has to weigh the pros and cons of this, I personally see the Windows operating system support for VFP waning, and it may not run very well 5-10 years from now… Personally, I’m curious about the .NET Compiler for Visual Foxpro, which lets you compile VFP code to run on the .NET development platform. This might ease the pain for some software companies looking to make a transition. For the others, they’ll likely have to work into their schedules time to port their VFP code to .NET.

Username != Email address!

It really annoys me when websites say ‘username’ when they mean ‘Email’… Just because THEY use my email as their ‘username’, doesn’t mean I know that… When something is labeled ‘username’, I don’t automatically assume I should enter my Email address, which makes it take far longer to access a seldom-used site using an account I created previously…. So please, when creating websites, call it what it is… If some management-type argues it should be ‘username’, at least put small text there that says ‘(Email address)’ or something.

IPv6

I just read this on the wiki, when Googling for a general piece of information about IPv6:

“While IPv6 is supported on all major operating systems in use in commercial, business, and home consumer environments,[3] IPv6 does not implement interoperability features with IPv4, and creates essentially a parallel, independent network. Exchanging traffic between the two networks requires special translator gateways, but modern computer operating systems implement dual-protocol software for transparent access to both networks either natively or using ‘tunneling’ such as 6to4, 6in4 or Teredo. In December 2010, despite marking its 12th anniversary as a Standards Track protocol, IPv6 was only in its infancy in terms of general worldwide deployment. A 2008 study[4] by Google Inc. indicated that penetration was still less than one percent of Internet-enabled hosts in any country at that time.”

12 years, and <1% deployment! This is what happens when you don't have a good transition plan from one technology to the next-- no one adopts it... I personally think it's likely 12 years from now, IPv6 still won't be the 'standard' used for the Internet... Many IPv6 proponents claim IPv4 is "end of life", as the IANA just assigned the last big /8 net block-- claiming "all the address are used up!" What they fail to understand, is that addresses aren't consumed-- they can be re-used, and they're allocated by the IANA in huge blocks, and all those organizations that they allocate to, then sub-allocate to other organizations that allocate to end users.

My experience with Android app development

This week I’ve been working on a simple Android application. A customer of mine had the requirement for an ‘app’, but wanted to keep as much logic as possible on the mobile-web version of his web application, which is written in JQuery Mobile.

I downloaded Eclipse and installed the Android plug-in, and was amazed at how quickly I was up and running. Eclipse is a little weird on Windows, in that it doesn’t get installed, and the concept of ‘work benches’ is a bit different than I’m used to as a Windows developer– but it wasn’t too difficult to get going…

I created a simple application with a web view, and was able to access the mobile website through it fairly easily. I over-rode the back button and passed it to the web view, and I was off and rolling. The next part was a little more complex, however… I needed to implement all of this logic(potentially more in the future), in a library that I could easily inherit in ‘instances’ of this app, per se– so each one could be branded individually… This was a bit more difficult, but I was able to figure it out eventually… The biggest roadblock, was that Android seems to build all the resources together from libraries and the current app– so I had a main.xml layout in both apps, and it was discarding it from my library in favor of the one in my instanced app… This gave me errors about not being able to find the resource ID of the web view in the library code… Once I figured that out, I was on my way… I was also able to use this to my advantage, in that I could easily put any customizable parameters in my instanced app in the strings.xml file– and the library could access these resources!

Multiple monitor RDP connections

I typically work with 4 1080p LCD monitors on Ergotron arms. I have the same setup and layout at work as I do at home. When I remote in from home, I’ve found in Windows 7, I can check ‘use all my monitors’, and the remote desktop actually uses all the monitors, even in my non-square and non-linear layout(my monitors are roughly in a + shaped pattern).

The one negative of this, is that the speed wasn’t great. Flipping windows and such, there’d be a noticeable lag. It was usable, but not comfortable. I figured this was due to my 1Mbps upload speed at the office. I watched a bandwidth meter on the router, and I noticed it wasn’t maxing out the 1Mbps upload speed… I have noticed, however, that when I do a speed test, the upload always starts slow, and doesn’t reach full speed for a couple seconds… I was thinking, “maybe the RDP packets are always in the start of that incline and can never reach full speed”…

Well, recently I found that Time Warner Business Class in my city just added ‘Wide band’ service. I was able to upgrade for a reasonable price to 35/5 service– that’s 5Mbps upload speed! I can use the bandwidth for other purposes as well, but I was particularly excited about having a faster RDP experience when I do work from home, trying to be fully productive with all 4 screens…

Well, I just tried the connection, and the RDP experience is MUCH better! I don’t see a constant lag when working. I looked at the same router bandwidth meter, and it was often spiking to 2Mbps or so– definitely above the 1Mbps it wasn’t reaching before… So I think my hunch about the upload connection starting slow was definitely the issue… To prove how awesome the connection was, I played a video someone posted on facebook, and it was actually watchable over RDP! Sure, it maxed the 5Mbps bandwidth meter, but it was watchable! I did try to put it full screen to see how I could push it, and that didn’t fair so well… But I’m certainly not watching video through an RDP connection for any real purposes…

Android SDK does not work with defaults used in installation!!!

So, this week I’ve started some simple Android app development. I started by downloading and installing the SDK, of course… Of course, the emulators don’t seem to work. Upon just a little digging, I found this:

http://stackoverflow.com/questions/6638713/android-emulator-is-not-starting-showing-invalid-command-line-parameter

That’s right– Google’s Android SDK doesn’t work on the most dominant desktop OS with the default install parameters… Seriously? How can Google act so amateurishly? Installer-writing 101 is to check on your #1 targeted platform, which would be **Desktop Windows versions**… How sad…  To solve my problem, I’m un-installing and re-installing at a non-‘Program Files’-ish path… Hackin’ it up to make it work for Google…

So maybe Blackberry isn’t so bad…

Recently, I had to debug problems with a JQuery Mobile application that I maintain– primarily, it wasn’t working with Blackberry devices. I downloaded a ‘simulator’ from RIM and got to work… The simulator is incredibly clunky, but I eventually figured it out and confirmed that the mobile web app did not work on Blackberry.

It seemed as thought he Blackberry was being excessively strict with parsing the html– enforcing xml entity quotes, etc. etc… Eventually, after trying some fixes that got me partially there, I opened WireShark and tested what headers were going across the wire that were different on JQM’s demo(which worked fine), and my mobile web app… Low and behold, I found it. JQM’s demo was properly serving a content-type of ‘text/html’, and my app was serving ‘application/xhtml+xml’.. WTF?

I was finally able to determine that a mobile.browser file I had in my ASP.NET application was causing the problem. It was CHANGING the response type based on some archaic entry in this file– which I only use for detecting if the current browser is mobile or not for redirecting reasons… I hacked the file to server text/html as it should be, and Blackberry is working MUCH better now… I still have to do a full regression of testing to make sure everything works, but this definitely appears to be the major issue that was causing problems…

So, maybe Blackberry isn’t so bad. At least it isn’t giving me Javascript timeout errors like the iPhone 3G…

iPhone javascript execution exceeded timeout

Wow. I know that Apple severely cripples their phones, under clocking their processors, etc. I know that the iPhone 3G I have for testing is incredibly slow when side-by-side with my Android Samsung Galaxy S phone… But my experience with this iPhone has hit a new low… I was just debugging a problem with the iPhone showing a blank page on a functional JQuery Mobile page. It works perfectly in all desktop browsers, as well as on Android, WP7, etc. I enabled iPhone’s debug console and it’s reporting a javascript execution timeout error in JQuery 1.6.1 code. Apparently, the iPhone 3G runs so slowly that it is now timing itself out when trying to render a JQuery Mobile page…

Now I have to start trying to find a work-around to make this work… From what I understand, the javascript execution timeouts are reset with new execution contexts– of which setTimeout is one… So possibly I need to put some of my page initialization code in a setTimeout code so that it will actually run on an iPhone 3G…  Amazing the lengths I must get to to make things work on all these devices….and don’t even get me started on Blackberry support…

JQuery Mobile Beta 1

As of last week, the JQuery Mobile people finally released beta 1. They’ve been releasing Alpha versions for a long time now, and we’re all still waiting for a “1.0” release… I’ve used this JQM library for some mobile development I’ve done for a client, and while it’s been nice mostly, it’s been a bit annoying all the iterations they’ve gone through– changing compatibility and some interfaces along the way…

I just loaded the beta1 version and fixed up some breaking changes, and it appears to be the best release yet. I have yet to test it with all the mobile phones, but so far it works well in Chrome, Firefox, and even desktop IE! That’s quite something, as IE support has been lacking(even though they claim they added it in alpha3 or something, it didn’t work if you had a form element on your page!!!).

Internally used, custom software

I’ve considered writing some internal software for managing license fulfillment, customer support requests, enhancement/bug tracking, time tracking, and a bunch of other things as they come up. I previously wrote such a system at a former employer/current client, and it’s paid dividends for their business, many times over– far more than a canned off-the-shelf solution could ever do.

I’ve put this off for so long, as it means time away from client work that directly pays, and product work that indirectly pays later. I’ve used a bunch of  different sub-optimal solutions up until now(Excel spreadsheets, a simple license-generator, etc.). I was looking at a canned solution called FogBugz, and realized although it is kinda nice, it can’t offer me the benefits of a custom solution…

While reading on FogBugz site, I read “Good software is not an accident. It is a result of a process designed to produce good software.”  That really rung true– having a unified system to manage feature requests, bugs, support incidents, time tracking, license generation, etc. is very important for me to be able to run my business– primarily to create excellent software. The splintered approach I’ve been using is inefficient and easy to ignore and forget about– a unified system will force me to use it for one aspect of my business, which will remind me to use it constantly for the other parts.

So, I’ve started working this week on “SMS”– the ‘Sensible Management System’. This name is a clear knock-off of the system I developed for my former employer, which was called TMS(Ticket Management System)– but I really wanted a good acronym for the system, and something that was beyond ‘tickets’, as this system will do so much more. I have no plans to release this as a public product, due to its very custom nature, but I think the time I put into it should pay dividends someday in being more organized, and saving time by shortening iterations in business processes.

New releases, busy week

This has been a busy week involving multiple new releases– one for Overseer, my network monitoring software, and the other for Employee Scheduling Pro, my employee scheduling software. In addition to this, I’ve had more hours than usual for a regular client of mine… Overall, it’s been a very busy week.

I’ve also been looking at adding support to Overseer for USB temperature sensing units. I ordered a few for prototypes/development units, and hope to add a budget alternative to the extremely expensive Sensatronics EM1 option that Overseer currently supports.

New office, new child, etc.

Well, I haven’t written in a while as things have been quite busy. I moved into a new office in early May, and my wife gave birth to our first child, Lily, in mid-May. I recently got back to work, and I’ve been playing catch up with a new release of my Employee Scheduling Software and client work.

Things have been going well– our baby is sleeping decently at night, and it’s really awesome to be a dad. The office outside the house was clearly a good decision– it helps me separate business and personal and gives me the quiet time needed to be productive during work hours.

Office Space

Well, after 3 years of working from my home office, I’ve decided to lease office space. With the impending birth of my first born child, and our decision for my wife to be a stay-at-home Mom, continuing to work from home would likely make me far less productive than I have been. Additionally, I have a friend that also is looking for office space that will use an office in the suite I lease and pay some reimbursement to me to offset the cost. This friend is also a salesman who may be able to work for me on a commissioned basis to help expand Sensible Software and open new doors.

Overall, I’m very excited about this move, and I’ve been spending a decent amount of time in the past 2-3 weeks looking at office suites, managing related things(insurance, internet connection, computer/infrastructure changes, etc.). If all goes well, I should be entering into a lease shortly, which should start May 1st– with move-in commencing soon thereafter.

Download tracking revisited

After my recent post about Google Analytics not tracking downloads accurately, I had decided to go back to counting download using a weblog parsing method. After some consideration, and the suggestion of a colleague who tracks downloads using Google Analytics himself, I’ve decided not to use that method.

The reasoning behind it, is Goal tracking in Google Analytics lets me see what traffic sources(sites and keywords) are converting best. I lose this very important marketing feature if I use the web log tracking method. Being able to track my marketing methods for Overseer Network Monitor and Employee Scheduling Pro is far more important than seeking 100% accuracy for this number.

As an alternative, I’m using a download redirect option. Now on my software websites, a user will go to the ‘download’ page to view the links to download, and click the appropriate link to download the file. This takes them to a “your download will start now” page, at which point it uses a meta http-refresh to start the download. This should work with GA better to track the downloads. I have a funnel setup to require the end user to go to the download page before the downloading page, and set a noindex meta tag on the downloading page to try to prevent Google traffic being sent directly to this page.

Google Analytics Tracking of Downloads DOES NOT WORK RELIABLY

About a month ago I switched to using Google Analytics. I was previously using Urchin for web analytics, and had accepted that it simply didn’t work for tracking goals, etc.(I reported this to Urchin and they refused to acknowledge it). When I switched to Google Analytics, I setup goals for tracking downloads of my Network and System Monitoring Software. This seemed to work, and replaced my weblog analysis that counted the downloads for conversion tracking.

This past Friday, I launched my Employee Scheduling Software and setup goal/download tracking the same exact way. I downloaded it a few times, and it never showed up in Google Analytics as a conversion– or as content. I analyzed what could be wrong, and found that everything was setup perfectly.

So, being a software developer, I loaded my download page up in Chrome and turned on the Javascript console. I found that when clicking the download links, it would come up with an “undefined” error, yet still allow the download to take place. With some experimentation, I found that the tracking code always fails when linking to a binary/downloadable file, but works for linking to pages… Of course, that doesn’t work for me, as I need to track downloading of files… I couldn’t find any solutions online, and I tried multiple different ways to track the downloads with GA… It appears to be browser specific(with Chrome), which is why the problem was masked with Overseer downloads… But this  just makes it clear to me that I can’t trust Google’s numbers…

So, it looks like I’ll be switching back to tracking downloads from my logs… The plus side of this, is I can go back historically and won’t be limited by GA’s lack of data, lack of Javascript support on some browsers, etc… The problem is I won’t be able to see ‘goals’ inside GA’s interface… I suppose there’s worse things.

Shorten iterations for increased productivity

I’ve been a software developer for over 10 years. I’ve worked using multiple design paradigms– Waterfall, Cowboy, and something like Agile. I personally prefer an Agile software development method– many regular releases as customers need them, versus huge planned releases. One of the keys behind successful and efficient Agile development is shortening iterations.

Iterations are all over. Every time I check in source code, build on my build machine, and run it on a QA machine(and potentially go back to change more code to fix/enhance something), is an iteration. Other iterations exist when shipping changes to a website, processes for fulfilling license keys, etc. Each step in the process takes time– being able to eliminate/streamline that process will pay dividends time and time again, in exchange for a little time upfront to automate it.

Even better yet, is being able to automate iterations so they’re triggered and performed automatically. One of these, is automatic fulfillment of license keys. I sell two of my products, Overseer Network Monitor and Employee Scheduling Pro, online. When someone purchases a key, they expect that license immediately. While it may take time to write the appropriate code to integrate with the shopping cart, doing so pays off two fold– one, in that I don’t have to spend the time manually generating the key and sending it to the customer, and the other is that the customer gets it immediately, which makes them happy(happy customers are good customers).

It’s important not to lose site of this… With everything you do, think about how many times you do those steps, and think if you can automate the process– and potentially even the triggering of that process. You’ll thank yourself later.

Employee Scheduling Pro has been released

This past Friday, I officially release Employee Scheduling Pro. This is a product for employee scheduling that I’ve been working on for a few months. I’ve gotten to the point in development that it’s usable by people to schedule their employees, and therefore I’m releasing it. I will continue to develop this software based on customer’s requests and lacking those, perceived need in the software.

Employee Scheduling Pro allows users to create schedules using a wizard and tweak them afterwards. Users can then print out the schedule using either a Daily Schedule report that shows who is working today and what their job is, or an Employee Schedule report, which prints employee’s shift on a calendar so an employee can easily find when they’re working that week.

Other features still to come, will be posting the schedule online for employees to see, Emailing them their schedules, and more. If you have any suggestions for features, please contact me at dkalweit@sensiblesoftware.com.

Thanks.

 

Windows 2008 R2 DNS issues

So, I’ve had issues with Facebook pictures for at least a few weeks now. About half of them would just come up with the “unable to load image” icon. I experienced this in IE, Firefox, and Chrome, so I knew it wasn’t a browser issue… I figured it was a Facebook server or code issue.

I spent some time today with Wireshark to figure out where it was failing. I found that my internal DNS server was failing. This server runs W2K8 R2, and is my domain controller for my small network here.  I checked the event logs, and found multiple event 5501’s– saying that it received a malformed packet from another DNS server… I did a little research on this, and stumbled upon this blog entry that details the problem:

http://weblogs.asp.net/owscott/archive/2009/09/15/windows-server-2008-r2-dns-issues.aspx

I disabled the EDNS probes as the article suggested, and my problems instantly went away.  Why MS shipped a default that doesn’t play nicely with standard DNS servers is beyond me… But I suppose it’s not a first… I’m just glad I’ve resolved my issue.

The negative of using multiple monitors

Using multiple monitors is great. Personally, I use 4 large 23″ widescreen LCDs on Ergotron arms. This works amazingly well, and my productivity is improved considerably by using them. I’m able to have multiple copies of Visual Studio 2010 running, and sometimes even lay them out side by side. I also have a browser on one screen, Email on another, spreadsheets for tracking misc. info shared on another, etc.

The big problem with this, comes when I’ve been couped up all winter, and spring hits… The last couple days have been a “false spring” with 60º+ weather(quite pleasant for Rochester, NY). I would love to be able to sit out on my deck and work on my laptop… The problem with that, is I’d have to make due with only one 17″ screen. That means going from 976 square inches of desktop space to around 129 square inches… That’s losing 86.8% of my desktop!

The only solution I can think of(until multiple screen laptops are a feasible reality), is finding a single task that I can do on a single screen, and simply tolerate a longer turn-around for Email responses(considering I can’t monitor it as well), etc… Unfortunately, I can’t always find such simple tasks, particularly that need to be done when the weather is nice…

Exercise while playing games

About a year ago, I had the bright idea to get a recumbent bike and put a computer with a big TV in front of it to exercise while playing WoW. I created a website for it to show people pictures, etc. I used it for a few months, but eventually lost interest in WoW and ended up walking outside instead(probably better for me anyways). I eventually moved the TV to my bedroom, swapping it with the smaller TV that was up there, and I hooked up a PS2 instead– and occasionally I use that to play games while exercising on the bike. Overall, however, I just use that site for blogging about how to make WoW gold and such…. Feel free to check it out.

Crystal Reports 2010 has a huge redistributable

So today I investigated reporting options for Employee Scheduling Pro. I had previously used Crystal Reports 2008 for Visual Studio 2008 with some success. It felt clumsy and bloated, but it worked. Overall, considering my previous experience and the ‘industry standard’ it has become, I was planning on using it.

Come to find out, Visual Studio 2010 didn’t ship with Crystal Reports as previous versions did. It included a link to Business Object’s site for a beta2 of the Crystal Reports 2010 for Visual Studio 2010. It’s still free, but is very late– it’s still not released, even though it was supposed to be released in Q4 2010 and it’s late in Q1 of 2011… Regardless, I looked at downloading this beta to evaluate if it was still useful, but I found that the redistributable is 72MB!!! In comparison, the CR2008 redistributable is roughly 17MB…. 72MB to add a few reports to an otherwise simple app? I don’t think so… In addition to this, I find that CR2010 requires .NET 4.0, which forces me to bloat my installer more and eliminate OS support(such as W2K)… I don’t know about you, but I really don’t think a 100MB+ download is acceptable for an Employee Scheduling Software tool…

Fortunately, I had a good alternative. DevExpress, which is the toolkit I’ve used for my Win Forms controls, also has a reporting control that’s actually included in my subscription. Upon investigation online, it appears XtraReports is pretty decent– and it can even import existing Crystal Reports which will be useful for other projects that I may want to upgrade in the future… In comparison, XtraReports will add a couple megabytes(even less once compressed in the installer). I’ll also have the added bonus of having a report viewer that’s skinned in the same manner as the rest of Employee Scheduling Pro.

How to Email a cell phone

For many reasons, many people may want to Email a text message to their cell phone. This might be used to notify themselves when their servers or websites go down– or simply to notify them of backup completion or a new sale. If you’re interested in receiving Emails when your servers or websites go down, you may want to check out Overseer, which does exactly that– it is able to send an Email to your phone when your website goes down.

If you’d like to Email a cell phone directly from your Email client, from a script, or something else, you can still do so quite easily. This has the benefit of being free for the person sending the email, but the recipient may still pay to receive the email as a text message. To send a text message to someone’s cell phone via Email, you will need to know their phone number and what cell phone carrier they use. To send a text message to a cell phone, simply send an Email to the appropriate Email address:

AT&T phonenumber@txt.att.net
Cingular Wireless phonenumber@mobile.mycingular.com
Cricket phonenumber@sms.mycricket.com
Metro PCS phonenumber@mymetropcs.com
Nextel phonenumber@messaging.nextel.com
Sprint PCS phonenumber@messaging.sprintpcs.com
T-Mobile phonenumber@tmomail.net
US Cellular phonenumber@email.uscc.net
Verizon phonenumber@vtext.com
Virgin Mobile phonenumber@vmobl.com

 

Remember to keep your EMails short, as the recipient will be receiving them on a small screen, and long Emails may be cut off or split between multiple text messages(and they’ll get charged for each one by their carrier). Also, if your carrier isn’t here, it may be here: Cell Phone Email Addresses.

Cell Phone Email Addresses

Most mobile phone and pager carriers provide Email gateways into their SMS/Text messaging networks, allowing for the free sending of text messages to these devices. These Email addresses sometimes change, so I’ve provided a list of SMS cell phone Email addresses here. Some of these may not work– it’s best to try sending an Email to each address for your provider and see if you get the message. If you know of a provider/Email address combination that’s not here that you know works, please contact me at dkalweit@sensiblesoftware.com so I can add it to the list. Note that messaging rates on the device may still apply. For more details, please see How to Email a Cell Phone. If you’re interested in monitoring your servers, websites, and network devices, and getting Emails to your cell phone when they go down, please check out Overseer Server Monitoring Software.

 

Provider Name Email Address
3 River Wireless phonenumber@sms.3rivers.net
ACS Wireless phonenumber@paging.acswireless.com
AT&T phonenumber@txt.att.net
AT&T Pocketnet PCS phonenumber@dpcs.mobile.att.net
Advantage Communications pagernumber@advantagepaging.com
Airtouch Pagers pagernumber@airtouch.net
Airtouch Pagers pagernumber@airtouchpaging.com
Airtouch Pagers pagernumber@alphapage.airtouch.com
Airtouch Pagers pagernumber@myairmail.com
Alltel phonenumber@message.alltel.com
AlphNow pin@alphanow.net
Ameritech Clearpath pagernumber@clearpath.acswireless.com
Ameritech Paging pagernumber@pageapi.com
Ameritech Paging pagernumber@paging.acswireless.com
Andhra Pradesh Airtel phonenumber@airtelap.com
Arch Pagers (PageNet) pagernumber@archwireless.net
Arch Pagers (PageNet) pagernumber@epage.arch.com
BPL mobile phonenumber@bplmobile.com
BeeLine GSM phonenumber@sms.beemail.ru
Beepwear pagernumber@beepwear.net
Bell Atlantic phonenumber@message.bam.com
Bell Canada phonenumber@bellmobility.ca
Bell Canada phonenumber@txt.bellmobility.ca
Bell Mobility number@txt.bellmobility.ca
Bell South (Blackberry) number@bellsouthtips.com
Bell South Mobility phonenumber@blsdcs.net
Bell South phonenumber@bellsouth.cl
Bell South phonenumber@blsdcs.net
Bell South phonenumber@sms.bellsouth.com
Bell South phonenumber@wireless.bellsouth.com
Bluegrass Cellular phonenumber@sms.bluecell.com
Boost Mobile phonenumber@myboostmobile.com
Carolina Mobile Communications pagernumber@cmcpaging.com
Cellular One East Coast phonenumber@phone.cellone.net
Cellular One PCS phonenumber@paging.cellone-sf.com
Cellular One South West phonenumber@swmsg.com
Cellular One phonenumber@mobile.celloneusa.com
Cellular One phonenumber@cell1.textmsg.com
Cellular One phonenumber@cellularone.textmsg.com
Cellular One phonenumber@cellularone.txtmsg.com
Cellular One phonenumber@message.cellone-sf.com
Cellular One phonenumber@sbcemail.com
Cellular South phonenumber@csouth1.com
Central Vermont Communications pagernumber@cvcpaging.com
CenturyTel phonenumber@messaging.centurytel.net
Chennai RPG Cellular phonenumber@rpgmail.net
Chennai Skycell / Airtel phonenumber@airtelchennai.com
Cincinnati Bell phonenumber@gocbw.com
Cingular Wireless phonenumber@mobile.mycingular.com
Clearnet phonenumber@msg.clearnet.com
Comcast phonenumber@comcastpcs.textmsg.com
Communication Specialist Companies pin@pager.comspeco.com
Communication Specialists 7digitpin@pageme.comspeco.net
Comviq number@sms.comviq.se
Cook Paging pagernumber@cookmail.com
Corr Wireless Communications phonenumber@corrwireless.net
Cricket phonenumber@sms.mycricket.com
DT T-Mobile phonenumber@t-mobile-sms.de
Delhi Aritel phonenumber@airtelmail.com
Delhi Hutch phonenumber@delhi.hutch.co.in
Digi-Page / Page Kansas pagernumber@page.hit.net
Dobson Cellular Systems phonenumber@mobile.dobson.net
Dobson-Alex Wireless / Dobson-Cellular One phonenumber@mobile.cellularone.com
EMT phonenumber@sms.emt.ee
Edge Wireless phonenumber@sms.edgewireless.com
Escotel phonenumber@escotelmobile.com
Fido phonenumber@fido.ca
GCS Paging pagernumber@webpager.us
GTE phonenumber@messagealert.com
GTE number@airmessage.net
GTE number@gte.pagegate.net
Goa BPLMobil phonenumber@bplmobile.com
Golden Telecom phonenumber@sms.goldentele.com
GrayLink / Porta-Phone pagernumber@epage.porta-phone.com
Gujarat Celforce phonenumber@celforce.com
Helio phonenumber@myhelio.com
Houston Cellular number@text.houstoncellular.net
Idea Cellular phonenumber@ideacellular.net
Infopage Systems pinnumber@page.infopagesystems.com
Inland Cellular Telephone phonenumber@inlandlink.com
JSM Tele-Page pinnumber@jsmtel.com
Kerala Escotel phonenumber@escotelmobile.com
Kolkata Airtel phonenumber@airtelkol.com
Kyivstar number@smsmail.lmt.lv
LMT phonenumber@smsmail.lmt.lv
Lauttamus Communication pagernumber@e-page.net
MCI Phone phonenumber@mci.com
MCI phonenumber@pagemci.com
Maharashtra BPL Mobile phonenumber@bplmobile.com
Maharashtra Idea Cellular phonenumber@ideacellular.net
Manitoba Telecom Systems phonenumber@text.mtsmobility.com
Meteor phonenumber@sms.mymeteor.ie
Metro PCS phonenumber@mymetropcs.com
Metrocall 2-way pagernumber@my2way.com
Metrocall pagernumber@page.metrocall.com
MiWorld phonenumber@m1.com.sg
Microcell phonenumber@fido.ca
Midwest Wireless phonenumber@clearlydigital.com
Mobilecom PA pagernumber@page.mobilcom.net
Mobilecomm number@mobilecomm.net
Mobileone phonenumber@m1.com.sg
Mobilfone phonenumber@page.mobilfone.com
Mobility Bermuda phonenumber@ml.bm
Mobistar Belgium phonenumber@mobistar.be
Mobitel Tanzania phonenumber@sms.co.tz
Mobtel Srbija phonenumber@mobtel.co.yu
Morris Wireless pagernumber@beepone.net
Motient number@isp.com
Movistar number@correo.movistar.net
Mumbai BPL Mobile phonenumber@bplmobile.com
Mumbai Orange phonenumber@orangemail.co.in
NBTel number@wirefree.informe.ca
NPI Wireless phonenumber@npiwireless.com
Netcom phonenumber@sms.netcom.no
Nextel phonenumber@messaging.nextel.com
Nextel(Brazil) phonenumber@nextel.com.br
Ntelos number@pcs.ntelos.com
O2 phonenumber@o2.co.uk
Omnipoint phonenumber@omnipointpcs.com
Omnipoint number@omnipoint.com
One Connect Austria phonenumber@onemail.at
OnlineBeep phonenumber@onlinebeep.net
Optus Mobile phonenumber@optusmobile.com.au
Orange – NL / Dutchtone phonenumber@sms.orange.nl
Orange Mumbai phonenumber@orangemail.co.in
Orange phonenumber@orange.net
Oskar phonenumber@mujoskar.cz
P&T Luxembourg phonenumber@sms.luxgsm.lu
PCS One phonenumber@pcsone.net
Pacific Bell phonenumber@pacbellpcs.net
PageMart Advanced /2way pagernumber@airmessage.net
PageMart Canada pagernumber@pmcl.net
PageMart 7digitpinnumber@pagemart.net
PageNet Canada phonenumber@pagegate.pagenet.ca
PageOne NorthWest 10digitnumber@page1nw.com
Pioneer / Enid Cellular phonenumber@msg.pioneerenidcellular.com
PlusGSM phonenumber@text.plusgsm.pl
Pocket Wireless phonenumber@sms.pocket.com
Pondicherry BPL Mobile phonenumber@bplmobile.com
Powertel phonenumber@ptel.net
Price Communications phonenumber@mobilecell1se.com
Primco number@primeco.textmsg.com
Primtel phonenumber@sms.primtel.ru
ProPage 7digitpagernumber@page.propage.net
Public Service Cellular phonenumber@sms.pscel.com
Qwest phonenumber@qwestmp.com
RAM Page number@ram-page.com
Rogers AT&T Wireless phonenumber@pcs.rogers.com
Rogers Canada phonenumber@pcs.rogers.com
SBC Ameritech Paging pagernumber@paging.acswireless.com
SCS-900 phonenumber@scs-900.ru
SFR France phonenumber@sfr.fr
ST Paging pin@page.stpaging.com
Safaricom phonenumber@safaricomsms.com
Satelindo GSM phonenumber@satelindogsm.com
Satellink pagernumber.pageme@satellink.net
Simple Freedom phonenumber@text.simplefreedom.net
Skytel Pagers 7digitpinnumber@skytel.com
Skytel Pagers number@email.skytel.com
Smart Telecom phonenumber@mysmart.mymobile.ph
Southern LINC phonenumber@page.southernlinc.com
Southwestern Bell number@email.swbw.com
Sprint PCS phonenumber@messaging.sprintpcs.com
SunCom number@tms.suncom.com
Sunrise Mobile phonenumber@freesurf.ch
Sunrise Mobile phonenumber@mysunrise.ch
Surewest Communicaitons phonenumber@mobile.surewest.com
Swisscom phonenumber@bluewin.ch
T-Mobile phonenumber@tmomail.net
T-Mobile(UK) phonenumber@t-mobile.uk.net
T-Mobile(Austria) Austria phonenumber@sms.t-mobile.at
T-Mobile(Germany) Germany phonenumber@t-d1-sms.de
TIM phonenumber@timnet.com
TSR Wireless pagernumber@alphame.com
TSR Wireless pagernumber@beep.com
Tamil Nadu BPL Mobile phonenumber@bplmobile.com
Tele2 Latvia phonenumber@sms.tele2.lv
Telefonica Movistar phonenumber@movistar.net
Telenor phonenumber@mobilpost.no
Teletouch pagernumber@pageme.teletouch.com
Telia Denmark phonenumber@gsm1800.telia.dk
Telus phonenumber@msg.telus.com
The Indiana Paging Co last4digits@pager.tdspager.com
Triton phonenumber@tms.suncom.com
US Cellular phonenumber@email.uscc.net
US West number@uswestdatamail.com
Unicel phonenumber@utext.com
Uraltel phonenumber@sms.uraltel.ru
Uttar Pradesh Escotel phonenumber@escotelmobile.com
Verizon phonenumber@vtext.com
Vessotel phonenumber@pager.irkutsk.ru
Virgin Mobile phonenumber@vmobl.com
Virgin Mobile Canada phonenumber@vmobile.ca
Vodafone phonenumber@vodafone.net
Vodafone Italy number@sms.vodafone.it
Vodafone Japan phonenumber@c.vodafone.ne.jp
Vodafone Japan phonenumber@h.vodafone.ne.jp
Vodafone Japan phonenumber@t.vodafone.ne.jp
Vodafone Spain phonenumber@vodafone.es
Vodafone UK phonenumber@vodafone.net
VoiceStream / T-Mobile phonenumber@voicestream.net
WebLink Wiereless pagernumber@airmessage.net
WebLink Wiereless pagernumber@pagemart.net
West Central Wireless phonenumber@sms.wcc.net
Western Wireless phonenumber@cellularonewest.com
Wyndtell number@wyndtell.com

Buy a good brand UPS

I’ve never really liked spending money on UPS’s… I have fairly reliable power, so it’s really not something I’ve wanted to commit the money to. Recently I got an APC Rackmount UPS for my servers off Craigslist, and it’s worked well. About a year back, I got a 1500VA ‘Cyber Power’ UPS from NewEgg for my workstation– it was less expensive than the others, and had decent reviews…

Well, just now the power went out. My servers kept running so I was able to shut them down(I really should setup some kind of notification so they shut themselves down, but I haven’t gotten around to it…). Unfortunately, my workstation blipped out immediately with the power. After the power came back, it kept complaining about ‘overload’ when my workstation started up… The LCD read-out said 123W. I know my workstation can pull ~250W at times(measured with a Kill-o-Watt watt meter), but that’s still well within the limits of a 1500VA UPS that has nothing else on it(I have monitors on a separate old APC UPS)… It appears this UPS is junk. Even though I’ve done the little “test” in their control application regularly, it still didn’t work once power actually was removed… It looks like I’ll be getting a brand name UPS from now on… APC or maybe Tripp Lite.

Control Library Quirks

Generally when designing a software product, I have to weight the pros and cons of rolling my own code for everything, or strategically using control libraries for key parts of the code. A couple years ago, I decided that for the front-end GUI in my .NET apps, I’d use the Winform controls from DevExpress. Generally, this has worked fairly well. As with working with any control library, there’s little quirks that I have to get used to. This control library likes to put most of their functionality under a “Properties” parent property… That’s one of the key things to remember when working with their controls…

Today these quirks with DevExpress’s XtraScheduler control exceeded annoying and went into downright frustrating. I was trying to setup a timeline view to span midnight(some customers of my Employee Scheduling Software will have operating hours that go unto the wee hours of the morning). To do this, I had to create a custom TimelineScale object. This makes sense, but the names of the methods and the logic that I have to implement in them just doesn’t make sense to me… And the documentation on these properties is obscure at best… I finally got things working after a lot of messing around, and I’m glad to finally have it behind me.  Overall, I think using the scheduler control will probably provide useful eye candy to the software while keeping me from having to re-invent the wheel.

Blogging is silly

“Blogging is silly”

“No one wants to read that”

“That’s obvious– why would anyone need to read that”

“That’s just stupid to blog about”

These kind of ideas always fill my head when I think about the next thing to write a blog post about. They always have– which is the primary reason I haven’t blogged in years.  A friend of mine recently shared with me the great success he’s had with his products, and he contributes a lot of it to the blogs on his websites, along with some other SEO efforts. Considering I’ve done a lot of similar things with less success, I have to believe that the blogging made the difference.

The bottom line, is every blog entry won’t be a piece of invaluable information. It may not change anyone’s lives or even solve anyone’s problems– but building blog content and linking to appropriate pages on my own site and others should help in the long term. And there’s nothing silly or stupid about the success that my friend has had blogging about his software releases, etc.

Employee Scheduling Pro

Well, I’ve been working on a new product, called Employee Scheduling Pro. This is Employee Scheduling Software that I hope to release a 1.0 version of within the next couple months. At first it will be fairly basic with manually created schedules, but I plan to enhance it further to involve more logic to intelligently aid the user in the creation of employee schedules.

Why am I working on Employee Scheduling software? Primarily because a friend of mine has already done Time Clock Software and Timesheet Software, and he said the market could really use a quality Employee Scheduling product– his customers specifically are interested in something.

Overseer Blog is live

Well, after integrating WordPress into my websites, I was able to get my blog live for Overseer Network Monitor. I created posts for each of the releases from my release notes file going back almost 2 years to seed the blog with some posts. These posts are full of information regarding the new features added to Overseer in 4.x. A couple of the features deserved their own posts, so I wrote about a couple of those as well.

For those that are unaware, Overseer is a Network and System Monitoring Tool used by system administrators to monitor their systems and notify them(via Email, cell phone, pager, etc.) when something goes down.

WordPress Integration

I’ve known I should be blogging on my sites for years. Recently a friend of mine finally motivated me to just do it. I really wanted to integrate the blog into my websites instead of having some disconnected look. This was difficult, as most blogging software is PHP based, and my websites are generally ASP.NET based. I looked into some .NET solutions such as BlogEngine.NET, but based on some forum posts, it didn’t appear it would integrate with my master pages very well anyways.

What I ended up doing, was creating a simple master-page based ASP.NET file in my ASP.NET project with the appropriate pieces needed for a basic WP Theme. Then, on application startup in the global.asax file, I retrieve it and write it out as index.php in the appropriate theme directory for WP. This means as I change my website’s master file, the theme will automatically be updated… The only bad part of this, is any dynamic portions of my master page will be ‘burned in’ at application startup… The master pages for my product pages aren’t generally too dynamic, so this wasn’t a significant limiting factor for me, but it may be for some.