Working effectively with iTerm

iTerm2

brew cask install iterm2

Shortcuts

Settings

Reuse previous session’s directory
  • Profiles > Default > General > Working Directory > Reuse previous session’s directory ##### Store command history/directory info
  • General > Save copy/paste and command history
  • Ensure Preferences > Advanced > Restore window contents at startup is set to Yes in iTerm (default to true)
  • Ensure “Close windows when quitting an app” is off in Mac’s System Preferences >General
Change default window size
  • Profiles -> Window -> Set rows to 80, Columns to 300
  • No way to open as maximized by default

Bash Settings

~/.bash_profile
# \w - Full path of the current working directory
export PS1="\w "
~/.inputrc

Bash emacs mode shortcuts

CTRL-A Move cursor to the beginning of the line
CTRL-E Move to the end of the line
CTRL-K Kill forward to the end of a line
CTRL-U Kill the line from the beginning to this point
^abc­^­def Run previous command, replacing abc with def
Option+left(right) Move backward(forward) one word
Make Option+left(right) work
  • Preferences > Profiles > Keys
Keyboard Shortcut: Option+Left Action: Send Escape Sequence Esc+ b
Keyboard Shortcut: Option+Right Action: Send Escape Sequence Esc+ f
Command History - Cmd+Shift+;
Paste History - Cmd+Shift+H
  • Works for multiple-lines command
highlight errors and warnings
  • Preferences > Profiles > Advanced > Triggers > Edit
(?i:.*error.*)                     // Yellow on Black
(?i:.*(warning|warn).*)            // Orange on Black
(?i:.*FATAL.*)                     // White on Red
install shell-integration
  • Install from menu: iTerm2 > Install Shell Integration
  • add command: imgcat
  • to use the feature download and upload with scp, we need install shell integration on each remote host
badge
  • Preferences>Profiles>General>Badge (session.username)@(session.hostname)
imgcat

Toolbet

Track long running command

  • Edit > Marks and Annotations > Alert on next mark

Chrome Tips And Tricks

Shortcuts

Chrome Extensions

Chrome Vimium
  • Shortcuts
  • numbers+command
    • number+x-close multiple tabs
    • number+r-reload multiple tabs
    • number+W-move multiple tabs to new window
    • number+<<(>>) move multiple tabs
    • (number+)f(F)-open multiple links
    • (number+)d(u)- multiple half page(up) down
  • Find Mode (/)
    • Support regex()
    • Find queries are global and persistent
    • Use and to re-use previous queries
  • Visual Mode
    • v or V (line mode)
    • o to swap the anchor and the focus
    • c to enter caret mode from a visual mode
    • vi-like movements: $
Tampermonkey
Chrome Urls
  • chrome://flags/
  • chrome://restart/
Change/Assign extension’s shortcuts
  • chrome://extensions/shortcuts

Settings

Block notification requests
  • go to chrome://settings/content/notifications
  • toggle Ask before sending (recommended) to Blocked
Print
  • Hide headers and footers
Close Download Bar


NET::ERR_CERTIFICATE_TRANSPARENCY_REQUIRED for known safe (intranet) sites
  • edit /Library/Preferences/com.google.chrome.plist

Tips

Drag multiple tabs to new window hold the Command key
Open a Search in New Tab Hold down the Command button and hit return
Cmd+click Open link in new tab
One line browser notepad
  • data:text/html,


DevTools

  • Cmd+P | Open File
  • Cmd+Shift+P | Run Command


Extension Development

Partition code into background scripts and content scripts
  • Content Scripts
    • Run in the context of web pages
    • limited access to Chrome APIs
    • Use Chrome Dev Tools to debug it
  • Background Scripts
    • Full access to Chrome APIs, but no access to web page content
    • Use background.html page in chrome://extensions/ to debug it
  • Message Passing
    • Some functions can be only run in context scripts, some only in background script, use message passing to pass data in different context
    • Disable Blocking of Mixed Content
    • chrome.tabs.sendMessage, chrome.extension.onMessage.addListener
  • chrome.commands|shortcuts
