Saturday, December 26, 2009

Windstream DSL service problem - Lincoln, NE

This is to document Windstream/Alltel's service problem at Lincoln Nebraska around Dec. 25, 2009. For now, I am using this blog to document the problem. Later I will post these to other board to raise the awareness of the poor quality of the Windstream/Alltel DSL service.

On both Dec. 25 and 26, the Windstream DSL service become un-acceptable around 6:30PM. My DSL modem shows that the DSL is constantly dropped and reconnected in a interval of every 2 minutes. I can't watch any Youtube videos since the line will be dropped before any video is done. My daughter can't even log into the Webkinz.

This does not seem to be caused by service outage or the circuit problem since in the early morning and even early afternoon, the connection is just fine. It seems what Windstream is trying to do is multiplex the usages based on either the time or the amount of data sent or received. In either case, the service provided is un-bearable. I can't see this is a step up from the old 56K modem service.

I encourage every Windstream user to post comments to this blog and, together, we can make our voice heard and force Windsteam to take actions. For citizen of Lincoln, this may give us a chance to let other service company to enter the Lincoln market.

Update Dec. 29, 2009: Time 18:10 - Same problem: slowdown, dis-connected frequently.
Update Dec. 30, 2009: Time 20:25 - Same problem: slowdown, dis-connected frequently.
Update Dec. 31, 2009: Time 06:44 - I can watch Youtube - Evening is the problem.
Update Dec. 31, 2009: Time 19:32 - This morning I got phone call from Windstream that they are sending people out to tweak the circuit. Later in the day, I spot Windstream tech that went to the post at my backyard. At this moment, every thing works beautifully.

Tuesday, October 20, 2009

Tag, path and weighted tag

Tags have been slowly replacing the path/folder we used to use to organize articles/emails ... etc.

Tags, in mathematic terms, can be considered based on set theory. An information item can be considered an element while tags establish sub-sets. You can, therefore, find information items that belong to the intersection of the 'tea' subset and the 'green' subset and, hopefully, some of them are about 'green tea'.

The paths/folders are more like ordered tuples. It can be thought of as giving weights to the leading/parent folders. For example, a path of Education/computer could describing an item for educational community but contains information about computer usages. On the other hand, Computer/Education could be describing an item that are mainly for IT audiences but is related to education.

In terms of classifying an information item, the path/folder approach can give additional info about and item than tags, assuming using the same keywords. On the flip side, of cause, the classifying with paths are more involved. The other problem with paths is that, even though it provide weights, the weights are either 1 or 0 for parent and child folder.

The other issue to consider is the use of phrases in addition to words for tagging. There are times that tag with words is not the same as tag with a phrase. This applies to the paths too!

A possible alternative to tag and path is the weighted tag/phrase. In addition to plan tags/phases we can give them weights. The searching mechanism can now using both tag and weights to provide better results. In addition to that, the weight to a phrase can be distributed to words in the phrase in calculating the searching weights.

Saturday, October 17, 2009

A note on ipfwadm spoof package protection

I was studying how to set up firewall rules for ipfwadm Linux command. In the process, I found some sample codes in filtering spoofed packets. However, I can't agree with the code.

Here is the code:

EXTERNNET="172.160.50.0/24"; # Subnetted external segment
ipfwadm -I -p accept
ipfwadm -I -a deny -V $IFINTERN -S $EXTERNNET -o

I thought about it and I think the code is in error. First of all, you can't defined an EXTERNNET. The EXTERNNET should be anything that is not your internal segment. But the ipfwadm syntax do not allow you to specify a negate or the supplement set. To over come this in this code setting, we should first allow the internal subnet:

ipfwadm -I -a accept -V $IFINTERN -S $INTERNNET -o

Then denied all others:

ipfwadm -I -a deny -V $IFINTERN -S $ANYWHERE -o

Of cause, depend on other rules, the deny statement may have to be moved toward the end so not to interfere with other rules.

Wednesday, October 14, 2009

A note of MySQL GUI and web hosting

