Author: Lisa

Off Label Use: Git

I store a lot of code in Git-based systems, and I read through parts of my state’s Revised Code on occasion. But it never occurred to me to store the Revised Code in a Git-based systemWashington, DC has started doing exactly that.

First, some basic terminology from GitHub — a “commit” is a change. In this case, a change to the revised code text. An “Issue” is where someone points out a problem with the existing code or proposes an enhancement — in this case, someone either pointing out a typo or suggesting a new law. And a “Pull Request” (aka a “PR”) is used to accept a commit into the code — in this case, applying the change to the revised code text.

Imagine being able to comment on a pull request and have your commentary considered during the public hearings for the proposed change. Sure, there’s elitism to assuming everyone’s got a computer and time to peruse proposed changes. But not more than assuming everyone’s got an hour to head over to Town Hall and attend the public hearing. And resident-initiated changes could be proxied through a third party — city government staff, for instance.

The process could increase transparency — GitHub users can subscribe to get notifications when issues and PRs are entered into the system. An issue could be created when discussion over a proposed change begins. Links to public meetings and even discussion about the proposed changes could be available online. A pull request created by government officials finalizes the changes and commits them into the online revised code.

The git storage system retains history — a resident who is convinced an auxiliary building was totally in compliance of zoning regs when it was built could run through the history and identify exactly when the setback requirements changed.

Clicking into a specific “commit” will show you what changed — the left-hand column is the old version and the right-hand column is the new version. Something that was removed is highlighted in red; something added is highlighted in green.

From a procedural standpoint, there are some challenges. Their code is now maintained in XML, which isn’t necessarily something that will edit well in your favorite word processing program (Word, as an example, has some limitations when it comes to editing XML and, in my experience, generates really sloppy code — multiple style elements that all cancel each other out). Build automation is now a requirement of legal documents — a process that ingests changes to the XML and spits out an HTML web site or a PDF file. These challenges require someone with technical knowledge to maintain the revised code. 

Logistically, it might be challenging to convince residents — especially those who don’t work as software developers — to use what is a software development tool to interact with local government. Even without citizen interactions, I think having a change history is an incredible advantage to using GitHub to store the revised code. It would be interesting to chat with the people who implemented this in DC and determine if (1) they get a lot of malicious submissions and (2) actually see citizens propose changes through GitHub.

Document retention implications would need to be considered as well — user comments, maliciously entered issues or PRs, etc may be undesired. It’s possible to restrict “interactions” (comments, issue creation, PR creation) to an approved list of individuals. But there’s an advantage to allowing residents to copy edit the code and to propose changes to code.

Did you know …OneNote can extract text from images?


You’ll need to use the application, not the OneNote website. Insert the picture – from the ribbon bar, select “Insert” then “Pictures”. Select the image you want and click OK.

Right-click on the image. “Copy Text from Picture” does exactly that – if your image is low resolution or really blurry, it’ll take a minute for this option to be available. Wait a bit and right-click again.

The text from the image is now in your clipboard. I’m pasting it into the same OneNote page, but you can paste it anywhere.

Voila! Text:

Did you know …OneDrive and SharePoint Online can search for text within images?

It can! Store pictures of business cards and you can search for names. Take pictures of installations and find a set of photos by the business signage. Search through your expense reporting receipts for a specific restaurant. You don’t even to do anything except save an image file on OneDrive for Business to enable this feature.

To find an image containing specific text, open OneDrive from WinAnywhereand use the search dialogue.

In this example, I’m looking for the receipt from a meal –but I haven’t included the restaurant name on the receipt images. But I can search for the restaurant name – type part of the name and hit enter.

The search result set include an image file:

And that’s exactly the receipt I needed!

Text indexing is performed on image files like bmp, png,jpg/jpeg, gif, tiff, and even raw. Slightly blurry out-of-focus pictures snapped in poor lighting are indexed too 😊

* Text is not immediately indexed upon upload – it took about twelve minutes before I was able to search for the image I had uploaded.

 

