DEV Community

loading...
Cubicle Buddha profile picture

Cubicle Buddha

TypeScript nut + head writer at CubicleBuddha.com (other loves are cats, my wife, comic books, and VGs)

Location SE Pennsylvania Joined Joined on  Twitter logo Facebook logo LinkedIn logo External link icon
Work

lead dev by day, head writer at CubicleBuddha.com in the night

Last 250 comments

Make impossible states impossible - Kotlin edition

Great article. However, I will say if you want first party ...

I’m sorry, but this “Full Stack” meme makes me really mad/sad

Very interesting perspective. And I can see how coming from...

“Communicating your needs” / TypeScript’s value from a Buddhist perspective (part 1)

Short version: just use io-ts or tsoa to help check for thi...

I’m sorry, but this “Full Stack” meme makes me really mad/sad

An important part of fully autonomous teams are that they s...

Has your job impacted your physical health?

Yes, sadly I almost lost the use of my hands from overworki...

Will you write code after you retire? How will your relationship with our craft change?

Thank you for the response. That’s very cool. We have such ...

Will you write code after you retire? How will your relationship with our craft change?

That’s interesting that you view it as a job but yet you fi...

Samsara: 5 Agile Techniques to End Suffering And Increase Learning

Thank you! :) I guess another way of putting it would be to...

Sorry C# and Java developers, this is not how TypeScript works

Ditto. This whole issue could be prevented by favoring a da...

Is “Defensive Programming” actually healthy?

If you’re waiting til someone makes a bug report, then you’...

Doing nothing: The cure for procrastination

That’s very kind of you to say! 😍 I haven’t been posting a ...

Is “Defensive Programming” actually healthy?

Simple features have a habit of becoming complex features a...

Microfrontends based on React

Thanks. Have you or your team looked into the import map sp...

Microfrontends based on React

Since a premise of microservices is independent deployment,...

How C# 8 Helps Software Quality

Interesting. I’d love to hear your findings after you exper...

10+ Tips To Find Peace In A Loud Office

Hahahaha

How C# 8 Helps Software Quality

Great article as usual! So have you tried using Entity Fram...

What conventions & widely-accepted libraries exist for building complex backend Node.js apps?

Tsoa has made life so much easier for me when I’ve had to b...

Is “Defensive Programming” actually healthy?

Try compiling this code. The compiler will in fact tell you...

6 ways meditation makes me a better developer

Well said! :)

Is “Defensive Programming” actually healthy?

You might be missing the point when you say this. Based off...

Is “Defensive Programming” actually healthy?

If you can’t tell me why it smells (as in you can’t tell me...

Is “Defensive Programming” actually healthy?

You mention that if statements are a code smell... but what...

Is “Defensive Programming” actually healthy?

Oh yea I would love to use Elm! I asked my coworkers to che...

Why I was wrong about Scrum + “Hard Goals”

You’re welcome! And thank you for the comment. :)

Are Timed Coding Interviews A Good Indicator Of Job Performance?

Yea, the company I experienced this was not a startup. And ...

Are Timed Coding Interviews A Good Indicator Of Job Performance?

I agree. Company misses out on good candidates that might h...

Are Timed Coding Interviews A Good Indicator Of Job Performance?

I’m glad someone took up the opposite side because I have s...

You can now generate self-hostable static blogs right from your DEV content via Stackbit

I’d love to see a comment plugin for wordpress that allows ...

Are Timed Coding Interviews A Good Indicator Of Job Performance?

These stories are getting even worse. I feel much better ab...

Are Timed Coding Interviews A Good Indicator Of Job Performance?

Exactly.

Are Timed Coding Interviews A Good Indicator Of Job Performance?

I hear you, but I think a non-timed code challenge would wo...

Are Timed Coding Interviews A Good Indicator Of Job Performance?

I feel like ideas only come to you when you take time to wa...

Are Timed Coding Interviews A Good Indicator Of Job Performance?

That’s so unfortunate! I’m sorry that happened to you.

Are Timed Coding Interviews A Good Indicator Of Job Performance?

Oh my. Can this please become the the “terrible interview s...

Are Timed Coding Interviews A Good Indicator Of Job Performance?

French has been pardoned. But yea, I should have declined i...

Welcome Thread - v42

For any newbies here, feel free to reach out to me. I’m loo...

