text:
Tag Archives: dictation
iOS 8 beta 4 brings streaming voice recognition to keyboard dictation (Video)
Toady's new beta update to iOS 8 features a change to the way the built-in dictation system works. In previous versions of iOS, dictating text into an app would send your voice to Apple's server once you finished speaking to be analyzed and return the converted text. Siri used to function the same way, but with iOS 8 Apple made changes that allowed voice input to be streamed to the server for conversion while the user was still speaking.
As of iOS 8 beta 4, the system keyboard's dictation feature now works the same way. Just like in Siri, you can now see each word appear almost immediately as you speak. It allows you to catch errors more quickly as they happen and brings the various voice-powered features of iOS in-line.
Check out the video below to see it in action:
OS X got this same feature when Mavericks launched last year in a mode called "enhanced dictation" that also allowed for offline speech-to-text conversion. Unfortunately, it doesn't seem offline mode is available on iOS just yet, though Apple is reportedly testing that feature now.
Filed under: iOS Tagged: beta, dictation, iOS 8, speech
Check out 9to5Mac for more breaking coverage of iOS, iOS 8, and beta.
What do you think? Discuss "iOS 8 beta 4 brings streaming voice recognition to keyboard dictation (Video)" with our community.
Add Russian, Brazilian Portuguese, & Thai to the list of Siri languages Apple is working on
Back in 2012 we noted that Apple was hiring engineers to help localize Siri into a number of languages the feature does not yet support. Those included Arabic, Norwegian, Dutch, Swedish, Finnish, and Danish, and recently Apple has added job listings for three more languages: Russian, Brazilian Portuguese and Thai. Apple also posted more recent job listings for the languages it first started hiring for back in 2012.
While Apple didn't announce any new languages for Siri coming in iOS 8 when it previewed the new operating system earlier this month, it's always a possibility languages could be added in time for its release this fall.
Apple is yet to add support for the languages mentioned above that it started hiring for a couple years back. Currently, Apple lists the following languages and localizations as supported by Siri:
- United States (English, Spanish)
- United Kingdom (English)
- Australia (English)
- France (French)
- Germany (German)
- Japan (Japanese)
- Canada (English, Canadian French)
- China (Mandarin)
- Hong Kong (Cantonese)
- Italy (Italian)
- Korea (Korean)
- Mexico (Spanish)
- Spain (Spanish)
- Switzerland (Italian, French, German)
- Taiwan (Mandarin)
While not Siri support, Apple will be adding 24 new languages to its dictation feature in iOS 8 and OS X Yosemite including Norwegian, Russian, Swedish, Thai, Portuguese and some of the other new languages it has been hiring engineers for recently.
Filed under: Apps Tagged: Apple, apple hiring, Apple. JOBS, brazilian portuguese, dictation, hiring, Jobs, language support, Languages, Siri, siri support russian, Thai
Continue reading more about Apple, Apps, and Siri at 9to5Mac.
What do you think? Discuss "Add Russian, Brazilian Portuguese, & Thai to the list of Siri languages Apple is working on" with our community.
Here are all 24 new dictation languages arriving in iOS 8 & OS X Yosemite
During its unveiling of iOS 8 and OS X 10.10 Yosemite yesterday, Apple mentioned that it's adding 24 new dictation languages, but it didn't specify what those languages would be. Dictation, a feature available on both iOS and OS X, uses speech-to-text technology powered by Nuance to let users input text using only their voice rather than a keyboard or touchscreen.
Apple has gone from just 8 languages (with a few variations for some) to over 30 in Yosemite. In case you're curious if your language will make the cut by the time the new operating systems are released this fall, below we've included a full list of new supported languages and variations by country:
Apple actually has 23 languages listed, but it appears it's counting variations of Portuguese for Brazil and Portugal as two new languages. Apple also announced yesterday that it's adding Indian, Tagalog, Irish Gaelic, and Slovenian keyboards as well as new definition dictionaries for Russian, Brazilian Portuguese, Thai, and Turkish Hindi localization.
Filed under: Apps, iOS, Mac Tagged: 24, Arabic, Brazil, Dictate, dictation, Dutch, Finnish, Greek, Hebrew, iOS, iOS 8, iPhone, Languages, OS X, Portuguese, Russian, Slovak, speech to text, Swedish, Thai, Ukrainian, Vietnamese, yosemite
Continue reading more about iPhone, Apps, and iOS at 9to5Mac.
What do you think? Discuss "Here are all 24 new dictation languages arriving in iOS 8 & OS X Yosemite" with our community.
Review: Dragon Dictate 4.0 for Mac – The best speech recognition app gets even better
Using our voice to control computers has never really taken off. For many of us, using voice recognition technology wasn't even a consideration until features like dictation and Siri arrived on our iPhones and iPads. There's good reason too: the voice recognition features built into our devices have always had the reputation of being half-baked. They simply aren't accurate and consistent enough to replace our tried and trusted mouse and keyboard or touchscreen. While half decent dictation features come with every Mac (and are powered by Nuance's technology), the voice recognition features you get with latest version of Nuance's Dragon Dictate for Mac go well beyond simply dictating speech to text.
When people think Nuance and Dragon Dictate they typically think speech to text dictation features. After reading a bit of text and walking through a brief tutorial (about 10 minutes total), the app is remarkably accurate at understanding your voice and dictating speech consistently. If you haven't tried full-blown dictation software like Dragon in recent years like myself, you'll truly be amazed at how precise the program is at dictating error-free text as you speak naturally. There's no need to speak slowly and carefully to make sure every word is recognized, and there's no waiting around for the software to catch up to what you're saying.
So will I be writing my articles for 9to5Mac by simply speaking and having Dragon dictate from now on? Nope. Dragon Dictate won't let you plow through a 5000 word piece nearly as quick as you'd type it, mainly because learning the commands necessary for formatting and corrections is like learning a new language. Basic commands seem easy enough to remember while dictating— Caps on, close quote, comma, 'apostrophe ess', insert, correct, new line— but in practice having to speak commands to properly format a sentence as you dictate takes away from the freedom of being able to capture your thoughts as you speak freely. I personally found the software much more useful for composing short snippets of text that typically don't require much formatting or a deep train of thought that might be interrupted by formatting commands, like emails, Tweets, reminders, lists, and brainstorming sessions.
Of course, that process becomes much easier as you memorize and become more comfortable with the commands. While for me it won't be replacing my keyboard on a daily basis for writing, that doesn't mean with a little practice dictation in Dragon Dictate 4.0 can't be a powerful alternative if necessary. Dragon Dictate has long been a popular product among those with medical conditions like arthritis that limit the ability to type comfortably or at all.
Admittedly your mileage with accuracy might vary depending on your accent (I was using the U.S. setting since there is no Canadian accent preference), but there are also region settings for the UK, Singapore, New Zealand, Canada and India, as well as accent preferences for American, American- Inland Northern, American- Southern, American- Teens, Australian, British, Indian, Latino, and Southeast Asian.
For me, the real standout feature of Dragon Dictate 4.0 is the ability to control applications on your Mac using only your voice. Dragon Dictate comes with a number of built-in commands that allow you to control functions across apps like Finder, Mail, Messages, Notes and Safari, as well as commands for composing email or sharing status updates to Facebook and Twitter. It also has a powerful built-in command editor that lets you setup your own voice commands for just about anything you can think of. Launch, quit, or hide applications, search the web, open a file or folder, or create a new reminder using only your voice. I set up commands for opening new tabs and navigating to specific tabs in Chrome, switching between or launching my commonly used full-screen apps by simply saying the app's name, initiating playback in Logic Pro, as well as opening files and folders in Finder. The command editor is easy enough for anyone to setup commands for opening apps, bookmarks, files and folders, menu items, and any keystroke either system wide or within an app, but also has the ability to use AppleScript, Automator workflow, Shell script, and text macro for more complex voice commands. Once you get used to speaking to your Mac and asking it to do things, you'll wonder why you always haven't been searching the web, navigating Gmail, and launching and switching between apps and folders with your voice.
What's new in 4.0:
For those that have used previous versions of the software, the upgrade to Dragon Dictate 4.0 has a lot to offer on top of an overall bump in speed and accuracy. It includes the ability to transcribe from various audio formats like mp3, air, or wav files, a feature that previously required a separate $149 purchase of Nuance's MacSpeech Scribe software. Once you select an audio file to be transcribed, Dragon Dictate immediately starts transcribing around 60 seconds of the file as best it can without any training— the accuracy of the initial text will depend a lot on the quality of the recording. After correcting or approving the 60 seconds worth of text it transcribes (I usually found a correction or two to be made every other line), the software takes a few minutes to create a profile for the audio and train itself to accurately transcribe the rest of the file. It's not perfect, the final transcription typically had a number of errors to correct unless the audio source was the cleanest, professional voice recording imaginable with no background noise. The transcription also comes out as one big blob of text with no concern for punctuation or grammar. Don't expect a finished product quality transcription, but since it can transcribe the text in only a fraction of the actual length of the audio and pretty accurately, it will certainly trim a lot of time off transcriptions of long audio files.
The new version also packs in a long list of commands specifically for controlling Gmail in Safari and Firefox with your voice, as well as some nice enhancements for dictating into Pages.
The biggest issue I ran into with Dragon Dictate 4.0 was background noise getting picked up. There are commands to mute the mic, put it to sleep, or have it auto sleep, but that doesn't do much to combat background noise when you have the mic on while dictating commands. On a few occasions background noise from either my devices, pets or the street would launch apps unexpectedly or begin dictating text when I wasn't speaking. This was mostly an issue when using my Macbook's built in mic and of course wouldn't be a concern in a perfectly quiet room. It's also partly your Mac's fault; using a standalone vocal mic positioned properly, a headset, or the Dragon Remote app that turns your iPhone into a mic for your Mac will minimize these issues.
Is it worth the cost?
Dictation might not be faster than typing, but that's not the point. The ability to transcribe voice memos and other audio files you've recorded on the go and control anything on your Mac with your voice would make Dragon Dictate an excellent value even without everything else it offers. And for those that for some reason can't type or just don't want to, the dictation features are worth every penny if Apple's built-in features simply aren't enough.
Dragon Dictate for Mac 4 usually sells for $199.99 but is currently on sale for $179. An upgrade from previous versions of Dictate is available for $149.
Filed under: Apps, Reviews Tagged: dictation, Dragon, Dragon Dictate, dragon dictate 4, Nuance, Speech recognition, speech recognition software
Check out 9to5Mac for more breaking coverage of Apps, Reviews, and Nuance.
What do you think? Discuss "Review: Dragon Dictate 4.0 for Mac – The best speech recognition app gets even better" with our community.
Apple testing Android-like local voice dictation for iOS
Apple is testing a local, offline version of Dictation voice input for iOS devices, according to strings of code found inside of the iOS 7 beta. The code, which was discovered by Hamza Sood, is located inside of both iOS 7 betas, but it is not present in iOS 6. Currently, when an iOS user uses their voice to input text using Dictation, the iOS device will use software that uploads your speech to the cloud to be converted into text. Because this relies on an internet connection and a cloud backend, this could sometimes mean errors and long-loading times, as well as some unwanted data usage…
Based on what Apple is testing, future versions of iOS could allow an iPhone, iPad, or iPod touch to process and convert speech from a user right on the device itself. This would speed up the process considerably, allowing emails, text messages, notes, and web searches take place via voice quicker than ever. The functionality is currently not active in public-facing builds, but we are told that devices internal to Apple have the function up and running.
We are also told that while local dictation is an option in these seeds, the former, cloud-based dictation process is present for certain situations. Perhaps this will be an option in Settings or an option based on internet conditions.
Google's Android operating system includes offline dictation functionality, and in Apple's pursuit of positioning iOS as superior to Android, perhaps this feature parity could sway more customers toward iOS. Apple's own upcoming OS X Mavericks also includes the functionality by way of an extra several-hundred-megabyte downloadable package. It's likely that any future version of iOS supporting offline dictation may require a similar download. As shown in our video above, the offline dictation feature in Mavericks provides live feedback.
While we do not have evidence of this, it seems plausible that Apple could eventually port over this technology from Dictation to Siri. This would allow certain queries to Siri to take place at a quicker pace. Both of Apple's most recent "S" iPhone hardware refreshes have included new elements of voice technologies. For instance, the iPhone 3GS included Voice Control while the iPhone 4S introduced Siri. Perhaps the iPhone 5S, the likely successor the iPhone 5, will make use of local dictation as an exclusive feature. Local voice processing is a power-intensive process, so this could go hand-in-hand with the next iPhone's improved processor and battery.
Over the past few weeks, we have found several unannounced iOS 7 features in testing, including new gesture options and LinkedIn integration. Like those other features, it is unclear if local dictation will survive the iOS 7 testing phase.
For more news on iOS Devices, Siri, and iOS 7 continue reading at 9to5Mac.
What do you think? Discuss "Apple testing Android-like local voice dictation for iOS" with our community.
Apple Job Listing Hints At Future Siri Integration For Mac
Apple has been improving Siri since the intelligent assistant first made its debut on the iPhone 4S back in October 2011, and has also been working to expand its availability; it's now available on all the latest iOS devices, and some older ones, too. It seems inevitable that Siri will one day be introduced to the Mac as well, and that day could be getting closer as Apple searches for new engineers who will be tasked with bringing it to the desktop.
The new Apple job listing, which specifically calls for a "Siri UI Engineer," mentions that the ideal candidate will posses "familiarity with Unix, especially with Mac OS X," and boast knowledge of Cocoa, the core of Apple's OS X operating system. They also need experience in one of the following: Android, Microsoft C#, Java, or C++.
Apple also says that the engineer should have a "passion for the Macintosh platform and writing simple, elegant software that is easy and fun to use." They will focus specifically on Siri's conversations view, according to the job post.
This is the strongest indication of future Siri integration for the Mac that we've seen to date. It doesn't confirm anything, of course, but it shows that Apple is certainly working on porting its popular voice-controlled assistant to its desktops. And again, it's a move that always seemed pretty inevitable, so it's hardly a big surprise.
We know how powerful Siri can be on iOS devices, so can you imagine how great it would be on a Mac? Apple has already introduced its Dictation feature to Mountain Lion, but it would be great if we could send emails and iMessages, create Reminders, control media playback, and more using just our voice.
Apple's next Mac update is expected to arrive this summer, but it's likely the Cupertino company will announce it before then. Here's to hoping that Siri will be one of its new features.
Source: Apple
Via: Macworld


