Deposits and Withdrawls – What’s your balance?

“You can think of relationships – in the marketplace and in your personal life – as a set of deposits and withdrawls. At JetBlue, devotion over the years of being people-friendly was a major deposit. The Valentine’s Day massacre was a big withdrawal. Expressing a genuine, heartfelt apology, offering compensation, and creating the Customer Bill of Rights were new deposits that helped the company recoup public confidence.” – Peterson

I like the metaphor of banks here. Everyone knows what a bank is. They store your money. You put in $100 one week. You take out $100 the other week. Take out too much money and you go into overdraft – we’re all guilty of this at some point in our lives.

It’s a zero sum game. You’re not going to get rich leaving your money in the bank.

In order for money to be useful it must be used.

Consider actions that strengthen relationships:

  • Calling when we haven’t heard from our friends in a while.
  • Texting a friend, “Happy Birthday!!!!!!”
  • Buying a round of drinks.
  • Saying “Thank you.”
  • Saying, “I’m sorry.”
  • Treating your friends friends as friends
  • Picking up the tab.
  • Telling someone they look nice today.
  • Listening.

Next, consider actions that weaken relationships:

  • Failing to celebrate the achievements of your friends.
  • Not calling your Mom on her birthday.
  • Forgetting important details.
  • Not really listening when your friend is telling a story.
  • Taking control of the situation without asking for feedback.
  • Not really caring
  • Not returning calls
  • Ghosting

“Trust inescapably contemplates risk.” – Peterson

With these ideas firmly in place, consider the ways that you are taking and not giving back. Mary consistently goes out with us. But she never offers to buy the next round. Instead she soaks up the good times and doesn’t refill the petty cash.

Don’t be like Mary. Repay your friends and colleagues  for the withdrawls you make. Buy the next round. Celebrate the achievements of your co-workers. Don’t be a user. Be a schmoozer!

“Life is a carnival ride and a game of dice.”

How much have you benefited from the deposits of your friends and family? What’s your balance? Gained something? Out of balance? Pay it back and we all benefit  🙂

Swift Pair Programming – Session 2

Just finished doing the “Learn Swift 2 The basics” training on Lynda.com. Learning the language is pretty smooth with this tutorial. I’ll have to learn more are conditionals, unpacking, and bridging headers to combine Objective-C and Swift in the same project.

source: https://www.lynda.com/Swift-tutorials/Learn-Swift-2-Basics/437175-2.html

Questions for Pairing

  • Should we experiment in playgrounds?
  • Should we do the entire project?
  • Maybe start with basics in playground to get real time compilation

Swift Data Types


// let defines a constant that cannot be modified
// var defines a variable that is mutable
// swift compiler has inference
// write a = 5, compiler thinks it is an int
// explicit typing:
// var a : String = "text example"
// strings can be combined with +
// string interpolation, putting strings (or different data types) inside strings

var numDays = 5
let toPrint = "There are \(numDays) days in the weekend"

// arrays created like this
var myArray : [Int] = [3,5,7]
var myArray = [3,4,5]
var myArray2 : [Int] = Array() // needs explicit definition to add right type of data
myArray2.append(5)
var complexArray : [Any] = Array() // allows any kind of data type
complexArray.append(3) // adds int
complexArray.append("Hello World") // adds string
myArray.count
myArray.removeItemAtIndex(0)

// dictionaries created like this:
var myDictionary = ["apple":"red", "banana":"yellow"]
var myDictionary : [String:Int] = Dictionary()
myDictionary2["apple"] = 0
myDictionary2["banana"] = 1

// **optionals are advanced and unique to swift
// situations where a variable might not have a value

var c : Int? // tells compiler c might be nil or might have a value
var d = c! + 5 // must address that optional c is force unwrapped, only do when sure variable has value
if let nonOptioonalValue = c { // optional binding, only do if has value
  var e = nonOptionalValue + 5 // not executed if c is nil
}
import Foundation
var optString : String?
// I know this might be nil but still try it
optionString?.stringByAppendingString("more"); // if optionString is nil, you will get nil back from operation

// operations require operands to be of the same type
// if different, cast to same type
// curly brackets are always necessary in conditional statements
// switch statement allows case elements to be strings.
// no need to add break keyword after each case
// breaks automatic
// fallthrough keyword allows to go to next case without breaking

// guard statements
guard(t < 0) else { //functions like an if valid
  return
}
while loops
repeat {
  // runs once before the test
}while(i < 10)

// iterate through range of numbers
for index2 in 1...15 {
  index2 // increments itself from 1 to 15, prevents off by 1 errors
}

// iterate through array
let myArray = [1,5,10]
for a in myArray {
  a // prints out 1, 5 then 10
}

