Nov 23, 2019

Dear Bachelorette

Dear Bachelorette,

I'm a failed entrepreneur and a jaded digital nomad. I like reading, sports, the boring usuals... and street raves in heavy third world environments.

A next chapter in life would include backpacking from Europe to India for a retreat. But I can't do this if you capture my heart. That's how humans work! I'm sarcastic. I'm Bostonian. I speak wisely of human proclivities. Ben Franklin was a boss, along with Hitchens and Hemingway, my favorite holders to the pen.

Are we the resounding complements to each other's souls? I'm not a Renaissance man. Self adherence is confirmation of one's ignorance. Here's to a cocktail in your chicest blazer and heels. I'm ready to rock someone's world. You?

Do excuse anything off-kilter in this note. I had one too many Manhattans at a bar mitzvah last night. But the schnitzel and the sermon were on point.

Duly,
William Randall

Jul 29, 2018

Android Developer Experience Questions

1. Do you feel like a lot of your development time is spent debugging differences between platform releases and API levels? Are you annoyed by this? Does it feel wasteful? Does it get easier and less painful? As a beginner I felt like I spent too much time on this and it got really annoying. Made me wonder if iOS development is any smoother. I realized that any tutorials or stackoverflow material that's more than 6 months old might not be useful. Should people always be tagging their posts with their API level and I should always look for this? I've wasted hours trying to implement things (as simple as a Camera Activity) that are deprecated or incompatible with the system image / AVD I was using.

2. Why does opening Android Studio feel like a bomb going off every time? Multiple consoles and panes finish loading at different times, minimized and maximized at weird sizes, gradle. The more I learn to code the more I can't stand IDE's, and I'm happy that with React Native development I can at least use the 'emulator' command-line tool to create and run AVD's rather than open up AndroidStudio to do it. Command line only does what I tell it to do :)
.
What do you recommend as another part of the Android experience that I could abstract out of AndroidStudio and via command-line? Gradle? I found some tutorials on how to do the entire Android dev experience via commandline (shell script, compiling, .apk), anyone ever try or recommend it?

I've had many occasions where my app is working, I shutdown my computer, resume the next day and BAM its like the entire thing is destroyed, all sorts of misc problems either when I load AndroidStudio or try to run the app again. It is so frustrating.

3. Ive witnessed a few users on stackoverflow ranting about their discontent with how upgrading AndroidStudio or SDK's, API levels or various things can really wreck havoc on their apps and set them back. I see a lot of Android hate from android developers themselves, which I don't witness with other technologies I've worked with (other than Solidity for Ethereum development). One user on a google forum was named 'Deleted User' account so i was concerned maybe Google censored he/she because they wrote such a nice piece about why developing on Android sucks so bad.

Any feedback to this?

Jul 22, 2018

Technical Evaluations of Blockchains and How To Start Developing with Them

Technical Evaluations of Blockchain and How To Start Developing With Them

How I started with Decentralized Technologies
I started running nodes of various blockchains in early 2017. I found this was a more powerful learning experience than reading the hype and FUD in places like Reddit or Coindesk. It allowed me to interact with these distributed systems that breathe 24/7 and develop perspectives and knowledge based on my own experience and not someone else’s speculation.
Working from the command line with blockchain nodes represents their most fundamental and primitive behaviors. Same with reading through every line of the logged output of a running node. Some things you’ll see across all blockchains:
  • transactions being verified
  • your command line (or javascript client) requests received via RPC API bitcoin RPC ethereum RPC
  • peer node discovery
