- SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By...

67
<codeware/> how to present code

Transcript of - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By...

Page 1: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

<codeware/>how to present code

Page 2: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

your slides are not your IDE

Page 3: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

$> not your console either

Page 4: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

here are five rules forpresenting code

Page 5: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

rule 1:$ use monospaced font$

Page 6: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

or

monospace

proportional

Page 7: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

monospace

proportional

fixed or variable

fixed or variable

Page 8: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

var power = function(base, exponent) { var result = 1; for (var count = 0; count < exponent; count++) result *= base; return result;};

var power = function(base, exponent) { var result = 1; for (var count = 0; count < exponent; count++) result *= base; return result;};

monospace

proportional

Page 9: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

var power = function(base, exponent) { var result = 1; for (var count = 0; count < exponent; count++) result *= base; return result;};

var power = function(base, exponent) { var result = 1; for (var count = 0; count < exponent; count++) result *= base; return result;};

monospace

proportional

Page 10: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

monospacemonospaced fontshave better readability when presenting code

proportional

Page 11: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

monospace

proportional it is harder to follow code with proportional fonts

monospaced fontshave better readability when presenting code

Page 12: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

use monospaced fontsfor code readability

Page 13: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

rule 2:$ use big fonts$

Page 14: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

presenting for a big audience?

$ this is not your desktop monitor$ font size should be bigger$

Page 15: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

I mean BIGGERthan your think

Page 16: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

I really mean BIGGER than your think

Page 17: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

console.log(“even BIGGER where possible”)

Page 18: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

console .log(“use line breaks”)

Page 19: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

<body> <button onClick=“coolFunction()” autofocus>too small</button></body>

Page 20: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

<body> <button onClick=“coolFunction()” autofocus> same but BIGGER </button></body>

Page 21: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

BIGGER is betterhow do you expect people in the back to read this?

Page 22: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

rule 3:$ smart syntax highlighting$

Page 23: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

this is not your IDEuse syntax highlighting only where needed

Page 24: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

this is not your IDEuse syntax highlighting only where needed

Page 25: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

Presenting code on your slides usually results in a wall of text.Highlight only the specific parts you want your audience to focus on.

Page 26: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

Presenting code on your slides usually results in a wall of text.Highlight only the specific parts you want your audience to focus on.

Page 27: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

Presenting code on your slides usually results in a wall of text.Highlight only the specific parts you want your audience to focus on.

Page 28: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

3 slides example - Ruby map function

1

2

3

Page 29: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

names = ['rey', 'fin', 'poe']

names.map! {|name| name.capitalize }

puts names

3 slides example - Ruby map function

1

2

3

Page 30: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

names = ['rey', 'fin', 'poe']

names.map! {|name| name.capitalize }

puts names

3 slides example - Ruby map function

1

2

3

Page 31: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

names = ['rey', 'fin', 'poe']

names.map! {|name| name.capitalize }

puts names

# output Rey Fin Poe

3 slides example - Ruby map function

1

2

3

Page 32: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

rule 4:$ using ellipsis…$

Page 33: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

import sys

from ortools.constraint_solver import pywrapcp

# By default, solve the 8x8 problem.n = 8 if len(sys.argv) < 2 else int(sys.argv[1])

# Creates the solver.solver = pywrapcp.Solver("n-queens")# Creates the variables.# The array index is the row, and the value is the column.queens = [solver.IntVar(0, n - 1, "x%i" % i) for i in range(n)]# Creates the constraints.

# All columns must be different.# (The "not on the same row" constraint is implicit from the array we're# using to store our variables; since no two elements of an array# can have the same index, there can be no queens with the same row.)solver.Add(solver.AllDifferent(queens))

# No two queens can be on the same diagonal.solver.Add(solver.AllDifferent([queens[i] + i for i in range(n)]))solver.Add(solver.AllDifferent([queens[i] - i for i in range(n)]))

db = solver.Phase(queens, solver.CHOOSE_MIN_SIZE_LOWEST_MAX, solver.ASSIGN_CENTER_VALUE)

solver.NewSearch(db)

# Iterates through the solutions, displaying each.num_solutions = 0while solver.NextSolution(): queen_columns = [int(queens[i].Value()) for i in range(n)]

# Displays the solution just computed. for i in range(n): for j in range(n): if queen_columns[i] == j: print "Q", else: print "_", print print num_solutions += 1

solver.EndSearch()

printprint "Solutions found:", num_solutionsprint "Time:", solver.WallTime(), "ms"

Solving the N-queens Problem

Page 34: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

import sys

from ortools.constraint_solver import pywrapcp

# By default, solve the 8x8 problem.n = 8 if len(sys.argv) < 2 else int(sys.argv[1])

# Creates the solver.solver = pywrapcp.Solver("n-queens")# Creates the variables.# The array index is the row, and the value is the column.queens = [solver.IntVar(0, n - 1, "x%i" % i) for i in range(n)]# Creates the constraints.

# All columns must be different.# (The "not on the same row" constraint is implicit from the array we're# using to store our variables; since no two elements of an array# can have the same index, there can be no queens with the same row.)solver.Add(solver.AllDifferent(queens))

# No two queens can be on the same diagonal.solver.Add(solver.AllDifferent([queens[i] + i for i in range(n)]))solver.Add(solver.AllDifferent([queens[i] - i for i in range(n)]))

db = solver.Phase(queens, solver.CHOOSE_MIN_SIZE_LOWEST_MAX, solver.ASSIGN_CENTER_VALUE)

solver.NewSearch(db)

# Iterates through the solutions, displaying each.num_solutions = 0while solver.NextSolution(): queen_columns = [int(queens[i].Value()) for i in range(n)]

# Displays the solution just computed. for i in range(n): for j in range(n): if queen_columns[i] == j: print "Q", else: print "_", print print num_solutions += 1

solver.EndSearch()

printprint "Solutions found:", num_solutionsprint "Time:", solver.WallTime(), "ms"

Solving the N-queens Problem

what’s the point in presenting all you code if people can’t follow?

Page 35: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

import sys

from ortools.constraint_solver import pywrapcp

# By default, solve the 8x8 problem.n = 8 if len(sys.argv) < 2 else int(sys.argv[1])

# Creates the solver.solver = pywrapcp.Solver("n-queens")# Creates the variables.# The array index is the row, and the value is the column.queens = [solver.IntVar(0, n - 1, "x%i" % i) for i in range(n)]# Creates the constraints.

# All columns must be different.# (The "not on the same row" constraint is implicit from the array we're# using to store our variables; since no two elements of an array# can have the same index, there can be no queens with the same row.)solver.Add(solver.AllDifferent(queens))

# No two queens can be on the same diagonal.solver.Add(solver.AllDifferent([queens[i] + i for i in range(n)]))solver.Add(solver.AllDifferent([queens[i] - i for i in range(n)]))

db = solver.Phase(queens, solver.CHOOSE_MIN_SIZE_LOWEST_MAX, solver.ASSIGN_CENTER_VALUE)

solver.NewSearch(db)

# Iterates through the solutions, displaying each.num_solutions = 0while solver.NextSolution(): queen_columns = [int(queens[i].Value()) for i in range(n)]

# Displays the solution just computed. for i in range(n): for j in range(n): if queen_columns[i] == j: print "Q", else: print "_", print print num_solutions += 1

solver.EndSearch()

printprint "Solutions found:", num_solutionsprint "Time:", solver.WallTime(), "ms"

Solving the N-queens Problem

keep just the relevant code

Page 36: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

import sys

from ortools.constraint_solver import pywrapcp

# By default, solve the 8x8 problem.n = 8 if len(sys.argv) < 2 else int(sys.argv[1])

# Creates the solver.solver = pywrapcp.Solver("n-queens")# Creates the variables.# The array index is the row, and the value is the column.queens = [solver.IntVar(0, n - 1, "x%i" % i) for i in range(n)]# Creates the constraints.

# All columns must be different.# (The "not on the same row" constraint is implicit from the array we're# using to store our variables; since no two elements of an array# can have the same index, there can be no queens with the same row.)solver.Add(solver.AllDifferent(queens))

# No two queens can be on the same diagonal.solver.Add(solver.AllDifferent([queens[i] + i for i in range(n)]))solver.Add(solver.AllDifferent([queens[i] - i for i in range(n)]))

db = solver.Phase(queens, solver.CHOOSE_MIN_SIZE_LOWEST_MAX, solver.ASSIGN_CENTER_VALUE)

solver.NewSearch(db)

# Iterates through the solutions, displaying each.num_solutions = 0while solver.NextSolution(): queen_columns = [int(queens[i].Value()) for i in range(n)]

# Displays the solution just computed. for i in range(n): for j in range(n): if queen_columns[i] == j: print "Q", else: print "_", print print num_solutions += 1

solver.EndSearch()

printprint "Solutions found:", num_solutionsprint "Time:", solver.WallTime(), "ms"

Solving the N-queens Problem

use ellipsis…

Page 37: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

...

# Creates the solver.solver = pywrapcp.Solver("n-queens")...

# Iterates through the solutions, displaying each.num_solutions = 0while solver.NextSolution(): queen_columns = [int(queens[i].Value()) for i in range(n)]

# Displays the solution just computed. for i in range(n): for j in range(n): if queen_columns[i] == j: print "Q", else: print "_", print print num_solutions += 1

solver.EndSearch()

...

Solving the N-queens Problem

Page 38: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

...

# Creates the solver.solver = pywrapcp.Solver("n-queens")...

# Iterates through the solutions, displaying each.num_solutions = 0while solver.NextSolution(): queen_columns = [int(queens[i].Value()) for i in range(n)]

