in commentary

Quote

The latest Openbeta email includes this quote from Czech author Milan Kundera –

Everyone without exception bears a potential writer within him, so that the entire human species has good reason to go down into the streets and shout: we are all writers! One morning (and it will be soon), when everyone wakes up as a writer, the age of universal deafness and lack of understanding will have arrived.

Source: I think we need to talk

Imagine a forest full of birds. It’s summer time and the cacophony is drowning out your thoughts. The birds are seeking out mates and the loudest and sweetest ones will win out, first. There will be some that will not find a mate, but most will. But every bird tries it’s best, without regard for the others. After all, it’s life and death and the continuation of the species at stake.

The same is true for twitter and Instagram and YouTube. A million content-creators and influencers and writers and thinkers all want to sell you their ideas. Not their wares, ideas. Not passion as is the case in birds, but ideas. These birds of the Internet are part of the cacophony that Milan Kundera warns us about, but even in the drowning noise, there is a message and we can hear it and respond to it. Thus, there is no universal deafness. We can seek out the message through word of mouth and search engines, through hashtags and link dumps. It gets noisy, but we build on top of the noise to make things clear for ourselves and others.

But we do not as yet lament, because we, the people who sit just outside the noisy streams of the walled gardens, know that the Internet is vast and needs more voices. Voices of those not heard till now, voices of those who can bring a fresh perspective. So no, Milan, there is hope as yet, and noise as yet to be made.

Reply to Khürt on micro.blog

Khürt, I absolutely get a lot of value from my micro.blog account. First of, this is a great community of bloggers, coders, amateur photographers and even one harpist. I’ve found this to be a great continuation of the community I found in app.net, which subsequently splintered into a few groups. I am, in fact, thinking of trying to woo some esoteric friends off twitter and onto here, though I’ll be guiding them to use micro.blog for free, because the economics doesn’t work out for everybody around the world.

Second, micro.blog is an interesting experiment in blog comments. The other day, I saw your post about house parties and responded. I knew I could respond right here, but I had a little more to say, so I put it on my blog and let that reflect here. That exchange can happen independently too, but this centralization of feeds is difficult to attain. We’re all avid users of RSS readers, but with that comes its own challenges. In some senses, micro.blog is my people feed reader, while my other feeds readers are relegated to follow webcomics and networking news.

Third, any tool is what you put into it. micro.blog is one of the most visited tabs in Firefox on Windows. Which means I every time I want to unwind from a task at work, I come here and check things out. But it’s not the most visited app on my phone. Mindless browsing time goes to Instagram or Fiery Feeds. So if micro.blog doesn’t fit your time-flow, it’s not going to give you what others get from it.

Lastly, deleting your account – I know it’s the cleaner thing to do. It severs your ties, Manton is obligated to delete your data, it removes the mindshare micro.blog takes from you, etc. And frankly, you’d be better off deleting your account than mindlessly posting to it like a bot, or like dave. But not deleting it gives you the opportunity to come back whenever you want. If you want to keep the connection open, however tenuous, keep this account in your back pocket for a rainy day.

Also, if it irks you to pay for micro.blog, know that I’ve not paid for it in months! I post to it using my own blogs (multiple of them), and I primarily use it for replying to other people’s posts. One issue with not paying is supposed to be that I can’t start conversations. But I get around this by posting through my liveblog, which has an RSS feed without titles. There’s no shame in using micro.blog like this, because Manton can tighten the noose whenever he wants, but micro.blog seems to explicitly allow free use. It’s part of the growth model – to allow free users like me.

I hope this all helps you make the best decision for you. I would love to continue conversing with you, and I will do so through our blogs, if you decide that micro.blog is not for you.

It’s your house, it’s not your party

It’s my house. It’s my party.

Source: You can leave at any time by Khürt Williams

Khürt feels that social networks are not like jails, because you’re not being held at gunpoint and must stay. They’re like a house party, sponsored by Khürt. It’s his house and he can boot you any time. But that also means that you can leave whenever you want.

I don’t think that analogy is correct.

Social networks are like a sponsored agora – an open space that feels like a welcome hangout spot, but which are nevertheless run by someone. That someone can have their security guards kick you out, or you can up and leave.

But you’re not staying because you’ve made your peace with the privacy issues. You’ve made your peace with the privacy issues because all your darn friends are there and it feels good to hangout with them.

