Building Together: Part Two
Part one of my “Building Together” series, Ingredients for Successful Collaboration, covered the origin story of the Elentra Consortium, an international open-source (turned community-source) software consortium in Canada, the United States, and Singapore. I also defined what I believe are the key ingredients that made our collaboration successful in the first place. If you have not yet read part one, I recommend starting there.
In part two, I will cover the lessons we learned while building and operating our consortium for over a decade. Some of these lessons we got perfectly correct from the start, others we had to learn the hard way.
Building Together: Part One
Last year, my friend and colleague Zhen Gu and I gave a well-received presentation at the AAMC IT in Academic Medicine conference in Washington, DC, called “Building Together: Lessons Learned Building a Consortium.” Creating this talk was fun but challenging, as it forced me to distill a tremendous amount of experience gained over fifteen years building an international open-source (turned community-source) software consortium. After presenting our talk again in the fall at the Elentra Engage conference in Pasadena, California, I felt that our important work would translate beautifully into an article for my website.
In this two-part series, I will share some incredible lessons learned while building our consortium alongside 20+ universities. I will provide my unique perspective on the most significant opportunities and challenges of working together, the importance and power of building community, the balance of governance, and the ingredients we believe are necessary to collaborate successfully.
At this point, I feel like my blog has become a place to store solutions to technical issues that have caused me frustration. Definitely not my intent, but it is what it is.
This week I wanted to do something I thought should be pretty straightforward: dump/export all of the views from a specific MariaDB/MySQL database. I only wanted the views, no tables, none of the data, just the views. There were several partial solutions on other websites, Stackoverflow replies, and from ChatGPT, but nothing I found was a complete solution. The following was my final solution:
mysql --user=root \
-e "SELECT table_name FROM tables WHERE table_type = 'VIEW' AND table_schema = 'the_database_name'" \
INFORMATION_SCHEMA | xargs \
mysqldump --user=root \
the_database_name > the_database-views.sql
Lastly, don’t forget to update both hard coded instances of root, password, localhost, and the_database_name with your actual MariaDB/MySQL username, password, host, and database name.
If you have a better solution, please feel free to let me know and I will update this post accordingly.
I have been using Docker Desktop for well over five years with very few problems besides the typical host-to-container mount performance issues. After a recent upgrade to Docker Desktop, I was surprised to notice that Docker Desktop would no longer start. It just reported a “Docker Desktop starting…” message and wouldn’t continue.
I tried the typically suggested approaches:
- Checked to ensure I was running the latest build of Docker Desktop
- Via the Docker > Troubleshoot menu
- Clean / Purge data
- Reset to factory defaults
- Reinstall Docker
- Remove Docker from /Applications and empty Trash
- Restart the computer
- Reinstall Docker Desktop for Mac
Finally, after about two hours, a post on forums.docker.com by zcqian put me on the right track, so I wanted to promote it, along with some refinements and my complete solution (try parts or the complete procedure).
- Restart the computer, and make sure Docker is not running. If it is trying to start, then stop it and close it.
- Open your Applications folder and delete Docker, then empty the Trash (or
brew uninstall docker).
- Open Terminal and type:
rm -rf ~/Library/Group\ Containers/group.com.docker
rm -rf ~/Library/Containers/com.docker.*
rm -rf ~/Library/Application\ Support/Docker\ Desktop
- Download Docker Desktop again, and copy
Docker to your
/Applications folder (or
brew install --cask docker).
- Open Docker.
With any luck, you will now be back up and running again. Feel free to leave a comment if these steps change over time, and I will update this post accordingly.
Amid all the uncertainty and turmoil caused by this global COVID-19 pandemic, one thing I am grateful for is a newly kindled excitement to read physical books. As someone who is on screens nearly half the day, every day, I really enjoy the experience of disconnecting and reading a good printed book.
Today I wanted to take a moment to spread the word about A Selfish Plan to Change the World by Justin Dillon.
What if your search for meaning could solve the world’s problems? What if everything you are passionate about could save a life or change history?
In this paradigm-shifting new book, Dillon reveals the secret to a life of deep and lasting significance: the discovery that our need for meaning is inextricably linked to the needs of the world. Drawing upon his own unlikely transformation from touring musician to founder of a global movement and telling the stories of other surprising world-changers, Dillon shows how to create a life of deep purpose by stepping into the problems of the world. Taking readers on a journey from sweatshops in India to punk rock concerts in Ireland, Dillon exposes the limitations of the “giving back” approach involving donations and volunteerism to reveal the unexpected power of “giving in” to pursue self-interest in a way that alters the very dynamics of the world’s most challenging problems.
A Selfish Plan to Change the World is your “self-help-others” guide to a life that matters, demonstrating how you can repurpose your existing talents, backstory, and networks to improve the lives of others. Changing the world no longer belongs only to martyrs and professional do-gooders. You can live an extraordinary life. You can change the world. All you ever needed was a plan.
As I work towards finding my own riot throughout my life, I will certainly refer back to this life changing book. I hope this helps someone else as well.
Two weeks ago, I happily upgraded my Macbook Pro to macOS 10.15 (Catalina), which worked out well. As expected, it feels like a solid, stable operating system, and the update was painless.
Some of Apple’s tooling was also upgraded, including Xcode 11.1. Today I needed to update one of our iOS applications, and as usual, I fired up Xcode > Open Developer Tool > Application Loader. Where is Application Loader? Am I tired? Nope… it’s gone.
From xCode 11 Release Notes:
Xcode supports uploading apps from the Organizer window or from the command line with xcodebuild or xcrun altool. Application Loader is no longer included with Xcode. (29008875)
Well, to hopefully save someone else some painful internet gold mining, you now have two options:
1. If you want to use a GUI you can use the Apple Transporter application, which does the same thing only prettier.
2. If you want to use the command line, Cœur posted this on StackOverflow:
xcrun altool --validate-app --file "$IPA_PATH" --username "$APP_STORE_USERNAME" --password @keychain:"Application Loader: $APP_STORE_USERNAME"
xcrun altool --upload-app --file "$IPA_PATH" --username "$APP_STORE_USERNAME" --password @keychain:"Application Loader: $APP_STORE_USERNAME"
Happy app uploading.
In 2017 web developers worldwide were caught by surprise when Google announced that Chrome 63+ would force HTTPS (via a preloaded HSTS header) on all
.dev domains. This move was frustrating to many developers because .dev names were routinely used during the local development process, and now, unless you want to install an SSL certificate, that practice would no longer work. For example, if I was creating a new website for https://mattsimpson.ca, I previously would have used an unregistered, locally routed,
mattsimpson.dev name on my computer during development, but now I would have to use something else. But what?
Well, it turns out that Mike West at Google kindly suggested a better standard, an official standard, where
*.localhost is actually routed to
localhost, and aptly named “Let ‘localhost’ be localhost.” This brilliantly simple standard would also negate the need for developers to, in many cases, manually modify their local
/etc/hosts file in order to use a new local virtual host.
Besides the fact that this take-over-on-squatted-territory was an inconvenience to so many developers, I genuinely applaud Google’s efforts to enforce HTTPS where it can, and I appreciate the leadership demonstrated by providing a better technical solution for web developers.
All this to say, the .dev gold-rush is on now. Get yours. I’ve picked up https://mattsimpson.dev and also a few other nice ones, including a brilliant one for my daughter Myer (https://myer.dev), who will have the coolest domain if she ever chooses to become a developer in the future.
As I plugged in my Amazon Echo Dot today, an event that happens only once in a while, I remembered that owning this sort of technology is a probably bad idea… when you have three young kids.
Approximately 25-30% of households have children under nine years old, and out of those households, a high percentage have more than one child. Have you been privy to a troop of kids harass a piece of technology before? If not, you should pull up a chair, put on your patience cap, and watch chaos ensue. You wouldn’t think an AI could get angry… well, as it turns out, three kids can make Alexa want to turn herself off.
The whole event caused everyone in the room (AI included) to become frustrated and confused. Then it was turned off… until next time when I forget how frustrating it is.
Do you have stories with children and voice automation? Share if you’d like.
If you happen to be a roaming Telus customer that has a BlackBerry DTEK60 (or potentially other models), and you’re getting a bit frustrated because your mobile data is not working with an error something like this:
Unable to Establish a Wireless Data Connection.
Touch to Open APN Settings
The solution (in my case) was to create and use a new APN other than the default. To do this:
1. Go into Settings
2. Touch, More
3. Touch, Cellular networks
4. Touch, Access Point Names
5. You will likely see two existing APN’s in this list. Create a new APN for
isp.telus.com. Yes, even if you already have one.
To creating a new APN click the + sign at the top, and the only two required field values you need are:
It'll Work Meow (or whatever you want).
Once that new APN is created, select it. You should be good to go.
I have been working a lot recently on my personal mindset. Karla just sent me this quote, which I truly appreciate and speaks to what I’ve been learning:
Intentionality requires more work, more deliberate action, but that’s where all the reward is—an intentional life always tastes best.
I’m pleased to have this opportunity to share. Feel free to comment and share your mindfulness strategies.