Handy Honorware

Honorware seems to be a newer term to describe freeware that asks for donations if you like the product.  It’s otherwise not limited in use, like most major companies’ “DOWNLODE FER FREEEE” or “PHREE TRYLE!” marketing gimmicks that permit them to slap the word “free” over everything as long as one small component of use is free.

(let’s be real, though.  This “free” really isn’t)

I’ve been using a few of them for quite a long time, and I finally got up the gumption to donate some funds to the developers.  Most of you probably know of at least one of these three.  The other two may not be as familiar.

Disclaimer: I am linking to these products because I like them.  I am not receiving any kind of stipend or kickback from these product developers.  Contrary to common blog themes of “MONETIZE UR CONTENT!!!!!” it actually is possible to like a product for its own sake and promote it as such.

  • AdBlock.  While we get that many (most) Web sites now depend on ad revenue as one of their income sources, some are just ridiculously intrusive.  I’m not an advertising or marketing major, so I have neither the background nor interest in researching the effectiveness of advertisements through history, but my anecdotal observation indicates that it’s a really lousy source to rely upon for income.  As a consumer, it’s irritating so I ignore them anyway.
  • Greenshot.  Possibly the best screen-capture software ever.  Lightweight, and allows you to edit a screen-cap in its own built-in image editor.  More features than I ever expected, and more than I can adequately describe on this post.
  • Social Fixer.  My goodness, this thing is a blessing.  It’s a plug-in to Facebook that lets you tweak so many aspects of your news feed.  Annoyed by politics?  Get rid of ’em!  Sick of the Trending Stories box on the side?  GET RID OF IT.  Don’t care about where your friends Check In?  GET RID OF THOSE CHECK-INS.  It’s much more robust than expected, so non-tech folks who aren’t accustomed to spending the time to tweak settings may feel a bit intimidated by all the check boxes and options, but if you spend the initial time investment, it’s so much cleaner and less stress-inducing.

Conditional Formatting Not Applying Unless I Modify Cell Content with F2

I have a big spreadsheet fed by a data model in Excel 2016.  Several columns are numeric values and the end user wanted conditional formatting to apply colors to certain value ranges (green for scores 51-100, yellow for 41-50, and red for scores 40 and below).

When I created my first conditional formatting rule for the scores 51 and above, it highlighted everything.  Only when I updated a cell with F2 did the correct condition apply.  Naturally, I didn’t want to modify over 300 cells in at least 4 columns, especially if my model updated with new data.

After a couple of hours of searching the online world using a multitude of combinations of the words in the subject above, I discovered the problem.

Even though the numbers appeared visually as numbers and even though I set my cell formatting for those columns to numbers, the underlying model had stored them as text.

I returned to my data model and sure enough, the data type for my numeric columns were set to text.  I changed them to whole numbers, refreshed my query, and the condition applied properly.

 

Use Assessments to Build Student Groups

Illuminate as two main ways to build student groups: choose a common characteristic of those students as the basis or use the results of an assessment to separate out a group of kids.  But what if you need to provide an assessment to a group of students who have no common characteristic?

Or what if that common characteristic doesn’t exist in the Illuminate dataset?

For example, a question I was asked was “do kindergarteners who receive a waiver perform differently academically in later years versus those who do not receive a waiver (and therefore, start kindergarten later)?”  Another request I received was to be able to generate Illuminate answer sheets for math test-outs being administered to various students of various grades from different buildings, simply because they applied for the test to skip certain math classes.

In both of these cases, Illuminate stored no common characteristic of these students.  For the kindergarten waiver question, I could have used an unused field in student demographics to build that common feature (which I’ll discuss in a future post), but because this was an ad hoc report intended to prove a point, it wasn’t worth the extra effort to build automation around it.

The students applying to test out of certain math classes certainly had no common characteristic.

So I used an assessment itself as the tool to establish that commonality to create the student group.  Here’s how.

Create a Dummy Assessment

The dummy assessment simply consists of one question.  The answer doesn’t matter, as all we’re looking for is a way to capture the specific students we need.

