Unix command line: How to output to command line and file at the same time
Published 2017-11-22, 12:34
Use:
foo | tee output.file
https://stackoverflow.com/questions/418896/how-to-redirect-output-to-a-file-and-stdout/418899#418899
Send tabs/URLs between desktop and iOS device
Published 2017-10-18, 15:26
Yay, with Firefox iOS it is finally possible to send tabs and URLs between desktop and iOS devices, in both directions.
iOS to Desktop
From Firefox for iOS to desktop computer, the functionality has its own button in the „tab options menu“ and a great explanation in the knowledge base.
What isn’t mentioned there is that Firefox for iOS also adds a „Send Tab“ share extension to iOS that is accessible from normal Safari. You can use it to send any open tab from Safari to your Firefox Desktop installations. You get a OS notification and the tab is automatically opened in the background when the information is received after a few seconds.
Desktop to iOS
In the other direction, from desktop computer to smartphone, you can use the „Send Tab to device“ extension to add a new Option „Send Page to Device“ to the right click menu of websites and tabs. Using it sends the URL to Firefox for iOS were it also opens a tab.
Only thing missing here is a push notification that also tells you that there is data waiting for you when Firefox iOS is not already open and a simpler way to get the URL from Firefox iOS to Safari – right now one has to manually copy the URL over.
Disable Windows Defender real time protection with a Desktop Shortcut
Published 2017-10-05, 17:31
I love how Microsoft made third party anti virus protection obsolete with Defender – it just works.
Unfortunately sometimes I need to disable (and later enable again) it’s real time protection feature because it slows down processes I know are secure – for example Gradle builds in Android Studio.
It normally takes 7 clicks to enable or disable Defender real time protection: Systray -> double click on icon -> „Virus & threat protection“ -> „Virus & threat protection settings“ -> Toggle „Real-time protection“ -> User Account Control „Yes“.
Fortunately there is a way to automate this in Powershell:
Set-MpPreference -DisableRealtimeMonitoring $true
Which means we can also create a desktop shortcut (Right click on Desktop -> New -> Shortcut):
%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -File "C:/disable.ps1"
(„C:/disable.ps1“ is the file where I put the first code snippet)
In the properties you have to click „Advanced“ to activate „Run as Administrator“ so it can actually be executed.
Then to give it a nice icon, click „Change Icon“ in the shortcut properties and „open“ the icons from „%systemroot%\system32\imageres.dll“. There you’ll find a nice dark red Defender like „badge“ icon with a white x:
The real time protection feature will turn itself back on after some time. Alternatively you could replace „$true“ with „$false“ in a copy of that script to have a shortcut to enable it again. Or spend some time to figure out how to actually „toggle“ in on and off with the same shortcut by somehow doing this in the Powershell script. (Let me know if you do!)
Source: Script via StackOverflow answer by ‚djsmiley2k‘ to my question and icons file for the shortcut
Website Performance, Code, Images and SEO Testing Tools
Published 2017-09-29, 12:48
There are loads of web site and page analyzer tools out there that look at them under performance, quality, image compression, code or SEO aspects. Many are just (thinly veiled) lead generation tools that don’t really tell the true story, but some are actually useful. As I need them again and again, I collected them here:
- https://www.webpagetest.org/ – Performance
- https://tools.keycdn.com/performance – Performance (TTFB)
- https://webspeedtest.cloudinary.com/ – Images
- https://gtmetrix.com/ – Performance
- http://nibbler.silktide.com/ – Code, SEO
- https://tools.pingdom.com/ – Performance, Code
- https://developers.google.com/speed/pagespeed/insights/ – Code, Performance, Mobile
- https://www.dareboost.com/en/home – Quality, Code, Performance (only 1 test without account, 5/month with free account)
More on the marketing-y, rarely even questionable side, but sometimes still interesting to look at:
- http://tools.neilpatel.com/en/analyze/ – SEO, Code, Performance
- https://website.grader.com – Performance, SEO
- http://www.seowebpageanalyzer.com/ – SEO, Code
About StackOverflow
Published 2017-09-22, 16:35
I tried to post a few questions on StackOverflow in the last days which at times was a very negative experience: I was downvoted, got negative comments and of course got my questions closed as „offtopic“.
I am not the only one with that problem:
- https://hackernoon.com/the-decline-of-stack-overflow-7cb69faa575d
- https://movingfulcrum.com/stackoverflow-modding-itself-out-of-existence/
- https://news.ycombinator.com/item?id=9869886
Why do I write this down now? So I don’t start googling for exactly these posts and experiences the next time I am in this position, but can just go to this post, read some of these rants and accept it.
Then I can go back and see that maybe someone actually did provide a great comment or answer. Sometimes that still happens.
Rewriting history in Git
Published 2017-09-20, 21:00
Once again I was confused about rewriting history in Git:
Why and how is "rebase" and "rewrite history" in git the same thing? I'm confused. A lot.
— Jan Piotrowski (@Sujan) September 20, 2017
As I am not a git power user – I use a GUI, SourceTree of GitKraken – for the more complicated commands and features, my mind tends to just „crash“ now and then and forget what they are and how they work.
A bit later I had it figured out again:
Answer myself: Rebase "reapplies" commits by creating "copies" of them. These "copies" can be modified. Rebasing on same "base" = rewrite.
— Jan Piotrowski (@Sujan) September 20, 2017
During these 15 minutes I googled around and found some nice explanations I now want to conserve for future reference:
- Git Interactive Rebase, Squash, Amend and Other Ways of Rewriting History
- Reword the last commit message
- Reword other commit messages
- Interactive Rebase
- Reword other commit messages, take 2
- Squash commits together
- Rebase on top of master
- DANGER: You are rewriting history
- Rewriting History with Git Reset
- soft reset
- mixed reset
- hard reset
- Changing history, or How to Git pretty: Lesson three: How to change history
- revert
- –amend
- reset
- rebase
And an additional nice thing to know and use when playing around with those:
- Git Tutorial: How to Never Lose Changes in Git
- Create an additional branch to secure your commits
Move (clone and close) Github issues to a different repository
Published 2017-08-04, 11:45
If you have any projects on Github that span multiple repositories you know the pain when someone creates a valid issue, but uses the wrong repo to do so. Of course you could tell them to „Create another issue in the correct repo and gtfo“ but that a) wouldn’t be very nice and b) is a quite a lot of work and c) probably wouldn’t have the intended effect to grow your Github community.
So you need a way to move issues betweens repos.
Github doesn’t support this out of the box, but of course some other people jumped in and created things that do. Here is an overview of my research on this:
- Github Issue Mover
github-issue-mover.appspot.com / github.com/google/github-issue-mover
Almost a classic, started in 2014, this tools allows you to paste the source issue and target repo to be moved and then does the job. - Kamino
chrome.google.com/webstore/detail/kamino/ffdebockfdjileaojbbccofhgncmioaf / github.com/gatewayapps/kamino
This Chrome extension is „better“ in that it adds the „move issue“ button directly to the Github issue page and also remembers the last 5 used repos. - Zenhub seems to have a „Move Issue“ button if you use their tool.
- github-issues-import is an old but trusty Python script that can do the job for one or many issues.
How to develop iOS 10.3.x apps in Xcode 8.2.x
Published 2017-07-10, 18:44
If you work on an older version of Mac OS, for example because Apple decided your Macbook is to old to upgrade to a recent version, you might be stuck with Xcode 8.2.x to develop and test your iOS apps. Unfortunately this can lead to this nice error message if you made the mistake to upgrade your iPhone to iOS 10.3:
Could not locate device support files
This iPhone 6s is running iOS 10.3.1 (14E304), which may not be supported by this version of Xcode.
This is because the old Xcode doesn’t get these „device support files“ via updates any more. Luckily the internet is here to rescue you.
- Download https://www.dropbox.com/s/i1f7q8w3vgr2ozl/10.3%20%2814E269%29.zip?dl=0 and extract it
- Click on „Finder“ in MAC OS
- Click on „Go to Folder“
- Paste this path:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport- Paste your extracted „10.3 (14E269)“ directory to that place.
- Quit Xcode and restart it (and maybe the whole Mac).
- You can now run your projects successfully on your real device again.
Adapted from source: https://gist.github.com/steipete/d9b44d8e9f341e81414e86d7ff8fb62d#gistcomment-2041802
Overview of the trakt.tv API Concepts and Endpoints
Published 2017-07-03, 17:24
trakt.tv offers a very comprehensive API with an amazing documentation. But thorough as it is – and the technical details like authentication, data formats, parameters etc. are really, really well covered – it can also feel a bit overwhelming when you jump in and want to get a first overview, or are only looking for some specific data or type of data.
As I just did exactly that, I went through the whole documentation and extracted the most relevant information. The order of this article, especially the API endpoints, follows the official API documentation. I only added some more headlines to group the endpoints in a better way:
Concepts
The API only defines some terms in „Terminology“, but there is a lot more to understand what there is and how it is all connected:
- There are Users and objects: Movies, Shows with Seasons and Episodes.
- Users
- Users can watch things:
- Users can checkin to or scrobble movies and episodes. These are then first marked as watching, later as watched after the runtime (complicated, read details in docs).
- Users can additionally add to history for movies, shows, seasons and episodes to mark them as watched instantly.
- Users can create multiple Lists and have one Collection and one Watchlist (of movies, shows, seasons, and episodes).
- Users can write Comments on movies, shows, seasons, episodes, or lists.
- Users can create Replies and Likes on comments and lists.
- Users can create Replies and Likes on comments and lists.
- Users can create Ratings on movies, shows, seasons and episode.
- Users have Settings and a Profile
- Users can follow other users to create Follower Requests and eventually become Followers, Following and Friends
- Users can watch things:
- Objects
- There is additional information for some objects:
- Summary for movies, people, shows, seasons and episodes collect all known information about them
- Aliases of movies and shows
- Releases of movies
- Translations of movies, shows and episodes
- People are cast and crew of shows and movies
- Search can look for movies, shows, episodes, people, and lists by text or ID.
- Related objects are calculated for movies and shows.
- Stats are calculated for movies, shows, seasons, episodes and users.
- There is additional information for some objects:
- Users and Objects
- History and Playback are calculated based on checkins and scrobbles (= movies and episodes watched) and manual „add to history“.
- Last Activities are collected from history and all other user activities (comments, replies, likes, ratings).
- Based on the releases of objects and the history of the user there are Calendars for shows and episodes.
- Recommendations are given to users for movies and shows.
- Collection Progress and Watch Progress is calculated for users for shows and their episodes.
- Users can create Hidden Items to hide things (movies, shows or episodes) in calendars, collection progress, watch progress and recommendations.
Use the checkboxes next to the terms to deactivate them in the list below. You can also set if they only should be deactivated or completely hidden.
Emojis Legend
These Emojis are used in the official documentation to indicate what functionality is offered by or needed for an endpoint.
- 📄 = Pagination
- 📄? = optional
- ✨ = Extended Info
- 🎚 = Filters
- 🔒 = OAuth
- 🔒? = optional
- 🔒! = required
Data Endpoints
These return the nitty-gritty of Trakt: Lots of data about shows and movies and all the things related to them:
- Calendars
- All Shows ✨ 🎚 – Returns all shows airing during the time period specified.
- All New Shows ✨ 🎚 – Returns all new show premieres (season 1, episode 1) airing during the time period specified.
- All Season Premieres ✨ 🎚 – Returns all show premieres (any season, episode 1) airing during the time period specified.
- All Movies ✨ 🎚 – Returns all movies with a release date during the time period specified.
- All DVD ✨ 🎚 – Returns all movies with a DVD release date during the time period specified.
- Checkin
- n/a
- Comments
- Movies
- Movies
- Trending 📄 ✨ 🎚 – Returns all movies being watched right now.
- Played 📄 ✨ 🎚 – Returns the most played (a single user can watch multiple times) movie.
- Watched 📄 ✨ 🎚 – Returns the most watched (unique users) movies.
- Collected 📄 ✨ 🎚 – Returns the most collected (unique users) movies.
- Anticipated 📄 ✨ 🎚 – Returns the most anticipated movies based on the number of lists a movie appears on.
- Box Office ✨ – Returns the top 10 grossing movies in the U.S. box office last weekend.
- Updates 📄 ✨ – Returns all movies updated since the specified UTC date.
- Movie
- Summary ✨ – Returns a single movie’s details.
- Aliases – Returns all title aliases for a movie.
- Releases – Returns all releases for a movie including country, certification, release date, release type, and note.
- Translations – Returns all translations for a movie, including language and translated values for title, tagline and overview.
- Comments 📄 – Returns all top level comments for a movie.
- Lists 📄 – Returns all lists that contain this movie.
- People ✨ – Returns all cast and crew for a movie.
- Stats – Returns lots of movie stats.
- Watching ✨ – Returns all users watching this movie right now.
- Movies
- People
- Recommendations
- n/a
- Scrobble
- n/a
- Search
- Text Query 📄 ✨ 🎚 – Search all text fields that a media object contains (i.e. title, overview, etc).
- ID Lookup 📄 ✨ – Lookup items by their Trakt, IMDB, TMDB, TVDB, or TVRage ID.
- Shows
- Shows
- Trending 📄 ✨ 🎚 – Returns all shows being watched right now.
- Played 📄 ✨ 🎚 – Returns the most played (a single user can watch multiple episodes multiple times) shows.
- Watched 📄 ✨ 🎚 – Returns the most watched (unique users) shows.
- Collected 📄 ✨ 🎚 – Returns the most collected (unique users) shows.
- Anticipated 📄 ✨ 🎚 – Returns the most anticipated shows based on the number of lists a show appears on.
- Updates 📄 ✨ – Returns all shows updated since the specified UTC date.
- Show
- Summary ✨ – Returns a single show’s details.
- Aliases – Returns all title aliases for a show.
- Translations – Returns all translations for a show, including language and translated values for title and overview.
- Comments 📄 – Returns all top level comments for a show.
- Lists 📄 – Returns all lists that contain this show.
- People ✨ – Returns all cast and crew for a show.
- Stats – Returns lots of show stats.
- Watching ✨ – Returns all users watching this show right now.
- Next Episode ✨ – Returns the next scheduled to air episode.
- Last Episode ✨ – Returns the most recently aired episode.
- Shows
- Seasons
- Seasons
- Summary ✨ – Returns all seasons for a show including the number of episodes in each season.
- Season
- Seasons
- Episodes
- Episode
- Summary ✨ – Returns a single episode’s details.
- Translations – Returns all translations for an episode, including language and translated values for title and overview.
- Comments 📄 – Returns all top level comments for an episode.
- Lists 📄 – Returns all lists that contain this episode.
- Stats – Returns lots of episode stats.
- Watching ✨ – Returns all users watching this episode right now.
- Episode
- Sync
- n/a
- Users
- Profile 🔒? ✨ – Get a user’s profile information.
- Collection 🔒? ✨ – Get all collected items in a user’s collection.
- Comments 🔒? 📄 ✨ – Returns comments a user has posted sorted by most recent.
- Lists
- Lists
- Get 🔒? – Returns all custom lists for a user.
- List
- Get 🔒? – Returns a single custom list.
- List Item
- List Items 🔒? 📄? ✨ – Get all items on a custom list.
- List comment 📄 – Returns all top level comments for a list.
- Lists
- Follow
- History 🔒? 📄 ✨ – Returns movies and episodes that a user has watched, sorted by most recent.
- Watchlist 🔒? 📄? ✨ – Returns all items in a user’s watchlist filtered by type.
- Watching 🔒? ✨ – Returns a movie or episode if the user is currently watching something.
- Watched 🔒? ✨ – Returns all movies or shows a user has watched sorted by most plays.
- Stats 🔒? – Returns stats about the movies, shows, and episodes a user has watched, collected, and rated.
User Endoints
If it matters which user is logged in via OAuth, these endpoints are collected here:
- Calendars
- My Shows 🔒! ✨ 🎚 – Returns all shows airing during the time period specified.
- My New Shows 🔒! ✨ 🎚 – Returns all new show premieres (season 1, episode 1) airing during the time period specified.
- My Season Premieres 🔒! ✨ 🎚 – Returns all show premieres (any season, episode 1) airing during the time period specified.
- My Movies 🔒! ✨ 🎚 – Returns all movies with a release date during the time period specified.
- My DVD 🔒! ✨ 🎚 – Returns all movies with a DVD release date during the time period specified.
- Checkin
- Checkin 🔒! – Check into a movie or episode.
- Delete 🔒! – Removes any active checkins, no need to provide a specific item.
- Comments
- Comments
- Post a comment 🔒! – Add a new comment to a movie, show, season, episode, or list.
- Comment
- Update 🔒! – Update a single comment created within the last hour
- Delete 🔒! – Delete a single comment created within the last hour.
- Replies
- Post 🔒! – Add a new reply to an existing comment.
- Like
- Like 🔒! – Votes help determine popular comments.
- Remove 🔒! – Remove a like on a comment.
- Comments
- Movies
- n/a
- People
- n/a
- Recommendations
- Movies 🔒! ✨ – Personalized movie recommendations for a user.
- Hide Movie 🔒! – Hide a movie from getting recommended anymore.
- Shows 🔒! ✨ – Personalized show recommendations for a user.
- Hide Show 🔒! – Hide a show from getting recommended anymore.
- Scrobble
- Search
- n/a
- Shows
- Show
- Collection Progress 🔒! – Returns collection progress for a show including details on all aired seasons and episodes.
- Watched Progress 🔒! – Returns watched progress for a show including details on all aired seasons and episodes.
- Show
- Seasons
- n/a
- Episodes
- n/a
- Sync
- Last Activities 🔒! – Returns a list of dates when the user last interacted with trakt.tv for different object types.
- Get Watched 🔒! ✨ – Returns all movies or shows a user has watched sorted by most plays.
- Playback
- Playback 🔒! – Whenever a scrobble is paused, the playback progress is saved.
- Remove Playback 🔒! – Remove a playback item from a user’s playback progress list.
- Collection
- Get Collection 🔒! ✨ – Get all collected items in a user’s collection.
- Add to Collection 🔒! – Add items to a user’s collection.
- Remove from Collection 🔒! – Remove one or more items from a user’s collection.
- History
- Get History 🔒! 📄 ✨ – Returns movies and episodes that a user has watched, sorted by most recent.
- Add to History 🔒! – Add items to a user’s watch history.
- Remove from History 🔒! – Remove items from a user’s watch history including all watches, scrobbles, and checkins.
- Watchlist
- Get Watchlist 🔒! 📄? ✨ – Returns all items in a user’s watchlist filtered by type.
- Add to Watchlist 🔒! – Add one of more items to a user’s watchlist.
- Remove from Watchlist 🔒! – Remove one or more items from a user’s watchlist.
- Users
- Settings 🔒! – Get the user’s settings so you can align your app’s experience with what they’re used to on the trakt website.
- Follower Requests
- Follower Requests 🔒! ✨ – List a user’s pending follow requests so they can either approve or deny them.
- Approve or Deny Follower Requests
- Approve 🔒! – Approve a follower.
- Deny 🔒! – Deny a follower.
- Hidden Items
- Hidden Items 🔒! 📄 ✨ – Get hidden items for a section.
- Add Hidden Items 🔒! – Hide items for a specific section.
- Remove Hidden Items 🔒! – Unhide items for a specific section.
- Likes 🔒! 📄 – Get items a user likes.
- Profile 🔒? ✨ – Get a user’s profile information.
- Collection 🔒? ✨ – Get all collected items in a user’s collection.
- Comments 🔒? 📄 ✨ – Returns comments a user has posted sorted by most recent.
- Lists
- Lists
- Get 🔒? – Returns all custom lists for a user.
- Create 🔒! – Create a new custom list.
- List
- Get 🔒? – Returns a single custom list.
- Update 🔒! – Update a custom list by sending 1 or more parameters.
- Delete 🔒! – Remove a custom list and all items it contains.
- List Like
- Like 🔒! – Votes help determine popular lists.
- Remove 🔒! – Remove a like on a list.
- List Item
- List Items 🔒? 📄? ✨ – Get all items on a custom list.
- Add List Item 🔒! – Add one or more items to a custom list.
- Remove List Item 🔒! – Remove one or more items from a custom list.
- Lists
- Follow
- Follow
- Follow 🔒! – Follow a user.
- Unfollow 🔒! – Unfollow someone you already follow.
- Followers 🔒? ✨ – Returns all followers including when the relationship began.
- Following 🔒? ✨ – Returns all user’s they follow including when the relationship began.
- Friends 🔒? ✨ – Returns all friends for a user including when the relationship began.
- Follow
- History 🔒? 📄 ✨ – Returns movies and episodes that a user has watched, sorted by most recent.
- Watchlist 🔒? 📄? ✨ – Returns all items in a user’s watchlist filtered by type.
- Watching 🔒? ✨ – Returns a movie or episode if the user is currently watching something.
- Watched 🔒? ✨ – Returns all movies or shows a user has watched sorted by most plays.
- Stats 🔒? – Returns stats about the movies, shows, and episodes a user has watched, collected, and rated.
Master Data Endpoints
These endpoints offer mostly static data that should be retrieved once and then be cached for further use:
- Certifications
- List – Get a list of all certifications, including names, slugs, and descriptions.
- Genres
- List – Get a list of all genres, including names and slugs.
- Networks
- List – Get a list of all TV networks, including the name.
And that’s it! All essential API endpoints of the trakt.tv API, groupd by type and explained a bit more.
Google Spreadsheet: Output current date (statically)
Published 2017-06-30, 13:03
Imagine you have a Google Spreadsheet with a „last active“ column where you e.g. log the date when you last worked on the line item. You don’t want to have to type the date every time you change something as a) typing is cumbersome and b) you don’t even know the current date anyway.
Normally there is a default keyboard shortcut for that in Google Spreadsheets:
Insert time: | Ctrl + Shift + ; |
Unfortunately this doesn’t really work with a German keyboard (in Windows 10 with English OS language). In Chrome you can replace the Semicolon with Ü, but in Firefox this doesn’t work and I found no way to trigger this shortcut 🙁
Two solutions:
- Create a field with formula `=TODAY()`, maybe in the second row of the headline of the table. (Unfortunately this value will be recalculated on every change – so you can’t just use THAT everywhere to get the date – this value will change.) Now you can just Ctrl + C to copy that value and then Ctrl + Shift + V to output its value (and not copy the formula) to the target cell.
- Add a „Date“ validation to your column. Now you can double click the cell to get a nice calendar tooltip thingie where you can just click on the date you want.
To be honest 1) doesn’t really solve b), but you can leave the formula from 1) in the subheader for that anyway and just use 2) use this instead of the value pasting from 1).