Software disenchantment
소프트웨어에 환멸을 느낀다
I’ve been programming for 15 years now. Recently our industry’s lack of care for efficiency, simplicity, and excellence started really getting to me, to the point of me getting depressed by my own career and the IT in general.
저는 15년간 프로그래밍을 해왔죠. 근데 요즘 이 세계에서는 효율과 간결함에 대한 추구, 그리고 제대로 만들려는 노오력이 거의 없는 것 같습니다? 이제까지 쌓아온 제 경력이나 IT 전반에 대해 우울해질 지경이에요.
Modern cars work, let’s say for the sake of argument, at 98% of what’s physically possible with the current engine design. Modern buildings use just enough material to fulfill their function and stay safe under the given conditions. All planes converged to the optimal size/form/load and basically look the same.
Modern cars work, let’s say for the sake of argument, at 98% of what’s physically possible with the current engine design. Modern buildings use just enough material to fulfill their function and stay safe under the given conditions. All planes converged to the optimal size/form/load and basically look the same.
Only in software, it’s fine if a program runs at 1% or even 0.01% of the possible performance. Everybody just seems to be ok with it. People are often even proud about how much inefficient it is, as in “why should we worry, computers are fast enough”:
@tveastman: I have a Python program I run every day, it takes 1.5 seconds. I spent six hours re-writing it in rust, now it takes 0.06 seconds. That efficiency improvement means I’ll make my time back in 41 years, 24 days :-)
Only in software, it’s fine if a program runs at 1% or even 0.01% of the possible performance. Everybody just seems to be ok with it. People are often even proud about how much inefficient it is, as in “why should we worry, computers are fast enough”:
@tveastman: I have a Python program I run every day, it takes 1.5 seconds. I spent six hours re-writing it in rust, now it takes 0.06 seconds. That efficiency improvement means I’ll make my time back in 41 years, 24 days :-)
You’ve probably heard this mantra: “programmer time is more expensive than computer time”. What it means basically is that we’re wasting computers at an unprecedented scale. Would you buy a car if it eats 100 liters per 100 kilometers? How about 1000 liters? With computers, we do that all the time.
You’ve probably heard this mantra: “programmer time is more expensive than computer time”. What it means basically is that we’re wasting computers at an unprecedented scale. Would you buy a car if it eats 100 liters per 100 kilometers? How about 1000 liters? With computers, we do that all the time.
 Yet every other webpage struggles to maintain a smooth 60fps scroll on the latest top-of-the-line MacBook Pro. I can comfortably play games, watch 4K videos but not scroll web pages? How is it ok?
