mifrai's comments

mifrai | 4 years ago | on: Obsidian – A knowledge base from a local folder of plain text Markdown files

I've been investing in taking notes to enable better understanding of the material. I tend to follow Andy Matuchak's philosophy on note taking (https://notes.andymatuschak.org). But, I've only really started taking notes, so grain of salt about this.

Some thoughts and responses to what you've said:

1. I try to make sure anything I enter into my notes are intended to last, filtering/processing is a key step to that. This often means I won't enter notes unless they can contribute to my understanding of some lasting higher level concept. For example, I don't have any notes on tech library X, Y, Z. But I do have notes on concepts, like "Required accidental complexity should be avoided or separated" and if a library Z has a unique way of doing so, I may incorporate my understanding of the strategy to further my understanding of the concept.

2. My goal is less to simply collect links/articles, it's to process and assimilate. I write everything in my own words to clarify my understanding. I link it to other topics in my notes to help build stronger associations, which helps me ground and recall the knowledge. I'm also exploring whether I want to put some spaced repetition in with my notes to help keep pieces of information fresh.

3. I treat my notes as separate from my todo lists. The extra bit that these tools give you is the linking and clustering of information. I find the associations useful for encouraging identification/contextualization of where that knowledge sits in my current understanding and, periodically, discovering serendipitous connections.

4. I rarely revisit old books as well, but I also find that my recall of those books are terrible. Part of my note taking is to make sure that I have a better chance of understanding and taking away valuable information from those books. It's also worth mentioning that that I don't aim to have notes on the book, I aim to have new concept notes or updating existing concepts with new information.

So what domains do I find these apps useful? It's unclear to me how much I can attribute to the linking the app encourages. But, I do find myself recalling what I've noted much more frequently in my day to day as an software engineer. The identification and concretization of patterns/concepts has helped me be more articulate and have more clarity in my work, particularly when giving feedback to others.

All that said, everybody is different. This process might not work for you, or you may find you don't need it to get the same effects. I know plenty of successful people that don't. And if it doesn't work for you, I wouldn't worry too much about it.

mifrai | 13 years ago | on: Yahoo Mail users hit by widespread XSS exploit

Would following their advice of changing your password actually help in this situation? While it's a good practice in general, if I'm understanding this right, the attacker never has your password.

mifrai | 13 years ago | on: Why learning Haskell makes you a better programmer

I think the Haskell example should've used this type signature instead. Compared to the OP's example, this has a much stronger implication. There's very few implementations of this type that would make sense, whereas with the other one - it could be 'count' of the number of times 'string' shows up in the map; Or it could be number of letters in the provided string (ignoring the map entirely); Or it could be (key - 1); or any number of other things.

Here, you can't just magic into existence or modify an unknown 'a' value.

mifrai | 13 years ago | on: How to terminate your worst enemy's Dropbox account for only $795

I don't have a lot of trust in Dropbox caring about the casual users. [Votebox] is filled with suggestions around 3 years old that have generally gone unaddressed. And this is probably rationalized as "Dropbox works 'good enough'".

So, I'm not convinced Dropbox will do anything unless it is a "PR crisis"/publicly handled. They have their own earnings driven goals and I don't think discontinued Team members will blip on that radar. Maybe if it significantly inconveniences Team admins, but that doesn't appear to be the case - admins don't lose their data and it seems like they only have to click a button.

However, I'm not saying that this is an issue that should have been publicly addressed. I'm just saying that if it weren't, I wouldn't expect much action to be done on it.

[Votebox]: https://www.dropbox.com/votebox/all#votebox:popular:0

mifrai | 13 years ago | on: What Compsci textbooks don't tell you: Real world code sucks

Honestly, I don't think danidiaz was trying to be clever so much as not knowing about the existence of filterM. A good chunk of the code was just an implementation of it:

    filterM' f xs = map fst . filter snd . zip xs <$> mapM f xs
So, given filterM, the code would have looked like

    nexist n xs = take n <$> filterM (fmap not . doesFileExist) xs
Which doesn't look clever at all and it's fairly easy to understand.

mifrai | 13 years ago | on: What Compsci textbooks don't tell you: Real world code sucks

and since Haskell has non-strict evaluation, we don't have to worry about generating too much data (list of inexistant files) for nothing.

Be careful here. Because you're in the IO monad, the entire list of files will always be computed first (ie. doesFileExist will be called for every file given).

Non-strict doesn't really buy you much here. The "expensive" operation here will always be executed. At most, you're avoiding converting some list-consing-thunks to a list.

mifrai | 13 years ago | on: Goodbye, Uploads

Yeah, I'll likely end up using S3. Or maybe even bitbucket.

But there's a very real and somewhat irrational negative emotional response when going from free to not-free. Or alternatively, from included in private costs to a paid for feature taken away.

mifrai | 13 years ago | on: Goodbye, Uploads

Good for them on cutting bloat and focusing on what's important to them.

Bad for me as now I have to find another service to store my project binaries and (likely) add to my monthly bills.

mifrai | 13 years ago | on: The Circle of Fifths, Part One

Similar concept but a little simpler and avoids manually written recursion.

  notes = cycle ["c", "c#", "d", "d#", "e", "f", "f#", "g", "g#", "a", "a#", "b"]
  majorSteps = [2, 2, 1, 2, 2, 2] :: [Int]

  scale note = map (dropWhile (/= note) notes !!) . scanl (+) 0
I think it's less clear, but if you want to avoid the rescan via (!!), then

  scale note = map head . scanl (flip drop) (dropWhile (/= note) notes)
Both result in

  λ> scale "d" majorSteps
  ["d","e","f#","g","a","b","c#"]

mifrai | 13 years ago | on: The keyboard layout project

I personally don't suggest the truly ergonomic. While it's well designed from the outset, the underpinnings are a bit lacking. The existing firmware is buggy and has issues with Mac; and the programmable software has been promised for a while now but was never delivered. To boot, the company's support is nearly non-existent, except for - thankfully - their return process.

As mentioned by gokfar, I really look forward to the ergodox group buy

mifrai | 15 years ago | on: What Killed Waterfall Could Kill Agile

I think it's referring to the sudoku TDD blog series that happened a few years back. Essentially, someone tried to implement a sudoku solver using TDD - and after several posts, never managed to finish. Peter Norvig then came along and wrote a short elegant implementation.

Some use this to say TDD - which has ties to agile - doesn't work. But most people conclude that TDD isn't a silver bullet and you have to know about your problem domain before diving in.

Here's someone elses' blog post which includes links to both sets of posts: http://ravimohan.blogspot.com/2007/04/learning-from-sudoku-s...

mifrai | 15 years ago | on: Are you suffering from burn-out?

Sigh - easier said than done.

Hard decisions are difficult things to do with a stress-shot mind. Particularly when it's so easily framed as "admitting defeat"

mifrai | 15 years ago | on: How to read code

Jakob Nielson argues that, specifically in usability testing, 5 people gives you a majority of your flaws but not the entire picture - where ~15 people would give you that. That is to say, more is better but there is diminishing returns. Given this, he argues that rather then expending resources to gather the entire picture for a single iteration, it's even better to test 3 sets of 5 people with design improvements between each set.

I think this argument is slightly different than just saying 5 people is enough for any sort of study. I still would have liked to seen more people. Or at least additional studies with modifications to inspect or confirm specific aspects of their findings.

mifrai | 15 years ago | on: Practicality: PHP vs Lisp

I fully agree. For instance, PHP implements it's own round function. Now there very well may be a good reason they don't just use/implement the C99 round - but one can at least expect it not to change. This isn't true, in some version (I forget which), they changed their implementation and that caused all sorts of headaches to us and our users that depend on these numbers.

Moral of the story? Don't use PHP for stats.

page 1