Ideas

It's weird. I've just spent the past two hours making myself a calendar. I was wondering how to design it and it just popped into my head that I have pictures from the early 2000s to now. Why don't I use some of my own pictures on my calendar? And then find some quotes I like and put them over the picture. It's a really simple idea, but I love it. I'm going to get a calendar that has motivational or inspirational quotes and I can look at pictures of things I've done which brings back those memories. Totally going to make me happy.

I had wanted to read a book tonight, but I finally got my bluetooth speaker working with my laptop. So I felt that I had to listen to music. I can't really read when there's music playing that I can sing along to, so I gave up reading pretty quickly. Then I was thinking that I need to start tracking that I'm eating vegetables, so I need a calendar. And making calendar on the computer is something I can easily do while listening to music. I don't know why, but now that I don't have a tv, I feel like I'm getting more and more good ideas for projects. Or maybe it's just that I have the time to do them, since I'm not sitting in front of a tv. All I know is that I'm loving getting more and more ideas, so I hope they keep coming.

UPDATE: Just printed the calendar. I have a cheap printer and it says it prints on 13x19 paper, which technically it does. But on a few pages, everything was a little skewed. So I think it has a hard time handling paper that big. But it's printed and hanging on my wall and I love it!

Getting Started with the Google API for Reading Public Calendars

I have a few public calendars at work that we use to show events taking place in various departments. I am creating a digital sign for one of our buildings and I'd like to be able to grab the events for the current day and display them on the digital sign. I'm most familiar with ruby right now, so I'm writing a ruby script to do this.

The first thing is I need to install the ruby google-api-client.

$ gem install google-api-client

Since all of the calendar data that I want to grab is on public calendars, I can use an API key to get all this data. Instructions for generating an API key are here: https://support.google.com/cloud/answer/6158862. You also need the calendarid for the calendars you want to grab data from.

In order to see if I have things set up correctly, the following script will grab all the entries from the calendar specified by the calendarid.

require 'google/apis/calendar_v3'

Google::Apis.logger.level = Logger::DEBUG

calendar = Google::Apis::CalendarV3::CalendarService.new
calendar.key='YOUR_API_KEY'
puts calendar.list_events('GOOGLE_CALENDAR_ID')

$ ruby simple_test.rb
...all calendar events show...

With the key working correctly, how can I limit the results to just a single day? And only see the fields that I'm interested in? For us, these are the summary, description, start date_time and location.

require 'google/apis/calendar_v3'

calendar = Google::Apis::CalendarV3::CalendarService.new
calendar.key='YOUR_API_KEY'

events = calendar.list_events('GOOGLE_CALENDAR_ID',
	always_include_email: false,
	time_min: '2018-04-23T00:00:00-05:00',
 	time_max: '2018-04-23T23:59:59-05:00'
)

events.items.each do |item|
	puts item.summary
	puts item.description
	puts item.start.date_time
	puts item.location
	puts "====="
end

I hope to have this script do a bit more. So I've put it on my github page. The repository is here: https://github.com/maryheintz/google-calendar-api-ruby

Root Logins with Key Required

I love the fact that I still have so much to learn. I was thinking that I should set things up so that root can ssh in to a computer but only if they have keys set up. One very quick google search and I had my answer.

[[email protected] ~]# grep PermitRoot /etc/ssh/sshd_config
PermitRootLogin without-password

I had just assumed the settings for PermitRootLogin were yes or no. It's great that the programmers also had thought of this other use. People are so much smarter than me.

Splitting a PDF File

I had a pdf file that was too large to email, but I needed to email.  So I quickly broke it up into two smaller files.  I used this command:

$ gs -dNOPAUSE -dBATCH -dFirstPage=1 -dLastPage=34 -sDEVICE=pdfwrite -sOutputFile=physics1.pdf -f Physics\ Faculty.pdf 
$ gs -dNOPAUSE -dBATCH -dFirstPage=35 -dLastPage=68 -sDEVICE=pdfwrite -sOutputFile=physics2.pdf -f Physics\ Faculty.pdf 

My New MacBook Pro

As noted, with the new year, I'm starting to use my new MacBook Pro full-time. Last night, it took a few hours to copy everything from my old backup to this new laptop. Did it work perfectly, of course not. Plus, I don't like copying everything from my old laptop to my new one. There is a lot of stuff that I could throw away, but it takes time to go through it all. So I copied just my old home directory, but not the Applications directory. I know there's lots of stuff that won't run or that should be updated, so I installed all that stuff manually.

Anyway, here's the info about my new laptop.

So it's not a current laptop. I bought it off the clearance section because I wanted a laptop that still had usb connections. The idea of carrying a bunch of dongles to plug stuff into a usb-c connection fills me with dread. I'll still have to do that for my network connection, but I do have usb and can still use my old chargers with an adapter. That's good because I didn't want to have to buy an extra one so that I could have one at home and work. I also bought a new 1tb hard drive and installed that myself. I couldn't customize the laptop because I bought it in the clearance section, so it came with a 128mb drive, which is laughable. It also comes only with 8gb of ram and I can't upgrade that. That's sad because my old laptop had 16gb of ram and I wanted one with even more, but Apple has decided that we don't need that much ram.

In my mind, I'm hoping this laptop takes me through retirement. And if that's the case, this will perhaps be my last mac. I'm not liking the direction that their hardware is taking and if I don't have to support macs at work, I really won't need one. I'd be fine with a linux laptop.