Look around: our portable computers are thousands of times more powerful than the ones that brought man to the moon. Yet every other webpage struggles to maintain a smooth 60fps scroll on the latest top-of-the-line MacBook Pro. I can comfortably play games, watch 4K videos but not scroll web pages? How is it ok?
Google Inbox, a web app written by Google, running in Chrome browser also by Google, takes 13 seconds to open moderately-sized emails:
Google Inbox, a web app written by Google, running in Chrome browser also by Google, takes 13 seconds to open moderately-sized emails:
It also animates empty white boxes instead of showing their content because it’s the only way anything can be animated on a webpage with decent performance. No, decent doesn’t mean 60fps, it’s rather “as fast as this web page could possibly go”. I’m dying to see web community answer when 120Hz displays become mainstream. Shit barely hits 60Hz already.
It also animates empty white boxes instead of showing their content because it’s the only way anything can be animated on a webpage with decent performance. No, decent doesn’t mean 60fps, it’s rather “as fast as this web page could possibly go”. I’m dying to see web community answer when 120Hz displays become mainstream. Shit barely hits 60Hz already.
Windows 10 takes 30 minutes to update. What could it possibly be doing for that long? That much time is enough to fully format my SSD drive, download a fresh build and install it like 5 times in a row.
Windows 10 takes 30 minutes to update. What could it possibly be doing for that long? That much time is enough to fully format my SSD drive, download a fresh build and install it like 5 times in a row.
Pavel Fatin: Typing in editor is a relatively simple process, so even 286 PCs were able to provide a rather fluid typing experience.
Pavel Fatin: Typing in editor is a relatively simple process, so even 286 PCs were able to provide a rather fluid typing experience.
Modern text editors have higher latency than 42-year-old Emacs. Text editors! What can be simpler? On each keystroke, all you have to do is update tiny rectangular region and modern text editors can’t do that in 16ms. It’s a lot of time. A LOT. A 3D game can fill the whole screen with hundreds of thousands (!!!) of polygons in the same 16ms and also process input, recalculate the world and dynamically load/unload resources. How come?
Modern text editors have higher latency than 42-year-old Emacs. Text editors! What can be simpler? On each keystroke, all you have to do is update tiny rectangular region and modern text editors can’t do that in 16ms. It’s a lot of time. A LOT. A 3D game can fill the whole screen with hundreds of thousands (!!!) of polygons in the same 16ms and also process input, recalculate the world and dynamically load/unload resources. How come?
As a general trend, we’re not getting faster software with more features. We’re getting faster hardware that runs slower software with the same features. Everything works way below the possible speed. Ever wonder why your phone needs 30 to 60 seconds to boot? Why can’t it boot, say, in one second? There are no physical limitations to that. I would love to see that. I would love to see limits reached and explored, utilizing every last bit of performance we can get for something meaningful in a meaningful way.
As a general trend, we’re not getting faster software with more features. We’re getting faster hardware that runs slower software with the same features. Everything works way below the possible speed. Ever wonder why your phone needs 30 to 60 seconds to boot? Why can’t it boot, say, in one second? There are no physical limitations to that. I would love to see that. I would love to see limits reached and explored, utilizing every last bit of performance we can get for something meaningful in a meaningful way.
Everything is HUUUUGE
Everything is HUUUUGE
And then there’s bloat. Web apps could open up to 10× faster if you just simply block all ads. Google begs everyone to stop shooting themselves in their feet with AMP initiative—a technology solution to a problem that doesn’t need any technology, just a little bit of common sense. If you remove bloat, the web becomes crazy fast. How smart do you have to be to understand that?
And then there’s bloat. Web apps could open up to 10× faster if you just simply block all ads. Google begs everyone to stop shooting themselves in their feet with AMP initiative—a technology solution to a problem that doesn’t need any technology, just a little bit of common sense. If you remove bloat, the web becomes crazy fast. How smart do you have to be to understand that?
Android system with no apps takes almost 6 Gb. Just think for a second how obscenely HUGE that number is. What’s in there, HD movies? I guess it’s basically code: kernel, drivers. Some string and resources too, sure, but those can’t be big. So, how many drivers do you need for a phone?
Android system with no apps takes almost 6 Gb. Just think for a second how obscenely HUGE that number is. What’s in there, HD movies? I guess it’s basically code: kernel, drivers. Some string and resources too, sure, but those can’t be big. So, how many drivers do you need for a phone?
Windows 95 was 30Mb. Today we have web pages heavier than that! Windows 10 is 4Gb, which is 133 times as big. But is it 133 times as superior? I mean, functionally they are basically the same. Yes, we have Cortana, but I doubt it takes 3970 Mb. But whatever Windows 10 is, is Android really 150% of that?
Windows 95 was 30Mb. Today we have web pages heavier than that! Windows 10 is 4Gb, which is 133 times as big. But is it 133 times as superior? I mean, functionally they are basically the same. Yes, we have Cortana, but I doubt it takes 3970 Mb. But whatever Windows 10 is, is Android really 150% of that?
Google keyboard app routinely eats 150 Mb. Is an app that draws 30 keys on a screen really five times more complex than the whole Windows 95? Google app, which is basically just a package for Google Web Search, is 350 Mb! Google Play Services, which I do not use (I don’t buy books, music or videos there)—300 Mb that just sit there and which I’m unable to delete.
Google keyboard app routinely eats 150 Mb. Is an app that draws 30 keys on a screen really five times more complex than the whole Windows 95? Google app, which is basically just a package for Google Web Search, is 350 Mb! Google Play Services, which I do not use (I don’t buy books, music or videos there)—300 Mb that just sit there and which I’m unable to delete.
All that leaves me around 1 Gb for my photos after I install all the essential (social, chats, maps, taxi, banks etc) apps. And that’s with no games and no music at all! Remember times when an OS, apps and all your data fit on a floppy?
All that leaves me around 1 Gb for my photos after I install all the essential (social, chats, maps, taxi, banks etc) apps. And that’s with no games and no music at all! Remember times when an OS, apps and all your data fit on a floppy?
Your desktop todo app is probably written in Electron and thus has userland driver for Xbox 360 controller in it, can render 3d graphics and play audio and take photos with your web camera.
Your desktop todo app is probably written in Electron and thus has userland driver for Xbox 360 controller in it, can render 3d graphics and play audio and take photos with your web camera.
A simple text chat is notorious for its load speed and memory consumption. Yes, you really have to count Slack in as a resource-heavy application. I mean, chatroom and barebones text editor, those are supposed to be two of the less demanding apps in the whole world. Welcome to 2018.
A simple text chat is notorious for its load speed and memory consumption. Yes, you really have to count Slack in as a resource-heavy application. I mean, chatroom and barebones text editor, those are supposed to be two of the less demanding apps in the whole world. Welcome to 2018.
At least it works, you might say. Well, bigger doesn’t imply better. Bigger means someone has lost control. Bigger means we don’t know what’s going on. Bigger means complexity tax, performance tax, reliability tax. This is not the norm and should not become the norm. Overweight apps should mean a red flag. They should mean run away scared.
At least it works, you might say. Well, bigger doesn’t imply better. Bigger means someone has lost control. Bigger means we don’t know what’s going on. Bigger means complexity tax, performance tax, reliability tax. This is not the norm and should not become the norm. Overweight apps should mean a red flag. They should mean run away scared.
Everything rots
Everything rots
16Gb Android phone was perfectly fine 3 years ago. Today with Android 8.1 it’s barely usable because each app has become at least twice as big for no apparent reason. There are no additional functions. They are not faster or more optimized. They don’t look different. They just…grow?
16Gb Android phone was perfectly fine 3 years ago. Today with Android 8.1 it’s barely usable because each app has become at least twice as big for no apparent reason. There are no additional functions. They are not faster or more optimized. They don’t look different. They just…grow?
iPhone 4s was released with iOS 5, but can barely run iOS 9. And it’s not because iOS 9 is that much superior—it’s basically the same. But their new hardware is faster, so they made software slower. Don’t worry—you got exciting new capabilities like…running the same apps with the same speed! I dunno.
iPhone 4s was released with iOS 5, but can barely run iOS 9. And it’s not because iOS 9 is that much superior—it’s basically the same. But their new hardware is faster, so they made software slower. Don’t worry—you got exciting new capabilities like…running the same apps with the same speed! I dunno.
iOS 11 dropped support for 32-bit apps. That means if the developer isn’t around at the time of iOS 11 release or isn’t willing to go back and update a once-perfectly-fine app, chances are you won’t be seeing their app ever again.
@jckarter: A DOS program can be made to run unmodified on pretty much any computer made since the 80s. A JavaScript app might break with tomorrow’s Chrome update
iOS 11 dropped support for 32-bit apps. That means if the developer isn’t around at the time of iOS 11 release or isn’t willing to go back and update a once-perfectly-fine app, chances are you won’t be seeing their app ever again.
@jckarter: A DOS program can be made to run unmodified on pretty much any computer made since the 80s. A JavaScript app might break with tomorrow’s Chrome update
Web pages working today would not be compatible with any browser in 10 years time (probably sooner).
Web pages working today would not be compatible with any browser in 10 years time (probably sooner).
“It takes all the running you can do, to keep in the same place”. But what’s the point? I might enjoy occasionally buying a new phone and new MacBook as much as the next guy, but to do so just to be able to run all the same apps which just became slower?
“It takes all the running you can do, to keep in the same place”. But what’s the point? I might enjoy occasionally buying a new phone and new MacBook as much as the next guy, but to do so just to be able to run all the same apps which just became slower?
I think we can and should do better than that. Everyone is busy building stuff for right now, today, rarely for tomorrow. But it would be nice to also have stuff that lasts a little longer than that.
I think we can and should do better than that. Everyone is busy building stuff for right now, today, rarely for tomorrow. But it would be nice to also have stuff that lasts a little longer than that.
Worse is better
Worse is better
Nobody understands anything at this point. Neither they want to.
Nobody understands anything at this point. Neither they want to.
Web pages ask you to refresh if anything goes wrong. Who has time to figure out what happened?
Web pages ask you to refresh if anything goes wrong. Who has time to figure out what happened?
Any web app produces a constant stream of “random” JS errors in the wild, even on compatible browsers.
Any web app produces a constant stream of “random” JS errors in the wild, even on compatible browsers.
The whole webpage/SQL database architecture is built on a premise (hope, even) that nobody will touch your data while you look at the rendered webpage.
The whole webpage/SQL database architecture is built on a premise (hope, even) that nobody will touch your data while you look at the rendered webpage.
Most collaborative implementations are “best effort” and have many common-life scenarios in which they lose data. Ever seen this dialogue “which version to keep?” I mean, bar today is so low that your users would be happy to at least have a window like that.
Most collaborative implementations are “best effort” and have many common-life scenarios in which they lose data. Ever seen this dialogue “which version to keep?” I mean, bar today is so low that your users would be happy to at least have a window like that.
And no, in my world app that says “I’m gonna destroy some of your work, but you get to choose which one” is not okay.
And no, in my world app that says “I’m gonna destroy some of your work, but you get to choose which one” is not okay.
Linux kills random processes by design. And yet it’s the most popular server-side OS.
Linux kills random processes by design. And yet it’s the most popular server-side OS.
Every device I own fails regularly one way or another. My Dell monitor needs a hard reboot from time to time because there’s software in it. Airdrop? You’re lucky if it’ll detect your device, otherwise, what do I do? Bluetooth? Spec is so complex that devices won’t talk to each other and periodic resets are the best way to go.
Every device I own fails regularly one way or another. My Dell monitor needs a hard reboot from time to time because there’s software in it. Airdrop? You’re lucky if it’ll detect your device, otherwise, what do I do? Bluetooth? Spec is so complex that devices won’t talk to each other and periodic resets are the best way to go.
And I’m not even touching Internet of Things. It’s so far beyond the laughing point I’m not even sure what to add.
And I’m not even touching Internet of Things. It’s so far beyond the laughing point I’m not even sure what to add.
I want to take pride in my work. I want to deliver working, stable things. To do that, we need to understand what we are building, in and out, and that’s impossible to do in bloated, over-engineered systems.
I want to take pride in my work. I want to deliver working, stable things. To do that, we need to understand what we are building, in and out, and that’s impossible to do in bloated, over-engineered systems.
Programming is the same mess
Programming is the same mess
It just seems that nobody is interested in building quality, fast, efficient, lasting, foundational stuff anymore. Even when efficient solutions have been known for ages, we still struggle with the same problems: package management, build systems, compilers, language design, IDEs.
It just seems that nobody is interested in building quality, fast, efficient, lasting, foundational stuff anymore. Even when efficient solutions have been known for ages, we still struggle with the same problems: package management, build systems, compilers, language design, IDEs.
Build systems are inherently unreliable and periodically require full clean, even though all info for invalidation is there. Nothing stops us from making build process reliable, predictable and 100% reproducible. Just nobody thinks its important. NPM has stayed in “sometimes works” state for years.
@przemyslawdabek: It seems to me that
rm -rf node_modules
is indispensable part of workflow when developing Node.js/JavaScript projects.
Build systems are inherently unreliable and periodically require full clean, even though all info for invalidation is there. Nothing stops us from making build process reliable, predictable and 100% reproducible. Just nobody thinks its important. NPM has stayed in “sometimes works” state for years.
@przemyslawdabek: It seems to me that
rm -rf node_modules
is indispensable part of workflow when developing Node.js/JavaScript projects.
And build times? Nobody thinks compiler that works minutes or even hours is a problem. What happened to “programmer’s time is more important”? Almost all compilers, pre- and post-processors add significant, sometimes disastrous time tax to your build without providing proportionally substantial benefits.
And build times? Nobody thinks compiler that works minutes or even hours is a problem. What happened to “programmer’s time is more important”? Almost all compilers, pre- and post-processors add significant, sometimes disastrous time tax to your build without providing proportionally substantial benefits.
You would expect programmers to make mostly rational decisions, yet sometimes they do the exact opposite of that. E.g. choosing Hadoop even when it’s slower than running the same task on a single desktop.
You would expect programmers to make mostly rational decisions, yet sometimes they do the exact opposite of that. E.g. choosing Hadoop even when it’s slower than running the same task on a single desktop.
Machine learning and “AI” moved software to guessing in the times when most computers are not even reliable enough in the first place.
@rakhim: When an app or a service is described as “AI-powered” or “ML-based”, I read it as “unreliable, unpredictable, and impossible to reason about behavior”. I try to avoid “AI” because I want computers to be the opposite: reliable, predictable, reasonable.
Machine learning and “AI” moved software to guessing in the times when most computers are not even reliable enough in the first place.
@rakhim: When an app or a service is described as “AI-powered” or “ML-based”, I read it as “unreliable, unpredictable, and impossible to reason about behavior”. I try to avoid “AI” because I want computers to be the opposite: reliable, predictable, reasonable.
We put virtual machines inside Linux, and then we put Docker inside virtual machines, simply because nobody was able to clean up the mess that most programs, languages and their environment produce.  “Single binary” is still a HUGE selling point for Go, for example. No mess == success.
We put virtual machines inside Linux, and then we put Docker inside virtual machines, simply because nobody was able to clean up the mess that most programs, languages and their environment produce.  “Single binary” is still a HUGE selling point for Go, for example. No mess == success.
And dependencies? People easily add overengineered “full package solutions” to solve the simplest problems without considering their costs. And those dependencies bring other dependencies. You end up with a tree that is something in between of horror story (OMG so big and full of conflicts) and comedy (there’s no reason we include these, yet here they are):
And dependencies? People easily add overengineered “full package solutions” to solve the simplest problems without considering their costs. And those dependencies bring other dependencies. You end up with a tree that is something in between of horror story (OMG so big and full of conflicts) and comedy (there’s no reason we include these, yet here they are):
Programs can’t work for years without reboots anymore. Sometimes even days are too much to ask. Random stuff happens and nobody knows why.
Programs can’t work for years without reboots anymore. Sometimes even days are too much to ask. Random stuff happens and nobody knows why.
What’s worse, nobody has time to stop and figure out what happened. Why bother if you can always buy your way out of it. Spin another AWS instance. Restart process. Drop and restore the whole database. Write a watchdog that will restart your broken app every 20 minutes. Include same resources multiple times, zip and ship. Move fast, don’t fix.
What’s worse, nobody has time to stop and figure out what happened. Why bother if you can always buy your way out of it. Spin another AWS instance. Restart process. Drop and restore the whole database. Write a watchdog that will restart your broken app every 20 minutes. Include same resources multiple times, zip and ship. Move fast, don’t fix.
That is not engineering. That’s just lazy programming. Engineering is understanding performance, structure, limits of what you build, deeply. Combining poorly written stuff with more poorly written stuff goes strictly against that. To progress, we need to understand what and why are we doing.
That is not engineering. That’s just lazy programming. Engineering is understanding performance, structure, limits of what you build, deeply. Combining poorly written stuff with more poorly written stuff goes strictly against that. To progress, we need to understand what and why are we doing.
We’re stuck with it
We’re stuck with it
So everything is just a pile of barely working code added on top of previously written barely working code. It keeps growing in size and complexity, diminishing any chance for a change.
So everything is just a pile of barely working code added on top of previously written barely working code. It keeps growing in size and complexity, diminishing any chance for a change.
To have a healthy ecosystem you need to go back and revisit. You need to occasionally throw stuff away and replace it with better stuff.
To have a healthy ecosystem you need to go back and revisit. You need to occasionally throw stuff away and replace it with better stuff.
But who has time for that? We haven’t seen new OS kernels in what, 25 years? It’s just too complex to simply rewrite by now. Browsers are so full of edge cases and historical precedents by now that nobody dares to write layout engine from scratch.
But who has time for that? We haven’t seen new OS kernels in what, 25 years? It’s just too complex to simply rewrite by now. Browsers are so full of edge cases and historical precedents by now that nobody dares to write layout engine from scratch.
Today’s definition of progress is either throw more fuel into the fire:
@sahrizv: 2014 - We must adopt #microservices to solve all problems with monoliths.
2016 - We must adopt #docker to solve all problems with microservices.
2018 - We must adopt #kubernetes to solve all problems with docker
Today’s definition of progress is either throw more fuel into the fire:
@sahrizv: 2014 - We must adopt #microservices to solve all problems with monoliths.
2016 - We must adopt #docker to solve all problems with microservices.
2018 - We must adopt #kubernetes to solve all problems with docker
or reinventing the wheel:
@dr_c0d3: 2000: Write 100s of lines of XML to “declaratively” configure your servlets and EJBs.
2018: Write 100s of lines of YAML to “declaratively” configure your microservices.
At least XML had schemas…
or reinventing the wheel:
@dr_c0d3: 2000: Write 100s of lines of XML to “declaratively” configure your servlets and EJBs.
2018: Write 100s of lines of YAML to “declaratively” configure your microservices.
At least XML had schemas…
We’re stuck with what we have, and nobody will ever save us.
We’re stuck with what we have, and nobody will ever save us.
Business won’t care
Business won’t care
Neither will users. They are only learned to expect what we can provide. We (engineers) say every Android app takes 350 Mb? Ok, they’ll live with that. We say we can’t give them smooth scrolling? Ok, they’ll live with a phone that stutter. We say “if it doesn’t work, reboot”? They’ll reboot. After all, they have no choice.
Neither will users. They are only learned to expect what we can provide. We (engineers) say every Android app takes 350 Mb? Ok, they’ll live with that. We say we can’t give them smooth scrolling? Ok, they’ll live with a phone that stutter. We say “if it doesn’t work, reboot”? They’ll reboot. After all, they have no choice.
There’s no competition either. Everybody is building the same slow, bloated, unreliable products. Occasional jump forward in quality does bring competitive advantage (iPhone/iOS vs other smartphones, Chrome vs other browsers) and forces everybody to regroup, but not for long.
There’s no competition either. Everybody is building the same slow, bloated, unreliable products. Occasional jump forward in quality does bring competitive advantage (iPhone/iOS vs other smartphones, Chrome vs other browsers) and forces everybody to regroup, but not for long.
So it’s our mission as engineers to show the world what’s possible with today’s computers in terms of performance, reliability, quality, usability. If we care, people will learn. And there’s nobody but us to show them that it’s very much possible. If only we care.
So it’s our mission as engineers to show the world what’s possible with today’s computers in terms of performance, reliability, quality, usability. If we care, people will learn. And there’s nobody but us to show them that it’s very much possible. If only we care.
It’s not all bad
It’s not all bad
There are some bright spots indicating that improving over state-of-the-art is not impossible.
There are some bright spots indicating that improving over state-of-the-art is not impossible.
Work Martin Thompson has being doing (LMAX Disruptor, SBE, Aeron) is impressive, refreshingly simple and efficient.
Work Martin Thompson has being doing (LMAX Disruptor, SBE, Aeron) is impressive, refreshingly simple and efficient.
Xi editor by Raph Levien seems to be built with the right principles in mind.
Xi editor by Raph Levien seems to be built with the right principles in mind.
Jonathan Blow has a language he alone develops for his game that can compile 500k lines per second on his laptop. That’s cold compile, no intermediate caching, no incremental builds.
Jonathan Blow has a language he alone develops for his game that can compile 500k lines per second on his laptop. That’s cold compile, no intermediate caching, no incremental builds.
You don’t have to be a genius to write fast programs. There’s no magic trick.
You don’t have to be a genius to write fast programs. There’s no magic trick.
Better world manifesto
Better world manifesto
I want to see progress. I want change. I want state-of-the-art in software engineering to improve, not just stand still. I don’t want to reinvent the same stuff over and over, less performant and more bloated each time. I want something to believe in, a worthy end goal, a future better than what we have today, and I want a community of engineers who share that vision.
I want to see progress. I want change. I want state-of-the-art in software engineering to improve, not just stand still. I don’t want to reinvent the same stuff over and over, less performant and more bloated each time. I want something to believe in, a worthy end goal, a future better than what we have today, and I want a community of engineers who share that vision.
What we have today is not progress. We barely meet business goals with poor tools applied over the top. We’re stuck in local optima and nobody wants to move out. It’s not even a good place, it’s bloated and inefficient. We just somehow got used to it.
What we have today is not progress. We barely meet business goals with poor tools applied over the top. We’re stuck in local optima and nobody wants to move out. It’s not even a good place, it’s bloated and inefficient. We just somehow got used to it.
 As engineers, we can, and should, and will do better. We can have better tools, we can build better apps, faster, more predictable, more reliable, using fewer resources (orders of magnitude fewer!). We need to understand deeply what are we doing and why. We need to deliver: reliably, predictably, with topmost quality. We can—and should–take pride in our work. Not just “given what we had…”—no buts!
 As engineers, we can, and should, and will do better. We can have better tools, we can build better apps, faster, more predictable, more reliable, using fewer resources (orders of magnitude fewer!). We need to understand deeply what are we doing and why. We need to deliver: reliably, predictably, with topmost quality. We can—and should–take pride in our work. Not just “given what we had…”—no buts!
I hope I’m not alone at this. I hope there are people out there who want to do the same. I’d appreciate if we at least start talking about how absurdly bad our current situation in the software industry is. And then we maybe figure out how to get out.
I hope I’m not alone at this. I hope there are people out there who want to do the same. I’d appreciate if we at least start talking about how absurdly bad our current situation in the software industry is. And then we maybe figure out how to get out.


PROGRAMMING SKILLS
- Frontend: HTML5, CSS3, SASS/SCSS, jQuery, React
- Backend: Ruby, JavaScrilit, Node, AJAX, Shell/Bash Scripting
- Databases: MongoDB, PostgreSQL, SQLite3, Active Record
- Frameworks: Rails, Meteor, Sinatra, RESTful Routes, Git
- Testing: RSpec, TDD, Jasmine
EXPERIENCE
Dev Bootcamp Web Development Student (August 2015 – January 2016)
- More than 1300 hours dedicated to coding challenges, group projects, individual projects, and self guided learning.
- Created and deployed web applications using Ruby on Rails, Javascript, HTML5 / CSS3, jQuery, AJAX, ActiveRecord, Sinatra, Meteor and React.
- Implemented best practices using Object Oriented Design, Model View Controller (MVC), test-driven development (TDD), and RESTful patterns.
- Utilized both object-relational and non-relational database management systems including Postgres (PostgresQL), SQLite (SQLite3) and MongoDB.
LEIDOS, Inc. Team Leader (September 2006 – May 2015)
- Led a select team of four linguists providing translation, transcription, gisting/sight translation, source data triaging, interpretation, and training services to clients.
- Produced finished translation products on a variety of general and technical subject matters by properly rendering meaning, grammatical structure, and cultural references and expressions from the source language into the target language.
- Edited translation products and performed quality control to ensure accuracy, clarity, readability, and proper style and tone.
- Compiled monthly production statistics and annual performance reviews for each team member and provided feedback to improve team members’ language capabilities.
- Fostered a winning and productive team environment that improved morale and personnel retention and achieved zero voluntary attrition.
EDUCATION
- M.B.A. Georgetown University McDonough School of Business
- M.A. Applied Economics - Johns Hopkins University
- M.A. Asian Studies - Cornell University
- B.A. Asian Studies - University of Virginia
LANGUAGES
- Mandarin Chinese (Fluent)