Khürt is pretty active on micro.blog. If tomorrow Manton feels that Khürt is not welcome any more, he can kick him out.

But that arbitrariness is what has caused problem for twitter and Facebook before. If it truly were their party, people who are kicked out would be blamed for their misdeeds. But that’s not how it works. Increasingly, you see that these networks make the mistake of kicking someone popular off, or kicking them off for the wrong reasons, and a cycle of blaming these networks runs its course.

It’s their house, but it’s not their party. The party is brought there by the people. In Facebook’s case, the party was brought there by the people signing up from their college times. In twitter’s case, the party was equally brought by the people as well as the developers.

Twitter chose to kick out developers a few years ago and they’re still reeling from the effects of that move. It’s held on to the people because of the critical mass. Same for Facebook (critical mass and dirty moves in that case).

If enough people leave Facebook today, as they did Uber during the #deleteUber campaign, and MySpace during its years of attrition, and tumblr during their recent purge, the party gets dull. No matter what the host does then, the party is already dead, it just needs to get called.

That time has not come for WhatsApp or Instagram, but has pretty much come for Facebook. People are tired of the big blue’s shit. They just can’t leave yet because of all their friends there. The next generation chose to skip Facebook altogether and just go for SnapChat. How long can Facebook keep the party running?

Thoughts on Chris Hughes’ call to break up Facebook

I took my own sweet time to read this story, collecting some of my ideas and publishing them here. I’ve already had a lot of online and offline conversations around the topic, but posting these thoughts here for posterity and discussion makes sense to me.

Opinion | It’s Time to Break Up Facebook

Jefferson and Madison were voracious readers of Adam Smith, who believed that monopolies prevent the competition that spurs innovation and leads to economic growth.

The F.T.C.’s biggest mistake was to allow Facebook to acquire Instagram and WhatsApp. In 2012, the newer platforms were nipping at Facebook’s heels because they had been built for the smartphone, where Facebook was still struggling to gain traction. Mark responded by buying them, and the F.T.C. approved.

Facebook’s version of Snapchat’s stories and disappearing messages proved wildly successful, at Snapchat’s expense. At an all-hands meeting in 2016, Mark told Facebook employees not to let their pride get in the way of giving users what they want. According to Wired magazine, “Zuckerberg’s message became an informal slogan at Facebook: ‘Don’t be too proud to copy.’”

They create immense amounts of data — not just likes and dislikes, but how many seconds they watch a particular video — that Facebook uses to refine its targeted advertising

One big question is, of course, who owns this data? The data would not exist on a platform which doesn’t have the technology to track your time in seconds. The data is also not really relevant to you in a meaningful way. So unless there’s a way to make it meaningful, there is no point in us users claiming ownership of it. Even if we did, in most aspects, the data is owned by Facebook and that is the basis for them not deleting it even after you’ve asked for ‘all’ of your data to be deleted. In that context, ‘all’ is all of the data you’ve given to Facebook, not the data they’ve generated on you.

he went even further than before, calling for more government regulation — not just on speech, but also on privacy and interoperability, the ability of consumers to seamlessly leave one network and transfer their profiles, friend connections, photos and other data to another.

Chris Hughes says in the next line that these proposals were not made in bad faith, but from where I am seeing, these are nothing but bad faith. One can only say these things from a position of privilege, of power. Where were these ideas when twitter launched periscope with Facebook friend-finder integration?

The fact is that what Zuck is proposing here is nothing different from what Microsoft did for Apple all those years ago to head off anti-trust investigations. Why not head off an investigation by propping up a few lame-duck competitors who Facebook can kill off in the name of API changes whenever it feels threatened?

Zuckerberg’s words may seem like music to your ears, but they are nothing more than an empty promise. Already, you can export your Facebook data, and there are services built around importing it and doing stuff with it. So how is his proposal any different?

Will Facebook provide an API to easily move all your data and conversations, and photos off? Will Facebook provide precious server time required to sync out every last bit of data through a legit API? I don’t think so.

Even if they do, the point remains that he’s doing this just to save his own hide. Paying lip service to the open web and interoperability is the easiest thing he can do as CEO.