Sprints/retros are not "agile"

Why is it silly to compare secular Buddhism and Agile? Both...

Sprints/retros are not "agile"

“[Agile is] not a methodology, it's a state of being. I kn...

5 ways to create a junior developer-friendly culture 🚀

Thank you for #5. I like hearing my coworkers admit that it...

What’s your favorite piece of code that you had to throw away?

It depends. I have some friends who still work on governmen...

What’s your favorite piece of code that you had to throw away?

Good point. Time spent learning isn’t wasted. I do really r...

Optimizing for Iteration: Choosing Your Early Startup's Tech Stack

They’re probably about equal when it comes to availability ...

Optimizing for Iteration: Choosing Your Early Startup's Tech Stack

I’m so glad to see you recommending Next and TypeScript. Wh...

What’s your favorite piece of code that you had to throw away?

Truth! Recursive algorithms can almost always be expressed ...

What’s your favorite piece of code that you had to throw away?

Did you find it strange that they had you build the softwar...

What’s your favorite piece of code that you had to throw away?

I bet you’re pleased to not have to maintain a custom SOAP ...

What’s your favorite piece of code that you had to throw away?

Thank you. Yes, I think a lot of us could benefit from the ...

What’s your favorite piece of code that you had to throw away?

I worked on a multi-year government project that was develo...

What’s your favorite piece of code that you had to throw away?

Yes! You nailed the point. Old code needs to go so new code...

What’s your favorite piece of code that you had to throw away?

Yea it’s tough to find the balance of caring enough to do a...

I’m sorry, but this “Full Stack” meme makes me really mad/sad

It’s a good counterpoint. Like it’s definitely something to...

I’m sorry, but this “Full Stack” meme makes me really mad/sad

Thank you for sharing that perspective. I think you perfect...

Safer Code with C# 8 Non-Null Reference Types

ImmutableJS has Seq<T> which offers you lazy-evaluati...

Safer Code with C# 8 Non-Null Reference Types

Yea, ImmutableJS has helped fill the gap left by LINQ. But ...

Safer Code with C# 8 Non-Null Reference Types

I left C# years ago when I found out that TypeScript alread...

What makes recursion hard

I don't really know why recursion is so hard --> I don't...

What is the best quality a developer can have?

Can't you be confident without being arrogant? I define hum...

What is the best quality a developer can have?

Great point. What techniques have helped you deal with the ...

What is the best quality a developer can have?

If you have a good specs may not even need to talk or chat...

What is the best quality a developer can have?

Haha, yea it’s interesting how they leave that out in colle...

What is the best quality a developer can have?

You can only pick one! Just kidding, these are all great an...

What is the best quality a developer can have?

Is that a skill that you think developers can actually deve...

What is the best quality a developer can have?

I wanna hire that QA engineer!

What is the best quality a developer can have?

I have to catch myself doubting my own teammates can get t...

What is the best quality a developer can have?

For me, the best quality is "humility" and a love of "not k...

What are your daily methods for handling stress?

There are a couple of approaches I recommend: taking some...

Screwing up. Advice on forgiving your inner child.

That’s so kind of you to say! 😊 I don’t always have the ene...

Healthy teams, unhealthy teams: in your experience, what makes them so?

Good question about trust. I think the retrospectives can h...

Healthy teams, unhealthy teams: in your experience, what makes them so?

A healthy team is a team truly forgives their coworkers. Wh...

No Longer Tim Baker, Jane Fisher, Joe Taylor. What Would Be Your Chosen Occupational Last Name?

Shhhhh 🤫 😜

No Longer Tim Baker, Jane Fisher, Joe Taylor. What Would Be Your Chosen Occupational Last Name?

Megaman.

How can you identify unhealthy perfectionism in your work?