For a long time, I used the phpMyAdmin to backup MySql databases used by my web site. Recently, the database grew bigger and the hosting company set time limits on how long a script can run. As a result of this, I can no longer backup my databases with phpMyAdmin.

The hosting company do provide the ability to do Remote MySql. By using the MySQL GUI program downloaded from here, I can do the backup from my desktop.

In my case, in order for me to connect to my database, I need to log into my hosting company and configure the database using Remote MySql to accept connections from the IP of my home machine. As with most of the ISP, my home machine do not have a static IP and I will need to find out that IP address first. Fortunately, if you just started the MySQLAdministrator.exe and attempt to connect, it will display an error with your current IP. But I still have to cross my finger and hope that during the connection, my IP address does not get changed.

Once you set the correct IP on the MySql server, you can connect to MySql server with your MySql/cpanel account. Once connected successfully to MySql, you can select backup, click new project, select the database to backup, set options and click Execute Backup Now. After a while, the program will prompt you for places to save your backup files.

Once you are done, you can do -File -Exit. Just to be on the safe side, you might like to disable that IP you enabled at the server.

On 20150607, MySQLAdministrator returns: user@h55.71.88.75.dynamic.ip.windstream.net  IP:75.88.71.55

Sunday, October 11, 2009

man page for ipautofw - FREESCO

I was working on setting up a Linux firewall for my home next work. I found the FREESCO distribution and installed without a problem. Even though this is my 2nd Linux box, I never really spend enough time to learn the Linux.

This time, I begin by trying to figure out how the firewall is initialized. Since the FREESCO 042 is based on Linux 2.0, I run into the problem that some of the man page is hard to find. After an afternoon on the Google, I found the man page for both
ipautofw and ipportfw. Both of them are at Debian.Org web site.

The man page for ipautofw is by Bartosz Feński at:
http://lists.debian.org/debian-l10n-english/2003/10/msg00012.html

The man page for ipportfw can be download from Debian's early release.

If anyone can convert the man page to html, it will be great appreciated.

+++++++++++++ begin ipautofw ++++++++++++++++++++++
.TH "ipautofw" "1" "980511" "Bartosz Fenski " "Executable programs or shell commands"
.SH NAME
ipautofw \- utility to automatically add masquerade entries.
.SH SYNOPSIS

.nf
.B ipautofw [\fIcommand\fP] [\fIoptions\fP]
.fi
.SH DESCRIPTION

\fBipautofw\fP allows Linux masquerading available in 2.0 series kernels
to work with programs such as RealAudio which don't send out a packet
on all ports they wish to receive on.

This program is useless for 2.2 and 2.4 series kernels.

.SH OPTIONS

The following commands and options are supported.
.
.SS Valid commands:
.TP 15
.B -A
add new autoforward entry.
.TP
.B -D
delete an autoforward entry.
.TP
.B -F
flush the autoforward table.
.PD
.SS Valid options:
.TP 15
.B -r \fItype\fP \fIlow\fP \fIhigh\fP
forwarding on ports \fIlow\fP to \fIhigh\fP using protocol \fItype\fP
(tcp or udp).
.TP
.B -h \fIhost\fP
IP address of \fIhost\fP to receive forwarded packets.
.TP
.B -d \fItype\fP \fIlow\fP \fIhigh\fP
specifies a set of ports which will not use the default high range (60000+)
masquerade port area.
.TP
.B -p \fItype\fP \fIvisible\fP \fIhost\fP:\fIhidden\fP
set up port bouncing from visible host port to masqueraded host \fIhost\fP on
port \fIhidden\fP, protocol \fItype\fP (currently not supported).
.TP
.B -c \fItype\fP \fIport\fP
specifies a control port and protocol.
.TP
.B -u
do \fBnot\fP require that a host connect within 15 seconds of triggering the
control port.
.TP
.B -i
insecure mode; any host many connect after implied by not using the -c option
or implied by using the -h option once the control port has been triggered.
.TP
.B -v
verbose mode.
.SH AUTHORS
\fBipautofw\fP has been written by Richard Lynch.
This man page was written by Bartosz Fenski for the
Debian GNU/Linux distribution (but it may be used by others).
+++++++++++++ end ipautofw ++++++++++++++++++

