i am ski

One Day at a Time


No, not the old sitcom.

In the quest to learn (insert subject here), it's important to practice a bit every day. At least for me. Some days, however, are quite the challenge for me. I want to get better at Javascript, but I find myself bouncing around topics. Three days ago I was going back through the freecodecamp.org Basic Javascript curriculum and making my way (again) through their tutorials. Yesterday, for some reason, I started watching a React tutorial on Youtube. I keep telling myself I need to learn to walk before running, but my scatterbrained self gets distracted easily. And then some days I don't want to practice coding at all and instead want to play within Logic Pro, or Ableton, or Reason.

Maybe I need to practice focusing on one particular project. Perhaps there's a YouTube video about that... oh, look, "The Office" bloopers!

Sometimes Too Many Choices is a Bad Thing


I've been poking at the site recently, updating the templates and sprucing them up a bit, as it were. Which I find both amusing and annoying; I just can't seem to stop picking at the site, and adding bits and pieces (see the new footer?), when what I want to do is write more content for the blog. I don't want to keep messing with things; for the most part I'm enjoying how the site looks and the layout and ease of navigating. But I just can't leave well enough alone.

I even went so far as to install Ghost on my local machine to start playing with that particular CMS to see if I wanted to install it on my site. Why? Mostly because... why not? I like to tinker and get a feel for something, but one of my bigger shortcomings -- at least in my eyes ( and if you think there are other, bigger ones, please keep it to yourself, thank you very much) -- is my lack of digging deeper and really getting to know how to work with, and learn what it is I'm tinkering with.

I have four different DAWs. FOUR! Who needs four? I just like to poke around and see what's different about each one and dick around with them all. I do that for not only a lot of software, but kind of my life in general. I have several guitars, but can only play passing well. Why several guitars? Because I can! I figure out what I need to do to get what I want accomplished, and then either get bored or am not that excited about learning more about (insert whatever here).

I want to write more, and get better at it. I enjoy writing short stories and want to take a stab at something bigger. What tools does one need to write? Paper and pen at the very basic level. I have horrible handwriting so I would rather type something out. All computers nowadays come with some sort of basic editor preinstalled (TextEdit on Mac for example), and if you need something fancier, Google Docs is free. But I want to write literature. So I need some fancy piece of software designed specifically for someone to write novels with.

At least, that's how I tend to normally think.

Some years back, my wife gave me Scrivener for Christmas, and I was all set to sit down and write The Novel with it. While that hasn't even come close to happening, I have written several smaller pieces, from short stories and poems to journal entries. And recently I purchased an iPad (that's a whole other journal entry waiting to happen), and because I have the iPad, I just needed the iOS version of Scrivener.

Or did I?

I started looking around at other writing apps for iOS. The one that seemed like the one to get was Ulysses, and to be quite frank, the reason I zeroed in on that particular piece of software was because one of the bloggers I follow, a fellow by the name of Matt Gemmell, uses it on his iPad. He had been a Scrivener user and then switched to Ulysses. And I figured if Matt went that route, maybe I should too.

Before I plunked down the cash though, I managed to take a step back and reconsider. I'm not a writer. I'm a dabbler. Or a wannabe, as I stated in my About page. I have perfectly good software in Scrivener. Better than good, in fact. It's consistently rated as one of the best apps specifically aimed at writers. And while I might not know all the ins and outs of it, I am fairly comfortable with it. The end goal, which is writing a story, is still the same. I'm just wanting to use different tools. In this particular case, it's like using Indeed or LinkedIn to find a job - both have plenty of jobs listings, but it's the end goal of find the job one should be concerned with.

And if I'm completely honest here (and after all, isn't that what part of journaling is all about?), there's also an aspect of avoidance. I tell myself I need to get better with the software to write/compose/create, or that I need to checkout all the options because I might miss the best software available, but that's an excuse. Because writing, playing music, photography, whatever it is I'm into currently is hard. It takes discipline, which I lack in droves. It takes commitment, which I'm lacking in as well. As an example, just in writing this entry, I've stopped once already to go play on slither.io. At times, I wonder if it's a medical issue - maybe like a sort of ADD. I do tend to get distracted easily, so it's possible I suppose. I doubt I'll ever go to a doctor to find out for sure though. So I'll try to focus on recognizing when I'm procrastinating and avoiding.

Ulysses is also subscription based. I want to pay for my software once and own it. I hate feeling like the program I'm using will suddenly stop working if I don't want to pay year-after-year. So another positive for Scrivener.

In short, it's time to be appreciative of what I have, and focus on the what I want to accomplish. I'm going to make myself a promise to write something tonight, something aimed at getting my story (be it a novella, novel, short story, or hell, maybe an epic poem, who knows) started.

It's time for me to listen to Nike. I need to...

Back to Task


Now that it appears the website issues are back under control, I can move on with more Javascript practice. Before the snafu with updating the Grav theme I was using, I was working on some pretty basic stuff in Javascript, mainly reversing a string. In the post about it, I detailed using Javascript's built-in functions to accomplish the task. I mentioned that there was a way to also do the same thing using Loops, and that was what I was going to practice with next.

While looking over some of the examples to try and understand things better, I found that in latest version of Javascript -- ES6 -- there's now a for...of statement that loops over "iterable objects". Quite frankly, I wasn't sure what "iterable" meant (I figured it had to do with counting objects), so I looked that up.

Boy, I wish I hadn't.

I did a simple right-click -> lookup on the word "iterable" to see what Apple says the definition is. Their definition came from Wikipedia which says:

In mathematics, an iterable cardinal is a type of large cardinal introduced by Gitman, and Sharpe and Welch, and further studiedby Gitman and Welch. Sharpe and Welch defined a cardinal κ to be iterable if every subset of κ is contained in a weak κ-model M for which there exists an M-ultrafilter on κ which allows for wellfounded iterations by ultrapowers of arbitrary length.

ಠ_ಠ

I'm not a mathematician, and now I know why. That's a bunch of gobbly-gook right there.

But onto trying to figure out what the for...of loop accomplishes and how it works.

At first, the syntax seems fairly straight forward: for (variable of iterable) { statement} But once I combined that with the reverse string example:

function reverse(str) {
  let reversed = "";
  for (let char of str) {
    reversed = char + reversed;
  }
  return reversed;
}

I started getting confused. At first glance upon looking at the syntax, it seems simple enough: for a variable of the iterable, do something. But looking at the reverse string example, it first sets reversed to an empty string, and in the for...of loop, it does a let char of str. OK, so, let the character of the str parameter we pass as an argument to the reverse function be reversed by adding the char to the reversed variable.

And then return that variable.

I am so confused. I try talking (or, in this case, writing) the logic out-loud in hopes that it'll stick to some part of my brain, but this time, not so much. How is it deciding the reverse the string? This is a big part of why Javascript (and really, programming in general) doesn't make sense to me. There seems to be something going on that a lot of more practiced developers take for granted that I'm just not getting.

I'll keep plugging away and report back later if I have anything of value or makes sense.

Meanwhile maybe I should write about butterflies or something. They're pretty.

It's Always Something


Here I was, all excited about getting a new blog underway, with a new CMS to practice with, and of course, I blow it up within a day.

Which was stupid. I'm familiar enough with child-themes, having built a few with Wordpress. But my brain apparently checked out, and I went and heavily modifed the bootstrap-blog theme I was using. And then the next day, Grav notified me of updates that needed to be done. Being a good little web developer (ha), I always try to get updates in as soon as possible. Gotta keep those files up-to-date so the site stays secure, right?

So I updated Grav, as well as the theme, and everything just went to shit, to put it bluntly. It took me the better part of the day to figure what I'd done, and quite frankly, I'm still not sure I'm 100% certain what happened. On top of that, I don't even know why the new page I added -- once I had everything back to looking 90% of how it was -- won't show. It was a simple About page, but if I try to visit it, it just leads to the default home page (which is just my blog listings).

So back to the drawing board. Part of the reason I stopped debugging to write this out is sort of as a test. I want to make sure at least the blog posts show up. I can work on the individual pages seperately, just as long as the blog posts continue.

Fingers crossed!

Practice JS


I'm between projects at work, and there's only so much reddit I can peruse. One of the skills essential for a front end developer nowadays is Javascript and my skills have always been rusty at best. Rather than play on social media or my phone, I'm going to work on becoming more comfortable with Javascript. It's certainly a better use of my time.

There are dozens and dozens of resources out there, both free and paid. I think I'll start with some basics on YouTube and work my way over to freecodecamp. Or maybe vice-versa. Who knows. I'm also going to show what I'm learning here, and present it as if I were teaching you to code. I think that will help my overall learning process.

I'm going to start by trying to solve a question I was asked in an interview some months back, and see if I can work through that: Reverse a string. Let's go!

One of the best sources on finding how to do, well, anything in this world is Google. Doing a search for "Reverse a string in Javascript" returns over 22 million hits. I definitely should be able to find something to answer this question then!

The first site returned talks about using Javascript's built-in functions. Namely, split(), reverse(), and join(). If you read those functions by themselves, they make sense: Split, we're going to split the string, then we'll Reverse their order, and then we'll Join them back together.

The actual function looks like this

function reverseString(string) {  
    return string.split("").reverse().join("");  
    }  

reverseString("I can learn this!");

Utilizing Chrome's Developer Tools, I used the console, copied that in, and "!siht nrael nac I" was returned. Here's a breakdown of what's happening:

First, we use split() to take the string "I can learn this!" and turn it into an array: i.e., ["I", " ", "c","a","n"," ","l","e",...] Notice that the spaces are included in that split. Next, reverse() takes that new array created by split() and reverses it. ["!", "s", "i", "h", "t", " ", "n", "r", "a", "e", "l", ...] Finally, join() is used to join the letters in the new array back together.

Fairly simple once you break it down. Really, my biggest issue with this apparent mental block about learning Javascript (aside from the fact that I just don't seem to use it enough in everyday work), is the syntax. Parenthesis () vs. Curly braces {}. When to use them, and when to add a closing semi-colon. This really just comes down to practice for me, and hopefully doing something like this blog post on a daily, even weekly basis, will help with that.

There are other ways to reverse strings. That's something that's true a great deal of the time in programming (and in life really); there's always another way to do something. One of those ways is using a For Loop. Because loops are an important part of programming in general, I'm going to tackle that in my next post.

Reboot


I'm not sure I could tell you how many blogs I've started over the years. I used to blog before it was called blogging, and was manually adding entries to HTML pages. While I might have been doing this for well over 20 years, I've certainly not been doing this consistently. Hopefully this time will be a bit different.

I like to write, when the mood strikes, and having a place to write about whatever I feel like writing about will be nice. As stated on the homepage, there's not really going to be any sort of focus; whatever strikes my fancy I suppose. There'll be talk of tech/geeky stuff, and music as well. Might be some photography plus the occasional photograph. Babbling mostly.

As this is the inaugural post, let me introduce myself. I'm Shad (my initials are SKI, hence the i-am.ski domain), an Arizona native currently living in Northern Virginia. I've lived here with my family for over twenty years now, and man does time fly. I work as a front end developer, but mostly I fix what the back end developers don't want to bother with. Which is mostly OK. I'm your typical suburbanite, with two kids (both grown), a house in the 'burbs, a truck, a motorcycle, and a wife who wishes I was was handier at fixing things. I'm one of those guys who can turn a two hour job into something that lasts all day with two or three trips to Home Depot or the auto parts store.

This website itself is pretty bare bones, and I plan on keeping it that way for the foreseeable future. Hopefully this helps me focus on the content rather than the presentation of said content. But I will give some of the geeky details: As of June of 2019, I'm using Grav to run it, as I a) like playing around with new CMS's and b) didn't feel like I need a database for anything. I'm running it with the Admin plugin to just make things a bit easier. It's running the Bootstrap Blog theme by Ayoze Hernández Díaz.

And that's about it. Like I said, trying to keep it bare bones.

Stuck


I’ve talked before about lack of motivation and how actually trying to finish a project seems to defeat me every time. I’m in that zone again where I’m feeling like I want to start a new… something…. and I’ve noticed that when I’m getting this way, I start looking at how other people have accomplished things, or the tools they’ve used, and use that “research” as an excuse to not get started. Eventually that feeling of wanting to start something new, or finish something that’s perpetually in progress passes.

In sort, I find ways to defeat myself. I recognize that about myself, I know the key to fixing it is to do like Nike says and “Just Do It”.

Easier said than done I guess. I’m still stuck.

Slacker No More


Updating here has come pretty much to a standstill, but I’m hoping to remedy that soon. I’ve decided that rather than bemoan the fact that I have too many interests (writing, music, photography, web design, etc…), and then get overwhelmed and not do anything towards being creative, I’m going to instead set aside time for each pursuit. Rather than focus on one, I’m going to dabble in all.

What’ll make this fun/frustrating is that I’m horrible with time management, and I can be seriously lazy. So we’ll see where this gets me. I’ve been thinking about this for the better part of two weeks, so I’m hoping when my 40th birthday rolls around (23rd of December for those keeping track at home and want to buy me something), that I’ll have a basic list of the things I want to accomplish, and a basic schedule of how I’m going to accomplish it.

Wish me luck.

Slackin'


I think my desire to post here waxes and wanes... but more waning lately than waxing.

Pretty much, life is the same. Work is work, but at least I have a job. I’ve been wrestling off and on (again, more off than actually on) with Drupal in trying to get it to work the way I want it to work with a new site I’m attempting to create. Kids are back in school and seem to be adapting well. The oldest is keeping on top of things, which is good, and the youngest is enjoying middle school and all that entails.

I bought a truck back in August. She’s a 2006 Tacoma Double Cab 4WD Long Bed. I named her Rosie.

I have plans for her, new equipment, new wheels and tires, etc. Naturally those all cost money, which I don’t have enough of at the moment ’cause I just bought a new truck. Vicious circle.

Gail’s off to Ireland this Friday. Assuming she can kick this cough-bug-flu-bronchitis thing she has. Whatever it is. She doesn’t know, doctors don’t know. Hopefully she’ll be OK to travel, ’cause she’ll kick herself if she doesn’t get to go with her ghost hunting group to Ireland to visit the castles and such.

Soccer’s back in season, but I’m not coaching this year. Had originally planned on going back to school, but can’t afford that so now I’m looking at getting a part-time job to get on top of these bills so I can go back. We shall see.

And that’s how my world is turning, in a nutshell. Exciting, no?

Cars, Wizards, and iPhones


I hate car shopping.

As many of you (all three of my readers) probably know, I’ve been in the market for a new/used truck. I’ve been doing a lot of research and have settled on a very specific model. So this past Sunday I went to test drive one. They had the short bed version in stock, but not the long bed. I figured the ride wouldn’t be a whole lot different, so I took it out for a spin. I was rather pleased. It has a stiff ride, which is to be expected as it is a truck, but at highway speeds of 65mph or more, it was a quiet, smooth ride. The dealership would have to order one for me if I wanted it in the green they have (Gail thinks red is too flashy, I detest silver, so green is a nice compromise). The Cash for Clunkers rebates kick in on the 24th, which means I’ll have to purchase a brand new truck if I want to take advantage of the rebates. I’ll have to seriously massage some numbers to see if I can get it in the price range I want. And that’s the part I hate. I like test driving, I like searching tons of car sites, reading Auto Trader, and walking car lots. I hate the negotiation part. That’s part of why Carmax appeals to me – no hassle pricing. If the Carmax dealer by me sold new Toyotas instead of Mitsubishis, it’d make life much easier.

Aside from that, we had a busy weekend. Gail and I took the kids to see the new Harry Potter movie, which we all thought was excellent. Looking forward to seeing last movie. I think the movies themselves have just gotten better as they go along, which makes sense; the kids are better actors, they’re growing up and filling out their roles.

After the movie, Gail asked if I wanted to go to the Apple store, as it was in the same mall as the theater. I said “I can’t go in, I’ll have to buy something. I can only go in there so often and come out empty handed!” She said “So...let’s go.”

I took that as permission.

We went, and man was that place crowded. Gail remarked that you couldn’t tell there was a recession going on judging by the crowd in there. She was right. Wall-to-wall people. Gail found the iPhones and started playing, and then watched a guy who was giving a class on the iPhone. She has been wanting one almost as much as I have. I leaned over and said “If you go and ask if they have the 3Gs in stock, I’ll buy you one.” I don’t think I’d finished expelling breath from that sentence before she was gone from my side. Five minutes later, Sarah came up and said, “Mom’s looking for you.” Gail was at one of the laptops, and was half-way through the process of upgrading to the iPhone. She looked at me quizzically, to see if I really meant it. She’d filled out all but the last four digits of my social security code on the upgrade form. I punched those in, and hit next.

We got in line, and about 20 mins later we were walking out of the store with her new iPhone. She was very happy, and for those that are wondering why I didn’t buy the iPhone for myself, as much as I’ve been talking about it lately, well – her smiles are always worth it. And her phone was starting to go into the crapper anyway. I’ll get one soon, and it’ll be easier to justify it now as well. See, aside from the cheese-factor of making my wife happy, there was also a bit of psychology behind it; Gail played with her phone all weekend, loving how easy it was, how she was able to navigate to the app store and download stuff (great example of that in a moment), and just the general overall coolness of it. When I start complaining how my phone sucks, or I’m jealous, she won’t hesitate to drag me over to the Apple store and get one. Hopefully.

Sunday Gail and I got up to go walking along the W&OD Trail. We had walked all of about 30 yards down the trail when Gail said “oh, we should get my phone! It has a pedometer application!” We had left it in the car as she had no pockets and I didn’t want to be stuck carrying it. So we turned around and got her phone out of the car. When she said the phone had a pedometer application, I thought she meant already installed. Nope – but she knew the App Store had one, and even thought to look for a free one (which she found). And that’s part of the beauty of the iPhone, and Apple products in general; ease of use. Gail’s by no means a super computer user, but she had figured out how to get the iPhone to hook to the App Store and search for a application and download it. It took all of about 30 seconds, and then we were on our way, her phone sitting in my pocket counting our steps. Pretty damn cool. And I was surprised by the lightness, it didn’t feel heavy in my pocket at all.

Finished up the weekend by wiping Gail’s laptop and re-installing Vista. One way or another it managed to get a bunch of trojans and virii on it. Frustrating when the programs I tried (Spy Doctor, Norton, McAffee) couldn’t get rid of it. I figured it was due, so I told Gail the previous week to back up what she wanted, and last night I started the wiping process. I started by muttering how I wouldn’t have had to do this with an iMac (referring to my idiotic purchase of the Sony Vaio instead of an iMac) and Gail said, “Want to go to the Apple Store?”