jefframnani + software   215

inessential: Why Create a Frontier-Inspired Scripting App?
Some technical details on the original Frontier programming environment and what it was like to use it.
frontier  software  history  database 
2 days ago by jefframnani
Long-Lived macOS

The Mac has a vast array of hidden menus, useful keyboard shortcuts, and forgotten features; there are so many it would be absurd to try to cover them all in this piece. The reason these are forgotten, hidden, and yet still useful is simple: there are so many things that it’s easy to forget all but the most basic ones. If it’s not widely used, a feature can quickly be forgotten — “fossilize,” as it were.
macos  history  software  os  evolution 
16 days ago by jefframnani
Software Design Decoded | The MIT Press
What makes an expert software designer? It is more than experience or innate ability. Expert software designers have specific habits, learned practices, and observed principles that they apply deliberately during their design work. This book offers sixty-six insights, distilled from years of studying experts at work, that capture what successful software designers actually do to create great software.
book  software  design  architecture  programming  patterns 
17 days ago by jefframnani
Upgrading GitHub from Rails 3.2 to 5.2
File under: software evolution. The incremental, gradual approach is the winning strategy.

This post has some good advice on how to approach work like this.

Each time we got a minor version of Rails green we’d make the CI job required for all pushes to the GitHub application and start work on the next version. While we worked on Rails 4.1 a CI job would run on every push for 3.2 and 4.0. When 4.1 was green we’d swap out 4.1 for 4.0 and get to work on 4.2. This allowed us to prevent regressions once a version of Rails was green, and time for engineers to get used to writing code that worked in multiple versions of Rails.

Why did it take over a year to upgrade?

Another reason is the GitHub codebase is 10 years old. Over the years technical debt builds and there’s bound to be gremlins lurking in the codebase. If you’re on an old version of Rails, your engineers will need to add more monkey patches or implement features that exist upstream.

How should you resource a big change like this?

Lastly, when we started it wasn’t clear what resources were needed to support the upgrade and since most of us had never done a Rails upgrade before, we were learning as we went. The project originally began with 1 full-time engineer and a small army of volunteers. We grew that team to 4 full-time engineers plus the volunteers. Each version bump meant we learned more and the next version went even faster.
github  software  evolution  programming 
21 days ago by jefframnani
Marzipan - Benjamin Mayo

Functionally, they are a win. These apps make the Mac do things it couldn’t before. That shouldn’t excuse them from blame, though. These are mediocre, bordering on bad, experiences. It’s not a good poster child for the future of the Mac. The Mac — heck Apple as a whole — is about delighting users with good-to-great experiences. What drew me to Apple was never how many bullet points they checked off the feature list.
macos  marzipan  apple  software  quality 
22 days ago by jefframnani
inessential: Why NetNewsWire 5 Doesn’t Support Nested Folders
A treatise on trading quality over complexity.

On adding new features like nested folders.

Over the years I’ve learned that these kinds of things often detract from an app. Every decision is a moment of anxiety for the user. The user wonders: is this the right call? Did I consider all the issues? Can I change it later?

And the user may be motivated to come back and re-do those decisions.

I don’t want my software to do that to you.

On the trade off between quality and complexity.

My plan is to never release a shipping version that has any such defects. I believe that’s a feature in itself.

But that’s much more easily done with a simpler app. Every added feature adds to the combinatorial complexity of the app, and the app becomes harder to test and harder to get right.

My commitment to zero defects outweighs my commitment to adding features.
software  quality  rss  programming  configuration 
5 weeks ago by jefframnani
> The first tempting option is to just abandon this ruined planet and settle a n... | Hacker News
File under: First mover disadvantage and software evolution.

An engineer on Google who’s working to integrate TypeScript at Google on how to improve a large JavaScript code base.
software  evolution  hn  javascript  typescript 
6 weeks ago by jefframnani
Tech Notes: TypeScript at Google
File under: First Mover Disadvantage. Google was an early innovator in JavaScript. But while similar innovations happened in JavaScript in subsequent years, Google has too much legacy code to switch to the newer tools.

Google uses none of this. Experienced webdevs show up at Google and it's like visiting an alternative timeline. There's a CSS preprocessing language like SASS but it's not SASS and nobody likes it. The fancy chunk-splitter doesn't really support third-party JavaScript libraries in part because the tools predate the existence of a JavaScript library ecosystem.

The first option is to rewrite it all.

The first tempting option is to just abandon this ruined planet and settle a new one that doesn't even involve JavaScript. If only we invested more in GWT (a Google project that compiles Java to JavaScript) or Dart (a Google project that compiles a new language to JavaScript) or WASM or [insert your favorite language here — Clojure? Haxe? Elm?] we wouldn't need to worry about JavaScript at all!

Option 2 is to do nothing. Our way is the best way.

The opposite of rewriting everything is to change nothing. The public JavaScript world, you could correctly point out, is full of amateur code and leftpad disasters. A good engineer can always adapt to our idiosyncratic way of making frontends and we can always improve or build more of own tools.

Option 3 is to do the right thing. Incremental improvement.