I recommend learning each command by running command -help which ought to show you the arguments that accompany it. Further you can often learn each argument by running command <arg> -help
node_name --help
node_name <command> --help
node_name <command> <arg> --help
// e.g. 
geth --help
geth <command> --help
It “should” correlate with what’s in the whitepaper and documentation. Finding solutions in these `— help` pages is a lot faster than changing context to Chrome for web searches.
Note — the most current version of a blockchain software you download is not necessarily the most stable or widely used. This was not clear when I started following an ethereum tutorial that was web3.js v0.2. I noticed its methods and async management were different than web3.js I had just downloaded, which turned out to be v1.0. After reading through lots of online discussions it sounded like everyone was still on v0.2 on Prod and v1.0 might still have stability issues so people were hesitant to switch to it. Normally you npm install a module and you know its the latest and greatest version. Well that’s not the case in the Wild West of Crypto :)
Look how much different the web3 v0.2 documentation looks from the web3 v1.0 documention. Incredibly confusing when its your first time using these and you don’t know which to use!
Is this Blockchain a Maintained Repo?
Go to the Github repo and click Insights, then see how many contributors there are. I like to get a sense of, “How many developers (hopefully +10) are committing code daily, for months at a time?”. Remember there are multiple repo’s involved so you’ll have to decide how to weigh these contributions against each other. Or when you first load the repo, see how many directories or files were updated “days ago”. If there’s +100 files then ctrl+f “days ago”.
Glance at the open Github Issues and see if developers are replying to issues people are opening. Take note out how many Closed Pull Requests there are.
Do Not Expect a Node and Private Net to Run On First Attempt, You’ll Have to do Some Tweaking…
To this day I’ve never found instructions that work on first attempt. I think I can remember manually installing C libraries for EOS in 2017 because the build.sh script still didn’t do that yet, as I was getting errors missing c library. You’ll have to deduce many things on your own.
Its amazing to re-vist these blockchains every few months, `git pull` from the dev branch or even find a famous update (e.g. Ethereum Dawn 4.0) that was tagged and released recently, to see what’s new, and if the developer experience is any better. Don’t forget to change the branch you’re on in the github repo because the README and docs might be completely different. And anything more than a few months old on stackoverflow or its stackexchange might be outdated too. Same for youtube video tutorials.
Containerized Deployment
I look first for the Docker instructions as this is an isolated environment that won’t get interfered with by years of development SDK’s and dependencies bloating your personal machine (e.g. errors start surfacing regarding random things like homebrew or npm, because the build scripts are using them). If you start running mainnet nodes and deploying PROD smart contracts you’ll use a deployment like this anyways, unless you’re using a node that someone else hosts (e.g. Infura for ethereum geth).
Building from Source is hard but you can learn so much more. Sometimes its the only option. I recommend trying this last as you could end up with dependency rot if you only get half-way through then try to un-install things.
Is the Blockchain ready for Smart Contracts and Apps?
I look for the presence of a javascript client library. Look at the parent-most Github repo:
https://github.com/EOSIO // shows the javascript client underneath
https://github.com/EOSIO/eosjs
https://github.com/EOSIO/eos // is the eos node itself
https://github.com/bitcoinjs is separate altogether from
https://github.com/bitcoin/bitcoin
https://github.com/input-output-hk Cardano has everything under IOHK
https://github.com/input-output-hk/cardano-sl

Avoid The Hype
Some crypto communities emit an air of, “We’re established, come use us, we are superior and invincible, you will be forced to use us one day” but that’s rarely how anything is ever adopted. You need activism. You need partnerships. So see if the blockchain is doing anything on this front (e.g. partnering with academic institutions, governments, sponsoring hackathons) It’s a good sign. Recall that much early UNIX development came from academia. For instance, BSD (Mac) UNIX at the University of California Berkeley.

There is so much money involved from early investors and ICO’s that its inevitable people will play favorites. Tribalism. In my opinion, a lot of OS development in past decades was more hobbyist, and people were not raking in millions of dollars just to play around with these things in their free time. Can you expect an engineer with 99% of their portfolio in a single cryptocurrency, which they acquired in say 2015/2016 (so worth big $ today) , to succeed in objectively evaluating the potential of alternative blockchain technologies and maintain an open attitude towards them? #balancedPortfolio
For any blockchain on reddit r/blockchain there’s usually another one with dev appended to it, so try to find that:
r/eth r/ethdev
r/eos r/eosdev
I think r/eth r/eos r/bitcoin are a little heavier on the hype and FUD and people regurgitating catch phrases and tech buzz that no one understands.
“We’re established, come use us, we are superior and invincible, you will be forced to use us one day”
There was a similar movement with the same mantra that rocked the globe but during the 18th century. It was called communism and socialism. They thought they were so right, similar to crypto fans who sit around staring at coinmarketcap.com all day thinking this will somehow 10x the price and get people to adopt crypto. Nothing is immune from failure, and this pathetic attitude is only going to increase your chances.
Additional Troubleshooting
  • When you get command not found, the binary executable is often laying around somewhere in the project files. Poke around the /build or /outputand see if the name of the module/command is in there. Call it directly via like ./build/command or set an alias to it in your bashrc/zshrc
  • These binaries might be available immediately after git clone but sometimes you have to Make or build everything first by following the instructions or build.sh, which will then put it to /build
  • The project structure and files in the Docker build don’t always match what’s in the local build from source. You’re on your own :)