text:
Tel: 07540301021
Sale Now On - Limited Spaces | Only £50 to confirm your place. London Only
We will teach you how to:
do a client consultation
communicate effectively with your client
extend hair using main THREE different methods (Fusion bonded/Micro rings/Easy shrinks)
learn about many different types of hair and how to source them (Russia/Indian/Remy explained)
learn the latest hair extension trends
learn about the hair extension market
learn about the structure of hair and Remy hair
learn about medical/scalp conditions which can affect hair extensions
apply keratin fusion bonded hair Extensions (heat method)
apply Easy shrinks (heat method)
apply Nano rings/links (Non heat or glue method)
apply Human Hair Extensions
apply a full head, half a head and volume applications
apply hair extensions on clients with hair loss/thinning hair
apply hair extensions on all types of hair
apply highlights, lowlights and colour flashes
achieve the perfect hair colour match
cut, shape and blend your clients hair extensions
care for your clients hair safely
teach aftercare & maintenance of the hair extensions
find hair extension products
reposition hair extensions
safely remove hair extensions
start up and expand your hair extension business
pricing of services and how much to charge (profit margins)
make money in the hair extension market
reach your target market
where to get a good website at an inexpensive price
purchase good quality hair at a good price (20% trade discount with top UK hair suppliers)
purchase hair extension tools without being ripped of
What is included in your hair extension training kit to take home on day:
Lady Glam Academy Hair Extensions Manual
Training head
Training head table clamp
Human remy hair extension colour ring
Electronic extension heat connector wand
Professional hair extension loop brush
Metal end precision tail comb
Hair extension razor comb (2-sided)
Two sectioning crocodiles
Sectioning clip
Finger protectors/cots
Heat separator disks/shields
Professional cutting scissors (6" blades, stainless steel* - 6" inch blade is the recommended length for hair extension scissors)
Hair extension storage bag with 5 compartments (Waterproof)
Hair extensions keratin removal solution
Hair extension pliers
Pre bonded remy human hair for Fusion bonded method
Stick tip remy human hair for Micro ring and Easy shrinks methods
Removal pads
Nano rings
Shrink tubes
Nano ring pulling tool/crochet hook tool
30% Trade card for our Lady glam hair supplier
Aftercare cards for your clients
Posters to help with your business (A3 size! Poster designs ideal for mobile and salon based)

subset: commoncrawl