Besides, Facebook’s value isn’t in the data you provide it with. It’s in the data they generate about you. Today, your uploaded data might be in the couple hundred MBs. But I can assure you, the data they’ve generated about you, and the data you don’t know you’ve uploaded (including stealthy location tracking, cookies, and third party browsing data they’ve bought about you), probably stands in the GBs.

That vast difference is something Facebook will never give you access to, since they can legally claim that it is data they have created and they own. You taking charge of that data is the real threat to Facebook.

Zuck knows this only too well and is trying to ward it off.

Imagine a competitive market in which they could choose among one network that offered higher privacy standards, another that cost a fee to join but had little advertising and another that would allow users to customize and tweak their feeds as they saw fit. No one knows exactly what Facebook’s competitors would offer to differentiate themselves. That’s exactly the point.

Another example of hypocrisy from Chris. We know there are social networks out there today that do all of these things. There are exceptional services built by dedicated people who believe in the ideal of an open web. Just recently an instagram replacement was kickstarted. It took a long while to get it to the bare minimum it needed to fund successfully.

Why? Why did Chris Hughes not put his money where his mouth is? Why not fund all these competitions as an outsider? He’s arguably for the money for it.

App.net was kickstarted by the people, but along the way they took funding from a VC firm. Some people saw that as a betrayal of the idea with which it began, and ADN ended up shuttering under a year later.

Hughes doesn’t need to singularly fund social networks and exert control as a VC or angel investor. He can fund them as an individual and just use his voice to amplify the message – that open web ideas do exist and have the potential to be disruptive.

The thing is, that Silicon Valley is about control. Right now, the definition of control is Facebook. It’s a behemoth that can eat up most of the things in its path, whether it’s WhatsApp and Instagram, which it acquires and turned into its pawns, or Snapchat, which it is trying to destroy by replicating it and using its networking effects against.

Look towards the (inter)networking world – everyone needs networking and so it’s not that sexy a field. But even though there’s a behemoth, Cisco, it can’t eat everything up. Every few years a company springs up that can cause serious competition to it based on new technology, or better production cycles, or just a fresh pair of eyes on the same ideas networking has been revolving around since the last decade.

So Facebook doesn’t need to be broken up in order to be made irrelevant, be it the right approach or not.

The F.T.C. should have blocked these mergers

Its first mandate should be to protect privacy.

It’s interesting to talk about privacy only in terms of Facebook, but it is infinitely more important to talk about privacy in a broader sense.

The US needs an agency that actively works with companies and individuals to thwart attacks on our data, to help secure information, and to educate the people about these topics. Right now, there’s a haphazard group of organizations doing this, led perhaps by the FBI, which steps into the case when hospitals and other organizations are attacked.

There needs to be an organization that ‘polices’ the use of data. Of course, there’s no reason to stifle new growth, but this org would work with, and actively target companies that are becoming big, and perhaps even white hat attack them to show weaknesses.

This latter role has been left to private entities till now, and that has worked out fine for most people. But formalizing it means making sure that the US has a pulse on cyber warfare in the civilian realm, which is where it is more active and deadly currently.

Imagine a CDC for cyber warfare and privacy issues.

But there is no constitutional right to harass others or live-stream violence

Mark Zuckerberg cannot fix Facebook, but our government can.

Can they, though? Can either Zuck or any government in the world ‘fix’ Facebook? As an industry, social media can be regulated. As a company, Facebook can be fined and controlled. But as an idea, as a part of the Internet, and as a trend, Facebook is more difficult to control. What needs to happen is that along with the threat of government sanctions, Facebook also needs internal pressure to restructure. That pressure will never come until golden boy is removed from the helm. It was only till Biz Stone and Jack were shown to be totally inept at handling twitter, that people understood that twitter needs some serious work. It’s a great feeling to follow an enigmatic or often just an esoteric leader and believe that they’re doing the right thing. But Facebook’s investors, specially those who care about the effects of the company on the world, should break through that spell and focus on forcing the company to rebuild.

Zuckerberg himself should realize that it is under his own helm that bad things have happened, and we’ve long given him a huge platform to grow and become a leader. But just like Rahul Gandhi, growing on the job is not possible for someone who controls the fate of a billion people. That just doesn’t work. He would be better off stepping away from the plate and letting someone else play while he rebuilds himself and finds out what he believes in beyond just the dominance of Facebook.

On the power of writing