APIs
  • chrome.contextMenus.create
  • window.getSelection()

Productivity Tools for Developers

Chrome Tips && Tricks

iTerm2

HipChat App

Quip

Adobe Reader

GitBook

trello.com

Mac Tips and Tricks

Shortcuts

Change Notification type

  • Preferences > Notifications
  • None: no notification at all
  • Banners: go away automatically
  • Alters: stay until user dismisses it
Option click EVERYTHING
  • in Finder, Option+Click will show menu: “copy items as pathnames”, and “show inspector”

Prevent a Mac from Sleeping

  • pmset noidle

Remove Siri from the Touch Bar

  • Preferences > Keyboard > Customize Control Strip
  • Highlight the Siri button, click, and drag the Siri button upward and out of the Touch Bar

Enable Touch ID

  • Preferences > Touch ID
  • Then we can use touch id instead of manually type password
  • Use Touch ID for sudo
    • vi nano /etc/pam.d/sudo
    • add “auth sufficient pam_tid.so” to the top

Change default application for a file type

  • right-click the file, select Get Info and change the application in Open With section.
  • click Change All… button to apply the changes to all files
  • Shortcut: Command+space
  • Reveal the Location
    • Preview location: with Command key
    • Open the location in Finder: hold the Command key, and press Return

Mail


Messages App to send/receive SMS

iPad

Manually manage music and videos

To manually copy videos from mac to iPad: - Select Summary option from the device’s settings in iTunes, then enable the option

brew

Tools

the-unarchiver
  • brew cask install the-unarchiver
  • open its preferences and select all the file format
grammarly


References

Mac Tips & Tricks - 2016

Security

Certificate

CSR(Certificate Signing Request)

Create a keypair

keytool -genkeypair -keystore keystore.p12 -storetype PKCS12 
-alias ${THE_ALIAS} -keyalg RSA -keysize 2048 
-dname "CN=${THE_CN}" -storepass ${THE_PASSWORD}
 
#### Create a Certificate Signing Request
keytool -certreq -keystore keystore.p12 -storetype PKCS12 
-alias ${THE_ALIAS} -sigalg SHA256withRSA -storepass ${THE_PASSWORD}
 
#### Install the downloaded certificate.chain.pem to the keystore
keytool -import -keystore keystore.p12 -alias ${THE_ALIAS} 
-trustcacerts -file the.chain.pem -storepass ${THE_PASSWORD}
 
##### Extract private key
openssl pkcs12 -nocerts -in keystore.p12 -out the_private.key -nodes
 
##### Convert the pem to PKCS12 Keystore
openssl pkcs12 -export -in the.chain.pem -out keystore.p12 
-inkey the_private.key -name ${THE_ALIAS} -noiter -nomaciter

Concepts

alias
  • unique string to identify the key entry
trustStore vs keyStore
  • Keystore is used by a server to store private keys, and truststore is used by third party client to store public keys provided by server to access.

Markdown Tips

  • Link without text

Table without header

Nested list

Task(Check) List

Line breaks in markdown

Named anchor

  • we can use html in markdown
  • Reference the anchor

Supported Languages

  • markdown, java, json,html, javascript, shell, yaml, xml etc

Write email with markdown

Share markdown with socrates

stackedit

  • Functions: export as html, save to google drive, blogger, github, dropbox etc
  • alternatives: https://dillinger.io/

Blogger with markdown

  • Why: Focus on the content, easy to store/edit the content locally
1: Use “Copy Html” function from markdown-preview-plus
  • Then paste output
<div dir="ltr" style="text-align: left;" trbidi="on">
<div style="font-size: large;">
     _copy_html_output_from_markdown-preview-plus_
</div></div>
2: Use pandoc
  • then remove no needed head, body tags