It’s just as easy in SharePoint Online, but did you know that the Teams “Files” are SharePoint Online document repositories? This means you can search your Teams files for text contained in images as well. From your Teams channel, select the “Files” tab and click “Open in SharePoint” to see your Files in their SharePoint Online document repository.

Use the SharePoint Online search dialog to search for text contained within images stored in the site.

The search results will include any images that contain the search text.

 

Did you know … you can use Microsoft Excel to count the number of records within a range?

I’ve been generating reports to track our Microsoft Teams adoption – how many people are using Teams, how many messages are being sent in Teams, how many Teams are there. Some of these metrics have easily visualized count-per-unit-time summaries available. Some, like the number of Teams, do not.

Team Created On
Directory Services 1/19/2017
App Proxy 1/19/2017
LDAP 1/19/2017
ADFS 1/19/2017
Nagios 1/19/2017
File Cluster 1/19/2017
Exchange Online 1/19/2017
Active Directory 1/19/2017
Commvault 1/19/2017

But it’s easy to turn a list of groups and creation dates into visualizable data. Paste the data into Excel. To find the number of items where “Created On” falls in a range, we need to be able to define that range. 01 January 2017 is easy enough, but how do you get the end of January? Excel has a function, EOMONTH, that returns the last day of a month.

Date is any date object. Offset is an integer number of months prior (negative numbers) or after (positive numbers) Date for which you want the last day of the month. I can list the dates to start and end quarters with =EOMonth(Date,2). With 01 January 2017 in cell D2, the last day of January is =EOMonth(D2,0)

 I don’t want to type01 Feb, Mar, April … flash fill and the fill handle need a few values before they can figure out the rest of a sequence. But I can use the last day of the month to get the first day of the next month – just add one! With 31 January 2017 in cell E2, I want =E2 + 1 in cell D3. (Yes, there are other ways to do this – probably dozens.)

Now that we’ve got a formula for the start and end of the month, just fill down to produce the ranges we need to see how many Teams were created each month. Then we just need a formula to do the counting for us. I use the COUNTIFS function.

=COUNTIFS($B$2:$B$1000,”>=”&D2,$B$2:$B$1000,”<=”&E2)