When someone submits a PR that only includes refactoring (w...

A quick guide to Testing React hooks that use RxJS

Great article. But I have this strange feeling that the cod...

The Programming Language That Changed My Life!

Honestly, I crap on Javascript a lot (sorry!), but it was t...

“Communicating your needs” / TypeScript’s value from a Buddhist perspective (part 1)

Thank you so much for finding that and pointing it out. I'v...

When you can’t relax

Yes indeed! Although sometimes it takes practice to be able...

When you can’t relax

Thank you for the compliment and for the thoughtful respons...

When you can’t relax

compassionate self-expectation Absolutely. In fact, I wr...

When you can’t relax

Wow yea that sounds challenging. I find that “work life sep...

Is “Defensive Programming” actually healthy?

Yea absolutely As you pointed out, it’s really tough the dr...

When you can’t relax

Thanks! Yea it really helps. I was actually freaking out th...

Is Object-Oriented Programming "Dangerous"?

Yes, the truth is often somewhere in-between. I guess what ...

Is “Defensive Programming” actually healthy?

I totally agree about the preventing calamity aspect. It’s ...

Why I was wrong about Scrum + “Hard Goals”

That’s so kind of you to say. :) Yea, it’s a much healthier...

Making Small Positive Changes: 5 easy examples

How true! And yes, if it weren’t for my wife I’d never be o...

How To Be Productive + Avoid “Analysis Paralysis”

Haha thank you so much. I write about this stuff because I ...

How To Be Productive + Avoid “Analysis Paralysis”

I totally agree. I have an article in my queue about creati...

How To Be Productive + Avoid “Analysis Paralysis”

Glad to hear it. CubicleBuddha.com is all about learning to...

How To Be Productive + Avoid “Analysis Paralysis”

Yea it struck me as soon as I heard it. Thank you so much f...

5 easy wins to refactor even the ugliest code

Hypothetical question: What happens if you add a new genre ...

Using Self-Affirmation to “Fake It Till You Make It”

Thank you so much for the kind words and even more for catc...

When TypeScript lies... and how to make it honest

Yup, but tsoa additionally does validation at runtime so th...

No, TypeScript is not a waste of time.

Yea structural subtyping is really convenient but it is not...

When TypeScript lies... and how to make it honest

Great article. Would you mind also adding tsoa to the list ...

Is “Defensive Programming” actually healthy?

“keep people that need to learn onsite” I work at a 100%...

No, TypeScript is not a waste of time.

Great point! In many ways TypeScript can be used as a tool ...

Is “Defensive Programming” actually healthy?

Yup, I totally agree that if you want to raise the level of...

No, TypeScript is not a waste of time.

Well if you like SQL “for it’s domain” then you can underst...

No, TypeScript is not a waste of time.

Obviously you're expressing a preference-- a preference tha...

No, TypeScript is not a waste of time.

Yea I think people forget that in Java and C# you can’t equ...

No, TypeScript is not a waste of time.

Don’t forget how awesome Create-React-App —TypeScript is. I...

No, TypeScript is not a waste of time.

Good point. When the inventor of Node creates a new runtime...

No, TypeScript is not a waste of time.

Yes! It’s nice to see the pros of static type analysis prop...

TypeScript is a waste of time. Change my mind.

That’s a lot of judgement Jordan. You seem to be making som...

TypeScript is a waste of time. Change my mind.

It does if you use ts-io

TypeScript is a waste of time. Change my mind.

Your citation (Gao et al., ICSE 2017) doesn’t consider if t...

What you prefer svelte or react?

Yea without TypeScript support I wot be picking it up for a...

TypeScript is a waste of time. Change my mind.

I think it’s wise to consider the trade-off between the ini...

TypeScript is a waste of time. Change my mind.

Webstorm can’t do this effectively in Javascript. Anyone wh...

TypeScript is a waste of time. Change my mind.

Right click “refactor > rename” and VSCode does the rest...

TypeScript is a waste of time. Change my mind.

I updated the original comment with examples. I don’t under...

TypeScript is a waste of time. Change my mind.

Edward, my goal is to help people to get happier at work. F...

TypeScript is a waste of time. Change my mind.

The title is a bit harsh Yes. How many of these anti-TS ...

TypeScript is a waste of time. Change my mind.

This article has some misinformed opinions being reported a...

TypeScript is a waste of time. Change my mind.

Thank you @stereobooster for mentioning io-ts for strong t...

TypeScript is a waste of time. Change my mind.

yeah, good luck trying to write enterprise node.js app wit...

TypeScript is a waste of time. Change my mind.

Explain this “tax” objectively please. And do not cite Eric...

TypeScript is a waste of time. Change my mind.

I agree that JSDocs can get stale, but TS types don’t have ...

TypeScript is a waste of time. Change my mind.

I’m really disappointed to hear this same subjective phrase a...

Custom validation for your reactive forms?

Fascinating topic. Thank you for writing about TypeScript w...

Practical Ways to Write Better JavaScript

I’ve been practicing “functional code imperative shell” for...

Practical Ways to Write Better JavaScript

I disagree on this point. “The Buddha's way is to face yo...

Practical Ways to Write Better JavaScript

I have been programming for decades and most of that time h...

Is this burn out?

people are expecting me to write. But I do not want to, an...

Your Code Is Not Pretty / Your Code Is Already Dead Code

Thank you so much @michaeltharrington . Sincerely. It's rea...

What Causes Scope Creep and How to Avoid It

This article appears to be about taking control. But what I...

Your Code Is Not Pretty / Your Code Is Already Dead Code

You’re welcome! Thank you for your kind and generous commen...

Your Code Is Not Pretty / Your Code Is Already Dead Code

Thank you for reading and for your great response. It’s ama...

This is why I hate Typescript

You can see by the comment about Haskell and buying VSCode ...

This is why I hate Typescript

If you have to say that it’s satire, then it’s not good satir...

8 Practices In React That Will Crash Your App In The Future

Can you explain why types add overhead? And which type of o...

Which types of loops are most popular in the programming languages you use?

While not a “loop” in the conventional sense, I’m a big fan...

Mindfully Screaming: How to deal with anger at work

Haha thank you. Yes, I’m clearly a Thich Nhat Hanh devotee....

Mindfully Screaming: How to deal with anger at work

Thank you for the comment, and thank you for beautifully su...

4 Reasons You Don’t Need A Promotion

That's very generous of you. And I'm sorry that you feel sa...

Letting Go of a Goal

Yes, it's so hard to let go of a goal. Here's a quote that ...

Mindfully Screaming: How to deal with anger at work

Great ideas! And you’re so totally right about the baby par...

Mindfully Screaming: How to deal with anger at work

Thank you for saying that. That’s great insight. Yes, I hav...

Mindfully Screaming: How to deal with anger at work

haha that works too! :) Remote work can be challenging (I'm...

What software projects made you "wow" 🤯

The original wow for me was cross-env because up until Kent...

How do you build camaraderie with a fully remote team?

I totally agree that memes and comics can help to loosen th...

If you mostly write code for your day-to-day, do you have plans to get promoted out of that situation?

Nope. It’s like I like gardening. I love getting my hands d...

Finally, an easy way to use TypeScript enums

Yea I recently had to iterate over an enum for a React proj...

Finally, an easy way to use TypeScript enums

I updated my comment reply because the object approach does...

Finally, an easy way to use TypeScript enums

Update: You're right. That object approach also has exhaust...

The true story of how I got my first job

That’s really funny! I’m glad you found a career that makes...

What are your thoughts on the whole 10x engineer viral discussion?

Haha I hear you. But if you focus on your technical and sof...

What are your thoughts on the whole 10x engineer viral discussion?

Yes, your approach is one of servant leadership, which is a...

4 Reasons You Don’t Need A Promotion

Thank you so much. I agree. Oh and please subscribe if you ...

4 signs your job is beyond repair

That’s fantastic to hear. Some people feel very uncomfortab...

4 signs your job is beyond repair

That’s sad to hear. I have had a few jobs like that. I’m su...

4 signs your job is beyond repair

I’m glad that you took steps to get happier. May I ask how ...

4 signs your job is beyond repair

Thank you for your wonderfully thoughtful response. Yes, I ...

Did you study music in college?

I had a minor in music recording. As a musician, I’m self t...

What was the most over-hyped software movement?

That's why it's best to focus on the Agile values instead o...

What was the most over-hyped software movement?

Oh I'm with you. If I ever need to save unstructured data, ...

What was the most over-hyped software movement?

8 years of MongoDB development here and I can confidently s...

8 Practices In React That Will Crash Your App In The Future

Yea almost all of the points made in the article would be p...

Being Distracted

Just code a little, learn a little, and code some more. I i...

How to refill someone’s “cup?”

Thank you for the appreciation! That's very kind of you. :)...

How to refill someone’s “cup?”

Yes! Exactly. Sometimes social media makes us believe that ...

Svelte is the most beautiful web framework I've ever seen

Yup, TSX is super helpful. Let's say you have loginCompone...

Svelte is the most beautiful web framework I've ever seen

Creating typings is a whole lot of work when the creators o...

“Communicating your needs” / TypeScript’s value from a Buddhist perspective (part 1)

Oh yes, it’s definitely worth a try. And yes, I’m also not ...

How to refill someone’s “cup?”

Absolutely! :) I’ve worked for a few companies that incenti...

Svelte is the most beautiful web framework I've ever seen

Yea, it’s basically a non-starter for me until it gains Typ...

I've never become overly convinced that switch statements are that much cleaner than `if else if else if else if else`

Those examples your provided look great to me. I just don’t...

I've never become overly convinced that switch statements are that much cleaner than `if else if else if else if else`

What a wonderful response. Thank you for being generous wit...

What was your win this week?

Wow. As someone who spent 5 years waiting to be told that m...

Convince me that types are awesome

There are so many articles on the technical reasons why you...

Convince me that types are awesome

Is @ben saying that he doesn’t like types? I thought he w...

What do you consider your greatest developer strength? Weakness?

Strength: Introspection. I’m always willing to look insid...

I've never become overly convinced that switch statements are that much cleaner than `if else if else if else if else`

I often see that developers enjoy that approach until they ...

I've never become overly convinced that switch statements are that much cleaner than `if else if else if else if else`

I don’t think fallthrough in a switch case is ever appropriat...

Why switch is better than if-else

I know you and I already discussed this, but for the benefi...

I've never become overly convinced that switch statements are that much cleaner than `if else if else if else if else`

Kasey, I have a question for you since I’m interested in F#...

Doing nothing: The cure for procrastination

Thank you so much! It’s really fun to share what’s made me ...

Doing nothing: The cure for procrastination

That’s so good to hear. Thank you for the enthusiasm. :) I ...

JavaScript can do that?

This is one of the many great reasons to use TypeScript. It...

I would love feedback on my TypeScript skills and NPM Module.

Awesome! :)

I would love feedback on my TypeScript skills and NPM Module.

I love that you’re adding to the TypeScript ecosystem. Here...

How To Describe A Function Typing Using An Interface In TypeScript

Great. Yea, as you can probably tell by the wacky titles of...

What advice would you give your 20-year-old self?

Thank you Helen. The feeling is mutual! :)

How To Describe A Function Typing Using An Interface In TypeScript

You can also add JsDoc style comments (via /** style commen...

Better Code Review Practices

Yes! This advice is so important. You have to balance the c...

Confused by JavaScript's const? Me too!

Should you use const? Yes! Absolutely! It’s all about im...

What advice would you give your 20-year-old self?

If you don’t feel like you’re getting enough support with y...

Typescript: First thoughts

Yes, a company should be free to have teams that use whatever...

Typescript: First thoughts

What if a new JavaScript developer ( who is not familiar wit...

Typescript: First thoughts

On the frontend the choice is usually made for you What do...

“Communicating your needs” / TypeScript’s value from a Buddhist perspective (part 1)

Yea! That’s a great library! :) Have you tried tsoa yet for...

Typescript: First thoughts

Alan, you've gained an automatic follower. I'm also a static ...

Typescript: First thoughts

real-time testing for your code Yes, testing is great. But...

Typescript: First thoughts

If you’re in the UI? Maybe use TypeScript. If it’s a NodeJS ...

Typescript: First thoughts

A lot of the new built-in types that TypeScript has added in ...

Typescript: First thoughts

With TypeScript it’s possible to write code such that you d...

If you ever have to lead a remote dev team...

I normally like to foster a team environment, but yea there...

If you ever have to lead a remote dev team...

Can you clarify how the other team mates will realize “that...

AssemblyScript is *not* a subset of TypeScript

Yup, software design is all about tradeoffs.

AssemblyScript is *not* a subset of TypeScript

Thank you for publishing this comparison. I must say: I use...

Feedback on this new DEV feature?

Yes anything to incentivize conversation. That’s the best p...

The Beginning

I agree. I’ll be writing about some advanced techniques in ...

The Beginning

Congratulations on your career in software development. You...

How I know Apple hates developers?

hahaha. Btw, these stickers are super cute.

What Physical Therapy taught me about enjoying life

Thanks. Those are some great tips (especially the one about...

How I beat RSI before it beat me

These are great tips Jerod. I agree with Wesley though abou...

How I Fixed My Carpal Tunnel Pain

CTS and repetitive stress syndromes are incredibly frustrat...

How I Fixed My Carpal Tunnel Pain

Yea, this point about seeking help from a doctor is incredi...

What Physical Therapy taught me about enjoying life

Hey, if you're lucky enough to not have anxiety or muscle-t...

Origin story: why am I doing this?

I’m sorry to hear about your chronic pain. I recently share...

What's your work-from-home outfit?

I’m not ashamed to admit that it’s pajama bottoms and a dre...

What's the best career advice you can give in ten words or less?

Learn what your gut feels like when it’s really excited.

How do you measure code quality / engineering team performance?

Spend less time on metrics and more on helping your team to...

The Silly Joys of Coding

I live for this stuff. Joke and inside jokes in code are so...

What was your win this week?

I finally finished an article that I spent weeks researchin...

Web Assembly isn't always the Answer

Alright, you’ve got a new follower. And thank you for follo...

How do people know what to write about?

Since I mostly write about making strange connections betwe...

Refactoring old code vs Rewriting everything for long-term?

It’s better to finish than to be perfect. So I’d recommend ...

Web Assembly isn't always the Answer

Would you be willing to clarify what AssemblyScript means b...

What programming best practice do you disagree with?

My least favorite practice is a function that looks pure bu...

The 2021 Web Development (Frontend + Backend) RoadMap

Yes, there are careers available in software for people of ...

At work, do you have planned roundups with coworkers to discuss new and/or unfamiliar coding concepts?

Yes! I ran a monthly meeting at my company where we have pe...

New beginnings

Welcome! :)

Tell me a bug story

I wish this article was called, “tell me a ghost story... g...

Anybody still working with jQuery?

It's probably fine for simple projects, but even simple pro...

All Aboard the TypeScript Train?

Great article and congratulations on choosing a fantastic c...

What is the next language you want to learn, and why?

C# is gonna get a lot nicer sooner when non-nullable refere...

Welcome Thread - v33

Welcome! Yes, if you have to keep one social network, this ...

Welcome Thread - v33

Welcome! Sounds like you’ve got a lot of fun things going o...

Welcome Thread - v33

Welcome! I enjoyed your article. I also write about the val...

Welcome Thread - v33

Hi Christian. Welcome! And congrats on your new-ish in soft...

Why you should cleanup after render

Thank you for sharing your example. This reminds me of when...

OMFG... Dependabot is free now. Close your security vulnerabilities faster than ever!

I’m not sure I understand what you mean?

What are people's favorite podcasts?

DeveloperTea is fantastic

We'll be adding more design and moderation clarity to tags like #help, #discuss, etc. We're also introducing a new badge!

I must admit that I have used both the #discuss tag and the...

OMFG... Dependabot is free now. Close your security vulnerabilities faster than ever!

That’s so wonderful to hear! :)

What's the most excited you've ever been about a new technology?

Yaser, so it’s okay and normal that I talk to my newborn ba...

What's the most excited you've ever been about a new technology?

Well you can probably tell how excited I am about Dependabo...

How is the global software dev ecosystem changing with remote work becoming more mainstream?

I’ve seen an unfortunate anti-pattern develop which is the ...

My "Whoa, I didn't know that!" moments with Jest

👏 Bravo for sharing the ability to iterate over test cases....

A Beginners Guide to using Typescript with React

An alternative opinion: if you already are comfortable enou...

A New Coding Style for Switch Statements in JavaScript/TypeScript

All of these solutions are great, but they could benefit fr...

Fixing Bad Habits By Learning To Love Them: Agile Retrospectives

Thank you Shana. It’s comments like this that inspire me to...

Fixing Bad Habits By Learning To Love Them: Agile Retrospectives

Aww, you’re welcome. Thank YOU. 🥰 Your comment means so muc...

Is “Defensive Programming” actually healthy?

Whadya know, an exception to the rule. Bravo! 👏 But yea, ...

GitHub announces GitHub Package Registry

This ^

Is “Defensive Programming” actually healthy?

Yup absolutely. I only quoted him because j thought he expr...

Is “Defensive Programming” actually healthy?

Yup yup. Yea the map + the undefined check would be the ide...

Mental Health Month in Tech: Three Good Things App

Great work @desi . Gratitude journaling has its roots in mi...

loading...