| JasonC 的个人资料Squeeville日志列表 | 帮助 |
Squeeville2月3日 I'm fed up. I can't do it anymore. I'm completely fed up. I simply cannot use Live Spaces anymore. I can never remember how to add a post. There are no meaningful statistics. Live ID is a shitshow that leaves me scratching my head. You can find me at squeeville.com from now on. Come on in; the water's warm. j 1月29日 Rails loses Round 1 to PHPDon't let the title confuse you. I've not gone insane since my last post - I'm still very committed to Ruby and Rails! It turns out that, for our first projects, the client has a corporate standard of using PHP to develop the web presentation layer. We are free to build out over a Java layer however. PHP as a straight-up framework is a bit of a gong show when building "applications", though it's great for small scripting scenarios. That said, due to the massive install base, there must be great PHP frameworks out there. My search begins. Specifically, we're looking for
My intent is to absolutely thin out the PHP layer as thin as possible and use it only for rendering UI, validating forms (and simple validation at that), and supporting AJAX. Commenters - fire away! 1月23日 My New AdventureI recently left my previous employer of almost nine years. It was a fun run and we accomplished some really great things. At the same time, people kind of get set in their ways (myself included) and it becomes difficult to change things - dramatic change anyway. These accomplishments were due to a great team effort from a whole bunch of really smart, dedicated people; leaving that group was by far and away the most difficult part of my decision. I wish them all the best.
An opportunity arose for me to begin a new company with a set of people, also smart and dedicated. We are going to be primarily focussed on professional services though a product play is also likely in the cards. Our crew has experience in both areas, so I'm super confident with our ability to execute. One of the very cool things about "starting over", so to speak, is the freedom of choice in all aspects, but specifically technical. We don't have any large legacy code base built up that we need to support or a large set of users that have certain pre-conceived expectations. Not that these are inherently bad things, but they require a certain approach towards operations and development that place certain restrictions.
So, enter our new company, VendAsta (by the way, we have software development jobs). We are currently investigating development methodologies (leaning towards Scrum), issue tracking software (leaning towards VersionOne) and workstations (high-powered laptops with secondary widescreen LCDs for everyone). Most importantly, I've been spending a lot of time researching development frameworks. I'm really super excited about Ruby as a language - it is so concise and expressive. I've become some kind of dynamically typed convert; this in stark contrast to my earlier feelings on the subject. The web framework Rails is equally exciting to me. Unit testing from day one! Super rapid development with a large safety net and radical refactoring of code. I can't wait to start punching code again!
Let's rock! If you're by Innovation Place in Saskatoon, make sure to drop by and visit.
2月12日 Yahoo/MSN Punishment of Google AdSense SiteI run a small website as a side operation, have for many years.
Recently, we placed Google AdSense on the site. Within days, we were severly punished by Yahoo's index, and somewhat penalized by MSN.
My stats to back up this claim follow. The AdSense was added around Nov 1.
Referral Source for Sep-Oct 2006. MSN is 49%; Yahoo is 8.6%.
Referral Source for Nov-Dec 2006. AdSense implemented at the start of this period (Nov 1). MSN drops to 34%; Yahoo disappears into the "(other)" group.
Referral Source for Jan-Feb 2007 (not complete yet). MSN stays at 34%; Yahoo remains in "(other)" group.
To see things a bit more clearly, I've broken into the specific referrals over time.
Google referrals over time. Fairly constant with some Christmas season drop-off.
MSN referrals over time. MSN referrals drop to about 1/3 of pre-AdSense days.
Yahoo referrals over time. Whoa! Where did Yahoo go?!
Now I know I shouldn't be naive to think that a search engine wouldn't punish you in their index for using a competitor's services, but I guess I was. The punishment was swift and stark.
6月27日 Scoble's house hits Point2 HomesHey cool! Scoble's house has made it to Point2 Homes. From there, we'll syndicate it everywhere we can (and his listing agent allows us to)! 4月13日 What a difference a version makes!Point2 runs, among other things, a massive set of fully dynamic websites - almost 80,000 of them. We do this on an ASP.Net / Sql Server setup.
Prior to early March 2006, we were using ASP.Net 1.1. Due to the sheer number of websites, we used ASP.Net caching extensively, often having over 250,000 cache entries in memory on any given cluster server. This was further backed by a magnitude more entries on a custom-built disk cache. On paper, it was a really cool design and should have yielded great results.
Our experience with ASP.Net 1.1 was not great however. Under large load - and I personally feel the ASP.Net caching goop was mostly to blame - our servers acted badly. The application pools would restart multiple times per day and the startup periods were hurtful in terms of performance for the end-user. We worked on many quick fixes, including doing some very cool and funky stuff with our load balancers to work around these problems. I'll send a great big kudos to our various levels of operations teams for working diligently through these issues, many times around the clock. Indeed, I was starting to become concerned for their sanity.
Starting in about December 2005, we begun converting our entire system to ASP.Net 2.0. There are obvious developer improvements, but I wasn't quite expecting the difference to operations. It was simply a massive improvement. Application pool restarts occurred only a couple of times per week, and when they did occur, the startup period was extremely fast - indeed, effectively unnoticeable. Our page times dropped from about 1,200ms to <200ms. I was informed yesterday by Tier I Support that the Performance category, which used to be the busiest category, has effectively completely dried up! And (thankfully for me and the Dev team) our application is actually running like we designed it.
In our case, it was a substantial effort to convert to ASP.Net 2.0, and it was a painful waiting period for our business groups, but man, was it worth it!
Tech team at Point2A lot of customers likely wonder what it's like inside the walls of Point2. There is a technical staff of about 40 people devoted to keeping our solutions running 24/7 for tens of thousands of clients. We have an excellent operations staff who are constantly working with an entire wall of rack-mounted application and database servers, in addition to email, analytics, monitoring, backup, image processing, and file servers. It's quite a challenge to say the least, especially coupled with an agressive software release schedule. An interesting point about getting that many computers operating in concert is that they begin to behave "organically" and when in crisis, we really need to treat the set of systems like an ER patient - triage, critical systems, stabilization, etc.
The majority of the Point2 technical staff are software developers. Smart software developers. REALLY smart software developers. This group of individuals are over-achievers and demand a lot of themselves. The attitude is infectious and everyone really strives to impress each other. This is coupled with an acute awareness of emerging technology and trends; Point2 developers know what's coming up and how to incorporate this stuff into our software solutions. We participate in tons of beta programs; we contribute to open-source projects; we have inside contacts at Microsoft, Google, Yahoo, etc. Point2 developers have given presentations to development teams at Redmond and Mountain View (MS and Google) as well as Akamai, and regularly attend premiere software development conferences. To be clear, when I speak of software developers, this is really a common name for a bunch of different skill sets. We have people who specialize in writing code, people who specialize in usability and the voice of the customer, people who specialize in testing and quality, and people who specialize in product release and production considerations. All of these skills sets must combine to achieve the overall solution.
At Point2, we have taken an agressive approach to software development. Along with this approach comes some risk. We work to mitigate that risk as much as possible through testing and automation, but at the end of the day, we want to get product into our customers' hands as quickly as possible and solicit as much feedback as possible. We know that all the technology in the world is of no use unless it helps our customers and they can understand it, use it, and benefit from it.
We, like any good company, are keenly concerned about our customers' success and how our products can help in that success. We thrive on user feedback and input, though we are sometimes overwhelmed due to our very large user base. We are constantly trying to improve on this front, but regardless of our external responses (or lack thereof), we definitely do hear our user feedback and treat it with thoughtfulness and sincerity. This feedback, we know, is at the heart of building products that our customers use and enjoy.
I hope this venue can be a good outlet for discussions, especially technical, about Point2's products and community of users. Fire away!
1月27日 PsyopsYikes! Scary stuff via the BBC! A light Friday post.
...
... fast-forward to the best part:
Makes our Ice Breakers seem like small potatoes.
10月12日 C# 3.0 - Anders, please drop local type inferenceAt PDC, Anders Hejlsberg showed off some of the great new features of C# 3.0, including Extension Functions, Anonymous Types, and Lambda Expressions. Very exciting stuff.
One other feature, was not so exciting: Local Variable Type Inference. I would appeal to Anders to drop this feature from C# 3.0. Here's why I think this.
First, imagine a constructor call:
Customer c = new Customer("Jason", "Collins");
The duplication of the Customer string is wasteful, as the type can be inferred in one case or the other. With Generics, constructors become more wasteful:
ArrayList<Customer> d = new ArrayList<Customer>();
Local Variable Type Inference allows us to do away with one of the duplications, leaving the following:
var c = new Customer("Jason", "Collins");
var d = new ArrayList<Customer>();
var is effectively a placeholder that tells the compiler to infer the type from the context. Typing is still strong (this isn't VB's or JavaScript's var); that is, c IS a Customer and d IS an ArrayList<Customer>.
This notation is also used for Anonymous Types:
var x = new { Latitude = 45, Longitude = 180 };
In this latter case, a new class is constructed that has an unknown name (i.e., it is anonymous). This Anonymous Type has the fields Latitude and Longitude.
Ok, enough background...
I feel readability and clarity seriously suffer when using var for Local Variable Type Inference (the c and d cases above).
Imagine some factory method that constructs an object:
var c2 = Database.GetLdapStore(Region.East).GetPreferredMember(1235);
The compiler is able to infer that the type of c2 is Customer, however, the developer is left to perform this compilation manually in their head (if they know the code well enough), or worse, walk through the various methods to find out the type. (Of course, within Visual Studio et al. there are likely tool tips to help with this, but I feel the language should stand independent of the tool.)
It seems to me that using var for Local Variable Type Inference is merely sugar that avoids some extra keystrokes, but it comes at the serious cost of clarity in the code. Strongly typed languages should explicity mention their type in their variable definitions.
Some alternative sugar might look something like the following:
Customer c3 = new("Jason", "Collins");
While this would only be applicable for concrete types, it does provide some syntactic short-cut while preserving the strong type declaration in the variable definition.
As a final note, using var for Anonymous Types is completely fine in my book; indeed the presence of the var keyword, along with dropping var from Local Variable Type Inference, clearly identifies an Anonymous Type.
Anders, please drop Local Variable Type Inference, or at least restructure it to keep the type declaration alongside the variable definition where it belongs!
|
|
|||||||||||||||
|
|