Blockchain demo
Blockchain development training
Create your own blockchain
And understand all concepts of this technology
Get started!


Exploration 2.2.3.
Consider the vector space \(\mathbb{R}^2\text{.}\) Explain why the following are not subspaces:- The unit circle.
- The line \(x+y = 4\text{.}\)
- The union of lines \(2x+3y = 0\) and \(x-y=0\text{.}\)
- The first quadrant where \(x\geq 0\) and \(y\geq 0\text{.}\)


--- layout: page category: spec title: "Input Events" ---
Old name/id for Input Events Level 1 ( input-events-1) .
input-events-1
Input Events


|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object | +--com.milk.uberchat.icb.ICBInteractor
This class does all the interaction with an ICB server. It takes input in the form of filtered messages (filtered through an ICBInputFilter) and explicit calls to do stuff. It sends stuff back to the server depending on what it's told to do, and messages etc. along to an ICBSystem depending on what gets received from the connection. BUG--when you disconnect, the interactor thread is left around. This is bad.
| Nested Class Summary | |
private class |
ICBInteractor.MyICBListener
This class is used as an inner instance to sort out ICBEvent s that get sent from the
ICBInputFilter . |
private class |
ICBInteractor.MyPinger
Object that gets queued up to do periodic pings. |
| Field Summary | |
private java.util.Vector |
myCommands
|
boolean |
myDebug
whether to spew debugging info or not |
private ICBInteractor.MyICBListener |
myICBListener
internal instance used to sort out ICBEvent s that
get sent to us by the ICBInputFilter . |
private ICBIdentity |
myIdentity
|
private FifoQueue |
myInput
|
private boolean |
myIsDisconnected
|
private java.io.Writer |
myOutput
|
private ICBInteractor.MyPinger |
myPinger
|
private ICBSystem |
mySystem
|
private java.lang.Thread |
myThread
|
private static long |
PING_PERIOD
the period (in msec) between server pings when no other activity is happening |
| Constructor Summary | |
ICBInteractor(ICBSystem system,
Resender input,
java.io.Writer output)
Construct an ICBInteractor. |
| Method Summary | |
private void |
beDisconnected(java.lang.String errorMsg)
This is called when this object wants to let the system know that the connection has been or should be disconnected. |
void |
doLogin(java.lang.String email,
java.lang.String userid,
java.lang.String password,
java.lang.String initialChannel)
Tell the interactor to do a login. |
MessageEvent[] |
doSendGather(char type,
java.lang.String[] params)
Tell the interactor to Send a packet and gather the response as an array of MessageEvents. |
void |
doSendPacket(char type,
java.lang.String[] params)
Tell the interactor to send a packet to the host system. |
private void |
receiveMessage()
This will receive a message from the input and handle it appropriately. |
private MessageEvent |
receiveSystemMessage()
This will receive a message from the input, handling everything appropriately, except for non-speech MessageEvent s,
which it returns without any processing. |
private MessageEvent[] |
sendGather(char type,
java.lang.String[] params)
Send a packet then gather a response from the host. |
private void |
sendPacket(char type,
java.lang.String[] params)
Send a packet of the given type with the given parameter fields (array of strings). |
private void |
threadRun()
This is the main loop of the thread that deals with the connection. |
| Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Field Detail |
private static final long PING_PERIOD
private ICBSystem mySystem
private java.io.Writer myOutput
private ICBIdentity myIdentity
private FifoQueue myInput
private java.util.Vector myCommands
private java.lang.Thread myThread
private boolean myIsDisconnected
private ICBInteractor.MyPinger myPinger
public boolean myDebug
private ICBInteractor.MyICBListener myICBListener
ICBEvent
s that
get sent to us by the ICBInputFilter
.
| Constructor Detail |
public ICBInteractor(ICBSystem system, Resender input, java.io.Writer output)
system
- the system to useinput
- the filtered stream of input from the serveroutput
- the raw output stream| Method Detail |
public void doLogin(java.lang.String email, java.lang.String userid, java.lang.String password, java.lang.String initialChannel)
email
- the email address to useuserid
- the userid to usepassword
- the password to useinitialChannel
- the initial channel to joinpublic void doSendPacket(char type, java.lang.String[] params)
type
- the packet typeparams
- the packet parameterspublic MessageEvent[] doSendGather(char type, java.lang.String[] params)
type
- the packet typeparams
- the packet parameters
private void threadRun()
private void beDisconnected(java.lang.String errorMsg)
errorMsg
- null-ok; if non-null, an error message to report
to the userprivate MessageEvent receiveSystemMessage()
MessageEvent
s,
which it returns without any processing. Handling appropriately
includes adding Runnable
s to the command queue and
telling the system about speech messages. If it receives and handles
a message, it returns null.
private void receiveMessage()
private void sendPacket(char type, java.lang.String[] params)
type
- the type of the packetparams
- the parameters to sendprivate MessageEvent[] sendGather(char type, java.lang.String[] params)
type
- the packet typeparams
- the packet parameters
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |


The PyZmq expert and code requires the OpenTrading Metatrader-Python bridge
https://github.com/OpenTrading/OTMql4Py/
with pyzmq installed in it (see PyZmq).
The Metatrader-Python bridge also requires the OpenTrading Library:
https://github.com/OpenTrading/OTMql4Lib/
For an example expert for using the Python OTMql4Zmq, see TestExpert.
Parent: Home


\title{text}
The \title command declares text to be the title. Use \\ to tell LaTeX where to start a new line in a long title.
A footnote to a title is produced with the \thanks command.
See also Page Styles,
Titlepage Environment
See also \maketitle
Go to LaTeX Table of Contents


kaldi__get_lr_indices_and_weights.Rd
Based on LinearResample::SetIndexesAndWeights where it retrieves the weights for
resampling as well as the indices in which they are valid. LinearResample (LR) means
that the output signal is at linearly spaced intervals (i.e the output signal has a
frequency of new_freq
).
kaldi__get_lr_indices_and_weights( orig_freq, new_freq, output_samples_in_unit, window_width, lowpass_cutoff, lowpass_filter_width, device, dtype )
| orig_freq | (float): The original frequency of the signal |
|---|---|
| new_freq | (float): The desired frequency |
| output_samples_in_unit | (int): The number of output samples in the smallest repeating unit: num_samp_out = new_freq / Gcd (orig_freq, new_freq) |
| window_width | (float): The width of the window which is nonzero |
| lowpass_cutoff | (float): The filter cutoff in Hz. The filter cutoff needs to be less than samp_rate_in_hz/2 and less than samp_rate_out_hz/2. |
| lowpass_filter_width | (int): Controls the sharpness of the filter, more == sharper but less efficient. We suggest around 4 to 10 for normal use. |
| device | (torch_device): Torch device on which output must be generated. |
| dtype | (torch::torch_\<dtype\>): Torch dtype such as torch::torch_float |
Tensor, Tensor): A tuple of min_input_index
(which is the minimum indices
where the window is valid, size (output_samples_in_unit
)) and weights
(which is the weights
which correspond with min_input_index, size (output_samples_in_unit
, max_weight_width
)).
It uses sinc/bandlimited interpolation to upsample/downsample the signal.
The reason why the same filter is not used for multiple convolutions is because the sinc function could sampled at different points in time. For example, suppose a signal is sampled at the timestamps (seconds) 0 16 32 and we want it to be sampled at the timestamps (seconds) 0 5 10 15 20 25 30 35 at the timestamp of 16, the delta timestamps are 16 11 6 1 4 9 14 19 at the timestamp of 32, the delta timestamps are 32 27 22 17 12 8 2 3
As we can see from deltas, the sinc function is sampled at different points of time assuming the center of the sinc function is at 0, 16, and 32 (the deltas [..., 6, 1, 4, ....] for 16 vs [...., 2, 3, ....] for 32)
Example, one case is when the orig_freq
and new_freq
are multiples of each other then
there needs to be one filter.
A windowed filter function (i.e. Hanning * sinc) because the ideal case of sinc function has infinite support (non-zero for all values) so instead it is truncated and multiplied by a window function which gives it less-than-perfect rolloff [1].
[1] Chapter 16: Windowed-Sinc Filters, https://www.dspguide.com/ch16/1.htm