The students we need are identified in our SIS, so the import file can be built out of there.  I narrow down the students who had kindergarten waivers, or applied to test out of Math 8 or pre-calculus.

Upload the Students

I reduced this CSV to two columns: StudentID and Q1.  Q1 (the “answer” to the question) simply needed to contain the same character for each record.  This was then uploaded to the dummy assessment, which produced the familiar overview:

Now we know that 403 students in the district received a waiver for kindergarten at some point.  The rest of their demographic details are stored in Illuminate already.

Create the Student Group

Creating a student group from an assessment requires generating a report first.  So let’s do that.  Clicking on either the donut or the number of students in the summary section will display the list of students:

Click Create Custom Report to create the report consisting of only these students.

From inside that new report, click Advanced then Create Student Group.

And now that student group can be used as any normal student group.  That group can be used to generate pre-filled answer sheets for particular assessments, it can be used as the basis of a trend report, or it can even be used as a focus group or intervention group.

What otherwise started as no other commonly bound group of students are now together through a few extra steps.

I Had the Best Music Class in Middle School

I realized just now that the only person I’ve told about this is my wife.  So let’s fix that.

In 7th grade, I, naturally, had to take several classes that are called “specials” now.  These are the arts, outside of general ed curriculum, like music and art.  My music class was unlike any other, and in my 18 years working K-12, I’ve never seen it again.

7th grade, 12 years old.  I learned the history of rock’n’roll.

Our music class wasn’t a bunch of bored pre-teens sitting around singing boring songs out of tune and off-key.  We weren’t playing instruments badly.  No, we were learning about the impact and influence of early jazz and big band and swing and gospel on what would ultimately become “rock and roll.”

We listened to the Beatles’ “Revolution #9” and because it was the ’80s and record players still existed, we learned about the backwards playing.  And we actually listened to it, and examined its impact on society at the time.  I learned about Led Zeppelin, The Who, The Yardbirds, Cream, Deep Purple, and Jefferson Airplane….and their evolution into Starship, since “We Built This City” was the new hit song on the radio at the time anyway.

It was not just a history of rock and roll, but a history of the ’60s and ’70s at the same time.  If we weren’t listening to records and tapes, we were watching documentaries about Woodstock (sanitized and censored to be appropriate for 12-year-olds, of course).

At the end of class, our teacher would let us play a cassette of our choice.  He encouraged each of us to bring something in to share with the class.  If nobody did, then he would play his own mix-tape of classic rock.  I, of course, would bring in my “Dare to Be Stupid” tape, and not only would my teacher laugh at Al’s parodies but he would dive deep into Al’s musicianship and songwriting skills.

He literally dissected Weird Al Yankovic.

It was the best music class I’d ever had.  And it’s something I’ve never seen since.

When Field Calculations Identify Typos in Sources

The project: aggregate Fountas & Pinnell performance results for the past three school years.

The challenge: put together the assessments from 6 grade levels over 3 years in 2 test periods per year into one table (so a total of 36 separate sources into one).

Result: something isn’t right.

I created the source table in Illuminate and downloaded it to prepare to use JasperSoft Studio Pro to create a BI analysis of performance over time.  That’s when I noticed something weird:

At the same time, I loaded the file into Excel to start a pivot chart, and saw the same thing:

Where is the 2016 academic year for 1st grade?  And what the hell is that 201 doing there?  I clearly had bad data in the source file.

So I went back to Illuminate to look at the custom report that created that data file.  I sorted by academic year to see where that 201 was coming from.

The reason this jumped out at me is because of the use of calculations and translations in the Advanced menu of the report builder.  I needed to somehow grab the grade level of the student and the academic year in order to get some kind of separation in my BI report, but that information isn’t stored within the assessment itself because of how Illuminate manages student visibility to users, depending on permissions and filters.

To get around that, I created the Grade column as a calculation, using the formula SUBSTRING(G FROM 19 FOR 1), which means “take Column G (the one titled Assessment Grade/Administration) and starting at position 19, grab 1 character.”  Because all of the assessments are named according to the same convention, that position would be the grade value (K, 1, 2, etc.).

Then, I created a second calculation column for Academic Year.  That formula was SUBSTRING (G FROM 1 FOR 4), so taking the first four characters of that same column, resulting in values of 2014, 2015, and 2016.

I wasn’t done yet, because those don’t really represent the academic year the way we need it to.  Those values are the start of the school year, when I want the end.  In comes the translation feature in the advanced menu.

I added translations for all three values, making 2014 = 2015, 2015 = 2016, and 2016 = 2017 so that at the very least, when I download the data, it’ll look right and I can do additional manipulation after that.

So when I saw the blank in Grade and 201 in Academic Year, there was something goofy going on with my calculated fields and translation.

Then I looked to the right and saw that they all shared the same assessment source.  2015-16 F&P Grade 1 Spring.  I stared at it for a moment.  Every other assessment grabbed those substring values correctly except for this one.

Which meant that, since the substring calculation for academic year was supposed to grab the first four characters, and the grade field grab the 19th character, but I was only getting the first three of the year and a blank for grade…..

Was there a space in the name of this particular assessment that I can’t see right off the bat?

I went into that assessment and opened up the information window for it, and lo and behold….

The calculations and translations were working correctly.  The calculation for the year was grabbing the first four characters, as designed.  The problem is that the source had an extra character where it shouldn’t have been.  Which caused the 19th character to be the space before the 1.

And since I didn’t build a translation rule for values of ” 201,” it didn’t translate anything for me.

Take out the space, go back to my custom report and…

Perfect.

So even though we don’t want bad data, bad data can still tell a story.

 

Cliches to Make Your IT Life Better

Two simple cliches that have improved my life over the years:

There’s gotta be an easier way.  This means that no matter what problem you’re trying to solve, you’ll probably find yourself deep in the weeds and overgrowth at some point.  That’s when you have to stop and say “there’s gotta be an easier way to do this,” because there is. You just have to find it, and finding it means reevaluating what you’re doing and what you’ve done.  What you’ve been doing is clearly not the easy way if you’re at this point.  Which leads to the next one.

Make the computer do the work.  That’s what they’re built for!  Automating repetitive tasks, which they’ll do much faster and more accurately anyway.  As OSes and software grow and advance, more automation is built in.  Learn them and take advantage of them.  If you’re doing things manually all the time, you’re doing it wrong.

Clearing a Remembered Login from SQL Server Management Studio

Dating back to the olden days of earlier versions of SSMS, it likes to remember the login name of the last new user, even if that user has since been deleted.  While it’s not a functional deal-breaker in using SSMS, it’s just plain ol’ annoying.

The information is stored in this file (naturally, I’m using Windows 10 here):

%AppData%\Microsoft\SQL Server Management Studio\[version]\SqlStudio.bin

I renamed the existing SqlStudio.bin to SqlStudio.bin.old and the next time I launched SSMS, it recreated a new SqlStudio.bin:

The only downside, of course, is that it blows out everything — saved server connections and every other login detail.  But that shouldn’t be a big deal because if you have many servers and many different logins, you should have all of that stored safely in a secure repository elsewhere, right?

I mean, nobody would be silly enough to use the same simple password for “sa” for every SQL server they manage, right?  Right?

More UEFI Fun: Apply Operating System Fails Again and Again

Y’know, I’m just going to stop mentioning 0x80004005 because we all know it’s the most common thing that happens when a deployment craps out, and it’s the least useful error code ever anyway.

The situation was that, on yet another Latitude E7470 with UEFI boot, my Win 10 1703 EDU task sequences are failing at the very early “Apply Operating System” step.  Consistently.  SMSTS.log tells me stuff about the system drive and partitions, so I’m wondering then if it can’t find the drive for some reason.

I do a search on “Unable to find the partition that contains the OS boot loaders. Please ensure the hard disks have been properly partitioned”

CMTrace also identified this information:

Unspecified error (Error: 80004005; Source: Windows) ApplyOperatingSystem 6/16/2017 8:54:50 AM 2004 (0x07D4)

I happened upon Henk’s blog post.  Flippin’ Secure Boot.

I went into BIOS after a reboot, turned off Secure Boot…..and now I’m watching a beautiful vision of task sequence that’s actually applying.

 

UEFI? Book it!

This past week, my Win10 task sequences were failing on the Latitude E7470s.  Yet they were fine on my testbed Intel NUCs.  The same task sequences, so it wasn’t the software.  What the hell was going on here?

Then I started piecing it together.  Intel NUCs vs. Lat 7470s.  The task sequence on the Lats go really quickly to Applying Operating System where it failed.  SMSTS.log said:

There are no more volumes available for use.

The requested target could not be resolved to a valid volume on this computer. Check your task sequence to ensure this drive is correct and that it is being createdThe requested target could not be resolved to a valid volume on this computer. Check your task sequence to ensure this drive is correct and that it is being createdThe parameter is incorrect. (Error: 80070057; Source: Windows) ApplyOperatingSystem 6/15/2017 9:03:44 AM 1596 (0x063C)

I then noticed that the step where the TS should be formatting my drive to UEFI was not actually starting.  Why?  It had to be that step, because the NUCs, which are on legacy boot, partition normally as BIOS.  I looked at my task sequence variables, because everything else looked fine.  Then, I saw it:

The variable “_SMSTSBootUEFI” had somehow changed to “_SMSTSBookUEFI.”

And since I copy/paste tasks from sequence to sequence, I had inadvertently copied this error to all of my Win 10 task sequences.  After correcting that, my Lat 7470s partitioned, formatted, and applied the OS correctly.

But how in the hell did that get changed in the first place?

Deploying Sketchup 2017 with SCCM & Windows 10 1703 EDU

For the past few months, I’ve been struggling to deploy Sketchup 2017 with SCCM.  2015 seemed to deploy much more smoothly, despite having to implement a few kludgy workarounds.  But no matter what I tried, 2017 would fail during a task sequence with the dreaded 0x80004005.

Sketchup’s support site mentioned that 2017 requires .NET Framework 4.5.2, and seemed to imply that 4.5.2 was the only version that it supported.  That sounded strange to me, especially since attempting to install 4.5.2 on an updated and patched Win10 introduced even more work than I wanted to put in.  And once I ran updates, I had .NET 4.7 anyway.

But they also mentioned needing to install the Visual C++ 2015 Redistributable.  My vanilla Win10 install has 2013 installed.  OK, so let me give that a try!

I manually installed VC++ 2015, then installed Sketchup.  Success!

I wiped the machine and tried to install Sketchup by itself.  FAILURE!  I forget the exact error message, but it would fail:

For our friendly neighborhood search engine crawlers, the text of the error is:

Module C:\Program Files\SketchUp\SketchUp 2017\ThumbsUp.dll failed to register. HRESULT -214024770. Contact your support personnel.

 

I grabbed the stand-alone installer for VC++ 2015, packaged that up, then applied it to my task sequence.  I also created some basic .CMD files to copy the volume license file and to clean the desktop of the shortcuts that Sketchup created.

In my source folder, I have four files: the Sketchup MSI installer itself, my activation_info.txtcleanuplinks.cmd, and actinfo.com.

cleanuplinks.cmd:

@echo off
del "C:\users\public\Desktop\Layout 2017.lnk"
del "C:\users\public\Desktop\SketchUp 2017.lnk"
del "C:\users\public\Desktop\Style Builder 2017.lnk"

:SUCCESS
exit /b 0

actinfo.cmd:

@echo off
copy "\\systemcenter\sources\Apps\SketchUp Pro 2017\Files\activation_info.txt" "c:\programdata\sketchup\sketchup 2017"

Naturally, both could be combined into a single batch file, but I kept them separate so that I could activate & deactivate either in my task sequence while I’m still testing.

Finally, how the task sequence is built: