Home > misc > Making your EMR work in resource-poor settings

Making your EMR work in resource-poor settings

Sat Oct 20 2012 02:00:00 GMT+0200 (Central European Summer Time)

Lots has been written about EMRs. Most of it for the 'developed world' and most of it indicates that there are some 'issues' in making it work. Now how can someone think this can possibly work in resource-poor settings? Settings that constantly attract classifications like under-staffed, under-trained, under-paid, under-motivated, under-equipped?

Well, among a few others Partners In Health tries. In my role as the Medical Informatics Manager for APZU in Malawi we took the open source medical record system OpenMRS and were looking for ways to adapt it. Finally we could scale up and keep the system running. Even with the ongoing decentralization of clinical services when we went from 0 to 12 distributed, remote clinics and from 0 to thousands of patient records. At that time we might have had the only working EMR capturing the population of a whole District and being compliant to the guidelines for HIV services defined by the Ministry of Health in Malawi.

First lesson: Go local

If you look for an EMR for high-volume clinics in Malawi, get in touch with Baobab Health. They have the most complete set of tools for the health care sector in Malawi and were a constant source of inspiration.

Second lesson: Go OpenMRS

If you still find gaps and the need for other tools, or you aren't in Malawi, check out OpenMRS. But be aware and don't see it as a ready-to-be-used system. Health care systems can be different, so are users and particular workflows. Therefore a one-size-fits-all system might fail. OpenMRS tries to address this by providing a framework for building your own EMR. But a framework doesn't necessarily address your problems, your workflows, or your user skills off the shelf. Be prepared to adapt it. Just like for the 'western world', efficient, easy-to-use, simple, error-avoiding interfaces are the key, they are for resource-constraint environments. Maybe even more so.

Third lesson: Know your users (and your 'stakeholders')

To make it short: The current UI of OpenMRS 1.x ... sucks. A big part of data entry is ... well ... data entry. So make this easy and fool-proof. Otherwise you have a perfect example of GIGO.

  • Use common sense: It is sometimes surprisingly uncommon.
  • Start small and stay focused: 10 half-solved problems are nothing compared to 1 solved one.
  • Make data entry error- and fool-proof.
  • Say 'no'. Double question requirements from 'stakeholders' (whoever they might be) as they often have a vision beyond the scope and possibilities of your environment.
  • Simplify the UI: Simple things can already help. Try to bring the number of user interactions close to the number of words you need to describe an action. If you need 25 mouse-clicks for an activity like 'transfer this patient to another clinic' in the system, then go back to point #1.

Fourth lesson: KISS

Well known and often referred too. But almost as many times (cluelessly) ignored. Throw away stuff were you (or someone else!) feel that it might be interesting after X years (with X anything greater than 1) to look at Y. Yes, famous question of 'numbers of goats living in a household': YAGNI!

Fifth lesson: Setting up a system initially is hard, but keep it running is even harder.

This does not only apply to an EMR, but already to a clinic itself. Often little things can decide about winning or loosing. And in almost all cases it is not about the big upfront design of the form, but how you ensure that is going to be used over time. And if it is not used, then it is useless. Especially in environments where there is so much of 'nothing'. Don't waste time and energy. There are too many variations of 'no plain paper available', 'no batteries for weight scale', 'no drugs for a certain disease' to address all of them upfront. If you design it, be part of it the first 6 months. If you can't or don't want to, don't design it!

All of this is based on a couple of years of experience living and working in rural Malawi. It might be totally different for other, yet similar places. But always take it 'one day at a time'.


Additional remarks:

  • admitting failure (‘failure report’)
  • shut up and listen (and observe!)
  • donor driven instead of driven by beneficiaries
  • ‘whatever it takes’ is one problem

Your very own SMS - Internet gateway with Arduino

Tue Oct 09 2012 02:00:00 GMT+0200 (Central European Summer Time)

There are plenty of SMS services on the web to link SMS and the Web together. However especially if you need a local SMS number in an unsupported country like Malawi or simply want to DIY, then this Arduino-based solution might be your right choice. For sure you could also go big-scale with your own full-blown SMS gateway like Kannel. But where is the tinkering fun?

Combining an Arduino Uno, a GSM/GPRS shield like the one from Seeedstudio, and an Ethernet shield is all you need besides a SIM card. Now simply stack everything together and upload this Sketch.

Process incoming SMS Depending on your requirements you might want to modify the code. E.g. one obvious case would be an SMS-to-Email forwarder, but for the typically free email service like gmail.com the Arduino lacks resources and power to process their TLS/SSL security. But other ways are possible. The code is already prepared to post an incoming text message right into a Google Spreadsheet with a way described on open-electronics. Or you could notify your own web app with a custom HTTP request. Or simply forward the incoming text message to another mobile number. Or what else can you think of?

As the SoftwareSerial library is used the code also inherits its default buffer size of 64 bytes. Not too much even in the context of SMS. Better patch the Arduino code (argh!) and increase it to something like 128 bytes as I've done. Still not the full size of a SMS, but enough for my purpose. Carefully check the documentation - it can save you days!

Process incoming HTTP requests For the opposite way of sending text messages to mobile phones from the Internet you could use a provider specific solution. E.g. some (many?) providers offer email addresses like @smsmail.eplus.de. Every incoming mail is forwarded to the corresponding text phone as a text message. Just check if you can find information about your specific provider. But in case where your provider doesn't provide this solution, or you need to find a generic way across different providers, or you want to do it via HTTP requests rather than emails, this Arduino Sketch can also be used.

As the sketch will run a little local HTTP server, you might need to change the current IP ( to fit your needs. Once the system is available in the local network you can use a simple HTTP post to send out a text message, e.g. with curl:

curl --data "number=&message=innovative message"

Of course you should protect the access to it as otherwise you might invite hitchhikers to misuse your airtime.

Feel free to have a look and use this code the way you want.

Note that the code uses the SimpleTimer library so make sure this is installed locally first.

Rooting stock Kindle Fire 6.3 for Dummies

Fri Apr 20 2012 02:00:00 GMT+0200 (Central European Summer Time)

So, it turned out that I eventually couldn't leave my hands off the Kindle Fire. Of course I can claim that I need this toy to be evaluated for my job. But after buying it with my German credit card I found out that it is heavily locked into the Amazon hemisphere. Too bad that they accept my German credit card to buy the device, but not to get any content or apps from the Amazon App Store. So there is of course the natural motivation to free this from all this stuff. This is f'ed up - you Mofos.

Unfortunately it seems that the rooting exercise is a pretty big mess. During my first night I thought I already totally bricked my Fire. However after tons of 'research' (fancy word for reading too many articles which only contain part of the truth) I finally got the real summary. This and a fresh new Windows system finally brought my Fire back to life. And if this doesn't help, a physical USB Factory cable like this one should almost always do the trick.

Now I can explore the unlocked Android world and it might even be that I eventually really use this as a low-cost, high-quality remote data collection tool for my job. If not, I have at least one more blog post...

pfSense: Self-registration for Captive Portal

Tue Feb 14 2012 01:00:00 GMT+0100 (Central European Standard Time)

Managing your users is good. But the work that comes with creating user accounts upfront is tedious and boring. At one point we got lost in trying to hook up each system manually to our WiFi. So we decided to outsource this to our users so that they have to register their devices by themselves.

Luckily pfSense proves to be extremely flexible, so with a custom portal page and some additional scripts we are able to get the important information we need. We ask the user to provide

  • User
  • Email address (to get in touch with the user) and
  • Accept our Acceptable use policy.

From there the system automatically detects

  • MAC address (for device identification)
  • Initial IP during registration (the subnet from where the users connects tells us roughly from which geographical area the devices is connected to)
  • Date of registration
  • Hostname

Every time a new devices is connected to the network, the system redirects the very first HTTP request to our custom portal page. After entering the required fields and hitting 'Register' the system automatically detects MAC address and system hostname and creates a new user in our FreeRADIUS installation. If successful, the user is granted access to the network. If the system connects again, it uses RADIUS MAC authentication to see whther the user is already registered. If yes, then access is permitted. If not, the user is redirected to the portal page again.

(Note: Using solely the MAC address makes the system vulnerable to spoofing attacks. However our users typically don't have this knowledge. At least not yet.)

During this self-signup, the user is only granted access with restricted traffic limits (we make use of pfSense' WISPr-Bandwidth-Max-Down and WISPr-Bandwidth-Max-Up capability with low initial values). From there the admins can promote the system to higher traffic caps if found eligible.

The whole configuration/deployment process is a little bit more complex. If someone wants to dive deep into it, make sure to check out our project page.

pfSense: Shows 'Users last connected' to Captive Portal

Tue Feb 07 2012 01:00:00 GMT+0100 (Central European Standard Time)

Using pfSense with the built-in FreeRADIUS can give you quite a lot of information; they are just not always visible through the Web UI.

For instance if Radius logging is turned on you can keep track of all Captive Portal sessions by accessing the log files. This is particular useful when the users have the ability to create their own accounts on the fly through a custom portal page based on their MAC addresses. But you might want to clean old and unused accounts once in a while.

In order to spot accounts that have been inactive for some time, you need to know who connected when for the last time. With shell access, simply copy and invoke this script. This compiles a CSV list of all users ever registered with their MAC addresses together with the last time they have been connected through the Captive Portal. Import the CSV into Excel, filter and sort by the last connected column to see which accounts are ready for removal.

The result looks like this:


(Note that part of the above dump has some custom information as it is tight to they way we use pfSense with a self-register capability for new users. But it should be straight forward to customize this.)

It would be simple to do this automatically (e.g. delete every account not connected in the last 3 months), but as I have some VIP users that I don't want to clear, I just do this once in a while manually. Additionally it could be run as a cronjob every now and then and I guess you could automatically publish it through a web page or mail it to someone. Let me know if you did this, then I can steal it from you ,)

pfSense: Sending emails through gmail

Wed Feb 01 2012 01:00:00 GMT+0100 (Central European Standard Time)

It seems troublesome to send email especially through gmail accounts from *nix systems. Using pfSense as our Captive Portal box running on top of FreeBSD is no exception. So that's what we did to get pfSense sending us emails through shell scripts.

I've tried a couple of things, but eventually sticked to a perl module (including the BSD packages mailx and msmtp), but they all didn't work in one way or another. I came pretty far, but at the end figured out that TLS/SSL support is not build-in. And compiling the packages on the pfSense box seemed not advisable. After all it is a firewall.

To install it, simply invoke this from the shell:

pkg_add -r p5-Net-SMTP-TLS

In case you have a sligthly outdated pfSense installation like I do and this command fails, you might need to tune the package repository a little bit.

setenv PACKAGESITE ftp://ftp-archive.freebsd.org/pub/FreeBSD-Archive/old-releases/i386/8.1-RELEASE/packages/Latest/

Afterwards use this script as an example on how to send mails through the perl module.

Don't forget to put your gmail password in a file called send_gmail_config.txt (just the password, nothing else) and well protect it.

Shell perls

Sun Jan 29 2012 01:00:00 GMT+0100 (Central European Standard Time)

As I always forget them, I just put them down right now right here (they were sitting for too long in my Drafts folder). And I might update them as I go.

Replace multiple chars

sed "s/=ABC=//g"

Grep for multiple words

I know, I know. This shouldn't be here, but I kept on forgetting it...

egrep "FULL|bytes|speedup" snapback.log

Calculate size of directories

du --max-depth=1 -h .

Not sure what I did with this, but it seems pretty important...

NUMBER=$[ ( $RANDOM % 100 ) + 1 ] 
cat servers | while read line; do ./collect_authorized_keys.sh $line done; done 
awk -F":" '{ print $1 }' /etc/passwd 
cat tt | while read line; do export NUMBER=$[$NUMBER + $line]; echo $NUMBER total size > s1; done;

Replacing newlines

My first thought about replacing newlines in files would have been sed, but it is not. tr is the way to go:

cat file | tr 'n' ',' 

To not only replace line endings, but also text before or after them, give this a try:

sed -n '1h;2,$H;${g;s/n/,/g;p}' <file> 

Simulate system load

dd if=/dev/zero bs=100M | gzip | gzip -d | gzip | gzip -d | gzip | gzip -d > /dev/null &amp; 

Howto kill all child processes of a (bash) process

Killing a single process is easy; killing multiple processes also. But only if you know all of the PIDs. If you need to kill a process including all children (sub-processes), try this one:

ps -o pid= --ppid $PID_TO_KILL | xargs kill 

(Note that there are a gazillion solutions out there, but they all seem to be a bit over-complicated. Or I'm missing something..)

Check if a process is running

kill -0 pid 2>/dev/null 
echo $? 

pfSense: Lessons learned

Sun Jan 29 2012 01:00:00 GMT+0100 (Central European Standard Time)

In my current role as the 'IT guy' for Partners In Health I'm also managing the whole IT including our networks in Malawi (note: It is only a rumor that 'IT guy' translates to everything that has a power plug...). We not only provide Internet access to our employees, but also for the government including the local Ministry of Health. As our project has grown a lot in the last few years, so did the numbers of computers that are connected to the network.

Currently we are have connect 20+ access points and with this roughly ~100 devices are connected to the network every day (designed partially on top of this). And all of them squeeze through our tiny satellite link. We came a long way with adding network management tools and traffic shaping to manage the scarce bandwidth better, but at the end we also depend on the fairness of the users: If someone (or his/her system) is misbehaving, it impacts everyone else. With this it is crucial to know who is using the network and how: Welcome to the world of pfSense.

Throughout the upcoming months some of the important lessons learned and findings are shared here. This will include topics like

With all this I guess we may run one of the biggest (if not _the_ biggest) freely available public hotspot in Malawi. I like my work in the low-resource settings...

Calculate MySQL database size

Fri Jul 08 2011 02:00:00 GMT+0200 (Central European Summer Time)

Not sure anymore where I found this, but this is a nice script to see which MySQL tables take how much space.

# Per Schema Queries 
SET @schema = IFNULL(@schema,DATABASE());

# One Line Schema Summary 
SELECT table_schema, SUM(data_length+index_length)/1024/1024 AS total_mb, SUM(data_length)/1024/1024 AS data_mb, SUM(index_length)/1024/1024 AS index_mb, COUNT(*) AS tables, CURDATE() AS today FROM information_schema.tables WHERE table_schema=@schema GROUP BY table_schema;

# Schema Engine/Collation Summary 
SELECT table_schema,engine,table_collation, COUNT(*) AS tables FROM information_schema.tables WHERE table_schema=@schema GROUP BY table_schema,engine,table_collation;

# Schema Table Usage 
SELECT table_schema,table_name,engine,row_format, table_rows, avg_row_length, (data_length+index_length)/1024/1024 as total_mb, (data_length)/1024/1024 as data_mb, (index_length)/1024/1024 as index_mb, CURDATE() AS today FROM information_schema.tables WHERE table_schema=@schema ORDER BY 7 DESC;

# Schema Table BLOB/TEXT Usage 
select table_schema,table_name,column_name,data_type from information_schema.columns where table_schema= @schema and ( data_type LIKE '%TEXT' OR data_type like '%BLOB');
set @schema = NULL;

WiFi Performance FAQ

Mon Apr 18 2011 02:00:00 GMT+0200 (Central European Summer Time)

I'm by no means an expert in WiFi network planning and installation, but over the past year I have collected some knowledge and best guesses on how things work in terms of performance. Here is an open call for everyone to correct my views and not so obvious elements that impact the speed of your wireless network.

Which 802.x standards are relevant? - 11a on 5 GHz; almost unused - 11b on 2.4 GHz; nominal up to 11 Mbit/s, effectively max 600 Kbyte/sec - 11g on 2.4 GHz; up to 54 Mbit/s, effectively max 3 Mbyte/sec - 11n on 2.4 GHz and 5 GHz; some devices only follow the draft spec and not the final one (impact?)

Which standards has the best coverage/signal range? Unclear. In general 5 GHz signals have a reduced signal range due to its higher frequency, but as 11n sends with higher power, the standard claims that the range is extended compared to 11b/11g.

What are sources for Non-WiFi interference? Technically everything in the license-free 2.4 GHz and 5 GHz frequency bands like Bluetooth, Microwaves, Babyphones, Wireless Video Transmission adapters, Amateur radio, Walkie-Talkies.

Is WiFi using a shared medium? Yes, kind of similar to a BNC or "hub-ed" ethernet every participant needs to share the same medium. Therefore the more traffic is seen on the medium or the more clients are using it, the more likely are collisions and therefore re-transmissions. Minimizing shared access to this shared medium is one element of improving WiFi network performance. In other words wireless is a shared medium, meaning that all clients and neighboring APs compete for the same limited bandwidth, in addition, each client’s speed varies depending on the protocol it is running (802.11 a/b/g/n) and the signal strength, interference and noise it is experiencing.

Which channels for 11b/11g are available? In the US 1 - 11; in Europe 1 - 13; in Japan 1 - 14 (14 only for 11b, note that channel 14 is not linear therefore channel 10 and 14 are completely non-overlapping). The availability of different channels will depend on the device and maybe the country setting. So channels 12+ are not guaranteed to be fully functional. However it might be worthwhile to configure backbone links to this unusual channels (even though it might be against local law). This leaves 4 channels (instead of the typical 1, 6, 11), namely 1, 6, 10, and 14 as (almost) non-overlapping channels.

Airtime consumption / utilization A wireless frame transmitted to or from a client connected at a low data rate may utilize 10 milliseconds of airtime, whereas it may take only 100 microseconds for a client connected at a high data rate. Even though the high speed client could have sent 100 frames in the time the slow client takes to send one frame, the fast client still has to compete fairly for the airtime on a frame by frame basis, so it spends most of its time sitting idly waiting for the slow client to finish so it can have another chance to transmit. Unfortunately this means that a single low speed client can slow down all of the other clients on the WLAN.

What is the impact of client connected with poor signal strength? As explained with the airtime consumption slow clients consume more airtime to transfer a given amount of data, leaving less airtime for other clients, decreasing network capacity and significantly degrading the performance of all clients on the network.

What is a poor signal and how to detect it?

RSSI: over -50 perfect, below -85 unusable

Noise: from 0 bad over 90 very good to -120 none

SNR: higher is better 25 min requred for full 54mbps link 40 dB Excellent signal strength 25-40 dB Very good signal s 15-25 dB Low signal 10-15 dB Very low signal 5-10 dB No signal strength

For the Voice you need a minimum -25 dB

In OS X option-mouseclick on WiFi icon to see stats of connected network. Open Performance windows of Wireless Diagnostics to track signal strength over time.

What is the Basic Rate? Depending on client device and signal strength the AP and client are handshaking about the maximum available performance. The farther away a client is from the AP (read the weaker the signal), the lower is the Basic Rate. 802.11g supports rates of 6, 9, 12, 18, 24, 36, 48, 54 in addition to the 802.11b rates of 1, 2, 5.5 and 11Mbps. These can be seen e.g. with inSSIDer. A client can fall back to lowest basic rate to save energy or to increase link stability.

Will one client with a low basic rate slow down other clients? Depends. If the client is not busy than there shouldn't be a big impact. But if the far away client is busy transmitting and receiving many connection drops and re-transmissions, the whole shared medium air should be congested. Additionally the latency should be higher, so that errors are detected later. In these cases even closer clients with a high Basic rate should suffer.

What is the maximum number of concurrent connected clients to one AP? Numbers seem to vary quite a bit. There are some Enterprise-devices which limit the number of connected clients to 10. Consumer APs seem to be more open, but the performance will suffer as all of them are talking on the same channel. Looks like above 20 is unreasonable.

What happens if clients with different 802.11 standards are mixed on one AP? If 11b clients are connected to a 11b/11g AP point or 11g clients to a 11g/11n AP it will decrease the performance. Statements vary from "just a little bit for everyone" to "bigger performance penalty" due to the compatibility mode that one AP is using for these mixed cases. It seems like if possible the mixed mode should be avoided, e.g. if still legacy 1b clients are present (most likely the case in our environments), than a dedicated AP 11b only could overcome this.

What is the best alignment of external antennas for indoor APs? Sometimes APs have up to 3 external antennas that can be aligned in different angles. Facing them in all three room axes is best to increase signal strength and to reduce interference. If there are less than 3 (up to none) antennas, then they will be molded inside of the case. Knowing its position might help with mounting or placing such an AP.

Can one Wifi client bring down an AP? To a good degree: yes. If the client is misbehaving (accidentally though wrong configs or drivers or purposely e.g. by trying to break into encryption) it can flood the shared medium air with packets. This way there will be many collision with other clients and therefore packet losses and re-transmissions. This way one client can monopolize the whole network segment.

What impact has a client-to-client communication? As every communication goes through the AP, the sending client first needs to send the data, which is then repeated by the AP for the receiving client. Therefore the same message goes over the air twice and leaving only half of the available throughput.

Hiding SSIDs Hiding SSIDs will not improve security as special WiFi clients (I refer to them as promiscuous WiFi stacks, but I'm not sure whether this is technical true) are still able to sniff transmissions within hidden SSID and extract the SSID from there. But hiding SSIDs might get rid of the beacon announcements at the basic rate. Additionally if this is used for backbone links they don't indicate the availability of an AP to ordinary users if there is no for them. On the other side a hidden SSID will not be detected by survey tools like inSSIDer and therefore make the channel planning less obvious: If your neighbor doesn't see your SSID and channel, he might be not aware of a collision.

How to test real-world WiFi speed? iperf daemon running on a server and iperf client on a wireless client measures the "real-world" IP performance.

Mixing encryption Some AP offer multiple encryption methods (like WPA2/AES and WPA2/TKIP). Even though it is supposed to work seamlessly there seem to be sometimes performance problems in the wild; especially with 11n networks. So the rule of thumb should be to not allow mixed encryption. As TKIP needs to be seen as almost broken anyways, switching to WPA2/TKIP for at least 11g networks is a good advice.

Which features offer "enterprisey" components? - Centrally managed through a WiFi controller - VoIP support through QoS - Roaming between multiple AP (internal roaming); helpful especially for mobile VoIP phones - Load Balancing - Ability to run AP with reduced power. This can be used to place the APs a lot closer together (higher density) while still avoiding radio interference among access points, resulting in more consistent coverage

What is Client Isolation (sometimes called AP isolation)? When activated an AP is blocking all client-to-client communication in his wireless network segment (is done on layer 2 through MAC addresses). Even though it seems common understanding that this doesn't have any impact on performance, it might not be the whole truth. Client-to-client communication is always happening with half of the max speed as it always goes through the AP: First the client needs to send out his message, the AP picks it up and re-distributes it in the wireless segment. Thus the same message goes over the air twice. Now for general broadcasts and Windows shares this might happen more often than expected and for this case AP isolation should block and therefore eliminate unnecessary traffic resulting in higher performance. Unsure: Will this help against tools like Firesheep in unprotected networks?

Which tools are available to troubleshoot WiFi problems? - inSSIDer - GPS device - Others: NetStumpler, EarthStumpler, KnsGem, Kismet - External scanners (necessary if Non-WiFi interference should be detected)

What are Wireless repeaters or Wireless Distribution systems (WDS)? Although the details vary both technologies can be used to increase the coverage of a WiFi area. In a nutshell they pick up a WiFi signal from another AP and re-distributes it into its area. Usually they operate (they have to?) with the same settings for channel and encryption and could also offer a roaming capability. The drawback is that it reduces the maximum speed significantly as the signal will be re-send as many times as there are repeaters or WDS with the same settings (must be so, but I could only find reference to reduce the speed once by 50%). So they can be used to easily extend the coverage, but need to be carefully chosen to not introduce more bottlenecks.

Are multicasts in WiFi settings different than in wired settings? From a high point of view, no. But as an AP needs to make sure that every connected client is able to receive the multicast (same for broadcasts?), it will send out multicast packets with the lowest basic rate configured for the AP. And here the airtime consumption is (much) higher (leaving lesser room for other packets) and the available maximum throughput is capped at the basic rate (making HD video broadcasting impossible).

What is a "hidden node"? Two Wireless clients can be connected from the opposite ends of the coverage area to an AP point. Both see the AP, but are not able to see each other. This is one of the reasons why every traffic always goes through the AP.

What impact has the Beacon interval? Every AP announces its presence and configurational details in the interval of the beacon. Typically every minute a broadcast is send with the lowest basic rate so that clients can pick up the details. For static backbone link there is no need to constantly announces their details so increasing the interval will reduce the number of broadcast. Unsure if turning out the SSID broadcast also eliminates the beacon at all.

What is the ACK Timeout (Sensitivity Range)? (todo)

Conclusions Keep WiFi signal locally wherever possible Don't give client access to wireless backbone links; separate backbone from enduser connections


May 11th, 2011 at 17:48 | #1Reply | Quote

What impact has the Polarization?

Seems like usually V-Pol (vertical polarization) is used. Although I could find some talk about H-Pol (horizontal polarization) for high density areas. For Point-to-Point you can use both as long as both endpoints are configured the same way. For a forest area between the links, H-Pol may work slightly better.


May 16th, 2011 at 08:33 | #2Reply | Quote

Order of WiFi signals to connect to

Looks like most Operating Systems treat the latest configured WiFi network with the highest priority. This means that it tries to connect to WiFi networks in reverse order of it’s first configuration; not necessarily to the ones with best signals strength/coverage. When having a few high power/long distance antennas and multiple local Access Point could lead to the point where even though a local Access Point with good signal is available, the system tries to connect to the low speed (due to above reasons), weak signal long distance antennas. Align the order to the ones with the most local signal first.


July 24th, 2011 at 11:10 | #3Reply | Quote


Wi-Fi 11b uses Direct Sequence Spread Spectrum (DSSS) (http://en.wikipedia.org/wiki/Direct-sequence_spread_spectrum). Its carrier does not hop or change frequency and remains centered on one channel that is 22 MHz-wide. While there is room for 11 overlapping channels in this 83 MHz-wide band, there is only room for three non-overlapping channels. Thus there can be no more than three different Wi-Fi networks operating in close proximity to one another.”

WiFi 11g uses OFDM (http://en.wikipedia.org/wiki/OFDM) for 54 Mbps and DSSS for 11 Mbps and is designed to reduce interference.

Question: If 11g falls back to speed 11 Mpbs and below, does it also move back to DSSS?


July 24th, 2011 at 11:11 | #4Reply | Quote

Bluetooth Interference

Bluetooth use FHSS (frequency-hopping spread spectrum) http://en.wikipedia.org/wiki/Frequency-hopping_spread_spectrum as an AFH (adaptive frequency hopping) technology to ensure that anti-interference robustness in the 2.4 Hz band. All the 79.1 channel with each 1 Mhz hopping 1,600 times per second.

Comments are closed.