Sets up a brand new Todo list.
(string)
The name of your new to do list.
Takes a model and view and acts as the controller between them
An event to fire on load. Will get all items and display them in the todo-list
Renders all active tasks
Renders all completed tasks
An event to fire whenever you want to add an item. Simply pass in the event object and it'll handle the DOM insertion and saving of the new item.
(any)
Will remove all completed items from the DOM and storage.
Give it an ID of a model and a checkbox and it will update the item in storage based on the checkbox's state.
Will toggle ALL checkboxes' on/off state and completeness of models. Just pass in the event object.
(any)
Updates the pieces of the page which change depending on the remaining number of todos.
Simply updates the filter nav's selected states
(any)
Creates a new Model instance and hooks up the storage.
(object)
A reference to the client side storage class
Finds and returns a model in storage. If no query is given it'll simply return everything. If you pass in a string or number it'll look that up as the ID of the model to find. Lastly, you can pass it an object to match against.
(function?)
The callback to fire after the model is found
model.read(1, func); // Will find the model with an ID of 1
model.read('1'); // Same as above
//Below will find a model with foo equalling bar and hello equalling world.
model.read({ foo: 'bar', hello: 'world' });
Updates a model by giving it an ID, data to update, and a callback to fire when the update is complete.
Returns a count of all todos
(any)
Creates a new client side storage object and will create an empty collection if no collection already exists.
(string)
The name of our DB we want to use
(function)
Our fake DB uses callbacks because in
real life you probably would be making AJAX calls
Finds items based on a query given as a JS object
(object)
The query to match against (i.e. {foo: 'bar'})
(function)
The callback to fire when the query has
completed running
db.find({foo: 'bar', hello: 'world'}, function (data) {
// data will return any items that have foo: bar and
// hello: world in their properties
});
Will save the given data to the DB. If no item exists it will create a new item, otherwise it'll simply update an existing item's properties
Sets up defaults for all the Template methods such as a default template
Creates an
NOTE: In real life you should be using a templating engine such as Mustache or Handlebars, however, this is a vanilla JS example.
(object)
The object containing keys you want to find in the
template to replace.
string
:
HTML String of an
view.show({
id: 1,
title: "Hello World",
completed: 0,
});
View that abstracts away the browser's DOM completely. It has two simple entry points:
(any)


The insurance company has not provide any resolution according to the following rental order. Please contact the insurance company.


Introduction
Hi! My name is Vincent Pranata. I'm an Indonesian student in Melbourne, Australia that currently is studying Computer Science as undergraduate in RMIT University. I'm currently in my final semester and is currently looking for an internship/ job for a Web-Designer, Data-Analyst or Front-End Developer position. Feel free to look at my social medias and my resume below.


When I was nine years old,
I went off to summer camp for the first time.
And my mother packed me a suitcase full of books,
which to me seemed like a perfectly natural thing to do.
Because in my family, reading was the primary group activity.
And this might sound antisocial to you,
but for us it was really just a different way of being social.
You have the animal warmth of your family sitting right next to you,
but you are also free to go roaming around the adventureland
inside your own mind.
And I had this idea
that camp was going to be just like this, but better.
(Laughter)
I had a vision of 10 girls sitting in a cabin
cozily reading books in their matching nightgowns.
(Laughter)
Camp was more like a keg party without any alcohol.
And on the very first day,
our counselor gathered us all together
and she taught us a cheer that she said we would be doing
every day for the rest of the summer to instill camp spirit.
And it went like this:
"R-O-W-D-I-E,
that's the way we spell rowdie.
Rowdie, rowdie, let's get rowdie."
(Laughter)
Yeah.
So I couldn't figure out for the life of me
why we were supposed to be so rowdy,
or why we had to spell this word incorrectly.
(Laughter)
But I recited a cheer. I recited a cheer along with everybody else.
I did my best.
And I just waited for the time that I could go off and read my books.
But the first time that I took my book out of my suitcase,
the coolest girl in the bunk came up to me
and she asked me, "Why are you being so mellow?" --
mellow, of course, being the exact opposite
of R-O-W-D-I-E.
And then the second time I tried it,
the counselor came up to me with a concerned expression on her face
and she repeated the point about camp spirit
and said we should all work very hard to be outgoing.
And so I put my books away,
back in their suitcase,
and I put them under my bed,
and there they stayed for the rest of the summer.
And I felt kind of guilty about this.
I felt as if the books needed me somehow,
and they were calling out to me and I was forsaking them.
But I did forsake them and I didn't open that suitcase again
until I was back home with my family at the end of the summer.
Now, I tell you this story about summer camp.
I could have told you 50 others just like it --
all the times that I got the message
that somehow my quiet and introverted style of being
was not necessarily the right way to go,
that I should be trying to pass as more of an extrovert.
And I always sensed deep down that this was wrong
and that introverts were pretty excellent just as they were.
But for years I denied this intuition,
and so I became a Wall Street lawyer, of all things,
instead of the writer that I had always longed to be --
partly because I needed to prove to myself that I could be bold and assertive too.

