Showing posts with label howto. Show all posts
Showing posts with label howto. Show all posts

Wednesday, December 10, 2014

Hide Chrome Avatar Menu


A recent update of Chrome turned the previously hidden new avatar menu on by default.  This avatar menu allows you to quickly change your login profile.  I only ever use one profile, so the button just gets in the way, and I have a few times accidentally clicked the avatar menu instead of the minimize button (muscle memory says the minimize button is always the first button on the left, right?).

At first I wasn't sure what the name of this "avatar menu" feature was, but after a bit of digging through the chrome configuration options, I found one called "Enable the new avatar menu" that looked promising and finally removed the button.  Happiness.


To hide the avatar menu button: browse to chrome://flags in your chrome browser, and search for the "Enable the new avatar menu" option, and change the setting from "Default" to "Disabled".  Finally click the "Relaunch Now" button at the bottom, and Chrome will reload with the avatar menu button hidden.


Update July 2015: This option appears to have changed to "Enable new profile management system", but there appears to be a bug which does not allow this menu to be disabled.
In the mean time one can always add '--disable-new-avatar-menu" to the Chrome shortcut link




Saturday, October 25, 2014

Outlook - Enter Network Password - Network SharePoint


Starting about a week ago, whenever I would open my corporate Outlook 2013 (Outlook 365), I would be prompted to "Enter Network Password" for "Network: SharePoint".  If I canceled the prompt, my email did not appear to be affected, so whatever was causing this prompt was not critical.

After much Googling and trying a number of solutions, such as clearing the Credential Manager under Control Panel, and other such similar solutions, nothing seemed to work.  Fortunately, I found one thread that had found a solution.  The cause was an overactive Outlook Add-In plugin called "Outlook Social Connector 2013".  To stop the password prompt, simply clear your SharePoint Social Network Account.  You can also permanently disable the Add-In entirely, if you wish.


Option 1 - Clear SharePoint Social Network Account




Open Outlook 2013, select File, select Account Settings and then select Social Network Accounts.



Click the "X" icon next to the broken SharePoint account to remove the account settings.



You will be prompted to confirm the removal of this connection, select Yes.



The broken SharePoint  account settings will be cleared, and you will no longer be prompted to enter the network password.



Option 2 - Permanently Disable Outlook Social Connector 2013 Add-In




Open Outlook 2013, select File, select Options, select Add-Ins and then select the Go button next to Manage COM Add-ins.



Deselect the Outlook Social Connector 2013 Add-In, and you will no longer be prompted to enter a network password.






Friday, October 3, 2014

Introduction to the Google Calendar API (HOWTO)




I have used Google Calendars to schedule and control a number of projects (eg. sprinkler system, alarm clock, etc) .  The following How To will get you started.  You will of course need a google account.


Create Project


1) Start by visiting the Google Developers Console

and create a new project.


2) Select the project and navigate on the left menu to APIs & auth then APIs and enable Calendar API for this project.  You can disabled all other APIs if you only need Calendar access.


3) Next, select the Consent screen menu option from the APIs & auth menu.  Enter a Product Name and select an Email Address.  If you do not do this step, you will get a Error: invalid_client error later on.


4) Next, select the Credentials menu option from the APIs & auth menu.  Under OAuth select Create new Client ID.


5) For the Create Client ID select Installed application for Application Type and select Other for Installed Application Type and finally click the Create Client ID button.


6) After the ID has finished being created, click the Download JSON button.  Save and rename the file as something simple like client_secret.json.

This json file contains your API credentials needed to access the Google Calendar APIs.


Install Google API Libraries


1) Install the Google API Libraries using Python's PIP installer:
$ sudo pip install --upgrade google-api-python-client

gflags may or may not be needed, depending on what code you use: (may be optional)
$ sudo pip install --upgrade python-gflags

If you would prefer alternatives, view the Google APIs Client Library for Python page.

Authorize Application


Next we will need to run our application and authorize it against the desired account.

1) Clone my sample code:
# git clone https://github.com/oeey/gcalendar.git

The sample code is just a slight modification from the Getting Started Sample Code.  The Google sample code has some outdated code that will throw some obsoleted warnings.

2) The application has not been authorized to an account yet.  Run the application once and you will be asked to paste a validation URL into your browser.  Login to your desired target account (with the calendars you want to access) and then paste the validation URL into your browser.

