Here's something I've built a few years back and to this day I find it to be a very practical project to the extent that one enjoys eating garden fresh vegetables while saving money in the process.
After contemplating for a while, as expected, I have decided against buying a kit although there are plenty of options, from ready to assemble to carpenter level pro versions.
The project took around two months of work, weekends and evenings and was finished just in time for the fragile plants to have a place to grow.
As an idea on numbers, the value of tomatoes and other fresh vegetables planted each year actually exceeds the cost of the materials, so the math is clear. This is located on the East Coast so in a better climate zone results could be improved further.
The design: I opted for something of my own combining aspects of various greenhouse models that I've seen on the net. It is a 10'x20' greenhouse with self venting windows. The sides are bottom half wood and top half acrylic panels, and polycarbonate for the roof.
As usual, plan accordingly for materials. In my case ending up ordering a bit too much of some and too little of others. This was the result of leaving details "to be figured out", lesson learnt.
An important element with a greenhouse is picking its location AND orientation in regards to the Sun and any shadows that may form around the structure. Do not build in the shade and try to capture as much of the morning Sun as you can. In my case, the area needed leveling as well as cutting down a large tree that would have been hanging above. No worries for the environmentally conscious, hundreds of evergreens have been planted since while this tree was truly a dying monster.
With the tree out of the way, I went with a basic foundation made of stacked posts. These where anchored with 32" iron rods drilled through the posts into the ground, every few feet. Two hurricanes have passed by since and the greenhouse is still standing.
Next step, the side posts are going up. The door structure along with the center and opposite roofing supports are in as well. You want to make sure that you shave into the header ends at proper angle and depth so that when the rafters are placed, they align flush.
A lot more wood work in place below as the side walls are framed. I opted for acrylic side windows and so I grooved a channel in the wood contour to allow for the panels to slide in later on. While these panels are flexible, they may crack while under so much bending pressure (I ordered a few extra ones and they sure proved my theory...). The top channels therefore have been made much larger and in a funnel shape, this allowing for some room while fitting them. In retrospect, although this design makes for a cleaner look, I would instead recommend just building a bit of window framing around each panel. These could also be inserted before the top horizontal plates are in, but that's not a solution that allows for replacing panels should one get damaged over time. For making the channels, ideally you do that on a table saw with dado blades. I did not have that option at the time, I went with a circular saw a few careful rounds to reach the desired depth and width.
The bottom half of wood has been cut and installed here (2"x6"x32"). I installed a layer on the inside as well and in between the layers I've added foam insulation for better thermal protection. All rafters and pretty much the majority of wood work is done, along with a coat of stain in progress. Gravel has been added on top of black fabric, about 4"-6".
The polycarbonate panels are cut and installed below and everything starts looking more like a greenhouse now. For the panels, I went with triple walls and I've also set groove channels in rafters so the panels could slid in. Make sure to use plenty of silicone caulk before fitting these. When cutting to size a table saw will work just fine but do tape the areas that are to be cut and go slow. Applies to the acrylic panels as well.
By now the greenhouse is complete. The windows are also finished and installed. I refitted a door which I had laying around and also cleaned up the landscaping.
A look at the inside/top of the greenhouse. I went with automatic window openers and have to say they work very well during hot Summer days.
Will leave this with one more view showing the interior and some of the tomato plants already feeling quite at home. The pavers were made with a concrete mold, a few at a time. One side of the greenhouse has stepped planters as you can see.
Not pictured here, LED strips have been installed, powered by a deep cycle battery for now, next step having it recharged with narrow solar cells mounted on the top of the 6"x20' ridge plate.
Here's how I ended up building a stone fireplace, pictured below:
I have been contemplating if it's something I should build, considering time and effort especially this being a trade on its own, but could not live with myself knowing that I would have said "no". In the end was about a couple of months of work (evenings + weekends), not terrible.
A few things to consider on a project like this.
1. Safety. Yours and the fireplace design. Not that building any other structure should be less strict but you want to be careful with something that has as whole purpose to burn and to "store" fire. Study every possible regulation, from your town's building and fire codes to other regions of the country, specialty forums, to recommendations on some fabricators' homepages . Ask for opinions or advice from professionals if in doubt. Also learn from mishaps others had in the past.
2. Go easy on creativity, strong on proven designs. The most likely problem you can run into is that after all the work it simply doesn't work. By that I mean it smokes, it cracks or it has no proper air flow. Fixing a poorly designed fireplace can require a full rebuild, which is worse than starting from scratch.
Enough with that, back to step by step snapshots of my progress. I started with the design on paper and of course, this picture is "all you need" to build yours...
I had to work around some specifics in my case. On one hand this is built relatively close to a cedar wood structure so good clearances are needed but also wanted it to be considerably taller than the pergola so that the smoke could clear it. Second it had to be aesthetically just right, the pergola is a symmetric geometric structure so the position of the fireplace needed to be center and parallel.
Materials are in. Mostly cinder blocks, mortar, concrete, reinforced iron bars, ceramic flue liners and refractory bricks. I have considered the route of using prebuilt kits sold by several companies but it would have still been much more expensive. I've saved around 80%-90% of the total cost of such a project while enjoying the process in the meanwhile.
I dug out the foundation with a shovel and pick axe. A good few inches of crushed concrete followed. I had this laying around as a result of buying too much for another project a few years back then leaving it turn to 80lbs brick shaped rocks. It is definitely handy to have a front loader to move them around.
Concrete bags were laid flat then crushed with a ledge hammer. The base of the fireplace is being framed and reinforcement bars are in. It is important to get this part aligned perfectly with right height and perfectly level.
Below the foundation has been poured ,as well as the two walls on either side. I also added a first layer of large cinder blocks and filled them with concrete to a smooth surface. This will be the mantle base. I have worked the concrete by hand, would recommend a good breakfast that day and that should preferably be a few hours before starting... One way to work with lots of concrete by yourself is to start from one side and as you move, smooth it with a floating wood beam. Have a hose for misting often and keep a good pace in mixing/pouring around 30 bags of 80lbs. I don't use a mixer, just a bucket sized container and mix by hand. Invest in a few pairs of the thickest rubber gloves you can find, these break easily pushing against the sharp gravel in concrete.
The side walls for the firebox are up, later these get filled with concrete as well.
While in the fun mode of digging and pouring foundations, I've also gone forward and poured the base for the outdoor kitchen area and started building the cinder block walls for it.
Flue liners have arrived. You may want to invest in these even though many build outdoor fireplaces by just lining with bricks. They are inexpensive and most masonry stores carry them. I have 6 because 4 of them will be cut into the cone area that leads up to the flue (smoke chamber), the other 2 will form the flue. They are 18"x24" and around 65lbs each.
Firebrick going up. At least for me this was a very unique type of material to work with. The mortar mixture needs to be soupy and even so, once you dip the bricks in they absorb all the moisture in seconds. So practice and get used to the very different feel than say cementing stones.
Firebox completed and the liners are cut and set in cement (by the way, use "S" type mortar at all time, not more expensive than regular and fire cement is overkill for an outdoor application - as suggested by many masonry stores). The front first row of cinder blocks is held together with a so called lintel, this is an L shaped steel beam that I cut to size and sits between the liners and the blocks. Make sure to not cement or constrain the two ends as it may expand an inch or so in either direction with the heat.
The angles on the liners (smoke chamber) are very important as well. These need to form the proper height while also narrowing down at the top to the exact 18" opening that an initial one had. Of course, the clamps and wood strips are temporary until the cement sets. Make sure the interior is perfectly smooth to let the smoke travel freely.
Here the smoke chamber gets the cinder blocks treatment as well and a liner is being raised in place. Leave a bit of room between the liner and the concrete wall so that when the liner expands it won't crack. I ended up building a basic ramp on the side from leftover 4"x6"s. Handling those large liners at height is not easy, especially the top most one. If dropped, these would shatter. Use face protection when cutting, ceramic is surgically sharp and I learn that the hard way cutting while tired and going to ER with a painful (luckily superficial) cut in one of my eyes.
Most of the concrete work is set and ready to being the time consuming (yet rewarding) stone veneer process. It is a relief to see that while passing the height of the pergola the dimensions are as expected and the structure is well centered. Use a level at all time when building with concrete blocks
Forward a bit ahead and the stone veneer is coming up. Again, this is mostly stone that I had around the property and I turned into flat workable veneers. Unlike the gazebo wall, more care needs to be taken on the type of stones used as well as design. The arch was built by drawing/cutting a plywood template and cementing above it.
Forward some more..., a few weeks later most of the stonework is there. You could save a lot of time if going with wide gaps between the stones but just like the gazebo area, I wanted to go with the look of dry stacked tight stone. It is a good idea to always mist gently the stones and wipe with a sponge before the cement sets. Otherwise you'll have a hard time removing the haze later.
A challenging next step was the cap of the fireplace. I could have certainly gone with copper, it would have looked nice, but not as timeless as plain stone. So after a lot of trial and error on finding the right stone and cutting it, I managed to carve this 200lbs stone block of about 24"x24"x4". Was pulled out with the backhoe, part of a much larger boulder (~5'x4'x6"). To make the cuts, I had to position it back and forth with the front loader tractor. Cuts where done from both sides, then chiseled for breaking the centers and further grinding off sharp chips.
The next challenge was moving this block ~50ft near the fireplace then raising it ~14' on top of everything. I really couldn't afford to have this drop and break, most of all did not have any more rock this large to work with. I improvised again with my ramp of 6"x12's, the bottom sitting on secured cinder blocks raised to 4'. I had an old come-along which was secured to act like a pulley mechanism and a steel cable tied around the rock. The clamps were used as moving brakes as the stone would go up every few inches to block it from sliding down.
The mantle area is finished. I cut larger stones for the base and kept a slope so that the water would not accumulate.
All done below, view from far front. The top cap sits on 4 pillars of cut and cemented granite, ~8" above the fireplace flue.The top of the flue is also done in poured concrete sloped away from the center to allow for proper drainage.
Here's another shot from the back. While I have yet to fire it up, a test with a burning piece of paper showed good draft in pulling the smoke upwards.
Hope you enjoyed the post. I am intending to finish this entire area through the Summer and follow up with a related post as well.
I often work on projects that have little to do with my technical background, I view them as complementary activities or perhaps a subconscious instinct to compensate the so much office-sitting we all do. Two summers ago I've decided to do something different with the outdoors area and I started drawing.
I usually end up sketching things in a CAD software and after a few weeks of back and forth I ended up with a design for a mixed gazebo/pergola/kitchen structure. The vision looked a little bit like this:
And because this is a long article, here's roughly where this is going, if not your cup of tea I saved you the scrolling time::
Two things might come to your mind right away:
A) Why not have someone do it for you? And here's where I think lots of times the mistake happens. I would argue why not hire someone to go on vacation for you, or workout at the gym, or swim, for you? Activities like these can be quite rewarding on top of the final result, or as they say sometimes it's about the journey, not the destination.
B) What if it goes wrong? You need experience for this. And these are true, but after all we're born to take chances and calculate risks. In this case, I should disclose that I've acquired skills gradually. Only a few years ago I owned just a hammer and knew nothing about building anything other than half baked robots. But thanks to hundreds of forums, discussion boards, pictures and online guides, this is something I can tackle.
There's also a third point to consider, cost. A structure like this is cheap on materials and intensive on labor to the tune of 20%/80%, so in the end you'd have also saved a lot of money. You don't get that with your gym membership.
With these out of the way, I will keep it brief on text and abundant on visuals.
"Day one" after the design has been collectively approved in my house, time to prepare the landscape and stake exact geometry.
I had to move things around a bit and reconsider dimensions and position in relation to the house. In the end, the gazebo would be planned as a 14'x14' structure with a pergola of around 22' then connected to a 10'x12' kitchen area.
By now, you want to make sure you've figured out the materials and costs. It can be tedious, but the more careful you plan it, the less wasted money and time (don't buy too much, too little, don't buy materials too far ahead, don't buy what you're in doubt and so on).
In my case, most of the materials were going to be pressure treated type of wood coming from Home Depot and Lowes. Lots of concrete too and the pergola had to be done from cedar and so I went with a specific local vendor for that.
And as you see, in no time my first order of raw materials got delivered:
This is also the time to invest in some quality tools. Don't be cheap on these, this is not something you want to do with your dad's table saw or old carpenter tools you found at a yard sale. What ended up being a key tool for me was this 12" compound miter saw from Hitachi. Got it on sale too and was worth every penny.
So back to work. My landscape area was terrible, I had to cut a few large pine trees, then remove stumps as well. I had invested a while ago in a backhoe to help me with stumps etc but don't feel discouraged, you're likely not to have such issues and if you do, just take your time with hand tools or hire a stump removal crew, it's not very expensive. Later on, make sure to take into account disturbed soil when you dig out for your posts.
Digging the post holes was the next step. If you want to avoid a serious workout, go with a powered auger. I went at it by hand, 14 holes, at a depth of over 4' each and over 1' wide, rocky soil and all. Check the frost line for your area, you need to go below that.
Here I just started placing and bracing the posts. I've gone with 6'x6', they're quite heavy, I've also protected the base with a coat of roofing cement to better withstand moisture over time.
All posts are in, concrete poured too. A word on concrete, if you do it by hand and with bags, be ready again for a serious workout. I've ended up using around 7-8 bags of 80lbs concrete per hole x 14 (~10,000lbs) and split the work over two days. Being 90F outside didn't help much either, do stay hydrated. Add a layer of crushed stone at the bottom of each post for better drainage, and also shape your concrete as a cone, away from the posts so water won't accumulate:
Just around this time I got my order of cedar as well and you can see below the two main pergola beams are up and fastened. I've also cut to height all posts and started the top base for the gazebo. A few notes here:
A) As you see my area is sloping quite a bit, a few feet over all. Make sure to account carefully for these things, measuring that all posts are exactly cut at proper height. There are many ways to do this and not all of them work great. A laser level did not work very well for me, could be that I had a poor one. I ended up using a hose with water and making sure it is at the same level when placed at each post, think Blaise Pascal's laws. Also measure again using one or two other methods and make sure you have no surprises.
B) The two cedar beams are quite large, 6"x12"x24' each. I ended up propping them on the sides of the posts and raising the props foot by foot. Be careful with heavy materials above your head.
C) Use heavy duty fasteners, don't save on them here. I went with TimberLok of all sorts of sizes in most cases.
A lot has changed by this next step. I've built the upper smaller base of the gazebo, cut and installed the rafters as well as primed most of wood and stained the cedar.
Cutting the rafters and placing the top base might be some of the most difficult steps you will take. Calculate everything on paper 5 times literally, don't make errors here. Half degrees on angles are not to be rounded. I've built the top base on the ground then mounted temporary braces for it and pulled up the base on them. You'll have to be precise with its height, rotation, inclination and dimensions. Because there are no supports in the middle of the gazebo, the lower and higher bases are key in giving everything structural support.
The top rafters will not be easy to just join together up top, I ended up cutting a piece of wood like a small stump, that lets them all meet together and fasten to it. Also it might feel very rewarding to remove the bracing supports once you're done, but don't. They will come very handy for lots of the roof work that is going to follow.
Rafters being installed for the kitchen area. The roof has a small pitch and it's resting on 4"x6" beams with a slight cantilever on the sides (trapezoid shape). You can also see temporary supports on the cedar beams to keep them at perfect distance as they still might be drying and twisting over time.
Next I'm working on the pergola elements. What you see are a lot of 2"x"4"x10's that go on top of four 4"x6"x12's that rest on the two main beams.
Notes: I clamped together a bunch of them and routed this way, easier to reduce errors and faster to work on. The angled ends were done with the sliding saw, although the 4 large beams that you don't see had to be cut carefully with a circular saw with 2 cuts per side and sanded to look smooth.
A batch of them lined up for staining:
Time to finish the roofing on the kitchen area. Since the pitch is so low, a frost barrier was used below the asphalt shingles. You can also see that the 4 cross beams are placed on the pergola. These should not be fastened just yet, you want to first place all those 2"x4"s and make sure everything lines up and only then start the fun with the hammer drill and the sexy looking Fasten Master fasteners.
Next step is to prepare and stain the TNG cedar that will go on the inside of the gazebo roof. To save on cedar cost, I was able to find thinner wood that's normally used for paneling. This won't be a structural issue because it will get covered with thick plywood for roofing and the rafters are placed to support many times the load and provide enough torsional rigidity. I've had since then 3' of snow on top.
You can also see that by now the top cupola has been roofed. Angled fascia 2"x4"s sit at the bottom of it all around and the same will need to be cut and installed for the lower level (here you see the rafter ends just hanging)
Below is how things start looking from the inside, which is finally a finished surface in this project. I've also installed by now the light fixture, although in retrospect I should have waited longer before more dust work was finished. I've also removed all the support braces by now, a bit of a relief to see everything hold tight on its own. As you install rafters, you will notice the structure getting very sturdy.
The roofing is now complete. Lots of details involved here, from cutting the plywood carefully to sealing everything in between before applying tar paper. I used an oscillating saw for trimming each cedar plank. All the fascia beams have been applied, lots of sanding and caulking done everywhere then repainted white as needed. The pergola also takes full shape with the cedar wood work installed/fastened. Make sure you have a good hammer drill and extra batteries to drive all those timberloks.
Concrete work now begins around the gazebo posts. Have built a ~2-3' deep foundation sitting on top of 4"-6" of crushed concrete. This will be the base for the concrete blocks and stone wall that will follow. I've reinforced the concrete all around as well as added vertical rebar to go through the concrete blocks.
Concrete block walls are now in place and the stone veneer wall is now in process. This is a very time consuming step that took me many weekends/months, but well worth it. To make matters more colorful, I've actually taken all the stone from the ground, mostly massive boulders over time, with the backhoe. For some I had to make a huge overnight fire inside an 8' deep hole (size of a room), then spray the hot rock with cold water until it cracked enough so that I could muscle it out with the backhoe and a ledge hammer.
Once all the stone was out, with chisel and a large hammer I've "sliced" it into manageable flat rocks. Invest into a good grinder for the stone and count on going through dozens of blades, I may have exceeded 30 by the end.
Here the wall is complete and I'm cutting and installing the blue stone. I've made templates from remainders of plywood then cut carefully around those shapes. You should be able to find a local stone shop and if you don't feel comfortable they can probably cut it for you, though expect it to be expensive. Be careful on how you handle these, they're really heavy for one person, perhaps set up your neighbors for a surprise beer event.
More blue stone cuts for the ends. When all said and done, these get glued to the top of the wall and grouted. Leave a 3/8" or so of space between all of these top stones.
And a last picture here, showing the interior cedar wall as well as the completed overall work so far. Expect a "part 2" post when everything is done, including the pavers inside. Also next week a separate post on the fireplace you see in the background. The kitchen area will follow later in the Summer as well. Hope you've enjoyed these pictures so far!
A less subtle subject would have been "Business as usual: self interests first, consumers as-low-priority-as-possible second, not to affect first", since it's about the interaction of socioeconomic factors that lead to spinning wheels in innovation.
Patents Be Damned, Tools For Lawyers, Not For Inventors
This doesn't fall far from Bill Gates' remark that the world needs kinder capitalism. With patents as key ingredient in most cases, we end up spending vast amounts of time and money in "reinventing" the same things, just with slight differences.
The App Reinvent
The iPhone came along. The iTunes store was born. Nice. A great next step in innovation would have been to allow others to fully understand and take advantage of it, as best served by *all* sides. Instead, similar infrastructures had to be reinvented, at high cost. Google now has theirs, Amazon is coming along, and Microsoft and Nokia are coining theirs and we will likely see a few more, with Samsung not far behind. All because Apple didn't just want a great product, but had to create a money vortex with unreasonably strict limitations for all else.
The Social Reinvent
Facebook showed up, the most successful social network built to date. Even with the privacy complaints from users, the platform works very well, it's beautiful and easy to use, everybody posts and peeks at pictures. This could have been taken steps further in a collaborative way to Google (or whoever else interested) so there would be no need for a Google+ and similar attempts. Imagine if all the money and time used there would have gone into something else like the self driving cars project or even toward carving a Facebook 2.0. Really not sure if there was a strategic reason behind but probably yes, a business reason. Facebook must have been afraid of being crushed by copycats or had to please investors. Similar tension can be felt with their "close friends" at Twitter, more recently the "user friendly" moves around Instagram.
The Phone Reinvent
Add Apple vs Samsung, which will become business history. Very well, Samsung has gotten fairly close to the look and feel of Apple products (as entire industries did). However, isn't the consumer driving this anyway? Usually when modeling onto something good (such as the iPhone), there's no need to worry (Apple) because users are not naive nor bizarre to sabotage through buying replicas. Users want a product that they enjoy using and owning, you brands, go work to achieve it for them.
Whatever Samsung came up with was by no means a copy, consumers found an alternative solution in it, without being coerced. Their product is in many ways a better platform than the iPhone.
Long ago there were a few Chinese firms that started cloning the fresh new iPhone, albeit of poor quality and having prospective consumers laughing. Not by accident, Apple looked the other way, these did not pose a financial threat. They would have left Samsung alone too if their product felt mediocre. In a sense, one might view this as suing the consumer for using a different product.
In a better world it would make sense to blame both companies. These two brands should have worked together and given each other credit. Some of the Apple brilliance has put Samsung on a monetary track, evidently. Samsung should have found a way to thank Apple and further, Apple should have taken a close look at Samsung's touch of innovation and process it further. Instead, we're looking at confronting positions with the added irony that many Samsung components fuel Apple products.
Patents will generally get everyone to agree that when it comes to the bottom line, no one should starve by having their invention stolen. But there's a legal vacuum when it comes to the other end of the spectrum. Apple has cashed in cosmically and they shouldn't have had to "execute" anyone else trying to innovate on top of their product.
But talking business kindness is not about a strong deviation from the present, it is a sweet spot with better balance characteristics than the current one. Change should be approached with caution or competition could get compromised which in turn would erode creativity.
There were times when consumers were the true mother of a product, but just like aging parents, are now shoved aside so that the powerful manufacturers can show everyone their self interests.
Apologies to those who can't eat pork, think fish or chicken, results are similar.
If you never cooked with a smoker don't think the taste comes close to anything else. I use a Bradley (compact, digital, works with wood briquettes, cheaper than your average non sense cellphone).
Prepare the meat by adding a dry rub of your choice premixed with a solid coat of salt (I went with red paprika, parsley, pepper, sugar, garlic). Be generous with the salt, form a visible layer. The salt flavors the meat all the way through and some drips away with the fat. Coat first with a layer of mustard, that will hold the rub to the meat. It should look like this (I also cut an opening and added a few apple halves to go with the hickory flavored wood):
Smoke for 3-4 hours and set the oven at ~220F, about 1.5lbs/hour. Best if done on a Friday night, should be ready by the morning. Use cider in the drip pan, works better than water.
It is ready when the internal temperature of the meat is at around 180F. Let rest for 30 minutes, bring it inside, slice (cuts almost like butter) and enjoy!
As brutal as days like these are, sadly they'll keep existing for many generations to come. Just as once in a while someone will witness a miracle, one marvelous social creature with a Facebook account, with access to education and anything they want in this world, against all odds, will pick up a weapon and hunt the rest of us.
We live everyday without realizing what a fragile equilibrium this society is.
Gun control is complicated, so is police or army enforcement and many far reaching directions. Any day a gun owner with dozens of clearances could inexplicably murder people. A police officer could draw a weapon on civilians. A military plane of our own could kill thousands. A kid could make a cheap bomb or set a room of people on fire. And then there are terrorists as well.
Those few who are determined, won't be easy to stop. Without a doubt something HAS to be done, but rushing measures will only create more determined individuals and worst of all, freedom as we know it, could be lost, as I've seen it outside this country.
Right now anger is a strong emotion among us, the living... But it was very likely the same emotion that drove the suspect all along.
All we can really do is show the deepest sympathy for those who lost loved ones and hope, that one day, we'll better understand the source of these disasters deep in our own minds.
I've adapted this from an answer I gave on Quora. It's a question that drives close to one of the cores of my activities. Over the last decade, I have been involved closely with revamping, improving or writing from scratch, B2B UI/UX. From owning full creative and coding teams to being part of a team doing it.
I won't be able to sum up a clear recipe and it's likely that there is none. The process ends up being very specific to the circumstances you have and those are the outcome of a lot of (mostly business driven) factors.
Traditionally B2B software had little to do with UI, and even UX was not a concern. If it takes 10 steps to do something and no one really knows why, it was viewed as fine as long as it did not fail or raise maintenance costs.
But over the last few years, especially driven by Apple's cult of design, UI/UX has entered well within the B2B realms. CEOs and senior execs all have, like, and use iPads and iPhones (yes, Android/Google as well but they are not starters of this movement). Minds have been trained to expect "that" sort of look and feel. Sales teams are also constantly infusing their demos with as much UI/UX dopamine as they can. Other key selling points worth mentioning today are "available in the App Store" and "runs on any device".
And now combine that with another major angle driven by entities such as SalesForce and the business entrepreneurial wave (though the latter is microscopic thus far when compared to the consumer sector).
The intro above is worth having in mind when looking for a conversion path for a B2B app. What's also worth taking out of the way, is to understand that unlike any consumer app, a B2B product will often comprise of thousands of web pages or views, a similar or higher amount of services and would be used by dozens if not hundred of large institutions.
Given all the constraints, here's what I've learnt:
1. Convert gradually
What this means is you just can't take out what millions of users have and replace with something completely different, even if it works immensely better. In the extreme cases when this does survive, there must have been serious underlying elements such as an almost impossible to use existing software, or a very strong business and training team that can sell and subsequently train the users, taking all their fears of change into account. Even in such cases, depending on the sector of the business, it may not be possible to do a drastic upgrade. For example if the software controls nuclear reactors, and it's been used for the last decade and yes it's miserable to use and actually full of defects but each and every one of them is known perfectly by the users, it can't be replaced with the "Nest" like equivalent because the new-and-shinny goes against the safe-for-a-decade. The picture can be extended to the banking sector and to gradually less and less critical ones.
2. Observe the users, passively
Management is, who probably triggered this conversion. They may be acting under economical pressure, internal or external from customers and competition. The changes you make however, should have little to do with management. You'll need to get access to actual users of the software and observe them, ideally without being noticed or them being informed of what you're doing. Try to collect feedback, write down as you go and try to supplement the software with a non intrusive feedback collection form.
But all this, frankly, may be harder to do than it sounds. Getting access to your customers' users means your management interacts with their management and a whole business bridge has to exist (=time no one has). Then you entering their premises and IT cooperation across two businesses is another story all together.
3. Collect info from trainers, demo and sales teams
It might be that the only people who know what the customers complain about are your company's trainers, demo and sales crews. Try to get their candid feedback on anything they've heard from the customers. Depending on the size of the product, it's very possible that you have multiple customers and dedicated resources for interacting with each of them. You need to speak with all resources and expect to find out drastic differences, almost conflicts, in requirements. Different companies use the same software in different ways and tend to find values that don't intersect. Take your time and collect data patiently, learn to listen to what's not being told.
4. Understand the product inside and out
If you were just assigned this task or perhaps you're a consulting firm, don't stop until you get a feel for this product, in tiny details. Use it yourself, understand it technically, feel the pain it causes you, remember what's great also. But do make a distinction here from the way you use a consumer product. Your personal opinion on using the product, takes a small role here.The real homework begins when you have to learn the business case and business usage. You may feel terrible that getting to an area of the product takes you 10 clicks, or that a view seems hideous but that may be fine. Once you put on your business user glasses you realize there's a rhythm to that process or perhaps a good reason to slow it down to allow for some subconscious checkpoints. Instead, a business usability problem may be that something is too easy to do, or feels risky, or needs a new step that does a validation of what has been done. You won't be able to think exactly like the business user but the closest you can get to that, the better you understand their problems, not yours.
5. Establish a feedback loop
Within months, you'll find yourself into a process where you've made changes that get shipped to various customers. It's imperative for you to somehow get your hands on feedback. You're not in the land of Google Analytics or social monitoring tools. You also have a convoluted graph of people in between you and the user, and as feedback travels through, it gets highly distorted. But don't be discouraged. Truly valuable changes (or terrible ones) arrive back to you with clarity and often exaggerated amplification. Asking directly for feedback is not a bad supplemental strategy, but treat that feedback with suspicion because asking a user to tell you what they think, almost never results in what you need to hear.
6. Inject upgrades as features
Once you've compiled your list of problems from everything you saw, sort and categorize. Nothing warms a customer to your product like a well placed feature that closes one of their wounds. To give an example, I had a product that included a lot of fields that needed to be typed in, but while these were free form entries, they were being matched against a database. A user misspelling a long company name would result in having to type again such a field upon submitting the form. So I ended up introducing "inline lookup pickers", similar to what you see now everywhere (Facebook, travel sites etc). The ability for the user to type a character and have a table with key columns pop up to suggest autocomplete, is a solution to an enormous point of pain. You will receive feedback on these sort of changes, rest assured. The user mentions them to their direct manager and it chains up into the next business calls with your company and you'll then know you've done something right as you'll have their support moving forward.
7. Pay attention to branding and use it towards your advantage
Most of your customers would either have or want from your product a theme that is specific to them, logos and colors. When you're doing a UI/UX upgrade and it involves shifting things a bit and you're concerned on the pain of change you might cause, it helps to play the customer's brand better in your new design. Make the brand look sharp but blend with who they are, don't compete with whatever they have going on internally. Your ability to guess in seeing where they are trying to go, is a big deal. You could be in a position where your customer competes with another who has a much better direction, however, your goal will be to support your customer in the direction they chose, not pivot them where it makes sense to you.
8. Be concerned of topics like accessibility and standards
You can be creative in a consumer app, the sky is the limit on an interface. But not at all with your business customer. Discuss with them what they need in terms of accessibility and if they follow any standards. Even if they don't, it might be that they're early to the topic or unorganized. Do some homework of your own and persuade them in the right direction. For example a governmental agency may need to follow strictly the 508 compliance. If you don't follow that, either because you've ignored it or they didn't care, you may find your work booted after a year in favor to someone else who did think of these aspects.
As a general rule, for most businesses you can work with a subset of the standards and requirements. A few good rules, avoid using colors in denoting anything critical, especially controlling the app. Contrast is ok, but color not so much. Tab order and location, remain important these days. Interfaces that can be used both by keyboard and mouse, should always be in your mind, especially when trying to sell something leaning towards slides and other modern interfacing techniques.
9. Avoid ephemeral features
There are many trends in UI/UX that are just like fashion trends, they come and go. Try to spot these and avoid implementing them. For example the well known fish eye navigation effect or carousel navigation. Your software may not be changed again for another 5 or 10 years. Introducing features that might go out of fashion is something that you need to try and filter out, or implement variations that you can rationally argue as right choices. You can often spot these, usually the ones that take advantage of a new hardware or technology. A good example here is WebGL, sure anything looks novel and different in 3D, but that is only distracting you from concentrating on a good UI/UX.
10. Try to own the product
Very often, especially at larger companies, you may see the design aspect given to a team, then decisions being taken based on vote, or from time to time a manager would walk in and say he/she "hates that red". This is a major reason why a lot of the products out there look so... Frankenstein. They don't intersect into a single vision which is what you need to try and stand for, as a one single soul. In general, it is better to have a flaw in a well put together product than a product that feels like a flaw yet seems to get the job done. (I will abstain from giving market comparisons, both for hardware and software).
11. Don't ask, don't tell
Interacting with users and their managers is tricky business. As mentioned earlier, key is "passive". Do not make a list of possible changes and offer that to the customer to choose. It can be the trigger that kills your entire project. Customers in general will say yes to 95% of what you want to give them. They simply think the more features the better, and even if they don't need them now, it's the same price, right? so they think they'll figure out later how to use them. You may also not be able to back down once you do this because they will now hold you for delivery, hence the reason this may be a fatal path to an upgrade.
Similarly, stay away from checkpoints with your managers or the customer. If you were a painter and shared your progress with someone, most likely they would have asked you to stop. You need to present just finished, full shape results. Don't assume for a second that your customer has creative vision and somehow understands exactly where you're going with your work. You will only scare and concern them.
12. Be patient and work at light speed
This is where usually most upgrades fail, and this is not just UI/UX, but architecture changes as well. You need to upgrade gradually, in a very well planned and executed manner. It is what it is. You can't expect to have even a sentence changed inside a banking product over night, there's a lot of protocol involved on all sides and for a reason, to protect mutually if something fails. You also won't have the luxury of upgrading or making changes to a delivered product. On the other hand if Instagram filters act funny or Gmail is down for a half an hour, code can be updated at will and defects hve much smaller impact with no significant business lost.
You can foresee your project taking one year, sometimes two. But technologies advance much faster these days. You will need to move sweeping fast and make sure you're allowed to complete the task. In many cases you will instead end up just injecting a new flavor of UI/UX, and some products go on like that with 4 or 5 different technologies working all in tandem, from modern to decaying ones. It might still be fine, a sense of balance can be found, but don't assume that everything will fall into place naturally. Keep a close eye, you have the power to ruin software irrevocably Make sure you've completed the most important changes in the correct order and can stop at any time.
If a few of these points help out I will consider time well spent on my end.
JavaScript Hacks: Ornamental Globes for the Holidays
With Holidays around the corner and being stuck in a long and boring WebEx I've decided to make a difference in my day and hacked together this UI gadget made out of globes on strings that you can drag and turn around (of course you need it).
There is no true holiday spirit until you're decorating with JavaScript ornamental globes. These didn't sell at the local store and Google shopping or Amazon failed on me too so just like everything good, home made is the answer.
Give it a try here, would suggest using Chrome for performance and this may work on your tablet and smartphones too, just slide, instead of mouse drag:
Ornamental Globes for the Holidays
If interested, read further on how to make something like this.
List of Ingredients
Before going much further, please look at articles like Playing With Spheres and 3D Surfaces Withouth WebGL. These have basics that won't be repeated here.
The main and only visual ingredient is globes. As mentioned in Playing with Spheres, this is a powerful element to play with in JavaScript when working on conveying an illusion or a sense of 3D. Make sure to use an image that has full Alpha transparency around it, will make a reference to it later.
For the coding ingredients, there is little new based on prior examples. Also note that whatever you see here, just like with the other samples, would have worked all the way back to the Internet Explorer 6 days.
So there is a need to draw (place) these globes into a "3 arm" configuration,
then to rotate this configuration around its center, first in 2D then in 3D.
A final step is to add the "spring" like mechanism that you see when you move the 3 arms, as well as some minor enhancements around the perception of speed when rotating the arms.
Drawing the Configuration
There are many ways to go about it and unlike a more generic approach used in the past with a proper 3D coordinates mechanism, there is a way to cheat perspective and work with a flat-like (2D) coordinate system.
Draw simply using Sin and Cos functions with each arm at 120 degrees from the next one. Use a fixed radius for each concentric set of globes and keep placing these outwards. In short, each element is drawn as an X:R*Cos(angle) and Y:R*Sin(angle). That's all there is to it.
Rotating the Configuration
"Moving" something visually is a step that's uncomfortable for many. In reality, your mind plays tricks on you, it's always simpler than you thin. If you've placed your globes using a nicely labeled structure of images and a proper loop, all that's left is to add a small Delta value to the angles. So changing R*Sin(120) to R*Sin(120+delta) and repainting everything will rotate the entire configuration around it's center. Increasing the delta with every redraw in a loop via SetInterval results in motion. Fine tune it to your liking and when tired of it, let's try the 3D version.
Moving from 2D to 3D can generally result in all sorts of problems based on what was started with. This example here is set up to avoid most problems, reflective globes are placed into a spherically symmetrical arrangement which gives all sorts of benefits.
The simplest way to introduce 3D is by including a second rotating angle (first being that "delta" above). Multiply this to the X component (Cosine) of all your coordinates, something like X:R*cos(120+delta)*cos(delta2). Turning this angle into a looping variable, you've achieved the illusion of 3D.
It does have problems though and one of them is the overlap as the globes move about. Thanks to the zIndex property of JavaScript, we're in luck. Determine a relationship between the positions of the globes at a given time and their relative "depth" placement. As the screen gets repainted, the proper zIndex is set on each element. Setting the display priority via zIndex is one those things that opened doors for 3D illusions in JavaScript. It was never meant for this I'm sure but that's what drives innovation, finding the unusual in an otherwise non eventful setting.
There are still two obvious problems at this point. One, if the globes were not PNG with Alpha transparency (as indicated earlier), then the result would be just white squares with drawings of globes around the screen. The second problem would be odd clipping around images. That gets resolved by placing the globes at the perfect distance from each other so there is just touch, but not overlap, or white space.
Done: a convincing 3D rotation. The limitation that is still present is no perspective correction on distances and sizes of objects (which I will leave as is because after all these are just ornaments for the holiday).
Imagine a picture of a hallway. If you measure the width of it on the paper, close to you vs the furthest end, the measurements are very different, however the hallway is the same width in reality. Also if there is a light switch far on a wall, it would be tiny vs one near you, which is again perspective related. But if you were holding a cube in your hand, or an apple, you really wouldn't be able to see that much difference in measurements. Small or close objects have almost no perspective to work with, that's often why abstract art fascinates your brain as you automatically try to resolve shapes into objects.
Should you have wanted to add perspective correction to this code you'd have been better of starting with a proper 3D coordinate system, as used in some of the previous articles.
"Spring" Like Motion
This can be simpler than what the visual response indicates, another signature of coding visual illusions. A tuned loop was used to draw all these globes then the angles were varied. What's next is to vary the radius on each concentric set of globes. Imagine adding and subtracting a bit every few times, would make them move outwards and inwards. So what's missing is a proper formula to give the spring feel. A bit of math comes into place here, a very important component if doing any kind of animation. All the organic or realistic feeling demos, websites, cartoons etc, rely heavily on non linear types of movements.
Spring-like motion involves varying the speed/acceleration as the object moves. A compressed spring being released moves much faster at first, then it slows down while reaching a fully extended state and this process repeats until it stops, just like a pendulum. In computer graphics, it's usually bad to control the "time" component, in other words you're rendering at 30-60fps and you don't want to change that just to simulate changes of speed. You translate that into modulating the distance accordingly, so the question to ask yourself is where would that object need to be in frame 23? This also avoids performance lag, for example you can rotate these globes really really fast and it feels as if they fly around on the screen, yet they skip frames, just like your vision processing does. In real life, if you take a picture at a nanosecond level of a fast moving object, the object is simply, "there". But not so with displays, the object only exists within the frames and your eyes just never know the difference.
Now that we're varying the distances and not the time, there are many functions to consider for that. A Cosine can do that, and in general one can do very well with a square polynomial or in the case here I've used a dampener type of function with constants that converges non-linearly from a start X0 to a finish X1. If Springs discussions do turn you on, don't forget to check Hooke's law.
Putting it All Together
Like everything else, the last 5% (or details) is what most of the results come from. This example could itself use hours and hours of more tuning, but I went on to practice what I preach and only spent enough time that I would otherwise use to browse the web or watch viral YouTube clips.
Allowing the user to drag or slide on a tablet is also involved here yet is not something innovative and worth describing. While not the simplest thing to do, Google search has you covered.
To conclude, fine tune all the parameters until you reach your perfect Holiday Ornamental configuration like I did with mine.
An Article That I Can't Stop You From Reading, Tragically
You do this to yourself, everyday, hundreds of times. You know about everything (to some extent) and you've seen and heard about most everything. Yet you're still here, somehow hoping for something new from an article just like this. You're trapped in a recursive loop with diminishing returns and increasing cost, your expiring time.
The Diagnosis
Your day is split between trying to perform a job for which you're overqualified and consuming random information through one or more devices that are electronically interconnected You're probably at most 3ft away from a cellphone and you're at work right now.
When Apple (don't forget to check their stock, consume, here you go AAPL) sells you a new shiny white product, you don't just give them your latest $399 dollars, they masterfully take valuable sections of your life with it too. You're being hypnotized subconsciously at every step. You shop, you read, you watch, you connect (virtually) with similar others to blanket confidence over desperation. You sell your time and money for food, internet and social networks.
The irony here is that as a society, as an inhabitant of this not-so-robust planet we need quite the opposite, which is to focus together on finding ways forward. We've long passed the stage where one (or few) can make a substantial contribution. Collaborations are essential to a viable future.
You suffer from being deadly informed.
The Cure
A cure is far from sight, unfortunately, take blind-hope pills for now. To be blunt, here's all you need to know about your life: you are a rocket launch. You build your launch pad, calculate a trajectory, pour your energy, launch, fly, land and you're back into organic waste.
You tend to have the energy but your trajectory is completely jammed. Your also fragment energy into nonsense, then burn and crash not far from the launch pad.
Finding a trajectory is your primary key to a cure. It is ultimately a healthy balance between your dreams and your capabilities. Find what drives you and learn to stay the course. Learn to be afraid when venturing off course. Be ready to see ahead when reaching milestones.
Stay the course of your trajectory. You can't get there if every 2 minutes you're off into a nonsense Google procured website (want one?, 2 minutes passed... here). You may need help from others, surround yourself with people who relate to your trajectory, not to your distractions. Think of them as your control center, your launch crew. The more ambitious the trajectory, the more you'll need them in your life.
Deal with unexpected obstacles. Most give up easily these days. When you're headed for a wall, concentrate and broaden your vision. Use every resource you have access to and ask your launch crew for help as well. Generally, you fail to see the open door nearby. Expecting your flight to resemble a straight line is pure fiction.
Don't be concerned with being unique. It is encoded in your DNA. You could have 3 people draw a picture of a nail and each will have a different result. When you do something it always comes out your way and the further you go the more defined it becomes.
Stop reading this article. The time it takes to read it is enough to take a life changing decision. The time it takes to read 10 of these is enough to make measurable progress toward your decision. You're reading much more than 10 today, not counting your generous time donations to Facebook or Twitter (here and here, straight to your drugs).
You're still reading in fact and what a waste of time. Please don't leave comments, there's no need to have an opinion, at best raise awareness with friends if you think it might matter to them. It probably won't, they're busy brainstorming about frying a turkey this Thanksgiving.
Hurricane Sandy, no power, no generator, quick alternatives
I've been talking with a few friends and neighbors who still struggle with no power and like me, do not own a generator.
There are some alternatives that are inexpensive and can take you through the next few very cold days until the power gets restored. You don't need to be a handy person and these are very low risk, considering the circumstances.
1. For heat, buy a propane heater from a store like Home Depot, Lowes or Walmart. These are in the $50 range, they connect directly to a typical 20lbs propane tank used with grills and are made to work without electricity. Normally intended for construction sites or garages/workspaces, with ventilation and short use they work just fine to heat your house/bedroom. Be cautious about fire hazards, that's the last thing you need, so don't run them over night, but 30 minutes before you go to bed then switch them off. The heat should last until morning.
2. For your refrigerator or medium/small appliances, generators are sold out in general, but you might be able to find a power inverter. These are sold at stores like Autozone, Walmart, HomeDepo, Sears and similar. Don't be surprised if they are also hard to find, but much better chance in finding one than a generator. Being that they're tiny (size and weight), you can also overnight them cheap from Amazon. A 750watt inverter runs for under $100. You can hook one up to your car's battery and let the car idle (outside your garage!). An inverter has one or two plugs which you can use to keep your freezer running or anything else of interest. Use an extension cord but keep in mind the longer the length the less power available. Also don't let this run without your car idling or you may drain your battery and can't start your car. If you have a large SUV, it might come with a 120V power outlet that may be able to carry the load of a refrigerator. Don't waste time with your cigarette lighter based power output, it is too low to carry the load of any decent appliance.
You can go a step further (if you don't have access to a car) and buy one or two deep cycle (marine) batteries. These again sell at most stores above, especially Walmart and Autozone. For less than $100 you can pick one up and if it's charged, it can be used with your power inverter to run your refrigerator for a few days (connect it every few hours and only open the refrigerator when you strictly need to). Should it run out of charge, some stores like Autozone offer free recharging.
3. For lights, consider picking up a few LED bulbs. These consume next to nothing and if you have a power inverter setup, you can run them for days without affecting much the power drain. If you shop carefully you might find them on sale, they range anywhere from $5 to $40, and can produce just as much light as a regular 60w bulb that consumes 5 times as much electricity.
The weather is about to get colder over the next few days, and the forecast of a potential Nor'Easter around the corner is not helping. Hoping you get through these days fine.
This has been bubbling up for some time for me, worth capturing in a post. Not exactly sure what lead to it, but as we read around, look around or listen, it appears that everyone is labeled... awesome. Or brilliant, or genius, or incredible.
It just has to be noted what a remarkable abuse of the English language this in fact is. Not that long ago, there used to be people like Albert Einstein, Nikola Tesla, Frederic Chopin. They, are awesome, brilliant, genius, incredible.
Today, unfortunately, especially in the world of technology or simply in money making or fame, everyone gets to be called the same pompous way. On what basis can someone building a website with some improvements over the next, gets to be called the same as Einstein? Or does a new pop song buy you a closer spot to Chopin's grave?
At least in the world of technology (where I belong) I thought it would suffice to give the name of entrepreneur. Fancy, and hard enough to even spell by half of us. Actually for the unacquainted you should know that we also call ourselves specialists, architects, gurus and evangelists...
With our erroneous labeling standards, it would mean that we have somewhere around tens of millions of Einsteins, Chopins and others, all living in the same era, alive and interconnected!
If that's the case, perhaps we should consider some consequences.
For one, how is it that we don't really improve all that much in the grand schema and in fact Einstein is still at the core for much of our ability to even as much as get off a few feet of the ground (plus we still don't fully understand his theories, just to be clear). Most of our improvements are incremental and really far from revolutionary (at least in the way the term was coined).
Deux, we may owe an apology to the very few that indeed could belong to the correct list of extraordinaires. I should try an example, perhaps Stephen Hawkings (who proved 20+ years ago that black holes don't release energy, then recently corrected himself for having have made a wrong assumption yet no one globally correcting him all this time). There are others, we might have a handful along the lines of Nobel Price winners, laureates, athletes and so forth.
At last we may need to come up with new terms because a good percentage of the population has robbed all the superlatives. Giga-awesome? Super-brilliant? Just terrible.
A Scope Problem
In an analytic sense, the reason for what happens is not absurd. People inherently love to be praised, it fuels their egos and sometimes their motivation, innovation, creativity. They just have to hear how great they are, as comical and toddler specific phenomena that may be. They want to stand out from the crowd, I hear that a lot too. At home, or talking with friends or colleagues, it's ok. But the blur happens when it's mentioned in the news or in the broader, global scope.
As long as the superlatives do indeed result in improvements overall, I'd argue that's fine, but then don't blend in the very few truly remarkable individuals of our existence.
Nothing should justify a change in the ratio of remarkable individuals vs others. History affords very little paper when it comes to names and individuals.
To conclude, I would like to extend a call for help to all the influential blogs, tech writers and many media labels, to come up with a sensible plan on correcting the World before we'll be choking on our own "awesomeness".
If you follow some of the "tricks" from Google around HTML5, more recently they're allowing you to type a mathematical formula in the search bar and that would get charted for you in 3D in the browser. So for example you could type:
sin(x*x+y*y)
And it will (should) show a pretty 3D visualization of the formula.
What's nice is that is HTML5, not Flash, which follows Google's general coding practices for client web. However, that's done using WebGL. That means lots of us won't be able to see it, and especially those on tablets or phones. Also, it has a feel of using a cannon to shoot a rabbit because WebGL is far more powerful than just drawing some 3D surfaces.
In my sample here I'm showing how you can generate 3D surfaces just as well without WebGL and still remaining fairly compatible with most browsers and hardware. As with many of my other examples, this one too could have been running well before HTML5. Take a look here at a
3D surface without WebGL
and read further if you're interested.
So How Is This One Made?
As mentioned in other JavaScript Hacks from the past, before attempting to code something like this, you need to identify if you have the basic ingredient in the platform you're intending to work with (platform being JavaScript in this case).
The key ingredient here is the ability to draw shaded polygons. Nothing more, nothing less.
Since I knew that there is a way to do that either through SVG or VML, that gave me the confidence to go forward and also support most browsers.
Let's break this down into incremental steps.
Drawing surfaces (or most 3D shapes ni general) comes down to being able to draw (and shade) triangles. Most elements can be broken down efficiently into that and even in some of the very expensive 3D rendering applications, all those smooth and shinny surfaces are in fact a multitude of tiny well coordinated and colored triangles.
That's not to say that you could not generate a shape from a bigger N-gon though you may lose details and performance. In this case, I actually went with polygons made of 4 points instead of 3, because it simplified a bit the coding and I was looking for a proof of concept only. One other downside worth mentioning is in 3D you can't guarantee that 4 points are in the same plane so this sample shows some of this problem as you move the surface around (happens as the surface turns "in or out").
But let's go even simpler because in the interest of keeping you close to the visuals I jumped the basics.
You always start drawing something in 3D just from points (dots, or once connected become vertices). The SIN function listed above, will provide you the points for third (3D) component, all you need to do is iterate over a an XY planar set of value.
The more dots, the better effect you obtain in visualizing the function. In my sample, I went for a set of X and Y from -5 to 5 in increments of 1, for a total of 25 dots. Sure you could draw your entire surface from dots, but would be extremely slow.
For the 3D basics in coordinates, you could use one of the previous samples at this point such as the 3D Rotating Spheres or the 3D Globe and just draw these points. The functions are actually copied over from there so they are the same.
The obvious problem is you won't have something pretty, would be hard to visually convey what the surface is.
So that's what this new sample brings in. You will see that a poly-line function has been defined to work both for SVG and VML. This then is called for every 4 adjacent points that the SIN function has generated (and the 3d coordinates system reduced to 2d).
You're not done though. You would generally start seeing a lot of overlaps, because most surfaces have their "back" faces and drawing all the lines between dots, will add to a messy image. Normally, in a 3D software package you're going to reach into so called "clipping". That's something you don't want to work out in JS because math aside, is too taxing on performance (remember, don't forget to always show the FPS as you code ahead).
What you'll do instead to solve this problem, is try to draw things from back to forward and fill (shade) the polygons with color. That way, the last drawn polygon ends up covering fully the overlapping section of the ones in the back. That's what I was counting as a key ingredient at the beginning of this sample, and without it, all the work would remain visually questionable.
What's left? add motion response to it based on your mouse coordinates. Just like in the previous samples, this is a fairly easy step yet highly rewarding visually, because now you can "turn" the surface in 3D. I've also added transparency which shows a nicer effect in some browsers such as Chrome which you should be using anyway.
That's all there is to it. Depending on the function you would choose to chart, you may also need to zoom it and scale it to present itself properly on the screen.
The Social Disbalance of an Artificially Balanced Society
How do you ruin a dog? Well, devoid the animal from the experience of hunting. Buy them universally manufactured food. Prevent them from developing immunity to anything as you keep them indoors, on a pillow. Take them to have their nails clipped because they don't do proper activities. And some of us also kick and punish their dogs for any "non angelic" behavior and some, further, abandon them to perhaps get euthanized for no longer being able to reintegrate as "man's best friend".
There Is No Safety Fuse
You wake up late. Burn yourself ironing a shirt. Car won't start for 10 minutes. Get stuck in traffic. Someone flips you the finger and drives away. At work, door slammed in your face. A customer cancels. The building has no water. Your spouse calls and you yell at them.
A common day for many and the fact that such days tend to repeat, means you have your own Chinese drop effect.
There's only one thing that went "perfect" in that day, your build-up of negative energy. The more of that, the more likely you do something stupid, toward yourself or others, and it can go from laughing it off to murder. Society does not help you defuse from such situations.
You Only Get Single Sided Advice
When was the last time you got an advice to quit your job and become maybe a fisherman somewhere far away? Someone telling that you suck at what you do and to give up. Or someone pointing out that you really are fat, or that your hair does look bad, or that a meeting is indeed useless even though there are bright people attending? Society wraps everything around in a politically correct and politely misleading veil. The advice that you really need is usually sitting in people's minds everywhere around you, but we're somehow trained to screw each other up instead.
You Will Not Have a Great Career
There's not much to say of my own here other than to point at the excellent (albeit diluted) video from professor of Economics Larry Smith on why you will fail to have a great career. Since you don't have enough time, he's talking about all the amazing nonsense that you invoke to make an excuse for failing at your success. He's very accommodating still by summarizing that the worst outcome is that you will be remembered for having invented velcro as an engineer. The reality is, you will not make it that far, you will not be remembered at all.
If You Work Hard Enough You Will (NOT) Get There
Another social nonsense. The world around you is full of opportunity to work real hard and get diminishing returns. Just offer your help, everyone will want a piece of it until you won't be able to help and then you will be left alone most of the time. You often wrap this with some sort of belief in supernatural forces that would somehow guide you in life toward your goal (the "r" word). Then you also combine it with the concept of life being fair, or at least your flawed understanding of that. It is all fiction fueled by the society you live in. Concentrate on whatever you actually need in order to get the job done.
Your Family And Your Earthly Possessions Only Make You a Nobody
As soon as you hit some difficulty or hard to answer question about yourself you're defending with what you've done so far. That yes, you have a wonderful, not to mention "loving", family. And a great job, then goes into things like a house, or a few of them, then cars, yachts, and how important your job is/has been. In reality, you're thinking inside the box. You'll never going to be remembered as anybody, unlike an Einstein or a Dostoyevsky. You were more or less a conveyor belt of the system, but not an architect or visionary of it.
Low On Risk, High On Comfort
The longer you perceived success in your life, the less likely you will risk losing any. What you don't realize is that at any point in your life, you practically have nothing. If you feel like doing something different, special, driven out of passion, in most cases it has a zero cost attached. One way or another, the outcome is that you'll be 70+ years old and dying away of some form of cancer. At least die with grand memories of the insane and crazy things you've tried. Don't be fairly ok at most things. Aim for one big thing and it will make you live for hundreds of years instead. Be ready to still fail but at least you gave it a good shot.
Resolving It All To Victims And Murderers
When emotional tragedies happen such as a brutal murder, we rush to catch the criminals, judge them, jail or kill them, mourn the victims and collect pay checks for legal services rendered. No real intelligence is involved in discovering what exact elements of the society cause most of these. Just like it's not the gun that kills people, it's really not the murderer that did that either. It may even go so far that they were the victim after all and your lost loved one was an accident. It's everything and everyone that the murderer was exposed to in their life that caused them to act in the way they did. So because of poor resolution, the outcome is random repeats of similar events with little chance of resolving the true society driven problems.
Take a Pill
You can take a pill if you're depressed, if you can't sleep, or if you can't have sex. No one has what it takes anymore to deal with mental challenges. Every time you take one of these pills, unless it's for fun or you're about to cause serious harm or you're one of the few that really have a medical need, you're basically giving up. You're timing yourself out from life until you are either ready to face reality again or die as your disconnected self. A lot of the great achievers have gone through excruciating pains. You, avoiding them, will probably not become one.
Population Is Growing, Intelligence Remains Constant
The school system is light years from what you would really need to know while growing up. Somewhere along the way in the past, we discovered that we are, programmable. That we can be taught things. But then we rushed into writing a bible and enforcing an education system that fits all of us.
It's generally understood that computers are outdated every year or two, but we think that the way we're programming ourselves needs to stay the same over decades and work the same for all.
To Conclude, You Misunderstand This Article
Your mind is telling you that you just read a negative piece of text that intends to put you down or make you fail. Or you're ready to disagree vehemently with points made. And you could be right, but you'd be in the wrong scope. Instead, you often need to be called a failure in order not to fail. The society wants to celebrate you when you succeed, but does not want to deal with you when you fail, so you're disproportionately less equipped to deal with that.
Own your life and always question what really is meaningful, is what the intent here was.
JavaScript Hacks: 3D Earth +Twitter Geo-location Made Entirely Out of DIVs
Again digging through some of my weekend projects done for absolutely no purpose other than fun, I got this 3D rotating visualization of the Earth.
This was maybe 2 years ago? Back in those days, there was little graphical support, so what you see here is actually around 3000+ divs moving around your screen. Also every 10 seconds you will see randomly highlighted a city around the globe along with real time live tweets from people in that geographic area.
Take a look here at the demo (keep the mouse lower right of your screen to better see the globe):
3D Earth +Twitter Geo-location Made Entirely Out of DIVs
And if you're interested in learning about it, have a read further. (Do use Chrome, you really need any performance drop you can get).
How Globes Are Done Today
While that was hot and pushing the envelope back then, it's nowhere near as pretty as what you can do with HTML5/WebGL these days, see something I put together in 20 minutes here:
JavaScript WebGL Earth
Note this may or may not work for you because WebGL is still not an everyday commodity, especially on mobile platforms. If you can't see it, at least a screenshot would look like this:
From a coding standpoint however, if you came to me looking for a job in UI, you'd have earned immensely more credits by showing me your ugly DIVs code and let's talk about why is that (in short, one takes a lot more know-how than the other).
How Do You Start About Doing Something Like This?
It starts with the idea, but what you need to have in your mind before throwing an idea, is the proper context. So the better you know the world of JavaScript and what can be done in it (preferably have suffered through a lot of coding scenarios), the more realistic your idea is. You don't want to reach for something that would be really great but you have absolutely no sense if it can be done. Not only will it no longer be a weekend project but you may have to throw it away too because might not be possible to build. Working with UI is a lot of smoke and mirrors, conveying magic with no magic.
So I always wanted to render a globe in JavaScript and my only real dilemma was performance of drawing and moving thousands of DIVs. I knew how to do the rest or was confident that I can pull it off so I said worst case scenario, I will have to lower th number of divs to a number that is acceptable for speed, yet still makes sense visually.
Basic 3D Math / Rotation Equations
Before thinking of a globe, you'll need to start with some code that's generic enough to draw or move 3D "anything". That's what I started with and if you skip down in "view source code" mode of the sample, you'll be able to come across it (I'll explain you below what's up with the mess of numbers up top in the script).
So play with your JS until you get a moderately well performing 3D engine that responds to a mouse move and can take XYZ coordinates with the elements added to it. Keep track of your frame rate at all times (see it displayed in the corner). This is your gauge along your project, with every change, you will know if you've screwed up performance or not, so you can address it right away. Otherwise, it's harder to go back from a finished but slow demo, you just won't know what's the main cause and sometimes you'll have to rewrite a lot of code because the approach needs changed. So check FPS early and often.
The Pixels
Great, you're ready to display some fun 3D graphics. Now how on Earth to draw the Earth? You have choices like canvas or vector graphics or WebGL lately, but these while powerful, would have not worked for you many years ago, and there's something about proving that you can do a lot with very little as opposed to using a canon to shoot a rabbit.
Your choice is really down to pixels and the closest to that in older JS, were DIVs. They can be placed in absolute coordinates on the screen just like pixels, and if you set their width, height to 1px and overflow to hidden, you've got yourself a basic pixel. Don't be fouled though, these are immensely more "heavy" than pixels, and JS can only be commended for being able to draw so many of these as if they were pixels (kudos go to the Chrome V8 Team from Google who first brought such performance to reality; to see the difference, just try this same code in IE, the FPS will have the answer).
The Planet Earth
Now that you "mastered" pixels and can paint them in 3D, time to put together the globe. This is a task where you may get a bit lazy. My plan involved searching for a good enough vector graphics map of the Earth, then processing that down to pixel entries. First issue, will you need some software to convert from a typical vector file to XYZ readable data for your JS code? Turns out that you won't, you can open with a text editor most vector formats and you can find the coordinate sections.
After some Googling I came across something. The vector file was easy enough to read so I could see that I have XYZ coordinates. But after a first rough-in of the coordinates, I got two problems:
1) The coordinates gave a very poor look to my globe and that's because they were mainly intended for use with lines connecting from one another, and for example there was no data inside the continent or country pieces.
2) Performance. I think I had around 20,000 points, which meant DIVS. It was a complete frame freeze, so I had to consider ways to use much less points, yet give a much better visual, two contradicting goals in a way.
The solution came from finding some data made entirely of longitudes and latitudes. I was also able to model this data inside 3D Studio Max from Autodesk and reduce number of "pixels" as needed until I would feel comfortable with performance.
One barrier here, was the use of LAT/LONG coordinates instead of XYZ. You'll easily find a way to convert from one to another and given that you work in geographic terms, it would be best to stick with these instead of XYZ.
After enough tuning, I settled for around 3000 DIVS which were capturing kind of well the shape of our continents and overall looked like a 3D globe. I also crushed a bit the height so it would look less like a sphere and more like the realistic look the planet has due to the centrifugal force.
Cities
The next step was to add cities. I was able to find through Wikipedia a nice set of thousands of major cities around the world, all in LAT/LONG coordinates. Filtered that a bit through Excel and got down to a few hundred reasonable sets of LAT/LONG/Name. I've colored these with the orange color while left the "definition" pixels in blue. Now I was in a position to set a timer and highlight at random a city every 10 seconds and also display its name so the viewer can identify it.
Insert Twitter Here
The frame rate seemed decent enough, 24+ in my case, which is fine for a slow rotating object like the planet. It felt a bit empty so I decided to give a look at what Twitter does. This especially was a source of inspiration as I was just recently talking with a friend of mine @niels who joined them and I knew they have plenty of free APIs for all sorts of things. Turns out it's very easy with a JSON call to query for tweets based on LAT/LONG. After placing the code in and roughing up a bit the formatting, I was able to fire a query every 10 seconds for the random city being highlighted.
About That Code
As usual big apologies for never writing it for learning really, but you should be able to spot sections of interest through it.
A) Why so much inline coordinates? I had to store all the LAT/LONG coordinates as well as the cities. I could have imported them in a separate JS file but it's quicker to trigger less calls for includes. Note the code has zero includes.
B) Why store arrays for SIN/COS values in the JS? Performance. In most languages calculating Sin and Cosine is expensive, learnt this early in life from X86 Assembler times. Unless you have some sort of hardware acceleration, you'd be better off calculating these ahead and storing them in arrays. The challenge is to find the right granularity so that things still look ok, so for example sometimes you need to store a tenth of a degree, that can add up to 3600 values X 2. Also the number of decimals may matter for the same reason. To produce the value, use Excel, always a nice helper in such cases.
That's about all there is to it, hope you had some fun as I sure did have fun putting it together.
User Experience Migraines: 10 Ways You Lose Time Every Day
It never ceases to amaze me how problems that seem blaring obvious to a user of a product, don't make it into fixes at high end brands.
Here are a few examples which show how you, consciously or not, get your time taken away and probably also alter your mood.
1. Google Chrome Forgetting Tabs After Upgrades Or Crashes
It's a usual morning on your computer. 20+ Chrome tabs are open and you decide to upgrade as it's been a while since last time. The install goes fast and now all your tabs close and you're waiting for them to come back up momentarily. But they don't always come back... You wait a full 30 seconds, nothing. You then open Chrome yourself. What tabs? They're gone. The browser assured you on the tabs yet it just failed in your face. You would have saved some manually if you knew this would happen.
There are also the permanent cases when the browser opens the tabs but those that had authenticated sessions (GMail for example), are asking you to log back in and as if that wasn't frustrating already, once relogged in you're not guaranteed to be taken back to where you were.
2. Microsoft Windows Updates
You're done updating Chrome, now Windows says "me too!" - or else your "system is in danger". Click Yes to update? What if it requires you to restart?
Every few days the constant reminder creeps up. Day in day out, every 4 hours you say "no thanks" and also dread that you may accidentally click "yes" and then everything would get sucked away from your desktop with a swift auto-reboot that will feel as if your life has been reset.
3. Sites That Lose Your Content Upon Submit
An hour later (after when MS gives your computer back) you read through some blogs perhaps. You find something interesting and decide to maybe leave a comment. You type and when time comes to "submit", turns out you need to register. Complicated forms later, you need to confirm your email, but then to your surprise, your comment is gone. Care to retype it? Didn't think so.
That's actually happening in many other ways. Some sites will let you enter a few dozen fields, and a mile down, a single submit button. What if my computer crashed in the meanwhile? Clicking that submit though tells you that some fields were not correct (not that you had clear instructions initially). You correct those (now the error clearly states in a harassing note what was needed from you), but turns out the page now "lost" other fields which were fine. They basically turn this into a puzzle against your will and common sense.
4. YouTube Pause vs Scroll
Out of your blogs you check a clip on YouTube. You don't have time to see the 12 minutes "funny" video that your friend sent so you scroll through it by dragging on the scroll bar. But you end up pausing instead because as it turns out if your click is not precisely on the thin bar, it results in a pause (tablets are even more fun). Some users don't know what happened, they just leave the site - "video is broken". Others figure out that if they click AGAIN on the clip, it resumes. Convenient, will +1 that, but couldn't we leave an inactive area just above the scroll bar please? Make sure to combine this with choking bandwidth and almost forgot, this was preceded by a 15 seconds video commercial which was not too bad as some sites bump that to 30 seconds AND their clip doesn't even start afterwards.
5. MS Windows Focus
This has always been a problem. You open something, like Windows Explorer. Turns out it's quite a process. A frozen white background window pops up and gradually paints your file system over the course of 30 seconds. Same as 10 years ago. How do you write software that performs consistently poor over exponentially better hardware?
Explorer is up, you want to page down but somehow hit "Delete" instead and you're waiting to be prompted with "do you wish to delete the file?" Instead, Explorer is semi frozen. You open some other random desktop app which asks you something like "Click Yes to continue" which you agree with, however in that split second when you're reaching with the mouse to the YES and clicking it, the frozen delete popup comes out of nowhere right in front of you and in the same exact location and "click", you just deleted your file. This happens in so many other circumstances , the focusing mechanism is simply incorrect.
6. Sites That Add Barriers In Front Of Free Content
You go to Facebook to see what everyone else is posting today. Interesting news from The Wall Street Journal. You click but get presented with an "install app" popup. So really what should a user do next? The user will go to Google News and paste the headline which will then show the actual story, on YOUR exact same website. Even if that exact headline is not accessible, there are hundreds of similar versions of the same story, all 1 click away. It's understood that online media needs to monetize, but then should focus on solving that issue not on adding extra clicks for reading free news article. As with points above, this is not just on news. On Facebook for example friends post videos which are clearly originated on YouTube but magically you're expected to install a Facebook App this time around just to get to the clip.
7. Opening ANY MS Office Product
You check your trusted GMail which reminds you that things CAN work fast, but you decide to open up a Word DOC attachment. Click, nothing happens. Literally you can switch tabs and browse. About 20 seconds later, your computer starts to show signs of convulsion. The mouse skips, windows repaint only partially, eventually a full freeze is in effect. You watch helplessly and hope this is not a "blue screen of death" moment, then 10 seconds later you finally get to see the popup that just ruined the latest minute of your life: "Welcome to Microsoft Word". The hard drive is cranking, LEDs are blinking and gradually your computer regains life and you see a blank page from Microsoft Word with a cursor blinking slowly as if it's trying to suggest that you should be calm. Another convulsion begins and 15 seconds later, your document comes up. Amazing, all that on a super quad CPU machine that could launch a rocket in space otherwise. Sometimes this also comes with a critical error after which this process reverses without you having any control.
8. Chrome Again: Focus Again
You remember to google something up like "can I use bleach to clear up an oil stain from a shirt?" (guy's queries). You fire up the super-fast-starting Chrome but nothing happens. What you did not see is that it actually did open, but behind your other 20 instances. Super quiet...
You switch to the new instance and start typing your query. You hit enter, look at the screen, and again nothing happened. Your text? is not there. Although the Chrome focus is blinking in the search box, it "types" nowhere. You need to click and focus the already focused text box and type again all that question. It's an inconsistent behavior, but all too common and unacceptable.
9. Ads Usage On Media Sites
You're on Google News and read a horrible headline, "tragic: 5 people burned alive by drug cartels", or "child loses arm in violent attack by parent" (the usual socially impressive stuff that we do in modern times). As you start reading the dramatic story, your page starts fading into black. Some flying nonsense popup comes in slowly from the left without any possibility to locate the close button. Then a silly animation follows with a message from your local grocery store: "Short of hot dogs? So TRAGIC! Click to order here". I understand that we can match ads to content, but looks like we forgot the ethical factors. Don't we also do sentiment analysis? This again happens in so many other ways, including the ads that open and shift the content as you read it, then as you scroll down to relocate your reading line, they close and shift your content back. Ruthless really.
10. Adobe Acrobat Reader
This might just be the winner. You're reading a fascinating story and get interrupted by the most advanced, sophisticated and demanding software in the history of software: the Adobe Acrobat Reader. This software, apparently needs updates AND rebooting, every few days. All this so you can open up some PDF file every few months or so. Should you not perform the update, a reminder icon shines in bright red and works in tandem with the Windows Upgrade Popup described earlier to add to a more stressful user experience on your own personal computer.
To conclude I'd like to remind that I'm not just a user but a tech person who also works on user experience in products. I can only imagine the frustration of non technical users who are helpless in trying to distinguish if a certain behavior is wrong and fixable or in fact they are crazy and need to adjust to the software.
Was looking through some older code on my computer and came across something worth polishing and putting up as another fun JavaScript sample.
Here, try
The 3D Rotating Spheres
first and if you're interested read further.
If you are new to the world of 3D this might be a good sample for you to learn from. When it comes to drawing 3D, spheres are literally magic, or in layman's terms, smoke and mirrors.
3D Spheres Look Good "Fake"
Unlike any other 3D object, spheres are the only ones that don't require to look differently from other angles in order to maintain the 3D illusion that we always feed on through our 2D screens. No matter how one is rotated on the screen, your eyes (and brain) won't complain that it's no longer "right".
In fact spheres are so different than the rest of the objects that even if you tried to create one "the proper way" in 3D, it would be hard to make it look as you want it.
Ever used a 3D rendering package, maybe Maya or 3D Studio MAX? (there are plenty more, some free too). If not, you should definitely have this task on your to-do list if considering UI/UX. Not only are these tools a lot of fun because are visually gratifying but you will learn immensely about the world of 3D as perceived by humans (shading algorithms, colors, reflection, materials, cameras, lights etc).
So: consider rendering a metallic or chrome like sphere. You'll get disappointed fairly fast. Easy to render a sphere (it's a primitive in all tools), but no matter how you struggle with lights, reflections and camera angles, it does not look like the reflective sphere that you have in your mind.
The solution is less intuitive and somewhat deceiving: add a static image to your scene that the sphere can reflect from. Now it will look more like it. A reflective sphere means nothing in a vacuum-like, "black", environment. But you're still not happy, you've added an image that was a stunning landscape and this now shows nicely as reflected on the sphere, yet when rendering the sphere in motion, your eyes start to be let down because they can localize the source of your image somewhere in the scene. Your brain now knows it's not a landscape, it's a flat picture of a landscape. Illusion lost.
There's a world of tricks around spheres, I won't go there. The bottom line, you will have to "fake it" even more by replacing your image with something that looks like an unwrapped chrome image, usually a smooth combination of two shades of gray (light and dark) with random transitions.
THAT, is the sphere you want when working with basic 3D animated illusions and you'll see why.
JavaScript "Render" No Can't Do
To dissect a bit the JavaScript sample you've seen above. There really isn't any 3D rendering involved. Rendering is something that traditionally was not possible part of the JS world until recently when the world of WebGL started showing up.
You used to have no ways of drawing basic lines in JS, or dots, so how on Earth could you have done 3D rotating spheres. Yet this sample would have worked 4 years ago in IE6, albeit a bit slower.
About That Smoke and Mirrors
What you see is a collection of images of spheres that get moved around the screen. If you manage to move them in a realistic manner, your eyes/brain will build a virtual horizon and switch the interpretation of the visual to 3D, it's that magic moment that kicks in. You're not done though. When you have more than 1 sphere, chances are they could visually overlap when moving around the screen. Theoretically, this would mean "clipping" in 3D, but again, this is not an area where JavaScript would have given you a chance.
What comes to the rescue is transparent images, PNGs being the better flavor. In the case of a sphere, you want it's surroundings to be transparent so that if you put two spheres next to each other, they can look as if they're touching.
The last trick you need here is the zIndex property which in JavaScript allows you to overlap images and specify how they sit on top of each other. Z stands for the "third" axis, or the one that gives the 3D perspective if you will. A stretch for JS but easy enough to remember.
These are all the ingredients you need. Combine that with proper 3D motion equations (which are not as hard as you'd think and can be learn anywhere on the web as long as you're mathematically inclined) and with a fluent, organic-like mouse control, and you get a very convincing illusion of 3D.
One problem will usually hunt you while animating in JavaScript is performance. Improving your skills on dealing with performance is an art in itself and it will take you lots of trials and errors and plenty of Google searches and learning from what others have done.
Hope you enjoyed this and got something useful out of it.