addictedcs | 2 years ago | on: Ask HN: How many of you are self employed?
addictedcs's comments
addictedcs | 4 years ago | on: Happy New Year HN! What are your plans for the new year?
Balancing it with other duties is going to be hard, though I will try to explicitly divide my time into "one-week marketing / one-week dev work." Inside each week, I will try to have days fully reserved for non-work activities.
Programming keeps me in this perpetual cycle of "one more thing for today/this week" which locks me in the IDE without end in sight. I will postpone any dev work that needs to be done until "dev work week" arrives.
[1] - https://devmarketing.xyz
addictedcs | 4 years ago | on: Happy New Year HN! What are your plans for the new year?
1. Read more books, less social media/news.
2. Spend more time with my friends. I haven't seen some of them IRL for more than a year.
3. Exercise more, play tennis with my daughter, spend quality time with my kids.
4. Spend more time with my parents. They've become visibly older in the last years, an observation that scares me.
5. Focus more on marketing for the businesses that I've bootstrapped. All the shiny new features that are developed are not as important as getting more people to use your product.
6. Promote open-source project to 1k GitHub stars[1]. I know it isn't very meaningful, but it's just nice to receive a bit of recognition from the community.
7. Enjoy life, don't stress about all the little things that happen along the way.
Happy new year!
addictedcs | 4 years ago | on: Beyond Smart
He viewed his performances more as "experiences" and certainly pushed the boundaries of the conventional style of playing classical music. I really like his renditions of Bruckner, and the ending for Symphony N4 probably best describes why [1]. He does not rush, letting the music sync in, undoubtedly different from the "right" version.
Not being afraid of criticism is an essential quality of people who discover new things. Smart people often get dragged into the "correct", "proper" way of thinking, doing science, playing music, drawing, or doing other creative work. This is the best way to learn, but unfortunately, you need to go on an unbeaten path that is often criticized and even ostracized to discover new things. The life of Van Gogh and many others is quite an example of that.
addictedcs | 4 years ago | on: Introduction to Locality-Sensitive Hashing
Treating your binary vector as a set allows you to use min-hashing as your LSH schema (min-hashing is just a random permutation of the given set). This simple trick makes LSH with min-hashing quite a powerful tool for binary vectors that are extensively used in recommenders systems and other domains.
I've used LSH + Min-Hash for image search (and subsequently for audio fingerprinting). If interested, I've blogged about it here [1].
[1] - https://emysound.com/blog/open-source/2020/06/12/how-audio-f...
addictedcs | 5 years ago | on: Shopify says remove Stripe billing or get booted from their app store
addictedcs | 5 years ago | on: Shopify says remove Stripe billing or get booted from their app store
On a different note, I wouldn't recommend building an app that is strongly integrated into the Shopify platform due to a myriad of reasons.
Shopify App store will not give you enough exposure to grow your customer base naturally, you will have to invest in your distribution channel anyways, but now you are tied to a 20% commission since your app is public.
App store ranking system is heavily tuned towards the rate of installations your app has, which means products that offer free, or very cheap pricing plans are getting to the front page. If you offer free or very cheap pricing you will get inundated with customer support requests. The biggest chunk of Shopify customers, have very little understanding how to run an e-commerce store. Handling these requests will be a nightmare. This also means that the Shopify App store is not used anymore by stores that are running on Professional or Shopify Plus platforms, since it is full of apps that are borderline scam, and they can't find valuable services by a simple search.
Shopify understands this as well, that's why they've created Shopify Plus Certified App Store https://www.shopify.com/plus/partners/technology, which is essentially a curated Shopify App store targeting customers who are not afraid of paying money for valuable services. Getting there is not easy since the certification process is not transparent (we've applied but not heard anything from Shopify since then).
Also, Shopify integrates new features into its platform every year getting into more and more verticals. This essentially means that if you build an app that provides important e-commerce functionality, Shopify will probably release the same feature integrated natively into their platform.
All in all, don't bet on the Shopify App Store distribution channel, it is just not worth it.
addictedcs | 5 years ago | on: Moderna’s SARS-CoV-2 Vaccine Phase I Data
addictedcs | 5 years ago | on: Ask HN: How to avoid over-engineering software design for future use cases?
* Focus on the current assignment. Implement it using clean code principles, don't overthink the problem.
* Rather than spending time on design decisions, allocate time on handling edge-cases. These will save you from PageDuty alerts.
* Plan excessive for future use-cases only around data models that insert/read into the database. Data migration is super-painful. A more generic design around your database is almost always preferable.
* Have a feature toggling[1] service in your codebase. It will provide you with a better understanding of how you can implement new features alongside existing codebase in the same branch. Releasing features from long-running separate branches is almost always a wrong decision.
* Always keep in mind time-constraints and how urgent is the requested functionality. Don't let perfection be the enemy of productivity.
* Have a process in place that allows for the technical debt tasks to be tackled independently. It helps fix some bad design decisions, which become apparent in light of new requirements.
addictedcs | 5 years ago | on: The Early History of F# [pdf]
* actor-based approach to concurrency[1]. Very useful when you want to design your code lock-free. Treating instances as agents that read messages from a mailbox, frees the developer from using low-level threading primitives. First time I've used this approach in production with AKKA and Scala. In F# it is much cleaner because the language itself is built on a better platform.
* exhaustive pattern matching[2]. Writing in F# means using pattern matching a lot. Exhaustive matching gives you the confidence to refactor and maintain your code. The compiler will warn you when adding a new value in your type and not covering the execution path that uses it. It catches a lot of errors before you even push the changes to CI.
* obviously immutability, conciseness, currying, these have been mentioned so far by others.
One nitpick in F# are Exceptions [3]. They approached it similarly to how it is done in C#. You are allowed to define and throw an exception that will "jump" somewhere in the execution path. I prefer when a method returns Option-style types. This way, you know what to expect from a call, and pattern matches on the result without adding one more execution path in your code, which covers exceptions separately. It was added to support C# style error handling, though I very much prefer an error-code-based approach.
[1] https://fsharpforfunandprofit.com/posts/concurrency-actor-mo...
[2] https://fsharpforfunandprofit.com/posts/correctness-exhausti...
addictedcs | 5 years ago | on: The Mathematics of Music [pdf]
If you want a more interactive source you can play with python notebooks from the music information retrieval site [2]. I've found it helpful, as you try some of the described music theory concepts in a programming environment.
Shameless plug, I've also written about how audio fingerprinting works [3], which touches on some of the topics regarding music theory.
[1] http://www.musimathics.com
[2] https://musicinformationretrieval.com
[3] https://emysound.com/blog/open-source/2020/06/12/how-audio-f...
addictedcs | 5 years ago | on: Ask HN: Dear open source devs how do you sustain yourself
Other use cases are divided between game development, repeating content detection, robocalls detection, or just iOS/Android apps for Shazam like style features.
Surprisingly a couple of times, I was asked about recognizing birds by their singing. The library can't do it, but it is something I am thinking about exploring one day.
addictedcs | 5 years ago | on: Ask HN: Dear open source devs how do you sustain yourself
Overall I invested a lot more time in it than the monetary reward I received. I don't complain since I enjoy working on audio/video fingerprinting and databases. On top of it, the pay at this stage is on par with a regular SE job with the bonus of working on things that I enjoy. I can call it a bootstrapped business now.
In some sense, I think about opensource similar to the work of art. You do it because you genuinely like to create/build things and showcase them to the general public. You don't do it because of the monetary reward. A good writer is one that has to say something, not one who writes for the sole purpose of getting on the NT bestselling list. Opensource is similar.
[1] - https://github.com/AddictedCS/soundfingerprinting
[2] - RAM-based storage, bounded by memory limits
[3] - https://emysound.com
addictedcs | 6 years ago | on: I thought I understood recursion
addictedcs | 6 years ago | on: An update on YC China
addictedcs | 6 years ago | on: An update on YC China
addictedcs | 6 years ago | on: Driverless cars are stuck in a jam
addictedcs | 6 years ago | on: Programming Idioms
"One common solution is to use a static field to store a single instance of Random and reuse it. That’s okay in Java (where Random is thread-safe) but it’s not so good in .NET – if you use the same instance repeatedly from .NET, you can corrupt the internal data structures." [2]
Very often the very same resources which claim to be the source of truth provide bad code examples.
[1] https://www.programming-idioms.org/cheatsheet/Csharp
[2] https://codeblog.jonskeet.uk/2009/11/04/revisiting-randomnes...
addictedcs | 8 years ago | on: How we bootstrapped a startup
addictedcs | 8 years ago | on: eBay launches visual search tools that let you shop using photos
[1] - https://emysound.com [2] - https://github.com/AddictedCS/soundfingerprinting