Took me a while, but my point of this post is to note that I'm moving from a 15-inch laptop to a 13-inch laptop. Yes, this new laptop is much lighter than my old one. But the screen feels really small as well. One place where I really notice it is in my calendar. The cells are all much smaller so that I can't see all my events. This may change how I use it. Now, I put lots of notes and reminders in my calendar. But if I can only view two or three events, I may stop putting items there. I'm already noticing that I don't really pay attention to the line that says 2 more... or 3 more..., meaning if I don't see them in the monthly view, it's like they're not there.

Another spot where I've noticed the smaller screen is in watching nhl games. It's changed the arrangement of how things are laid out. I'll probably get used to it, but my immediate reaction of course is that I don't like it. Oh well, change is inevitable.

Learning More Windows 10 Stuff

My last post talked about using xcopy to copy a bunch of files from one server to another. I had been running this for a day, but a couple of times the command failed with the error "Insufficient Memory". Since my new server has four times as much memory and three or four times as much disk space, I didn't think that error was actually true. A quick google search shows that this message usually comes up when filenames are over 255 characters long, which was going to be a problem for me. Instead, robocopy (robust copy) should be used. The command I'm now trying is:

robocopy U:\ F:\data /MIR /Z /XA:H /W:10

/MIR = specifies that robocopy should mirror the source directory and the destination directory. Beware that this may delete files at the destination
/Z = ensures robocopy can resume the transfer of a large file in mid-file instead of restarting
/XA:H = makes robocopy ignore hidden files, which is usually system stuff that we don't care about
/W:10 = reduces the wait time between failures to 10 seconds instead of the 30 second default

There's also one very large directory with software that I've downloaded that I don't want to copy. I can always just redownload it, so no sense in taking up space on my backup drive. So the command that I'm finally using is:

PS C:\> robocopy f:\data j:\edgwin\data /MIR /Z /XA:H /W:10 /XD "F:\data\installed_software"

Windows 10 – More Stuff I Didn’t Know

I'm installing a new Windows 10 computer in our office to replace the old Windows XP one. All this computer is going to do is host our shared windows disk. Not a lot of people use this disk, but it's really good for sharing files or if a student is going to work at different computers in the lab.

I have about 1tb of data on the old XP computer that I want to copy to the new Windows 10 computer. And I'd like to keep permissions, ownership, etc. of all the files. I googled around and found that xcopy is the command that I want. Specifically, something like this:

xcopy s:\sw f:\sw /O /X /E /H /K

I started windows powershell and tried to run this as me, since my account is a domain administrator. That didn't work. I always got access denied errors. So I tried to start powershell as administrator. Here, I couldn't "see" the s: drive, which was a mapped drive. I even tried logging in as a local computer account and then manually mounting the s: drive. Powershell would not see the drive mounted that way.

The solution was to login with my local administrator account. Then start windows powershell as administrator. The in powershell, run net use s: \\XPcomputer\sw, where I'd be prompted for my login credentials on our samba/ldap domain. Then, I could run:

xcopy s:\* f:\sw /O /X /E /H /K

What I found interesting is that after I did the net use command, I couldn't see the S: drive if I went to "This PC" even though it was currently copying from the S: drive. The screenshot below shows this. I found this weird. This may also have been true in earlier versions of windows, but I had never come across this before.

Windows 10 in My Samba PDC

I had recently installed windows 10 on one of our computers at work. I was able to successfully add it to the domain, but then none of my users could login. The error message was:

We can't sign you in with this credential because your domain isn't available.  Make sure your device is 
connected to your organization's network and try again.  If you previously signed in on this device with 
another credential, you can sign in with that credential.

This error message contains pretty much no information about the problem. The domain is/was available, as I was able to join it. After some looking around, I found that the problem is I missed a setting in my smb.conf file on my samba server. I needed to add this line for windows 10 computers:

server max protocol = NT1

Restart samba and things worked fine.

Note, this page gives you all the required settings for samba domains. Since I have been using the same smb.conf file for years, I didn't have the line needed because it's a more recent addition.

Merge Three Files into One Using Command Line

I have three pdf files that I want to merge into a single file. But I don't want the three files to be on three separate pages. I want one big page with the three files all there.

First, get the sizes of my files:

$ identify PusherDisc32017.pdf 
PusherDisc32017.pdf PDF 1224x792 1224x792+0+0 16-bit sRGB 58413B 0.000u 0:00.000
$ identify PressBlockShort32017.pdf 
PressBlockShort32017.pdf PDF 1224x792 1224x792+0+0 16-bit sRGB 51523B 0.010u 0:00.000
$ identify LongPressBlock32117.pdf 
LongPressBlock32117.pdf PDF 1224x792 1224x792+0+0 16-bit sRGB 49860B 0.000u 0:00.000

So I want my final image to be 1224 x (3x792) or 1224 x 2376. Now make an empty image that size. I'm using a white background.

convert -size 1224x2376 canvas:white hold.png

Now, one at a time, merge the files together:

$ composite PusherDisc32017.pdf hold.png out1.png
$ composite PressBlockShort32017.pdf -gravity center out1.png  out2.png
$ composite  LongPressBlock32117.pdf -gravity south  out2.png  out3.png

Now my file out3.png has what I want.