Jun 22, 2018

Free to Drive, Saudi Women Still Must Take a Back Seat to Men - The New York Times

Badass Saudi Chick on a Harley
Let FREEDOM RING!
https://www.nytimes.com/2018/06/22/world/middleeast/saudi-arabia-women-driving.html

Mar 29, 2018

The Ultimate Party Checklist

  • Street hockey in a driveway, with whiskey on the side
  • Nerf guns
  • Beach ball and wacky noodles
  • Christmas lights, clap lights
  • Linoleum floor for breakdancing
  • Sombreros and top hats
  • Neon shades, party beads and hawaiian shirts
  • Dry-erase whiteboard and markers
  • Dog, goat, pig or other farm animal
  • Mulch bike jump and a lawn
  • Rocking chairs with a bonfire and 40oz's beers
  • Acoustic guitars (2), bongos, djembe, conga
  • Triangle bell, slide whistles and kazoo
  • Surround sound with studio monitors or a PA system
  • Retrofitted ghetto blaster running on 10 Size D batteries
  • Playing cards
  • Flatscreen HD showing Snowboarding and Surfing videos all night
  • Bubble machine, Smoke machine
  • Black lights and glow paint, face paint
  • Dance Pole
  • Beanbag chair
  • In ground pool
I can set this up for you for a price. Contact for details.

Dec 1, 2016

The Tiered Approach to Crowdsourcing And Activism

Here's a story about what inspired me to start developing an activist crowdsourcing platform, in hopes of effecting real social, political and economic change.

The Inspiration:
I'm a registered Democrat who voted Democrat in 2008 and 2012. Over the years I grew frustrated with how unprofessional the candidates and news pundits were in things like their personal attacks on each other, or the ridiculousness of the topics they choose to cover (email servers, tax returns, birth certificates, things that have nothing to do with a candidate's ability to perform as president). I also didn't like the Democratic or Republican candidates that won the primaries.

I rebelled against the traditional parties by voting Libertarian in 2016 as a form of protest. I felt my message was clear, "Democrats & Republicans, get your act together and stop acting so childish, or I'm not voting for either of you ever again, nor am I ever watching CNN, MSNBC or Fox again. And I invite the +200 million eligible voters to join me in doing the same. We are the boss and at the top of the hierarchy, not you. You will do as we say, not the other way around." 

The only problem was that I lacked a way to organize +200 million eligible voters into a movement like this, and I wasn't sure of the true efficacy or potential consequences of my request.

The Solution
The solution I devise is a tiered crowdsourcing approach to activism. Here are the main parts to it:
  • It is a crowdsourcing platform where users can submit and vote on ideas for simple behaviors they can perform in unison that will pressure a target interest group into doing something in return.
  • Voting is done bracket-style (tiered) where after each round of voting, the most popular ideas advance. This continues until a critical mass or final round is reached.
  • Users share an implicit agreement that they'll vote until the end and perform the behavior together. They can drop out at anytime.
  • The quantifiable accumulation of actors is what incentivizes people to stay in. The platform, or app, will show this number in real time.
  • Users agree to not stop performing the behavior until the favor is returned be the target interest group
  • The basic example is a boycott.
  • The end goal is social, economic or political impacts
  • The behaviors need to be implemented on a large scale, preferably by millions of people
  • 1 million users performing the same 1 behavior together is more effective and impactful than 1 million people performing 1 million different behaviors (i.e. 1 behavior per 1 person)
  • Ideally the platform should be de-centralized, like a blockchain technology.
  • See the Case Study and analysis that ensue