I’ve been reading Susan Sontag’s Notes on “Camp” these past few weeks. I’ve really enjoyed slowly working my way through it, and taking down notes and interesting quotes from it. These are safely tucked away for now, but there was something interesting that happened, which I’d like to note –

Sontag starts off with –

Many things in the world have not been named; and many things, even if they have been named, have never been described. […]

A sensibility (as distinct from an idea) is one of the hardest things to talk about

Susan Sontag, Notes on “Camp”

When I started reading this essay, I had little idea of what Camp is. Since then, I’ve visited New York, been to the Met, and seen all the things that inspired these thoughts, and things around them.

But to me, writing is the greatest tool humans have ever conceived, and the mark of a great writer is that by the time they’re done telling you about their ideas, you believe them and adopt them.

This is my last note on the essay, made today –

I love this idea. So much has been written about our human history, but the color gets lost almost instantly. The sensibility which informs the era being written about is the most difficult thing to capture, and thus the most valuable thing.

Nitin Khanna

As soon as I wrote it down, I realized that I was echoing an idea I had read three weeks ago from these very pages. That I have wholly adopted the idea Sontag presented, and that it is a part of my thinking is a testament to how powerful a tool writing is.

Automatic app updates out, this method in.

Automatic app updates are a bad idea. Apple should recognize this by now. In case you, dear reader, aren’t convinced of that, here are some simple reasons why automatic app updates are just no good –

  1. Software is buggy – how many times have you heard that “we shouldn’t get the dot zero version of that software”? It’s almost a maxim in the enterprise world – unless you deeply trust it to not break your current setup, don’t get that update. So why should we be so cavalier about software updates for our personal devices? We shouldn’t let developers decide the de facto time when we get an update.
  2. It’s a vehicle for disruption – and not the good kind. App updates are great if they’re well thought out, streamlined, and work. But more often than not, they introduce changes which wouldn’t sit well with you and your workflow. How many of us regret updating to some version of iOS that slowed down our devices to hell and there was no recourse? Why do we trust third party developers more than we trust Apple in this instance? If I don’t know exactly what is going to change in the update, why should I update it? Which leads me to the next point…
  3. Automatic app updates are evil – Yes, they’re evil. How many times has Facebook slipped in something nasty and you didn’t even know it till you got the update? There are two types of nasty Facebook has slipped into your devices over time – the first is when they change the user agreement. So often, we would go to the website and Facebook would make us check a box and hit Accept before letting us burst out our Likes and jealousy. We’ve all brushed past those to chat with our friends. The same applies to app updates. You open the app to answer the call of a notification and an annoying pop up tells you to just say YES before you can do what you came here to do. What option do you have other than to stab that yes button? The second nasty is the more insidious version – Facebook has been able to slip in all kinds of dirty code, tracking features, and nasty experiments into our apps simply by adopting frameworks that let them remotely update our apps, and by using vague release notes that just said “making some improvements”, even when they were shipping major changes to your Facebook and Instagram experiences. This must stop, and the easiest way to make them stop (even though we’re too far gone now thanks to their remote app update frameworks), is to stop automatic app updates.
  4. It’s bad for security – This goes against everything you’ve ever heard. “Automatically updating software is great! It keeps things secure!” Until, it doesn’t. Software is eating up our life and yet, pretty much all of us are rather careless about the security of our apps and services. For most technophobes, automatic app updates are both a boon, and an excuse to hide behind. “Hey, I keep my apps updated, but I still got hacked!” Well, did you consider 2FA? Did you try to understand whether you’re using insecure communication over insecure networks? Did your app have the requisite features to protect your privacy, like data encryption? Are you using the same password for fifty services? We would all be more knowledgeable about all those questions if we bothered to understand what goes on in the making of our apps, the design decisions taken by the devs, and the shortcuts they take to ship sooner. Which leads to the next point –
  5. It’s a surprise! – it feels great to open an app the first time in the day and notice that something has changed overnight, but more than once, I’ve been bitten by apps that changed their business models, removed features, and made decisions that affect me, without so much as bothering to explain that a change is coming. This attitude is a right that a developer feels about a piece of code that they’ve written, but it’s a piece of code that I licensed from them and is running on my machine. They should not be able to decide how that code changes for me. By removing automatic updates, we’re forcing developers to explain why we should be getting this new update, rather than letting them get away with “we removed bugs!” or the boilerplate crap big tech companies throw at us.