Which leads me to the middle path, which my little team has been pursuing: incrementally adopt some external tooling where it makes sense, by figuring out how to make it interoperate with our existing code base. This task isn't as fun — we don't get to just throw away our legacy mess and "do it right this time" — but I like to think rather more humble, looking outward rather than inward.
javascript  google  typescript  legacy  evolution  software 
6 weeks ago by jefframnani
donnemartin/system-design-primer: Learn how to design large-scale systems. Prep for the system design interview. Includes Anki flashcards.
I'm of two minds about this. On one hand, it's good to coalesce information like this in one place. OTOH, all this information is abbreviated around a specific task (interviewing) that will lead to cargo culting without context.
architecture  software  programming  interview  sysadmin 
11 weeks ago by jefframnani
Diving into the details of Apple's (boring?) record quarter - Six Colors
Looking at the graph of Mac sales, when can we call the 2016 MacBook Pro’s a flop?

Apple keeps talking about new growth in the Mac in various markets and uses that seasonality as an excuse, but it’s been three straight quarters of sales and revenue flops. At what point do we say that Apple has a Mac problem?

I really agree with Snell’s sentiment here. Apple has saturated the high end of the market, and now is seeking rent from their loyal customers. This could end badly.

As someone who’s interested in products, I find the focus on Services revenue to be a bit dispiriting. I get excited at the prospect of new products and seeing how consumers are accepting or rejecting products in the market. But the discussion of Services, especially in a financial context, is essentially a conversation about how Apple can grind more money out of every single person who uses an iPhone, iPad, and Mac. (At least the Other Products line, which is also growing rapidly, contains real products like AirPods and the HomePod and the Apple Watch.)

It’s not even that the individual products aren’t good—in point of fact, I’m a happy Apple Music user, I sync my photos with iCloud, and I’ll get in line to give Apple my money for the new video service when it arrives. But to me, in its soul Apple is a company that makes products—the amalgamation of hardware and software—and it will rise or fall based on its competency in those areas.
apple  business  software  quality  culture  finance 
11 weeks ago by jefframnani
An empirical study on the correctness of formally verified distributed systems | the morning paper
Great work on how formal verification systems fail.

The interesting part here is the kinds of bugs they found, and why those bugs were able to exist despite the verification. Before you go all “see I told you formal verification wasn’t worth it” on me, the authors also look at distributed systems that were not formally verified, and the situation there is even worse. We have to be a little careful with our comparisons here though.

What is formal verification good at compared to unverified existing production systems.

The unverified systems all contained protocol bugs, whereas none of the formally verified systems did.

Where do formal verification methods currently fail? At the boundary of the system communicating with unverified collaborators.

The bugs found by the team fall into three categories. By far the biggest group of bugs relate to assumptions about the behaviour of components that the formally verified system interacts with. These bugs manifest in the interface (or shim layer) between the verified and non-verified components.
software  papers  distributed  research  ComputerScience  FormalVerification  tla  quality  StaticAnalysis  testing 
11 weeks ago by jefframnani
A year on — our experience launching a paid, proprietary product on Linux.
An experience report on selling a product in Canonical's app store. The main takeaway is that there's a market for apps on Linux, but the market is fragmented by distro, and political resistance to closed-source software.

On app stores:
Success on any app store is contingent on the amount of exposure you get on the front page/editorial sections. And getting exposure is reliant upon the good will of editors of the Software Center — not something you can, or should be able to, rely on. This is also a problem on the Mac and Windows stores — developers will never feel like they are getting enough exposure.

On Linux user's willingness to pay:
Pricing wise, we haven’t noticed anything that distinguishes Linux users from everyone else. They are no more cost conscious than Mac / Windows users. They are definitely willing to pay for software.

On the Linux community's willingness to work with proprietary software vendors.
The main challenge remains getting the word out. Unfortunately, the fundamentalist FOSS mentality we encountered on Reddit is still alive and well. Some Linux blogs and Podcasts simply won’t give us the time of day.

I know what you're gonna say...
The takeaway here? Well, maybe we should open source. ...
And before you cry “support model!” — it isn’t going to work for us — our product simply doesn’t require that much support.

What happens when you sell software to developers? You're gonna get feedback. But this is a good high note to end on.
The most surprising and delightful aspect of this journey has been the feedback from Linux users. To put it mildly, they care about software. Many of them are software developers themselves. We call it professional sympathy! Their generosity, quality insights and willingness to help us squash bugs have accelerated the pace of our development and learning dramatically. So much so, that if I ever end up building another product, I’ll be going Linux first.
linux  business  software  opensource 
12 weeks ago by jefframnani
Tech Notes: Why not add an option for that?
Good advice about the maintainability of a system long term. Options have real costs and can be a maintenance and usability burden.
design  ux  product  programming  software  usability 
july 2018 by jefframnani
10 years of the App Store: The design evolution of the earliest apps | 9to5Mac

Few contemporary innovations have changed how we live our lives and interact with the world around us more than iPhone apps. The creators of the first 500 available at launch had the unique opportunity of shaping the design direction and interaction methods of the millions of apps created since.

To celebrate the App Store’s 10th anniversary, let’s study the visual evolution of 10 original App Store apps.
design  software  ios  evolution  history 
july 2018 by jefframnani
GitHub - dear-github/dear-github: An open letter to GitHub from the maintainers of open source projects
Companies that focus solely on user or platform growth often neglect their best users. Github took $350m in venture capital money, and yet managed to ship nothing that helped these people.

However, many of us are frustrated. Those of us who run some of the most popular projects on GitHub feel completely ignored by you. We’ve gone through the only support channel that you have given us either to receive an empty response or even no response at all. We have no visibility into what has happened with our requests, or whether GitHub is working on them. Since our own work is usually done in the open and everyone has input into the process, it seems strange for us to be in the dark about one of our most important project dependencies.
github  opensource  business  culture  software  quality 
july 2018 by jefframnani
Why I left Mac for Windows: Apple has given up - Charged
A long time Windows user moves to the Mac. After years of lackluster updates to Mac hardware, he’s gone back to Windows.

This, and seeing all the progress Microsoft was making with the Linux subsystem, as well as Apple’s lack of any meaningful progress, made me decide to make the jump back. I’m not a hater, I’m just tired of not being able to get a machine worth using.

“Those complaining about Apple’s current Mac lineup are not haters, they’re lovers. They’ve spent 10+ years and 5+ figures on Macs.”
windows  microsoft  apple  hardware  osx  software  quality 
july 2018 by jefframnani
Michael Tsai - Blog - On Paying for Software

One of the reasons that I switched from Linx to OSX was so that I could pay for more of my software. Why? Because then I more of the software I used could be maintained by someone who had the time to dig into bugs and UI problems and to fix them.
osx  software  business  opensource 
june 2018 by jefframnani
Ersatz Free Trials |
Apple charges developers 30%, but are in fact creating more work for developers. A bad deal for Mac apps especially.

I think it’s particularly important, in the face of all the celebration this week about Apple’s perceived changes to the App Store, to understand the many ways in which this solution falls short of what many developers still hope for: bona fide support for real free trials in the App Store.

In summary: none of the mechanics of supporting ersatz free trials are substantially supported by the App Store. Every aspect of the solution is bolted on to a system which was not designed for, yet is somewhat admirably being used to simulate real support for free trials. Let me elaborate by listing several shortcomings and how they affect both users and developers in significant ways.
apple  business  software  ios  mobile 
june 2018 by jefframnani
After 5 years and $3M, here's everything we've learned from building Ghost
About the product and engineering.

We spent a very long time trying to compete on convenience and simplicity. This was our biggest mistake and the hardest lesson to learn - because user feedback told us that this was what was most important. We deliberately limited flexibility in the product to try and make it more simple. But it ended up being still not simple enough for the average user, and not powerful or flexible enough for the professional user — the worst of both worlds.

So the biggest takeaway after 5 years is that we have been moving, and will continue to move up market, toward professional users who value power and flexibility over ease of signup. This is where we can win compared to the competition.

On being a fully remote team.

The stuff which is actually hard, nobody ever asks about. For instance: How do you know when someone is in a bad mood? How do you deal with loneliness? How do you foster camaraderie? How do you achieve urgency? How do you ever get to know people outside of work when you never spend time with them outside of work?

On being an open source product. An interesting observation about GitHub being too transactional between maintainers and contributors.

The least fun part of working on Ghost is dealing with Github, which is really sad.

Everyone has their pet issue, whether design or accessibility or security or internationalisation or performance or SEO or or or... the list goes on. Everyone thinks theirs is most important and that we should work on right now and they can't believe that we would ignore it. It's always absolutely outrageous.
business  opensource  nonprofit  software  saas  publishing  blogging 
may 2018 by jefframnani
Introducing Git protocol version 2 | Google Open Source Blog
An interesting case study in how to evolve existing software. How to safely signal new servers that you want the new protocol version, in a way old servers will ignore.

The Git project has tried on a number of occasions over the years to either limit the initial ref advertisement or move to a new protocol altogether but continued to run into two problems: (1) the initial request is rigid and does not include a field that could be used to request that new servers modify their response without breaking compatibility with existing servers and (2) error handling is not well enough defined to allow safely using a new protocol that existing servers do not understand with a quick fallback to the old protocol. To migrate to a new protocol version, we needed to find a side channel which existing servers would ignore but could be used to safely communicate with newer servers.
git  programming  dvcs  refactoring  evolution  software 
may 2018 by jefframnani
Addressing Your Concerns | Shifty Jelly's blog of mystery
As a PocketCasts user I’m filing this under claim chowder.

Concern 6: If all of the above is true, why would 4 of the biggest radio producers even bother to buy Pocket Casts?

That’s an easy question to answer for those that know a bit about the podcasting industry. The industry is amazing because it’s open. Anyone can publish a podcast and distribute it everywhere. No podcast is treated differently than another. However, “open” is not the default state of markets as they mature, as we’ve seen in other content businesses. When power is consolidated into the hands of just a few closed platforms, creators rarely win. And we care deeply about the fate of podcast producers everywhere.

It’s our mission to ensure that this doesn’t happen. If we succeed, we all benefit. ...
podcast  business  software  ios  npr 
may 2018 by jefframnani
The Elevation of Privilege (EOP) Card Game
Elevation of Privilege (EoP) is the easy way to get started threat modeling, which is a core component of the design phase in the Microsoft Security Development Lifecycle(SDL).

The EoP card game helps clarify the details of threat modeling and examines possible threats to software and computer systems.
security  tutorial  software  design  ThreatModel  game 
april 2018 by jefframnani
Prelude to a Profession - The Clean Coder
Written after the Volkswagen emissions scandal. Uncle Bob talking about a software professional oath.
programming  ethics  legal  software 
april 2018 by jefframnani
Charles Web Debugging Proxy • HTTP Monitor / HTTP Proxy / HTTPS & SSL Proxy / Reverse Proxy

Charles is an HTTP proxy / HTTP monitor / Reverse Proxy that enables a developer to view all of the HTTP and SSL / HTTPS traffic between their machine and the Internet. This includes requests, responses and the HTTP headers (which contain the cookies and caching information).
http  debugging  network  software  ios  osx  macos  linux  ssl 
march 2018 by jefframnani
The Identity Management Method – Joel on Software
An effective management technique for high-trust environments. Give people information they need to make good decisions. In a way that enhances intrinsic motivation.