Functions


func sayHello(name: String) -> String { // says this function returns a String
  return "hello, \(name)" // example of string interpolation
}
func customGreeting(name: String, greeting: String) -> String {
  return "\(greeting), \(name)"
}
customGreeting("Bob", greeting: "Hi") // in swift common practice is to make first parameter not named, then rest are named

// force swift to disregard a named parameter
func sayHelloToFullName(firstName: String, _ lastName: String) -> String {
  return "Hello, \(firstName) \(lastName)"
}
sayHelloToFullName("Bob", "Smith") // does not require named parameter because of _ in function definition
strings get length
string.characters.count

CONSTRUCTS

  • classes are good for inheritance
  • structs have a limitation, no inheritance and are passed by copy, not reference
  • enums can include functions

// simple class definition
class myClass {
  var a = 3
  func classMethod() -> String {
    return "Return Value"
  }
}

var c1 =  myClass()
cl.a = 10
cl.classMethod()

// simple class definition with initializer
class myClass {
  var a : Int
  init(initialValue: Int) { // constructor
    a = initialValue
  }
  func classMethod() -> String {
    return "Return Value"
  }
}

var c1 =  myClass(initialValue: 15)
cl.a // initialized with 15
cl.a = 10
cl.classMethod()

// build struct
struct myStruct {
  var a = 4
  init(initialValue: Int) {
    a = initialValue
  }
  func structMethod() -> String {
    return "Return Value"
  }
}

var st = myStruct(initialValue: 12)
st.a
st.a = 16
st.structMethod() // all these are the same as class
<h4>// build enum</h4>
enum myEnum { // stores list of possible values
case Value1, Value2, Value3 // stores values with same keyword as switch
init() { // sets custom default initializer
  self = .Value2
}
// enums cannot store properties
static var testValues = ["Test1", "Test2", "Test3"]// can have static variables
func returnMyValueInStringForm() -> String { // can have functions in them
  switch(self) {
    case .Value1: // enumeration is equal to first value
      return myEnum.testValues[0]
    case .Value2 // NOT CLEAN ON WHY THIS HAS A DOT NOTATION???
      return myEnum.testValues[1]
    case .Value3
      return myEnum.testValues[2]
    }
  }
}

var en = myEnum.Value1
var en2 = myEnum // implicitly sets with default init method
en.returnMyValueInStringForm()

Inheritance


class Employee {
  var yearsWorked : Double = 0
  var hasStockOptions : Bool = false
  var currentStatus : EmployeeStatus = .Active // sets with default EmployeeStatus
  enum EmployeeStatus {
    case Active, Vacation, LeaveOfAbsence, Temp, Retired
  }
}

class CEO : Employee, ExecutiveMember { // shows that this class implements ExecutiveMember protocol
  overrride init() {  // does a special init for this object
    super.init()
    hasStockOptions = true
  }

  var bonusAmount : Int {
    return 10000
  }

  func returnFullTitle() -> String {
    return "Chief Executive Officer"
  }
}

class CFO : Employee, ExecutiveMember { // can only implement one super class, but multiple protocols
  overrride init() {
    super.init()
    hasStockOptions = true
  }

  var bonusAmount : Int {
    return 5000
  }

  func returnFullTitle() -> String {
    return "Chief Financial Officer"
  }
}

// creates protocol for objects that conform to this
**// protocol contains abstract method
protocol ExecutiveMember {  // protocol introduces method style, does not include implementation
  var bonusAmount : Int {
    get
  }
}

class Worker : Employee {

}

class TempEmployee : Employee {
  override init() { // sets default of this kind of employee to default .Temp
    super.init()
    currentStatus = .Temp
  }
}

let ceo = CEO()
ceo.yearsWorked = 25
ceo.bonusAmount // implements protocol and returns bonusAmount
ceo.returnFullTitle();
veo.currentStatus = .LeaveOfAbsence
ceo.currentStatus

let cfo = CFO()
cfo.bonusAmount
cfo.returnFullTitle()
cfo.currentStatus

let worker = Worker()
worker.currentStatus

let temp = TempEmployee()
temp.currentStatus
temp.returnFullTitle() // fails because does not implement returnFullTitle method

Storyboards

  • Build user interfaces in graphical environment
  • Only available as a project, not as playground
  • Any Any at bottom of layout shows the what kind of device this design is for
  • Control click on a label then drag to element you want to have it couple to in layout
  • ensures that the two elements stay close to each other when rendered on different layouts and screens
  • Create new view controller for any new screen you want
    select viewcontroller from side pane
    drag into the storyboard to be side by the other one
    control click on button in first view controller
    drag to other view
    now clicking button takes you to next view
  • ViewController.swift is stub that is build for first view controller
    Create swift file for second view controller
    make sure it implements view controller protocol
    Open storyboard
    set to class of secondviewcontroller