Atom Plugins

pandoc

  • brew install pandoc
  • Add eval “$(pandoc –bash-completion)” to ${HOME}/.bash_profile
  • generate pdf: -o output.df
    • install this first: brew cask install mactex
  • generate ppt: -o output.pptx
  • pandoc –list-extensions
  • pandoc –list-output-formats

remark

  • in-browser, markdown-driven slideshow tool

Gotcha

  • Space matters:
    • for link, no space between [] and (), for header, need space between ### and the words
    • check the colors in atom
  • Empty line matters
    • when not sure, add empty line
  • It doesn’t wrap in code block

Basic Syntax

Keyboard Shortcuts

  • Use Mac without a mouse and less fingers
  • My fingers burn when use mac trackpad or touch bar, so try to use key board as possible as I can.
  • Some shortcuts are supported by multiple applications, or we can customize them to use same shortcuts.

Mac

Turn on Full Keyboard Access
  • Keyboard > Shortcuts > All Controls
  • Control + F7 to switch the modes
Mouse Keys
  • Command+Option+F5 > Open Accessibility Option
  • Enable Press Option key five times to toggle Mouse Keys
  • Move pointer: 7, 8, 9, 4, 6, 1, 2, 3
  • Click mouse button: I
  • Press and hold the mouse button: M
  • Release the mouse button: .
Right Click
  • When Mouse key is on, Fn-Ctrl-I
  • Control + Click
Switch input source
  • Keyboard > Shortcuts > Input Sources
  • Select the previous input source: ctrl+space
[Shortcuts]
  • Customize at Preferences > Keyboard > Shortcuts > Keyboard
