TechWorkRamblings

by Mike Kalvas

Results: 37

  • The Software Craftsman

    2023-12-09 13:23

    #source #wip #new #structure

    Chapter 2 - Agile

    • 202312161343 You don’t do Agile
    • (18 discussion) “Focusing purely on the process and treating software development like a production line leads to average 9-to-5 developers doing what they are told — they become factory workers.” This is what we do here with mobbing
    • (19 discussion) bad faith argument in paragraph 2

    Chapter 3 - Software Craftsmanship


  • Joe the Axolotl, Clever Closet, & Demonic Robots

    2024-05-03 15:30

    #source

    • Anyone can start a girls who code club and if you have enough people sign up, you can get free resources like lessons, notebooks etc.
    • Dept of Ed standards alignment
    • 7x more likely to go into STEM than national avg
    • She led the Otterbein one, it does something a little different than the provided web lessons
    • Build things “clever closet” and others (had never seen clueless so they thought it was original which is cool)
    • Pololu 3 Pi Robots pre-built 4 AAA batteries, hokey pokey robot, Rube Goldberg machines, etc
    • LEGO Robots now, loved those
    • Game dev

    gwcotterbein@gmail.com afholcomb72@gmail.com @gwcotterbein insta


  • Have a single source of truth for invariants

    2023-12-09 14:34

    #new

    Every piece of knowledge must have a single, unambiguous, authoritative representation in your system.1

    Even though I do not generally like the DRY principle because of its over-generalization, misdirection, and ease of misuse (202204262054 Prefer duplication over the wrong abstraction), I do think that it can be helpful when discussing sources of truth.

    For instance, an application should only have one authoritative way to get an object or model where important invariants and business rules can be housed. Then we know that everyone who's making a new user or something will have e.g. the same validation requirements.


    1. Thomas, D., & Hunt, A. (2019). The pragmatic programmer, 20th anniversary edition: Journey to mastery (Second edition) (pp. 31). Addison-Wesley.

  • The Myth of Sisyphus

    2024-06-13 17:15

    #source #new #wip #structure

    The fundamental subject of The Myth of Sisyphus is this: it is legitimate and necessary to wonder whether life has a meaning; therefore it is legitimate to meet the problem of suicide face to face. The answer, underlying and appearing through the paradoxes which cover it, is this: even one does not believe in God, suicide is not legitimate. Written fifteen years ago, in 1940, amid the French and European disaster, this book declares that even within the limits of nihilism it is possible to find the means to proceed beyond nihilism.

    – Albert Camus, Paris, March 19551


    1. Camus, Albert, and Justin O’Brien. The Myth of Sisyphus. Second Vintage international edition. New York: Vintage International : Vintage Books, a division of Penguin Random House LLC, 2018.

  • Seven habits of highly effective people

    2021-06-22 17:13

    #structure #source

    The seven habits of highly effective people are described in the eponymous book by Stephen R. Covey.[^covey2004] Covey discusses how people can see the same things and have different perspectives. He also discusses how maturity is a continuum that can be describes as moving from dependence to independence to interdependence.

    An observation: 202109251019 Highly effective people are leaders.

    Circles of Influence

    1. 202109121518 Circle of control
    2. 202109121516 Circle of influence
    3. 202109121517 Circle of concern

    Maturity Continuum

    1. 202109121550 Maturity of dependence
    2. 202109121536 Maturity of independence
    3. 202109121530 Maturity of interdependence

    The Seven Habits

    Habits for building independence

    1. 202106241529 Be proactive
    2. 202106221744 Begin with the end in mind
    3. 202106241528 First things first (Covey uses the 202106241531 Eisenhower matrix of task value as an example of how to define what should be put first)

    Habits for interdependence

    1. 202106241527 Think win-win
    2. 202106241526 Seek first to understand, then to be understood
    3. 202106241525 Synergize

    Habits for continual improvement

    Continue reading

  • Understanding How Your CPU Thinks

    2024-05-03 11:00

    #source

    • Two most important skills for a developer
      • Break problems into smaller problems
      • Communication (with people and with the computer)
    • Talked about pipelining
      • increases µops throughput
      • think about doing multiple loads of laundry in washer and dryer
      • f# nice
      • this point was a little off from my understanding of schedulers and the term "pipelining" specifically.
    • Caches and different memory locations: registers, L1, L2, L3, RAM, DISK etc.
    • Don't use 0V–1.3V and 3.7V-6.3V anymore for memory and heat efficiency. They've shrunk those voltages and tolerances.
    • Got into machine code and micro-ops for assembly
      • Importantly, the op and params and everything are all encoded.
      • This is why ARM ops have variable bit sized parameters. They're all encoded into 32 bit instructions, so the specifics of the encoded instructions/params might change the available bits for parameter store.
    • Showed the circuit for a 4 bit adder, arbitrarily chainable for higher bits, 32/64.
      • youtube videos:
        • domino computing by standupmaths
        • water computer steve mould
      • how to do multiplication
        • f# "Freestylecoding.Math" bit math lib
        • interesting idea of returning division with remainder as tuple with /% operator

    Continue reading

  • The Entry Point

    2021-04-29 15:22

    #new #thread #source #structure #wip

    This is the main entry point into my knowledge graph. At the risk of being prescriptive about categories and connections, a single top-level entry point is useful to maximize discoverability. If you're looking for other things I do, check out my home page.

    The lofty goal of this project is to contain all of my knowledge. I hope this will be a lifelong project where I can learn, collect, and create a record of my thoughts in a simple, plain-text format that should never become obsolete.

    Workflow

    This will change drastically over time, but in an effort to keep myself organized, here's my process.

    1. Find a source of information
    2. Create a #source note with solid citations (managed in Zotero) for taking notes while consuming the source.
    3. Create, link, and manage the Zettel and my Zettelkasten.

    For more information on the why and how of using a Zettelkasten, see 202107272242 The Art of using a Zettelkasten.

    Tags

    • The #structure tag is used for structure notes. These are hubs of Zettel that are connected under some sort of idea. They help with discoverability and maintenance of the Zettelkasten as a whole.
    • The #source tag is a single Zettel to organize the notes I take while working through some source material. Each Zettel that's a #source is also a #structure Zettel. For example, I take notes while reading a book in a Zettel that's named for the book's title and tag it with the #source tag. These notes aren't technically needed if we do a good job citing sources, but it's helpful during the initial reading and note taking for long-form content that requires multiple sessions.

    Continue reading

  • Stir Trek 2024

    2024-04-30 10:34

    #structure #source

    stir-trek-2024-schedule.pdf

    Selected Sessions

    time room rank speaker track session
    08:45 could not attend

    Continue reading

  • The Private Library

    Being a More or Less Compendious Disquisition on The History of the Architecture and Furnishing of the Domestic Bookroom

    2024-07-28 12:42

    #source #wip #new

    The Private Library is the domestic bookroom: that quiet, book-wrapt space that guarantees its owner that there is at least one place in the world where it is possible to be happy. The history of its architecture and furnishing extends back almost to the beginning of history and forward toward a future that is in equal parts amazing and alarming.

    All libraries are magical rooms. All their windows look out onto Faërie, and all their carpets can fly. […] Entering our library should feel like easing into a hot tub, strolling into a magic store, emerging into the orchestra pit, or entering a chamber of curiosities, the club, the circus, our cabin on an outbound yacht, the house an old friend. It is a setting forth and a coming back to center. [^byers2021] (pp. 1, 3)

    A visitor standing before this instantiation of language must have felt the true, right sense of the numinous.[^byers2021] (pp. 14)

    A private library is a place for rest and relaxation, but also contemplation and thought. It is a place for the individual to find respite and transport oneself to new worlds. In its purest form, a library is only a library if that is its sole purpose. A study or an office can have many of the qualities of a private library but it may not truly be one if it can’t provide the enveloping nature of a pure library.

    Continue reading

  • System design

    2022-08-13 13:27

    #source #wip #structure

    Designing systems is one of the common, critical tasks of a 202206112233 Staff-plus engineer. It's something that sets a 202206112236 Senior engineer apart. It proves that you can understand tradeoffs in technology and organizational size and maturity. It shows that you understand how to build things that are optimal for now and have a clear path to the future you're working toward. Many engineers plateau at a place where they can understand and implement any type of tech but aren't capable of planning out new systems from scratch based on some need of the business.

    Example systems to learn how to design

    • Rate limiter
    • Consistent hashing
    • Key-value store
    • Unique id generator in distributed systems
    • Url shortener
    • Web crawler
    • Notifications
    • News feed
    • Chat
    • Search autocomplete
    • YouTube
    • Google Drive

    Example: Scale from 0 to 1M users

    • start with a single server. DNS somewhere directs all traffic to the web server where everything from apps, to APIs, to DBs are housed.
    • The first interesting scale point is when you need to separate your database from your web servers. At this point you probably have enough reason to discuss the exact details of the DB you're using. Should you be using a relational DB or a NoSQL document store?

    Continue reading

  • Essential XP Emergent Design

    2024-06-27 12:56

    #source

    An article we read as a group for a discussion in our engineering organization. The author explicitly offered all his conclusions as fact "without much justification" noting that "at some later time, perhaps I’ll try to justify this view."[^jeffries2001] I did not agree with what little it did contain.

    There are many well-known modeling and design techniques that can be used to bring about a "good design". An incremental process may limit the applicability of these techniques, which are most powerful when applied and committed to "up front". Test everything; eliminate duplication; express all ideas; minimize entities: These few simple rules, applied locally, can help a high quality global design to emerge.[^jeffries2001]

    Ron asserts that good design is highly modular, consisting of separate components (typically objects) which are highly cohesive, loosely coupled, and given expressive names that enable us to grasp quickly what the modules mean and why they are there.[^jeffries2001] This statement is the most reasonable of the article. I agree with it, but I find it to be vague to the point of being unhelpful. For example, I'd rather be the right temperature than very hot or cold, but that doesn't offer much as to the nature of "the right temperature". Being the right temperature is tautological. His design principles aren't as self-evident, but they can be interpreted in almost any way to fit or reject a design as "good".

    Continue reading

  • Types, and why you should care

    2022-06-28 14:49

    #wip #new #source

    From a talk[^minsky2019] by Yaron Minsky of Jane Street.

    Typed vs. Untyped

    • Untyped — scripting, lightweight, friendly, and slow.
    • Typed — Serious, professional, unfriendly, verbose, and fast.

    Some definitions

    • Values — data, things
    • Variables — can be different values, part of the lexical portion of the language
    • Expression — composed out of variables, values, and other things
    • Types — categorization system for values; groups values into named groups; strings, integers etc.
    • In untyped language, values have types
    • In typed languages, values, variables, and expressions all have types. (For instance, variable is typed when it always contains a variable of that type)

    Why types?

    • Make programs faster, typically through compilation/interpretation loop having “hints” and more information.
      • V8 for instance can be super fast, within a factor of 3 or so from a compiled language (but this is through herculean effort of thousands of people over tens of years and complicated things like tracing compilers and things)
      • This is predictable performance vs V8
    • Make programs more understandable

    So why don’t people always use them?

    • Often make programs more verbose — when the language doesn’t have a convenient way to express something, it’s difficult to express it at all or in a good way

    Continue reading

  • Curriculum design for software engineering

    2022-06-28 20:18

    #wip #new #source #thread

    I want to teach computer science, what should I do?

    vs

    I want to make software, what should I do?

    Need to ask questions about the desired solution to figure out things like goals, constraints, and methods before you can build that solution. In the education case, the “solution” is the curriculum.

    Ask things like:

    • What age are the students?
    • What exposure have they had before?
    • Is this required? An elective? An extracurricular?
    • How long is the class? How often does it meet?
    • Is it even a class or something else?
    • How many students are in the room?

    etc. but also think about things like

    • Is there internet access?
    • Is the teacher new to programming?
    • Can the students type?
    • Are there students with disabilities?
    • Do the students have regular computer access at home?
    • Do the students have regular computer access at school?

    Think about

    • Equity, Rigor, and Scale

    Methods

    1. Required courses
    • Don’t scale though, need certifications for teacher. The economy for experts means that they’ll go to Jane Street and learn a huge amount more than public HS
    • Rigor has to take a hit because everyone has to pass the course to graduate
    1. Elective courses
    • Not equitable. Hugely biased (currently) to white and asian males, failures and achievement gap #thread lead to further disparity.

    Continue reading

  • The Pragmatic Programmer

    2023-07-24 10:42

    #wip #structure #new #source

    Book Website

    Intro

    Chapter 1

    Chapter 2

    • Good design is easier to change than bad design. Almost all other patterns boil down to "easier to change" or ETC or 202205031449 Optimize for change or 202204262114 Write code that's easy to delete, not extend.
      • This is a value (spectrum) not a rule.
      • This is why I don't like frameworks that lift a lot (tailwind style string classes everywhere in code) or rails magic. It's everywhere and pervasive and not good. Or things w/lots of non-standard tooling (bit or graphql)

    Continue reading

  • Minimum Viable Replacement

    2024-05-03 14:00

    #source

    About 100x as long as needed and poorly written. Did not even introduce a “framework” in the end, literally just set up the problem and ended with GLWTS. But the slides are good.

    The problem: Replacing an existing system is the exact opposite of an MVP

    If you’re trying to retire a legacy platform — instead of having the luxury of just solving very specific customer segment needs — you need to solve the needs for every customer segment using your software! [...] Instead of trying to solve the needs of just one small segment, you now have to deliver 20 years worth of software development for thousands of customers across multiple countries and segments to retire the system [...] Consequently, we need to prove that the new technology matches or exceeds the value of the old technology for our existing customer base.

    Retiring systems takes longer and costs more than your executives want to hear

    mvp-vs-mvr.jpeg

    Stir Trek Talk

    • Charlie Brown kicking the ball, but yet we think it’ll work this time
    • Turns into deadline driven development
    • Problem is that expectations are out of alignment with reality
    • Ignore laggards and edge cases but laggards are biggest customers and edge cases are your critical risks

    Continue reading

  • As We May Think

    2021-09-08 08:47

    #structure #thread #source #new

    A seminal essay on machine augmented thinking written by Vannevar Bush in 1945.[^bush1945]

    He urges that men of science should turn to the massive task of making more accessibly our bewildering store of knowledge. For years inventions have extended man's physical powers rather than the powers of his mind. [These inventions] are new results, but not the end results, of modern science. Instruments are at hand which will give man access to and command over the inherited knowledge of the ages. The perfection of these pacific instruments should be the first objective of our scientists as they emerge from their war work. Like Emerson's famous address of 1837 on The American Scholar this paper calls for a new relationship between thinking man and the sum of our knowledge.

    Consider a future device [...] in which an individual stores all his books, records, and communications, and which is mechanized so that it may be consulted with exceeding speed and flexibility. It is an enlarged intimate supplement to his memory.

    Knowledge evolves and endures throughout the life of a race rather than that of an individual

    Publication of research has been extended far beyond our present (1945) ability to make real use of the record.

    Continue reading

  • Category Theory in Life

    2022-07-18 19:46

    #new #source #wip

    Category theory is abstract, but its abstraction makes it apply to many things around us in ordinary life.

    What is category theory?

    Category theory is the mathematics of mathematics

    Mathematics is the logical study of how logical things work.

    In order to study things logically, we have to ignore some details of reality that make things behave illogically. It's only in the abstract world where things do behave perfectly logically

    Category theory is the logical theory study of the logical study of how logical things work.

    The map of the London underground is a good example of a "mathematics", where the geographical map of the exact tubes are not the purpose. The slightly unreal, more representative version helps us in a certain situation navigate more easily. We choose to ignore certain details to represent things more logically.

    Objects and morphisms

    $A \rightarrow B$ means there's a $morphism$ between $A$ and $B$.

    So if we have

    $$A \xrightarrow{\text{is the mother of}} B \xrightarrow{\text{is the mother of}} C$$

    We can deduce

    $$A \xrightarrow{\text{is the grandmother of}} C$$

    Instead of looking at things based on their intrinsic characteristics, we can learn a lot about them (and other things) by their relationships to other things: hence the "Category". This gives us more context

    Continue reading

  • The solitude of leadership

    2021-12-20 13:17

    #structure #source #thread

    People think leaders are individuals with others looking to them for direction. People think solitude is something like Thoreau, alone at Walden Pond. What could solitude have to do with leadership?

    Leadership is the qualities of character and mind that will make you fit to command a platoon or a company, a battalion or a corporation, a foundation, a department, a government.

    Solitude is the ability to be alone with your thoughts.

    Solitude is therefore one of the most important necessities of true leadership.

    On the mistaken idea of making it to the top means you're a leader

    Many people can be energetic, accomplished, smart, or ferociously ambitious, but is that enough to make them leaders? No. These types of things are encouraged and developed in our generation of world-class hoop jumpers — they're "excellent sheep". Many institutions that talk about leadership are really talking about this. They're talking about educating people to make big names for themselves with impressive titles that they can brag about. They're talking about training people to climb the greasy pole of whatever hierarchy they decide to attach themselves to. But this idea is wrong and dangerous.

    Continue reading

  • Remote team management

    2021-10-22 08:45

    #structure #source

    This structure note records my learnings from taking the Coursera How to Manage a Remote Team course.[^murph2020] These notes come from a time before my Zettelkasten and are longer, more verbose, and less atomic than I'd normally like, but I'm just going to leave them as they are. That way, I can link to them and search for their contents without investing the time in breaking them down more.

    Managing a team of remote workers presents unique challenges and opportunities:

    Communication is Crucial

    Embracing Asynchronous Communication

    In a world dictated by calendars and schedules, people are conditioned to operate in synchronicity — meaning that they inhabit the same physical or virtual space at the same time. Asynchronous communication is the art of communicating and moving projects forward without the need for collaborators or stakeholders to be available at the same time your message is sent.

    In an all-remote setting, mastering asynchronous workflows is vital to avoiding dysfunction and increasing efficiency. The benefits include enabling your team to work effectively across time zones, reducing meetings, and enabling team members to work on a flexible schedule — all of which raise morale and productivity. However, shifting to this way of working requires a lot of large and small adjustments.

    Continue reading

  • A renewable stock constrained by a non-renewable stock

    2024-02-24 15:36

    #new

    An interesting two-stock system arises when there is a renewable stock constrained by a non-renewable stock. This system differs from one-stock systems because it is constrained by its surroundings. An example of this type of system is an oil economy. The non-renewable stock of oil, its production, and its long-term availability constrains the stock of capital in the industry. Investment — a renewable source of capital — and oil extraction and sales increase the capital of the oil industry, but the non-renewable availability will eventually limit the growth of that capital to the point where no investment will happen and the industry will dry up when oil is gone.1


    1. Meadows, D. H., & Wright, D. (2011). Thinking in systems: A primer (Nachdr.) (pp. 60). Chelsea Green Pub.

  • The fastest code is no code

    2022-04-27 22:19

    It’s impossible for any line of code, no matter how fast and well written to be as performant as no line of code. There are two points here.

    From a performance perspective, we obviously only want to do the work that’s absolutely essential. We want to optimize the source code and execution paths to be as minimal as possible.

    From a philosophical perspective, we want our code to be simple and minimal, although there’s more leniency in this point than the performance one. Less code written is less code we have to read and less we have to understand: minimizing the amount of code minimizes what we have to reason about and maintain. Importantly though, we also want to make that code maximally understandable. We want to follow 202203221620 The golden rule of programming and value simplicity and understanding over minimizing code.


  • Synergist leadership style

    2021-07-24 09:54

    Unlike the 202107240951 Visionary leadership style, 202107240952 Operator leadership style, and 202107240953 Processor leadership style whose patterns are based on their individual preferences and behavior, the synergist is primarily motivated and focused on what is best for the organization they are part of.1 They detach their personal desires and collect information from any source available to form high level direction for their team.

    To manage a synergist, make sure that they aren't taking too much time to weigh up their sources. Push them to take action when necessary and contribute a personal judgment when integrating their final direction from their sources.

    Natural synergists are rare, but people with the natural tendencies of the other styles can learn to be a synergist when necessary.


    1. McKeown, L. (2017, June 27). What’s Your Leadership Style? The Do Book Company. https://medium.com/do-book-company/whats-your-leadership-style-fdc8bad45fe0

  • Make reversible decisions quickly

    2023-12-09 15:03

    #new

    Make reversible decisions quickly and irreversible decisions deliberately.

    This saying has been popularized in the tech world (though I don't know the original source to attribute here, it's also mentioned in 202307241042 The Pragmatic Programmer1).

    We tend to spend too much time in 202109090909 Decision paralysis when it's more often the case that either direction is fine and even if one is bad, we can reverse course. Because of this mis-attribution of weight on the importance of our decisions, we need a reminder like this one to push through that and take action.

    Another interpretation of this is that 202312091509 There are no final architectures and 202312091511 There is no such thing as sacred code. Everything is subject to change and re-evaluation at any point in time. The only thing we should surely do is 202205031449 Optimize for change, which means making decisions with the knowledge that they'll be changed later.


    1. Thomas, D., & Hunt, A. (2019). The pragmatic programmer, 20th anniversary edition: Journey to mastery (Second edition) (pp. 48). Addison-Wesley.

  • Computer Science

    2022-06-19 13:00

    #structure #thread

    The nitty-gritty of computation and technology. Contrasted with 202109061338 Software Engineering which is more about the practice of writing software and careers or organizations in that field.

    Curriculum

    Programming language design

    Asynchronous computing

    • How does asynchronous stuff really work in JS? Promises, async/await, under the hood etc. #thread answer: JS spec requires implementations of JS to implement an event queue which JS processes fifo. Could be fun to implement a JavaScript runtime in Rust or something. (Might already exist from Mozilla, V8 is written in C++)

    Continue reading

  • Circle of concern

    2021-09-12 15:17

    A metaphorical circle posited by Stephen Covey in his book 202106221713 Seven habits of highly effective people.[^covey2004]

    This circle is a superset of our 202109121517 Circle of concern and 202109121516 Circle of influence. We should seek to minimize the things we allow into our circle of concern.

    Anything that we're concerned about, but have no influence or control over, will cause stress and negative pressure on the things that you can influence or control. Identifying what you can and can't affect can drastically empower your actions and allow you to move from a state of 202109121550 Maturity of dependence to 202109121536 Maturity of independence and possibly into 202109121530 Maturity of interdependence.

    On the other hand, this circle is something that highly effective people can think about and use to their advantage. For instance, we know that we can't control how cold the winter will be this year, but being interested in the weather patterns and using that concern as a source of information that informs our actions in some way that we can control — such as investing in natural gas that will be used to heat homes — could be beneficial. The goal is to know things in the circle of concern, but not allow them to affect us in negative ways.

    Continue reading

  • Knowledge is constructed

    2021-09-06 08:35

    #structure #thread

    Constructivism and also Constructionism are theories of knowledge that requires there to be a learner for knowledge to exist. Until someone learns information, connects it to things they already know, and internalizes the information in a personal context, knowledge cannot exist.

    Supporting arguments

    • Having a text or reference at hand does nothing to increase knowledge, we have to create something, do the work, wrestle with the ideas, and engage effortfully to create our own knowledge.
    • Research works better one thing at a time. Find a source, process it to completion, then use your newfound knowledge to find another source. If we don't, we run the risk of picking sources that are useless by the time we get around to reading them. Processing to completion includes writing about what you've read. This is where these notes come in. We take transient notes as we're reading and then write our thoughts here or in drafts of actual writing. (Iterative accumulative approach to writing #thread and writing is important #thread)
    • Consider that data patterns and descriptions mean nothing on their own. For instance, strongly correlated but spurious patterns may be obviously meaningless.[^vigen2013] Instead, we require a pattern or description (what), an interpretation of that pattern (why), and — critically — to synthesize multiple interpretations, hypotheses, theories, or models into a bigger picture and create something useful or interesting (why why or higher level why). Patterns and interpretations are the main work of our knowledge management system here. Synthesis happens when we write about (or just read and string together all the knowledge we accumulate in the system).

    Continue reading

  • Caution and perfectionism hurt progress

    2024-08-06 01:33

    #thread

    Being overly cautious or too much of a perfectionist will undoubtedly limit progress and potentially even destroy the ultimate outcome of a project as a whole. Being overly cautious can manifest in different ways:

    • Having meetings about meetings. This shows that there are issues with how the organization runs that need to be addressed pre- or post-hoc in order for something to actually get done.
    • Meetings to discuss how we should do something in order to get consensus before getting things done. This shows that contributors do not have the authority, responsibility, or capability to do things individually and have to justify, wait, and ask others to do their job.
    • A lack of desire from contributors to be associated with a particular project or task. This shows that risk and reward are not appropriately balanced in your organization. If people don't want to be a part of a risky project, then they know that they don't have the authority or latitude to address the project correctly or perhaps know that they won't be rewarded for working hard and taking a risk on something that could hurt them.
    • Requiring large chains of approval and sign-off. If many people need to see something in order for it to be approved, then the contributors and the teams responsible for making something don't really have the authority or empowerment to do the job they were asked to do (202407081040 If you can't cancel the project you're not the product owner). If people who are not intricately involved in the project day-to-day get more say than as a potential source of feedback, they are in the way of that project's success and the team will revert to caution and perfectionism in order to avoid re-work and disapprovals.

    Continue reading

  • Piping Code With GitLab CI

    A Simple Way to Make Your Life Easier

    2018-09-01 00:00

    #blog #tech

    I finally got around to adding continuous integration pipelines to my personal projects.

    GitLab CI/CD infographic

    What is Continuous Integration?

    At its most basic, continuous integration (CI) is the practice of frequently merging developers' code changes into a mainline code repository. In recent years, the concept of continuous integration has taken on a life of its own and been expanded to include other aspects of development. For instance, almost anyone referring to continuous integration is under the assumption that the frequent merging will be automated. There have also been expansions of the idea such as continuous deployment (CD) where the code is not only automatically merged into mainline branches, but also built, tested, and deployed. By automating all of these simple repetitive tasks, developers can stop spending time on manual integrations and deployment processes and spend more time coding.

    GitLab CI

    For various reasons that are far outside the scope of this post, I host my personal code on an on-premises GitLab server. GitLab has hundreds of amazing features to take advantage and one of the nicest of them all is their CI/CD pipelines. GitLab has all of the automation and task running capabilities of other separate solutions built in.

    Continue reading

  • The Art of using a Zettelkasten

    2021-07-27 22:42

    #structure

    Using a Zettelkasten is more of an art than a science. It's a personal relationship with an extension of your knowledge. Above all, it's important to just consistently work and think in this system to get the most out of it.

    Personal preferences

    Workflow

    There are categories of things that I do regularly, and my Zettelkasten has a specific single place in a broader workflow. It's important to understand how we think and how the processes we use to do that thinking and synthesizing affect your ultimate knowledge (202109080847 As We May Think).

    Continue reading

  • My Brand New Blog

    An Exercise in Futility?

    2016-10-28 00:00

    #ramblings #blog

    Maybe it's the infinite hubris of a millennial or maybe its just that I doubt anyone will actually read this, but I found a few reasons to convince myself to do it anyway.

    I thought about that question a lot before building this. Most blogs are out of date, under-maintained, new year's resolution-esque things that wither and die after a few entries. Why create something that has a high likelihood of being abandoned? Beyond that, how could I possibly think that anything I have to say is worth writing about? Maybe it's the infinite hubris of a millennial or maybe its just that I doubt anyone will actually read this, but I found a few reasons to convince myself to do it anyway.

    I'm Already Writing Anyway

    I've been in the habit of keeping a journal for a long time. I keep it for a lot of reasons: it helps me think aloud, it helps me recap my days, weeks, months, years, it teaches me about myself, it gives me perspective on why things did or didn't break my way. However, a journal, at least how I write mine, doesn't work well for giving a single topic more attention. I still write about topics that interest me, but diving in and exploring those topics fully isn't something that fits in a medium whose primary purpose is to record and reflect. A blog, on the other hand, is the perfect medium to write in-depth on a single topic. A blog also gives me the flexibility to write about any topic that's currently interesting me.

    Continue reading

  • First Reactions to React

    A Review of Building My First React App

    2018-06-01 00:00

    #blog #work #tech

    We're moving our corporate site in house and I thought it would be the perfect time to try out a new javascript framework.

    There are plenty of good javascript frameworks out there right now; among the most popular are Vue.js, Angular, and React. (Yes, I'm aware that React is a library not a framework, but for the sake of this article, I'm going to set that aside.) There's also a ton of posts and articles that can help you understand the differences between them if you're not familiar. Breaking down all the reasons we chose React over the other two would be a whole post in itself. Maybe I'll write something comparing the frameworks and our opinions on their features in the future. For now, it's enough to say that we took a hard look at all three of these and we felt that React was the best choice for our specific situation.

    Diving In

    We're using webpack for build tooling, a React front-end, and a C# .NET Core API backend. Getting started was the most challenging part of the whole process with the majority of the issues coming from the webpack configuration. I only ever used gulp before and we wanted to switch to webpack so that we could more easily bundle and ship specific components to third-party API consumers. I'm sure that someone more experienced with webpack could have gotten up and running in much less time than it took me, but it's always nice to have the opportunity to learn a new tool. Besides my personal inexperience, there were some versioning issues between the .NET world and the NPM world that we needed to resolve. We also added to our own headaches by using a slightly wonky legacy environment setup (that's hopefully going away shortly) and by having some external requirements from businesses we partner with. With all of the preliminaries out of the way, we could finally get coding.

    Continue reading

  • Revamping My Blog

    A New Coat of Paint

    2020-06-01 00:00

    #blog #tech

    You may have noticed that the blog got a new look and feel recently. The changes weren't purely cosmetic though. Let's take a look at how I migrated from a Bootstrap and PHP based blog to React, Next.js, and Styled Components.

    Fat marker sketches of new blog page designs

    Motivation

    It's probably not a surprise to most people that I'd want to switch from a PHP based blog to something a little more modern, but honestly — and perhaps controversially — I think PHP is still an amazing solution for simple use cases like mine. No, the shininess of tech isn't a good enough reason on its own for me to rebuild the blog from the ground up. So what reasons were there for updating things and switching tech?

    Criteria

    1. Ease of Maintenance — My blog was running like a dream for years on a crazy simple setup, so any solution that I went with was going to have to at least match it in terms of maintenance effort.
    2. Ease of Writing — There was quite a bit to be desired in the old setup. I was using a rich text editor that was hard to get well formed rich text data out of. It was also really difficult to use on mobile. Wanting to use a simpler format (like markdown files) and the ability to use a plain text editor was a big reason to make a switch.
    3. Performance — My old setup was slow for a host of reasons. I was running PHP and MySQL on the same old machine sitting underneath my printer. The thing was ancient when I acquired it longer ago than I care to admit. It would be nice if I could take advantage of something out there that did lightning fast static site edge cached delivery.

    Continue reading

  • The Only Correct Way to Organize Code

    A Joking Rant About Keeping Code Neat

    2020-09-01 00:00

    #1 #blog #2 #3 #4 #tech

    Why we need a system for code organization and what that system should look like.

    Top Gun buzz the tower gif

    Highway to the Danger Zone

    Though the pattern is full and it will definitely get me in trouble, I'm going to metaphorically buzz the tower by putting some pretty strong opinions out there today about file naming and code organization. So buckle up Goose, and don't hit that eject button.

    First off, file naming. The correct answer here is kebab-aka-hyphen-case which is all lowercase and hyphen delimited. No exceptions, and no, your community standards aren't a good enough reason to change this one as we'll see in a minute. Looking at you ComponentName.jsx 👀 .

    Second, code organization. The only correct answer is folder-by-feature as opposed to folder-by-random-devs-logic or folder-by-tech. We'll take an organic trip through all three of these systems and see where we end up.

    Either of these alone is enough to spark a holy war among devs, but unlike tabs vs spaces, I think there's good enough objective reasons to pick one over the others. Let's take a look.

    File Naming

    I don't want to spend too much time on this topic because it's much less important to a team of developers than having a consistent system for creating, finding, and maintaining the actual functionality of your product through its source code. Still, you can see how it's in the same vein and deserves an honorable mention.

    Continue reading

  • What React and Kubernetes Teach Us About Resilient Code

    A Similarity Among Widely Different Tech

    2019-11-15 00:00

    #blog #tech

    A brief intro to control theory and declarative programming

    React is basically Kubernetes

    This post was initially published as part of the Beam Engineering Blog here and cross posted here on my blog.

    Two Concepts

    Here at Beam, we're on a quest to make our technology work for everyone. As part of this quest and as a need stemming from our hyper-growth, my development team is shifting our focus away from feature development toward platform technology and developer experience.

    On the infrastructure side, we've been working on a CLI tool for our devs that will let them easily manage infrastructure from the command line. They can spin up entire AWS environments and deploy code from multiple repositories with a single command — no more waiting on other developers for testing and staging environments to be free, and no more inconsistency between production and testing environments. The quest for consistency led us to containerization, and our quest for easy infrastructure management led us to infrastructure as code. Our containers and infrastructure then lead us to a need for better orchestration of those containers. We needed tools that would make the often complex task of deploying, integrating, scaling, and managing services simple and routine — enter Kubernetes.

    Continue reading