Set button action like this:

@IBAction func buttonPressed(sender : UIButton) {
  // button pressed
}

Segues allow view controllers to pass information between different view controllers.

NSUserDefaults

  • Persistent between launches
  • Accepts keyed ints, strings, dates, not all kinds
  • **what does as? mean? // yes it’s an optional, but how does that apply to a for each as?

Interacting with Objective C

Swift string can be converted to NSString with cast


let str = "Test String"
let nsStr = str as NSString

  • true for nsdictionary, nsarray, nsnumber, etc
  • Subclass objective C object types in swift is allowed
  • limitation of no way to subclass a swift object in objective c

Creating button in objc vs swift


objc: UIButton *button = [UIButton buttonWithType: UIButtonTypeSystem];
swift: let button = UIButton(type: .System)

  • Swift automatically shortens enums
  • **objc API, you might find that LLVM shortens enum values
  • Using objective C and swift in the same project
  • Xcode creates a bridging header
  • import objective c header files
  • add properties
  • Then in implementation, write method
  • And copy the method signature to the bridging header file

Misc Swift notes:

  • In Swift 2, we can only use print() to write something to the output. Apple has combined both println() and print() functions into one.
  • The only Xcode version that supports Swift 2.0. Xcode 7 is currently in beta.
  • click on bottom left icon to bring up console in playground
  • printing a named parameter in the print function
  • print(“1”, “2”, “3”, separator:”—“)
  • Hold down option and click on method name, Shows method signature
  • Hold down command and click on method name, Jumps to method definition.

Lingering Questions

  • Is Core Data is available in swift playgrounds
  • What unique content is posted on swift.org?
  • Can I run swift on linux?
  • Where are the best Swift 2.0 problem sets online?

Whiteboard White-knuckling – Part 1


Today I had J bubble sort the word “Firefox” on the whiteboard. The hardest part was staying silent.

I just finished reading The Inner Game of Tennis and I’m trying to put the lessons learned into practice – less verbal instruction, more opportunities for your student to watch himself act.

Listened to a great episode of WTF with David Crosby from CSNY. Crosby said a lot of great things, but the best was, “Math and music are the only 2 things in the world that every culture on earth can communicate with by default.”

Regaining charisma in stressful situations

Charisma seems like a fairy tale trait – something only for born leaders and presidents. But we all need it. Maybe it feels like we don’t have it. The secret is, it can be learned.

Today I wanted to share a 6 step plan for regaining charisma in stressful situations from Olivia Fox Cabane’s “The Charisma Myth”:

  1. Take a deep breath and shake out your body to ensure that no physical discomfort is adding to your tense mental state.
  2. De-dramatize. Remind yourself that these are just physical sensations. Right now, nothing serious is actually happening. This only feels uncomfortable because of the way your brain is wired. Zoom out of your focus to see yourself as one little person sitting in a room with certain chemicals flooding his system. Nothing more.
  3. De-stigmatize. Remind yourself that what you’re experiencing is normal and everyone goes through it from time to time. Imagine countless people all over the world feeling the exact same thing.
  4. Neutralize. Remind yourself that thoughts are not necessarily real. There have been many times when you’ve been certain that a client was disappointed, only to discover that the exact opposite was true.
  5. Consider a few alternate realities.
  6. Visualize a transfer of responsibility. Feel the weight of responsibility for the outcome of this situation lifting off your shoulders. Tell yourself it’s all taken care of.

Takeaways

Have you tried any of these techniques yourself? How did they work out for you?

High Concept

High concept involves the ability to detect patterns and opportunities, to create artistic and emotional beauty, to craft a satisfying narrative. – Reynolds

Detect Patterns

Our marketing team meets on the 2nd and 4th Tuesday of every month. We’ve been doing social for about 4 years.

During each meeting we count our followers and the number of clicks our content has generated.

During these meetings we’re seeing a surprising trend. The content we’re putting out is not engaging with students. The clicks are declining. Forget about retweets!

We need a voice. We need a persona. People need to sense that a real human being with a real personality made up of intense likes and diverse interests lives just behind the @.

Who talks more like students than students?

Twitter Challenge

“Welcome to the Twitter Challenge! Youʻre going to have 5 minutes to market our Pocket Workshops via Twitter,” I announced to the student employees at a student staff meeting. I had created a fake Twitter page and put it up on the server.

“Whoever comes up with the best tweet to market these workshops will get — the respect of their coworkers.” I messed up and didnʻt have a prize to give away. Too focused on the code. Remember prizes for next time.

“Ready,” I placed my left thumb on alt key.