/ or Command+Shift+G Go to Folder
Fn+F11 Show Desktop
Command+Shift+3 Capture the entire screen
Command+Shift+4 Capture a selected area
Control + a/e Got to head/end - work in Terminal, Chrome, Atom
Command+` cycle between open windows in selected application
Command+Option+D show or hide dock
Command + Option + Escape Force Quit Applications
Ctrl+F2 Access menu, enable it at Keyboard -> Shortcuts -> Keyboard
Shift+Cmd+? Open Help menu and navigate
^+F3 Move focus to dock
^+F8 Move focus to status menu, search all actions in menu
Command+q Quit the app
Command+shift+w Close the window
Command + , Open Preferences
Command+~ Switch windows for same application(Command-Shift-~, reverse order)
Command + X Cut the highlighted text
Shift+Alt+Command+V paste the highlighted text and matches the destination style
Cmd+Shift++(-) Zoom in(out) text
Command + B/I/U make text bold/italic/underlined
Shift+Arrow Select text
(Shift+)Option+Left(Right) (Select)Jump by word
Cmd+Shift+Z Redo
Fn + up(down) Page up(down)
Cmd+1..8 Move tab
Cmd+9 Move to last tab
Cmd++(or -) Increase(Decrease) Font Size
[[ or ]] Follow the link labeled previous or < | next or > - not always works
gu(or U) Go up the URL hierarchy or Go to root of current URL hierarchy
v(visual), c(caret mode), /(find mode)
vi mode movement
  • h(move left), l(right), j(down), k(up), w(move to right one word), b(move to left one word)

Finder
Command + up go up a level
Command + down open current selected folder in same window
Command + [(]) go bak or forward
Spacebar preview(open) the item
Command + I get info

Mac Mail

Command+shift+D Send message
Command+shift+D Forward message
Command+shift+R Reply all
Command+shift+A Attach files to message
Command+1 Go to inbox
Command+1 or +2 etc Go to other items in favorites



Chrome

Cmd+shift+J then close it Close download bar
Option+Cmd+left(right) go one tab left(right)
(Shift+)spacebar Page down(up)
Command-Shift-V Paste without formatting
Cmd+left(right) go back(forward) in history
⌘ + Shift + w Closes the current window
⌘ + Shift + j Open the Downloads page
⌘ + Option + i Open Developer Tools - conflict in mac
Cmd+Option+C Open dev tools in inspect mode


Change/Assign extension’s shortcuts
  • chrome://extensions/shortcuts

Install Tampermonkey and then install the “Auto Close YouTube Ads” script

Vimium

(number+)W move tabs(s) to new window
(number+)<<(>>) Move tab to the left(right)
T search through your open tabs
B Bookmark search
(number+)r reload tab(s)
(number+)f(F) open/click multiple links in the current(or new) tab or execute multiple action in same tab
(number+)x close tabs(s)
^ Go to previously-visited tab
yt duplicate current tab
gE Edit the current URL and open in a new tab
X restore closed tab (i.e. unwind the ‘x’ command)
gi focus the first (or n-th) text input box on the page
h/j/k/l scroll left/down/up/right
(number+)d(u) half page down(up)
yy copy the current url to the clipboard
yf copy a link url to the clipboard
p/P search the text in clipboard using search engine
? help
Customize keys
map m toggleMuteTab
map M toggleMuteTab all
map X toggleMuteTab other
map cl closeTabsOnLeft
map cr closeTabsOnRight
map co closeOtherTabs
map fi LinkHints.activateModeToOpenIncognito
unmap J
unmap K
unmap t



iTerm

Cmd+\ Show Annotations
Cmd+Click Clickable Links
Cmd+Shift+H Paste History
Cmd + k Clear buffer
Cmd+Shift+O Open Quickly(Search tabs)
Cmd+; Autocomplete
Cmd+Shift+; Show Command History
Cmd+Shift+H Show Paste History
Cmd+Option+/ Recent Directories popup

VLC Player

  • Preferences > HotKeys
Cmd + F Toggle Full Screen
Space Toggle Play/Pause
Command + Shift + left/right jump back/forward about a minute
Command + Ctrl + left/right jump back/forward about ten seconds
Cmd + =(-) Faster(Slower)
Cmd + Up(down) Volume up(down)
Cmd+Option+P Playlist

Atom

Command+P Switch to File
Command+Shift+P Command Palette
Command+\ Toggle Tree View
Command+Enter Replace all
Cmd+Ctrl+G Select all matching characters
Shift+Ctrl+M Markdown Preview
Cmd+R File symbol navigation
Ctrl+Shift+C Copy full path
Ctrl + g Go to Line
Ctrl+m Go to Matching Bracket
Cmd+Shift+t Bring up the list of corrections (with spell-check extension)
Ctrl+Shift+left(or right) move tab to left(or right)
Cmd+k+u Convert to Upper Case
Cmd+k+l Convert to Lower Case
Ctrl+Shift+k Delete Line
Ctrl+K Cut to End of Line

Eclipse

Command+3 Quick Access( a lot of things, like switch views)
Cmd+F8 Switch between perspectives
Shift+F10 Open context menu
Cmd+Option+X +T(J) Run Junit test(Java Application)
Fn+Up(down) Page up(down)
Cmd+Option+ctrl+left(right) Previous(next) tab, need manually add them in Pref > Keys
Cmd+Option+left(right) Go to previous or next
Ctrl+M Maximize(restore) the editor area
Cmd+Shift+L List all shortcuts
Cmd+I Show info

Quip

Command+Option+1/2/3 Large/Medium/Small Heading
Command+Shift+L Bulleted List
Command+Shift+7 Numbered List
Command+Option+K Code block
Command+Option+C Toggle Conversation
Command+/ Keyboard shortcuts

Useful Java Code Snippets

TreeMap/TreeSet

ArrayDeque

  • As stack or queue:
  • its default iterator or stream is a queue: fifo
  • Use iterator, for loop to access it, but not support random access like get(i)

Stream

Optional

Avoid null check

Misc

Gson Essentials

GsonBuilder
setPrettyPrinting
disableHtmlEscaping
serializeNulls
registerTypeAdapter

JsonParser
Gson
Gson gson = new GsonBuilder().setPrettyPrinting().create();


Gson extra
RuntimeTypeAdapterFactory
builder.registerTypeAdapterFactory(RuntimeTypeAdapterFactory.of(BaseType.class, "type").registerSubtype(SubType.class,SubType.TYPE))

Jackson Essentials

Tools - Troubleshooting Skills

Splunk

Search syntax
  • key=value AND OR NOT
  • | sort num(ip) desc, -str(url) | sort -value
  • | reverse
  • | top(or rare) limit=5 name
  • | head 5
  • | highlight fa, fb
  • | dedup fa
  • | stats count by method
  • | chart count by method url
  • | timechart span=15m count by url

earliest=“11/5/2017:20:00:00” latest=“11/12/2017:20:00:00”

Show only Certain Fields

| table field

(Not) contains a field

NOT fa=*

See all values in a field

| top a_number SourceName

Interesting Fields
  • Explore and know what values for a field
Events before or after X seconds
  • Show logs around current event
Visualizations Tab

Linux

crash or reboot?

ast -n2 -x shutdown reboot

  • If this reports a SYSTEM_SHUTDOWN followed by a SYSTEM_BOOT, all is well; however, if it reports 2 SYSTEM_BOOT lines in a row, then clearly the system did not shutdown gracefully

host $ip

Write Troubleshooting Friendly Program
  • Name your thread

Tips, Tricks and Gotchas

Chrome
Remove pdf password
Chrome -> Print -> Save As PDF
chrome://settings/cookies
chrome://settings/content/notifications?search=Notifications

Chrome Dev Tool
Bring Default Context Menu: Enable Copy Text
document.designMode = "on";

Command Menu - Cmd + Shift + P
Capture screenshots without extensions

Blogger
You have logged out from another location
Common approaches to handle website related issues: clear cache and cookie

Search for multiple labels
search/label/LABEL1+LABEL2
/search/?q=label:LABEL1|label:LABEL2

Gmail
Sometimes Gmail doesn't sort the replies by date in one conversation - maybe when different people reply different thread.

But Gmail seems already display threads that you have not read

- Example: Robinhood pdf

Robinhood upcoming earnings
https://robinhood.com/applink/upcoming_earnings

Lessons Learned about Programming and Soft Skills - 2018

Make things easier to (re)use
Example: LocalConnectToIF1, make other devs easier to use this trick by just setting a property, all other steps are coded.

Make it easier to search later

Add tag/text to help search: to-read, to-post etc
Bookmark or save important/useful links
Add it to favorites

Assume other person is probably doing the right thing
- You think it should implement like this, check the code/design, maybe it's already done this way, or maybe they have good reason to choose a different approach

Do research first
- usually the same problem has already been solved

Do some (quick, simple) (re)search on unknown things
- try to understand it, solve your questions
- is it good, when to use it, who use it, why?

- Example: bitcoin, block chain

Make applications work similar/same across all platforms
- unless there is good reason to not
Example: Robinhood Android vs iPhone

Ask questions before take time-consuming operation

Example: crossroads

Effective SearchReframe the search, be more specific
Example: chat scalable design -> websocket load balancing

Lessons Learned about Programming and Soft Skills - 2017

Programmers' Toolbox

Kafka
(different levels) Retry Queue and Dead Letter Queen

Redis
SETNX key value
LRU, LRU
- Sample 3 or 5 keys, maintain a larger pool of candidate keys (16)
Pipeline
- Queue in client side
Translation
- Multi, exec, abort
- queued in server side
- Continue to execute even some commands fail, no rollback
- Use Watch to implement CAS, fail the translation if the key changes
- pub/sub
- sorted sort(zset), 
- hyperloglog, PFADD, PFCOUNT

- service side lua script


OkHttp

WebSocket
- efficiency: persistent duplex, bidirection connection

Java - @ServerEndpoint
Socket.io

LevelDB/RocksDB

jq
jq '.pods[] | .name, .replication'
'.owner.name'
'.likes[0]'
.[] return all elements in the array

Notes on Distributed Systems

Consensus
Paxos
Roles: proposers, acceptors, learners

Practices:
Cassandra lightweight transactions, CAS

Raft
replicated state machine
strong leadership
(append-only) log replication
a term number and an index
randomized election timeout

2 Phase Commit
Vote
Commit/abort
a blocking protocol

3 Phase Commit
Vote
Prepare
Commit/abort
a non-blocking protocol

CAP
LSM

Redis
pub-sub
Only online customers can get message
No customer group, each customer gets all message

Basic
WAL - write-ahead-log
R+W>N

Scalable Stateful Services

Labels

Java (161) Lucene-Solr (112) Interview (64) All (58) J2SE (53) Algorithm (45) Soft Skills (39) Eclipse (33) Code Example (31) JavaScript (23) Linux (22) Spring (22) Tools (22) Windows (22) Web Development (20) Nutch2 (18) Bugs (17) Debug (16) Defects (14) Text Mining (14) Troubleshooting (14) J2EE (13) Network (13) Tips (12) PowerShell (11) Chrome (10) Problem Solving (10) Design (9) How to (9) Learning code (9) Performance (9) Security (9) UIMA (9) html (9) Http Client (8) Maven (8) bat (8) blogger (8) Big Data (7) Database (7) Google (7) Guava (7) JSON (7) Shell (7) System Design (7) ANT (6) Coding Skills (6) Lesson Learned (6) Programmer Skills (6) Scala (6) css (6) Algorithm Series (5) Cache (5) Continuous Integration (5) IDE (5) adsense (5) xml (5) AIX (4) Become a Better You (4) Code Quality (4) Concurrency (4) GAE (4) Git (4) Good Programming Practices (4) Jackson (4) Life (4) Memory Usage (4) Miscs (4) OpenNLP (4) Project Managment (4) Review (4) Spark (4) Testing (4) ads (4) regular-expression (4) Android (3) Apache Spark (3) Distributed (3) Dynamic Languages (3) Eclipse RCP (3) English (3) Happy Hacking (3) IBM (3) J2SE Knowledge Series (3) JAX-RS (3) Jetty (3) Mac (3) Python (3) Restful Web Service (3) Script (3) regex (3) seo (3) .Net (2) Android Studio (2) Apache (2) Apache Procrun (2) Architecture (2) Batch (2) Bit Operation (2) Build (2) Building Scalable Web Sites (2) C# (2) C/C++ (2) CSV (2) Career (2) Cassandra (2) Fiddler (2) Google Drive (2) Gson (2) How to Interview (2) Html Parser (2) Http (2) Image Tools (2) JQuery (2) Jersey (2) LDAP (2) Logging (2) Software Issues (2) Storage (2) Text Search (2) xml parser (2) AOP (1) Application Design (1) AspectJ (1) Chrome DevTools (1) Cloud (1) Codility (1) Data Mining (1) Data Structure (1) ExceptionUtils (1) Exif (1) Feature Request (1) FindBugs (1) Firefox (1) Greasemonkey (1) HTML5 (1) Httpd (1) I18N (1) IBM Java Thread Dump Analyzer (1) Invest (1) JDK Source Code (1) JDK8 (1) JMX (1) Lazy Developer (1) Machine Learning (1) Mobile (1) My Plan for 2010 (1) Netbeans (1) Notes (1) Operating System (1) Perl (1) Problems (1) Product Architecture (1) Programming Life (1) Quality (1) Redhat (1) Redis (1) RxJava (1) Solutions logs (1) Team Management (1) Thread Dump Analyzer (1) Visualization (1) boilerpipe (1) htm (1) ongoing (1) procrun (1) rss (1)

Popular Posts