Friday, September 18, 2009

Database usability

Before we migrated to MS ACCESS 2007, we noticed that we could not sort queries by property/description in MS ACCESS 2007. This caused a big problem for us since a lot of our tasks are based on several queries and we try to keep them together by coding the description. Why we chose to do this in the first place? Well, as we all know that ACCESS isn't build to be a power house and there are times you have to combine several queries to achieve the task on hand. We did not chose to code the query name since changing the query name may break other queries.

Because of this, we began a project that stored all queries in a table and on top of that we build other facilities to link queries into tasks. In the process, we constructed a framework that we think can be a better user front end for databases.

The framework create a layer on top of the query so that we can assign a path to classify a query. This is like a link in the *nix file system. We can then build a tree structure that allows us to locate a query. We also build a task layer on top of the query so that we can combine couple of queries to create a task. On top the task, we also build a tree structure that allows us to organize tasks.

As mentioned earlier, we stored all our queries in a table, this gives us the ability to search the table and build dependency information between queries. We can also build the dependency info between queries and tasks. All of these helped us in maintaining our projects.

For example, one of our tasks is to import data from external sources. The data format and definition can change from year to year. The process/task to import the data can also change from year to year. Every year we did our best to import that data. However, from time to time, we found that we process the data incorrectly later. It become obvious that we need a good way to document the task we performed every year so that in case of error, we can trace back our steps.

With the system we have, we can create task alias/paths like:
Organization/DataType/DefintionCheck/2007
Organization/DataType/DataImport/2007
etc...
In the case that the data come in in the same format like last year, we can simply create a new link that pointed to the same task of last year. Otherwise we will create a new task and alias.

With the path/alias, we can also build a tree structure that make locating queries and tasks much easier.

At this point, the system is not finished yet and we are trying to make our system more universe so that we can adopt this system to, say, the OpenOffice database.

Thursday, September 17, 2009

A thought on EvntIn(Src, EvntId)

I was working on MS ACCESS to create event call backs between objects and devised this function signature. After thinking it through, I decided that this is really not a good way of handling event call backs.

Here's my reasoning:

The appropriation of this function is arguable concerning the implementation of the EvntId, if the source is a class that implements ours and other interfaces. Under this situation, it is true that
we can cast the Src and pass it to our parent object. But casting the EvntId requests a lot from a programming language.

Suppose a class is implementing several interfaces which include specifications of enumerated event IDs. When calling this function, how can that class decide what event Id to use? In order to resolve this, one can require the EventId be stored in the object. But this will raise another problem: What if another event happens before this function got time to process the event? This will lead to the requirement that the calling class must LOCK the event Id for calling this function while still allow other process to update the event Id. This, again, request a lot from a computer language.

If a language implemented the event by calling different call back function and, therefore, eliminated the need for passing the event Id, the issue of casting the event Id will not exist. Also if a language includes the call-back registration as part of the interface specification, the syntax will be OK since the event triggering class knows how to cast EvntId be passed to the call-back function.

In light of this, this function can only be implemented as a internal hub function that called by all event call back functions.

As a related thoughts, a event issuing object should never implement a variable that record the event Id since the value will never stick and using that variable for anything is questionable - queuing events is a different issue.

Tuesday, September 15, 2009

Idea: Browser web page highlighter

The idea is to create a program/plug-in so that a reader of a web page can highlight a paragraph or sentence or even type notes. This tool will provide a paper-pencil equivalent that allows reader to take notes right on the reading page.

The program/plug-in can require installation so that it can have permission to work on all tabs.

Given the dynamic nature of web pages, there will be challenges on how to implemented this. One possible solution is to save a static copy on the local machine and apply highlights to it. Once this is done, we can extend this to static pages on the web. Possible examples are the RFCs, the W3C URIs ... etc.

One possible solution for dynamic pages is to use the text-search to locate possible positions. The search may include parsing the XML.

In addition to the page highlighter, a program can monitor changes of the highlighted pages and report to user for maintenance.