text:
The code is straight C. We are using blocking IO, both for commands and file IO, and will fork a process per client. We will rely on the file system cache to keep data in RAM. Each process will have small heaps, small stacks, and the compiled code will be small. This will give us very good concurrency as the L1 and L2 cache won't be thrashed so much. Simple and fast.
Right now Doug Coleman is doing all the heavy lifting. He's going to make public the repo later today. Simple design, simple code, simple protocols. We aren't just building a message queue here, but a community. The more successful a project the more likely all the code will be rewritten at some point. Keeping things dead simple at this early time is important to get us there.]]>
A problem with CAP is that Availability is a confusing word here. In distributed systems it's really Latency we are interested in. Any resource that's down now might recover soon, soon enough to consider the operation a success if it just waits a little longer. And even available resources might be overloaded and take so long to answer as to be practically unavailable.
The confusion is Availability implies a binary choice, true or false, available or not. But degrees of availability are more easily conceptualized as latency. Latency can be measured and expressed as an single value, such as an average or an upper limit. Or a range of values, broken out into percentiles.
We can't just assume because a client can connect that a server is available. It's much more complicated than that. Modern systems are all about resource sharing. Multi-core, multi-tasking machines with multiple independent and isolated processes carrying about semi-autonomously, all using shared networks, NICs, DRAM, processors and drives. This resource sharing dramatically lowers the costs of building and extending systems: We don't need all the resources necessary to do everything all once, we just need enough to satisfy peak concurrent demands.
But the cost of all this resource sharing is we don't have guarantees about how long something will take, or that it will even be successful. Though each process might be well behaved, system as a whole is chaotic. Maybe an independent process is doing large bulk file copies and invoking lots of disk IO. Or temporarily needs a bunch of RAM to do an image rendering, causing your processes to page some of it working set out to disk. Or fail memory allocation. Or get killed by OOM.
And without timeout failures, distributed processes sharing resources can deadlock on each other infinitely, each holding resources the other needs to continue.
It's because of non-deterministic resource sharing we must be able to deal with timeout failures. The alternative is deadlocking or more likely "slowlocking", concurrent operations slow each down to unusable levels, much slower than executing the requests serially. Systems must be able to tolerate such latency failures, since we can't eliminate them without the expense of assigning dedicated resources to everything. Which is how hard realtime systems work. And they are very expensive.
Fortunately we can model any loss of availability as excessive latency and reuse the same error handling. No new error paths need to be created or modified. Restart each failure with an exponential backoff and the system is guaranteed to clear out it's backlog of work if the failures are a shared capacity problem.
This isn't a new notion, but looking at it this way, any availability requirements are re-expressible as latency requirements, and availability failures are simply timeouts. Requests don't fail, they timeout.
CAP should be renamed CLAP, for Consistency, Latency/Availability and Partition tolerance. It doesn't change how anything works, but it makes reasoning about distributed design a bit easier.]]>
1. Tests should be difficult to run.
Give developers good excuses for not running tests by requiring version specific dependencies that don't exist in the production code. Also the more manual steps to set up and tear down test environments, the lower the likelihood they'll get run.
2. Tests should take a long time and require lots of resources.
Tests that run slowly, ideally many hours or even days long, helps keep developers out the zone and easily distractible. To keep development expensive and lengthy, make sure each individual test instantiates fresh instances of everything, new servers, new clients, new datasets, ideally whole new installs. The more CPU, RAM and Disk and Network IO necessary, the greater the costs and non -roductivity.
3. Tests should have spurious failures
When tests fail because the tests themselves are buggy it reduces confidence in the tests, making it much easier to ignore real failures. Any efforts to clean up the tests should be met with suggestions time is better spent growing production code size and complexity.
4. Don't write a tests for bugs found in production.
When a bug is found in production code, don't waste time writing tests that trigger the bug, just fix the code and be done. This increases the likelihood of future regressions, and as a bonus hides the areas of code that are poorly designed and implemented.
5. Tests should rely on timeouts to indicate failure
Sleeps that wait long enough for production code to finish before checking the outputs will lengthen the time tests take to run AND cause hard to duplicate, spurious failures. This reduces confidence that a failing test found a bug, making real bugs easy to ignore.
6. Only test success conditions.
Writing tests for what happens when connections timeout, when allocations fail, or when processes are terminated or machines lose power is like wanting the code to fail. So only test what happens when everything goes right, it makes you seem like a team player.
7. Failures should be hard to debug
Throw away error codes, error strings, log messages, and anything else that could help debug a failure. Writing production code is hard. Debugging it should be hard too.]]>
The most recent thing I worked on at Couchbase was leading the design for the 3.0 Database Change Protocol (DCP), which shipped a few weeks ago. DCP's got some nice properties that allow it to move a lot of data quickly and safely, It's used by Couchbase replication, indexing and a few other places. It's really cool to see how well it's working, I left just as the coding work was starting. I'm always a little surprised when things actually work, I spend of lot of time worrying about design flaws that might have been overlooked.
Couchbase DCP is basically an engine and protocol to quickly receive changes from the database, incrementally and asynchronously. Coincidentally, it's got a lot of the same traits of a message queue and similar design decisions as the Apache Kafka project. The more I thought about it, the more I realized the basics of messaging and queueing is really the foundation of most distributed systems.
So now I'm starting a new message queue project that's loosely based on Couchbase DCP technology (and using the Couchbase ForestDB durable storage engine code as a starting place). But this is being designed and optimized for messaging and queueing applications, so there are some key differences. This can be used like an enterprise message bus, for email and messaging, for stream processing and analytics, and even can apply to high scale, near realtime interactive applications like Uber.
A lot of the uses fall into the mission-critical infrastructure category, which an ever increasing amount of money being spent on. It's when you can find business model to support your technological interests that things get interesting. And I think things are about to get really interesting.]]>
Years ago, when I was in Charlotte NC working on a new document database named CouchDb, it sounded (at the time) about as sexy as a bowl of diarrhea and I had bunch of code that didn't quite work and our savings were shrinking every month. I was embarrassed to tell people what I was working on. And I made a decision to stop being a coward and commit to what I'm doing. I pasted a sign onto my monitor. "Commitment: Learn it, Live It" as a reminder to be all in on this. To not feel like a fool for pursuing a path when I was in over my head. Every day was a struggle to make progress. A battle to remain committed.
I used to go to the gym and pretend in my head I had already died, and it was 100 years into the future, and I was dreaming of some guy who wrote a database. I didn't know how the story ended yet, I hadn't gotten that far. It helped me to remember life is journey, not a destination. Stay on the path, the story is what's interesting. The success or failure might already be predetermined, so fight like a hero you respected, a hero who lost, who went down swinging. Live that story if you have to, but goddammit, fight.]]>
I think it's CouchDB and then Couchbase, and how far I took it, that was a big factor for our problems. I spent so much time on it, and was so isolated for so long I ended losing a big part of myself. It happened before the startup. I became detached, anxious and wasn't there for my wife as much as I should have been. And that hurt her. I was also sleep eating. I'd devour all kinds of high calorie food and not remember it. And that also freaked her out. But since I was good at shutting off my own feelings, I couldn't empathize with her and the hard times of raising 3 kids as the primary caregiver, and moving way too many times over the years.
We both tried very hard, but in my case I didn't understand what she was going through. And I felt she didn't understand me either. Startups are hard. But we try to make it seem glamorous. It's part of the game. But it's hard and a lot of stress. And if it doesn't work out, you end up with nothing. And a bunch of people who believed in you lose their jobs.
And in the struggle there comes a point when you realize it's worse for the kids to be married and if things get any worse, our problems will truly mess them up. That all the conflict and hurt is taking it's toll on the ones you are fighting so hard to give a good life to.
The divorce was final a few months ago. The terms of the divorce pretty standard for 50/50 custody, and we were able to complete it amicably, no court battle. Overall it was a peaceful process, but at times it felt extremely painful, scary and conflict ridden. It still does. And sometimes the pain and anger comes back and I behave like a big jerk. But compared to most divorces I think we both did pretty good.
We now live about 1/2 mile from each other in Alameda CA. It's a beautiful area and it's great for the kids. I can't say for sure I'm any happier, the transition has been, and continues to be hard. Being alone is hard. But I think I'm a better father. But still much room for improvement.
My own upbringing I was bounced around a lot. I didn't get a lot of care and attention. And that contributed to low self esteem, which took years to finally understand. I was lucky I didn't end up in much worse shape. My ex wife was a big part of me not being a total wreck, she took good care of me over the years. Soothed me when I needed it. I have to learn to be able to function without that. I need to be there for my kids, I don't want them to deal with the crap I went through, some of which affects me to this day.
Dating when you have 3 kids is scary. I want them to be around good people and have them see healthy relationships. And I don't want to bring crazy people into their lives. But I'm not sure how to know what's what. So I'm trying to be cautious and take it slower. The problem with marrying so young is I didn't experience all that crap most people do in their twenties, when it's easier to make mistakes.
And now, after being married so young and for so long, I have to become a new person. A single person. A single dad. Also I have to grow up more. I have to be able handle anything that comes my way, and be able to do it alone if necessary. My kids actually make this easier. They are my sense of purpose, to raise them right and to feel loved by a dad and mom they can respect.
Anyway, this is the reason I've been quiet so long. The last year has been the hardest of my life. The shame, the fear, the anger, the loss. I didn't want to be a single man at 40 with 3 kids. I wanted so much to avoid it. It's hard to live it. Hard to even admit it. But I don't feel sorry for myself. I caused a lot of it. And everyone has hard times. Mine haven't been so bad. I'm learning from them. And overall, life is quite good. I'm healthy, and my kids are healthy and happy and go to great schools. And Couchbase continues to grow.
I'm taking time off until the end of the year. I'm trying to get me and my kids more integrated in Alameda without a job distracting me, and continue to rebuild a friendship with my ex. As a Dad, it's my job. I'm taking it seriously.]]>
I miss Couchbase terribly, but I'm also glad to be done and start a new chapter in my career. The thing I miss most are the great people there, super bright hard working folks who amazed me on a daily basis. Which, ironically, was the thing that made it easy to leave. Seeing the different teams taking the ball and running with it without me leading the charge. Things at Couchbase grew and matured so fast I started to realize I couldn't keep up without spending way more time working. I was no longer the catalyst that moved things forward, I was becoming the bottleneck preventing engineers from maturing and leaders from rising.
Anyway, I'll miss my whole CouchDB and Couchbase odyssey immensely. I know it's a rare thing to have helped create and lead the things I did. I don't take it for granted. It was a hell of a ride.
And now what's next? Well, beginning in January 2014 I'll be starting at salesforce.com and working closely with Pat Helland on a project that eventually will underpin huge amounts of their site infrastructure, improving performance, reliability and predictability, while reducing production costs dramatically. It's quite ambitious and I don't know if I'm yet at liberty to talk about the project details and scope. But if we can pull it off we will change a lot more than Salesforce, in the same way the Dynamo work changed a lot more than Amazon's shopping cart. It's ridiculously cool. And we are hiring the best people possible to make it happen.
Here I go again. I'm a very, very lucky man.
As I take a break from all work (I left Couchbase about a month ago), one of things I'm trying to do is get the machine out of my head. Building a distributed database is a peculiar thing. Building a startup that sells distributed databases is a very peculiar thing. It did something weird to my brain. I'm still not sure what happened.
That moment in chess when I see the mistake, and it suddenly feels like the blood drains from my head. For me it's when the game is decided. Win or lose, it was a mistake to play at all. I didn't want to lose. I didn't want to win. I just wanted to play. To keep the game going.
Somehow I developed social anxiety. Not a fear of people. A fear of causing fear in people. I lost my voice. Not my physical voice. But the one that says what it really thinks, is gregarious, is angry, is sad, wants to have fun, wants to complain. The one that cares not about the right answer. The one that just wants to interact, with no particular goal.
I forgot how to be human. I didn't know that was possible. I didn't even notice it happened, I didn't know what I had lost until I started to get better.
I saw this thing in my head, the machine. Automata. It was beautiful. The more I thought about it, the more clearly I could see it. I connected all the dots. It was so compelling. It was engineering. It was physics. It was metaphysics. I had to bring it into the real world. I couldn't stop thinking about it. It could be lost forever if I did.
Most people create differently. They create a little, think a little, create a little, think a little. I like to work by thinking very hard until I can clearly see what should be built. Before I write code. Before I write specs. I want to see it, in my mind. I can't explain what I see. I suppose it's like describing color to a blind man.
There is a hidden dimension. The people who can see it, who can move around in this unseen dimension are special to me. It's like when everyone puts their head down to pray, only you don't. You look around. And you see the other people who didn't put their head down. We broke the rules. But we broke nothing, we just see something others don't. Sacred doesn't exist.
The only language I know for sure to describe it is code. When I can see it working in my head, I know it will work in the real world, in code. Then I move to bring it to the real world through code.
But I took it too far. I thought too long. What I built in my head was too big for a human. Too big for this human anyway.
I was compelled to keep the vision of the machine lit, for fear it would vanish before it made it into the real world. The machine started to take over my mind. No, that's not true. I pushed everything I could aside, squished it up to make room for the machine. Or maybe I fed it to the machine. Or maybe I threw it overboard.
It never occurred to me I might be giving up something I needed, that others needed from me, that I wanted to give to them, to myself. Or maybe I didn't care. I wanted to bring the machine to life. I knew if I could bring it to life, it would change the world. Isn't that worth fighting for?
Fear is a powerful motivator. It's also the mind killer. I was afraid of losing the battle. Creating technology is play. Creating a startup is a fight. But I didn't notice I was losing the war. Everything was riding on this. I no longer played with a posture of I couldn't lose. Now I must win.
Then something happened, and I saw a glimmer of what I once was. I realized I was no longer playing a game of creation, but waging a war of attrition. And my humanity was the resource. I was grinding myself away.
I noticed this almost a year ago. Something profound finally gave me the perspective of what I was doing. I began to heal something I didn't know was broken.
Since then I tried to keep the machine fed, yet under control. But still I couldn't stop. The machine was perfect. It solved the problems, it gave the right answers. If it failed, it did so gracefully, predictably. It seemed more deserving than me. A machine over a human. Now that is fucked. up. shit.
So slammed on the brakes. I'm more than a glimmer. I'm worth more than a machine. I'm learning to be a human. Again. And it's harder than it looks. It's icky. There are no right answers. Only paths and possibilities. Time is an illusion, but it's later than you think.
Strangely, as I try to evict the machine, I can still see it. From a different perspective. Perhaps more clearly than before. I don't know. But I'm not mad at it. It's wonderful. It's Schrödinger's cat. It was already dead. It was always alive. It's not the answer, it's a path. Someday I hope to be human enough to tell you why.]]>
Dynamo based systems work too hard. SimpleDB/DynamoDB, Riak, Cassandra and Voldemort are all based, at least in part, on the design first described publicly in the Amazon Dynamo Paper. It has some very interesting concepts, but ultimately fails to provide a good balance of reliability, performance and cost. It's pretty neat in that each transaction allows you dial in the levels of redundancy and consistency to trade off performance and efficiency. It can be pretty fast and efficient if you don't need any consistency, but ultimately the more consistency you want the more have to pay for it via a lot of extra work.
Network Partitions are Rare, Server Failures are Not
... it is well known that when dealing with the possibility of network failures, strong consistency and high data availability cannot be achieved simultaneously. As such systems and applications need to be aware which properties can be achieved under which conditions.
For systems prone to server and network failures, availability can be increased by using optimistic replication techniques, where changes are allowed to propagate to replicas in the background, and concurrent, disconnected work is tolerated. The challenge with this approach is that it can lead to conflicting changes which must be detected and resolved. This process of conflict resolution introduces two problems: when to resolve them and who resolves them. Dynamo is designed to be an eventually consistent data store; that is all updates reach all replicas eventually.
- Amazon Dynamo Paper
The Dynamo system is a design that treats the probability of a network switch failure as having the same probability of machine failure, and pays the cost with every single read. This is madness. Expensive madness.
Within a datacenter, the Mean Time To Failure (MTTF) for a network switch is one to two orders of magnitude higher than servers, depending on the quality of the switch. This is according to data from Google about datacenter server failures, and the publish numbers of the MTBF of Cisco switches (There is a subtle difference between MTBF and MTTF, but for our purposes we can treat them the same)
It is claimed that when W + R > N you can get consistency. But it's not true, because without distributed ACID transactions, it's never possible to achieve W > 1 atomically.
Consider W=3, R=1 and N=3. If a network failure or more likely a client/app tier failure (hardware, OS or process crash) happens during the writing of data, it's possible for only replica A to receive the write, with a lag until the cluster notices and syncs up. Then another client with R = 1 can do two consecutive reads, getting newer data first from a node A, and older data next from node B for the same key. But you don't even need a failure or crash, once the first write occurs there is always a lag for the next server(s) to receive the write. It's possible for a fast client to do the same read 2 times again, getting a newer version from one server, then an older version from another.
What is true is that if R > N / 2, then you get consistency where it's not possible to read in a newer value, then a subsequent read get's an older value.
For the vast majority of applications, it's okay for a failure leading to temporary unavailability. Amazon believes its shopping cart is so important to capture writes it's worth the cost of quorum reads, or inconsistency. Perhaps. But the problems and costs multiply. If you are doing extra reads to achieve high consistency, then you are putting extra load on each machine, requiring extra server hardware and extra networking infrastructure to provide the same baseline performance. All of this can increase the frequency of a component failure and increases operational costs (hardware, power, rack space and the personnel to maintain it all).
A Better Way?
What if a document had 1 master and N replicas to write to, but only a single master to read from? Clients know based on the document key and topology map which machine serves as the master. That would make the reads far cheaper and faster. All reads and writes for a document go to the same master, with writes replicated to replicas (which also serve as masters for other documents, each machine is both a master and replica).
But, you might ask, how do I achieve strong consistency if the master goes down or becomes unresponsive?
If when that happens, the cluster also notices the machine is unresponsive or too slow and removes it out of the cluster and fails over to a new master. Then the client tries again and has a successful read.
But, you might ask, what if the client asks the wrong server for a read?
If all machines in the cluster know their role and only one machine in the cluster can be a document master at any time, and the cluster manager (a regular server node elected by Paxos consensus) makes sure to remove the old master, and then assign the new master, and then tell the client about the new topology. Then the client updates its topology map, and retries at the new master.
But, you might ask, what if the topology has changed again, and the client again asks to read from the wrong server?
Then this wrong server will let the client know. The client will reload the topology maps, and re-request from the right server. If the right master server isn't really right any more because of another topology change, it will reload and retry again. It will do this as many times as necessary, but typically it happens only once.
But, you might ask, what if there is a network partition, and the client is on the wrong (minor) side of the partition, and reads from a master server that doesn't know it's not a master server anymore?
Then it gets a stale read. But only for a little while, until the server itself realizes it's no longer in heartbeat contact with the majority of the cluster. And partitions like this are the among the rarest form of a cluster failure. It will require a network failure, and for the client to be on the wrong side of the partition.
But, you might ask, what if there is a network partition, and the client is on the wrong (smaller) side of the partition, and WRITES to a server that doesn't know it's not a master server anymore?
Then the write is lost. But if the client wanted true multi-node durability, then the write wouldn't have succeeded (the client would timeout waiting for replicas(s) to receive the update) and the client wouldn't unknowingly lose data.
What I'm describing is the Couchbase clustering system.
Let's Run Some Numbers
Given the MTTF of a server, how much hardware and how quickly must the cluster failover to a new master and still meet our SLAs requirements vs a Dynamo based system?
Let's start with some assumptions:
We want to achieve 4000 transactions/sec with 3 node replication factor. Our load mix is 75% reads/25% writes.
We want to have some consistency, so that we don't read newer values, then older values, so for Dynamo:
But for Couchbase:
This means for a Dynamo style cluster, the load will be:
Read transactions/sec: 9000 reads (reads spread over 3 nodes)
Write transactions/sec: 3000 writes (writes spread over 3 nodes)
This means for a Couchbase style cluster, the load will be:
Read transactions/sec: 3000 reads (each document read only on 1 master node, but all document masters evenly spread across 3 nodes)
Write transaction/sec: 3000 writes (writes spread over 3 nodes)
Let's assume both systems are equally as reliable at the machine level. Google's research indicates in their datacenter each server has a MTTF of 3141 hrs or 2.7 failures per year. Google also reports a rack failure (usually power supply) of 10.2 years, roughly 30x a reliable as a server, so we'll ignore that to make the analysis simpler. (This is from Googles paper studying server failures here)
The MTBF of Cisco network switch is published at 54,229 hrs on the low end, to 1,023,027 hrs on the high end. For our purposes, we'll ignore switch failures, since the failures affects availability and consistency of both system about the same, and it's 1 to 2 orders of magnitude rarer than a server failure. (This is from a Cisco product spreadsheet here)
Assume we want to meet a latency SLA 99.9% of the time (the actual latency SLA threshold number doesn't matter here).
On Dynamo, that means each node can fail the SLA 1.837% of the time. Because it queries 3 nodes, but only uses the values from the first 2 nodes and the chances of SLA failure are the same across nodes, the formula is different (only two must meet the SLA):
On Couchbase, if a master node fails, it must recognize it and fail it out. Given Google's MTTF failure above and it can fail out a node in 30 secs, and let's say it will take 4.5 minutes for it warm up the RAM cache, given 2.7 failures/year with 5 minutes of downtime for each before a failover completes, then queries will fail 0.00095% of time due to node failure.
For Couchbase meet the same SLA:
0.0001 = P(SlaFail) + P(NodeFail) - (P(SlaFail) * P(NodeFail))
0.0001 = P(SlaFail) + 0.0000095 - (P(SlaFail) * 0.0000095)
0.0001 ~= 0.00009 + 0.0000095 - (0.00009 * 0.0000095)
Note: Some things I'm omitting from the analysis are when a Dynamo node fails the lower latency requirement from meeting the SLA for 2 nodes vs. 3 (it would drop from 1.837% to ~0.05%), and also the increased work on the remaining servers when a Couchbase server fails. Both are only temporary and go away when a new server is added back and initialized in the cluster, and shouldn't change the numbers significantly. Also there is the time to add in a new node and rebalance load on it. At Couchbase we work very hard to make that as fast and efficient as possible. I'll assume Dynamo systems do the same, that the cost is the same and omit it, though I think we are the leaders in rebalance performance.
With this analysis, a Couchbase node can only fail its SLA 0.9% of the requests, and a Dynamo node can fail it 1.837%. Sounds good for Dynamo, but it must do for 2X the throughput per node on 3x the data, and with 2x the total network traffic. And for very low latency response times (our customers often want sub-millisecond latency) typically meeting the SLA means a DBMS must keep a large amount of relevant data and metadata in RAM, because there is a huge cost for random disk fetches on latency. With disk fetches 2 orders of magnitude slower on SSDs (100x), and 4 orders of magnitude slower on HDDs (10000x) the disk accesses pile up faster without enough RAM, so do the latencies.
So each Dynamo node can fail its SLA at a higher rate is very small win when it will still need to keep nearly 3X the working set ready in memory because each node will be serving 3x the data at all times for read requests (it can fail its SLA slightly more often, so it's actually about 2.97x the necessary RAM), and will use 2x the network capacity.
Damn Dynamo, you sure do work hard!
Now Couchbase isn't perfect either, far from it. Follow me on twitter @damienkatz. I'll be posting more about the Couchbase shortcomings and capabilities, and technical roadmap soon.]]>
If I were to list projects as small, medium, and large or small to enterprise, what methodologies work across them? My thoughts are Agile works well, but eventually you'll hit a wall of complexity, which will make you wonder why you didn't see it many, many iterations ago. I don't know anyone at NASA or Space-X or DoD so I don't know what software methodology they use? Given your experience can you shed some light on it?
I don't really use a specific methodology, however I find it very useful to understand the most popular methodologies and when they are useful. Then it's helpful when you are at various stages of projects and know what kinds of approaches are helpful, and how you can apply them to your situation.
For example, I find Test Driven Design (TDD) very much overkill, but for a mature codebase I find lots of testing invaluable. Early in a codebase I find lots of tests very restrictive, I value the ability to quickly change a lot of code without also having to change a larger amount of tests. Early on, when I'm creating the overall architecture that everything else will hang on, and the code is small and design is plastic and I can keep it all in my head, I value being able to move very quickly. However, other developers may find TDD very valuable to think through the design and problems. I don't work like that. To each his own.
Blindly applying methodologies or even "best practices" is bad. For the inexperienced it's better than nothing, but it's not as good as knowledge of self and team, experience with a variety of projects and their stages, and good old-fashioned pragmatism.]]>
So I'm going to answer some of the most common questions, feedback and misunderstandings it's gotten.
Is C the best language for everything?
Hell no! Higher level languages, like Python and Ruby, are extremely useful and should definitely be used where appropriate. Java has a lot of advantages, C++ does too. Erlang is amazing. Most every popular language has uses where it's a better choice.
But when both raw performance and reliability are critical, C is very very hard to beat. At Couchbase we need industrial grade reliability without compromising performance.
I love me some Erlang. It's very reliable and predictable, and the whole design of the language is about robustness, even in the face of hardware failures. Just because we experienced a crash problem in the core of Erlang shouldn't tarnish its otherwise excellent track record.
However it's not fast enough for our and our customers needs. This is key, the hard work to make our code as efficient and fast as possible in C now benefits our many thousands of Couchbase server deployments all over the world, saving a ton of money and resources. It's an investment that is payed back many, many times.
But for most projects the extra engineering cost isn't worth it. if you are building something that's only used by your organization, or small # of customers, your money is likely better spent on faster/more hardware than very expensive engineers coding, testing and debugging C code. There is a good chance you don't have the same economies of scale we do at Couchbase where the costs are spread over high # of customers.
Don't just blindly use C, understand its own tradeoffs and if it makes sense in your situation. Erlang is quite good for us, but to stay competitive we need to move on to something faster and industrial grade for our performance oriented code. And Erlang itself is written in C.
If a big problem was C code in Erlang, why would using more C be good?
Because it's easier to debug when you don't lose context between the "application" layer and the lower level code. The big problem we've seen is when C code is getting called from higher level code in the same process, we lose all the debugging context between the higher level code and the underlying C code.
So when we were getting these crashes, we didn't have the expertise and tooling to figure out what exactly the Erlang code was doing at the moment it crashed. Erlang is highly concurrent and many different things were all being executed at the same time. We knew it had something to do with the async IO settings we were using in the VM and the opening and closing of files, but exactly what or why still eluded us.
Also, we couldn't manifest the crash with test code, though we tried, making it hard to report the issue to Erlang maintainers. We had to run the full Couchbase stack with heavy load in order to trigger the crash, and it would often take 6 or more hours before we saw it. This made debugging problematic as we had confounding factors of our own in-process C code that also could have been the source of the crashes.
In the end, we found through code inspection the problem was Erlang's disk based sorting code, the compression options it was using, and the interaction with how Erlang closes files. When Erlang closed files with the compression option it would occasionally have a race condition low down in VM that would lead to a dangling pointer and a double-free. If we hadn't lost all the context between the Erlang user code and the underlying C code, we could have tracked this problem down much sooner. We would have had a complete C stacktrace of what our code was doing when the library code crashed, allowing us to narrow down very quickly the flawed C code/modules.
Why Isn't C++ a suitable replacement for C?
Often it is, but the problem with C++ you have to be very disciplined to use it and not complicate/obfuscate your code unnecessarily. It's also not as portable to as many environments (particularly embedded), and tends to have much higher compilation and build times, which negatively affects developer productivity.
C++ is also a complicated mess, so when you adopt C++ for its libraries and community, you have to take the good with the bad and weird to get the benefits. And there is a lot of disagreement what constitutes bad or weird. Your sane subset of the language is very likely to be at odds with others ideas of a sane subset. C has this problem to a much much smaller degree.
What about Go as a replacement for C?
Perhaps someday. Right now Go is far slower than C. It also doesn't give as good of control over memory since it's garbage collected. It's not as portable, and you also can't host Go code in other environments or language VMs, limiting what you can do with your code.
Go however has a lot of momentum and a very bright future, they've made some very nice and pragmatic choices in its design. If it continues to flourish I expect every objection I listed, except for the garbage collection, will eventually be addressed.
What about D as a replacement for C?
It's not there for the same reasons as Go. It's possible that someday it will be suitable, but I'm less optimistic about it strictly from a momentum perspective, it doesn't have a big backer like Google and doesn't seem to be growing very rapidly. But perhaps it will get there someday.
Is there anything else that could replace C?
I don't know a lot of what's out there on the horizon, and there are some efforts to create a better C. But for completely new languages as a replacement, I'm most hopeful and optimistic about Mozilla's Rust. It's designed to be fast and portable, callable from any language/environment much like C, with no garbage collection yet still safe from buffer overruns, leaks and race conditions. It also has Erlang style concurrency features built in.
But it's a very young and rapidly evolving language. The performance is not yet close to C. The syntax might be too foreign for the masses to ever hit the mainstream, and it may suffer the same niche fate as Erlang because of that.
However if Rust achieves its stated goals, C-like performance but safe with Erlang concurrency and robustness built in, it would be the language of my dreams. I'll be watching its progress very closely.
That's just, like, your opinion, man
Yes, my post was an opinion piece.
But I'm not new to this programming game. I've done this professionally since 1995.
I've coded GUIs using very high level languages likes HTML/Javascript and Visual Basic, and with lower level languages like Java, C and C++.
I've built a ton of backend code in C, C++ and Erlang. I've written in excess of 100k lines of C and C++ code. I've easily read, line by line, 300k lines of C code.
I've written a byte code VM in C++ that's been deployed on 100 million+ desktops and 100's of thousands of servers. I used C++ inheritance, templates, exceptions, custom memory allocation and a bunch of other features I thought were very cool at the time. Now I feel bad for the people who have to maintain it.
I've fixed many bugs in MySQL and its C++ codebase. I wrote the Enterprise Edition thread pooling and evented network IO feature that increases client scalability by over an order of magnitude.
Also created and wrote, from scratch, Apache CouchDB, including the storage engine & tail append btrees, incremental Map/Reduce indexer and query engine, master/master replication with conflict management, and the HTTP API, plus a zillion of small details necessary to make it all work.
In short, I have substantial real world experience in projects used by millions of people everyday. Maybe I know what I'm talking about.
So while most of what I wrote is my opinion and difficult to back up with hard data, it's born from being cut so many times with the newest and coolest stuff. My view of C has changed over the years, and I used to think the older guys who loved C were just behind the times. Now I see why many of them felt that way, they saw what is traded away when you stray from the simple and effective.
Think about the most widely used backend projects around and see how they are able to get both reliability and performance. Chances are, they are using plain C. That's not just a coincidence.
Follow me on Twitter for more of my coding opinions and updates on Couchbase progress.]]>
C is the total package. It is the only language that's highly productive, extremely fast, has great tooling everywhere, a large community, a highly professional culture, and is truly honest about its tradeoffs.
Other languages can get you to a working state faster, but in the long run, when performance and reliability are important, C will save you time and headaches. I'm painfully learning that lesson once again.
Simple and Expressive
C is a fantastic high level language. I'll repeat that. C is a fantastic high level language. It's not as high level as Java or C#, and certainly no where near as high level as Erlang, Python, or Javascript. But it's as high level as C++, and far far simpler. Sure C++ offers more abstraction, but it doesn't present a high level of abstraction away from C. With C++ you still have to know everything you knew in C, plus a bunch of other ridiculous shit.
"When someone says: 'I want a programming language in which I need only say what I wish done', give him a lollipop."
- Alan J. Perlis
That we have a hard time thinking of lower level languages we'd use instead of C isn't because C is low level. It's because C is so damn successful as an abstraction over the underlying machine and making that high level, it's made most low level languages irrelevant. C is that good at what it does.
The syntax and semantics of C is amazingly powerful and expressive. It makes it easy to reason about high level algorithms and low level hardware at the same time. Its semantics are so simple and the syntax so powerful it lowers the cognitive load substantially, letting the programmer focus on what's important.
It's blown everything else away to the point it's moved the bar and redefined what we think of as a low level language. That's damn impressive.
Simpler Code, Simpler Types
C is a weak, statically typed language and its type system is quite simple. Unlike C++ or Java, you don't have classes where you define all sorts of new runtime behaviors of types. You are pretty much limited to structs and unions and all callers must be very explicit about how they use the types, callers get very little for free.
"You wanted a banana but what you got was a gorilla holding the banana and the entire jungle."
- Joe Armstrong
What sounds like a weakness ends up being a virtue: the "surface area" of C APIs tend to be simple and small. Instead of massive frameworks, there is a strong tendency and culture to create small libraries that are lightweight abstractions over simple types.
Contrast this to OO languages where codebases tend to evolve massive interdependent interfaces of complex types, where the arguments and return types are more complex types and the complexity is fractal, each type is a class defined in terms of methods with arguments and return types or more complex return types.
It's not that OO type systems force fractal complexity to happen, but they encourage it, they make it easier to do the wrong thing. C doesn't make it impossible, but it makes it harder. C tends to breed simpler, shallower types with fewer dependencies that are easier to understand and debug.
Speed King
C is the fastest language out there, both in micro and in full stack benchmarks. And it isn't just the fastest in runtime, it's also consistently the most efficient for memory consumption and startup time. And when you need to make a tradeoff between space and time, C doesn't hide the details from you, it's easy to reason about both.
"Trying to outsmart a compiler defeats much of the purpose of using one."
- Kernighan & Plauger, The Elements of Programming Style
Every time there is a claim of "near C" performance from a higher level language like Java or Haskell, it becomes a sick joke when you see the details. They have to do awkward backflips of syntax, use special knowledge of "smart" compilers and VM internals to get that performance, to the point that the simple expressive nature of the language is lost to strange optimizations that are version specific, and usually only stand up in micro-benchmarks.
When you write something to be fast in C, you know why it's fast, and it doesn't degrade significantly with different compilers or environments the way different VMs will, the way GC settings can radically affect performance and pauses, or the way interaction of one piece of code in an application will totally change the garbage collection profile for the rest.
The route to optimization in C is direct and simple, and when it's not, there are a host of profiler tools to help you understand why without having to understand the guts of a VM or the "sufficiently smart compiler". When using profilers for CPU, memory and IO, C is best at not obscuring what is really happening. The benchmarks, both micro and full stack, consistently prove C is still the king.
Faster Build-Run-Debug Cycles
Critically important to developer efficiency and productivity is the "build, run, debug" cycle. The faster the cycle is, the more interactive development is, and the more you stay in the state of flow and on task. C has the fastest development interactivity of any mainstream statically typed language.
"Optimism is an occupational hazard of programming; feedback is the treatment."
- Kent Beck
Because the build, run, debug cycle is not a core feature of a language, it's more about the tooling around it, this cycle is something that tends to be overlooked. It's hard to overstate the importance of the cycle for productivity. Sadly it's something that gets left out of most programming language discussions, where the focus tends to be only on lines of code and source writability/readability. The reality is the tooling and interactivity cycle of C is the fastest of any comparable language.
Ubiquitous Debuggers and Useful Crash Dumps
For pretty much any system you'd ever want to port to, there are readily available C debuggers and crash dump tools. These are invaluable to quickly finding the source of problems. And yes, there will be problems.
"Error, no keyboard -- press F1 to continue."
With any other language there might not be a usable debugger available and less likely a useful crash dump tool, and there is a really good chance for any heavy lifting you are interfacing with C code anyway. Now you have to debug the interface between the other language and the C code, and you often lose a ton of context, making it a cumbersome, error prone process, and often completely useless in practice.
With pure C code, you can see call stacks, variables, arguments, thread locals, globals, basically everything in memory. This is ridiculously helpful especially when you have something that went wrong days into a long running server process and isn't otherwise reproducible. If you lose this context in a higher level language, prepare for much pain.
Callable from Anywhere
C has a standardized application binary interface (ABI) that is supported by every OS, language and platform in existence. And it requires no runtime or other inherent overhead. This means the code you write in C isn't just valuable to callers from C code, but to every conceivable library, language and environment in existence.
"Portability is a result of few concepts and complete definition"
- J. Palme
You can use C code in standalone executables, scripting languages, kernel code, embedded code, as a DLL, even callable from SQL. It's the Lingua Franca of systems programming and pluggable libraries. If you want to write something once and have it usable from the most environments and use cases possible, C is the only sane choice.
Yes. It has Flaws
There are many "flaws" in C. It has no bounds checking, it's easy to corrupt anything in memory, there are dangling pointers and memory/resource leaks, bolted-on support for concurrency, no modules, no namespaces. Error handling can be painfully cumbersome and verbose. It's easy to make a whole class of errors where the call stack is smashed and hostile inputs take over your process. Closures? HA!
"When all else fails, read the instructions."
- L. Lasellio
Its flaws are very very well known, and this is a virtue. All languages and implementations have gotchas and hangups. C is just far more upfront about it. And there are a ton of static and runtime tools to help you deal with the most common and dangerous mistakes. That some of the most heavily used and reliable software in the world is built on C is proof that the flaws are overblown, and easy to detect and fix.
At Couchbase we recently spent easily 2+ man/months dealing with a crash in the Erlang VM. We wasted a ton of time tracking down something that was in the core Erlang implementation, never sure what was happening or why, thinking perhaps the flaw was something in our own plug-in C code, hoping it was something we could find and fix. It wasn't, it was a race condition bug in core Erlang. We only found the problem via code inspection of Erlang. This is a fundamental problem in any language that abstracts away too much of the computer.
Initially for performance reasons, we started increasingly rewriting more of the Couchbase code in C, and choosing it as the first option for more new features. But amazingly it's proven much more predictable when we'll hit issues and how to debug and fix them. In the long run, it's more productive.
I always have it in the back of my head that I want to make a slightly better C. Just to clean up some of the rough edges and fix some of the more egregious problems. But getting everything to fit, top to bottom, syntax, semantics, tooling, etc., might not be possible or even worth the effort. As it stands today, C is unreasonably effective, and I don't see that changing any time soon.
Follow me on Twitter for more of my coding opinions and updates on Couchbase progress.]]>
hello damien
I read about you from a book on erlang.
Your couchdb application is really a rave.
please can you help me out ,i've got questions only a working programmer can answer.
i'm shooting now:
i've been programming in java for over 3 years
i know all about the syntax and so on but recently i ran a code counter on my apps and
the code sizes were dismal. 2-3k
commercial popular apps have code sizes in the 100 of thousands.
so tell me- for you and what you know of other developers how long does it take to write those large applications ( i.e over 30k lines of code)
what does it take to write large applications - i.e move from the small code size to really large code sizes?
thank you.
Never try to make your project big. Functionality is an asset, code is a liability. What does that mean? I love this Bill Gates quote:
Measuring programming progress by lines of code is like measuring aircraft building progress by weight.
More code than necessary will bloat your app binaries, causing larger downloads and more disk space, use more memory, and slow down execution with more frequent cache misses. It can make it harder to understand, harder to debug, and will typically have more flaws.
CouchDB, when we hit 1.0, was less than 20k lines of production code, not including dependencies. This included a storage engine (crash tolerant, highly concurrent MVCC with pauseless compactor), language agnostic map/reduce materialized indexing engine (also crash tolerant highly concurrent MVCC with pauseless compactor), master/master replication with conflict management, HTTP API with security model, and simple JS application server.
The small size is partly because it was written in Erlang, which generally requires 1/5 or less code of the equivalent in C or C++, and also because the original codebase was mostly written by one person (me), giving the design a level of coherency and simplicity that is harder to accomplish -- but still very possible -- in teams.
Test are different. Lines of code are more of an asset in tests. More tests (generally) means more reliable production code, helps document code functionality that can't get out of sync the way comments and design docs can (which is worse than no documentation) and doesn't slow down or bloat the compiled output. There are caveats to this, but generally more code in tests is a good thing.
Also you can go overboard with trying to make code short (CouchDB has some WTFs from terseness that are my fault). But generally you should try to make code compact and modular, with clear variable and function names. Early code should be verbose enough to be understandable by those who will work on it, and no more. You should never strive for lots of code, instead you want reliable, understandable, easily modifiable code. Sometimes that requires a lot of code. And sometimes -- often for performance reasons -- the code must be hard to understand to accomplish the project goals.
But often with careful thought and planning, you can make simple, elegant, efficient, high quality code that is easy to understand. That should be your goal.]]>
This is our premier Couchbase event. We're going ham.
Come hear speakers from established enterprises and how they are betting their business on Couchbase.
Hang out and talk with speakers, me and other Couchbase engineers in the Couchbase lounge.
I'll be talking at the closing session. Let me know what you'd like to hear about!
Killer after-party. Witness my drunken antics ;)
Some highlights:
When you register, you can get the early bird rate if you use the promotional code Damien.
Register here: http://www.couchbase.com/couchconf-san-francisco]]>