And I made these self-negating choices so reflexively,
that I wasn't even aware that I was making them.
Now this is what many introverts do,
and it's our loss for sure,
but it is also our colleagues' loss
and our communities' loss.
And at the risk of sounding grandiose, it is the world's loss.
Because when it comes to creativity and to leadership,
we need introverts doing what they do best.
A third to a half of the population are introverts --
a third to a half.
So that's one out of every two or three people you know.
So even if you're an extrovert yourself,
I'm talking about your coworkers
and your spouses and your children
and the person sitting next to you right now --
all of them subject to this bias
that is pretty deep and real in our society.
We all internalize it from a very early age
without even having a language for what we're doing.
Now, to see the bias clearly,
you need to understand what introversion is.
It's different from being shy.
Shyness is about fear of social judgment.
Introversion is more about,
how do you respond to stimulation,
including social stimulation.
So extroverts really crave large amounts of stimulation,
whereas introverts feel at their most alive
and their most switched-on and their most capable
when they're in quieter, more low-key environments.
Not all the time -- these things aren't absolute --
but a lot of the time.
So the key then to maximizing our talents
is for us all to put ourselves
in the zone of stimulation that is right for us.
But now here's where the bias comes in.
Our most important institutions,
our schools and our workplaces,
they are designed mostly for extroverts
and for extroverts' need for lots of stimulation.
And also we have this belief system right now
that I call the new groupthink,
which holds that all creativity and all productivity
comes from a very oddly gregarious place.
So if you picture the typical classroom nowadays:
When I was going to school, we sat in rows.
We sat in rows of desks like this,
and we did most of our work pretty autonomously.
But nowadays, your typical classroom has pods of desks --
four or five or six or seven kids all facing each other.
And kids are working in countless group assignments.
Even in subjects like math and creative writing,
which you think would depend on solo flights of thought,
kids are now expected to act as committee members.
And for the kids who prefer to go off by themselves or just to work alone,
those kids are seen as outliers often
or, worse, as problem cases.
And the vast majority of teachers
reports believing that the ideal student is an extrovert
as opposed to an introvert,
even though introverts actually get better grades
and are more knowledgeable,
according to research.
(Laughter)
Okay, same thing is true in our workplaces.
Now, most of us work in open plan offices,
without walls,
where we are subject to the constant noise and gaze of our coworkers.
And when it comes to leadership,
introverts are routinely passed over for leadership positions,
even though introverts tend to be very careful,
much less likely to take outsize risks --
which is something we might all favor nowadays.
And interesting research by Adam Grant at the Wharton School
has found that introverted leaders
often deliver better outcomes than extroverts do,
because when they are managing proactive employees,
they're much more likely to let those employees run with their ideas,
whereas an extrovert can, quite unwittingly,
get so excited about things
that they're putting their own stamp on things,
and other people's ideas might not as easily then bubble up to the surface.
Now in fact, some of our transformative leaders in history have been introverts.
I'll give you some examples.
Eleanor Roosevelt, Rosa Parks, Gandhi --
all these peopled described themselves as quiet and soft-spoken and even shy.
And they all took the spotlight,
even though every bone in their bodies was telling them not to.
And this turns out to have a special power all its own,
because people could feel that these leaders were at the helm
not because they enjoyed directing others
and not out of the pleasure of being looked at;
they were there because they had no choice,
because they were driven to do what they thought was right.
Now I think at this point it's important for me to say
that I actually love extroverts.
I always like to say some of my best friends are extroverts,
including my beloved husband.
And we all fall at different points, of course,
along the introvert/extrovert spectrum.
Even Carl Jung, the psychologist who first popularized these terms,
said that there's no such thing as a pure introvert
or a pure extrovert.
He said that such a man would be in a lunatic asylum,
if he existed at all.
And some people fall smack in the middle of the introvert/extrovert spectrum,
and we call these people ambiverts.
And I often think that they have the best of all worlds.
But many of us do recognize ourselves as one type or the other.
And what I'm saying is that culturally, we need a much better balance.
We need more of a yin and yang between these two types.
This is especially important
when it comes to creativity and to productivity,
because when psychologists look at the lives of the most creative people,
what they find
are people who are very good at exchanging ideas
and advancing ideas,
but who also have a serious streak of introversion in them.
And this is because solitude
is a crucial ingredient often to creativity.
So Darwin,
he took long walks alone in the woods
and emphatically turned down dinner-party invitations.
Theodor Geisel, better known as Dr. Seuss,
he dreamed up many of his amazing creations
in a lonely bell tower office that he had
in the back of his house in La Jolla, California.
And he was actually afraid to meet the young children who read his books
for fear that they were expecting him this kind of jolly Santa Claus-like figure
and would be disappointed with his more reserved persona.
Steve Wozniak invented the first Apple computer
sitting alone in his cubicle in Hewlett-Packard
where he was working at the time.
And he says that he never would have become such an expert in the first place
had he not been too introverted to leave the house
when he was growing up.
Now, of course,
this does not mean that we should all stop collaborating --
and case in point, is Steve Wozniak famously coming together with Steve Jobs
to start Apple Computer --
but it does mean that solitude matters
and that for some people it is the air that they breathe.
And in fact, we have known for centuries about the transcendent power of solitude.
It's only recently that we've strangely begun to forget it.
If you look at most of the world's major religions,
you will find seekers --
Moses, Jesus, Buddha, Muhammad --
seekers who are going off by themselves alone to the wilderness,
where they then have profound epiphanies and revelations
that they then bring back to the rest of the community.
So, no wilderness, no revelations.
This is no surprise, though,
if you look at the insights of contemporary psychology.
It turns out that we can't even be in a group of people
without instinctively mirroring, mimicking their opinions.
Even about seemingly personal and visceral things
like who you're attracted to,
you will start aping the beliefs of the people around you
without even realizing that that's what you're doing.
And groups famously follow the opinions
of the most dominant or charismatic person in the room,
even though there's zero correlation
between being the best talker and having the best ideas --
I mean zero.
So --
(Laughter)
You might be following the person with the best ideas,
but you might not.
And do you really want to leave it up to chance?
Much better for everybody to go off by themselves,
generate their own ideas
freed from the distortions of group dynamics,
and then come together as a team
to talk them through in a well-managed environment
and take it from there.
Now if all this is true,
then why are we getting it so wrong?
Why are we setting up our schools this way, and our workplaces?
And why are we making these introverts feel so guilty
about wanting to just go off by themselves some of the time?
One answer lies deep in our cultural history.
Western societies,
and in particular the U.S.,
have always favored the man of action over the "man" of contemplation.
But in America's early days,
we lived in what historians call a culture of character,
where we still, at that point, valued people
for their inner selves and their moral rectitude.
And if you look at the self-help books from this era,
they all had titles with things like
"Character, the Grandest Thing in the World."
And they featured role models like Abraham Lincoln,
who was praised for being modest and unassuming.
Ralph Waldo Emerson called him
"A man who does not offend by superiority."
But then we hit the 20th century,
and we entered a new culture
that historians call the culture of personality.
What happened is we had evolved an agricultural economy
to a world of big business.
And so suddenly people are moving from small towns to the cities.
And instead of working alongside people they've known all their lives,
now they are having to prove themselves in a crowd of strangers.
So, quite understandably,
qualities like magnetism and charisma suddenly come to seem really important.
And sure enough, the self-help books change to meet these new needs
and they start to have names
like "How to Win Friends and Influence People."
And they feature as their role models really great salesmen.
So that's the world we're living in today.
That's our cultural inheritance.
Now none of this is to say that social skills are unimportant,
and I'm also not calling for the abolishing of teamwork at all.
The same religions who send their sages off to lonely mountain tops
also teach us love and trust.
And the problems that we are facing today
in fields like science and in economics
are so vast and so complex
that we are going to need armies of people coming together
to solve them working together.
But I am saying that the more freedom that we give introverts to be themselves,
the more likely that they are
to come up with their own unique solutions to these problems.
So now I'd like to share with you what's in my suitcase today.
Guess what?
Books.
I have a suitcase full of books.
Here's Margaret Atwood, "Cat's Eye."
Here's a novel by Milan Kundera.
And here's "The Guide for the Perplexed" by Maimonides.
But these are not exactly my books.
I brought these books with me
because they were written by my grandfather's favorite authors.
My grandfather was a rabbi
and he was a widower
who lived alone in a small apartment in Brooklyn
that was my favorite place in the world when I was growing up,
partly because it was filled with his very gentle, very courtly presence
and partly because it was filled with books.
I mean literally every table, every chair in this apartment
had yielded its original function
to now serve as a surface for swaying stacks of books.
Just like the rest of my family,
my grandfather's favorite thing to do in the whole world was to read.
But he also loved his congregation,
and you could feel this love in the sermons that he gave
every week for the 62 years that he was a rabbi.
He would takes the fruits of each week's reading
and he would weave
these intricate tapestries of ancient and humanist thought.
And people would come from all over to hear him speak.
But here's the thing about my grandfather.
Underneath this ceremonial role,
he was really modest and really introverted --
so much so that when he delivered these sermons,
he had trouble making eye contact
with the very same congregation that he had been speaking to for 62 years.
And even away from the podium,
when you called him to say hello,
he would often end the conversation prematurely
for fear that he was taking up too much of your time.
But when he died at the age of 94,
the police had to close down the streets of his neighborhood
to accommodate the crowd of people who came out to mourn him.
And so these days I try to learn from my grandfather's example
in my own way.
So I just published a book about introversion,
and it took me about seven years to write.
And for me, that seven years was like total bliss,
because I was reading, I was writing,
I was thinking, I was researching.
It was my version
of my grandfather's hours of the day alone in his library.
But now all of a sudden my job is very different,
and my job is to be out here talking about it,
talking about introversion.
(Laughter)
And that's a lot harder for me,
because as honored as I am to be here with all of you right now,
this is not my natural milieu.
So I prepared for moments like these as best I could.
I spent the last year practicing public speaking
every chance I could get.
And I call this my "year of speaking dangerously."
(Laughter)
And that actually helped a lot.
But I'll tell you, what helps even more
is my sense, my belief, my hope that when it comes to our attitudes
to introversion and to quiet and to solitude,
we truly are poised on the brink on dramatic change.
I mean, we are.
And so I am going to leave you now
with three calls for action for those who share this vision.
Number one:
Stop the madness for constant group work.
Just stop it.
(Laughter)
Thank you.
(Applause)
And I want to be clear about what I'm saying,
because I deeply believe our offices
should be encouraging casual, chatty cafe-style types of interactions --
you know, the kind where people come together
and serendipitously have an exchange of ideas.
That is great.
It's great for introverts and it's great for extroverts.
But we need much more privacy and much more freedom
and much more autonomy at work.
School, same thing.
We need to be teaching kids to work together, for sure,
but we also need to be teaching them how to work on their own.
This is especially important for extroverted children too.
They need to work on their own
because that is where deep thought comes from in part.
Okay, number two: Go to the wilderness.
Be like Buddha, have your own revelations.
I'm not saying
that we all have to now go off and build our own cabins in the woods
and never talk to each other again,
but I am saying that we could all stand to unplug
and get inside our own heads a little more often.
Number three:
Take a good look at what's inside your own suitcase
and why you put it there.
So extroverts,
maybe your suitcases are also full of books.

Whatever it is, I hope you take these things out every chance you get
and grace us with your energy and your joy.

And that's okay.
But occasionally, just occasionally,
I hope you will open up your suitcases for other people to see,
because the world needs you and it needs the things you carry.
So I wish you the best of all possible journeys
and the courage to speak softly.
Thank you very much.
(Applause)
Thank you. Thank you.
(Applause)


At Texas Deep Net, we strive to help students find research opportunities: research groups will work with other organizations and present their findings to the general members.
UTCS: AI Research
FRI: Autonomous Robots
FRI: Robot Learning
All FRI Streams
UT General Research Opportunities


