-- Usage: <script> gatewayHostName username password | |
-- based on https://gist.github.com/andrewh/7135352 and https://github.com/seanfisk/juniper-network-connect-vpn-applescript/blob/master/juniper.applescript | |
on run argv | |
if (count of argv) is not equal to 3 then | |
return "Usage: <script> gatewayHostName username password" | |
else | |
set {gatewayHostName, username, pw} to argv | |
No need for homebrew or anything like that. Works with https://www.git-tower.com and the command line.
- Install https://gpgtools.org -- I'd suggest to do a customized install and deselect GPGMail.
- Create or import a key -- see below for https://keybase.io
- Run
gpg --list-secret-keys
and look forsec
, use the key ID for the next step - Configure
git
to use GPG -- replace the key with the one fromgpg --list-secret-keys
Many people struggle with this question. Some just try to make as much as a full-time employee makes (and ignore that they won't be able to bill as many days). Others follow tips on startup related websites that suggest to ask for 20% to 50% more than an salary would yield (and ignore the additional risk and expenses they have).
Below you will find some numbers to help you calculate how high your hourly or daily rate should be.
- You take more risk than full time employees, phases without income are likely
#!/bin/bash | |
# Copyright 2017 Théo Chamley | |
# Permission is hereby granted, free of charge, to any person obtaining a copy of | |
# this software and associated documentation files (the "Software"), to deal in the Software | |
# without restriction, including without limitation the rights to use, copy, modify, merge, | |
# publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons | |
# to whom the Software is furnished to do so, subject to the following conditions: | |
# | |
# The above copyright notice and this permission notice shall be included in all copies or |
Code is clean if it can be understood easily – by everyone on the team. Clean code can be read and enhanced by a developer other than its original author. With understandability comes readability, changeability, extensibility and maintainability.
- Follow standard conventions.
- Keep it simple stupid. Simpler is always better. Reduce complexity as much as possible.
- Boy scout rule. Leave the campground cleaner than you found it.
- Always find root cause. Always look for the root cause of a problem.
import UIKit | |
import PlaygroundSupport | |
let scrollView = UIScrollView(frame: CGRect(x: 0, y: 0, width: 100, height: 100)) | |
scrollView.backgroundColor = .red | |
let stackView = UIStackView(frame: CGRect(x: 0, y: 0, width: 1000, height: 100)) | |
stackView.backgroundColor = .gray | |
stackView.axis = .horizontal | |
stackView.spacing = 10 |
APP="MyApp" | |
CONSTRUCT=xcodebuild -workspace $(APP).xcworkspace -scheme $(APP) clean | |
install_deps: | |
pod install | |
create_config: | |
swift package fetch | |
swift package generate-xcodeproj | |
wipe: | |
rm -rf .build $(APP).xcodeproj $(APP).xcworkspace Package.pins Pods Podfile.lock |
If you hate git submodule
, then you may want to give git subtree
a try.
When you want to use a subtree, you add the subtree to an existing repository where the subtree is a reference to another repository url and branch/tag. This add
command adds all the code and files into the main repository locally; it's not just a reference to a remote repo.
When you stage and commit files for the main repo, it will add all of the remote files in the same operation. The subtree checkout will pull all the files in one pass, so there is no need to try and connect to another repo to get the portion of subtree files, because they were already included in the main repo.
Let's say you already have a git repository with at least one commit. You can add another repository into this respository like this:
var cache = [Int: Int]() | |
let queue = DispatchQueue(label: "cacheQueue", attributes: .concurrent) | |
let iterations = 100000 | |
// In the first run, cache is empty so we're writing each time | |
do { | |
let start = CFAbsoluteTimeGetCurrent() | |
for i in 0 ... iterations { | |
var exists = false | |
queue.sync { |