Case Study
There was a pop music contest around Christmas time in the UK, where the artist whose song got downloaded the most would win a prize. One of Simon Cowell's proteges (Chris McElderry) from the X-Factor was projected to win, but Tom Morello from Rage Against The Machine knew the British were tired of low quality pop music being shoved down their throats, so he told them, "If you download more copies of our song "Killing in The Name" than McElderry's hit, then Rage Against The Machine will play a free show in the UK for you".

Simon Cowell gawked and howled at this social movement but it ended up winning with 500,000 downloads to McElderry's 450,000. That's 500,000 people who each paid $1.00 to download a song that was +15 years old at the time. Rage played the free show. Had those 500,000 people downloaded 500,000 different songs, they wouldn't have stood a chance vs McElderry. Rage Against the Machine: Simon Cowell admits he took Christmas No 1 for 'granted’

Is this an example of a simple behavior that made an impact on a large scale, and could be implemented through a crowdsourcing platform?

Case Study vs. My Approach
There are some key differences between Rage's approach and mine.

Rage didn't use a tiered crowdsourcing approach - they had a lead spokesman propose the idea and 500,000 people agreed to enact it. I believe that through a tiered approach, we could effect the same.

Rage offered a guaranteed tangible reward (i.e. a free show) to the British in return for downloading Killing In The Name and beating Simon Cowell. My approach can't technically guarantee its tangible reward (i.e. professionalism in politics and media) in return for performing the proposed behaviors (i.e. boycotting establishment party votes and news media). However, in the history of sociopolitical movements, is anyone really able to guarantee that their means for attaining their ends will in fact deliver those specific ends (e.g. non-violent protest in the Civil Rights Movement)? I think not, and this is reason enough to take radical approaches much like the forefathers of our country took radical approaches to dealing with the British. To the naysayers who don't believe in my idea, I ask of you, "What is your proposed alternative?" I favor action over inaction, any day of the week.

Problems & Reflections
Yes, I'm aware people will vote to perform behaviors and not end up performing them, but that's a problem with nearly anything you try to motivate people to do (e.g. exercise). I fall back to my previous point here, that you at least need to try to motivate people. Its better to try to motivate than assume people are inanimate objects.

Practically speaking, a massive and quantifiable group of actors claiming they'll do something will inevitably draw the ire of the party its targeting, even before the critical mass or final vote is reached. Its like a petition.

 A real problem for pontification - people might nominate and vote on behaviors that aren't so progressive. Jokes, pranks, or worse.

Conclusion
Does my ideology stir up an us-vs-them mentality? That politician's aren't to be worked with? That there is no collaborative communication medium between the working class and the elites? I argue that an activist crowdsourcing platform is the collaborative mechanism because it conveys the wants of the people to the elites, in plain view, using an open-source technology, in a direct tit-for-tat fashion that bypasses the arduous legislative processes that only specialized labor (lawyers) can withstand and manipulate.

Not only does activist crowdsourcing communicate but it organizes and manages people into performing behaviors.

To the naysayers, what is your alternative formal communication pipeline to those in power? How rapid and transparent is it? Is it more powerful than lifting one's self from the wrath of broken promises, media dissolution and cryptic law, and setting in motion actionable behaviors and transparent contracts between the oppressors and the oppressed, via an open-sourced activist crowdsourcing platform? If so, then tell me about it and I will help you build it. We're all in this together.

My Inspiration to You
I am appalled by people seeing politicians as holy grails that determine our future, that worry and excite us so much when elected. I maintain that politicians are not the root of the causal chain of  the world's events. Rather, we are the determinants and leaders the future, and politics is a tool that we use along the way. Politics is reactionary. It reacts to the needs of the populace. When is the last time a politician offered you a bunch of useful things you never heard of? The last time she or he made you say, "Oh wow I never though of that one". Politics isn't going to change the fact that we need better public schools. Please, stop giving such a fuck about those clowns on TV. Enough already. Think about yourself before your think about them, or else you are serving them and not yourself. They know what we need. Its time they deliver an. Its time we place the expectation on them to deliver, using a tiered approach to crowdsourcing and activism.

Friendly Message
Scroll to 05:40 and watch https://www.youtube.com/watch?v=0FupB3wetdM

Sincerely,
William