For convenience I have a first_auth.py script that is the same script as the gcalendar.py script, but terminates after authorization.  You can run any of the scripts to complete this authorization step.

The first_auth.py is pretty simple:
from apiclient.discovery import build
from oauth2client.file import Storage
from oauth2client.client import AccessTokenRefreshError
from oauth2client.client import OAuth2WebServerFlow
from oauth2client.tools import run_flow
from oauth2client.client import flow_from_clientsecrets

def main():
    scope = 'https://www.googleapis.com/auth/calendar'
    flow = flow_from_clientsecrets('client_secret.json', scope=scope)

    storage = Storage('credentials.dat')
    credentials = storage.get()

    class fakeargparse(object):  # fake argparse.Namespace
        noauth_local_webserver = True
        logging_level = "ERROR"
    flags = fakeargparse()

    if credentials is None or credentials.invalid:
        credentials = run_flow(flow, storage, flags)

if __name__ == '__main__':
    main()

You may notice the "fakeargparse" code. The run_flow() call wants the flags to be set from the parameters pulled from argparse. I think that is overkill for what I needed, so I just created a fake container so run_flow() wouldn't complain.

Run the first_auth.py script to collect the application authorization.
$ python first_auth.py
Go to the following link in your browser:

    https://accounts.google.com/o/oauth2/auth?scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcalendar&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&response_type=code&client_id=1039XXXXXXXXXXXXXXXXXXXXXXXXXXcs46gdj2.apps.googleusercontent.com&access_type=offline

Enter verification code:

3) Copy the URL into the browser and accept the permissions.


4) You will be presented with a code, to which you will then enter back into the prompt of the first_auth.py application.  The authorization will be stored in the credentials.dat file for future requests.
$ python first_auth.py
Go to the following link in your browser:

    https://accounts.google.com/o/oauth2/auth?scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcalendar&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&response_type=code&client_id=46XXXXXXXXXX2-bXXXXXXXXXXXXXusvh6.apps.googleusercontent.com&access_type=offline

Enter verification code: 4/WzAQfXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX2vw2M2Pl7OykQI
Authentication successful.

Now that we have our API credentials and are authorized to access an account, we can begin to play with the Google Calendars.


View Upcoming Events


The upcoming.py script builds off of the first_auth.py script, cycles through the next few upcoming calendar events and displays the event titles.
...
    if credentials is None or credentials.invalid:
        credentials = run_flow(flow, storage, flags)

    http = httplib2.Http()
    http = credentials.authorize(http)
    service = build('calendar', 'v3', http=http)

    print "Upcoming Events:"
    request = service.events().list(calendarId='primary')
    while request != None:
        response = request.execute()
        for event in response.get('items', []):
            print event.get('summary', 'NO SUMMARY')
        request = service.events().list_next(request, response)

This script defaults to the primary calendar associated with the account.


Calendar ID


The previous script defaults to the primary calendar associated with the account.  If you wish to specify an alternate calendar, you will need the Calendar ID.  A calendar's ID can be found on the Calendar Details setting page (same page you can change a calendar's name on).  Look for the Calendar Address line, and the Calendar ID will be in the parenthesis.  It will look something like "a3sd5221ap2qe5ksbev3ip4@group.calendar.google.com".


Next 12 Hours of Events