# Displays the solution just computed. for i in range(n): for j in range(n): if queen_columns[i] == j: print "Q", else: print "_", print print num_solutions += 1

solver.EndSearch()

...

Solving the N-queens Problem

the focus is now on the algorithm not the boilerplate

Page 39: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

rule 5:$ use screen annotation$

Page 40: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

do you want to focus your audience’s attention on a specific area in the screen?

Page 41: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

thinking of using a laser pointer?

Page 42: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

do you expect your audience to track this?

Page 43: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

always create slides as if you are the person sitting in the last row of the conference hall.use screen annotations.

Page 44: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

always create slides as if you are the person sitting in the last row of the conference hall.use screen annotations.

Page 45: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

always create slides as if you are the person sitting in the last row of the conference hall.use screen annotations.

Page 46: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

always create slides as if you are the person sitting in the last row of the conference hall.use screen annotations.

Page 47: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

putting it all together$ ECMAScript 2015 Promise example$

Page 48: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

putting it all together$ ECMAScript 2015 Promise example$

the next slides will introduce the ECMAScript 2015 Promise Object

Page 49: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

fetchGraphData(graphName, function(error, graphData)) { if (error) { // handle error } // ... renderGraph(graphData, function(error)) { if (error) { // handle error } // ... notifyClients(msg, result, function(error, response)) { if (error) { // handle error } // ... }); });}); Typical JS code results with

many nested callbacks

Page 50: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

fetchGraphData(graphName, function(error, graphData)) { if (error) { // handle error } // ... renderGraph(graphData, function(error)) { if (error) { // handle error } // ... notifyClients(msg, result, function(error, response)) { if (error) { // handle error } // ... }); });}); makes it hard to follow

Page 51: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

fetchGraphData(graphName, function(error, graphData)) { if (error) { // handle error } // ... renderGraph(graphData, function(error)) { if (error) { // handle error } // ... notifyClients(msg, result, function(error, response)) { if (error) { // handle error } // ... }); });}); error handling is duplicated

Page 52: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

ECMAScript 2015 Promiseto the rescue!

Page 53: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

function fetchGraphData(graphName) { return new Promise(function(resolve, reject)) { let request = new XMLHttpRequest(); ...

// XMLHttpRequest to server request.open(‘GET’, ‘http://example.com', true); request.onload = function() { if (request.status == 200) { resolve(request.response); } else { reject(new Error(request.status)); } };});

The Promise object is used for deferred and asynchronous computations

Page 54: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

function fetchGraphData(graphName) { return new Promise(function(resolve, reject)) { let request = new XMLHttpRequest(); ...

// XMLHttpRequest to server request.open(‘GET’, ‘http://example.com', true); request.onload = function() { if (request.status == 200) { resolve(request.response); } else { reject(new Error(request.status)); } };});

resolve is called once operation has completed successfully

Page 55: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

function fetchGraphData(graphName) { return new Promise(function(resolve, reject)) { let request = new XMLHttpRequest(); ...

// XMLHttpRequest to server request.open(‘GET’, ‘http://example.com', true); request.onload = function() { if (request.status == 200) { resolve(request.response); } else { reject(new Error(request.status)); } };});

reject is called if the operation has been rejected

Page 56: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

fetchGraphData(graphName) .then(renderGraph) .then(notifyClients) .catch(function(error)) { console.log(“Error:”, error) });

Calling a Promise

Promise code is easy to read

Page 57: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

fetchGraphData(graphName) .then(renderGraph) .then(notifyClients) .catch(function(error)) { console.log(“Error:”, error) });

you can nest multiple Promise calls

Calling a Promise

Page 58: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

fetchGraphData(graphName) .then(renderGraph) .then(notifyClients) .catch(function(error)) { console.log(“Error:”, error) });

Calling a Promise

one error handling call

Page 59: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

remember! your slides are not your IDE

Page 60: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

1

codeware - 5 rules

2 3

4 5

Page 61: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

codeware - 5 rules

2 3

4 5

monospacedfont

Page 62: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

codeware - 5 rules

3

4 5

monospacedfont BIG

Page 63: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

codeware - 5 rules

4 5

monospacedfont BIG

smart syntax

highlighting

Page 64: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

codeware - 5 rules

5

monospacedfont BIG

smart syntax

highlighting

ellipsis...

Page 65: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

monospacedfont

codeware - 5 rules

BIGsmart syntax

highlighting

ellipsis...screen

annotation

Page 66: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

CreditsThe Noun Project: Check by useiconic.com Close by Thomas Drach

N-queens problem: OR-tools solution to the N-queens problem. Inspired by Hakan Kjellerstrand's solution at http://www.hakank.org/google_or_tools/, which is licensed under the Apache License, Version 2.0: http://www.apache.org/licenses/LICENSE-2.0

https://developers.google.com/optimization/puzzles/queens#python

Page 67: - SQA Days · 2018. 5. 20. · import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else

for more tips follow me on twitter and slideshare