text:
I'm just doing what I do
Do it over and over and over
Quickly wanna run with me now
Swiftly just come with me now
Footsteps go to the beat now
Over and over and over
from Tyga (Ft. Justin Bieber) – Wait For A Minute Lyrics on Genius
Justin wants to get away with his girl and repeat romantic evenings one after another.
Also resembles his ex-girlfriend Selena Gomez's song "Undercover" where she also wants to get away from the media and just be with her dude.
Could easily be yet another allusion to how bad he wants Sel back.
To help improve the quality of the lyrics, visit Tyga (Ft. Justin Bieber) – Wait For A Minute Lyrics and leave a suggestion at the bottom of the page


text:
Every king wears a crown, but every iconic rapper sports his own particular style of hat. Whether it's LL Cool J in his Kangol or Jigga in his classic Yankees cap, the great ones are known for covering the dome.
View Photo Gallery
So, today on the 16th Anniversary of Biggie's death we're paying tribute to his undying love of newsboy caps, bowlers and even crowns by showing 16 of his best hat moments. Even "after death", Biggie is rocking a cap.
[Photo: Getty Images]


text:
The following is an archive of a post made to our
'vox mailing list'
by one of its subscribers.
Quoting John McDonnell (firstname.lastname@example.com):
> if we're talking about Macs using NFS, it's not pretty and it's not going
> to be easy (or cheap) to find the necessary software... believe me, I
> tried...
Given the smilie, I'm assuming Mark's suggestion was in jest. (NFS is
not generally a reasonable option for MacOS v. < 10 clients.
The temptation is to just leap in with a flying squadron of expertise to
"help". But I'd urge sitting down and talking about such things as
what's the goal, what is the level of commitment, who's going to
maintain the stuff when you're done, etc.
Enthusiasm and energy are great, but I hate to see them wasted.
vox mailing list
Hosting provided by:
Sunset Systems
Sunset Systems offers preconfigured Linux
systems, remote system administration and
custom software development.
LUGOD: Linux Users' Group of Davis
PO Box 2082, Davis, CA 95617
Contact Us
LUGOD is a 501(c)7 non-profit organization
based in Davis, California
and serving the Sacramento area.
"Linux" is a trademark of Linus Torvalds.


text:
Large Scale Mapping
A large scale map shows a relatively smaller region in greater detail. These topographic and planimetric maps may be used for decision making, analysis and engineering design. In some cases the maps are a new product, and in other cases we are called in to prepare a map update. Increasing the scale allows more features to be represented—with the level of detail being carefully tailored to meet each clients' particular solution needs.
Solution Process
AeroMetric will select the appropriate technology—digital camera imaging, LiDAR, satellite, airborne GPS, IMU to acquire your mapping data. We also use time-tested accuracy verification and adjustment techniques during production, to ensure that our large scale mapping solutions are cost-effective and reliable.


text:
Selling timeshare is not like selling a home. What works in residential real estate has little bearing on what it takes to sell timeshare property. When you want to sell a timeshare, you don't need a big real estate company. You don't need a real estate attorney. You don't even need an appraisal.
All you need in order to to sell your timeshare is an advertising company to help you connect with the largest market of prospective buyers possible. Timeshare Resale Rental is the established industry leader in using sophisticated Internet marketing strategies to attract targeted buyer traffic to our vacation property resale ads. Thousands upon thousands of interested online buyers view our timeshare inventory every week by finding us via the most popular search engines. In fact, our proven Internet marketing strategies provide individuals who need to sell timeshare with the most targeted exposure possible.
Click Here to View Timeshare-Resale-Rental.com's Web Traffic Statistics.
Internet marketing knowledge is the single most important quality you need from the company advertising your timeshare resale. But there are several other qualities you might want the company to have:
What you WANT and what you NEED is Timeshare Resale Rental..
Our company was founded by hardworking individuals, and we treat our clients with complete honesty and respect. Timeshare Resale Rental publishes third-party statistics that prove our Internet marketing is as effective as we say it is. Instead of wasting money on celebrity endorsements like some other companies, we invest in effectively marketing your timeshare. The successes of our timeshare sellers speak for themselves.
Timeshare Resale Rental and its affiliates generate an average of one million dollars a day in offers to buy or rent timeshares advertised with us. At Timeshare Resale Rental, we offer timeshare owners the best by-owner advertising and marketing service available. And to make it even easier for you to sell timeshare, we charge only a one-time, competitive advertising fee. And we never charge commissions, so when you sell your timeshare for cash, it's all yours.
If you are interested in advertising with us, please Click Here or call:
To find out what your timeshare property is worth:
Click Here
Spend The Day Relaxing Or Take Part In One Of The Many Exciting Activities! 7600 Annual Points! Buyer May Receive A Title Fee Credit!
Price Recently Reduced! Week 22 In Odd Years! No Reasonable Offer Will Be Refused!
Full Membership To Admiral Yacht Club. 13 Weeks Per Year Available! Buyer May Receive A Title Fee Credit, Inquire For Details!
Large Suite With The Ability To Separate For Privacy! Buyer May Receive A Title Fee Credit, Inquire For Details!


text:
02.21.2014 Notice of Work on the Trail
Beginning February 24, 2014 and continuing for approximately one month, contractors will be working on the Huckleberry Trail segment between the Route 460 tunnel and Tech Center Drive. The contractors will have drill rigs on site to construct a number of bore holes. The work is being done in preparation for the new Southgate Interchange. While the trail will not be closed, pedestrians, cyclists and other trail users are asked/ read more


text:
We have released a system that will allow you to trade among your fellow forum members. Trading is not limited to wrestling singlets & gear, but you can't trade anything illegal.
You can use this system to sell things, but you cannot be a store. We have no current maximum allowed sales volume per user, however, we reserve the right to add one.
The trading system is built directly into your profile (The "Feedback" Tab on everyone's profile) so leaving trader feedback is a breeze.
This system is for trading only, please read the guide sheet.
Join the wrestling singlets & gear trading social group and check out how you can use the new trading system.


text:
Student news June 6, 2014
Date posted: June 6, 2014
• Meghan Johnson of Dayton graduated from Black Hills State University in Spearfish, South Dakota. She earned her Bachelor of Science in education degree.
• Ashley Jelly of Sheridan graduated Magna Cum Laude with a Bachelor of Science in physical education, exercise science, from Dickinson State University in Dickinson, North Dakota.
• Two local students were named to the Carroll College (Helena, Montana) 2014 Spring Dean's List honor roll for achieving above a 3.5 grade-point average while enrolled in at least 12 credits: Katie Mischke and Dawson Osborn, both of Sheridan.
Copyright © 2015 The Sheridan Press or Sheridan Newspapers, Inc.
Reader Comments
Tell us what you think. The Sheridan Press offers you the chance to comment on articles on Thesheridanpress.com. We power our commenting forum with facebook comments. Please take a look at our participation guidelines before posting.


text:
Why the San Diego Chargers Will Win the Super Bowl
The San Diego Chargers will be the ones hoisting the Vince Lombardi Trophy when all is said and done in the 2013 National Football League season. You heard that right.
Despite being 0-1, being a 100-1 underdog to win the Super Bowl, and not qualifying for the playoffs over the past three years San Diego will show the world that they are the best team in football.
Don't believe me? While that may seem like the logical choice, you're forgetting one key fact.
The San Diego Chargers will face the Philadelphia Eagles this week in coach Chip Kelly's NFL home opener. That is why the Chargers, win or lose on Sunday, will wind up winning the Super Bowl.
Why you may ask.
Since 2009, every team that has made the trip to Philadelphia for the Eagles' home opener has gone on to win the Super Bowl. That is four straight seasons.
In 2009, the Eagles opened their home schedule against the New Orleans Saints. Drew Brees and company would go on to defeat the Colts in Super Bowl XLIV.
Then in 2010, the Packers played the Eagles in their first home game. They would later shock the world with their playoff run and knock off the Steelers in Super Bowl XLV.
2011 saw the trend continue, becoming a legitimate pattern. The Giants brought the rivalry to Philadelphia to start the year, later stunning Tom Brady and the Patriots for the second time on football's biggest stage.
Last year, the Ravens made the trek to the City of Brotherly Love and as we all know, sent Ray Lewis out a champion, beating the 49ers for the Super Bowl XLVII title.
So there you have it, the Chargers are destined to win the Super Bowl in 2013. Safety Eric Weddle thought his team would wind up on top before the schedule was even released. He explained in a preseason interview that "I feel like we're the best team in the league. We're not here to win the AFC West here and there. We want to win a Super Bowl."
He has to be feeling extra confident now.
Perhaps the only thing that could boost the certainty of a Chargers Super Bowl would be a loss to the Washington Redskins. The 'Skins have defeated the last three Super Bowl champs in the regular season.
Bet it now while the odds are still good.
Senior Sports Editor
The Guardian Express
9 Responses to Why the San Diego Chargers Will Win the Super Bowl
John, if i was a second stringer and got a chance to play with the first stringer, I will play my heart out. This is not new, I have seen many games that was similar to this, like the 1994 Steelers and Chargers last regular season game, Steelers rest all their first stringer and the Chargers barely beat them and went on to go to the Super Bowl. Remember the Dolphins Chargers play off in the eighties, Dolphins was getting their butt kick and they put in Don Strock, wow he played his heart out and almost won. Come on now John
If the Chargers march into Mile high stadium and beat the Broncos in the playoffs.. I will bow to you… Charger fans come out of the closet after they win a few games.. once they lose, the jersey go back in the closet until the next time they put together a few wins… put the Ryan Leaf jersey DOWN!!
annnnddd that's all she wrote.. thanks for comin' out……. more bad predictions to come from Charger fan!
another delusional charger fan.. you barely beat the Chiefs 2nd string team … at home.. with gifts from the refs.. go to the beach.. leave the football to the football people.
another cranky person who is all uptight and can't relax by the beach. haha
After today this is looking so so good


text:
Book Search
Theology and the Science of Moral Action
Virtue Ethics, Exemplarity, and Cognitive Neuroscience
Series: Routledge Studies in Religion
The past decade has witnessed a renaissance in scientific approaches to the study of morality. Once understood to be the domain of moral psychology, the newer approach to morality is largely interdisciplinary, driven in no small part by developments in behavioural economics and evolutionary biology...
Published October 16th 2012 by Routledge
Development of the Corpus Callosum and Interhemispheric Interactions
A Special Issue of developmental Neuropsychology
This special issue examines recent advances in our understanding of how interaction between the cerebral hemispheres can change with age. The articles investigate some of the important questions regarding integration of information between the hemispheres from a lifespan perspective ranging from...
Published November 1st 2000 by Psychology Press


text:
Neckface's Top 5 Gripes with Crailtap's Mini Top 5s
Neck Face gripes about Crail Tap's mini top 5s. I think Roger was double dipping here. Pretty sure he was on the clock for us at Sunset Rampage and did some Tap taping. For shame, Roger. Your pay has been docked.


text:
- home
- news
- features
- opinion
- blogs
- change ups
- calendar
- enewsletters
Items Tagged with 'Frey Foundation'
Frey Foundation awards $7.4M in grants
Last year was a good year for the Frey Foundation. Read More
New generation of family philanthropists stepping up
Frey Foundation board welcomes three new members
The winds of change are sending a generational transfer across the family philanthropies of West Michigan. Read More


text:
The Sea & Me Opens
May 26, 2012
The Oregon Coast Aquarium opens The Sea & Me, a new children's interactive exhibit, amid Memorial Day weekend festivities, May 26-28, 2012. The opening of the exhibit coincides with the Aquarium's 20th anniversary and the beginning of summer hours, 9 am to 6 pm, through Labor Day weekend. Opening weekend will include a performance by Radio Disney, face painting, a children's craft, behind the scenes tours, Sea & Me giveaways, sea lion kisses, sea lion encounters and interpretive dives.
The Sea & Me is designed to be fun and imaginative, based on a model used by children's museums, offering play experiences that are developmentally appropriate for children 4 to 10 years old, but kids of all ages will find interactive discoveries to enjoy. The Sea & Me will feature exhibits that invite curiosity and promote interactions within groups, while encouraging discovery and understanding of the habitats of marine and freshwater animals.
"Visitors to The Sea & Me will delve into the ocean on our submarine, haul in a catch on our fishing boat, dig in the sand for seashore treasures and see, hear and touch some really cool animals," said Kerry Carlin-Morgan, Aquarium Director of Education & Volunteer Services. "For grown-ups, one of the great pleasures in life can still be play." Carlin-Morgan said the intent of The Sea & Me is to encourage kids and families to get outdoors, connect with nature and engage their curiosity.
Components of The Sea & Me include a Submarine Sea Lab, Fishing Gallery, play area, touch pool and marine displays of animals that inspire inquiry. The Submarine Sea Lab allows children to explore the ocean through interactive displays and the power of imagination. Children can learn to be a deep water scientist aboard a mini submarine and descend into a coral reef through interactive displays and their own imaginations. The submarine will feature a working periscope, simulated ocean views using live animals and modern technology with things to push, flip, turn and twist.
The highlight of the Fishing Gallery is a child-sized fishing boat outfitted with a wheelhouse and fishing gear. Young explorers can slip on rubber bibs and experience life as a fisherman in coastal waters while they learn where seafood comes from and how it is caught.
One of the largest features in Sea & Me is the transformation of the Aquarium Theater into "Create Your Own Ocean Experience," a free-play area where children can engage in a variety of unstructured activities. The play area includes discovery boxes filled with ocean "biofacts" like shark jaws and whale baleen, ocean-themed books and marine animal-themed costumes with a stage area where young visitors can act out their own ocean adventure.
The Sea & Me extends the interactive experience by offering a new touch pool where visitors can interact directly with sharks and rays. In addition, the Aquarium's regular touch pool featuring invertebrates from Oregon tide pools is open in the Rocky Shores gallery.
Memorial Day Weekend Activities:
Saturday, May 26
KYTE-FM Radio Remote and Sea & Me giveaways 11 am – 2 pm
Radio Disney Performances 1 – 3 pm
Children's Craft 9 am – 6 pm
Interpretive Dive Show 11:30 am – 12 pm
Face Painting 11 am – 2:30 pm
Behind the Scenes Tour 1:30 – 2:00 pm
Sea Lion Kiss 2:30 – 3:00 pm
Sea Lion Encounter 10 – 11:00 am
Sunday, May 27
Children's Craft 9 am – 6 pm
Interpretive Dive Show 11:30 am – 12 pm
Face Painting 11 am – 2:30 pm
Behind the Scenes Tour 1:30 – 2:00 pm
Sea Lion Kiss 2:30 – 3:00 pm
Sea Lion Encounter 10 – 11:00 am
Monday, May 28
Behind the Scenes Tour 1:30 – 2:00 pm
Sea Lion Kiss 2:30 – 3:00 pm
The Oregon Coast Aquarium gratefully acknowledges The Sea & Me sponsors: Meyer Memorial Trust, Henry Lea Hillman, Jr. Foundation, Maybelle Clark Macdonald Fund, Rose E. Tucker Charitable Trust, Wheeler Foundation, Jeanette B. Hennings Foundation, Jackson Foundation, Pacific Power Foundation, Siletz Tribal Charitable Contribution Fund, Autzen Foundation, Pepsi Cola Bottling of Newport and more than 140 individuals who donated to The Sea & Me.


text:
Registration takes less than 1 minute.
"Every participant in the supply chain will have a role to play" in solving congestion issues, according to a new report from carrier group World Shipping Council.
A new report from the European Shippers Council outlines the potential positive and negative effects of large-scale ocean carrier cooperation and alliances.
Transportation and warehousing segment added 13,000 new jobs in May, according to the latest figures from the U.S. Department of Labor's Bureau of Labor Statistics.
Retailer diverted cargo, formed chassis fleet, and used untapped drayage to combat West Coast congestion.
Port disruptions caused by contentious dockworker contract negotiations likely reduced real export growth 1.5 percent in the first quarter, according to a recent study by the Federal Reserve Bank of New York.
A new whitepaper from CarrierDirect says 3PLs can become strategic partners of LTL carriers in tight capacity environment by reducing a major pain point for carriers.


text:
Teens give life back to the kernels: Pollinators walk fields to help seed company develop new lines of corn
August 15, 2014 in Uncategorized
SABIN, Minn. â Every summer dozens of teens and adults walk acres of cornfields near this western Minnesota town, pollinating the plants.
Itâs a practice thatâs been going on since the 1980s in the local DuPont Pioneer fields. But Matt Walch, …continue reading on thedickinsonpress.com


text:
Search Jobs
Job Details
Cleveland Clinic
Independence, OH
See job description
See job description
See job description
CCHS Employees Only
Reference Title
HR Use Only: Department Supervisor I
Hospital: Main Campus Exempt
Facility: CC Business Operations Ctr
Department: Payroll
Job Code: T22010
Pay Grade: 11
Schedule: Full Time
Shift: Days
Job Details:
This posting is for PAYROLL DEPARTMENT EMPLOYEES ONLY
Supervises the technical and administrative functions. Acts as a technical resource for team members. Collaborates to achieve the organizational goals. Implements goals consistent with assigned clinical and non-clinical units.Supervises employees in daily operations. Maintains staffing levels, approves and schedules paid time off and leave requests. Provides leadership and training. Coordinates and provides orientation, education and training. Ensures cross coverage.Develops effective work team. Improves procedures and processes. Encourages and supports morale building activities and positive attitudes.Communicates with employees and provides orientation on policies.Analyzes workflow and procedures. Identifies and implements opportunities to improve speed, quality and effectiveness.Performs other duties as assigned.
EDUCATION: High School Diploma or GED. Associate Degree preferred. Knowledge of supervision, training/development and public relations practices.
LICENSURE/CERTIFICATION/REGISTRATION: None COMPLEXITY OF WORK: Requires critical thinking skills, decisive judgment and the ability to work with minimal supervision. Must be able to take appropriate action in a stressful environment.
REQUIRED EXPERIENCE: Three years experience as a work leader, team lead or project manager or year of supervisory experience in a related field. Excellent communication and interpersonal skills required.
PREFERRED QUALIFICATIONS: Knowledge of Excel and pivot tables a plus. Working knowledge of Lawson processing and add-ins preferred.
PHYSICAL REQUIREMENTS: Requires standing and walking for extensive periods of time. Requires corrected vision and hearing to normal range. Requires dexterity sufficient to operate a computer. Will require the ability to operate various types of powered material handling equipment. Medium Work - Exerting 20 to 50 pounds of force occasionally, and/or 10 to 25 pounds of force frequently, and/or greater than negligible up to 10 pounds of force constantly to move objects. Physical Demand requirements are in excess of those for Light Work.
Category: Finance/Information Systems
To apply for this job, visit http://www.clevelandclinic-jobs.com/job/Independence-Department-Supervisor-I%2C-CCHS-Employees-Only%2C-Departmental-Personnel-Only-Job-OH-44131/47633800/?feedId=833&utm_source=MaximusJobs&utm_campaign=ClevelandClinic
You must be logged in to Save a Job. You will be
returned to this page after you login or sign up.
Not a member? Click here to sign up. It's easy and free.
You must be logged in to Apply for a Job. You will be
returned to this page after you login or sign up.
Not a member? Click here to sign up. It's easy and free.
Report Abuse:
Thank you. Your report has been submitted.


text:
SUMMIT's SCF series of commercial storage freezers with sliding glass tops includes deluxe models in a range of sizes, built to last and priced for value.
The SCF1710 has a 62" width and a over 17 c.f. of capacity. The sliding doors are made from tempered safety glass. Sleek aluminum frames increase visibility, with reinforced corners for added durability. Strong casters offer smooth mobility for easy cleanup.
Inside, the SCF1710 has a deep aluminum interior. A sturdy lock and drain is standard. The manual defrost interior is designed to operate at 0ºF.
|Sliding glass lid
|Strong tempered glass provides full view
|Factory installed lock
|Trusted security with a keyed lock on the lid
|Hammered aluminum interior
|Durable and easy to clean
|Heavy duty wheels for smooth mobility
|Fan-cooled compressor
|Offers improved temperature performance throughout the interior
|Extra large capacity
|Over 17 cu.ft. of storage space inside
|Adjustable thermostat
|Manage the temperature with ease and accuracy
|Manual defrost
|Static cooling system for improved temperature stability
|100% CFC Free
|Environmentally friendly design with no ozone-damaging chemicals


text:
Watsons Bay is a harbourside, eastern suburb of Sydney, in the state of New South Wales, Australia. Watsons Bay is located 11 kilometres north-east of the Sydney central business district, in the local government area of the Municipality of Woollahra.
Watsons Bay sits on the end of the South Head peninsula and takes its name from the sheltered bay and anchorage on its western side, in Port Jackson (Sydney Harbour). It provides spectacular views across the harbour to the Sydney Harbour Bridge. The Gap is an ocean cliff on the eastern side with spectacular views to Manly at North Head and the Pacific Ocean. Vaucluse is the only adjacent suburb, to the south.
The first grant of 20 acres was made to Edward Laing in 1793 in the Camp Cove Area. Watsons Bay was an isolated fishing village until development began in the 1860s.
On the 20th August 1857, a sailing ship called the Dunbar was shipwrecked against the cliffs below The Gap, with 121 lives lost. The Dunbar had mistaken the bay of The Gap for the harbour entrance. Today, The Gap is known as a notorious suicide spot, with about 20 to 30 deaths occurring there each year.
Several defensive fortifications are located on the shores and cliff tops of Watsons Bay such as Shark Point Battery which was constructed in 1871. The Signal Hill Barracks Batteries Bunkers and Forts in Sydney is located next to the Signal Hill Lighthouse on Old South Head Road. It was originally built to accommodate a 9.2 inch breech loading disappearing gun (now on display at the Artillery Museum at North Head) that was used to protect the entrance to Sydney Harbour in the event of seaborn attack. Two other fortifications built during the same period are The Ben Buckler Gun Battery (buried under a public reserve) and another at Clovelly. The gun (cannon) was commissioned in 1893, the last firing there was in 1933. It was removed and replaced in 1937 by two 6 inch MK 11 guns placed in each of the outer gun emplacements (taken away after WWII). The fortification also has an underground complex that runs beneath Old South Head Road. It contains a maze of rooms and corridors including a mess room, elevator shaft and gunpowder magazines. The entrance from the street has been tack welded and sealed. A memorial was placed there in November, 1992 by the Royal Australian Signal Corps Association on behalf of its members and two plaques were also placed on March 30, 1993 placing the reserve in proper historical perspective.
In 1942, to protect Sydney Harbour from a submarine attack, an anti-submarine boom net was constructed on Green (laings) Point, Watsons Bay. It was demolished after the war and all that remains are the foundations of the old boom net winch house which can be viewed on Green (Laings) Point Watsons Bay.