Finally, to specify a time range for events, I use the following code in my gcalendar.py script.  This code will collect the next 12 hours worth of events.
  ...

    service = build('calendar', 'v3', http=http)

    # get the next 12 hours of events
    epoch_time = time.time()
    start_time = epoch_time - 3600  # 1 hour ago
    end_time = epoch_time + 12 * 3600  # 12 hours in the future
    tz_offset = - time.altzone / 3600
    if tz_offset < 0:
        tz_offset_str = "-%02d00" % abs(tz_offset)
    else:
        tz_offset_str = "+%02d00" % abs(tz_offset)
    start_time = datetime.datetime.fromtimestamp(start_time).strftime("%Y-%m-%dT%H:%M:%S") + tz_offset_str
    end_time = datetime.datetime.fromtimestamp(end_time).strftime("%Y-%m-%dT%H:%M:%S") + tz_offset_str

    print "Getting calendar events between: " + start_time + " and " + end_time

    events = service.events().list(calendarId='primary', timeMin=start_time, timeMax=end_time, singleEvents=True).execute()singleEvents=True).execute()
    #pprint.pprint(events)
    for event in events['items']:
        print event["summary]


And this is the basis for the code I use to schedule my sprinkler system with.



Tuesday, September 30, 2014

Create a Slideshow with Microsoft Windows DVD Maker (HOWTO)

Microsoft Windows DVD Maker
I needed to make a quick DVD slides show of some pictures.  Fortunately, there is a free DVD creation program included with Windows 7 called Windows DVD Maker.
"Windows DVD Maker is available on Home Premium and Ultimate editions of Windows Vista and on Home Premium, Professional and Ultimate editions of Windows 7."
Windows DVD Maker is a pretty simple tool with minimal features, but sufficient to create a quick DVD slide show.
"Make a DVD-Video disc that includes your favorite videos and digital photos that you and others can watch on a TV or computer. Windows DVD Maker lets you create a DVD quickly, complete with professional-looking menus, a scene selection page, and even a slide show with music."

How To Create a Slideshow with Microsoft Windows DVD Maker



1) Start - To start Windows DVD Maker, select the program from the Start menu (or by running "dvdmaker.exe").

2) Title - From the DVD Maker title screen, select "Choose Photos and Videos" to continue.

3) Add Items - Drag and drop photos and videos to the project (or click the "add items" button)

4) Change Order - If you need to change the order of photos/videos, double click on the slideshow link and then you can drag and drop the items to any desired order.  You will notice the default duration is set to 7 seconds.  This duration can be changed at a later step.

5) DVD Options - Click the "options" link to change some basic DVD format options.  The option I prefer to change is the DVD playback setting to continuous loop.  Great for a continuously running background slideshow.

6) Final Touches - Once we have our order decided upon, we can click continue onto the "Ready to burn DVD" page where we can change DVD menu options and slide show options.

7) DVD Menu Text - If you wish to change the DVD menu text, click the "Menu text" button, and make the appropriate changes.  I left the defaults as is.

8) DVD Menu Style - If you wish to change the DVD menu style, click the "Customize menu" button, and make the appropriate changes. I left the defaults as is.

9) Slide Duration - If you wish to change the duration of the slide show, add music, or change the transitions used, select the "Slide Show" button. The duration is a global duration, meaning you can't set a different duration for individual photos. The Slide Duration can be set to 3, 5, 7, 10, 15, or 30 seconds.  There is also an option to set the slide duration to match the music length.

10) Slide Transitions - You can change the slide transition animation to a number of options (Cross fade, Cut, Dissolve, Flip, Inset, Page curl, Pixelate, Random, Wipe). Again only one global transition can be selected, unless you select Random to which it will randomly assign a transition to each slide. My preferred transition is the default "Cross fade". I also prefer to leave the "pan and zoom effect" enabled. Makes the slides a little more visually entertaining.

11) Music - Background music can be added to the slide show.  If there is less music than the length of the slide show, the background music will automatically repeat.  At the end of the slide show, the music will automatically fade out, instead of being harshly truncated.

12) Preview - Before burning your completed DVD, click the "Preview" button to preview the DVD video.  You will see how the DVD menu and transitions appear.

13) Burn - Finally, click the "Burn" button and your DVD begins burning.  Once the DVD has completed burning, you will be presented with an option to burn a second copy.


Enjoy your DVD slide show.


Tuesday, December 17, 2013

How To Add a Print Button to Blogger



Have you noticed that blogger.com doesn't have a convenient "print" button option?  Luckily PrinterFriendly.com is setup to conveniently add a print button to your blog or any website.

How to place a Print button in your blog:
  1. Visit PrinterFriendly.com
  2. Select "Blogger" from the "Choose Site Type" section.
  3. Choose the look of your button from the "Choose Button" section.
  4. You can leave the defaults in the "Features" section alone.
  5. If you are logged into blogger.com, you can click the "Install Widget" button, and it will auto add to your layout.  If you are not, you will be presented with some JavaScript that you will need to add to a JavaScript widget in your layout.
  6. You can place the widget pretty much anywhere in your blog's layout and it will still end up down in your post's button bar.
  7. Save the layout and enjoy your new print button.
  8. Note that the print button will only appear when you are viewing a "single" post.  If you are viewing "all posts" the button will not appear.

Choose site type and button type

Print button in button bar