Until things change and developers become better documentation writers, and tech companies stop lying about the code they’re sneaking into our machines, I have one suggestion –

Don’t do automatic app updates. Do expiration-based ones instead.

Right now, automatic app updates are an all or nothing deal. You either trust Apple and third party devs completely, or your don’t. I fall in the latter category and I couldn’t be happier! I know that I’m gonna get exactly what I paid for an app (especially if it’s free), and it’s going to work exactly as I expect it to for a long time to come.

Well, almost. Apps often have massive API changes, or security updates that are absolutely essential. The only way for devs to push those through is to expire the version of app currently installed on your devices, and force you to update (when you open the app the next time, at the crucial moment when you actually need the app). I’ve seen a lot of important updates like this, like when my banks update their APIs, or my insurance firm tells me to get the update else I won’t get continued service, or my grocer decides that I can’t get to my weekly ‘one dollar off’ coupons until I get the latest and greatest app update they’ve pushed out.

OK, that last one is silly. Apps like my grocer and my insurance app should always work. If I’m in front of a cop who’s asking for my insurance info, it would suck if I have to tell her that I have to update my darn app before I can show it to her. Also, why the heck does my grocer need to update the app once a month? Haven’t they heard of APIs?

Situations like those cause me to propose the solution I’m presenting, though, it’s obvious that it should be taken with a pinch of salt, since it’s not the perfect solution.

Here’s what we should do –

Apps shouldn’t get auto-updated. Instead, this should be a deliberate process. We need to be able to approve everything that goes into our devices. Yet, some apps are essentials, and though I don’t open my insurance app every day, when I open it, I expect it to work instead of showing me a banner to update the app before I can continue. So those essential apps should have two options – either I let them auto update completely, or I let them update only when the app is marked as ‘expired’ by the developer. The benefit of the latter approach is that devs should have a legitimate reason, such as changing their API drastically, that should drive app updates. Does this put more strain on Apple’s app approval process? Yes. Let’s make them earn that 30% they take from the devs, and the hundreds of dollars of Apple tax they collect from us.

I’m not interested in the smaller updates. I’m interested in keeping my apps available when I need them. So if I can skip the small ones and only get the big, breaking news updates, I’ll be a happy camper.

But this may not suit everyone. Some people don’t care about how and what changes are coming to their devices, but that’s what got us into this mess before with Apple and the battery issue which Apple effectively cheated and lied to us about, and Facebook and every privacy scandal they’ve been able to walk away from.

I believe that if you want to remain that kind of person, you have the full right. So I would love to see all of these options incorporated into the next iOS, or the one after that. The future is customization and personalized feature sets for everyone. It’s more expensive due to that, but that’s just where we’re headed. Hopefully, we’ll get to enjoy some good software on the way.

A couple of things about the iPadOS.

To me, this is the most exciting consumer announcement at WWDC today.

Everything, from better copy/paste (that terrible tap UI be damned), to the new Apple ID based app sign-in (it’s been a long time coming), to the fact that you see footnotes on the iPadOS page for the first time at about 70% down the page (when they mention speed improvements, which are already a sore spot for Apple), tells me that Apple has finally accepted that the iPad is not just a ‘bigger iOS device’ but a thing in itself.

Some of the ideas they’re throwing at us are reminiscent of OS X jiggery-pokery (like Today widgets, and App Expose and app spaces), while others, like Apple Arcade (gaming subscription service; akin to Amazon FreeTime Unlimited) seem like good improvements that Apple needs to keep their services business growing.

Apple’s long road to merging Mac and iPad app development is on the cusp of breaking out, and their continuity and handoff features are getting better and better.

The best part was the range of iPads that this new OS supports, which is a good job, well done, Apple.

I realized recently, that we use our iPads horizontally almost exclusively, and Apple should ideally twist the Apple logo in the back by ninety degrees. Perhaps this software change is the first step to embracing this new mentality.

So true. My reading challenge has reached a slump. It’s not that I’m stuck on a book, it’s just that other things are getting in the way. Sometimes it’s all about reupping your commitment 😊
#keepreading #readingchallenge #quote

A note on the Indian National Congress

The New York Times, reporting on Modi’s win in India –

What scion? Rahul Gandhi is a mediocre politician at best, and a terrible orator on most days. His gaffes at the mic and in front of the media are legendary. Videos of him screwing up basic general knowledge, though certainly well edited by the BJP and its paid media houses, shed light at how utterly incapable he is as a leader.

I’m as liberal as they come, and to me, it is a joke that the media pits Modi’s wins as the rise of nationalism vs the liberal left. It is not. It is a backlash against Congress, one of the most corrupt political parties in the world. In many ways, Modi’s victories are not just the BJP and Amit Shah’s doing. The ‘blame’ lies also on Congress’ own shoulders. Here are the reasons –

  1. The first mistake Congress has made is corruption. Decades of corruption scandals, unchecked fraud, unjailed politicians and business leaders, and unending investigations, have led the commoner to believe less and less in the party’s ability to lead us into the next century. In that backdrop, any leader who shows a spine would seem to be a better option, let alone someone with media savvy and a track record for economic growth.
  2. The next mistake is complacency. What change has Congress brought in itself, that voters would look to them with hope? The biggest joke is the idea of the politician working for the people (I don’t even want to address the ‘servant of the people’ idea), because that’s not what dynastic politics is about – it’s about serving oneself and one’s own future generations. At every step, Congress has done well for its own coffers, but less and less for the people. That is not to say that there has not been economic growth under Congress, but has been been due to, or despite? The current political climate in India is a response to that question.
  3. The most important mistake that Congress has made is that it is not a political party of India. It is the Gandhis’ political party in India. It is a personal club that every Gandhi automatically has entry into. This is wrong. If Congress wants to become relevant again at the national stage, it needs to come out of the shadow of its current leaders and let new voices be heard. The definition of letting the youth take reins is not the let the next Gandhi in line become your new lynchpin.

I’ve called before for the removal of Mark Zuckerberg as CEO of Facebook. Regardless of who has been responsible of the many, many security and privacy blunders by Facebook over the years, the person most responsible for them, the one who set company culture, who oversaw the main aspects of how Facebook makes money, is Zuckerberg. Letting him go will let Facebook focus on what is important – building a platform people want to come to. Right now, Facebook is mired in infighting, theatrics, and a faltering ethical compass that is not helped by Zuckerberg’s total domination over the platforms he runs.

The same is true for Rahul Gandhi. Far from being a charismatic leader or an adept politician, Gandhi is a no-name entity in Indian politics, bound to keep making the same mistakes or worse, that have so marked Congress’ recent history in India. Why should the people not demand his and all other Gandhis’ removal from the party, so that it can reboot, refresh, and move forward?

The Indian democracy is still young, and can afford to make some mistakes. But letting the Gandhis maintain control over Congress is not just a small mistake. It weakens the largest democracy in the world by beholding an entire national entity to the whims of a few inept politicians. The path from being the largest democracy to the greatest one lies through a few important sacrifices.

Let’s make sure that we hold Congress responsible for their choices, so that India as a country can make better ones.

Notes on setting up Freedbin

Here are some notes on how to setup Rachel Sharp‘s Freedbin, which is a docker version of the popular Feedbin RSS feed reader.

I had some trouble setting this up on my Windows 10 machine. A lot of issues I faced had to do with setup and environmental variables. I don’t think I faced any real issues due to my host being Windows, other than the terrible thing that Windows 10 itself is. Anyways.

First of all, I had an already running version of postgres for other docker images, so there was a conflict I was not able to resolve, since Rachel’s docker compose file calls its images directly from Docker Hub which are not easily configurable. If someone can guide me to using the same postgres instance for two docker projects, that would be great! Right now, I have two docker containers running postgres.

So, (real) first of all, I downloaded the repo to my own machine to make modifications.

To begin, in the docker-compose.yml, I changed the name of the service from postgres to postgresfeedbin and changed the port to 5433 instead of the 5432 which was already in use.

I also changed the app image from rachsharp/feedbin to a local name freedbin_app and added the build line, so I could build the changes I’m putting in.

I added the restart unless-stopped line to ensure my containers never stop! 🙂

There’s a discussion on the github repo about replacing Postlight’s Mercury service with our own open source version of the same. Postlight has sunset their own servers, so it makes sense to use our own. One alternative is to use Feedbin’s own extract service, but that is available only in the newer version of Feedbin, which Rachel’s docker container doesn’t use. Instead, I already had a docker image of Mercury from the docker hub that I’ve setup for tt-rss and other projects, which I just connected to, using the MERCURY_HOST environment variable. In this setup, the MERCURY_API_KEY doesn’t do anything. Mercury just ignores it and it seems that so does Feedbin.