Counts the number of items in the range $B$2:$B$1000 (the cell range is static as the formula is copied elsewhere, hence the

Fill down – you’ll see the range remains static, and the comparison is to the D and E columns on the current row.

Voila – easily visualized data. And a graph 😊

Did you know … Excel can transpose data?

Have you ever gotten data where the column headers are along the left-hand side and each record is a column? I’m sure there are people who prefer each record to be a column too, and they probably hate my data where the headers run along the top and each row is a record. Did you know Excel can swap between these two formats?

Here I have a spreadsheet where each column is a record. Highlight and copy the records. Yes you can use ctrl-c to copy … but there’s no way to make a screen-print of my keyboard actions.

Click elsewhere – below the data you copied, on a new sheet, even a new spreadsheet. Right-click & expand “Paste Special” – find the icon for Transpose and click it.

Look – now each row is a record, just like I wanted. You can even delete the original data if you want – the pasted information will still be there.

Did you know … there are keyboard shortcuts in Microsoft Teams?

I know modern software is driven by graphical user interfaces, but as an old-school Unix admin (there were loads of interface choices – Bourne shell, c shell, korn shell, bash shell!) it’s weird to take my hand away from my keyboard just to turn a bit of text bold or move to a new field. And Microsoft has done a decent job of standardizing keyboard shortcuts across their applications – ctrl-b will toggle “bold” pretty much anywhere (even Teams!)

But … within your Teams client (even the web client) hold the “Ctrl” key and type a full stop (.) and look – special keyboard shortcuts!

There’s even a link at the bottom for all of the shortcuts on Windows and Mac. I can hit ctrl-shift-1 to flip over to my Activity feed; ctrl-shift-3 puts me back in the Teams chat section.

Just like Helsinki

When Trump first trotted out his hypothesis that logging would have somehow saved the large swaths of construction from forest fires, I rolled my eyes and thought back to his campaign touted secret plan to defeat ISIL … which turned out to be consulting Generals. Which, as far as a military tactic goes is, worked about as well as all of the previous approaches (which, I suppose in his head, did not include this brilliant consulting step). Logging — which generally takes the big solid part of the tree (a.k.a. the trunk) and leaves behind all of the little bits (twigs, branches, leaves, underbrush) seems more apt to promote conflagrations — all of those little twigs, branches, leaves, and whatnot lay around, dry up … insta-kindling.

But yesterday’s proclamation that we’d be fine if we were only cleaning up the forest floor like Finland really bothers me. Not because of the obvious climate differences between a country averaging 27″ of rain (and I believe had an above average precipitation total last year) and an area that got, what, not quite 5″ in the last July-June season? Or the twenty or thirty degree temperature difference. But because of the absolute ignorance of international news. This is the sort of thing people at the White House get paid to keep track of. Finland had an unusual number of fires this last yearSweden too.

Did you know … there’s version history for Microsoft Teams files too?

There is — which is obvious once you start thinking about how Teams data is stored. The “Files” tab is a pretty front end for a SharePoint document library, and document libraries store version history. The problem is I didn’t know a good way to walk an end user through accessing that document library. I’d generally do a screen sharing session with the user & navigate them to the right place myself. And then I saw this — on the Files tab, there is an “Open in SharePoint” button. You don’t need to drill down to find the specific file you want to revert – as long as you are on the proper channel, we’ll be able to get to the document.

Voila! A new tab opens and shows you the SharePoint document library that underpins the Teams Files tab. Now drill down until you find the file for which you are looking.

Click on the not-quite-a hamburger menu – the one between the file name and modify time.

Select “Version History”

To view the previous version, click on the hyperlinked modify timestamp. To restore the previous version, hover your mouse over the modify timestamp of the iteration you want.

On this menu, “View” will show you some information about the file – not actually view the file. Select restore “Restore” to replace the current version (the one that shows up in Teams) with the selected – you’ll be asked to confirm that you want to overwrite the current version.

Once the document has been restored, you’ll have a new entry on the version history pane – so you can even revert your document reversion if needed.

 

Did you know … Screen Sharing in Teams Chats Is Rolling Out!

I’ve been tracking an RFE for screen sharing in Teams chat — it’s super-simple in Skype, and while it’s possible in Teams (schedule a meeting), it isn’t a one-click simple process. But today, we’ve got a new button in our chat sessions — start sharing your screen!

I don’t see the option in the web client on Firefox or Chrome, but I hope it is coming there too.

Did you know … Excel can change the case of text?

But before we go there, did you know you can have Excel show your formulae instead of data? It’s great for showing how you’ve done something in Excel 😊 On the “Formulas” ribbon bar, click “Show Formulas”.

I get information with all sorts of strange caPitAlizaTioN –often the “I didn’t know I had my caps lock on when I hit caps lock to give you all upper case” lISA RUSHWORTH casing. Or the “I didn’t bother to hit shift so it’s all in lower case” lisa rushworth. And even the “I had caps lock on when I fixed something, but the rest is in lower case” lisa rusHWorth.

It’s not aesthetically pleasing, but some systems have case sensitive sorting – Sally is alphabetically before lisa. Some systems use case sensitive strings to collate – and “lisa rushworth”and “Lisa Rushworth” are two distinct records. And have I mentioned it’s not aesthetically pleasing?

But I’ve got an Excel formula that will create consistently capitalized data.

See:

In addition to using LOWER(), UPPER(), and PROPER(), you can combine these with LEFT() and RIGHT() to convert different parts of the string to different cases – as in my example of setting just the first letter capital.

Left(A14,1) takes the first character from the left of the value in A14. LEN(A14)-1 is the length of the value in A14 minus one.RIGHT(A14(LEN(A14)-1)) then takes one less than the entire string length from the right of A14 (i.e. everything except the first character).