The Identity Method is a way to create intrinsic motivation.

To be an Identity Method manager, you have to summon all the social skills you have to make your employees identify with the goals of the organization, so that they are highly motivated, then you need to give them the information they need to steer in the right direction.

In general, Identity Management requires you to create a cohesive, jelled team that feels like a family, so that people have a sense of loyalty and commitment to their coworkers.

The second part, though, is to give people the information they need to steer the organization in the right direction.

Interesting insight into how to build a high-trust culture and hiring people from outside your region. Their internship includes features that allow the prospective team members to visualize what it’s like to live in NYC.

I’m probably going to freak out some of our summer interns by admitting this, but one the goals of our internship program is to make people identify as New Yorkers, so they’re more comfortable with the idea of moving here after college and working for us full-time. We do this through a pretty exhausting list of extra-curricular summer activities: two Broadway shows, a trip to the Top of the Rock, a boat ride around Manhattan, a Yankees game, an open house so they can meet more New Yorkers, and a trip to a museum; Michael and I host parties in our apartments, both as a way of welcoming the interns but also as a way for interns to visualize living in an apartment in New York, not just the dorm we stuck them in.
management  leadership  programming  software  business 
march 2018 by jefframnani
The Command and Control Management Method – Joel on Software

the military uses Command and Control because it’s the only way to get 18 year olds to charge through a minefield, not because they think it’s the best management method for every situation.
programming  management  leadership  software 
march 2018 by jefframnani
Designing Windows 95’s User Interface – Socket 3

The development of the user interface for a large commercial software product like Microsoft® Windows 95 involves many people, broad design goals, and an aggressive work schedule. This design briefing describes how the usability engineering principles of iterative design and problem tracking were successfully applied to make the development of the UI more manageable. Specific design problems and their solutions are also discussed.
microsoft  windows  design  history  ui  usability  evolution  software 
march 2018 by jefframnani
Apple's next big software thing
Thought provoking conversation about the future of the Mac and native apps in general.
A surprising take on the success of open web tools for native apps that work on many platforms.

After the Life and Death of Twitter for Mac episode, the recorders kept rolling and all the big brains — John Gruber of Daring Fireball, Loren Brichter of Tweetie, Paul Haddad of Tweetbot, Craig Hockenberry of Twitterrific, Ben Sandofsky of Halide, and Greg Pierce of Drafts — shared their thoughts on the rumored "Marzipan" iOS and macOS cross-development platform. Christina Warren of Microsoft joins to add context to everyone's hopes, dreams... and fears.
apple  mac  software  business  web  audio  podcast  vector 
march 2018 by jefframnani
Michael Tsai - Blog - The Experts Have Taken Over
Some accounts of how Apple’s culture of quality changed after Jobs / Forestall era.
apple  software  quality  ios  osx  macos  audio  podcast 
february 2018 by jefframnani
Michael Tsai - Blog - Apple Delays Features to Focus on Reliability, Performance
A nice reminder that things weren’t all wine and roses in the snow leopard days.

While High Sierra experienced a couple of fairly serious security vulnerabilities and has its share of irritating bugs, Snow Leopard — the go-to example of a refinement-oriented release — wasn’t exactly immune.
apple  software  quality  osx  macos 
february 2018 by jefframnani
Move slow and break nothing
This touches on some good points about the complexity of systems, but then points at the heavily regulated airline industry as an example of stability. It’s a good comparison, but doesn’t take into the costs necessary for that level of reliability.

Reliable systems do exist. The United States has not had a casualty from an airplane crash since 2013, and on a domestic carrier since 2009. There were 823 million passengers in the United States in 2016 alone. Clearly highly-redundant and reliable systems can be produced if we want them to and build the right culture of maintenance, safety, and reliability.
technology  software  quality  complexity  programming  risk 
february 2018 by jefframnani
Michael Tsai - Blog - iOS Auto-Correction From Contacts
Jeebus. I thought I was going crazy when I saw some of the dumb iOS autocorrects in iOS 11. Now I know why. But it’s still a dumb idea.
programming  apple  ios  MachineLearning  software  quality 
february 2018 by jefframnani
Tesla Is A Software Company
File under: Software is eating the world.

Software companies understand deeply the value of incremental delivery and out-of-band data gathering to validate theories.

Tesla plans to obtain this statistical evidence by running its full self-driving software in “shadow mode.” The software will not control the car, but will receive input from its sensors and simulate steering, braking, and accelerating. The software’s decisions will then be tested against the driver’s actual input to determine which is safer.
tesla  software  automobile  cars  manufacturing  business 
february 2018 by jefframnani
Bad Apple #1: iCloud Photo Library Re-uploading - TidBITS

we’re starting a new TidBITS column, called Bad Apple. Read that name however you like — in the context of one bad apple spoiling the whole barrel or like the imperative “Bad dog!” In Bad Apple, we’ll dive into a particular aspect of something that Apple got wrong.
apple  software  quality  cloud  osx 
january 2018 by jefframnani
The Modular Monolith: Rails Architecture – Dan Manges – Medium
How to evolve a monolith into a modular application inside a big framework line Rails. Uses the concept of services, but these services are just PORO’s using traditional software modularity principles.

Rails engines helps enable this architecture.
ruby  architecture  design  patterns  software  rails  DDD  programming 
january 2018 by jefframnani
Birdcage liners – Joel on Software

Both Twitter and Facebook’s selfish algorithms, optimized solely for increasing the number of hours I spend on their services, are kind of destroying civil society at the same time. Researchers also discovered that the algorithms served to divide up the world into partisan groups. So even though I was following hundreds of people on social networks, I noticed that the political pieces which I saw were nevertheless directionally aligned with my own political beliefs. But to be honest they were much… shriller. Every day the Twitter told me about something that The Other Side did that was Outrageous and Awful (or, at least, this was reported), and everyone was screeching in sync and self-organizing in a lynch mob, and I would have to click LIKE or RETWEET just to feel like I had done something about it, but I hadn’t actually done anything about it. I had just slacktivated.

What is the lesson? The lesson here is that when you design software, you create the future.
facebook  twitter  social  design  software  MachineLearning  culture  technology  SiliconValley 
january 2018 by jefframnani
GOTO 2017 • Beyond Developer • Dan North - YouTube
Dan talks about the breadth of things you need to care about to be a great developer.
programming  career  software  business  video  goto  management  agile 
december 2017 by jefframnani
Michael Tsai - Blog - Rushed iOS 11.2 Update to Fix Date Crasher
I think this quote from SwiftOnSecurity is insightful.

Again and again, Microsoft employees and observers tell me how much the company was shook by 2000s-era bugs, and remolded by Bill Gates’ Trustworthy Computing memo. I’m not saying it’s the same, but I really wonder if there are lessons for Apple now.
apple  software  quality  ios 
december 2017 by jefframnani
MakeMKV - Make MKV from Blu-ray and DVD
MakeMKV is your one-click solution to convert video that you own into free and patents-unencumbered format that can be played everywhere. MakeMKV is a format converter, otherwise called "transcoder". It converts the video clips from proprietary (and usually encrypted) disc into a set of MKV files, preserving most information but not changing it in any way.
dvd  media  backup  drm  archive  software 
december 2017 by jefframnani
iPhone crashing on Dec. 2? Here's the fix! | iMore
Apple has had serious bugs with their recent software releases. If this continues they risk losing customer trust such that they never update. Like Microsoft back in the day.
apple  software  quality  ios 
december 2017 by jefframnani
Michael Tsai - Blog - Why Little Bugs Need to Get Fixed
Another laundry list of issues with Apple’s recent software.

If Apple can’t fix bugs faster than it creates them, the only possible outcome is operating systems and apps that get buggier and buggier. This is a vicious cycle that is demoralizing for customers, and especially for the people who send in bug reports for free. If Apple can’t pay off this technical debt in a time of record earnings, stock price, and expansion, when can it?
apple  software  quality 
november 2017 by jefframnani
In My Pocket
Joe Cieplinski on how it sucks to copy your music onto an iPhone using iTunes.

I know I’m in the minority here, but I like having all my music on my phone. And I mean downloaded, ready to play, regardless of network connectivity. I ride the subway a lot, and thus I often find myself in a position of no internet connectivity. And I like to decide what I want to listen to in the moment, not ahead of time. It’s very frustrating for me to be in the mood for a song, go to play it on my phone, and nothing happens.

You would think this would be easy, copying my entire library, since all my music is on my Mac, and thus a simple USB cable would be all I'd need to copy all that music over to my new phone. If you think this is true, you clearly haven’t been reading my blog for very long. For several years now, as Apple has ignored users in my situation, the process of getting my songs onto my phone has resulted in doubled tracks, missing tracks, incorrect album artwork, songs that simply never copy, songs that appear to be on the phone but refuse to play, and on and on. It has been a nightmare for a geek like me who makes an effort to have a very orderly library and who likes to listen to entire albums.

But if you have lots of tracks that you ripped from CDs back in the Stone Age, or you purchase songs from places other than iTunes occasionally, and you haven’t yet surrendered your entire music flow to streaming services, you may be experiencing many of the difficulties I have with iTunes over the past five or more years.
apple  music  software  quality  itunes 
november 2017 by jefframnani
Living on the Plateau - Clean Coder Blog
File under: The end of Moore's Law and Exponential Hangover.

Uncle Bob explains it. There's even a slide from Intel talking about how 28mn is the most cost-effective for mid-range computers.
But the 8 core processors never came – at least in the laptop space. We’re still waiting. And it’s looking more and more as though Moore’s law for density has hit the wall.
I think it is quite realistic to expect that the speed and density of computers have reached their practical limits. It’s just possible that we have been living on the plateau for the last decade; and that we will remain on this plateau for the foreseeable future.

Then he looks down the road and asks what else might be affected? I think he's right that the Cambrian Explosion of programming languages are over. We're settling into a stable basis for the future. The only one he's missing is Kotlin.
If we aren’t going to see 1024 core processors in the near future, what need have we of functional programming languages? Oh, don’t get me wrong. I think functional programming is a good idea. Every programmer should learn it. But the crisis that we anticipated – the crisis that drove the current infatuation with functional languages – seems not to be occurring. And that may well mean that functional languages never achieve the ascendency that we had anticipated for them. It may just be that Java/C#, and Ruby/Python, and Swift/Dart/Go are, and will be, sufficient.

If Moore’s law was the driver of our language evolution, what will drive it now? Could it be that we are living at the beginning of a period in which language evolution will slow it’s frenetic pace? Will we see the number of languages cease it’s relentless rise, and begin to decline? Will our industry gradually abandon the exuberance of adolescence and settle down into a stable period of adulthood and middle age?
programming  language  evolution  MooresLaw  FunctionalProgramming  hardware  software 
november 2017 by jefframnani
Introducing Nullable Reference Types in C#
A good story of evolving a language to add a useful feature in the face of a large install base. A thoughtful approach to adding this feature.
csharp  programming  software  evolution 
november 2017 by jefframnani
Entering the Quantum Era—How Firefox got fast again and where it’s going to get faster – Mozilla Hacks – the Web developer blog
Another great story about how to evolve a large existing code base with a large user base.

This is the opportunity that the Chrome engineers foresaw. We saw it too, but we had a bumpier path to get there. Since we had an existing code base we needed to plan for how to split up that code base to take advantage of multiple cores.

Electrolysis laid the groundwork for Project Quantum. It introduced a kind of multi-process architecture similar to the one that Chrome introduced. Because it was such a big change, we introduced it slowly, testing it with small groups of users starting in 2016 before rolling it out to all Firefox users in mid-2017.

File under: browsers are becoming operating systems. In this case Firefox is adding their own preemptive scheduler to prioritize tasks.

Even when you split up the content windows between cores and have a separate main thread for each one, there are still a lot of tasks that main thread needs to do. And some of them are more important than others. For example, responding to a keypress is more important than running garbage collection. Quantum DOM gives us a way to prioritize these tasks. This makes Firefox more responsive. Most of this work has landed, but we still plan to take this further with something called pre-emptive scheduling.
firefox  browser  refactoring  performance  software  evolution 
november 2017 by jefframnani
Amazon Revokes Delicious Library API Access
We are writing to tell you that effective as of today’s date, Amazon is terminating your Associates account. Under the terms of the Operating Agreement, we may terminate your account at any time, with or without cause. This decision is final and not subject to appeal.
business  monopoly  amazon  software 
october 2017 by jefframnani
The Software Apocalypse - Tools Are Not The Answer

And right there, ladies and gentlemen, you can see both the cause of the apocalypse, and the obvious solution.

The cause:

1. Too many programmer take sloppy short-cuts under schedule pressure.
2. Too many other programmers think it’s fine, and provide cover.

The obvious solution:

1. Raise the level of software discipline and professionalism.
2. Never make excuses for sloppy work.

This is the point that the author of the Atlantic article missed entirely. The one thing he failed to consider was that the reason we are facing bugs that kill people and lose fortunes, the reason that we are facing a software apocalypse, is that too many programmers think that schedule pressure makes it OK to do a half-assed job.
programming  craftsmanship  culture  testing  quality  software 
october 2017 by jefframnani
Daring Fireball: Bill Gates Now Using an Android Phone 'With a Lot of Microsoft Software'

While I”m at it, it occurs to me that Apple is the only company left where all its employees are using only systems made by their own company. Microsoft employees need to use phones running iOS or Android. Google employees need to use MacOS or Windows (there might be some administrative jobs where they can use Chromebooks, but I doubt there are any engineers or designers getting by with Chrome). But at Apple, it’s MacOS on your PCs, iOS on your phone and tablet, WatchOS on your watch, and even tvOS on your set-top box. Microsoft use to have a slogan “Windows everywhere”. Apple doesn’t have one OS that runs everywhere (although it’s close with iOS — WatchOS and tvOS are really just offshoots of iOS with different UI layers), but there is a sort of cultural “Apple everywhere” mindset that I worry could lead to the sort of insularity that blinded Microsoft in the early ’00s.
apple  microsoft  business  monopoly  software  quality 
september 2017 by jefframnani
The 4-letter-word word that makes my blood boil

Gerald Weinberg calls “just” an example of Lullaby Language, which “lulls your mind into a false sense of security, yet remains ambiguous enough to allow for the opposite interpretation.”
software  programming  culture  communication  management 
august 2017 by jefframnani
Why we’re switching Ulysses to Subscription – Building Ulysses – Medium
The software business is changing. Paid upgrades are dead in a post App Store world. Subscriptions seem like the only / best option going forward.

Let’s map this onto Ulysses for a moment: If you bought Ulysses at its launch in April 2013, you will now have received nine major feature releases. For free, at no additional cost. At least 80% of that originally purchased app have since been scraped and replaced. Its functionality has quadrupled during the same time.

Each of these nine updates required a considerable amount of time on our part, which of course translates into a considerable amount of development cost. But with customers ever only paying for the development of the current version — how did we manage to finance new versions then?

The answer is simple: New users.
Or in economic terms: Expanding our market.

Now, as long as there was a strong-enough flow of new customers every month, development costs could be covered by those sales. But since ours is a growing product (updates!), it hence needs a growing team (more code), which means growing development costs (devs need food), which in turn means we need an ever-growing stream of new users.

Needless to say, solely relying on new customers to keep your business going, is a very unstable idea — at the very least, there will come a time of full market saturation, right? ...
software  business  saas  productivity  apple 
august 2017 by jefframnani
Why we’re switching Ulysses to Subscription – Building Ulysses – Medium
The software business is changing. Paid upgrades are dead in a post App Store world. Subscriptions seem like the only / best option going forward.

Let’s map this onto Ulysses for a moment: If you bought Ulysses at its launch in April 2013, you will now have received nine major feature releases. For free, at no additional cost. At least 80% of that originally purchased app have since been scraped and replaced. Its functionality has quadrupled during the same time.

Each of these nine updates required a considerable amount of time on our part, which of course translates into a considerable amount of development cost. But with customers ever only paying for the development of the current version — how did we manage to finance new versions then?

