text:
1. Welcome
This codelab is part of the Kotlin Bootcamp for Programmers course. You'll get the most value out of this course if you work through the codelabs in sequence. Depending on your knowledge, you may be able to skim some sections. This course is geared towards programmers who know an object-oriented language, and want to learn Kotlin.
In this codelab, you create a Kotlin program and learn about classes and objects in Kotlin. Much of this content will be familiar to you if you know another object-oriented language, but Kotlin has some important differences to reduce the amount of code you need to write. You also learn about abstract classes and interface delegation.
Rather than build a single sample app, the lessons in this course are designed to build your knowledge, but be semi-independent of each other so you can skim sections you're familiar with. To tie them together, many of the examples use an aquarium theme. And if you want to see the full aquarium story, check out the Kotlin Bootcamp for Programmers Udacity course.
What you should already know
- The basics of Kotlin, including types, operators, and looping
- Kotlin's function syntax
- The basics of object-oriented programming
- The basics of an IDE such as IntelliJ IDEA or Android Studio
What you'll learn
- How to create classes and access properties in Kotlin
- How to create and use class constructors in Kotlin
- How to create a subclass, and how inheritance works
- About abstract classes, interfaces, and interface delegation
- How to create and use data classes
- How to use singletons, enums, and sealed classes
What you'll do
- Create a class with properties
- Create a constructor for a class
- Create a subclass
- Examine examples of abstract classes and interfaces
- Create a simple data class
- Learn about singletons, enums, and sealed classes
2. Terminology
The following programming terms should already be familiar to you:
- Classes are blueprints for objects. For example, an
Aquariumclass is the blueprint for making an aquarium object.
- Objects are instances of classes; an aquarium object is one actual
- Properties are characteristics of classes, such as the length, width, and height of an
- Methods, also called member functions, are the functionality of the class. Methods are what you can "do" with the object. For example, you can
- An interface is a specification that a class can implement. For example, cleaning is common to objects other than aquariums, and cleaning generally happens in similar ways for different objects. So you could have an interface called
Cleanthat defines a
clean()method. The
Aquariumclass could implement the
Cleaninterface to clean the aquarium with a soft sponge.
- Packages are a way to group related code to keep it organized, or to make a library of code. Once a package is created, you can import the package's contents into another file and reuse the code and classes in it.
3. Task: Create a class
In this task, you create a new package and a class with some properties and a method.
Step 1: Create a package
Packages can help you keep your code organized.
- In the Project pane, under the Hello Kotlin project, right-click on the src folder.
- Select New > Package and call it
Step 2: Create a class with properties
Classes are defined with the keyword
class, and class names by convention start with a capital letter.
- Right-click on the example.myapp package.
- Select New > Kotlin File / Class.
- Under Kind, select Class, and name the class
Aquarium. IntelliJ IDEA includes the package name in the file and creates an empty
Aquariumclass for you.
- Inside the
Aquariumclass, define and initialize
varproperties for the width, height, and length (in centimeters). Initialize the properties with default values.
package example.myapp
class Aquarium {
var width: Int = 20
var height: Int = 40
var length: Int = 100
Under the hood, Kotlin automatically creates getters and setters for the properties you defined in the
Aquarium class, so you can access the properties directly, for example,
Step 3: Create a main() function
Create a new file called
main.kt to hold the
main() function.
- In the Project pane on the left, right-click on the example.myapp package.
- Select New > Kotlin File / Class.
- Under the Kind dropdown, keep the selection as File, and name the file
main.kt. IntelliJ IDEA includes the package name, but doesn't include a class definition for a file.
- Define a
buildAquarium()function and inside create an instance of
Aquarium. To create an instance, reference the class as if it were a function,
Aquarium(). This calls the constructor of the class and creates an instance of the
Aquariumclass, similar to using
newin other languages.
- Define a
main()function and call
package example.myapp
fun buildAquarium() {
val myAquarium = Aquarium()
fun main() {
Step 4: Add a method
- In the
Aquariumclass, add a method to print the aquarium's dimension properties.
fun printSize() {
println("Width: $width cm " +
"Length: $length cm " +
"Height: $height cm ")
- In
main.kt, in
buildAquarium(), call the
printSize()method on
fun buildAquarium() {
val myAquarium = Aquarium()
- Run your program by clicking the green triangle next to the
main()function. Observe the result.
⇒ Width: 20 cm Length: 100 cm Height: 40 cm
- In
buildAquarium(), add code to set the height to 60 and print the changed dimension properties.
fun buildAquarium() {
val myAquarium = Aquarium()
myAquarium.height = 60
- Run your program and observe the output.
⇒ Width: 20 cm Length: 100 cm Height: 40 cm Width: 20 cm Length: 100 cm Height: 60 cm
4. Task: Add class constructors
In this task, you create a constructor for the class, and continue working with properties.
Step 1: Create a constructor
In this step, you add a constructor to the
Aquarium class you created in the first task. In the earlier example, every instance of
Aquarium is created with the same dimensions. You can change the dimensions once it is created by setting the properties, but it would be simpler to create it the correct size to begin with.
In some programming languages, the constructor is defined by creating a method within the class that has the same name as the class. In Kotlin, you define the constructor directly in the class declaration itself, specifying the parameters inside parentheses as if the class was a method. As with functions in Kotlin, those parameters can include default values.
- In the
Aquariumclass you created earlier, change the class definition to include three constructor parameters with default values for
height, and assign them to the corresponding properties.
class Aquarium(length: Int = 100, width: Int = 20, height: Int = 40) {
// Dimensions in cm
var length: Int = length
var width: Int = width
var height: Int = height
- The more compact Kotlin way is to define the properties directly with the constructor, using
val, and Kotlin also creates the getters and setters automatically. Then you can remove the property definitions in the body of the class.
class Aquarium(var length: Int = 100, var width: Int = 20, var height: Int = 40) {
- When you create an
Aquariumobject with that constructor, you can specify no arguments and get the default values, or specify just some of them, or specify all of them and create a completely custom-sized
Aquarium. In the
buildAquarium()function, try out different ways of creating an
Aquariumobject using named parameters.
fun buildAquarium() {
val aquarium1 = Aquarium()
// default height and length
val aquarium2 = Aquarium(width = 25)
// default width
val aquarium3 = Aquarium(height = 35, length = 110)
// everything custom
val aquarium4 = Aquarium(width = 25, height = 35, length = 110)
- Run the program and observe the output.
⇒ Width: 20 cm Length: 100 cm Height: 40 cm Width: 25 cm Length: 100 cm Height: 40 cm Width: 20 cm Length: 110 cm Height: 35 cm Width: 25 cm Length: 110 cm Height: 35 cm
Notice that you didn't have to overload the constructor and write a different version for each of these cases (plus a few more for the other combinations). Kotlin creates what is needed from the default values and named parameters.
Step 2: Add init blocks
The example constructors above just declare properties and assign the value of an expression to them. If your constructor needs more initialization code, it can be placed in one or more
init blocks. In this step, you add some
init blocks to
Aquarium class.
- In the
Aquariumclass, add an
initblock to print that the object is initializing, and a second block to print the volume in liters.
class Aquarium (var length: Int = 100, var width: Int = 20, var height: Int = 40) {
init {
println("aquarium initializing")
init {
// 1 liter = 1000 cm^3
println("Volume: ${width * length * height / 1000} l")
- Run the program and observe the output.
aquarium initializing
Volume: 80 l
Width: 20 cm Length: 100 cm Height: 40 cm
aquarium initializing
Volume: 100 l
Width: 25 cm Length: 100 cm Height: 40 cm
aquarium initializing
Volume: 77 l
Width: 20 cm Length: 110 cm Height: 35 cm
aquarium initializing
Volume: 96 l
Width: 25 cm Length: 110 cm Height: 35 cm
Notice that the
init blocks are executed in the order in which they appear in the class definition, and all of them are executed when the constructor is called.
Step 3: Learn about secondary constructors
In this step, you learn about secondary constructors and add one to your class. In addition to a primary constructor, which can have one or more
init blocks, a Kotlin class can also have one or more secondary constructors to allow constructor overloading, that is, constructors with different arguments.
- In the
Aquariumclass, add a secondary constructor that takes a number of fish as its argument, using the
constructorkeyword. Create a
valtank property for the calculated volume of the aquarium in liters based on the number of fish. Assume 2 liters (2,000 cm^3) of water per fish, plus a little extra room so the water doesn't spill.
constructor(numberOfFish: Int) : this() {
// 2,000 cm^3 per fish + extra room so water doesn't spill
val tank = numberOfFish * 2000 * 1.1
- Inside the secondary constructor, keep the length and width (which were set in the primary constructor) the same, and calculate the height needed to make the tank the given volume.
// calculate the height needed
height = (tank / (length * width)).toInt()
- In the
buildAquarium()function, add a call to create an
Aquariumusing your new secondary constructor. Print the size and volume.
fun buildAquarium() {
val aquarium6 = Aquarium(numberOfFish = 29)
println("Volume: ${aquarium6.width * aquarium6.length * aquarium6.height / 1000} l")
- Run your program and observe the output.
⇒ aquarium initializing Volume: 80 l Width: 20 cm Length: 100 cm Height: 31 cm Volume: 62 l
Notice that the volume is printed twice, once by the
init block in the primary constructor before the secondary constructor is executed, and once by the code in
You could have included the
constructor keyword in the primary constructor, too, but it's not necessary in most cases.
Step 4: Add a new property getter
In this step, you add an explicit property getter. Kotlin automatically defines getters and setters when you define properties, but sometimes the value for a property needs to be adjusted or calculated. For example, above, you printed the volume of the
Aquarium. You can make the volume available as a property by defining a variable and a getter for it. Because
volume needs to be calculated, the getter needs to return the calculated value, which you can do with a one-line function.
- In the
Aquariumclass, define an
Intproperty called
volume, and define a
get()method that calculates the volume in the next line.
val volume: Int
get() = width * height * length / 1000 // 1000 cm^3 = 1 l
- Remove the
initblock that prints the volume.
- Remove the code in
buildAquarium()that prints the volume.
- In the
printSize()method, add a line to print the volume.
fun printSize() {
println("Width: $width cm " +
"Length: $length cm " +
"Height: $height cm "
// 1 l = 1000 cm^3
println("Volume: $volume l")
- Run your program and observe the output.
⇒ aquarium initializing Width: 20 cm Length: 100 cm Height: 31 cm Volume: 62 l
The dimensions and volume are the same as before, but the volume is only printed once after the object is fully initialized by both the primary constructor and the secondary constructor.
Step 5: Add a property setter
In this step, you create a new property setter for the volume.
- In the
Aquariumclass, change
volumeto a
varso it can be set more than once.
- Add a setter for the
volumeproperty by adding a
set()method below the getter, which recalculates the height based on the supplied amount of water. By convention, the name of the setter parameter is
value, but you can change it if you prefer.
var volume: Int
get() = width * height * length / 1000
set(value) {
height = (value * 1000) / (width * length)
- In
buildAquarium(), add code to set the volume of the Aquarium to 70 liters. Print the new size.
fun buildAquarium() {
val aquarium6 = Aquarium(numberOfFish = 29)
aquarium6.volume = 70
- Run your program again and observe the changed height and volume.
⇒ aquarium initialized
Width: 20 cm Length: 100 cm Height: 31 cm
Volume: 62 l
Width: 20 cm Length: 100 cm Height: 35 cm
Volume: 70 l
5. Concept: Learn about visibility modifiers
There have been no visibility modifiers, such as
public or
private, in the code so far. That's because by default, everything in Kotlin is public, which means that everything can be accessed everywhere, including classes, methods, properties, and member variables.
In Kotlin, classes, objects, interfaces, constructors, functions, properties, and their setters can have visibility modifiers:
publicmeans visible outside the class. Everything is public by default, including variables and methods of the class.
internalmeans it will only be visible within that module. A module is a set of Kotlin files compiled together, for example, a library or application.
privatemeans it will only be visible in that class (or source file if you are working with functions).
protectedis the same as
private, but it will also be visible to any subclasses.
See Visibility Modifiers in the Kotlin documentation for more information.
Member variables
Properties within a class, or member variables, are
public by default. If you define them with
var, they are mutable, that is, readable and writable. If you define them with
val, they are read-only after initialization.
If you want a property that your code can read or write, but outside code can only read, you can leave the property and its getter as public and declare the setter private, as shown below.
var volume: Int
get() = width * height * length / 1000
private set(value) {
height = (value * 1000) / (width * length)
6. Task: Learn about subclasses and inheritance
In this task, you learn how subclasses and inheritance work in Kotlin. They are similar to what you've seen in other languages, but there are some differences.
In Kotlin, by default, classes cannot be subclassed. Similarly, properties and member variables cannot be overridden by subclasses (though they can be accessed).
You must mark a class as
open to allow it to be subclassed. Similarly, you must mark properties and member variables as
open, in order to override them in the subclass. The
open keyword is required, to prevent accidentally leaking implementation details as part of the class's interface.
Step 1: Make the Aquarium class open
In this step, you make the
Aquarium class
open, so that you can override it in the next step.
- Mark the
Aquariumclass and all its properties with the
open class Aquarium (open var length: Int = 100, open var width: Int = 20, open var height: Int = 40) {
open var volume: Int
get() = width * height * length / 1000
set(value) {
height = (value * 1000) / (width * length)
- Add an open
shapeproperty with the value
open val shape = "rectangle"
- Add an open
waterproperty with a getter that returns 90% of the volume of the
open var water: Double = 0.0
get() = volume * 0.9
- Add code to the
printSize()method to print the shape, and the amount of water as a percentage of the volume.
fun printSize() {
println("Width: $width cm " +
"Length: $length cm " +
"Height: $height cm ")
// 1 l = 1000 cm^3
println("Volume: $volume l Water: $water l (${water/volume*100.0}% full)")
- In
buildAquarium(), change the code to create an
width = 25,
length = 25, and
height = 40.
fun buildAquarium() {
val aquarium6 = Aquarium(length = 25, width = 25, height = 40)
- Run your program and observe the new output.
⇒ aquarium initializing rectangle Width: 25 cm Length: 25 cm Height: 40 cm Volume: 25 l Water: 22.5 l (90.0% full)
Step 2: Create a subclass
- Create a subclass of
TowerTank, which implements a rounded cylinder tank instead of a rectangular tank. You can add
Aquarium, because you can add another class in the same file as the
- In
TowerTank, override the
heightproperty, which is defined in the constructor. To override a property, use the
overridekeyword in the subclass.
- Make the constructor for
TowerTanktake a
diameter. Use the
diameterfor both
widthwhen calling the constructor in the
class TowerTank (override var height: Int, var diameter: Int): Aquarium(height = height, width = diameter, length = diameter) {
- Override the volume property to calculate a cylinder. The formula for a cylinder is pi times the radius squared times the height. You need to import the constant
override var volume: Int
// ellipse area = π * r1 * r2
get() = (width/2 * length/2 * height / 1000 * PI).toInt()
set(value) {
height = ((value * 1000 / PI) / (width/2 * length/2)).toInt()
- In
TowerTank, override the
waterproperty to be 80% of the volume.
override var water = volume * 0.8
- Override the
shapeto be
override val shape = "cylinder"
- Your final
TowerTankclass should look something like the code below.
package example.myapp
import java.lang.Math.PI
... // existing Aquarium class
class TowerTank (override var height: Int, var diameter: Int): Aquarium(height = height, width = diameter, length = diameter) {
override var volume: Int
// ellipse area = π * r1 * r2
get() = (width/2 * length/2 * height / 1000 * PI).toInt()
set(value) {
height = ((value * 1000 / PI) / (width/2 * length/2)).toInt()
override var water = volume * 0.8
override val shape = "cylinder"
- In
buildAquarium(), create a
TowerTankwith a diameter of 25 cm and a height of 45 cm. Print the size.
package example.myapp
fun buildAquarium() {
val myAquarium = Aquarium(width = 25, length = 25, height = 40)
val myTower = TowerTank(diameter = 25, height = 40)
- Run your program and observe the output.
⇒ aquarium initializing rectangle Width: 25 cm Length: 25 cm Height: 40 cm Volume: 25 l Water: 22.5 l (90.0% full) aquarium initializing cylinder Width: 25 cm Length: 25 cm Height: 40 cm Volume: 18 l Water: 14.4 l (80.0% full)
7. Task: Compare abstract classes and interfaces
Sometimes you want to define common behavior or properties to be shared among some related classes. Kotlin offers two ways to do that, interfaces and abstract classes. In this task, you create an abstract
AquariumFish class for properties that are common to all fish. You create an interface called
FishAction to define behavior common to all fish.
- Neither an abstract class nor an interface can be instantiated on its own, which means you cannot create objects of those types directly.
- Abstract classes have constructors.
- Interfaces can't have any constructor logic or store any state.
Step 1. Create an abstract class
- Under example.myapp, create a new file,
- Create a class, also called
AquariumFish, and mark it with
- Add one
color, and mark it with
package example.myapp
abstract class AquariumFish {
abstract val color: String
- Create two subclasses of
- Because
coloris abstract, the subclasses must implement it. Make
Sharkgray and
class Shark: AquariumFish() {
override val color = "gray"
class Plecostomus: AquariumFish() {
override val color = "gold"
- In main.kt, create a
makeFish()function to test your classes. Instantiate a
Sharkand a
Plecostomus, then print the color of each.
- Delete your earlier test code in
main()and add a call to
makeFish(). Your code should look something like the code below.
package example.myapp
fun makeFish() {
val shark = Shark()
val pleco = Plecostomus()
println("Shark: ${shark.color}")
println("Plecostomus: ${pleco.color}")
fun main () {
- Run your program and observe the output.
⇒ Shark: gray Plecostomus: gold
The following diagram represents the
Shark class and
Plecostomus class, which subclass the abstract class,
Step 2. Create an interface
- In AquariumFish.kt, create an interface called
FishActionwith a method
interface FishAction {
fun eat()
- Add
FishActionto each of the subclasses, and implement
eat()by having it print what the fish does.
class Shark: AquariumFish(), FishAction {
override val color = "gray"
override fun eat() {
println("hunt and eat fish")
class Plecostomus: AquariumFish(), FishAction {
override val color = "gold"
override fun eat() {
println("eat algae")
- In the
makeFish()function, have each fish you created eat something by calling
fun makeFish() {
val shark = Shark()
val pleco = Plecostomus()
println("Shark: ${shark.color}")
println("Plecostomus: ${pleco.color}")
- Run your program and observe the output.
⇒ Shark: gray hunt and eat fish Plecostomus: gold eat algae
The following diagram represents the
Shark class and the
Plecostomus class, both of which are composed of and implement the
FishAction interface.
When to use abstract classes versus interfaces
The examples above are simple, but when you have a lot of interrelated classes, abstract classes and interfaces can help you keep your design cleaner, more organized, and easier to maintain.
As noted above, abstract classes can have constructors, and interfaces cannot, but otherwise they are very similar. So, when should you use each?
When you use interfaces to compose a class, the class's functionality is extended by way of the class instances that it contains. Composition tends to make code easier to reuse and reason about than inheritance from an abstract class. Also, you can use multiple interfaces in a class, but you can only subclass from one abstract class.
Composition often leads to better encapsulation, lower coupling (interdependence), cleaner interfaces, and more usable code. For these reasons, using composition with interfaces is the preferred design. On the other hand, inheritance from an abstract class tends to be a natural fit for some problems. So you should prefer composition, but when inheritance makes sense Kotlin lets you do that too!
- Use an interface if you have a lot of methods and one or two default implementations, for example as in
interface AquariumAction {
fun eat()
fun jump()
fun clean()
fun catchFish()
fun swim() {
- Use an abstract class any time you can't complete a class. For example, going back to the
AquariumFishclass, you can make all
FishAction, and provide a default implementation for
eatwhile leaving
colorabstract, because there isn't really a default color for fish.
interface FishAction {
fun eat()
abstract class AquariumFish: FishAction {
abstract val color: String
override fun eat() = println("yum")
8. Task: Use interface delegation
The previous task introduced abstract classes, interfaces, and the idea of composition. Interface delegation is an advanced technique where the methods of an interface are implemented by a helper (or delegate) object, which is then used by a class. This technique can be useful when you use an interface in a series of unrelated classes: you add the needed interface functionality to a separate helper class, and each of the classes uses an instance of the helper class to implement the functionality.
In this task, you use interface delegation to add functionality to a class.
Step 1: Make a new interface
- In AquariumFish.kt, remove the
AquariumFishclass. Instead of inheriting from the
Sharkare going to implement interfaces for both the fish action and their color.
- Create a new interface,
FishColor, that defines the color as a string.
interface FishColor {
val color: String
- Change
Plecostomusto implement two interfaces,
FishAction, and a
FishColor. You need to override the
class Plecostomus: FishAction, FishColor {
override val color = "gold"
override fun eat() {
println("eat algae")
- Change your
Sharkclass to also implement the two interfaces,
FishColor, instead of inheriting from
class Shark: FishAction, FishColor {
override val color = "gray"
override fun eat() {
println("hunt and eat fish")
- Your finished code should look something like this:
package example.myapp
interface FishAction {
fun eat()
interface FishColor {
val color: String
class Plecostomus: FishAction, FishColor {
override val color = "gold"
override fun eat() {
println("eat algae")
class Shark: FishAction, FishColor {
override val color = "gray"
override fun eat() {
println("hunt and eat fish")
Step 2: Make a singleton class
Next, you implement the setup for the delegation part by creating a helper class that implements
FishColor. You create a basic class called
GoldColor that implements
FishColor—all it does is say that its color is gold.
It doesn't make sense to make multiple instances of
GoldColor, because they'd all do exactly the same thing. So Kotlin lets you declare a class where you can only create one instance of it by using the keyword
object instead of
class. Kotlin will create that one instance, and that instance is referenced by the class name. Then all other objects can just use this one instance—there is no way to make other instances of this class. If you're familiar with the singleton pattern, this is how you implement singletons in Kotlin.
- In AquariumFish.kt, create an object for
GoldColor. Override the color.
object GoldColor : FishColor {
override val color = "gold"
Step 3: Add interface delegation for FishColor
Now you're ready to use interface delegation.
- In AquariumFish.kt, remove the override of
- Change the
Plecostomusclass to get its color from
GoldColor. You do this by adding
by GoldColorto the class declaration, creating the delegation. What this says is that instead of implementing
FishColor, use the implementation provided by
GoldColor. So every time
coloris accessed, it is delegated to
class Plecostomus: FishAction, FishColor by GoldColor {
override fun eat() {
println("eat algae")
With the class as is, all Plecos will be golden, but these fish actually come in many colors. You can address this by adding a constructor parameter for the color with
GoldColor as the default color for
- Change the
Plecostomusclass to take a passed in
fishColorwith its constructor, and set its default to
GoldColor. Change the delegation from
by GoldColorto
by fishColor.
class Plecostomus(fishColor: FishColor = GoldColor): FishAction,
FishColor by fishColor {
override fun eat() {
println("eat algae")
Step 4: Add interface delegation for FishAction
In the same way, you can use interface delegation for the
- In AquariumFish.kt make a
PrintingFishActionclass that implements
FishAction, which takes a
food, then prints what the fish eats.
class PrintingFishAction(val food: String) : FishAction {
override fun eat() {
- In
Plecostomusclass, remove the override function
eat(), because you will replace it with a delegation.
- In the declaration of
Plecostomus, delegate
PrintingFishAction, passing
"eat algae".
- With all that delegation, there's no code in the body of the
Plecostomusclass, so remove the
{}, because all the overrides are handled by interface delegation
class Plecostomus (fishColor: FishColor = GoldColor):
FishAction by PrintingFishAction("eat algae"),
FishColor by fishColor
The following diagram represents the
Shark and the
Plecostomus classes, both composed of the
PrintingFishAction and
FishColor interfaces, but delegating the implementation to them.
Interface delegation is powerful, and you should generally consider how to use it whenever you might use an abstract class in another language. It lets you use composition to plug in behaviors, instead of requiring lots of subclasses, each specialized in a different way.
9. Task: Create a data class
A data class is similar to a
struct in some other languages—it exists mainly to hold some data—but a data class object is still an object. Kotlin data class objects have some extra benefits, such as utilities for printing and copying. In this task, you create a simple data class and learn about the support Kotlin provides for data classes.
Step 1: Create a data class
- Add a new package
decorunder the example.myapp package to hold the new code. Right-click on example.myapp in the Project pane and select File > New > Package.
- In the package, create a new class called
package example.myapp.decor
class Decoration {
- To make
Decorationa data class, prefix the class declaration with the keyword
- Add a
Stringproperty called
rocksto give the class some data.
data class Decoration(val rocks: String) {
- In the file, outside the class, add a
makeDecorations()function to create and print an instance of a
fun makeDecorations() {
val decoration1 = Decoration("granite")
- Add a
main()function to call
makeDecorations(), and run your program. Notice the sensible output that is created because this is a data class.
⇒ Decoration(rocks=granite)
- In
makeDecorations(), instantiate two more
Decorationobjects that are both "slate" and print them.
fun makeDecorations() {
val decoration1 = Decoration("granite")
val decoration2 = Decoration("slate")
val decoration3 = Decoration("slate")
- In
makeDecorations(), add a print statement that prints the result of comparing
decoration2, and a second one comparing
decoration2. Use the equals() method that is provided by data classes.
println (decoration1.equals(decoration2))
println (decoration3.equals(decoration2))
- Run your code.
⇒ Decoration(rocks=granite) Decoration(rocks=slate) Decoration(rocks=slate) false true
Step 2. Use destructuring
To get at the properties of a data object and assign them to variables, you could assign them one at a time, like this.
val rock = decoration.rock
val wood = decoration.wood
val diver = decoration.diver
Instead, you can make variables, one for each property, and assign the data object to the group of variables. Kotlin puts the property value in each variable.
val (rock, wood, diver) = decoration
This is called destructuring and is a useful shorthand. The number of variables should match the number of properties, and the variables are assigned in the order in which they are declared in the class. Here is a complete example you can try in Decoration.kt.
// Here is a data class with 3 properties.
data class Decoration2(val rocks: String, val wood: String, val diver: String){
fun makeDecorations() {
val d5 = Decoration2("crystal", "wood", "diver")
// Assign all properties to variables.
val (rock, wood, diver) = d5
⇒ Decoration2(rocks=crystal, wood=wood, diver=diver) crystal wood diver
If you don't need one or more of the properties, you can skip them by using
_ instead of a variable name, as shown in the code below.
val (rock, _, diver) = d5
10. Task: Learn about singletons, enums, and sealed classes
In this task, you learn about some of the special-purpose classes in Kotlin, including the following:
- Singleton classes
- Enums
- Sealed classes
Step 1: Recall singleton classes
Recall the earlier example with the
GoldColor class.
object GoldColor : FishColor {
override val color = "gold"
Because every instance of
GoldColor does the same thing, it is declared as an
object instead of as a
class to make it a singleton. There can be only one instance of it.
Step 2: Create an enum
Kotlin also supports enums, which allow you to enumerate something and refer to it by name, much like in other languages. Declare an enum by prefixing the declaration with the keyword
enum. A basic enum declaration only needs a list of names, but you can also define one or more fields associated with each name.
- In Decoration.kt, try out an example of an enum.
enum class Color(val rgb: Int) {
RED(0xFF0000), GREEN(0x00FF00), BLUE(0x0000FF);
Enums are a bit like singletons—there can be only one, and only one of each value in the enumeration. For example, there can only be one
Color.RED, one
Color.GREEN, and one
Color.BLUE. In this example, the RGB values are assigned to the
rgb property to represent the color components. You can also get the ordinal value of an enum using the
ordinal property, and its name using the
name property.
- Try out another example of an enum.
enum class Direction(val degrees: Int) {
fun main() {
Step 3: Create a sealed class
A sealed class is a class that can be subclassed, but only inside the file in which it's declared. If you try to subclass the class in a different file, you get an error.
Because the classes and subclasses are in the same file, Kotlin will know all the subclasses statically. That is, at compile time, the compiler sees all the classes and subclasses and knows that this is all of them, so the compiler can do extra checks for you.
- In AquariumFish.kt, try out an example of a sealed class, keeping with the aquatic theme.
sealed class Seal
class SeaLion : Seal()
class Walrus : Seal()
fun matchSeal(seal: Seal): String {
return when(seal) {
is Walrus -> "walrus"
is SeaLion -> "sea lion"
Seal class can't be subclassed in another file. If you want to add more
Seal types, you have to add them in the same file. This makes sealed classes a safe way to represent a fixed number of types. For example, sealed classes are great for returning success or error from a network API.
11. Summary
This lesson covered a lot of ground. While much of it should be familiar from other object-oriented programming languages, Kotlin adds some features to keep code concise and readable.
Classes and constructors
- Define a class in Kotlin using
- Kotlin automatically creates setters and getters for properties.
- Define the primary constructor directly in the class definition. For example:
class Aquarium(var length: Int = 100, var width: Int = 20, var height: Int = 40)
- If a primary constructor needs additional code, write it in one or more
- A class can define one or more secondary constructors using
constructor, but Kotlin style is to use a factory function instead.
Visibility modifiers and subclasses
- All classes and functions in Kotlin are
publicby default, but you can use modifiers to change the visibility to
private, or
- To make a subclass, the parent class must be marked
- To override methods and properties in a subclass, the methods and properties must be marked
openin the parent class.
- A sealed class can be subclassed only in the same file where it is defined. Make a sealed class by prefixing the declaration with
Data classes, singletons, and enums
- Make a data class by prefixing the declaration with
- Destructuring is a shorthand for assigning the properties of a
dataobject to separate variables.
- Make a singleton class by using
objectinstead of
- Define an enum using
enum class.
Abstract classes, interfaces, and delegation
- Abstract classes and interfaces are two ways to share common behavior between classes.
- An abstract class defines properties and behavior, but leaves the implementation to subclasses.
- An interface defines behavior, and may provide default implementations for some or all of the behavior.
- When you use interfaces to compose a class, the class's functionality is extended by way of the class instances that it contains.
- Interface delegation uses composition, but also delegates the implementation to the interface classes.
- Composition is a powerful way to add functionality to a class using interface delegation. In general composition is preferred, but inheritance from an abstract class is a better fit for some problems.
12. Learn more
Kotlin documentation
If you want more information on any topic in this course, or if you get stuck, https://kotlinlang.org is your best starting point.
- Kotlin coding conventions
- Kotlin idioms
- Classes and inheritance
- Constructors
- Factory functions
- Properties and fields
- Visibility modifiers
- Abstract classes
- Interfaces
- Delegation
- Data classes
- Equality
- Destructuring
- Object declarations
- Enum classes
- Sealed classes
- Handling Optional Errors Using Kotlin Sealed Classes
Kotlin tutorials
The https://play.kotlinlang.org website includes rich tutorials called Kotlin Koans, a web-based interpreter, and a complete set of reference documentation with examples.
Udacity course
To view the Udacity course on this topic, see Kotlin Bootcamp for Programmers.
IntelliJ IDEA
Documentation for the IntelliJ IDEA can be found on the JetBrains website.
13. Homework
This section lists possible homework assignments for students who are working through this codelab as part of a course led by an instructor. It's up to the instructor to do the following:
- Assign homework if required.
- Communicate to students how to submit homework assignments.
- Grade the homework assignments.
Instructors can use these suggestions as little or as much as they want, and should feel free to assign any other homework they feel is appropriate.
If you're working through this codelab on your own, feel free to use these homework assignments to test your knowledge.
Answer these questions
Question 1
Classes have a special method that serves as a blueprint for creating objects of that class. What is the method called?
▢ A builder
▢ An instantiator
▢ A constructor
▢ A blueprint
Question 2
Which of the following statements about interfaces and abstract classes is NOT correct?
▢ Abstract classes can have constructors.
▢ Interfaces can't have constructors.
▢ Interfaces and abstract classes can be instantiated directly.
▢ Abstract properties must be implemented by subclasses of the abstract class.
Question 3
Which of the following is NOT a Kotlin visibility modifier for properties, methods, etc.?
Question 4
Consider this data class:
data class Fish(val name: String, val species:String, val colors:String) Which of the following is NOT valid code to create and destructure a
Fish object?
val (name1, species1, colors1) = Fish("Pat", "Plecostomus", "gold")
val (name2, _, colors2) = Fish("Bitey", "shark", "gray")
val (name3, species3, _) = Fish("Amy", "angelfish", "blue and black stripes")
val (name4, species4, colors4) = Fish("Harry", "halibut")
Question 5
Let's say you own a zoo with lots of animals that all need to be taken care of. Which of the following would NOT be part of implementing caretaking?
▢ An
interface for different types of foods animals eat.
▢ An
abstract Caretaker class from which you can create different types of caretakers.
▢ An
interface for giving clean water to an animal.
data class for an entry in a feeding schedule.
14. Next codelab
For an overview of the course, including links to other codelabs, see "Kotlin Bootcamp for Programmers: Welcome to the course."


text:
Name Index
Name Index
A cobbler, . . . produced several new grins of his own invention, having been used to cut faces for many years together over his last.
- Joseph Addison,
in the "Spectator", no. 173
To one commending an orator for his skill in amplifying petty matters, Agesilaus said: "I do not think that shoemaker a good workman that makes a great shoe for a little foot."
- Agesilaus, the Great,
Laconic Apophthegemns
Him that makes shoes go barefoot himself.
- Robert Burton,
Anatomy of Melancholy--Democritus to the Reader
(p. 34), (ed. 1887)
Ye tuneful cobblers! still your notes prolong,
Compose at once a slipper and a song;
So shall the fair your handiwork peruse,
Your sonnets sure shall please--perhaps your shoes.
- Lord Byron (George Gordon Noel Byron),
English Bards and Scotch Reviewers
(l. 751)
I can tell where my own shoe pinches me.
- Cervantes (Miguel de Cervantes Saavedra),
Don Quixote (pt. I, ch. IV)
The shoemaker makes a good shoe because he makes nothing else.
- Ralph Waldo Emerson,
Letters and Social Aims--Greatness
If you had taken off the shoe then, at length you would feel in what part it pinched you.
[Lat., Si calceum induisses, tum demum sentires qua parte te urgeret.]
- quoted by Desiderius Gerhard Erasmus,
as founded on the remarks of Paulus Aemilius when he divorced his wife
Let firm, well hammer'd soles protect thy feet
Through freezing snows, and rains, and soaking sleet;
Should the big last extend the shoe too wide,
Each stone will wrench the unwary step aside;
The sudden turn may stretch the swelling vein,
The cracking joint unhinge, or ankle sprain;
And when too short the modish shoes are worn,
You'll judge the seasons by your shooting corn.
- John Gay, Trivia (bk. I, l. 33)
I was not made of common calf,
Nor ever meant for country loon;
If with an axe I seem cut out,
The workman was no cobbling clown;
A good jack boot with double sole he made,
To roam the woods, or through the rivers wade.
- Giuseppe Giusti, The Chronicle of the Boot
Marry because you have drank with the king,
And the king hath so graciously pledged you,
You shall no more be called shoemakers.
But you and yours to the world's end
Shall be called the trade of the gentle craft.
- George A. Greene, Time of Edward IV,
probably a play of his
As he cobbled and hammered from morning till dark,
With the footgear to mend on his knees,
Stitching patches, or pegging on soles as he sang,
Out of tune, ancient catches and glees.
- Oscar H. Harpel, The Haunted Cobbler
One said he wondered that leather was not dearer than any other thing. Being demanded a reason: because, saith he, it is more stood upon than any other thing in the world.
- William Hazlitt (1),
Shakespeare Jest Books--Conceits, Clinches, Flashes and Whimzies
(no. 86)
The title of Ultracrepidarian critics has been given to those persons who find fault with small and insignificant details.
- William Hazlitt (1), Table Talk
(essay XXII)
The wearer knowes, where the shoe wrings.
[The wearer knows best where the shoe pinches.]
- George Herbert, Jacula Prudentum
A careless shoe string, in whose tie
I see a wilde civility.
- Robert Herrick, Delight in Disorder
Cinderella's lefts and rights
To Geraldine's were frights,
And I trow
The damsel, deftly shod,
Has dutifully trod
Until now.
- Frederick Locker-Lampson,
To My Mistress's Boots
Oh, where did hunter win
So delicate a skin
For her feet?
You lucky little kid,
You perished, so you did,
For my sweet.
- Frederick Locker-Lampson,
To My Mistress's Boots
The fairy stitching gleams
On the sides and in the seams,
And it shows
That Pixies were the wags
Who tipped these funny tags
And these toes.
- Frederick Locker-Lampson,
To My Mistress's Boots
Remember, cobbler, to keep to your leather.
[Lat., Memento, in pellicula, cerdo, tenere tuo.]
- Martial (Marcus Valerius Martialis) 3, 16, 6
When we see a man with bad shoes, we say it is no wonder, if he is a shoemaker.
[Fr., Quand nous veoyons un homme mal chausse, nous disons que ce n'est pas merveille, s'il est chausstier.]
- Michel Eyquem de Montaigne, Essays
(bk. I, ch. XXIV)
To each foot its own shoe.
[Fr., A chaque pied son soulier.]
- Michel Eyquem de Montaigne, Essays
(bk. III, ch. XIII)
But from the hoop's bewitching round,
He very shoe has power to wound.
- Edward Moore,
The Spider and the Bee--Fable X (l. 29)
Shoemaker, stick to your last.
[Lat., Ne supra crepidam judicaret.]
- quoted by Pliny the Elder (Caius Plinius Secundus),
Historia Naturalis (XXXV, 10, 36)
. . . And holding out his shoe, asked them whether it was not new and well made. "Yet," added he, "none of you can tell where it pinches me."
- Plutarch, Lives
(vol. II, Life of Aemilius Paulus)
Hans Grovendraad, an honest clown,
By cobbling in his native town,
Had earned a living ever.
His work was strong and clean and fine,
And none who served at Crispin's shrine
Was at his trade more clever.
- Jan Van Ryswyk (Ryswick), Hans Grovendraad,
translated from the French by F.W. Ricord
Displaying page 1 of 2 for this topic: Next >> [1] 2
Support GIGA. Buy something from Amazon.

subset: commoncrawl


text:
This week we will be meeting at Enchanted Realms starting at 6PM.
Last week we had a turnout of around 20 people.
Games played last week:
- Escape the Aliens in Outer Space
- Thunderstone Advance: Towers of Ruin
- 7 Wonders
- Caverna
- Room 25
- other games I missed


text:
|Dimensions Gold - Elegance of the Orient in Jan 2015
|Dimensions Gold - Elegance of the Orient in Feb 2015
|Dimensions Gold - Elegance of the Orient in Jan 2015
|Dimensions Gold - Elegance of the Orient in Feb 2015
Fantastic work!!ReplyDelete
Wonderful progress this month. I need to put a few stitches in mine so I can post it.
Stunning! You've made such a lot of progress in a month. Will be posting mine later. I love YOTA, it's such a good SAL for making progress.ReplyDelete
Beautiful progress!ReplyDelete
She is looking fantastic. 2015 will definitely see the end of her.ReplyDelete
Beautiful work!ReplyDelete
Oh she looks amazing =) I just did my YOTA post an I am happy that I decided to sign up again ;-) In order to have something to show I already managed to stitch more than during the last year! :D Keep up with the good work =)ReplyDelete
Wow! It's amazing what a difference a bit of shading and part of a tree can make. I really enjoy watching her progress. :)ReplyDelete
Great progress, you will have this done in no time.ReplyDelete
Brilliant work! She is gorgeous :)ReplyDelete
Great progess! She is going to be gorgeous! I just posted my update. This is such a great motivator. Thanks for hosting!ReplyDelete
She looks wonderful! Congrats on such awesome progress!!!ReplyDelete
She looks gorgeous. Great work :-)ReplyDelete
Wonderful progress!!!!!ReplyDelete
Gorgeous!! Glad you've got another part to work on and can ignore that flower for the moment.ReplyDelete
Lovely as always. Managed to squeak my YOTA post in! I love this SAL to keep my UFO in rotation again.ReplyDelete
Wow, she looks amazing!ReplyDelete
She is looking wonderful. Reminds me of my years living in Japan.
Great progress!! It's looking wonderful!ReplyDelete
I love this design,great stitching.ReplyDelete
Beautiful! She has something to stand on now and I'm guessing she will be by a cherry blossom tree? :DReplyDelete
Excellent update! I'm a day late getting my post up, but it will be there shortly. :)ReplyDelete
Wow she is really coming along now! Oh you've inspired me, is it too late to join in with YOTA. I have a design in mind that would really help.
xo Alicia
Great progress!!ReplyDelete
So beautiful :-)ReplyDelete
True Elegance, she gorgeous!ReplyDelete
Oh she is just looking spectacular! Absolutely gorgeous! Pity about the frogging ...but really great progress. I have no doubt that she'll be a 2015 finish for you :)ReplyDelete
Well done! She looks awesome so far! YOTA is really pushing you along :) Great work!ReplyDelete
Great progress. She is beautiful.ReplyDelete
This is VERY beautiful!ReplyDelete
Gorgeous work :)ReplyDelete


text:
Global warming increases potential wildfire damage in Mediterranean Europe
A study published in Nature Communications, led by researchers at the University of Barcelona in collaboration with other research institutions, shows that anthropogenic warming will increase the burned areas due to fires in Mediterranean Europe, and that this increase could be reduced by limiting global warming to 1.5 ºC. The higher the warming level, the larger the increase of the burned area is.
"To draw this conclusion, we combined regional climate projections with several empirical models linking the summer burned area to key climatic drivers," notes Marco Turco, UB researcher and first author of the study. "These results support the statement of the Paris Agreement (2015) that reports that limiting the temperature increase to 1.5 ºC would "significantly reduce the risks and impacts of climate change," says the researcher.
Fire seasons in 2017 and 2018 have been unusually high in several regions in Europe, with large wildfires in Greece, Portugal and Sweden, associated with intense droughts and heatwaves. These fires caused economic and ecological losses, and even human casualties.
Marco Turco and his team used a series of regional climate models to project burned area in Mediterranean Europe, taking into account how the climate-vegetation-fire relationship will change under different scenarios due other factors such as droughts. The authors find that, with a 1.5 º C global warming, the burned area could increase by 40 percent compared the projections that do not account for future warming (mainly in the Iberian Peninsula). If warming is at 3 ºC, it would increase by 100 percent.
"These results, combined with the increase in societal exposure to large wildfires in recent years, call for a rethinking of current management strategies. Climate change effects could overcome fire prevention efforts, implying that more fire management efforts must be planned in the near future," says Marco Turco, researcher in the Group of Analysis of Adverse Weather Situations (GAMA) of the University of Barcelona, led by Carme Llasat, lecturer at the Department of Applied Physics of the UB. The development of climate-fire models is crucial to identify key actions in adaptation strategies. In particular, combined with seasonal climate forecasts, these offer an under-exploited opportunity to prevent and reduce the fire impact of climate adverse conditions.
More information: Marco Turco et al, Exacerbated fires in Mediterranean Europe due to anthropogenic warming projected with non-stationary climate-fire models, Nature Communications (2018). DOI: 10.1038/s41467-018-06358-z
Journal information: Nature Communications
Provided by University of Barcelona


text:
In From Victory to Stalemate,[1] British military scholar and former director of the prestigious Soviet Studies Research Centre at Sandhurst C.J. Dick deconstructs two major World War II European campaigns from the point of view of the "operational art"—warfare on the intermediate scale between tactics and strategy. Specifically, he offers a convincing, lucid analysis of the Allies' failure to win a decisive victory that was clearly within their grasp: in the aftermath of the breakout from the Normandy beachhead in summer 1944, Gen. Dwight Eisenhower's Allied Expeditionary Force (AEF) enjoyed advantages in both men and materiel as well as overwhelming air superiority. All that was needed to bring about a decisive victory was a bit of operational audacity. But, Dick argues, the over-cautious Allies misplayed a winning hand and the war dragged on well into 1945.
The first of the book's seven chapters outlines the three levels of warfare with an emphasis on the operational art. Chapters 2–3 summarize what the Allies achieved between D-Day and late 1944, in particular, the imperfectly planned and executed "near breakthrough" out of the Normandy beaches. Chapter 4 addresses the "incomplete encirclement" of the two German field armies that were attempting a hopeless counteroffensive in early August. The Allies' failure to close the "Falaise Pocket" remains a hotly debated subject to the present day. Chapter 5 concerns the AEF's pursuit of German forces across France and north into Belgium up to the stalemate of the book's title. The last two chapters concern "logistic realities" that brought the campaign grinding to a halt, as well as matters of command, operational art, and leadership.
Among the senior Allied generals, Dick praises only one—George S. Patton—for his clear grasp of the operational art and the possibilities afforded the Allies by their superior correlation of many types of forces. The other AEF commanders do not fare as well, though he points out their strengths. He writes, for example, that "Eisenhower proved to be an exemplary staff officer and a man of great charisma and ability, although he lacked boldness and originality. Above all he demonstrated a rare competence in the areas of alliance management and the political-military interface" (35).
The author stresses throughout the value of "deep operations" against a foe unable to mount a proper response. In late summer 1944, the German army in western France was a shadow of its former self, with little or no capability for operational maneuver: hence the collapse of its counteroffensive (ordered by Hitler) as the Allies were breaking out southward from the Normandy perimeter. Several divisions of the Wehrmacht's 7th Army and 15th Panzer Army were left stranded in the Falaise Pocket. But the Allies failed to trap significant German forces, largely because US and British/Commonwealth armies' "progress in tactics and techniques was not matched … by a maturation at the operational level…" (54).
Although thousands of prisoners were taken in the Falaise Pocket, too many experienced soldiers managed to escape. Had the US 1st and 3rd Armies been allowed to move deeper into the enemy's rear before closing the pincers, they would have crushed both German field armies and prevented a stalemate as summer gave way to autumn.
In assessing why this campaign was so difficult for the Allies, in spite of their far greater human and material resources, and air superiority, Dick points to the lack of combat experience on the part of Eisenhower and US army group commander Lt. Gen. Omar Bradley. Moreover, the combat experience of their British colleagues, Field Marshal Bernard Montgomery and all four of the numbered army commanders, in the First World War and the North African campaign of 1941–43 did not translate into operational-level expertise. Again Patton stood out: lessons learned from extensive reading in military history and his eagerness to exploit the superior mobility of his divisions stood him in good stead at the operational level against an enemy more and more immobilized by Allied airpower.
The Wehrmacht, however, remained a resilient and determined foe despite its handicaps: lack of maneuver space, interdiction of its supply lines by Allied airpower, and commanders supinely conforming to the strategic fantasies of Adolf Hitler. At the tactical level, they made the most of their few advantages, deploying many crew-served weapons in forward defensive positions—chiefly, MG-42 light machine guns and 81mm mortars. The Germans were also past masters in the use of antitank guns, now few in number but lethal, particularly the 88mm dual-purpose gun. The same was true of their Panther and Tiger tanks, mounted with more effective main guns than were the Allies' ubiquitous Sherman tanks. And somehow, despite the Allies' capture of thousands of German prisoners during and after the breakout from Normandy, the Wehrmacht deployed seasoned combat troops in spontaneously organized battle groups (Kampfgruppen) at critical locations. Dick notes that
While the author gives due credit to the exceptional intelligence that Ultra provided to the Allied armies, he also cautions that it
Despite Allied armies' successes in late summer and fall 1944, including the liberation of most of France and Belgium from a brutal occupation, and the killing or capture of hundreds of thousands of German troops,
Had the Allies shown greater operational initiative, they could have shattered the Wehrmacht army group in western France and been poised to advance through a virtually undefended German frontier and rapidly conclude the war before 1945. Why, then, did the professional education of American and British senior officers fail to prepare them to effectively wage warfare at the operational level? In his brief discussion of the "American way of war," Dick points back to the Civil War and Gen. U.S. Grant's grueling overland campaign of 1864–65, which "rather than his earlier, brilliant maneuvers against Vicksburg or Sherman's actions in Georgia and the Carolinas, became the focus of American theory and the foundation of doctrine…" (43).
Dick notes that the Army's primary doctrinal manual, FM 100-5 Operations, states that "an objective may sometimes be attained through maneuver alone; ordinarily it must be gained through battle" (45). He also identifies such institutional shortcomings of the US Army as the poor quality of infantry recruits, the wholly inadequate individual replacement system, an excessive reliance on firepower, and the top-down discouragement of initiative in lower-echelon officers and NCOs. The latter was in marked contrast to the Wehrmacht's emphasis on "commander's intent" (Auftragstaktik), encouraging aggressive initiative by subordinates.
The author highlights the influence of US Army Chief of Staff Gen. George C. Marshall on the senior cadre of US commanders in Europe. He had handpicked generals like Eisenhower, Bradley, Courtney Hodges, Jacob L. Devers, William C. Lee, Lesley J. McNair, and even Patton, many of whom studied under him at the Army War College and the Infantry School at Fort Benning during the 1920s. These were men of sound character with adequate leadership qualities, appropriate to a "citizen army" that had expanded forty-fold in the space of only a few years. But they understood little of operational art. His protégé Eisenhower dutifully implemented Marshall's unimaginative "broad front" operational approach in northwest Europe.
The British way of war was conditioned by terrible memories of the Great War's Western Front; Montgomery had to be ever-conscious of Britain's extraordinarily casualty-averse general public and political leaders. He knew already during his time with the 8th Army in North Africa that British and Commonwealth forces could not turn tactical successes into meaningful operational gains. Hence his close personal supervision of subordinates and careful, set-piece operational planning. Consequently, British
Still, Montgomery undeniably had a better sense than his American counterparts of what the Allies might accomplish, and he consistently opposed Marshall's broad front approach. Unfortunately, his overweening arrogance, refusal to admit errors, and didactic manner alienated his Allied colleagues, to the detriment of the coalition partnership. By contrast, the Germans had long studied and refined their own "way of war" which seemed to allow them to own the battlefield, despite their obtuse strategic planning.
Widespread public interest in the Second World War does not seem to be fading. If you read a single book about the war this year, From Victory to Stalemate should be the one.
[1] Its companion volume is From Defeat to Victory: The Eastern Front, Summer 1944 (Lawrence: U Pr of Kansas, 2016).


text:
Facebook's $5 billion S-1 IPO filing includes a detailed assessment of business risks. These include: its lack of mobile monetization and the fact that it doesn't own a mobile platform; government censorship and privacy scrutiny; inability to maintain its growth rate; and competition from Google+, Twitter and Microsoft.
Here's a closer look at these risks, followed by the full text of the risk summary; you can see the entire Risk Factors section starting on page 10 of the S-1 filing to the SEC.
Growth And Engagement
Facebook explains that its biggest challenge may be that:
Our financial performance has been and will continue to be significantly determined by our success in adding, retaining and engaging active users. We anticipate that our active user growth rate will decline over time as the size of our active user base increases, and as we achieve higher market penetration rates.
As we've written about, Facebook has saturated some of its key first-world markets in terms of user count. Some specific threats to its growth and engagement include competing products, the failure to introduce well-received new products, the inability to balance the user experience with the presence of ads, content relevancy, reduced perception of the service's usefulness, and concerns about sharing, safety and security.
Facebook admits:
We do not currently directly generate any meaningful revenue from the use of Facebook mobile products. Accordingly, if users continue to increasingly access Facebook mobile products as a substitute for access through personal computers…our revenue and financial results may be negatively affected.
Simply put, Facebook's mobile site and apps do not show ad sidebars or ads of any kind. Many suspect Facebook will soon start serving Sponsored Story ads in the mobile news feed, but it will have to limit their presence in order to not offend users.
In regards to its lack of a mobile device or OS, Facebook states:
We are dependent on the interoperability of Facebook with popular mobile operating systems that we do not control, such as Android and iOS, and any changes in such systems that degrade our products' functionality or give preferential treatment to competitive products could adversely affect Facebook usage on mobile devices.
Google's Android could give preference to Google+, and iOS already uses Twitter as its identity provider and native sharing option. Google and Apple could effectively box Facebook out of mobile if it doesn't secure stronger relationships with them.
Additionally, Google and Apple control the native in-app payments systems on their mobile operating systems, preventing Facebook from earning its 30 percent tax on in-app purchases. Facebook has launched an HTML5 mobile app platform, but it has failed to gain significant traction. Facebook may need to develop its own mobile OS or wait until HTML5 becomes more powerful, and by then it could be too late to catch up to Apple and Google's mobile app platforms.
Facebook says competitors are attacking from all directions, stating:
We face significant competition in almost every aspect of our business, including from companies such as Google, Microsoft and Twitter, which offer a variety of Internet products, services, content, and online advertising offerings, as well as from mobile companies and smaller Internet companies that offer products and services that may compete with specific Facebook features. We also face competition from traditional and online media businesses for advertising budgets.
This is one area where Facebook's risk may not be as bad as it sounds. As I've detailed, the network effect of its interconnected user base protects it from disruption by similar services. Facebook has also been acquiring disruptive startups and talent. Through recent product launches like its asymmetrical Subscribe feature, Facebook has reduced Twitter's threat.
Still, Google has enormous cash reserves and web presence to throw into the war with Facebook. Google knows identity as a layer that ties together activity on its various products is crucial to the future of its ad-targeting business. Google+ may never have the world's most popular news feed, but its ability to serve highly targeted ads based on personal data and Google product usage could fracture social advertising demand.
Government Censorship and Privacy Regulation
Regarding the possibility of government censorship, Facebook notes:
It is possible that governments of one or more countries may seek to censor content available on Facebook in their country, restrict access to Facebook from their country entirely, or impose other restrictions that may affect the accessibility of Facebook in their country for an extended period of time or indefinitely. For example, access to Facebook has been or is currently restricted in whole or in part in China, Iran, North Korea, and Syria.
Facebook's censorship in China is possibly the biggest barrier to its sustained growth. If it could gain entry there, it would quickly surge past 1 billion users. If more countries shut it out, it will have to squeeze a higher average revenue per user from its existing base. Facebook needs to build a crack team of international policy specialists and lobbyists to make sure there's still a supply of fresh users to sign up.
Beyond censorship, Facebook is also subject to regulation:
Our business is subject to complex and evolving U.S. and foreign laws and regulations regarding privacy, data protection, and other matters. Many of these laws and regulations are subject to change and uncertain interpretation, and could result in claims, changes to our business practices, increased cost of operations, or declines in user growth or engagement, or otherwise harm our business.
Facebook recently settled with the U.S. Federal Trade Commission and survived an audit from the European Union's Office of the Irish Data Protection Commissioner. Through smart compromises and negotiations, it managed to avoid dire consequences for its business, but it might not be so lucky next time. Strong domestic and foreign lobbying presences will be necessary to avoid heavy scrutiny. Most importantly, Facebook needs to carefully consider any change or product launch that influences privacy to avoid stumbles like Beacon, the transition of interests into public Likes, and the opt-out launch of facial recognition.
Additional risk factors include the fact that Zynga makes up 12 percent of Facebook's revenue, the company's dedication to user engagement over short-term financial results, privacy and security leaks, patent lawsuits, and hacker attacks.
Full Text of the "Summary Risk Factors":
- Our business is subject to numerous risks described in the section entitled "Risk Factors" and elsewhere in this prospectus. You should carefully consider these risks before making an investment. Some of these risks include:
- If we fail to retain existing users or add new users, or if our users decrease their level of engagement with Facebook, our revenue, financial results, and business may be significantly harmed;
- We generate a substantial majority of our revenue from advertising. The loss of advertisers, or reduction in spending by advertisers with Facebook, could seriously harm our business;
- Growth in use of Facebook through our mobile products, where we do not currently display ads, as a substitute for use on personal computers may negatively affect our revenue and financial results;
- Facebook user growth and engagement on mobile devices depend upon effective operation with mobile operating systems, networks, and standards that we do not control;
- We may not be successful in our efforts to grow and further monetize the Facebook Platform;
- Our business is highly competitive, and competition presents an ongoing threat to the success of our business;
- Improper access to or disclosure of our users' information could harm our reputation and adversely affect our business;
- Our business is subject to complex and evolving U.S. and foreign laws and regulations regarding privacy, data protection, and other matters. Many of these laws and regulations are subject to change and uncertain interpretation, and could harm our business;
- Our CEO has control over key decision making as a result of his control of a majority of our voting stock;
- The loss of Mark Zuckerberg, Sheryl K. Sandberg, or other key personnel could harm our business;
- We anticipate that we will expend substantial funds in connection with tax withholding and remittance obligations related to the initial settlement of our restricted stock units (RSUs) approximately six months following our initial public offering;
- The market price of our Class A common stock may be volatile or may decline, and you may not be able to resell your shares at or above the initial public offering price; and
- Substantial blocks of our total outstanding shares may be sold into the market as "lock-up" periods end, as further described in "Shares Eligible for Future Sale." If there are substantial sales of shares of our common stock, the price of our Class A common stock could decline.


text:
It is going to be talked about, let's put it up here:
"I have zero idea why they didn't take the Boston offer," said a National League scout this week. "The Red Sox offered Clay Buchholz, Justin Masterson, Daniel Bard, Michael Bowden, Felix Doubront and Nick Hagadone.
A couple of things strike me as strange about it. A 'National League scout' said this? Why would a scout from the other league know about this? Scouts generally aren't in on trades, obviously their opinion would be asked about players offered in a trade but he wouldn't be in on a trade. And he's apparently a scout in the other league. If the offer was so well known that scouts from teams that weren't involved in the trade know about it, we'd have heard this before. That's a pretty big circle for it not to get out until now.
But you never know.
Update...The Daily Dish added this to their post on this story:
UPDATE - Retracted Edition - Red Sox GM Theo Epstein said there was no truth to the report that the Red Sox offered six pitchers for the Blue Jays ace. The proposal did seem a little out of character for the Red Sox front office, who take a lot of pride in their young prospects.
OK, I think someone was just trying to make JP look bad. I would think there are enough things you can get on him for without having to make up stuff.


text:
The Elkfisher's Elk River Patterns aka Elk River Trout Candy
In this section you will learn about and how to tie the patterns I have used here with such success all these years . Most are the result of the ongoing collaboration between Ken Yufer and myself . You can purchase them by visiting our Online Fly Shop . Whether you prefer to tie em or buy em we've got you covered ;) ...
In this section you will learn about and how to tie the patterns I have used here with such success all these years . Most are the result of the ongoing collaboration between Ken Yufer and myself . You can purchase them by visiting our Online Fly Shop . Whether you prefer to tie em or buy em we've got you covered ;) ...
Magic Bunny Emerger
History : This is a "Usual" variation that has been used here for many years or more correctly my version of it . It is a fantastic catcher of fish during the Sulphur hatches !
Hook : 2488 Tiemco or equivilent
Thread : Light Cahill Unithread
Dubbing : Snowshoe foot underfur
Wing and shuck : Tan or yellow Snowshoe foot
Useful sizes : #14 - #22
CDC Black Stone Dry
History : This one was born as a result of my frustration with the spotty effectiveness and un-natural appearance of elk hair stone patterns . It is extremely simple to tie , floats well and presents a very realistic silhouette ! I have fished it for around 20 years .
Hook - 94840 Mustad or equivalent .
Body & tail - Black Ringneck Pheasant Tail Fibers
Thread - 6/0 or 8/0 Black Uni-Thread
Wing- Natural Mallard CDC Feathers
Optional Palmering - Dun dry fly hackle
Useful Sizes - #16 - #24
Elk River Little Black Midge Pupae
History : This was the 1st fly Ken & I came up with together . I originally fished it strictly on top as a verticle emerger and it proved to be an extremely good producer of fish . Ken started xinking it and dropping it into the film and the extremely good producer became a killing pattern . It has caught 10's of thousands of fish on the river .
Hook - 94840 Mustad or equivilent #28 and larger 518 Tiemco for 30's & 32's
Body - Fine & Dry gray dubbing overwrapped with black thread
Thread - Black 8/0 Uni Thread
Tuft - Natural Mallard CDC feathers or puffs
Useful Sizes - #20 - #28
Elkfisher's Cream Caddis Larvae
This Trout Ranch era pattern resulted from another of Ken's areas of interest which was mayfly instars . These are nymphs that have just molted and are white or cream . I tied some cream mayfly nymphs , we fished them , they worked . Next I started to see what I could leave out and still keep the effectiveness . 1st the wing pad , then the legs and finally the tail were removed from the tie and it still worked ! I had an idea about a different way of "dubbing" a fly body that being to lay a strip of dubbing on top of the shank and "cinch" it around the body . Upon trying it I realized that the cream nymph was now a very simple and realistic caddis larvae and a 45 second tie that smacked fish !
Hook -1120 Diaichi or similar
Body - Light Cahill Fine & Dry dubbing with an Adams Gray Fine and Dry head
Thread - Primrose 8/0 Uni-Thread
Useful Sizes - All sizes from tiny to huge
CDC V-Wings
History : These easy to tie , tiny , dries were just something that popped into my head one day while tying a batch of tiny Bwo spinners after finishing a batch of tiny CDC "clump wing" duns .
It occured to me that if you circled the down wings on the spinner and "pulled" them up you had a fly that would profile and imprint like a no-hackle but float like a little cork . I have used them constantly since to immitate a variety of midges and tiny mayfly duns . All you have to do is change the color of the thread and the CDC used . You will wish to set the wing back a bit on a #20 or add a fibbet tail .
Hook: Standard Dry Fly Hook #20 - #28 ,
518 Tiemco for 30's & 32's
Body / Thread - Vary to match the insect
Wing - CDC feather ( not puffs) vary color to match the insect
Useful Sizes - #20 - #32
Tiny Baetis Spinner
History : I can't remember anymore when we started using /refining this one but I guess that means its been awhile .... This is the one that turned into the V-Wing series . It is so simple and so deadly and it is the one people tend to miss late May - June . The rise of fish on the FRC bug show was to these little spinners as the Sulpher spinners hadn't hit yet . They get blanket heavy .
Hook : 94840
Body/Thread - Rust Brown Uni Thread 8/0
Wings- 1 Natutal mallard CDC feather .
Useful Sizes - #22 - #32
White Feather Fly
History :This is one of the patterns that was featured in "Midge Magic" . It was tied to fish the film during the "White Ghost' events mid-summer . It is about as simple as it gets and catches fish :) .....
Hook: Tiemco 518
Thread : White 8/0 Unithread
Body : White duck feather fibers
Useful Sizes: #30 - #32
Coffee Cup Coffin Fly
History : This one came about as a result of the one bad characteristic of the "Haystack" pattern which is an awesome catcher of fish during a Coffin Fly fall . That characteristic being that after a couple fish they sink and are quite hard to restore to buoyancy once they do . An 8 2-xl is a lot of steel to float . I was thinking about the issue (having been plagued by it again the night before ) , drinking a cup of coffee in a styrofoam cup when I realized the answer was literally right in front of me :) .
Hook : 94833 Mustad or Equivalent
Thread : Primrose Uni Thread
Tails : Dun Micro Fibbetts
Abdomen : Styrafoam from a white coffee cup
Thorax : Light Cahill Fine & Dry dubbing
Wings : Gray Coastal Deer hair
Copper Sulphate
History: This One is a fairly recent creation . I started tying and fishing these a couple of Sulpher seasons ago .You can think of it as the emerger version of a Copper John :) .....
It rides deeper then most emerger patterns and is therefore an excellent choice early in the hatch when most of the action is still low in the column . It is a killing pattern during Sulpher season !
Hook : 2488 tiemco or equivilant
Thread : Primrose 8/0 Unithread
Trailing Shuck : Pheasant Wing Feather Fibers
Abdomen : Fine Copper Wire
Thorax : Sulpher Rabbit Dubbing
Wing : CDC Puff Natural Mallard
The Black Bear Ordinary
History : This pattern developed out of a desire for a snowshoe - like wing material in a natural dark brown gray color . Dyed snowshoe simply wasn't cutting it for me .... I noticed that the underfur of a black bear not only met the color requirement but possessed many of the same charteristics (course , crinkly ) as snowshoe . The name "ordinary" is a reverent nod to the late Fran Betters "Usual" patterns , perhaps my favorite series/style of dry fly of all time .
The ordinary is a VERY simple tie (like most of my patterns) . It has been featured on a FRC "Focus on the Fly" segment .
Hook : 94840 Mustad or Equivilent
Thread : Black 8/0 Unithread
Wing/Tail : Black bear underfur
Dubbing : Black Spirit River Fine & Dry
Elk's Black Soft Hackle
History: Not much to tell here , just my attempt at re-inventing the wheel ;) ..... This is the go to fly during the winter stonefly hatches here !
Hook : 94840 Mustad (or whatever is handy )
Thread : Black 8/0 Unithread
Dubbing/Body : Black Fine and Dry
Hackle : Mallard wing feather
The Conspiracy Theory
History : Necessity is the mother of invention . 6 or 7 years ago a regular client called late in the season wanting me to take him out the next day .I told him there wasn't much hatching but that I was certain we could do some business with various bead heads . Got off the phone and sat down to whip some up and found I was out of beads . I told my wife I needed some 'flash' and she handed me a strip of aluminum foil ! What am I supposed to do with that ? She says "oh you'll think of something .... and I did :) .
It is basically a soft hackle Hare's Ear with a "tin foil hat" or strip up the back . It worked , very , very well ......
Hook - Standard Nymph hook
Body - Hare's Ear Dubbing with the tin foil strip on the back
Thread - Tan 6/0 Uni-Thread
Hackle - Hen Back
Useful Sizes - #16 - #8 (at least )


text:
(Old School Comics, 2014)
The Revisionist: 10 Years Gone The DWP Collection
Writer - Chad Lambert
Art – Roberto Corona, Steve Powell, Jeremy Freeman, Jean-Paul DeShong, Nadir Balan, Ryan Scott
Colors – Michael Langdale, Roni Setiwan
Letters – Jaymes Reed, Kel
It's time to start collecting web comics. For a guy who treasured his He-Man action figures, who remembers seeing VHS for the first time and thinking they "look all long and weird" compared to our Beta Max, this is a sign of the passage of time. I'm getting to an age where I feel like I can start to appreciate the times when my parents wonder at the new developments in technology. I can see that I'll be experiencing the same thing with the same amount of wonder sooner than expected.
In 2004 the idea of a web comic was in its infancy. There was no Comixology, and even if there was, the ability to read such comics was not nearly as handy as it has now become. You had to sit at a console and scroll down through pages, probably at your desk, all the while keeping a vigilant eye out for spying co-workers.
Chad Lambert (Dark Horse Presents, Bloodrayne) published The Revisionist from 2004 to 2008 exclusively for Digital Webbing Presents, an early digital anthology. The five stories in this volume, including the first appearance, are for the first time gathered here in print. Print I tell you! But, why, you ask? Should I pick up the collected issues of a comic I never knew existed from 10 years ago? Listen, grasshopper, and learn.
The Revisionist is everything we love about comics. It's got a vigilante. It's got humor. It's got fantastic art. It's so good that I could see today this being published again…"the all new adventures…" or something like that, and selling out. It's a great comic.
Jon seems like just a normal guy, going about his days at the office, flirting with the pretty girls and getting shot down, all the usual. At night he dons a grey jump suit and a pair of killer goggles and takes down criminals. But don't look for any namby-pamby code of ethics here. The Revisionist kills, making the criminal justice system shake in their boots and the criminals flee the country. The bad guys get what they deserve in these shorts, and probably sometimes in the shorts, and it is completely satisfying every time. Lambert has a great sense of the genre, and plays with common comic themes, such as the vigilante and the secret identity, to often explosive and always funny results.
The art in each of these shorts is provided by a variety of artists, each distinct and all great. The great thing about never nailing your story to one artist is that through different interpretations of the character we are able to discern slight changes in the personality and story arcs. In one he's thin and wiry, in the next he bulges with muscle, but each time Lambert's distinct voice comes through and ties each of the incarnations together.
With an introduction by Jamieson Newlander (Alan Frog from The Lost Boys) this is not only a retrospective of the early days of web comics, but a solid and enjoyable comic book in it's own right. Chad Lambert reminds us that the old stuff can still be good and that it still works. The Revisionist: 10 Years Gone will easily make it onto my bookshelf.
For information about getting your grubby hands on a copy go to www.digitalwebbing.com
Brad Gischia is a writer and artist living in the frozen Upper Peninsula of Michigan. He is married and has three kids and a dog, who all put up with his incessant prattling about comic books.


text:
Round Table 47 – Codename: Morningstar Kickstarter
Round Table / Alex Basso, allison rossi, Codename: Morningstar, Crowdfunding, D&D, D&D fifth edition, D&D Next, D&D5e, digital tools, DnD, dungeons and dragons, DungeonScape, John Fischer, Kickstarter, podcast, rpg, Rudy Basso, tabletop, tabletop rpg, TRPG, world building, worldbuilding / 0 comments
Round Table / Barak Blackburn, Crowdfunding, D&D, D&D fifth edition, D&D Next, Dave Gibson, DnD, dungeons and dragons, Kobold Press, Midgard, Pathfinder, podcast, rpg, Rudy Basso, Southlands, tabletop, tabletop rpg, TRPG, world building, worldbuilding / 0 comments
A new episode of my podcast, The Round Table, is up on The Tome Show's website.
I sits down with Dave Gibson, Rudy Basso, and Barak Blackburn to talk about crowdfunding sites like Kickstarter and their massive effect on the modern TRPG industry. Then its an interview with Wolfgang Baur about Kobold Press' latest Kickstarter project, The Southlands, a Pathfinder RPG supplement that with a few more backers will have its bestiary ported over to fifth edition Dungeons and Dragons. This podcast was recorded on September 30 and October 4, 2014.
Capes, Cowls, and Villains Fowl
National Geographic Spinosaurus
If you like what you're reading please follow me on Twitter, check out my other podcast Gamer to Gamer, tell your friends, and/or leave me a comment and let me know you think. Thanks!


text:
Hey guys! I got so much positive feedback from my article, Vegetarian Restaurants in Seattle, which I wrote during my Memorial Day trip this year, that I decided to write another one. As I wrap up my final days in Orange County, soaking up the sunshine and making my last few Disneyland trips, I thought it would be fitting to write about some of my go-to vegan restaurants in Orange County here in Irvine and nearby.
I'm Graduating!
As I'm sitting here at my apartment complex's pool area, I can't help but slightly panic that my graduation is in 6 DAYS. What even happened to the last four years?! I have so much to look forward to after I graduate. First, a much-needed vacation to Spain, where I get to immerse myself in the language, food, and culture for a couple of weeks. I am so looking forward to the language immersion to make me proud of all my hard work towards my Spanish minor.
This post will only talk about restaurants in Orange County and not SoCal as a whole, reason being that it is a literal pain in the behind to make the trip up to LA and not even necessary given the options here. I am going to clarify again here: not all restaurants I cover below are necessarily fully vegan/vegetarian. I have simply labeled them as such because of their dedication to be all-inclusive with their menu to cater to different dietary preferences. All these places have an extensive vegan/vegetarian menu, that made me so proud of how far we have come in expanding our notions of what good food is.
Vegan Nirvana
I went to this alien themed, super hipster, vegan restaurant last week, by request of one of my best friends here. He had been pushing me to go here for a few weeks and I had been pushing it off, simply because it was in Huntington Beach, aka not walking distance from my apartment, as a ton of eateries are here. I am so glad I finally went because I now understand what he was so hyped about. It should have come as no surprise to me because he is not a vegetarian and he himself said that the vegan shrimp could have actually fooled him. I was wary, because I once had vegan shrimp at a restaurant in NorCal many years ago, and it was super disappointing and put me off from the idea of vegan shrimp again.
My friend and I made the 15-minute trip to Huntington Beach for this vegan food. I was surprised at the quirky alien theme; I thought it was funny and different enough to draw attention to it. It had a really "self-love nirvana and inner peace" vibe, with aesthetic ceiling lights and wall art showcasing meditation and yogis. As someone who does not necessarily consider herself a hipster, I was totally able to see how hipster this place was.
We got the Ocean of Love, which was the fried "shrimp" tossed with jalapeños, basil and bell peppers. This was, hands down, the best decision I made all week. The texture was difficult to describe, but according to my shrimp loving friend, "pretty damn authentic looking and tasting," which was a great thing to hear because I loved it so much! I actually even asked the server what it was made of because I am a food blogger, and apparently it is made of something called konjac root. When I am feeling adventurous and back home where I have all the space I need to experiment, I will be perfecting my own recipe to vegan shrimp. Yes, that is how floored I was by it. If any of my readers live in the OC, I highly recommend you all go and try this place's shrimp.
We also ordered Kingdom of God, which was a meatless chicken dish tossed with tofu and assorted vegetables in a KBBQ sauce, with a side of multigrain wild rice. The soy chicken was really good, though apparently not exactly the texture of real chicken, but it was still delicious and I would eat it again. BTW, I didn't realize the picture kind of shook when I took it… my bad lol
And lastly, we got a side of the Selfless Savior sweet potato fries with vegan thousand island dressing. Any In n Out lovers out there? (RAISES HAND) Their vegan version of the classic sauce tasted exactly like the original. Neither my friend nor I could even tell the difference. And that is impressive!
The Veggie Grill
Ok, I am kind of cheating here, because this is not a standalone restaurant and technically it is gone from Irvine. But this vegan all American eatery has all the classics, from burgers to fried chicken to fish tacos, with the best and deceiving vegan cashew cheese you have ever tasted in your life.
My personal favorites from this place were the crispy chicken plate, which (successfully) attempted to mimic a fried chicken breast with gravy and kale on the side. I got it every time until they discontinued it 🙁 and replaced it with a southern fried chicken tenders dish, which became my new favorite there. I also love their buffalo bomber, which is a buffalo chicken style sandwich and just super delicious. But the best thing there probably has to be their burgers, which features the Beyond Burger plant protein brand. If I didn't know it were vegan while eating it, I would have freaked out; that is how convincing it looked.
Ike's Love and Sandwiches
Again, I cheat. I first had a sandwich from this chain near my home in NorCal and was so floored that I actually hunted down a branch here in Orange County. There is one in Newport Beach and since I had it in NorCal last summer, I have been to the one in Newport Beach so many times. I am including it on this list because it has an entire vegetarian/vegan menu! The left of the menu is not vegetarian and the right side is an extensive list of vegetarian/vegan options that encompasses everything from imitation turkey to chicken to bacon.
If you are in California and looking for a place that gives the option of tasting a lot of meaty sandwiches and subs, I really suggest you make a trip to Ike's. They have a bunch of locations spread out around California.
Next Steps
It has been such an awesome four years here. But as The Veggie Grill closed due to the end of their lease, it's a gentle push for me to pursue the next great chapter of my life. Next stop: Spain! (and more restaurant recommendations, obviously ;))
See you soon!
Janani <3 <3


text:
Thursday afternoon (August 07), Municipal Council voted to design and issue a form for residents whose private property has been damaged by the tornado. The new form includes a section for tree damage/landscape not covered by insurance. It will help the Municipality to estimate the total amount of damage done to private property in Lambton Shores. This information will be used in applying to the Province for Disaster Relief. There is no guarantee that it will result in any funding, but it will help make the application more likely to succeed. If successful, it will hopefully result in assistance for the cleanup.
The HWCA Board has agreed to assist the Municipality by encouraging every resident who has experienced uninsured tree damage to complete and submit one of the Municipality's new "Private Property Damage Assessment" forms. To meet the Provincial deadlines, the forms must be completed and submitted by Wednesday August 13. We recognize that the timeline is extremely short and inconvenient, but Municipal Council has established the process within Provincial requirements. The more people who complete the form, the better the chances of a successful Municipal application.
Forms may be obtained the following ways:
· Online at lambtonshores.ca under the heading "News" – Read and print it.
· HWCA Board members will be at the Clubhouse to distribute blank forms and answer questions at the following times:
o Sunday August 10 from noon to 3:00 p.m.
o Monday August 11 from 6:00 to 8:00 p.m.
o Tuesday August 12 from 2:00 to 4:00 p.m. and 6:00 to 8:00 p.m.
When you have completed your form, please return it by Wednesday August 13 to the Municipality by following the instructions at the bottom of the form. Specifically,
· Drop it off at the Grand Bend Municipal Office
o Municipality of Lambton Shores, P.O. Box 340, 4 Ontario St. N., Grand Bend, ON N0M 1T0
· E-mail a scanned, printed, completed form to: email@example.com
· Fax – 519-238-8577
Mail it to the above address (it must arrive by Wednesday August 13).
Paul Mennill
Vice President HWCA


text:
As regular readers know, I did a popular video with Education Week on "7 Tips For Remote Teaching" two weeks ago (I've also embedded it at the bottom of this blog post).
Wendi Pillars, who is a contributor to this column, created an amazing illustration of those seven key points. Calling it an infographic is certainly an understatement. It is being published here with her permission.
Wendi Pillars, NBCT, has incorporated visual notes into her teaching for more than two decades and believes deeply in fostering creative thinking in her students. @wendi322:
Here's the actual video again:
The opinions expressed in Classroom Q&A With Larry Ferlazzo are strictly those of the author(s) and do not reflect the opinions or endorsement of Editorial Projects in Education, or any of its publications.


text:
From Vishnu Anand in Bangalore
Pengala, an Indian learning technology company has launched a new way for students -- urban and rural -- to learn intuitively using technology. The self-study-oriented tool arms students with course videos, real-time note taking capabilities, test assessment and grading tools, besides the option of community learning via a study group social network.
Though Pengala's tool is designed for self-learning and professional streams of study, the company's tie up with respected educational institutions -- Aakash Institute, Brilliant Tutorials, FutureVista and Edurite -- ensures that students use the tool across disciplines, as a supplement to their regular classroom learning or even as the only mode of learning.
The new entity has been jointly started by two technocrats with a strong Microsoft connection:
Says Pradeep Singh, founder and co-chairman, Pengala, "We have designed the tool exclusively for India,keeping in mind the lack of broadband connectivity and a shared computer scenario in most schools -- especially in tier II and III cities. We are also encouraging our partners to spread our tool to their student community and increase awareness and adoption." Pradeep has earlier founded Aditi Technologies, a prime solution provider for Microsoft platorms and Talisma, a Customer Relations Mamagement (CRM) software leader both with a Bangalore presence.
The other founder-Co-Chairman of Pengala is Will Poole, formerly Corporate VP of Microsoft's Unlimited Potential Group. He is also a co-chairman of Virtual Desktop leader, N Computing.
Navin Thangiah, CEO, Pengalas who was last mobile monety startup, mChek, says: "When education companies offer self-study, students stress the need for classroom guidance. When they offer classroom courses, students stress the need for self-study. With Pengala, our partners offer a third choice, which combines the best of both worlds in one solution. While courses for key exams like IITJEE, AIEEE, Medical, and boards are available today, other partners will soon be launching courses in vocational training and higher education".
IndiaTechOnline participated in a product demo where a 'student' attended a class on Calculus via a full motion video, pulled up a 'notes' screen halfway through the course, answered a tutorial, along with intuitive results on strength areas, problem areas and improvement areas. The tool also allows this feedback to reach the student's teachers and parents for possible corrective strategies. The demo also included access to the learning community with shared problem solving, and social interaction.
Do see for a few days, our explanatory video about the Pengala system in our video slot on the IndiaTechOnline home page Website: www.pengala.com
April 7 2011


text:
The 7 Wardrobe Staples Italian It-Girls Rely On
Getty Images
As much as we love French girls for their style, it seems Italian girls are starting to threaten their undefeated title. More and more, we've been spotting Italian girls rolling out show stopping looks—and suddenly, we're focusing more on what's happening in Milan than in Paris.
This isn't to say that we're over the whole French-girl aesthetic; that will never happen, if we're being realistic. We've just found another group of girls who are giving the Parisiennes a run for their money. To start getting some inspiration on how to channel our inner-Italian girl, we've been following some of the country's biggest It girls on Instagram to spy on their style.
Needless to say, it's outfit inspo galore. Below, we've called out some of the common pieces that Italy's most fashionable are wearing on repeat. By adding a few of these styles into your daily rotation, you'll be dressing like the best of them in no time. Keep scrolling to see the wardrobe staples every Italian It girl relies on and shop our picks, if you're feeling so inclined.
Italian girls love using fashion to make a statement, and what easier way than in-your-face metallics. Whether in the form of coat, dress, or jumpsuit, stand out in something sparkly.
A Colourful Suit
What looks cooler than a coordinated suit? A colourful one. Opt for a bright blazer and trousers (or bodysuit) for an outfit that will turn heads.
Fur Coat
Take a style cue from Carrie Bradshaw and find yourself a signature fur coat. Italian It-girls are all about fur coats, so we don't expect this trend to die anytime soon.
Despite the resurgent popularity of the midi dress, Italian style stars still know how to rock a minidress. Choose one in a unique print and silhouette to keep this look fashion-forward rather than teenager-esque.
Over-the-knee Boots
Ankle boots are having a moment, but their tall counterparts are still a favourite among Italian girls. Pair it with said mini dress for an easy going out look.
White Boots
This trend is undeniably universal, and Italian girls are big fans as well. A white boot with a bit of a heel is the easiest shoe to instantly update any outfit, 2018 style.
Leather Jacket
A leather jacket is an undeniable staple, but Italian girls bring a fresh perspective to the classic. Instead of going for your usual moto, try a leather jacket in a different silhouette for a more unique look.
- Explore More:


text:
Took a drive over to Hartley Wintney for the New Years Day meet at the Phoenix Inn, pretty well attended considering the weather wasn't great. A good smattering of American cars, along with coffee and some decent grub was on offer!
Some nice vehicles included:
Hudson Super Six
Chrysler New Yorker
Ford Ranchero
Model A Coupe & Roadster
Plus a really cool Mercedes Hot Rod, not my normal thing, but very nice..


text:
https://www.weyermann.de/wp-content/uploads/2020/09/Matthias-Schlegel_HP.jpg 567 425 gn2 https://www.weyermann.de/wp-content/uploads/2019/01/weyermann-logo-brdr.png gn22020-09-22 16:45:132020-09-30 14:48:20We welcome Matthias Schlegel to our team
We welcome Matthias Schlegel to our team
As of October 1st 2020, we warmly welcome Matthias Schlegel to our team.
Mr. Schlegel will take over the newly created position as facility manager.
Organisationally he will be the link between maintenance and marketing.
Born in Franconia, he worked for British Tobacco in Bayreuth for 21 years as machine and plant operator until the company closed.
We wish Matthias Schlegel a smooth settling-in period and many happy years in the red and yellow world!