The Insufficiency of the Right (and, therefore, of the Left?)
Insufficiency regarding what? It could be related to many aspects, however, this discussion will be restricted to a criterion that usually benefits nations broadly: economic growth. There will be no fooling ourselves, though, that economic growth automatically grants us with absolute progress and happiness, nonetheless, it can be observed that it correlates considerably well with better living standards.
To alter the direction of the economy, both the Right and the Left have numerous mechanisms, but the essence orbits around the fundamental question of wealth distribution. The Left defends, almost always, an explicit and forced redistribution of income, which manifests itself, also almost always, through government programs; while the Right defends the opposite, an absence of such programs, equipping themselves with the argument that the economy would have self-regulation mechanisms embedded, and artificial controls would cause malfunction and inefficient behavior. This liberalist rhetoric has its roots in the works of important philosophers and economists such as Adam Smith and Friedrich Hayek, but would a free market really be the best path for the economy?
What has been seen throughout the last 40 years is a no – the philosophers of the past oversimplified reality; just as we abandoned the erroneous ideas about physics of the ancient Greeks, we should do the same with those of the more recent philosophers also. The two main evidences which attest these excessive simplifications are two extremely important statistics: the world’s GDP growth; and wealth concentration (which is deeply correlated with income inequality, the more common statistic).
According to the graph provided by The World Bank, it is possible to conclude that neoliberal policies widely implemented since the 1970s — facilitated by and together with globalization — have completely failed to maintain or increase the world’s economic growth — with an honorable mention to the only negative point of the graph, thanks to the close to effectively inexistent stock market regulation in the USA (and in the world generally) a bit before 2008.
The second statistic is, nonetheless, more relevant and frightening. As reported by the World Economic Forum — since 2015 — the planet has reached the impressive record of at least 99% of the world’s wealth being concentrated henceforth in the hands of only 1% of the population, with the tiniest detail: half of humankind will own less than 0.7%. But, although this statistic is indeed something negative, what would be its relationship with the whole economy? In a simple explanation, this disparity in the distribution ends up by drastically shrinking the global consumer market, in other words, without buying and selling, capitalism does not work.
These last data set the grounds for the reasoning behind the graph that synthesizes the insufficiency of the Left and the Right as economic guidelines: economic growth vs social inequality. Its construction has taken a long time to be accepted by the economists, nevertheless, its logic is very easy to understand.
First, imagine a society in which all the income is concentrated in the
hands of a few — a scenario analogous to the medieval age —,
it is then not so difficult to realize that economic growth would be
close to zero, after all there is no buy-and-sell mechanism. Now, let us
focus on the other end of the graph, where economic equality is complete
and absolute: intuitively, there would also not be much economic
advance, after all, the absence of meritocracy would not reward the
above the average effort of any individual — note that, in this
hypothesis, there would still be growth: as long as there are people who
like what they do, there is no absolute need for extra
benefits
As we implement meritocracy on both extremes, be it by rewarding more
even or unevenly, the buy-and-sell mechanism is reactivated, and, thus,
economic growth gets a boost. Logically, as there are almost zeros on
both sides and we know that economic growth can be bigger than zero,
this implies that, somewhere in the middle, there is at least one peak
or optimum. The doubt about the uniqueness of this point of maximum has
not yet been resolved by the scientific community, still, there is
already an overwhelming amount of clues indicating it is indeed unique.
Many studies, models and statistics reveal that incrementing the income
of the wealthier part of the population ends up diminishing the pace of
the economy (a 1% increase of the income of the top 20%, reduces growth
by at least 0.08% in 5 years, according to the International Monetary
Fund
After establishing the graph’s shape — an inverted “U” or a
parabola with a downward concavity —, we can at last discuss the
problematic dichotomy of the Right and Left. Both sides err because they
do not optimize economic growth — advocating, in reality, zeros as
ideals —, be it by the absence of meritocracy or by an indirectly
verified extreme wealth concentration. However, given the reality, the
mistake of the Right is harder to forgive: to defend (neo)liberalism
after consciously knowing the aforementioned statistics is nothing less
than promoting poverty and strengthening even more the power of the
rich
So, how can we change the economic prognosis to something healthier?
Briefly, the primordial is the focus on the more pragmatic, an ideology
which would prime for efficiency and not for the Left or the Right,
i.e., if one day we happen to be closer to the leftmost extreme of the
graph (and to the left of the optimal point): that even the supposedly
leftists advocate for less income redistribution! There is no more room
to accept incomplete or flagrantly wrong theories, formulated in an era
when there were not enough data to assuredly prove them


New article about pyHDB tool!
On the last day of 2022, the new issue of the História da Historiografia journal came out with an article of mine called “pyHDB - Ferramenta Heurística para a Hemeroteca Digital Brasileira: utilizando técnicas de web scraping para a pesquisa em História”.
It is my darling!
In the article, I present pyHDB, a methodological support tool for research in the Brazilian Digital Newspaper Library, of the National Library. I analyze its relationship with the theory, methodology, and epistemology of history, focusing on the selection, collection, organization, and criticism of sources.
pyHDB is a command-line program written in Python that generates reports, spreadsheets, and data sets from the results of the Brazilian Digital Newspaper Library. The Local, Period, and Term parameters of the search are defined by the user:
Then, pyHDB searches and beggins to gather and organize the data.
The parameters, time and date of the search, results, number of occurrences, number of pages of each collection, frequency of occurrences per page, information of each occurrence, error reports, and the download of the image when legally allowed are recorded.
Here is an example of the data collected and organized by pyHDB in a .csv file:
This is the directory structure created by pyHDB:
And the downloaded images:
One of the examples used in the article was Monteiro Lopes. The data confirms the intense debate around the elections of the black lawyer in 1903 for the municipal council of Rio de Janeiro and in 1909 as a federal deputy.
To top it all off, Pedro Silveira’s amazing ad hoc review on the article was also published in the issue. It is not just a reading of my article but a sophisticated reflection on historiographical practice in the digital age.
I thank the members of LabhdUfba, especially Gabriel Andrade, for the tips and help with Python, and its coordinator, Leonardo F. Nascimento, for the partnership, reading, and for suggesting the name pyHDB. I thank Yaci Farias and Luara Santos for reading and comments during the writing of the article. I thank Ana Carolina Veloso and Priscila Valverde Silveira for the work as undergraduate students between 2020 and 2021 at History course of the UNILAB, Bahia. I would like to acknowledge Alexandra Elbakyan, the creator of Sci-Hub, for her struggle for the open science. I thank the members of the editorial board of the journal for the support and the anonymous reviewers for the valuable suggestions.
All documentation is available on the pyHDB page.
Data set used in the article: https://doi.org/10.5281/zenodo.5699000
Interactive graphs, images, and scripts: https://ericbrasiln.github.io/analise_pyHDB/
If you have any questions, please contact me or open an issue on Github.


Please turn your phone vertical.
Check the source code at:
close
play_arrow
Ready
to play
volume_off
volume_up
volume_up
00:00
search
Search Results
Featured Tracks


This report documents my experience with the drug DOI. I have consumed the drug several times now, at least enough times to not remember how many times exactly.
The drug is said to be similar to LSD, the worlds standard in hallucinogenic drugs, although is reported to have a heavier 'body weight', which I think means that I can feel the presence of my body and internal organs and can feel my bodies weight more then on other substances. I have consumed the drug in blotter paper form and noticed the same effects as I've read described online in my own personalised way. I'm going to describe what the drug does to me and how I ingest it, which mean's I wont be describing a specific trip.
I prefer to take the drug early in the morning so that I can enjoy the early morning and the next night until early hours the next day. Yes. The 2mg dosage (in my case a single 'square' chewed up and swallowed) causes a wonderfully long trip (20-30 hours) that comes in waves that diminish in size over time. So, I would typically set my alarm to about 3AM the day before I want to trip, have an early night and force myself to wake at the ridiculously early hour of the morning to ingest a tab. I would then get stoned and wait for about 2-5 hours for the drugs effects to be noticeable. I can also go back to sleep expecting to wake up, or set my alarm to wake me up when the drug is peaking, so from being unconscious I wake to a world and not as I know it - actually highly entertaining and scary but certainly fun.
The first things I notice, after about 2 hours if I didn't go to sleep, are my thought loops becoming shorter, access to memory and stored information and other thinking facilities diminished, almost as though my memory centres have been shutdown slightly - this feels like I am floating through space. Although my capacity to remember things and to recall them is diminished, I will still find the trip memorable and will still say, do and think things using different parts of my brain that I didn't know existed while on the drug. I find that the hallucinations don't start until about 5 hours into the trip or not at all, but that the drug is an amazing visionary aid.  Mainly I will just feel as though I am out of my body, observing the world in a new way.
The next thing I will notice is my insides accompanied by feelings of nausea. I find this side-effect a little disturbing, I can feel my intestines churning and my heart seems to be being pinched in my chest. I would say this drug causes some changes to happen in digestion, a slightly diminished appetite and possibly causes my heart to be overworked or my blood to be thickened. I'm not an expert at all on how this drug works but it effects my brain which in turn effects my body. The higher the dosage the harder it is to control my body, I may urinate myself or defecate unexpectedly, although often a fear of this happening can ruin my trip, so if at all possible try to regulate my dosage so that I can still control I body and not have to worry about unexpected leaks. Learn to use the toilet while on the drug because it can be difficult, I may experience an unwillingness to urinate while standing over or sitting on the toilet bowl.
The trip seems to cause visual hallucinations although mainly when I am trying to make them happen - this is good because it puts me in control - although bad if I want to be hallucinating properly. This drug is supposed to be hallucinogenic but I don't find it particularly such, although I think the feelings inside my body are a kind of hallucination, so I can experience discomfort and pain, maybe even difficulty with breathing but it is merely a misinterpretation of my senses particularly the ones I typically don't notice, always tell myself to be calm and try to relax, don't start clawing at my chest. The first time I took the drug I ended up with an extremely painful rash on and around my left nipple, which totally ruined the last part of the trip since the pain was sort of magnified and caused me to claw even more urgently at the effected area.
The drugs effects seem to be broken up into uneven waves, they may come every 10-40 minutes in varying degrees of intensity. The waves will cause me to breath in audibly and I will probably go 'whew!' or 'wow!' every time this happens because it is an intense feeling, a feeling of nausea (which may actually cause I to vomit at higher dosages) and anxiety and hopefully accompanied by pleasant, euphoric feelings, or hallucinations.
After about 7 hours the effects will be noticeably more intense or starting to diminish. The waves will be different and mainly less intense. Once I start feeling bored, if that happens, if I don't start to get sick of the feeling and wanting to come back from the trip, I smoke some weed. The trip will become almost psychotic in nature. My thoughts will spiral out of control, closed-eyed hallucination and visual static will be prevalent and the waves will be accompanied by weed hallucinations, wonderful and horrible.
After the 12 hour mark I can expect the trip to continue for another 10 or more hours and probably I can sleep the rest of the trip off. As with other synthetic amphetamines I will find it hard to sleep, as much as my body seems to crave it. Try to clear my head and try to feel hypnotised, I lay as still as possible since the DOI will be trying to make me writhe around in my bed which will keep me awake. When I do finally sleep I may have some interesting dreams or merely wake up the next day or in a few hours feeling that the drug has worn off. I think that sleep deprivation intensifies the drugs effects and once I sleep that turns off most of the drugs effects, or turns my brain back round to normal. I'm not sure how it works but that is what I've found.
I try to stay awake for the whole trip, using weed to make it more interesting. I haven't experimented with higher doses yet since I don't want to lose to much control of my body and end up urinating myself or worse.
In conclusion I would say this drug is very interesting, I like the way it comes in waves and the fact that weed can be used to intensify both the weeds effects and the DOI's but it is possibly a very dangerous drug so be careful.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


This website has been developed as part of the master's thesis "Refinement and Extension of the Cloud Decision Support Framework for Application Migration to the Cloud" written by Balduin Metz at the Institute of Architecture of Application Systems at the University of Stuttgart, Germany.
CloudDSF+ therefore represents a refinement and extension of the previously developed Cloud Decision Support Framework (CloudDSF). The underlying concept of CloudDSF as well as CloudDSF+ has been envisioned and developed by Andrikopoulos et al.
CloudDSF+ comprises ten tasks and four main decision points which subsume 16 decisions which in turn subsume multiple outcomes. The decisions as well as outcomes are strongly interconnected among each other and form a dense network of relationships. The tasks and decision points are briefly described in the following to foster a common understanding.


UK's Raab: not 'remotely likely' Britain leaves EU without trade deal
by ReutersLONDON — Foreign minister Dominic Raab said on Sunday it was not “remotely likely” that Britain would leave the European Union without agreeing a free trade deal at the end of a post-Brexit transition period.
The governing Conservatives, who are hoping to win a majority in parliament at a Dec. 12 election to push through the Brexit deal Prime Minister Boris Johnson agreed with Brussels, have said they will not extend the transition period.
Asked by BBC TV if Britain could leave without a deal, Raab said: “No … I don’t think it’s remotely likely.” (Reporting by Kylie MacLellan, editing by Louise Heavens)


Blackface apologises to fans and supporters as he drags colleague 2baba to court over song theft
- Singer Blackface has dragged his colleague 2baba to court over alleged song theft
- The ex-Plantashun Boiz member shared the news in a lengthy post on social media
- Blackface also pointed out that the protracted issue between him and his colleague is strictly professional
Nigerian music star and ex-member of defunct music group Plantashun Boiz, Blackface, has come out to share the news of the latest development in his protracted rift with colleague 2baba Idibia.
In a lengthy post shared on his official Instagram page, Blackface apologised to his supporters and other concerned parties that have been offended by his actions and inactions in the course of the years.
"I sincerely want to apologize to close friends, relatives, well wishers who may have been affected by my actions or inactions over the years," he said.
The musician disclosed that after waiting for so long to take actions, he and his legal team have finally decided to file a case against 2baba.
Weeks after sudden disappearance, embattled Mompha's Instagram account becomes reactivated
PAY ATTENTION: Read best news on Nigeria's #1 news app
“I will never be intimidated by any threat My intention has never been to expose anybody but the truth finds it's way out eventually.
"My issues with Mr Innocent Idibia aka 2face & co are purely professional and my lawyers have filed my claims in Court, to be served to all parties in due time.
"I apologize for the delay in taking this step, i was hoping they would do the right thing and the need for me to take them to court will not arise but alas I was wrong,” the message read in part.
PAY ATTENTION: Get your daily relationship tips and advice on Africa Love Aid group
Blackface also mentioned that he would be in court on November 25th for mediation on the N50 million suit filed against him by 2baba’s team.
Read the full post below:
PAY ATTENTION: NAIJ.com upgrades to Legit.ng: a letter from our Editor-in-Chief Bayo Olupohunda
The rift between the two had started when Blackface claimed that he was not credited for his efforts on African Queen.
In September 2019, Legit.ng reported that the aggrieved singer announced the release of his own version of the song. Blackface disclosed that he removed a part of the lyrical composition that was written by 2baba, in his own version of the record.
NAIJ.com (naija.ng) -> Legit.ng We have upgraded to serve you better
EXCLUSIVE: I’m sorry I disappointed Nigerians - 2baba speaks on withdrawal from protests | Legit TV


---
layout: post
title: PWM (pic18f4550)
date: '2010-03-08T01:58:00.000-05:00'
author: Mahyar
tags:
- PIC
modified_time: '2010-03-08T02:02:29.446-05:00'
blogger_id: tag:blogger.com,1999:blog-727803219276813688.post-1801640498981958490
blogger_orig_url: http://www.etedal.net/2010/03/pwm-pic18f4550.html
---
to use pwm here is the ccs code:
#include <18f4550.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock = 20000000)
void main() {
setup_ccp1(ccp_pwm); // Select timer and mode
set_pwm1_duty(25); // Set on time
setup_timer_2(T2_DIV_BY_16,248,1); // Clock rate & output period
while(1) { } // Wait until reset
}
pin17 ---> pwm output
+ everything was mentioned in previous posts in order to run a 18f pic.


metadata |
|
Slug | OP1 |
Date | 4/20/2023 |
Hed | The Winds of Change |
Description | Something is in the air tonight… |
Byline | The Scorpions |
Budget |
|
A CIA op becomes an unexpected smash hit. |
|
Lede image |
|
| |
Lede image credit | Teenage Engineering |
Lede image description | Synthesizer |
My name is Carl Johnson.
This is my test document.
html |
<script src="http://example.com/"></script>
|
photo |
|
| |
credit |
|
CarlCo |
|
description |
|
Blah blah blah. |
|
caption |
|
Here is a caption |
|


public interface MetaBean
This interface can be thought of as the equivalent of Class
but for beans.
In most cases the meta-bean will be code generated and the concrete class will have additional methods.
| Modifier and Type | Method and Description |
|---|---|
String |
beanName()
Gets the bean name, which is normally the fully qualified class name of the bean.
|
Class<? extends Bean> |
beanType()
Get the type of the bean, represented as a
Class . |
BeanBuilder<? extends Bean> |
builder()
Creates a bean builder that can be used to create an instance of this bean.
|
PropertyMap |
createPropertyMap(Bean bean)
Creates a map of properties for the specified bean.
|
<R> MetaProperty<R> |
metaProperty(String propertyName)
Gets a meta-property by name.
|
int |
metaPropertyCount()
Counts the number of properties.
|
boolean |
metaPropertyExists(String propertyName)
Checks if a property exists.
|
Iterable<MetaProperty<?>> |
metaPropertyIterable()
Gets an iterator of meta-properties.
|
Map<String,MetaProperty<?>> |
metaPropertyMap()
Gets the map of meta-properties, keyed by property name.
|
BeanBuilder<? extends Bean> builder()
The builder is used in two main ways. The first is to allow immutable beans to be constructed. The second is to enable automated tools like serialization/deserialization.
The builder can be thought of as a Map
of MetaProperty
to value.
Note that the implementation is not necessarily an actual map.
UnsupportedOperationException
- if the bean cannot be createdPropertyMap createPropertyMap(Bean bean)
This allows the entire set of properties of the bean to be exposed as a Map
.
The map is keyed by the property name and has Property
instances as values.
Call PropertyMap.flatten()
to convert the map to hold the actual values from the bean.
bean
- the bean to create the map for, not nullString beanName()
This is primarily used for human-readable output.
Class<? extends Bean> beanType()
Class
.
A MetaBean
can be thought of as the equivalent of Class
but for beans.
This method allows the actual Class
instance of the bean to be obtained.
int metaPropertyCount()
Each meta-bean manages a single bean with a known set of properties. This method returns the count of properties.
boolean metaPropertyExists(String propertyName)
Each meta-bean manages a single bean with a known set of properties. This method checks whether there is a property with the specified name.
propertyName
- the property name to check, null returns false<R> MetaProperty<R> metaProperty(String propertyName)
Each meta-bean manages a single bean with a known set of properties. This method returns the property with the specified name.
The base interface throws an exception if the name is not recognised.
By contrast, the DynamicMetaBean
subinterface creates the property on demand.
R
- the property type, optional, enabling auto-castingpropertyName
- the property name to retrieve, not nullNoSuchElementException
- if the property name is invalidIterable<MetaProperty<?>> metaPropertyIterable()
This method returns an Iterable
, which is simpler than a Map
.
As a result, implementations may be able to optimise, and so this method should be
preferred to metaPropertyMap()
where a choice is possible.
Map<String,MetaProperty<?>> metaPropertyMap()
Where possible, use metaPropertyIterable()
instead as it typically has better performance.
Copyright © 2007–2015 Joda.org. All rights reserved.


Join Us
We welcome anyone who has the desire to do something meaningful for society. You are only a click away from joining our journey as we stand on the Shoulders of Giants, making the world better, one step at a time.