The answer is simple: New users.
Or in economic terms: Expanding our market.

Now, as long as there was a strong-enough flow of new customers every month, development costs could be covered by those sales. But since ours is a growing product (updates!), it hence needs a growing team (more code), which means growing development costs (devs need food), which in turn means we need an ever-growing stream of new users.

Needless to say, solely relying on new customers to keep your business going, is a very unstable idea — at the very least, there will come a time of full market saturation, right? ...
software  business  saas  productivity 
august 2017 by jefframnani
'THIS IS NOT A DRILL:' A Hacker Allegedly Stole $32 Million in Ethereum - Motherboard
Imagine your money is controlled by software. Software has bugs. Bugs that can cost you all your money.
ethereum  money  finance  software  quality  blockchain 
july 2017 by jefframnani
Apple, Google and other Nasdaq Stocks Swing Wildly in After-Hours Trading - Bloomberg

An error at Nasdaq Inc.’s computer systems caused confusion among traders Monday, as Wall Street closed early for the July 4 holiday.

The exchange operator was conducting a test of its pricing data feed that led to some third-party providers showing wild moves in shares including Google Inc. and Microsoft Corp. that never occurred, according to spokesman Joe Christinat. Nasdaq is working with the providers to resolve the issue, he said.
software  finance  exchange  testing  outage  Nasdaq  markets 
july 2017 by jefframnani
The Half-Life of Code — Sandi Metz

In my experience, most applications are a mess. Successful business rely on long-lived applications that endure a constant barrage of new requirements. Changes are commonly made under urgent time pressure, which drives applications towards disorder. As entropy increases, it becomes harder and harder to add features except by way of one more hack. The accumulated mess leads to hacks, hacks lead to more hacks, and then you're in a loop. Velocity gradually slows, and everyone comes to hate the application, their job, and their life.
programming  quality  software  design 
june 2017 by jefframnani
The Four Elements of Simple Design
By JB Rainsberger

I claim that developing strong skills of detecting duplication, removing duplication, identifying naming problems, and fixing naming problems equates to learning everything ever written about object-oriented design.
software  design  tdd  programming  oop 
may 2017 by jefframnani
The Clean Architecture | 8th Light
By Uncle Bob. A synthesis of the hexagonal and screaming architectures.
programming  design  architecture  software 
may 2017 by jefframnani
Damage - Matt Gemmell
Matt is calling out Apple here, but I put Google in the same camp. In fact, it was Google who did the research on how much more engagement you got when you priced at zero.

No company has done as much damage to the perceived value of software, and the sustainability of being an independent developer, as Apple.

Not that other companies wouldn’t have done the same thing — they would have. It’s just that Apple was the successful one.

It’s resolutely the fault of us as consumers, and it’s actively encouraged by the App Store.
programming  business  apple  google  software  economics 
may 2017 by jefframnani
Education of a Programmer – Hacker Noon

one of the hardest problem for a system designer is to determine how to divide responsibilities between components of a system. This ends up being a discussion that involves weighing the pros and cons as you divide up functionality, isolate complexity and try to design a reliable, performant system that will be flexible to evolving requirements. There is no simple set of rules to follow.

On architecture and software layers:

It is almost a truism that a component you adopt will have more functionality than you actually require. In some cases, the decision to use it is based on leveraging that functionality for future uses. You adopt specifically because you want to “get on the train” and leverage the ongoing work that will go into that component. There are a few consequences of building on this highly functional layer. 1) The component will often make trade-offs that are biased by functionality that you do not actually require. 2) The component will embed complexity and constraints because of functionality you do not require and those constraints will impede future evolution of that component. 3) There will be more surface area to leak into your application. Some of that leakage will be due to true “leaky abstractions” and some will be explicit (but generally poorly controlled) increased dependence on the full capabilities of the component.

As soon as you have defined a layer, it starts to accrete functionality. The layer is the natural throttle point to optimize for your usage patterns. The difficulty with a thick layer is that it tends to reduce your ability to leverage ongoing innovation in underlying layers. In some sense this is why OS companies hate thick layers built on top of their core evolving functionality — the pace at which innovation can be adopted is inherently slowed.

On performance:

A key thing to recognize about this exponential change is that while all components of the system are experiencing exponential change, these exponentials are divergent. So the rate of increase in capacity of a hard disk changes at a different rate from the capacity of memory or the speed of the CPU or the latency between memory and CPU. Even when trends are driven by the same underlying technology, exponentials diverge. Latency improvements fundamentally trail bandwidth improvements.

On complexity:

I have struggled with complexity my entire career. Why do systems and apps get complex? Why doesn’t development within an application domain get easier over time as the infrastructure gets more powerful rather than getting harder and more constrained? In fact, one of our key approaches for managing complexity is to “walk away” and start fresh. Often new tools or languages force us to start from scratch which means that developers end up conflating the benefits of the tool with the benefits of the clean start. The clean start is what is fundamental. This is not to say that some new tool, platform or language might not be a great thing, but I can guarantee it will not solve the problem of complexity growth. The simplest way of controlling complexity growth is to build a smaller system with fewer developers.
programming  career  management  software  design  architecture 
april 2017 by jefframnani
Complexity and Strategy
A retrospective from years of working on Microsoft's Office products.

Great essay on the trade-offs between a product's functionality (the sum of its features), and it's essential complexity (how those features interact).