“Set,” my left pinky searching for the tab.

“Go!” and I slammed down the key combination revealing the bit.ly url to post on my fake Twitter.

They killed it. In 5 minutes they were able to generate 21 solid engaging tweets that did not sound like business-speak.

screen-shot-2016-10-01-at-1-34-37-pm

Detect Opportunities

Students are here in the office. They talk like students. They know what matters the most to other students. Let’s have them do the talking. Let’s have the students create context for our content.

Create artistic beauty

Artistic beauty is ephemeral. Create something that is easy to look at. Create something that begs you to interact with it.

Create emotional beauty

Emotional beauty comes from our multiple senses hitting simultaneously to elevate the experiencing a viewing work of art.

When asked  how he created such a beautiful statue, Michaelangelo said that he saw the statue within the marble block, carved it out, and freed it. He saw the potential of the block of stone and pulled it out.

The fact that we know the story behind this beautiful piece of art is what makes the it that much nicer. One block of stone, and this marvel comes out.

True mastery of craft, with applied focus, reveals art by connecting the narrative story with the object that has been created.

Craft a satisfying narrative

Travis Kalanick and his friend had an idea for a taxi service that would allow people to hail a taxi with their phone.

No one thought it would work.

Instead of listening, he got to work testing his idea.

First he drafted up a simple app in a weekend that would allow his friends to hail a cab from anywhere in the city. Then he hired a driver to respond to the requests. Then he gave the app to 10 friends.

People used the service once.

Then he found that all of them were reusing the service.

Kalanick positioned Uber in a small guy roll that makes the success of the company that much more satisfying. Kalanick’s moves were different from what society told him would work. Positioning himself as David to the Taxi Industry’s Goliath makes the current success of the company that much more satisfying.

Next Steps

  • Discuss the kiosk idea at the next full time staff meeting
  • Discuss problem observed
  • Discuss baby-steps to testing solution
  • Scale solution
  • Draft up flowchart of how it will  work
  • Gamification is possible with this thing
  • Build it out!

Context is more important than Content

“Context is more important than content.” – Gary Vaynerchuk

What keeps bringing us back to the websites we love? Is it the beautifully designed header images? Does that design make us feel more like we have a design ideal? Maybe it’s the witty writing of our favorite poster?

No, it’s all about content. Or, so we’ve been told.

Fresh content no longer guarantees more views

We keep going back to our favorite websites because they always have fresh new content. We check our Facebook feed for new content. We check our Twitter feed for new content.

When was the last time you went on Twitter to find an old post? You ended up scrolling through the newest content instead didn’t you?

We don’t care about historical information. We want to know what’s happening now!

We’ve been hearing that content drives users to websites. For a while we had a hard time finding the websites with the content we wanted. Then Google came along and created an interface for us to get directly to the content we’re looking for. Google even ranked the results by helpfully placing the most linked pages at the top of the search results.

Now that we can find the content we’re looking for, and there’s so much of it, we’re suddenly more interested in the content creators than the content itself.

If I can get the same content from Bill and Suzy, I’m going to get the content from the person I identify with, respect, and believe in.

I love Paelo. If I know Bill is crazy about Paleo and I know Suzy isn’t, I’m going to go to Bill for my content.

How transparent is your supermarket?

Before I go on explaining the content versus context debate, allow me to make a comparison between websites and supermarkets.

If we don’t know exactly where our food comes from we don’t know which supermarket to support.

We venerate food when we know it comes from a sustainable source. It seems to just taste better when we know it as been grown, produced, and cultivated ethically.

We can get the same kind of food from all the other supermarkets around our house. But we do the extra research to find out how the food is made, how it gets to where we are, and who is affected positively and negatively by our food consumption.

Supermarkets that go out of their way to provide us with a narrative of how they grow their greens, how they bring them to us, and how much of a carbon footprint they require, get our business.

Shoppers vote with their dollars

Armed with this information we vote with our dollars by buying produce from locations that avow that their goods harm the world as little as possible.

This production and transparency of context gives us the ability to vote with our dollars and support those businesses with the most sustainable and ethical business practices.

We are seeing this context over content shift come to the websites we choose to visit because these websites are front-facing stores for our money, our ideals, and who we identify ourselves with.

This craving for transparency about where our food comes from bleeds into all of our social and economic outcomes. We vote and tally our beliefs by our actions regarding what we use our money to buy and support.

Users vote with their attention

If your users don’t know who you are, why would they choose you over your competitor? If the difference between your products and your competitors products is minimal you absolutely need to differentiate yourself.

The easiest way to differentiate yourself is to tell your story. What makes you different? Narratives must be lived to become fact.

We know you have the content, what’s your context?

What’s your story?