All of the above are summarized here, as part of the docker-compose.yml file –

app:
    # image: rachsharp/feedbin
    image: freedbin_app
    build: .
    restart: unless-stopped
    environment:
      - MERCURY_HOST=http://192.168.99.100:3000
      - MERCURY_API_KEY=abcd
      - SECRET_KEY_BASE=abcd
      - POSTGRES=postgresfeedbin
      - POSTGRES_USERNAME=feedbiner
      - POSTGRES_PASSWORD=feedbiner
      - PGPASSWORD=feedbin
      - DATABASE_URL=postgres://feedbiner:[email protected]:5433/feedbin_production
[...]
  postgresfeedbin:
    image: postgres
    restart: unless-stopped
    command: -p 5433
    environment:
      - POSTGRES_USER=feedbiner
      - POSTGRES_PASSWORD=feedbiner
    ports:
      - 5433:5433
    expose:
      - 5433
    volumes:
      - postgres_data_feedbin:/var/lib/postgresql/data
volumes:
  redis_data:
  postgres_data_feedbin:

I further had to make changes to the startup_script.sh file as here –

if psql -h postgresfeedbin -p 5433 -U feedbin -lqt | cut -d \| -f 1 | grep -qw feedbin_production; then

As seen, I’ve just pointed it to the new service name and port.

At this point, the service was able to start. I was able to create an account and get in and add feeds. However, I follow a lot of feeds and importing an OPML file makes good sense for me. But, the import settings page was failing to import due to a failed AWS config. I looked up solutions and one way around is just to disable a connector called CarrierWave, which connects to AWS. Guess what gets disabled if you disable CarrierWave? The import/export page.

So, I went about creating an S3 bucket on AWS, getting credentials, and making the S3 bucket publicly accessible. I don’t know why this is the case. Perhaps if we use a newer version of Feedbin, these issues will not pop up, but in Rachel’s version, this is the case, so I went with it.

After I made my S3 bucket and got the AWS credentials, I added them to the Dockerfile as here. The variables are already there, just need to be filled up –

ENV FONT_STYLESHEET=https://fonts.googleapis.com/css?family=Crimson+Text|Domine|Fanwood+Text|Lora|Open+Sans RAILS_ENV=production RACK_ENV=production AWS_ACCESS_KEY_ID='my_key_id' AWS_S3_BUCKET='my_bucket_name' AWS_SECRET_ACCESS_KEY='sooooo_secret!' DEFAULT_URL_OPTIONS_HOST=http://localhost FEEDBIN_URL=http://localhost PUSH_URL=http://example.com RAILS_SERVE_STATIC_FILES=true

There’s one more catch. The Feedbin code uses its own version of CarrierWave called CarrierWave Direct, which defaults to try to use the ‘us-east-1’ region for AWS. If your bucket is there, you’re fine. Mine is in ‘us-west-1’, so I had to go into the /config/initializers/carrierwave.rb file and change the following to add my region –

config.fog_credentials = {
      provider: "AWS",
      aws_access_key_id: ENV["AWS_ACCESS_KEY_ID"],
      aws_secret_access_key: ENV["AWS_SECRET_ACCESS_KEY"],
      region: 'us-west-1',
}

Finally, I am ready to build and deploy. Running the following command –

docker-compose build

You’ll notice a new image in your docker images list –

$ docker images
REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
freedbin_app                  latest              20a0334cd11c        30 minutes ago      1.27GB

and now you can deploy –

docker-compose up

It takes a while, as Rachel mentions somewhere, but all services come up perfectly, and I was able to import my OPML file. I noticed that the S3 bucket holds the lone OPML file, so perhaps it won’t cost me any money? Eventually, once I know that the import is done, I’ll go in and delete the bucket.

Big, big thanks to Rachel Sharp for creating Freedbin. It’s a great way to get started on Feedbin and while I was working on setting this up, I learnt how to use docker, created my first Docker container and uploaded my first project to Docker Hub. Hopefully, I’ll be able to build Freedbin from scratch using the latest Feedbin code and Feedbin’s extract service, and using the principles set down by Rachel.