I enjoyed this take on the enthusiasm for new technologies by early adopters.
This perspective does cause one to turn a somewhat jaundiced eye towards claims of amazing breakthroughs with new technologies. Managed code was one that we argued about for a long time during this period. Leveraging open source also has some of the same dynamics. What I found is that advocates for these new technologies tended to confuse the productivity benefits of working on a small code base (small N essential complexity due to fewer feature interactions and small N cost for features that scale with size of codebase) with the benefits of the new technology itself — efforts using a new technology inherently start small so the benefits get conflated. Additionally, these new technologies (Java, C#, NodeJS is the latest one) start out with a much more functional initial set of base libraries and rich frameworks, certainly compared to what we saw in C and C++ and in the early days of either Mac or Windows application development.

This is about the framework code that Office is built upon, but it feels equally true about Rails and Django, et al.

The dynamic you see with especially long-lived code bases like Office is that the amount of framework code becomes dominated over time by the amount of application code and in fact frameworks over time get absorbed into the overall code base. The framework typically fails to evolve along the path required by the product — which leads to the general advice “you ship it, you own it”. This means that you eventually pay for all that code that lifted your initial productivity. So “free code” tends to be “free as in puppy” rather than “free as in beer”.

On competing with Google Docs.
Browser-based application delivery solved the deployment problem which was a huge issue for PC applications in the days before app stores. This enabled continuous delivery of new features as well as ensuring that everyone was up-to-date with the latest version.

One thing that was clear to us was that the cloud/browser development strategy did not offer a breakthrough in the constraints of essential complexity like I am discussing here. In fact, the performance challenges with running large amounts of code or large data models in the browser and managing the high relative latency between the front and back end of your application generally make it harder to build complex applications in a web-based environment.

Positive affirmation of how Microsoft enforces their monopoly intentionally. This comes right after a paragraph criticizing Google Apps for not being more compatible with Office.
The final decision to build the “Word Web App” rather than “a new web-based word processor from Microsoft that is not fully compatible with Word” (and similarly for Excel, PowerPoint and OneNote) was strongly driven by the belief that the file formats continued to serve as a critical competitive moat with immensely strong network effects. In fact, an argument can be made that the Office file formats represent one of the most significant network-based moats in business history (with Win32 and the iOS APIs as two others).
microsoft  programming  software  history  msoffice 
march 2017 by jefframnani
Gerald M. Weinberg: Writer - Consultant OFFICIAL WEBSITE
Author of The Secrets of Consulting. For some reason it was hard to Google his actual web site where I can buy his books somewhere other than Amazon.
programming  agile  consulting  business  book  author  quality  software 
march 2017 by jefframnani
How to Crash Systemd in One Tweet
The bug is remarkably banal. The above systemd-notify command sends a zero-length message to the world-accessible UNIX domain socket located at /run/systemd/notify. PID 1 receives the message and fails an assertion that the message length is greater than zero. Despite the banality, the bug is serious, as it allows any local user to trivially perform a denial-of-service attack against a critical system component.
linux  security  systemd  software  quality 
february 2017 by jefframnani
Why Every Element of SOLID is Wrong // Speaker Deck
SOLID has been a guide for Object Oriented Programmers for years. Challenging these principles is thought provoking.
programming  architecture  design  software  oop 
january 2017 by jefframnani
Bitter iCloud Truth |
This is fucking awful. How does the company that gave us Time Machine screw up backup and restore so badly.

The overarching lesson here is that when it comes to iCloud-synced data, you cannot count on local data, and worse: you can’t count on local archives.
osx  apple  software  quality  backup  sync 
january 2017 by jefframnani
« earlier      
per page:    204080120160

related tags

acm  advertising  agile  ai  amazon  api  apple  archaeology  architecture  archive  art  audio  author  automobile  backup  BestOf2018  blackberry  blockchain  blog  blogging  book  browser  budget  build  business  career  cars  cloud  collaboration  communication  compiler  complexity  computers  ComputerScience  conference  configuration  consulting  continuousdeployment  continuousintegration  copyright  craftsmanship  creativity  crowdsourcing  csharp  culture  database  DDD  debugging  design  development  devops  distributed  documentation  drm  dvcs  dvd  economics  emulator  energy  engineering  entrepreneurship  estimation  ethereum  ethics  evolution  exchange  facebook  finance  firefox  FormalVerification  fraud  frontier  FunctionalProgramming  funding  game  git  github  gnu  google  goto  government  gpl  hardware  history  hn  hosting  hp  http  humor  internet  interview  ios  itunes  iwatch  java  javascript  language  law  leadership  learning  legacy  legal  library  license  linux  mac  macbook  MachineLearning  macos  malware  management  manufacturing  marketing  markets  marzipan  media  meditation  mercurial  messaging  microsoft  mobile  money  monopoly  MooresLaw  msoffice  music  nasa  Nasdaq  network  nonprofit  npr  nyse  oop  openbsd  opensource  oracle  organization  os  osx  outage  papers  patents  patterns  payments  performance  philosophy  photoshop  pinboard  planning  podcast  policy  politics  privacy  product  productivity  programming  projectmanagement  publishing  python  quality  rails  rake  refactoring  reference  ReleaseManagement  research  risk  rss  ruby  saas  sales  scifi  scm  search  security  SiliconValley  smartgrid  social  software  space  ssl  startup  startups  StaticAnalysis  surveillance  sync  sysadmin  systemd  tags  tdd  technology  tesla  testing  ThreatModel  tla  tools  TouchBar  transparency  tutorial  twitter  typescript  ui  unix  usability  ux  vector  video  vpn  web  wiki  windows  writing  zfs 

Copy this bookmark: