KDC Menu

Monday, August 27, 2018

Memory Recall: An Interview Thought

At least a few hundred JavaScript algorithm challenges after taking Harvard's CS50 course, I realized that I use (my brain uses) a "trie" type of knowledge retrieval approach, as compared to someone who can do more of a "dictionary" type of memory lookup. That is, my recall works better when I'm creating and analyzing code (e.g., surrounded by context).

For instance, if I come across a need for the "spread operator", I may need to look up a quick example for syntax reference, but I know I can use it and I will put it to use. Or I may devise another method that may work out better long term, considering the potential future expansion of that particular code. Or I may just prefer another approach (e.g., I prefer `slice()` and `concat()` for copying arrays (but would always go with whatever coding guide I'm working with, if any)).

Anecdotal disclaimer: Using unfamiliar functionality can take me a half dozen trial and error attempts, but I always figure it out for the better of the project.

In short, I recall and know code better when I'm working directly with code (and Dev Tools!); not when answering academia explaining what a spread operator is. I have used it; I have it in my code; let's go take a look! :D
https://codepen.io/KeithDC/pen/weXdEe?editors=0010 
#693: <SettingsForm setTimer={this.setTimer} {...configSettings} /></SettingsForm> 
#904: this.state = { ...this.initialState()
#920: const newObj = Object.assign({}, {...this.state}, {...this.initialState()}) 
#990: <input type="text" name="entryTitle"
   {...timeProps}
   value={this.state.entryTitle}
   placeholder={this.props.titleTemp}
   maxLength={this.props.titleCount}
   size={this.props.titleCount}
   autoFocus={(document.referrer !== 'https://codepen.io/KeithDC/' && document.referrer !== 'https://codepen.io/KeithDC')}
   ref={(input) => { this.textInput = input; }}
  />
I would like to devise an approach for delivering a similar level of knowledge sharing (for an interview) that can reveal my level of experience (and my particular code recall approach) is just as valuable (or perhaps revealing just as many pros and cons) as someone who has (or can feign) immediate (hashmap) recall.

For now, the only approach I can think of, is that I believe I could convey such an experience level by writing out my "From Scratch" GistBox project, while also explaining the `what's` and `why's` of my coding approach (although unfortunately, I do not use the spread operator in this particular project). https://codepen.io/KeithDC/pen/dVrwrg?editors=0010 (challenge #4: GistBox)

Tuesday, August 14, 2018

Front-End Development Certifications x2

Two more freeCodeCamp certifications completed, with one more at 70%.
And although I'm only at 37% with Harvard's CS50W: Web Programming with Python and JavaScript, and 23% with Google's 'Master web development' courses (via Udemy), I'm considering running through another Vue series (via Laracasts), being the last one I went through was in Jan-Mar 2017.

UPDATE: On the other hand, perhaps not... the training video shows they're using 2.1.3, and although I could look around for something in the 2.5.x range, I believe it would be prudent to instead find more professional and in-depth courses for the latest React.

All current and previous training progress (such as my 11 completed courses) can be found on my Training Progress SPA (now a PWA! (...works offline: can't get updates (due to there being no network), but it works offline! :D )).

https://keithdc.com

Sunday, June 03, 2018

Pros and Cons of Visual Studio Code vs. Sublime Text 3


Pros and Cons of Visual Studio Code vs. Sublime Text 3

Below are personal observations with the VS Code editor as compared to the Sublime Text editor.
VS Code: A lightweight IDE
Sublime Text: A customizable code editor

VS Code: Pro and Cons

  • Pro: TypeScript insights are excellent (ST3 insights don't work well at all).
  • Pro: Referential integrity.
  • Con: Bracket-matching cursor sucks, no matter which option I choose. The small thick underscore gave me the least headache, but eventually had to turn them off completely.
  • Con: Pg-Up and Pg-Down scroll the cursor, not the page (inconsistent with most other apps).
  • Con: Insert (overwrite) doesn't work.
  • Con: Can never remember the recent files I actually need; even when just closed.
  • Con: File menu isn't native (no keyboard left/right menu switching).

Results

Use VS Code for my React + TypeScript projects; for its TypeScript insights. Use ST3 for everything else due to its lightweightedness and more consistent keyboard input.

History

Reference: Personal notes [ shared as Gist ]
2018-02-12 - Monday @7:40 PM
 Was staring/analyzing my memory consumption, and it hit me...
 Why am I using VS Code to write a Chrome extension...?
 Dropped it and went back to Sublime Text 3.

System / RAM

MSI: Windows 10 x64 i7; 16 GB RAM
  • VS Code: Running idle at 265 MB (1 file open; 730 loc; was running up to between 580 MB and 600+).
  • ST3: Running at 135 MB (10 files open).
  • MWB hovers around 140 MB.

Saturday, May 19, 2018

Does your butter expire next week?

Expired To Be (free; open source) is a quick and convenient way to set and be reminded of expiration dates.

New Features available in version 2:

  • Sort your list by expiration item name, expiration date, or 'days left' (until expiration notification).
  • Set a 'backup item date'.
    • Easily swap out expired items with a replacement date using the convenient blue checkmark icon on your item's date field.
  • More informative messaging.

Additionally, you can easily export and import your expiration lists for backup and portability.

Expired To Be is free and can be run as:


Expired To Be is open source on GitHub: https://github.com/KDCinfo/expired-to-be

Saturday, April 28, 2018

TypeError: Undefined: Redux 4

Redux 4 > createStore > compose

The Error

            TypeError: Cannot read property 'apply' of undefined
            [node_modules/redux/es/redux.js:523]
        

The Problem and Solution

If you've gone through a tutorial in which they suggest adding the Redux Dev Tools in your store.js like this:

            window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__()
        
But they're using it inside of a compose(), you could receive a Type Error for an undefined when the extension is not enabled (or present). The correct way to implement the Redux Dev Tools within a compose is as follows:

            window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose
        
I learned this the hard way, and was eventually brought rescue from GitHub user [zalmoxisus].
zalmoxisus also references the docs for this: [1.2 Advanced store setup (middleware and enhancers)]

Code Extract from [store.js]

      compose(
        applyMiddleware(...middleware),
        window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__()
        window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose
      )
    

A Little Error Verbosity

Friday, April 20, 2018

Tech Schools: Full-Stack JavaScript

Would anyone know of any good 6-12 month tech schools in the US that offer job placement? Looking to specialize in Full-Stack JavaScript.

Sunday, April 01, 2018

Expired To Be: Now Available Most Anywhere

As a gift to the month of April, Expired To Be is now accessible from any browser! :)

What is...
'Expired To Be' is an app where you can set reminders for 'things that expire'. Initially only available from the Chrome web store as a Chrome browser extension, it can now be accessed from any browser.
The new SPA version of the app is hosted on GitHub Pages (and built via Travis CI).

Both apps share the same source code, which is all open source on GitHub.

A Special Treat
The one and only; SPA Integration Diagram: This diagram details the layout and integration between my custom React 'Alarms API' and the Chrome extension core files.

SPA Alarm Notifications
The Expired To Be 'SPA version' provides a few options for 'expiration notifications' (although unfortunately some platforms still don't support web-based notifications; in which case it'll fall back to using the default, which is `alert()`). Modals are the other option, but are more passive.

Important Notes




  1. The SPA and Chrome extension do not share alarms. The extension uses Chrome's own internal storage and alarm system, which is not accessible from a normal web page.
  2. The SPA web page (tab) must stay open to allow the alarms to run. The Chrome extension runs in the browser's background.
Alarms API
For my React-based Alarms API, I borrowed the `TimerBox` component from my previous 'Done (for now)' SPA. (Done (for now) is a multi-timer; it was my 3rd React app, and my 1st TypeScript project.)

Data Storage
Because the 'Expired To Be' and 'Done (for now)' web apps both share the same `localStorage` (one for alarms, the other for timers), I made the Done (for now) timers viewable from within the 'Expired To Be' web app. I then went back and made the 'Expired To Be' alarms viewable from inside the 'Done (for now)' web app as well. Neither app can modify each other's alarms or timers, but there's room for some cross-app adaptability.

Always open to feedback. PRs welcome. ::tiphat::

Keith D Commiskey

Tuesday, February 27, 2018

Expired To Be 1.4 Released

'Expired To Be' is a Chrome extension available on the Chrome Web Store.

This Chrome browser extension allows you to enter expiration dates with 'alarms' (measured primarily in days) for any items you'd like to be reminded of.

New features added in X2B 1.4:

  - You can export your existing expiration items.

  - You can import over 500 expiration items (the app will automatically walk through saving each item from the list you provide).

  - I've also completed refactoring to enable a SPA version of the app that will work in any browser (no extension required). However, it will take a little time to implement a local 'alarm' interface, and to implement an optional (and opt-in) Web/Desktop Notifications system. Stay tuned for X2B 2.0!

How it Works: The Expired To Be Chrome extension will provide notification reminders at a time of your choosing (which is the actual expiration date, minus your 'lead time'). The primary notification for when an item expires is a number count that will show in the extension's icon (in the Chrome toolbar).

Expired To Be is also open source on GitHub. Issue submissions and PR's are welcome.

Wednesday, February 21, 2018

Expired To Be: A Chrome Browser Extension

Expired To Be

A Chrome Browser Extension

Set and be reminded of expiration dates.

'Expired To Be' is a Chrome extension available on the Chrome Web Store.

Get notified of expiring items for things you don't think about too often; like butter, medicine, or the supplies under your sink.

As a developer, I spend most of my life in Chrome, which is why I decided to create this app as a browser extension. This was my 2nd Chrome Extension (the first being "Character Counts", which I wrote as my Final Project in Harvard's CS50 course).

Although I built the extension primarily for personal use, I also wrote it for continued JavaScript practice: It is open source on GitHub, and I'm completely open to feedback as well as PRs. And I'm especially open to looking into any bugs.

Development time took just over 2 weeks. This was one of my more tedious projects I've worked on in awhile (migrations with Laravel, Nov 2016, actually), but then I was a tad sick through part of it as well (I know, excuses, excuses!). I also delved into about a half dozen development areas I'd not touched much, or at all, prior. Complete development history details provided on GitHub.

I might make a SPA version, if I find myself needing one, or perhaps if there were outside interest. Creating a FireFox extension would make for a good fork and school or side project for someone.

Expired To Be: Chrome Web Store: https://chrome.google.com/webstore/detail/expired-to-be/kamjiblbgmiobifooelpmlkojmadmcan

GitHub: Expired To Be: https://github.com/KDCinfo/expired-to-be

GitHub: Character Counts: https://github.com/KDCinfo/character-counts

Monday, February 05, 2018

Character Counts V2

The Chrome Web Extension "Character Counts" has been updated.

Current Features:

1. Count the number of selected characters on a page.
2. Convert an ASCII(char) string* between normal ASCII, ASCII (Int), and Binary.

* A string is represented by characters, words, and/or entire sentences.

New Feature:

1. Choose if your conversion input (source) string is ASCII(char) (default), ASCII(int), or Binary. The 'Convert' link will then cycle through the 3 conversions (although really 2; one converted output will always be the same as one source input).

  For Example:
  - ASCII(char) = ABC
  - ASCII(int) = 65 66 67
  - Binary = 01000001 01000010 01000011

Character Counts is available for free in the Chrome Web Store.

Character Counts is also Open Source on GitHub.