CAT | Misc
Here is a list of the items I’ve found on Amazon, that are either ridiculous, or just unexpected.
- Live Ladybugs, Approximately 1,500 Count – Yes- real-life lady bugs.
- Heinz Spotted Dick Sponge Pudding, 9.4-Ounce Cans (Pack of 6) – Pretty sure this isn’t what it says, but still was a shocker for me.
- Vaginal Specula Disposable, Pack/10 – Who needs these but doctors?
- Male Testicular Exam Model Anatomy – Strange, do people actually buy these?
- Uranium Ore – Unfortunately for me, I will not be able to order this for my flight to Portland next week, as they are out of stock.
- Wenger 16999 Giant Swiss Army Knife – This has to be the most insane Swiss army knife I’ve seen.
- Tuscan Whole Milk, 1 Gallon, 128 fl oz – Ok, think this would arrive sour?
- Wolf Urine Lure-32 oz – This is likely for hunting, but really?
- Ninja Folding Grappling Hook w/ Black Finish & Rope, Functional – Not too surprising, but interesting at that!
- Borat Mankini – Been wondering where I could find one of these…
- Westminster Butt Face Soap – Why didn’t I think of this?
amazon · funny · unexpected · weird
VIA Rail West Corridor Commuters
c/o Debra Graham
416-314-7171
P.O. Box 8116, Station A
Montreal, Quebec
H3C 3N3
June 20, 2011
Attention:
VIA RAIL BOARD OF DIRECTORS
Thomas A. Bennett
Marc Laliberté (President and CEO)
France Bilodeau
Jean-Martin Masse
Jeffrey R. Clarke
Donald Mutch
Denis Durand
Anthony Perl
Angela Ferrante
Paul G. Smith (Chair)
David Hoff
Eric Stefanson
Wendy King
William M. Wheatley
The majority of us have been commuting on VIA Rail for many years because VIA has offered us a safe, comfortable, efficient and eco-friendly way to get to work. Over the years, larger numbers of commuters have discovered your service and adopted it as a part of their daily routine. Three to four cars of passengers board every day between London, Woodstock and Brantford. Using the average commuter rate and assuming full-time travel (5 days per week and four weeks annual vacation), the average commuter spends a minimum of approximately $8500 on tickets (HST included) and many purchase snacks and beverages daily. Total revenues from London/Woodstock/Brantford/Aldershot alone (estimating 150 passengers boarding regularly) account for well over a million dollars. This revenue must have been valuable during the recent recession when international travel faded and operating costs of an aging system increased. Since ridership along the Quebec-Ontario corridor accounts for 80% of your clientele and 75% of your revenue, commuters must have contributed greatly to the business case that saw you receive $923 million from the federal government for modernization of the Ontario-Quebec corridor. VIA is always receptive to discussions with commuters when concerns arise and we hope that it is in this same spirit, we can engage you today to discuss a concern.
Recently , VIA announced the option to purchase commuter passes online and offered a 10% discount as an introductory offer. Currently, on the West corridor, only commuters from London have this option. However, we understand that commuters from the East have purchased passes using this service only to learn that they still had to go to the station and receive the tickets from a VIA service desk (not able to use the kiosk either). The “catch” to this new pass is that commuters will not hold the open-ended tickets that allow them to board trains over a one-month period without specifying a date, train number and time for their ride. Not only that but while booking reserved seats, they were told that trains they regularly travelled were “full” and that they would have to travel later. While reserved seating may seem like the only rational approach to understanding resource allocation, commuters travel with the explicit understanding that they will stand if full-price ticket holders require a seat. Sales personnel do not acknowledge this rule when booking seats. Quite often, when reservation staff advises that the train is full, there are many empty seats. Booking and relying on a computerized count does not work. Seasonal trending of ridership may be more fiscally useful.
The other “glitch” with this approach is that if a commuter has to work late, they have to know in advance, change the booking at least an hour prior to the train departure and try to rebook a seat on a later train. If the next available train is full, the commuter may find themselves arriving home at midnight or stranded in Toronto overnight. This is very problematic.
Another concern is that because the cost of a monthly VIA pass is not economical, commuters purchase the “commuter” tickets and are finding that they cannot claim their costs as personal tax credits. The monthly VIA commuter pass for Brantford to Toronto costs over 5% more than two 20 ride tickets. (E.g. Brantford: VIA monthly commuter pass prior to HST: $682 while 2 – 20 ride tickets prior to HST: $648.) This applies also to the Woodstock and London commuters.
In keeping with the VIA Rail Mission, Vision and guiding principles, you aim to provide excellent customer service. Your front–line staff work hard to accomplish these goals and we appreciate their service. We the undersigned hope you will receive these concerns and revisit your policies for the new e-service commuter pass and monthly pass pricing. Specifically we ask the following:
- keep the open-ended tickets (no reservations),
- make the price of the monthly pass the same as two 20 ride packets
- negotiate with the Ministry of Finance to create a ticketing system that will be acceptable for tax-credit submission.
- investigate extending the Presto pass for VIA commuters on the London-Toronto corridor
- Include us in your communications plan for changes to service and/or policies that impact our ridership.
Please reply to our contact: Debra Graham at debra.graham@sympatico.ca by June 29th, 2011.
Thank you,
VIA Commuters
London-Woodstock-Brantford
cc:
The Honourable Denis Lebel, Federal Minister of Transportation
Phil McColeman, MP Brant
Dave MacKenzie, MP Oxford
Susan Truppe, MP London North Centre
Ed Holder, MP London West
Irene Mathyssen, MP London-Fanshawe
Brantford Expositor
London Free Press
Woodstock Sentinel Review
—
Here is the original Petition sent to VIA.
Petition – VIA Passengers (Toronto, Ontario to London, Ontario)
canada · commuters · commuting · london · toronto · via rail
24
Five books to help you become a better Software Engineer.
7 Comments · Posted by admin in Misc
I’ve interviewed for several high-level engineering positions over the last 18 years, from Facebook to Google, to Microsoft. I have learned two very important things during the process…
- My wife will simply not move to California – her fear is that it will fall into the Pacific Ocean. Regardless of what I think about this, it simply means no Hot Start-ups in Silicon Valley for me.
- I’ve found that the more expertise and knowledge you have, the higher the chances that offer come through – with that signing bonus!
Looking for a job or not, I feel it’s important not only to to stay on top of the latest technology, but also understand the underlying sciences that allow such things to exist. In order for this to happen, you either need to have someone teach you the foundations or learn them yourself. I’ve managed to accomplish this with a balance of both.
There are two things I do everyday. I trawl iTunes University for Computer Engineering courses I have missed, if I am lucky enough to find one that I’ve missed, or haven’t watched in a while, I’ll download and watch it on my iPhone during my commuting hours. The second, is search Amazon for books that I’ve not read, but that are recommended to me based on my previous purchases.
Here is my ultimate list of books for every “Rock Star” programmer. The list is unsorted, and in no particular order. I’ve only chosen five from the ten I was going to list, reading and understanding these will have the other five books find you in your quest to become the best you can be.
Here are five books you should read, and understand:
1) “Introduction to Algorithms” by Cormen, Leiserson, Rivest, and Stein. This book covers the basis every engineer should know. A lot of the algorithms covered in this book, are possible interview questions. If you don’t have them come up in an interview, they certainly make for a nice toolset of knowledge.
2) “Art of Computer Programming” by Donald E. Knuth. I’ve not read this from cover-to-cover, and in most cases have used it as a reference. This series of books is the most valuable you could have in your book collection. If you reference these, and absorb the information, you will be an asset to anyone whom you work with. Going back and reading over this every few years helps me solve some longer standing problems I’ve faced.
3) “The Pragmatic Programmer” by Hunt and Thomas. This book is one that will surprise you. It’s not the standard rule-set for software engineering books. Contains knowledge, humor, and mass educational goodness!
4) “Concrete Mathematics, a Foundation for Computer Science” by Graham, Knuth and Patashnik. This is the most beautifully written book I’ve read in Computer Science to date. You need to read chapters 1,2,3,5,7 and 9 minimum, not sure what I’d have done in certain situations of my career without the knowledge of this book.
5) “Design Patterns: Elements of Reusable Object-Oriented Software” by Gamma, Helm, Johnson and Vlissides. This book is literally two-pounds valuable knowledge that every Software Engineer needs to grasp, understand and use.
Feel free to leave your comments, book recommendations and thoughts!
Bettering your self. · Computer Software · Interview · RockStar Programmer · Software Engineering
UNCLASSIFIED
The IIA (International Intelligence Agency) is a real life multi-player game that gives players a real life, real feel, “off computer” role playing game. Players will not know about the actual game play, until they are engaged in the actual game (all missions outline any dangers prior to acceptance, and are always optional). At most the physical danger levels are about the same as hiking on a forest trail, no more.
Membership is the first part of the game, and to become a member of the IIA, you’ll do a bit of leg work, and research – this will give you an idea of what the game is about. Obtaining membership will be your first mission. To get our members involved, we try to integrate your hobbies and interests. If you don’t have a hobby, chances are, you will find a new one through this game. You may need to purchase (or find) cheap electronic parts, envelopes, printer paper, or even small containers. Most missions will cost you nothing, or could cost you up to $10.00 (it all depends on how involved you want to be). Some members may assemble electronic parts, deliver packages, or photograph mission targets. One of our members frequently uses his R/C airplane for UAV aerial photographs… R/C UAV anyone?
Membership cost is very minimal, it will cost you $5.00 US to get you started (there are currently no membership fees), this will cover basic postal costs, and any membership material you’d receive. That’s it. Because of the nature of this game, this is all of the information we will provide up front. This is also the only UNCLASSIFIED document available for IIA, the rest is CLASSIFIED, and for MEMBERS OF IIA ONLY.
Are you ready to join a real-life game, that will challenge and excite you? Perhaps even get you some of that exercise you need?
To get your membership information, follow the sign-up link below:
$5.00 US – Covers postage and any additional materials
Your information will never be shared with any other members, other than your call-name. Members may cross paths, but would be aware of such information prior to mission acceptance.
This page will be deleted March 31st, 2011 – after which membership will be available only through exclusive invitation.
- WhiteRaven [01.25.2011]
agency · intelligence agency · massive multi player real life game · spy
19
friendherd.com – Open Source, Secure, Revenue Free
1 Comment · Posted by admin in Misc, New Start-up
My name is Mike – I’m married, and have 3 children, and a teenager who uses facebook daily, and know all of the privacy concerns of a Parent, not including my own privacy concerns of course. I’m a 36 year old, Senior Software Engineer, and have been programming since I was 8 years old.
I was intending on approaching Kickstarter, until I realized that you needed an address in the USA as well as a Bank Account. I also wondered how I could use it, being a Canadian Citizen. I’m pretty sure I am out of luck, however, it will not stop me from my goal to raise enough funding to get my idea into play.
Funding Goal: $15,000.00, time line to reach this goal is less than 2 months from this day (August 19th, 2010 to October 1st 2010). I intend on iteration #1 coming out shortly after the movie about facebook “Social Network” comes out.
Project Description
I want to create a social platform for people who are interested in sharing their information with others. There are currently many sites out there that currently do this, such as Facebook, and the upcoming Diaspora. It can be done much better.
Although Diaspora is looking to fix all of the Privacy related problems Facebook has today, many users simply don’t want to install any software to access a social site, nor would a larger percentage of the users even want to pay for hosting their information. I know my Aunt, and Grandmother wouldn’t be able to do this, yet they are on Facebook today. I believe a site like Facebook can be successful with users, and fix all of the privacy related problems we see today, without the need for a Diaspora like network.
A site like Facebook doesn’t have to be complicated, it’s source code just needs to be open, and the data needs to be hosted in a secure environment. Privacy would be paramount, and default options on a new account would have to be set to paranoid. Information must remain the property of the end user, and follow the rules of the users consent. This service would forever remain free, and open source, however, it would need to rely on donations, or sponsors without any corporate ‘hitches’, or advertising promises.
The $15,000.00 I am asking for, would be to pay for the initial co-location hosting, some website design (graphics and site design), as well as used servers. The company I currently am employed with is willing to sell me blade servers for $500.00 per server (fully loaded with 20 blades per server). The rest will be used as listed below, with the remaining to be banked in an interest bearing account to cover any replacement hardware, continued hosting, or any smaller unexpected costs.
Here is the breakdown for the money I am looking for:
4 x Blade Servers = $2,000.00 (used, but great condition)
Server Enclosure = $1,000.00
2 Rack-mount Uninteruptable Power Supplies = $1,000.00
1 Years Hosting & Bandwidth = $6,000.00
Logo & Graphical Site Design = $1,000.00
The total amount of money for equipment would account for approximately $4,000.00, I am going to buy what I can on eBay, to get the most value for the dollar. I intend on hosting the servers at a secure facility, which I am getting an insane deal on; an entire rack space for approximately $500.00/month as we have some finer details to work-out. The hosting accounts for $6,000.00.
There is no money set aside for the development of the project, as I will be releasing iteration #1 shortly after everything is setup, and open sourcing the code to allow the community to help contribute.
One could argue that this could be done on the Cloud, for much cheaper, however, I prefer full control of where the data resides, and how it is being used. The only way to insure this, is to keep it on a highly secure system, where the data can be processed without worry of data being accessed by Cloud Employees, in their debugging processes, etc.
Ongoing costs, after the first year, will be covered on a donation basis much like Wikipedia does. There will be no revenue incentive to the site. The site will simply continue to grow, and allow people to communicate with one another, without the corporate hiccups, or privacy concerns.
Project Rewards
See below the donation button below.
Insufficient Funds
If for some reason, funding comes up short of my goal, I’ll do the best with what I have (perhaps cut out hardware, or reduce our hosting footprint).
Finishing up
I have certainly not covered everything here, and perhaps may have missed a few things. If you have any questions, please don’t hesitate to leave them below.
If you would like to donate, follow the Paypal button below.
I created a PHP class that allows key storage (insert/update/delete/retrieve) that does not use a database, or a tool such as memcache.
If you can use memcache, do so, this was something I put together to use on a system in which I couldn’t use memcache. A simpler file cache may have been more appropriate, bu I prefer that all my key values stay in one file.
It could use a lot of optimizations, however, this is my first working version. It’s GPL’d so, if there is anyone that has a use for it, be my guest!
Usage:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 | include 'cerealDb.php'; $x->collectionBaseDir('/tmp'); $x->useCollection('testing.cdb'); $x->insert("test","1234567890"); echo $x->read("test")."\n"; $x->update("test","0987654321"); echo $x->read("test")."\n"; $x->delete("test"); echo $x->read("test")."\n"; /** * cerealDb, Serialized Array Storage * @author Mike Curry * @version 1.0 * * Copyright (C) 2010 Mike Curry * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2 of the License, or any later * version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General * Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ // CerealDb - Serialized array storage Class cerealDb { // location of storage private $_collectionBaseDir; private $_collectionName; private $_lastWriteDate; public $data = array(); public function __construct() { } public function collectionBaseDir($directory) { if (!is_dir($directory)) { echo $directory."\n"; return false; } if (substr($directory, -1, 1) != DIRECTORY_SEPARATOR) { $directory .= DIRECTORY_SEPARATOR; } $this->_collectionBaseDir = $directory; return true; } public function useCollection($collection) { $this->_collectionName = trim($collection); $file = $this->_collectionBaseDir.$collection; // open for write, to create if missing if ($fhandle = fopen($file, 'a+')) { if (flock($fhandle, LOCK_EX)) { if (filesize($file) > 0) { $data = fread($fhandle, filesize($file)); if (strlen($data)) { $this->data = unserialize($data); } else { $this->data = array(); } } flock($fhandle, LOCK_UN); // release the lock } fclose($fhandle); $this->_lastWriteDate = filemtime($file); } return true; } public function insert($key, $data) { if (strlen($this->_collectionName) == 0 || strlen($this->_collectionBaseDir) == 0) { return false; } $result = false; $file = $this->_collectionBaseDir.$this->_collectionName; if ($fhandle = fopen($file, 'r+')) { if (flock($fhandle, LOCK_EX)) { // refresh file? if (filemtime($file) != $this->_lastWriteDate) { if (filesize($file) > 0) { $this->data = unserialize(fread($fhandle, filesize($file))); } } // only update if it doesn't exist if (!isset($this->data[$key])) { $this->data[$key] = $data; // trunicate file, and update ftruncate($fhandle, 0); fwrite($fhandle, serialize($this->data)); $result = true; } flock($fhandle, LOCK_UN); // release the lock } fclose($fhandle); // update file time $this->_lastWriteDate = filemtime($file); } return $result; } public function update($key, $data) { if (strlen($this->_collectionName) == 0 || strlen($this->_collectionBaseDir) == 0) { return false; } $result = false; $file = $this->_collectionBaseDir.$this->_collectionName; if ($fhandle = fopen($file, 'r+')) { if (flock($fhandle, LOCK_EX)) { // refresh file? if (filemtime($file) != $this->_lastWriteDate) { if (filesize($file) > 0) { $this->data = unserialize(fread($fhandle, filesize($file))); } } // only update if exists if (isset($this->data[$key])) { $this->data[$key] = $data; // trunicate file, and update ftruncate($fhandle, 0); fwrite($fhandle, serialize($this->data)); $result = true; } flock($fhandle, LOCK_UN); // release the lock } fclose($fhandle); // update file time $this->_lastWriteDate = filemtime($file); } return $result; } public function delete($key) { if (strlen($this->_collectionName) == 0 || strlen($this->_collectionBaseDir) == 0) { return false; } $result = false; $file = $this->_collectionBaseDir.$this->_collectionName; if ($fhandle = fopen($file, 'r+')) { if (flock($fhandle, LOCK_EX)) { // refresh file? if (filemtime($file) != $this->_lastWriteDate) { if (filesize($file) > 0) { $this->data = unserialize(fread($fhandle, filesize($file))); } } // only delete if exists if (isset($this->data[$key])) { unset($this->data[$key]); // trunicate file, and update ftruncate($fhandle, 0); fwrite($fhandle, serialize($this->data)); $result = true; } flock($fhandle, LOCK_UN); // release the lock } fclose($fhandle); // update file time $this->_lastWriteDate = filemtime($file); } return $result; } public function read($key) { if (strlen($this->_collectionName) == 0 || strlen($this->_collectionBaseDir) == 0) { return false; } $result = false; $file = $this->_collectionBaseDir.$this->_collectionName; if ($fhandle = fopen($file, 'r+')) { if (flock($fhandle, LOCK_EX)) { // refresh file? if (filemtime($file) != $this->_lastWriteDate) { if (filesize($file) > 0) { $this->data = unserialize(fread($fhandle, filesize($file))); } } // only return data if exists if (isset($this->data[$key])) { $result = $this->data[$key]; } flock($fhandle, LOCK_UN); // release the lock } fclose($fhandle); // update file time $this->_lastWriteDate = filemtime($file); } return $result; } }> |
No tags
13
Top 10 Performance Problems taken from Zappos, Monster, Thomson and Co
No comments · Posted by admin in Misc
*Original article can be found here.
For a recent edition of the Swiss Computerworld Magazine we listed our Top 10 Performance Problems as we have seen them over the years when working with our clients. I hope this list is enlightening – and I’ve included follow-up links to the blogs to help better understand how to solve these problems:
#1: Too Many Database Calls
The problem we see the most are too many database query per request/transaction. There are 3 specific phenomena to witness
- More data is requested is than actually required in the context of the current transaction, e.g.: requesting all account information instead of those that we need to display on the current screen.
- The same data is requested multiple times. This usually happens when different components involved in the same transaction act independently from one another and each requests the same set of data. It is unknown what type of data has already been loaded in the current context so we end up with the same queries multiple times.
- Multiple queries are executed to retrieve a certain set of data. This is often a result of not taken full advantage of complex SQL statements or stored procedures to retrieve the data in one batch.
Further Reading: Blog on Linq2Sql Performance Issues on Database, Video on Performance Anti-Patterns
#2: Synchronized to Death
There is no question that synchronization is necessary to protect shared data in an application. Too often developers make the mistake to over-synchronize, e.g.: excessively-large code sequences are synchronized. Under low load (on the local developers workstation) performance won’t be a problem. In a high-load or production environment over-synchronization results in severe performance and scalability problems.
Further Reading: How to identify synchronization problems under load
#3: Too chatty on the remoting channels
Many libraries out there make remote communication seem like a piece of cake. There is hardly any difference for the developer to call a local vs. remote method. The lack of understanding of what is really going on under the remoting-hood makes people forget about things like latency, serialization, network traffic and memory usage that come with every remoting call. The easy way of using these technologies results in too many calls across these remoting boundaries and in the end causes performance and scalability problems.
Further Reading: Performance Considerations in Distributed Applications
#4: Wrong usage of O/R-Mappers
Object-Relational Mappers take a big burden off developers’ shoulders – loading and persisting objects in the database. As with any framework there usually are many configuration options to optimize the usage of the O/R Mapper for current application use cases. Faulty settings and incorrect usage of the framework itself too often results in unexpected performance and scalability problems within these frameworks. Make sure you make yourself familiar with all options and learn about the internals of these libraries that you rely on.
Further Reads: Understanding Hibernate Session Cache, Understanding the Query Cache, Understanding the Second Level Cache
#5: Memory Leaks
Managed runtime environments such as Java and .NET have the advantage of helping with memory management by offering Garbage Collectors. A GC, however, does not prevent memory leaks. Objects that are “forgotten” will stick around in memory and ultimately lead to a memory leak that may cause an OutOfMemoryException. It is important to release object references as soon as they are no longer needed.
Further Read: Understanding and finding Memory Leaks
#6: Problematic 3rd Party Code/Components
Nobody is writing all of the functionality of a new application on their own. We use existing 3rd party libraries to speed up our development process. Not only do we speed up our output – but we also increase performance risks introduced by these components. Even though most frameworks are well documented and have been thoroughly tested, there is no guarantee that these frameworks run as expected in every use case they are included. 3rd party code is often used incorrectly or in ways that have not been tested. It is therefore important to make an in-depth check of every framework before introducing it into your code.
Further Read: Top SharePoint Performance Mistakes
#7: Wasteful handling of scarce resources
Resources such as memory, CPU, I/O or the database are scarce. Wasteful handling of these resources results in lack of access to these resources by others and ultimately leads to performance and scalability issues. A good example: database connections that are kept open for too long. Connections must only be used for the time period they are really needed, e.g.: for a query – and then returned to the connection pool. We often see that connections are requested early on in the request handler and are not released until the very end which leads to a classic bottleneck situation.
Further Read: Resource Leak detection in .NET Applications
#8: Bloated web frontends
Thanks to high-speed web access many users have a better end-user experience in the World Wide Web. The downside of this trend is that many applications get packed with too much stuff – they become bloated – which ultimately leads to bad browsing behavior. Particularly users that do not yet have high-speed internet access suffer the most. Too many images that are too large; failure to use or incorrect usage of the browser cache; or overly-aggressive usage of JavaScript/AJAX – all result in performance problems in the browser. Following the existing Best Practices on Web Site Performance Optimization can solve most of these problems:
Further Read: How Better Caching would help speed up Frankfurt Airport Web Site
#9: Wrong Cache Strategy leads to excessive Garbage Collection
Caching objects in memory to avoid constant roundtrips to the database is one way to boost performance. Caching too many objects – or objects that are hardly ever used quickly changes the advantage of caching into a disadvantage due to higher memory usage and increased GC activity. Before implementing a caching strategy you have to figure out which objects to cache and which objects not to cache in order to avoid these types of performance and scalability problems:
Further Reads: Java Memory Problems, Identify GC Bottlenecks in Distributed Applications
#10: Intermittent Problems
Intermittent problems are hard to find. These are usually problems that occur with specific input parameters or only happen under certain load conditions. Full test coverage – functional as well as load and performance coverage – will uncover most of these problems early on before they become real problems for real users.
Further Reads: Tracing Intermittent Errors by Lucy Monahan from Novell, How to find invisible performance problems
(Bonus Problem) #11: Expensive Serialization
With remoting communication – such as Web Services, RMI or WCF – objects need to serialized by the caller in order to be transferred over the network. The callee on the other side needs to de-serialize the object before it can be used. Transformation therefore happens on both sides of the call resulting in some overhead while doing so. It is important to understand what type of serialization is required by both ends and what the optimal choice of serialization and transport type is. Different types of serialization have a different impact on performance, scalability, memory usage and network traffic.
Further Read: Performance Considerations in Distributed Applications
5
Why we moved to Rackspace Cloud, and Why we left 1and1.com
7 Comments · Posted by admin in Misc
First of all, I should say that we used 1and1.com for a long time, nearly 5 years. We had nothing but great service, and pretty good pricing. We were using their Linux developer hosting package, shared hosting. The deals and prices they offer, are all but amazing, but the quality of service has declined over the last few years.
Last year, we needed a more customizable solution (memcache/apc/mongodb), and realized that the solution was to take on a VPS (virtual private server). Seeing as we had great service, and no slow downs, we decided on 1and1 and took the VPS III (4gb burst-able ram, 2tb space). We received the VPS very quick, everything seemed to be going well… I would get several performance alerts a day… we had nothing but problems, however I could not track down exactly what was failing. I went through logs, setup custom alerts with Nagios, hired a few people to review our code. I started recording cpu, memory and disk usage using a custom cron tool I wrote in perl. I had enough ammunition to approach them with data.
What I gave them was 25 isolated incidents, all having the same properties- < 3% cpu use, low memory usage, and virtually no disk I/O. These periods of time went anywhere from 1-2 minutes, to 10-15 minutes. We were thinking that another VPS was using a lot of resources… which in the end was the case. When talking to a really cool guy from 1and1 support (I will leave the persons name out) he suggested that the system we were on had more than the intended amount of VPS servers. He had us moved to another node. Everything seemed to be going well, for about 3 weeks. Turns out, the server we were on was oversold again. We could have called support again to be moved, or perhaps spent the extra money on a non-VPS, however we immediately started looking for someone else as we didn’t NEED our own server, nor could we budget it in on our start-up. There is nothing more annoying than typing ion a website, and waiting, for no reason, other than your server was oversold.
We looked around, and found a few candidates. The list we came up with was Amazon’s EC2, Slicehost, Rackspace, and a few others. After reviewing all of the specifications, and options, Rackspace Cloud won. The ease of upgrading to a larger system, creating servers on-the-fly, the price, the iPhone management and monitoring, as well as the CDN services they offer.
We found Rackspace Cloud! We pay around $20.00 a month (plans start around $12.00/month), the same as the original Developer package we had at 1and1, except we are getting VPS for the same price, except, we are able to scale our services with the cloud APIs. We have had nothing but good service, and have not yet called their support lines as everything has been working as expected. If I need a server for a short time, or even long-term, I create a new server in about 2-3 minutes (which can be done right from my iPhone via their application).
What I learned trying to leave 1and1.com… domain transfers, and the entire cancellation process is brutal. I spent about an hour looking for the cancel button, I ended up looking on google to find that I was not alone. They do not provide the correct means of domain transfer, and make you wait 5 days before they will hand over the domain, and in that period, they reset your DNS server names to point to their advertising pages. They require that you visit cancel.1and1.com, there is no link or mention of it, unless you dig. I have often found, the best providers of a service, have an easy way to cancel your service.
TLDR: Use a service like GoDaddy for your domain names- never use your web hosting provider. Check out Rackspace Cloud, its cheap, reliable, and it can grow with your site.
If you have any questions about my experience, or comments with your experiences with any other providers, leave a comment!
1and1.com · amazon ec2 · cloud · ec2 · godaddy · lessons learned · rackspace cloud · slicehost · web hosting
