text:
iOS 8 Metal Tutorial with Swift Part 2: Moving to 3D
Update 04/27/2015: Updated for Xcode 6.3 / Swift 1.2
Welcome back to our iOS 8 Metal tutorial series!
In the first part of the series, you learned how to get started with Metal and render a simple 2D triangle.
In this second part of the series, you'll learn how to set up a series of matrix transformations to move to full 3D. In the process, you will learn:
- How to use model, view, and projection transformations
- How to use matrices to transform geometry
- How to pass uniform data to your shaders
- How to use backface culling to optimize your drawing
Get ready to rock – it's time for more Metal!
Getting Started
First, download the starter project – this is the same state where you left it off in the previous tutorial.
Build and run on your Metal-compatible device, and make sure you see the same triangle as before.
Next, download this Matrix4 Helper Class that I have created for you, and add it to your project. When prompted if you'd like to configure an Objective-C bridging header, click Yes.
You'll learn more about matrices later in this tutorial, so for now just enjoy this short overview of
There's a built-in library on iOS called GLKit, that contains a library of handy 3D math routines called
GLKMath. This includes a class to work with 3D matrices called
You're going to need to work with matrices a lot in this tutorial, so it would be good to be able to use this class. However,
GLKMatrix4 is a C struct, so you can't use it directly from Swift.
That's why I created this class for you. It is a simple Objective-C class wrapper around the C struct, so you can use
GLKMatrix4 from Swift. Here's an illustration of the setup:
Again, you'll learn more about matrices later; I just wanted to have an overview of what this class is for now.
Refactor to a Node Class
For now, the starter project has everything set up in ViewController.swift. Although this was the easiest way to get started, it doesn't scale well as your app gets larger.
In this section, you'll refactor your project by following five steps:
- Create a Vertex Structure
- Create a Node Class
- Create a Triangle Subclass
- Refactor your View Controller
- Refactor your Shaders
Let's get started!
1) Create a Vertex Structure
Create a new class with the iOS\Source\Swift File template and name it Vertex.swift.
Open Vertex.swift and replace the contents with the following:
struct Vertex{ var x,y,z: Float // position data var r,g,b,a: Float // color data func floatBuffer() -> [Float] { return [x,y,z,r,g,b,a] } };
This is a structure that will store the position and color of each vertex.
floatBuffer() is a handy method that returns the vertex data as an array of Floats in strict order.
2) Create a Node Class
Create a new class with the iOS\Source\Swift File template and name it Node.swift.
Open Node.swift and replace the contents with the following:
import Foundation import Metal import QuartzCore class Node { let name: String var vertexCount: Int var vertexBuffer: MTLBuffer var device: MTLDevice init(name: String, vertices: Array<Vertex>, device: MTLDevice){ // 1 var vertexData = Array<Float>() for vertex in vertices{ vertexData += vertex.floatBuffer() } // 2 let dataSize = vertexData.count * sizeofValue(vertexData[0]) vertexBuffer = device.newBufferWithBytes(vertexData, length: dataSize, options: nil) // 3 self.name = name self.device = device vertexCount = vertices.count } }
Let's go over this section by section:
Node is an object to draw, you need to provide it with the vertices it contains, a name for convenience, and a device to create buffers and render later on.
- You go through each vertex and form a single buffer with floats, which will look like this:
- Then, you ask the device to create a vertex buffer with the float buffer you created above.
- You set the instance variables.
Nothing fancy, eh?
Next, you need to move some of the render code that is currently in
ViewController to
Node. Specifically, you want to move the code that is responsible for rendering a particular buffer of vertices.
To do this, add this new method to Node.swift:
func render(commandQueue: MTLCommandQueue, pipelineState: MTLRenderPipelineState, drawable: CAMetalDrawable, clearColor: MTLClearColor?){ let renderPassDescriptor = MTLRenderPassDescriptor() renderPassDescriptor.colorAttachments[0].texture = drawable.texture renderPassDescriptor.colorAttachments[0].loadAction = .Clear renderPassDescriptor.colorAttachments[0].clearColor = MTLClearColor(red: 0.0, green: 104.0/255.0, blue: 5.0/255.0, alpha: 1.0) renderPassDescriptor.colorAttachments[0].storeAction = .Store let commandBuffer = commandQueue.commandBuffer() let renderEncoderOpt = commandBuffer.renderCommandEncoderWithDescriptor(renderPassDescriptor) if let renderEncoder = renderEncoderOpt { renderEncoder.setRenderPipelineState(pipelineState) renderEncoder.setVertexBuffer(vertexBuffer, offset: 0, atIndex: 0) renderEncoder.drawPrimitives(.Triangle, vertexStart: 0, vertexCount: vertexCount, instanceCount: vertexCount/3) renderEncoder.endEncoding() } commandBuffer.presentDrawable(drawable) commandBuffer.commit() }
This code should be a review from the previous tutorial. You can see that it has been copied from
render() method, but updated to use the vertex data for this node.
That's it for the node class for now – time to create a subclass for the triangle!
3) Create a Triangle Subclass
Create a new class with the iOS\Source\Swift File template and name it Triangle.swift.
Open Triangle.swift and replace the contents with the following:
import Foundation import Metal class Triangle: Node { init(device: MTLDevice){ let V0 = Vertex(x: 0.0, y: 1.0, z: 0.0, r: 1.0, g: 0.0, b: 0.0, a: 1.0) let V1 = Vertex(x: -1.0, y: -1.0, z: 0.0, r: 0.0, g: 1.0, b: 0.0, a: 1.0) let V2 = Vertex(x: 1.0, y: -1.0, z: 0.0, r: 0.0, g: 0.0, b: 1.0, a: 1.0) var verticesArray = [V0,V1,V2] super.init(name: "Triangle", vertices: verticesArray, device: device) } }
Here you subclass the
Node class you just wrote for the triangle. In the initializer, you define the three vertices that make up the triangle, and pass that data to the superclass's initializer.
It's looking nice and clean already!
4) Refactor your View Controller
Now that you have all of the pieces in place, let's refactor your view controller to use your new
Triangle class.
Open ViewController.swift and delete following line:
var vertexBuffer: MTLBuffer! = nil
The node object will hold
vertexBuffer so you don't need it here.
Next, replace:
let vertexData:[Float] = [ 0.0, 1.0, 0.0, -1.0, -1.0, 0.0, 1.0, -1.0, 0.0]
var objectToDraw: Triangle!
And replace:
// 1 let dataSize = vertexData.count * sizeofValue(vertexData[0]) // 2 vertexBuffer = device.newBufferWithBytes(vertexData, length: dataSize, options: nil)
objectToDraw = Triangle(device: device)
Now, when
objectToDraw initializes and is ready to use, the only thing missing is calling the draw method from
objectToDraw in the ViewController render method.
Finally, replace the
render() method with the following:
func render() { var drawable = metalLayer.nextDrawable() objectToDraw.render(commandQueue, pipelineState: pipelineState, drawable: drawable, clearColor: nil) }
Build and run, and… uh-oh, where'd the triangle go?
The triangle has disappeared!
Do you have any ideas why that might be? Try to think of an answer, and then check to see if you are correct. Hint: take a look at the data inside the
Vertex structure!
5) Refactor your Shaders
Open Shaders.metal and take a good look at the vertex shader. You'll notice it returns a
float4 value for the position of each vertex and takes an array of
packed_float3, which is data from a vertex buffer.
Now you'll create two structures to hold
Vertex data that passes to vertex shader, and one for vertex shader to return. It'll be more clear when you will see the code.
Add this to
Shaders.metal below
using namespace metal; :
struct VertexIn{ packed_float3 position; packed_float4 color; }; struct VertexOut{ float4 position [[position]]; //1 float4 color; };
You want vertex shader function to return
VertexOut struct instead of just
Note that vertex shaders must always return a position. In
VertexOut, you specify the position component with special qualifier
Now, modify the vertex shader code, so it looks like this:
vertex VertexOut basic_vertex( // 1 const device VertexIn* vertex_array [[ buffer(0) ]], // 2 unsigned int vid [[ vertex_id ]]) { VertexIn VertexIn = vertex_array[vid]; // 3 VertexOut VertexOut; VertexOut.position = float4(VertexIn.position,1); VertexOut.color = VertexIn.color; // 4 return VertexOut; }
- Mark the vertex shader as returning a
VertexOutinstead of a
- Mark the
vertex_arrayas containing
VertexInvertices instead of
packed_float3. Note that the
VertexInstructure maps to the
Vertexstructure you created earlier.
- Get the current vertex from the array.
- Create a
VertexOutand pass data from
VertexOut, which returns at the end.
You might ask, "Why not to use
VertexIn as a return value, since the data is the same?"
Good question! At the moment that would work, but you'll need to have different structures later after applying transformations to position value.
Build and run. Oh, look who's back!
But you haven't used the vertex color component, which now passes to vertex shader.
You should fix that by modifying the fragment shader to look like this:
fragment half4 basic_fragment(VertexOut interpolated [[stage_in]]) { //1 return half4(interpolated.color[0], interpolated.color[1], interpolated.color[2], interpolated.color[3]); //2 }
- The vertex shader will pass you the
VertexOutstructure – however its values will be interpolated based on the position of the fragment you're rendering. More on this later.
- Now you simply return color for the current fragment instead of the hardcoded white color.
Build and run. You should be blinded by colors:
Now, you may be wondering how you got rainbow colors in the middle of the triangle, considering you only specified three color values in the triangle.
As hinted earlier, the color values are interpolated based on the fragment you're drawing. For example, the fragment on the bottom of the triangle 50% between the green and blue vertices would be blended as 50% green, 50% blue. This is done for you automatically; for any kind of value that you pass from the vertex shader to the fragment shader.
Okay, very nicely done so far! Now that your project is nicely refactored, it will be much easier to change from a triangle to a cube.
Creating a Cube
Your next task is to create a cube instead of a triangle. For that, as with all object models, you'll create subclass of
Node class.
Create a new class with the iOS\Source\Swift File template and name it Cube.swift.
Open Cube.swift and replace the contents with the following:
import UIKit import Metal class Cube: Node { init(device: MTLDevice){ let A = Vertex(x: -1.0, y: 1.0, z: 1.0, r: 1.0, g: 0.0, b: 0.0, a: 1.0) let B = Vertex(x: -1.0, y: -1.0, z: 1.0, r: 0.0, g: 1.0, b: 0.0, a: 1.0) let C = Vertex(x: 1.0, y: -1.0, z: 1.0, r: 0.0, g: 0.0, b: 1.0, a: 1.0) let D = Vertex(x: 1.0, y: 1.0, z: 1.0, r: 0.1, g: 0.6, b: 0.4, a: 1.0) let Q = Vertex(x: -1.0, y: 1.0, z: -1.0, r: 1.0, g: 0.0, b: 0.0, a: 1.0) let R = Vertex(x: 1.0, y: 1.0, z: -1.0, r: 0.0, g: 1.0, b: 0.0, a: 1.0) let S = Vertex(x: -1.0, y: -1.0, z: -1.0, r: 0.0, g: 0.0, b: 1.0, a: 1.0) let T = Vertex(x: 1.0, y: -1.0, z: -1.0, r: 0.1, g: 0.6, b: 0.4, a: 1.0) var verticesArray:Array<Vertex> = [ A,B,C ,A,C,D, //Front R,T,S ,Q,R,S, //Back Q,S,B ,Q,B,A, //Left D,C,T ,D,T,R, //Right Q,A,D ,Q,D,R, //Top B,S,T ,B,T,C //Bot ] super.init(name: "Cube", vertices: verticesArray, device: device) } }
That looks rather familiar, don't you think? It's almost a carbon copy of the Triangle implementation, it just has eight vertices instead of three.
Also, each side comprises two triangles. For a better understanding, it might help to sketch it out on paper.
Next open ViewController.swift and change the
objectToDraw property to a cube:
var objectToDraw: Cube!
Also, inside
init(), change the line that initializes
objectToDraw to make it a cube:
objectToDraw = Cube(device: device)
Build and run. It might not look like it, but believe it or not, you've made a cube!
What you see now is just the cube's front face — an up-close selfie, if you will. Also it stretches over the display aspect ratio.
Don't believe me? Doubt your cube-making skills? Okay, for your own sanity you'll modify
Cube so it's smaller.
Rework the lines with vertices data so they look like this:
let A = Vertex(x: -0.3, y: 0.3, z: 0.3, r: 1.0, g: 0.0, b: 0.0, a: 1.0) let B = Vertex(x: -0.3, y: -0.3, z: 0.3, r: 0.0, g: 1.0, b: 0.0, a: 1.0) let C = Vertex(x: 0.3, y: -0.3, z: 0.3, r: 0.0, g: 0.0, b: 1.0, a: 1.0) let D = Vertex(x: 0.3, y: 0.3, z: 0.3, r: 0.1, g: 0.6, b: 0.4, a: 1.0) let Q = Vertex(x: -0.3, y: 0.3, z: -0.3, r: 1.0, g: 0.0, b: 0.0, a: 1.0) let R = Vertex(x: 0.3, y: 0.3, z: -0.3, r: 0.0, g: 1.0, b: 0.0, a: 1.0) let S = Vertex(x: -0.3, y: -0.3, z: -0.3, r: 0.0, g: 0.0, b: 1.0, a: 1.0) let T = Vertex(x: 0.3, y: -0.3, z: -0.3, r: 0.1, g: 0.6, b: 0.4, a: 1.0)
Build and run.
Cube is smaller, but something just isn't right here. Wait, is it that you have to painstakingly modify vertices every time you need to modify a node? There's got to be a better way!
And indeed there is – that is where matrices come in.
Introduction to Matrices
First things first, what is a matrix?
A matrix is a rectangular array of numbers (Sorry, Neo!). In 3D gaming, you'll often see a 4×4 sized matrix — with four columns and four rows.
Also note that you're using the GLKit column-based GLKMatrix4, so elements are placed like this:
With matrices, you can transform your object in three ways:
- Translation: Shift the object along x, y and z axis
- Rotation: Rotate the object around any axis
- Scale: Change object size along any axis. (Please note that in this tutorial, you'll always scale proportionally along all axes.)
How does that work? First, you create an instance of
Matrix4, like this (you don't need to add this or the rest of the code in this section, this is just to illustrate):
var modelTransformationMatrix = Matrix4()
Then you use methods to apply transformations, like this:
modelTransformationMatrix.translate(positionX, y: positionY, z: positionZ) modelTransformationMatrix.rotateAroundX(rotationX, y: rotationY, z: rotationZ) modelTransformationMatrix.scale(scale, y: scale, z: scale)
There's some math behind this that you can learn about in a Linear Algebra course. It's great if you understand it, but it's not necessary to do so for this tutorial.
Before you continue, open HelloMetal-BridgingHeader.h and import your
Matrix4 class – you'll need that in the following sections.
#import "Matrix4.h"
Model Transformation
The first transformation you'll need is the model transformation. This transformation converts your node's coordinates from local coordinates to world coordinates. In other words, it allows you to move your model around your world.
Let's see how this works. Open Node.swift and add the following new properties:
var positionX:Float = 0.0 var positionY:Float = 0.0 var positionZ:Float = 0.0 var rotationX:Float = 0.0 var rotationY:Float = 0.0 var rotationZ:Float = 0.0 var scale:Float = 1.0
These are convenience properties that you will set in order to position, rotate, or scale the node within the world. You will construct a model matrix from these which you will use to apply the model transformation.
To do this, add the following method at the end of
func modelMatrix() -> Matrix4 { var matrix = Matrix4() matrix.translate(positionX, y: positionY, z: positionZ) matrix.rotateAroundX(rotationX, y: rotationY, z: rotationZ) matrix.scale(scale, y: scale, z: scale) return matrix }
In this method, you generate a matrix from those parameters.
Now you need is to pass this matrix to the shader so it can apply the model transformation. To do this, you need to understand the concept of uniform data.
Uniform Data
So far, you have passed data that is different for each vertex to shaders, by using vertex arrays. But the model matrix will be the same across an entire model, so it would be a waste of space to copy it for each vertex.
When you have some data that is the same across an entire model, you want to pass the data to the shader a different way: as uniform data.
The first step to do this is to put your data into a buffer object, which represents memory accessible to both the CPU and GPU.
Node.swift, add this right below
var vertexBuffer: MTLBuffer:
var uniformBuffer: MTLBuffer?
Add this right after
renderEncoder.setVertexBuffer(self.vertexBuffer, offset: 0, atIndex: 0):
// 1 var nodeModelMatrix = self.modelMatrix() // 2 uniformBuffer = device.newBufferWithLength(sizeof(Float) * Matrix4.numberOfElements(), options: nil) // 3 var bufferPointer = uniformBuffer?.contents() // 4 memcpy(bufferPointer!, nodeModelMatrix.raw(), sizeof(Float)*Matrix4.numberOfElements()) // 5 renderEncoder.setVertexBuffer(self.uniformBuffer, offset: 0, atIndex: 1)
Here's the section-by-section breakdown:
- Call the method you wrote earlier to convert the convenience properties (like position and rotation) into a model matrix.
- Ask the device to create a buffer with shared CPU/GPU memory.
- Get a raw pointer from buffer (similar to
void *in Objective-C).
- Copy your matrix data into the buffer.
- Pass
uniformBuffer(with data copied) to the vertex shader. This is similar to how you sent the buffer of vertex-specific data, except you use index 1 instead of 0.
There is one problem with this code; it's in a render method that should be called, hopefully, 60 times per second. In this case, you're creating a new buffer 60 times per second.
Continuously allocating memory each frame is expensive and not recommended in production apps; we'll show a better way to do this in future tutorials (and you can also see it in the iOS Metal Game template). However, to keep things simple in this tutorial, we will do it this way for now.
You passed matrix to vertex shader, but you're not using it yet. To fix this, open Shaders.metal and add this structure right below
struct Uniforms{ float4x4 modelMatrix; };
Right now, it only holds one component, but later it will hold one more matrix.
Second, modify your vertex shader so it looks like this:
vertex VertexOut basic_vertex( const device VertexIn* vertex_array [[ buffer(0) ]], const device Uniforms& uniforms [[ buffer(1) ]], //1 unsigned int vid [[ vertex_id ]]) { float4x4 mv_Matrix = uniforms.modelMatrix; //2 VertexIn VertexIn = vertex_array[vid]; VertexOut VertexOut; VertexOut.position = mv_Matrix * float4(VertexIn.position,1); //3 VertexOut.color = VertexIn.color; return VertexOut; }
Here's what's going on with this chunk of code:
- You add a second parameter for the uniform buffer, marking that it is incoming in slot 1 (to match up with the code you wrote earlier).
- You get a handle to the model matrix in the uniforms structure.
- To apply the model transformation to a vertex, you simply multiply the vertex position by the model matrix.
You're done with that part, now back to working with the cube to test it.
Cube.swift change vertices back to this:
let A = Vertex(x: -1.0, y: 1.0, z: 1.0, r: 1.0, g: 0.0, b: 0.0, a: 1.0) let B = Vertex(x: -1.0, y: -1.0, z: 1.0, r: 0.0, g: 1.0, b: 0.0, a: 1.0) let C = Vertex(x: 1.0, y: -1.0, z: 1.0, r: 0.0, g: 0.0, b: 1.0, a: 1.0) let D = Vertex(x: 1.0, y: 1.0, z: 1.0, r: 0.1, g: 0.6, b: 0.4, a: 1.0) let Q = Vertex(x: -1.0, y: 1.0, z: -1.0, r: 1.0, g: 0.0, b: 0.0, a: 1.0) let R = Vertex(x: 1.0, y: 1.0, z: -1.0, r: 0.0, g: 1.0, b: 0.0, a: 1.0) let S = Vertex(x: -1.0, y: -1.0, z: -1.0, r: 0.0, g: 0.0, b: 1.0, a: 1.0) let T = Vertex(x: 1.0, y: -1.0, z: -1.0, r: 0.1, g: 0.6, b: 0.4, a: 1.0)
ViewController.swift add following after
objectToDraw = Cube(device: device)
objectToDraw.positionX = -0.25 objectToDraw.rotationZ = Matrix4.degreesToRad(45); objectToDraw.scale = 0.5
Build and run.
As expected, it is scaled down, shifted left and rotated 45 degrees around the Z axis.
This proves one thing: mathematical matrices are much cooler than any other matrices :]
Now it's time for some science — you'll shift the cube along axis X , Y and Z at once. For that, add following code right below
objectToDraw.positionX = -0.25 :
objectToDraw.positionY = 0.25 objectToDraw.positionZ = -0.25
Build and run.
Cube shifts along X and Y, but what's wrong with Z? You set
.positionZ to be
-0.25, so the cube should have moved away from you, but it didn't.
You might think that there is some problem with matrix you passed, but that's not the problem at all. In fact, the cube did move back, but you can't see it.
To understand the problem, you need to understand another type of transform: the projection transform.
Projection Transformation
A projection transformation converts your node's coordinates from camera coordinates to normalized coordinates. Depending on the type of projection you use, you'll get different effects.
There are two projection types to know: orthographic and perspective.
Perspective is on the left and ortho is on the right. The camera or point of view is located on the axis origin.
Understanding perspective projection is easy, because its so similar to how your eyes see the world. Ortho is a bit harder but not that bad, because you've been working with the cube in orthographic mode!
Look at it another way: imagine that you're standing on a railway and looking along it. In perspective mode, the rails look like this:
In orthographic mode, the picture is deformed and the rails are parallel.
In the picture below, you can see another perspective projection. It's a chopped pyramid, and inside that pyramid is where your scene renders. The whole scene is projects onto the pyramid's top face, similarly, that top face will be your device screen.
Right now, Metal renders everything using orthographic projection, so you need to transform the scene to a perspective look. This calls for a matrix that describes perspective projection.
To recap the whole concept, you have a cube (your scene space), and you want to transform it into a chopped pyramid. To do that, you'll create a projection matrix that describes the chopped pyramid above and maps it to your normalized box.
Matrix4 already has a method to create a perspective projection matrix, so you'll work with that first.
Add the following new property to ViewController.swift:
var projectionMatrix: Matrix4!
Next, add the following at the top of
projectionMatrix = Matrix4.makePerspectiveViewAngle(Matrix4.degreesToRad(85.0), aspectRatio: Float(self.view.bounds.size.width / self.view.bounds.size.height), nearZ: 0.01, farZ: 100.0)
85.0 degrees specifies the camera's vertical angle of view. You don't need a horizontal value because you pass the aspect ratio of the view, and you also pass near and far planes to specify the field of view.
In other words, everything that is closer or farther will not display.
Now, modify the
render() method inside Node.swift — specifically, you need to add one more parameter. Make the render method name look like this:
func render(commandQueue: MTLCommandQueue, pipelineState: MTLRenderPipelineState, drawable: CAMetalDrawable, projectionMatrix: Matrix4, clearColor: MTLClearColor?)
You added the
projectionMatrix parameter.
Now you want to include
projectionMatrix in the uniform buffer, which will pass to vertex shader later. Since the uniform buffer will now contain two matrices instead of one, you need to increase its size.
uniformBuffer = device.newBufferWithLength(sizeof(Float) * Matrix4.numberOfElements(), options: nil)
With this:
uniformBuffer = device.newBufferWithLength(sizeof(Float) * Matrix4.numberOfElements() * 2, options: nil)
Now look for this:
memcpy(bufferPointer!, nodeModelMatrix.raw(), sizeof(Float)*Matrix4.numberOfElements())
And add this after it:
memcpy(bufferPointer! + sizeof(Float)*Matrix4.numberOfElements(), projectionMatrix.raw(), sizeof(Float)*Matrix4.numberOfElements())
Now both matrices pass to the uniforms buffer. All you need to do now is to use this projection matrix in your shader.
Go to Shaders.metal and modify
Uniforms to include
struct Uniforms{ float4x4 modelMatrix; float4x4 projectionMatrix; };
Next in the vertex shader, you want to get projection matrix, so find this:
float4x4 mv_Matrix = uniforms.modelMatrix;
And add this after:
float4x4 proj_Matrix = uniforms.projectionMatrix;
To apply this matrix transformation to your position, you simply multiply matrix and position, just as you did with
So, replace:
VertexOut.position = mv_Matrix * float4(VertexIn.position,1);
With this:
VertexOut.position = proj_Matrix * mv_Matrix * float4(VertexIn.position,1);
Finally, you need to pass in the projection matrix from your render method in ViewController.swift.
objectToDraw.render(commandQueue, pipelineState: pipelineState, drawable: drawable, clearColor: nil)
objectToDraw.render(commandQueue, pipelineState: pipelineState, drawable: drawable,projectionMatrix: projectionMatrix, clearColor: nil)
Also, change the translation parameters for
objectToDraw so it looks like this:
objectToDraw.positionX = 0.0 objectToDraw.positionY = 0.0 objectToDraw.positionZ = -2.0 objectToDraw.rotationZ = Matrix4.degreesToRad(45); objectToDraw.scale = 0.5
Build and run. Now it sort of looks like a cube, but it's still messed up for some reason.
You'll fix it in a moment, but right now, take a moment to recap what you've just done.
- You added a model transformation, which allows you to modify an object's location, size and rotation.
- You added a projection transformation, which allows you to shift from an orthographic to a more natural perspective projection.
There are actually two more transformations beyond this that are typically used in a 3D rendering pipeline:
- View Transformation: What if you want to look at the scene from a different position? You could move every object in the scene by modifying all of their model transformations, but this is inefficient. It is often convenient to have a separate transformation that represents how you're looking at the scene; i.e. the "camera".
- Viewport transformation: Basically, this takes the little world you've created in normalized coordinates and maps it to the device screen. This is done automatically by Metal, so you don't need to do anything – it's just something worth knowing.
Here's the plan for the rest of the tutorial:
- You'll add a View transformation
- You'll make the cube rotate
- You'll fix your cube's peculiar transparency
View Transformation
A view transformation converts your node's coordinates from world coordinates to camera coordinates. In other words, it allows you to move your camera around your world.
Adding a view transformation is fairly easy. Open Node.swift and change the render method declaration so it looks like this:
func render(commandQueue: MTLCommandQueue, pipelineState: MTLRenderPipelineState, drawable: CAMetalDrawable, parentModelViewMatrix: Matrix4, projectionMatrix: Matrix4, clearColor: MTLClearColor?)
You added
parentModelViewMatrix, which represents the camera position and will be put to use to transform the scene.
render(), find:
var nodeModelMatrix = self.modelMatrix()
And add this after it:
Note that you don't pass this matrix to the shader as you did with the previous two matrices. Instead, you're making a model view matrix which is a multiplication of the model matrix with the view matrix. It's quite common to pass them pre-multiplied like this for efficiency.
Now, you just need to pass the new parameter to
render(). Open ViewController.swift, and change :
objectToDraw.render(commandQueue, pipelineState: pipelineState, drawable: drawable,projectionMatrix: projectionMatrix, clearColor: nil)
To this:
var worldModelMatrix = Matrix4() worldModelMatrix.translate(0.0, y: 0.0, z: -7.0) objectToDraw.render(commandQueue, pipelineState: pipelineState, drawable: drawable, parentModelViewMatrix: worldModelMatrix, projectionMatrix: projectionMatrix ,clearColor: nil)
Also, delete these lines:
objectToDraw.positionX = 0.0 objectToDraw.positionY = 0.0 objectToDraw.positionZ = -2.0 objectToDraw.rotationZ = Matrix4.degreesToRad(45); objectToDraw.scale = 0.5
You don't need to move the object back, because you're moving the point of view.
Build and run.
To understand the View transformation a little better, go ahead and do some more modifications.
Still in
render() inside ViewController.swift, find:
worldModelMatrix.translate(0.0, y: 0.0, z: -7.0)
And add this below it:
worldModelMatrix.rotateAroundX(Matrix4.degreesToRad(25), y: 0.0, z: 0.0)
Build and run.
You rotated the whole scene around the x-axis or changed the camera direction, whichever way you prefer to think about it :]
A Rotating Cube
Now let's modify the project so it rotates your cube over time.
To do this, open Node.swift and add the following new property:
var time:CFTimeInterval = 0.0
This is simply a property that tracks how long the node was around.
Now, add the following method to the end of the class:
func updateWithDelta(delta: CFTimeInterval){ time += delta }
Next open ViewController.swift and add this new property:
var lastFrameTimestamp: CFTimeInterval = 0.0
Next, change:
timer = CADisplayLink(target: self, selector: Selector("gameloop"))
To be this:
timer = CADisplayLink(target: self, selector: Selector("newFrame:"))
And replace this:
func gameloop() { autoreleasepool { self.render() } }
With this:
// 1 func newFrame(displayLink: CADisplayLink){ if lastFrameTimestamp == 0.0 { lastFrameTimestamp = displayLink.timestamp } // 2 var elapsed:CFTimeInterval = displayLink.timestamp - lastFrameTimestamp lastFrameTimestamp = displayLink.timestamp // 3 gameloop(timeSinceLastUpdate: elapsed) } func gameloop(#timeSinceLastUpdate: CFTimeInterval) { // 4 objectToDraw.updateWithDelta(timeSinceLastUpdate) // 5 autoreleasepool { self.render() } }
Nice work! Here's what you did, step-by-step:
- The display link now calls
newFrame()every time the display refreshes. Note that the display link is passed as a parameter.
- You calculate time between this frame and the previous one. Note that it's inconsistent because some frames might be skipped.
- You call
gameloop(), but with the time since the last update as a parameter.
- You update your node by using
updateWithDelta()before rendering.
- Now, when a node is updated, you can call the render method.
Finally, you need to override
updateWithDelta in
Cube class. Open Cube.swift and add this new method:
override func updateWithDelta(delta: CFTimeInterval) { super.updateWithDelta(delta) var secsPerMove: Float = 6.0 rotationY = sinf( Float(time) * 2.0 * Float(M_PI) / secsPerMove) rotationX = sinf( Float(time) * 2.0 * Float(M_PI) / secsPerMove) }
Nothing fancy here, all you're doing is calling
super() to update the time property. Then you set cube rotation properties to be a function of
sin, which basically mean that your cube will rotate to some point and then rotate back.
Build and run, and enjoy your rotating cube!
Your cube should now have a little life to it, spinning back and forth like a little cube-shaped dancer.
Fixing the Transparency
The last part is to fix the cube's transparency, but first, you should understand the cause. It's really quite simple and a little peculiar — Metal sometimes draws pixels of the back face of the cube before the front face.
So, how do you fix it?
There are two ways:
- One approach you can take is depth testing. With this method, you store each point's depth value, so that when the two points are drawn at the same point on the screen, only the one with lower depth is drawn.
- The second approach is backface culling. This means that every triangle drawn is visible from just one side. So in effect, the back face isn't drawn until it turns toward the camera. This is based on the order you specify the vertices of the triangles.
You're going to use backface culling to solve the problem here, as it's a more efficient solution when there is only one model. The rule you must keep is this: all triangles must be specified as counter-clockwise, otherwise, it won't draw them.
Lucky for you, when I set up the cube vertices I organized them so every triangle is indeed specified as counter-clockwise, so you can just focus on learning how to use backface culling.
Open Node.swift and add find this in
if let renderEncoder = renderEncoderOpt {
And add this right below:
//For now cull mode is used instead of depth buffer renderEncoder.setCullMode(MTLCullMode.Front)
Build and run.
Now your cube should be free of transparency. What a beautiful cube!
Where to Go From Here?
Here is the final example project from this iOS 8 Metal Tutorial.
Congratulations, you have learned a ton about moving to 3D in the new Metal API! You now have an understanding of model, view, projection, and viewport transformations, matrices, passing uniform data, backface culling, and more.
We may write some more tutorials in this series covering texturing, lighting, and importing models if there's enough interest – add a comment below if you'd would like to see more!
In the meantime, be sure to check out some great resources from Apple:
- Apple's Metal for Developers page, with tons of links to documentation, videos, and sample code
- Apple's Metal Programming Guide
- Apple's Metal Shading Language Guide
- The Metal videos from WWDC 2014
You also might enjoy the OpenGL ES video tutorials on our site, where Ray explains how many of these same concepts work in OpenGL ES, but with even more detail.
If you have questions, comments or discoveries to share, please leave them in the comments below!


text:
We are a unique small mall that has a large selection of antiques, glassware and vintage collectibles. We also offer a wide variety of products including household and decorating items, gently used personal accessories, and lots lots more.rnrnCome shop with us!rnrnWe are located off of I-40 Exit 287 in Cookeville. Turn toward Cookeville and go .6 miles. We are on the left across from Walmart entrance and Sonic.
Tennessee Vacation eGuide
The 2016 eGuide gives you instant access to Tennessee's irresistible attractions and destinations. Peruse venues online, then put in your order to get a free guide delivered to your doorstep.

subset: commoncrawl


text:
Everything Fresh Everything new, Cast out the darkness, Bring on Morning's dew! Serene splendor, Uplifting light, All of my fears Dashed with the night. Great is the Maker, Of Heaven and Earth! This morning is precious, So bask in its worth! Intricate beauty, Such glorious detail, Awoken with magnitude! The night has gone stale. No need to worry, This poem will end, So that you can lead an adventure With the time that you spend In the morning!
© Copyright 2017 sunshine97. All rights reserved.
Status: Finished
Genre: Poetry
Poem / Poetry
Short Story / Young Adult
Poem / Poetry
Paste the link to picture in the entry below:
Paste the link to Youtube video in the following entry:
Cannot annotate a non-flat selection. Make sure your selection starts and ends within the same node.
An annotation cannot contain another annotation.
There was an error uploading your file.


text:
Reading mode: Light Dark
D800E Any tips for using AI-S lenses
Started Aug 9, 2012 | Discussions thread
Shop cameras & lenses ▾
Gabriele Sartori • Veteran Member • Posts: 4,271
Re: D800E Any tips for using AI-S lenses
In reply to mhammon • Aug 9, 2012
exactly, I'm using my super sharp 28mm F2.8 and it works like a charm. Manual focus but the camera tells me when I'm in focus and it shows the right aperture simply setting the maximum. Really cool.
mhammon wrote:
There's really no trick involved. Nikon provides the capability to attach AI/AI-S lenses, as long as you program them in the Non-CPU lens menu. Just enter the minimum f-stop and focal length. Check pp. 212 and 371 in the manual.
I've used my 24mm and 50mm AI-S lenses on my D700 without any problems, except vignetting when I use them wide open.
-- hide signature --
California, CA
Gabriele Sartori's gear list:Gabriele Sartori's gear list
Leica D-Lux (Typ 109) Nikon 1 J1 Nikon D800E Panasonic Lumix DMC-GH3 Leica M Typ 240 +1 more
Reply Reply with quote Complain
|Post (hide subjects)
|Posted by
|Aug 9, 2012
|Aug 9, 2012
|Aug 9, 2012
|Aug 9, 2012
|Aug 9, 2012
|Aug 9, 2012
Keyboard shortcuts:
FForum PPrevious NNext WNext unread UUpvote SSubscribe RReply QQuote BBookmark MMy threads
Color scheme? Blue / Yellow
Latest reviews
Finished challenges
|Leaving the office, Central London. by Edward48
from Your City - Night Shift
|Running free by LassiM
from My Best Photo of the Week
|Everyone's happy at Disney World! by Pixney
from Disney World
Most popular cameras
Top threads in this forum
Most bookmarked in this forum
Top posters in this forum


text:
Hi guys,
Although it's not completely finished yet, I'd like to announce
a new Web site. This project has been ten years in the making.
The database covers over 800 different woody plants and has over
8000 color photographs. Many of the photos were scanned in the
early 90's and are only 256 colors (you'd be hard-pressed to
tell), but we're rescanning them all to full-color JPEG images.
Anyhow, enjoy!
To sign-off this list, send email to email@example.com with the
message text UNSUBSCRIBE GARDENCHAT


text:
× View Today's Deals
You missed it This great deal for Lana Ortega Golf is over. But don't despair, we've got more great deals every day.
Related Deals That You May Like
Golf Academy of Northern Colorado
Three 50-Minute Private Golf Lessons with Video
Denver Golf Benefiting The First Tee of Denver
Family Fun Golf Pass with Mini Golf & Par 3 Rounds
The First Tee of Pikes Peak
1-Hour "Learn to Golf" Beginner Lesson
Chris Schultz Golf Instruction
45-Minute Video Golf Lesson
Lana Ortega Golf
Private Golf Lessons
- Save 56%
- 30 purchased
deal over
deal over!
100% recommendedin LivingSocial customer ratings
If you're looking to improve your game, call in the expert instruction of Lana Ortega. A private lesson will get you back in the swing of things:
• $65 ($150 value) for one 45-minute private golf lesson
• $150 ($360 value) for three 45-minute private golf lessons
• Includes video and computer analysis and a custom practice plan
Lana Ortega Golf's Website
PAID VALUE EXPIRES ON February 26, 2022
PROMOTIONAL VALUE EXPIRES ON August 10, 2014


text: Cool card trick Uploaded 09/05/2008 Wow! Share Video REPLAY VIDEO Cool card trick NEXT VIDEO How To Pee In Iraq RELATED MEDIA Cool Card Trick Cool Card Trick Amazing Card Trick Magic Trick - Kissing Card Card Trick Card Trick The Most Insane Card Trick Ever! Invisible Cards Card Trick Irishman's Card Trick Will Amaze & Entertain Magic Boobs Card Trick Magician Wows Judges With Amazing Trick Card Cat Trick Magician James Galea's Unbelievable Trick Baboon is Blown Away by a Magic Trick Card Through Can Levitating Card Trick Magical Dream Proposal Card Trick Card Floater Weed Card Autoplay On Next Video Share Tweet Stumble Email Pin It Embed: Use old embed code Use new embed code Tags: cool card trick NEXT VIDEO How To Pee In Iraq 2 Comments Login to Comment


text:
Garlic Mayonnaise
|8 Clove (40 gm)
|Egg yolk
|Soft bread
|2 Tablespoon (The Size Of An Egg)
|Olive oil
|2 1⁄2 Cup (40 tbs)
|Lemon juice
|1 Teaspoon
|1 Teaspoon
This is a very easy garlic mayonnaise to make.
Be sure to make plenty of itâ€â€for its taste, sharper than that of ordinary mayonnaise, is usually very popular.
Do be careful, however, to put in the full quantity of garlic.
Otherwise it is liable to be equally enthusiastically disliked.
Curiously enough, a lot of garlic is more objectionable than a very great deal of garlic indeed.
Soak the bread in cold milk, and squeeze thoroughly.
Pound it, or mash and beat it with the garlic until you have got a smooth paste.
Add salt and pepper, the yolks of egg and a little oil.When the paste is quite smooth, add the rest of the oil drop by drop as for a mayonnaise; and finally add the lemon juice, heated.
Rate It
Nutrition Rank
Nutrition Facts
Serving size
Calories 1253 Calories from Fat 1214
% Daily Value*
Total Fat 137 g211.1%
Saturated Fat 19.4 g96.9%
Trans Fat 0 g
Cholesterol 92.7 mg30.9%
Sodium 37.2 mg1.5%
Total Carbohydrates 7 g2.5%
Dietary Fiber 0.22 g0.86%
Sugars 0.8 g
Protein 2 g4.9%
Vitamin A 2.2% Vitamin C 6.2%
Calcium 7.4% Iron 6.3%
*Based on a 2000 Calorie diet


text:
1. Samsung Galaxy S7 Edge
The best smartphone in the world - it's a work of art
Weight: 157g | Dimensions: 150.9 x 72.6 x 7.7 mm | OS: Android Marshmallow | Screen size: 5.5-inch | Resolution: 1440 x 2560 | CPU: Exynos 8890 | RAM: 4GB | Storage: 32GB/64GB | Battery: 3600mAh | Rear camera: 12MP | Front camera: 5MP
Last year's Galaxy S6 Edge was a good phone, but not brilliant. It was the same as the Samsung Galaxy S6, but had a curved screen - and that was it. It was the same size, power and camera, and that wasn't enough.
Fast forward to today and the S7 Edge takes all the great looks of the S6 Edge, makes the phone even curvier and combines it with the superb power and feature set of the S7 - and it's even dropping in price to make it even better value.
The camera is just brilliant, the mix of metal and glass is really nice to hold, and even the Touchwiz overlay is turning into something more usable than before.
Battery life improvements are hugely welcomed, and while the price is higher, it's now affixed to a phone that offers simply the best in nearly every department, so many will be happy with the outlay.
Read the full review: Samsung Galaxy S7 Edge
- What's next? Like it's smaller brother, the Samsung Galaxy S8 Edge looks likely to be unveiled at its own event in New York in March - but questions remain whether there will be a flat version, or the Edge variant will become the Samsung Galaxy S8 - and it looks like that it will be.
Also consider: Like the phone above, this is an easy decision: go for the if you're not feeling the cost and price of the Edge. It's got all the power, but it's more compact and costs a little less. The is nearly here too though - that could be a dark horse in the mix.


text:
You can power the low-voltage Dedolight system using 12V or 24V lamps directly from many suitable power sources: camera batteries, car batteries (directly or via cigarette lighter adapter), battery belts, or any other 12V or 24V AC or DC power source.
This Power Supply/Control Unit is switchable in 24 steps for AC power input from 100V to 255VAC. It can simultaneously power four Dedolight heads equipped with 20W, 50W, 100W or mixed wattage lamps.
Each light (output) can be individually and independently switched in four distinct steps, each increasing color temperature and output:
1. Off.
2. Low 3000°K
3. Medium 3200°K (10.7V at lamp)
4. High 3400°K (12.2V at lamp)
Even when running lamps at slightly higher voltage than rated, actual life far exceeds the manufacturer-rated life expectancy.
The DT12-4 also incorporates an input voltage indicator, enabling the user to determine correct input voltage at a glance and to control color temperature precisely.
|Illuminated master power switch, Fused input and outputs, Switchable input, Switchable outputs
|Input Voltage:
|Output Voltage:
|4 x 10-12VAC
|Technical Data:
|12.1 lb. (5.5 kg)
|Dedolight DT24-3 Power Supply / Control Unit 100-255 VAC Input with Three 24 Volt AC Outputs.


text:
For violin & piano. First printing. Originally composed for piano, then for brass sextet with percussion. This version remains faithful to the original. Duration: ca. 4'. Score, 6 p. and part.
Edited by Eduard Herrmann. This large volume contains Bach's most celebrated violin masterworks. It includes all six unaccompanied sonatas and partitas, the Concerto in A minor, the Concerto in...
For violin & piano. Reprint of earlier editions. From the Schirmer Library of Musical Classics series, Vol. 2114. Score, 120 p. and part.
Edited by Jaroslav Foltyn. For violin. Preface in Ger., Cz. view details
Professional quartets, advanced school ensembles, and string orchestras will enjoy the pieces included in this new chamber music series. The first book in the series includes highlights of classical...
A traditional early American hymn scored for a medium-advanced instrumental soloist. A good choice for communion and other special moments during a worship service.
Through careful study of both Mozart's original handwritten manuscript and Joseph Joachim's own edition, legendary violinist Aaron Rosand presents an invaluable performance edition of this important work....
"Dramatica" is an explosion of emotional harmonies with a dramatic, heart-warming melodic theme. "Dramatica" will brilliantly showcase the Violin Soloist with its passion and drive. Suitable for performance...
The Festival Classics series is a progressively graded collection of solos with piano accompaniment. The books contain a mix of transcriptions of familiar classics along with solos written...
"There is not a violinist alive in this century who does not have the sound of Kreisler's works in his ear, and indeed, in his heart." Isaac Stern said those powerful words when shown these...
This item has been discontinued and we can only sell our remaining stock. Add to cart to check availability and for more information.
A variety of approachable music for the advanced player by 22 composers including Barber, Corigliano, Creston, Ives,...
Orchestrate Your Inbox
What are your interests? Fine-tune your email so you receive only what's important to you.
Thank you! Please check your inbox. We've sent an email with a link to update your preferences.
Pepper Music eClubs
Everything you need for the upcoming season and special recommendations from our editors! Each club is sent monthly (unless otherwise noted).
General Music
Music Library
Cued In - The Pepper Blog
A weekly digest of insightful articles, helpful resources, and interviews with leading composers and arrangers
Subscribe to Cued In
Thanks, you're almost done! Please check your inbox and click the link to complete your subscription.


text:
1 tablespoon canola oil
2 medium onions, chopped into big pieces
1 large green bell pepper, cored, seeded, and chopped into big pieces
1 large red bell pepper, cored, seeded, and chopped into big pieces
2 teaspoons crushed garlic
1 can (28 oz) whole tomatoes, each tomato cut into quarters, juice reserved
10 cups (2 1/2 quarts) chicken broth
1/2 teaspoon coarsely ground black pepper
1/2 teaspoon red pepper flakes
1/2 cup uncooked brown rice
1/2 cup creamy unsalted peanut butter
In a large soup pot, heat oil over medium-high, then sauté onions, bell peppers, and garlic until the onion and garlic begin to brown, about 5 minutes. Reduce heat to medium, add tomatoes and cook, stirring from time to time, until they cook down, 5 to 10 minutes. Pour in tomato juice and broth and add black pepper and red pepper flakes. Bring to a boil over medium-high heat, add rice, then reduce heat to low. Simmer, partially covered, 45 minutes. Add peanut butter all at once, stirring until it melts. Bring soup to a simmer. Serve hot.


text:
Category:Three Pure Ones
From Wikimedia Commons, the free media repository
The Three Pure Ones are the only effective Taoist deities, because they're metaphorical symbols of the three main theological concepts of Taoism.
Media in category "Three Pure Ones"
The following 9 files are in this category, out of 9 total.
- DaodeTianzun.jpg 41 KB
- LingbaoTianzun.jpg 8 KB
- Taoist Triad.jpg 48 KB
- YuanshiTianzun.jpg 81 KB


text: Inside, this three bedroom home has everything a young family are looking, from the SPACIOUS OPEN PLAN LOUNGE with dining area to the MODERN KITCHEN with bay window. Upstairs, the master bedroom has the added luxury of it's own EN SUITE and WALK IN WARDROBE. For the rest of the family there is another double and single bedroom and a family bathroom.


text:
MoD suffers major IT setbacks in army recruitment project
The Ministry of Defence (MoD) faces millions of pounds of added costs following IT failures in its recruitment programme
This Article Covers
Government & public sector IT
The Ministry of Defence (MoD) faces millions of pounds of extra costs following IT failures in a major recruitment programme, according to reports.
EU data protection: Essential guide
Access this guide to aid you in facing the challenges, opportunities and key actions need to consider in preparing your organisation for GDPR.
By submitting your personal information, you agree that TechTarget and its partners may contact you regarding relevant content, products and special offers.
You also agree that your personal information may be transferred and processed in the United States, and that you have read and agree to the Terms of Use and the Privacy Policy.
The Times claimed that the Recruitment Partnering Project (RPP) – a £1.3bn online recruitment initiative – is already two years late and suffering problems that could lead the MoD to spend an additional £50m on a replacement system.
Reports suggest the delays are costing the MoD £1m a month and affect plans to recruit members for the Army Reserve, (formerly the Territorial Army), as the numbers of regular troops are reduced.
The MoD signed a £440m, 10-year deal with Capita in March 2012 to deliver RPP, promising savings of £300m.
At the time, Neil Polley, RPP project manager at the MoD, said: "This initiative will increase the number and improve the quality of recruits joining the Army.
"The contract covers the entire recruiting and selection process for both the regular army and the Territorial Army, and will transform the way the army recruits its officers and soldiers.
"The contract will release over 1,000 military recruiters back to the front line, and will deliver hundreds of millions of pounds in benefits."
News of more IT problems at a major department follow the millions of pounds being written off on the government's troubled Universal Credit system.
Enjoy the benefits of CW+ membership, learn more and join.
European law enforcement seeking smart ways to fight cyber crime
Read more on IT for government and public sector
Gov.uk Verify ID providers eye the prize of HMRC's digital users – but what happens without them?
HMRC ID vs Gov.uk Verify – what's the difference, and why it matters
GDS, HMRC and Verify: so much for cross-government digital collaboration
The government's transformation strategy is ambitious, but is it achievable?


text:
19 hours:
19 hours away,
Lost in your world of pain.
Reaching out to anyone you can.
Reaching out,
Till you found me.
I was a friend,
A lifeboat,
A hand to hold.
Someone who always listened to you,
Someone who truly cared,
All from 19 hours away.
But all I helped you with,
All the times I proved I cared,
All the all-nighters pulled.
And still I'm not enough when compared to her
Even though she has killed you,
More than once.
So here I am.
Walking away from you.
Walking away from your problems,
Walking away from your grip.
Because no matter what I do,
I'm still 19 hours away.
© Copyright 2017 KelseyLyn. All rights reserved.
Status: Finished
Genre: Romance
Oh my gosh, this was hauntingly beautiful. I loved it! :)
You can really feel the emotions in this; you're there for someone and always have been, but you're not enough. I'm not sure if there's a meaning to the 19 hours and, if there is, it may only be known to you (or maybe I'm just slow at understanding it :P) Beautifully written and haunting; flows well and a good message behind it :)
Book / Non-Fiction
Poem / Non-Fiction
Paste the link to picture in the entry below:
Paste the link to Youtube video in the following entry:
Cannot annotate a non-flat selection. Make sure your selection starts and ends within the same node.
An annotation cannot contain another annotation.
There was an error uploading your file.


text:
NYCdwellers and New York City Real Estate
NYCdwellers is New York City's largest real estate marketplace specializing in residential no fee apartment rentals in Manhattan. We are dedicated to providing outstanding service to New York apartment hunters from all over the world. Our website is comprised of modern apartment search technology and powered by six, full-time staff providing unsurpassed service to NYCdwellers' customers and listing providers.
What does this mean for you? This means a constantly-updated database offering real New York City apartment listings in real time and direct access to all listing providers. Our mission is to find and list all real estate properties available in Manhattan, by owner or by broker. We screen and hand-select all available NYC rentals. No duplicate or outdated listings, no bait and switch. If you are looking to rent an apartment in Manhattan, this is the place to be.
And if an individual listing is represented as a no fee apartment, there is no broker fee for the apartment. Period.
We supply the most current and pertinent information in your search for NYC rental apartments. By providing you with advanced and quick search options, looking for New York rentals becomes trouble free. Our system is the most advanced in helping you to rent in NYC. Our rental guide thoroughly describes how to rent New York City apartments. We offer a full spectrum of apartments for rent in Manhattan. Learn advanced methods to rent apartments in New York via our service. When you decide to rent Manhattan apartments, there is no other website that caters to your search needs better than ours. Hunting for NYC apartments for rent can be tough,if you're doing it all by yourself. Let NYCDwellers.com guide you. Here you will be able to get invaluable information about New York City apartment rentals, including neighborhood info and landlord requirements. We offer what apartment hunters want more than anything: an unparalleled variety of apartments in New York for rent.
© 2012 Apartments Integrated Inc. All Right Reserved


text:
Standards, Innovation Incentives, and the Formation of Patent Pools
Technological standards give rise to a complements problem that affects pricing and innovation incentives of technology producers. In this paper I discuss how patent pools can be used to solve these problems and what incentives patent holders have to form a patent pool. I offer some suggestions how competition authorities can foster the formation of welfare increasing patent pools.
If you experience problems downloading a file, check if you have the proper application to view it first. In case of further problems read the IDEAS help page. Note that these files are not on the IDEAS site. Please be patient as the files may be large.
|Date of creation:
|Nov 2010
|Contact details of provider:
| Postal: Geschwister-Scholl-Platz 1, D-80539 Munich, Germany
Phone: +49-(0)89-2180-3405
Fax: +49-(0)89-2180-3510
Web page: http://www.sfbtr15.de/
More information through EDIRC
References listed on IDEAS
Please report citation or reference errors to , or , if you are the registered author of the cited work, log in to your RePEc Author Service profile, click on "citations" and make appropriate adjustments.:
- Dequiedt, Vianney & Versaevel, Bruno, 2013.
"Patent pools and dynamic R&D incentives,"
International Review of Law and Economics,
Elsevier, vol. 36(C), pages 59-69.
- Vianney Dequiedt & Bruno Versaevel, 2013. "Patent pools and dynamic R&D incentives," Post-Print halshs-00833828, HAL.
- Reiko Aoki; Sadao Nagaoka, 2004.
"The Consortium Standard and Patent Pools,"
Econometric Society 2004 Far Eastern Meetings
788, Econometric Society.
- "Aoki, Reiko" & "Nagaoka, Sadao", 2004. "The Consortium Standard and Patent Pools," Economic Review, Hitotsubashi University, vol. 55(4), pages 345-357, January.
- Reiko Aoki & Sadao Nagaoka, 2004. "The Consortium Standard and Patent Pools," Hi-Stat Discussion Paper Series d04-32, Institute of Economic Research, Hitotsubashi University.
- Aoki, Reiko & Nagaoka, Sadao, 2004. "The Consortium Standard and Patent Pools," Discussion Paper 222, Center for Intergenerational Studies, Institute of Economic Research, Hitotsubashi University.
- Vianney Dequiedt & Bruno Versaevel, 2007.
"Patent Pools and the Dynamic Incentives to R&D,"
halshs-00142497, HAL.
- Dequiedt, V. & Versaevel, B., 2004. "Patent pools and the dynamic incentives to R&D," Working Papers 200412, Grenoble Applied Economics Laboratory (GAEL).
- Bruno Versaevel & Vianney Dequiedt, 2007. "Patent Pools and the Dynamic Incentives to R&D," Working Papers 0703, Groupe d'Analyse et de Théorie Economique (GATE), Centre national de la recherche scientifique (CNRS), Université Lyon 2, Ecole Normale Supérieure.
- Aoki, Reiko & Nagaoka, Sadao, 2005. "Coalition Formation for a Consortium Standard Through a Standard Body and a Patent Pool: Theory and Evidence from MPEG2, DVD and 3G," IIR Working Paper 05-01, Institute of Innovation Research, Hitotsubashi University.
- Anne Layne-Farrar & Gerard Llobet & Jorge Padilla, 2012. "Payments And Participation: The Incentives To Join Cooperative Standard Setting Efforts," Working Papers wp2012_1203, CEMFI.
This item is not listed on Wikipedia, on a reading list or among the top items on IDEAS.
When requesting a correction, please mention this item's handle: RePEc:trf:wpaper:342. See general information about how to correct material in RePEc.
For technical questions regarding this item, or to correct its authors, title, abstract, bibliographic or download information, contact: (Tamilla Benkelberg)
If you have authored this item and are not yet registered with RePEc, we encourage you to do it here. This allows to link your profile to this item. It also allows you to accept potential citations to this item that we are uncertain about.
If references are entirely missing, you can add them using this form.
If the full references list an item that is present in RePEc, but the system did not link to it, you can help with this form.
If you know of missing items citing this one, you can help us creating those links by adding the relevant references in the same way as above, for each refering item. If you are a registered author of this item, you may also want to check the "citations" tab in your profile, as there may be some citations waiting for confirmation.
Please note that corrections may take a couple of weeks to filter through the various RePEc services.


text:
Beautyhabit E-Gift Card
Shopping for someone else but not sure what to give them? Give them the gift of choice with a Beautyhabit gift card.
Gift cards are delivered by email and contain instructions to redeem them at checkout. Our gift cards have no additional processing fees and do not expire.
Fragrance Sample Program
Curious about a fragrance that you saw on our website? We offer a Try Before You Buy Program.
You can sample* 3 different fragrances for $15 - USA shipping and handling costs are included along with a $10 coupon good towards a full-size version of one of the sampled items (coupon expires 60 days after issued).
You may request up to 3 specific samples* in the comments area upon checkout. We will do our best to accommodate your request, based upon availability.
Please include at least 1 alternate, in case a requested fragrance sample is not available.
If no specific samples are requested at checkout, we will surprise you with a delightful assortment.
**Please note, fragrance sample vials or mini sprayers do not arrive completely full. Fragrance Oils or Parfum concentrations arrive in a glass vial and are filled 1/2 way due to their concentration. Other samples of fragrances may arrive in Mini Glass Sprayers and these are approximately 1/3 full - as the spray container is much larger than the standard vial size of 0.7 ml.
Feel free to phone us with any questions at
*This fragrance sample pack service is considered a final sale.
Limited Edition Cult Beauty Box
We are thrilled to bring you this amazing 23 piece collection of the best in beauty... This limited-edition Beautyhabit Cult Beauty Box features best sellers and customer favorites that span our entire 20-year history. Thank you for your loyalty and patronage - we can't wait to see what is around the corner in Beauty for the next 20 years.
In Health, Beauty & Wellness,
The Beautyhabit Team
Aurelia Miracle Cleanser - 30 ml
Aurelia Bamboo Muslin Cloth - 1 pc
Avene Thermal Spring Water - 1.76 oz
Beauyblender Pure Make Up Sponge Applicator - 1 pc
Chantecaille Luminous Gloss - Mango - 7.5 g
Child Perfume Roll On - 0.33 oz
Christophe Robin Cleansing Purifying Scrub with Sea Salt - 250 ml
Cinq Mondes 5 Flowers Micellar Water - Bali's ritual, Indonesia - 25 ml
Cinq Mondes Eau Egyptienne - Luxor's ritual, Egypt - 25 ml
Cire Trudon Cameo Parfume Scented Wax Cameo (assorted scents) - 1 pc
Diptyque Paris Mini Roses Candle - 35 g
Erbaviva Vanilla Grapefruit Lip Balm - 4.5 g
Etat Libre d'Orange Magnificent Seven Perfume Sampler - 7 x 1.5 ml
ISUN Sapphire Facial Oil - 30 ml
James Read Day Tan Face - 25 ml
Klorane Waterproof Eye Make-Up Remover with Soothing Cornflower - 25 ml
KYPRIS Body Elixir - Inflorescence - 30 ml
L'Aromarine Vanille Eau de Toilette - 0.5 oz
Lebon Toothpaste (assorted flavors) - 75 ml
Les Anis de Flavigny Rose Flavored Hard Candy - 50 g
Paul & Joe Perroquet Rose 003 Nail Polish - 12 ml
Sabe Masson Le Soft Perfume (assorted scents) - 0.17 oz
This Works In Transit Camera Close-Up - 15 ml


text:
Midlife make-over
Was this photo helpful? {{ voteCount + ' other' + (voteCountOthers == 1 ? '' : 's') }} found this helpful
Forty something female wishing improved upper and lower shape after children
By uploading this photo, Edward Lack, MD has agreed with RealSelf.com policy that they've secured proper patient consent.


text:
Compare and Save on Chad Holiday Accommodations
Top Holiday Accommodations Locations in Chad
Information about Chad
Vacation Rentals in Chad
Save hundreds with a Tripping.com vacation rental and forget about the expensive hotel room. For the ultimate getaway trip, Chad offers 50 vacation home rentals for an affordable price to match your budget and accommodation needs. Book one now for an average price of $215 a night, or a long-term rental for an average price of $12307 a month.
These homes offer a range of amenities, giving you more bang for your buck. For those looking to stay in a corporate rental, 12 of Chad's rentals offer high speed internet so you can easily keep in touch with your company or team. Go for a swim at one of the 5 properties complete with pool or jacuzzi, or relax with a night of cable TV in any of our 8 cozy homes.
Traveling with pets? Choose from 1 pet-friendly rentals in Chad for a quality experience. Tripping.com's home rentals offer far more room and comfort than a hotel, providing a safe and spacious place for you and your furry buddy. Book instantly with properties marked "Instabook", and check out our other listings now to find the perfect vacation home for you.
Search properties from 6 rental sites in Chad where the top providers in that area are Booking.com, Agoda, and HRS Holidays. There are 28 Booking.com rentals, 7 Agoda short term rentals and 5 HRS Holidays vacation rentals.


text:
A Treatise on the Geographical Scale of Agglomeration Externalities and the MAUP
In this article, we test to what extent the Modifiable Areal Unit Problem (MAUP) moderates the effect of agglomeration externalities on areal sectoral employment growth by varying the initial geographical scale of analysis. Using spatial cross-regressive modelling, we find different effects of agglomeration forces across geographical scales. As the MAUP is a theoretical as well as a methodological problem, research should not only work with proper statistical specifications, but also relate this more explicitly to hypotheses concerning the geographical scale at which agglomeration externalities operate. .
If you experience problems downloading a file, check if you have the proper application to view it first. In case of further problems read the IDEAS help page. Note that these files are not on the IDEAS site. Please be patient as the files may be large.
As the access to this document is restricted, you may want to look for a different version under "Related research" (further below) or search for a different version of it.
Volume (Year): 9 (2010)
Issue (Month): 1 ()
Pages: 19-39
|Contact details of provider:
| Web page: http://www.francoangeli.it/riviste/sommario.asp?IDRivista=103
|Order Information:
| Web: http://www.francoangeli.it/riviste/Elenco_Prodotti.aspx?startCode=DC Email:
No references listed on IDEAS
You can help add them by filling out this form.
This item is not listed on Wikipedia, on a reading list or among the top items on IDEAS.
When requesting a correction, please mention this item's handle: RePEc:fan:scresc:v:html10.3280/scre2010-001002. See general information about how to correct material in RePEc.
For technical questions regarding this item, or to correct its authors, title, abstract, bibliographic or download information, contact: (Angelo Ventriglia)
If you have authored this item and are not yet registered with RePEc, we encourage you to do it here. This allows to link your profile to this item. It also allows you to accept potential citations to this item that we are uncertain about.
If references are entirely missing, you can add them using this form.
If the full references list an item that is present in RePEc, but the system did not link to it, you can help with this form.
If you know of missing items citing this one, you can help us creating those links by adding the relevant references in the same way as above, for each refering item. If you are a registered author of this item, you may also want to check the "citations" tab in your profile, as there may be some citations waiting for confirmation.
Please note that corrections may take a couple of weeks to filter through the various RePEc services.


text:
Her case has hit the headlines, not least because she has the gumption to go to court, and because she was one of Nick Leeson's bosses. But many of the other Barings employees also demanded their bonuses when the Dutch bank ING bought up the collapsed bank. And their bonuses were duly paid.
Astonishing isn't it? Those people were working for a bank that went bust. It is bizarre to think of them having earned huge sums regardless.
Economics is offered to us as the justification. Had the bonuses not been paid, we are told, those Barings staff would have left and got equally well-paid jobs elsewhere. ING decided it was worth paying the bonuses to keep the employees on.
But do we believe this? People working in the City are not really operating in a competitive market. Were they to offer their skills in any other sector of the economy, these Barings employees would not be offered this kind of "performance-related pay".
The truth is that City firms cream off huge profits, and the people that work for them get their cut, regardless of their real contribution to the firm or the economy.
Of course to some extent competitive wage pressures operate. It would have cost ING to recruit new staff if the old ones had left, and certainly if wages fell relative to other City firms, the best and brightest would have found jobs with other high-paying companies. But pay is affected by institutions, by the culture that operates in the City, by the excess profits made by the company and how it chooses to cut them, and countless other factors.
Nevertheless the myth of the perfectly competitive labour market lives on. At the top end of the scale, it is used to justify immense bonuses. At the bottom end of the pay scale, it lies behind the claim that minimum wages cost jobs.
The theory goes as follows. The higher the pay, the more people are keen to do the job; the lower the pay, the harder it is to recruit. Firms look at how many people they can recruit at different wages then choose the combination of pay and employment levels that make them most profits. If wages are pushed artificially higher than the perfectly competitive labour market demands, firms will employ fewer people.
The trouble is that the evidence does not match the theory - at least at the kinds of levels of minimum wage in place in Europe and America. The US research on levels of employment in fast-food joints has been well rehearsed: studies discovered that a rise in the minimum wage in one state did not reduce employment relative to a neighbouring state. In fact, the fast-food joints concerned actually took on staff.
A group of academics has taken a detailed look at minimum wages in Europe and has come up with a similar story. Writing in the latest edition of Economic Policy, Juan Dolado, Francis Kramarz, Stephen Machin, Alan Manning, David Margolis and Coen Teulings analysed the effects of minimum wages in France, the Netherlands, Spain and the UK. In our own case it is the old wages councils, which used to set minimum standards in several industries, that they examine.
They conclude that the effects of minimum wages are exaggerated. In some circumstances they find that the minimum wage does cost jobs - notably among young workers in France, although even here the evidence is mixed and controversial. In others, a minimum wage does not cost jobs at all. The abolition of the wages councils in Britain did not lead to a big boost in employment in the sectors covered.
Economists are now starting to offer suggestions as to why the low-wage labour market does not operate as our intuitions suggest. Basically, like the City, it is not perfectly competitive.
Here is a possible account of how it might work. Imagine a security firm that is breaking even. It has 50 employees paid pounds 3.50 an hour. It decides to try to cut costs to make profits. Wages are pushed down to pounds 3 an hour. According to the perfectly competitive model, all 50 employees will immediately walk out and find jobs paying more elsewhere.
In practice, of course, we know that this is not the way things work. It is far more likely that some of those security guards will stick with it because they cannot find anything else, and others will leave when they can. New workers will take the jobs, but people will not stick around long. The firm will face rapid turnover and continually have to recruit and train new staff. Finally it finds that some of the cash saved on wages is spent on recruitment instead.
It does not matter much to the owners of the security firm whether they are breaking even at pounds 3.50 an hour with low turnover, or at pounds 3 an hour with high turnover. But it matters an awful lot to the workers who are earning less, and the taxpayer who pays them more benefits.
More importantly, even if the firms are making lots of profits at such low wages, they cannot expand when demand grows for security services because they cannot recruit. If wages were forced up by the minimum wage, the firms might lose some of those excess profits, but it would be worth their while expanding and taking on new employees. So long as the minimum wage was not set far too high (so that the costs of employing more people became too heavy) employment could rise.
As Dolado et al point out, theory on its own cannot calculate the effects of a minimum wage. Whether it costs jobs depends on the level at which it is set, and the way that part of the labour market works. Pay and employment are not set in perfectly competitive markets. The mantra that minimum wages always cost jobs - and the insistence on a particular model of pay and employment that lies behind it - should be rejected once and for all.
- More about:
- Employment
- Employment Cost
- ING Group
- Security


text:
Develop Bind 9 DNS and SendMail on Ubuntu
This project received 11 bids from talented freelancers with an average bid price of $78 USD.Get free quotes for a project like this
Project Budget$30 - $250 USD
Total Bids11
Project Description
The project involves configuring DNS Bind 9 on an Ubuntu server that will be used for DNS in a production network. Expertise is also required to setup an SMTP gateway using Sendmail on Ubuntu
Looking to make some money?
- Set your budget and the timeframe
- Outline your proposal
- Get paid for your work
Hire Freelancers who also bid on this project
Looking for work?
Work on projects like this and make money from home!Sign Up Now
- Forbes
- The New York Times
- Time
- Wall Street Journal
- Times Online


text:
Women's Rad Short Sleeve T-shirt keeps you cool and is nonrestrictive. Great for warmer rides or layered up when the weather gets colder.
Thank you for visiting Ion Womens Rad Short Sleeve T-shirt T-shirts on oakleysbikes.co.uk
We bring the products from many websites to one website for you to search, save and compare.


text:
The effect of organized crime on public funds
Organized crime is widely regarded as damaging to the economy, to say nothing of people�s lives. Yet little is known about the mechanism at work. This paper helps fill the gap by analyzing the impact of organized crime on the allocation of public subsidies to businesses. We assemble an innovative data set on Italian mafia crimes at municipal level and test whether organized crime diverts public funding. We exploit exogenous variations at the level of municipalities to instrument current mafia-style activity by using exogenous shifters of land productivity in the 19th century. Our results show that the presence of organized crime positively affects both the extensive margin (probability of funding) and the intensive margin (amount of public funding to enterprises). The impact is economically relevant and equal to at least one standard deviation of the dependent variable. Organized crime is also found to cause episodes of corruption in the public administration. A series of robustness checks confirm the findings. Our results suggest that geographically targeted aid policies should be careful to take local crime conditions into account.
If you experience problems downloading a file, check if you have the proper application to view it first. In case of further problems read the IDEAS help page. Note that these files are not on the IDEAS site. Please be patient as the files may be large.
|Date of creation:
|Jun 2013
|Contact details of provider:
| Postal: Via Nazionale, 91 - 00184 Roma
Web page: http://www.bancaditalia.it
More information through EDIRC
References listed on IDEAS
Please report citation or reference errors to , or , if you are the registered author of the cited work, log in to your RePEc Author Service profile, click on "citations" and make appropriate adjustments.:
- Paolo Buonanno & Ruben Durante & Giovanni Prarolo & Paolo Vanin, 2012.
"Poor Institutions, Rich Mines: Resource Curse and the Origins of the Sicilian Mafia,"
Carlo Alberto Notebooks
261, Collegio Carlo Alberto.
- Paolo Buonanno & Ruben Durante & Giovanni Prarolo & Paolo Vanin, 2012. "Poor institutions, rich mines: resource curse and the origins of the Sicilian mafia," Working Papers 2012/29, Institut d'Economia de Barcelona (IEB).
- P. Buonanno & R. Durante & G. Prarolo & P. Vanin, 2012. "Poor Institutions, Rich Mines: Resource Curse and the Origins of the Sicilian Mafia," Working Papers wp844, Dipartimento Scienze Economiche, Universita' di Bologna.
- Alberto Abadie & Javier Gardeazabal, 2003. "The Economic Costs of Conflict: A Case Study of the Basque Country," American Economic Review, American Economic Association, vol. 93(1), pages 113-132, March.
- Brollo, Fernanda & Nannicini, Tommaso & Perotti, Roberto & Tabellini, Guido, 2010.
"The Political Resource Curse,"
CEPR Discussion Papers
7672, C.E.P.R. Discussion Papers.
- Fernanda Brollo & Tommaso Nannicini & Roberto Perotti & Guido Tabellini, 2013. "The Political Resource Curse," American Economic Review, American Economic Association, vol. 103(5), pages 1759-1796, August.
- Brollo, Fernanda & Nannicini, Tommaso & Perotti, Roberto & Tabellini, Guido, 2010. "The Political Resource Curse," IZA Discussion Papers 4706, Institute for the Study of Labor (IZA).
- Fernanda Brollo & Tommaso Nannicini & Roberto Perotti & Guido Tabellini, 2010. "The Political Resource Curse," NBER Working Papers 15705, National Bureau of Economic Research, Inc.
- Fernanda Brollo & Tommaso Nannicini & Roberto Perotti & Guido Tabellini, 2009. "The Political Resource Curse," Working Papers 356, IGIER (Innocenzo Gasparini Institute for Economic Research), Bocconi University.
- Bronzini, Raffaello & de Blasio, Guido, 2006. "Evaluating the impact of investment incentives: The case of Italy's Law 488/1992," Journal of Urban Economics, Elsevier, vol. 60(2), pages 327-349, September.
- Bernini, Cristina & Pellegrini, Guido, 2011. "How are growth and productivity in private firms affected by public subsidy? Evidence from a regional policy," Regional Science and Urban Economics, Elsevier, vol. 41(3), pages 253-265, May.
- Emilia Bonaccorsi di Patti, 2009. "Weak institutions and credit availability: the impact of crime on bank loans," Questioni di Economia e Finanza (Occasional Papers) 52, Bank of Italy, Economic Research and International Relations Area.
- Oriana Bandiera, 2003. "Land Reform, the Market for Protection, and the Origins of the Sicilian Mafia: Theory and Evidence," Journal of Law, Economics and Organization, Oxford University Press, vol. 19(1), pages 218-244, April.
This item is not listed on Wikipedia, on a reading list or among the top items on IDEAS.
When requesting a correction, please mention this item's handle: RePEc:bdi:wptemi:td_916_13. See general information about how to correct material in RePEc.
For technical questions regarding this item, or to correct its authors, title, abstract, bibliographic or download information, contact: ()
If you have authored this item and are not yet registered with RePEc, we encourage you to do it here. This allows to link your profile to this item. It also allows you to accept potential citations to this item that we are uncertain about.
If references are entirely missing, you can add them using this form.
If the full references list an item that is present in RePEc, but the system did not link to it, you can help with this form.
If you know of missing items citing this one, you can help us creating those links by adding the relevant references in the same way as above, for each refering item. If you are a registered author of this item, you may also want to check the "citations" tab in your profile, as there may be some citations waiting for confirmation.
Please note that corrections may take a couple of weeks to filter through the various RePEc services.


text:
Vill du ange som standardvaluta eller gäller valutan endast för detta besök?
Velvet Apartments - Old Town are renovated 1 and 2 bedroom apartments located in a historical building in Prague - Old Town. You can find it right between Charles Bridge, National Theatre and Wenceslas Square. All the most beautiful historical monuments of Prague are within walking distance. Velvet Apartment - 2 bedroom (70 sqm) with large living room, kitchen, bathroom with shower and washbasin, separated toilet, hall and balcony. Complete renovation of this modern apartment in 3rd floor (no elevator) was finished in April 2011. First bedroom has one double bed, the second bedroom has one single bed. In the living room there are 2 double sofabeds. Velvet Apartment - 1 bedroom (57 sqm) consists of 1 large bedroom with living area, kitchen with dinning table, hall, bathroom with shower, washbasin and toilet. It has one double and one single bed in the sleeping area and one double sofabed in the living. It is quiet, bright and modern apartment on 4th floor (no elevator). Both apartments have fully equipped kitchens with cooking-stove, refrigerator, oven, microwave oven, toaster, kettle, coffee maker, crockery and cutlery. The apartments are also equipped with TV, satellite, free Wi-Fi, CD player. These fully equipped apartments can provide comfort to up to 5 persons. Location The Velvet Apartments - Old Town is in Karoliny Svetle No. 3 street, which leads to Charles Bridge (few minutes walk). National Theatre and Wenceslas Square are 2 minutes walk. There is a small supermarket on the ground-floor of the house. The apartment is located in the place where the Velvet Revolution and new period of Czech history after the fall of Communism began. Many restaurants, cafés and bakeries, in which you can sample Czech and international cuisine are located in this area, as well as numerous tourist sites and charming craft shops. Tram stops Narodni trida and Narodni divadlo are within 100 metres from the apartment. Metro stops are also close: Narodni trida (line B) is 150 metres from the apartment and Mustek (line A) is 250 metres from the Velvet Apartments - Old Town.


text:
IBI Hot List: 5/6/13 - 5/12/13
The IBI Hot List is back for another week and recaps the hot (and some cold) performances in the Indians system over the past week. The top 20 performances over the past seven days are ranked with some commentary, and the five worst showings are also ranked with some commentary there as well.
This week I provide some insight and info on the recent hot performances from the likes of Danny Salazar, Ryan Merritt, Dylan Baker, Justin Toole, D.J. Brown and others, and yes, I also look at the recent cold showings from the likes of Dorssys Paulino, Ronny Rodriguez, Elvis Araujo, and others.
This listing is a quick rundown through the hottest and some of the coldest...


text:
Foreign Direct Investment in Infrastructure in Developing Countries: Does Regulation Make a Difference?
No abstract is available for this item.
If you experience problems downloading a file, check if you have the proper application to view it first. In case of further problems read the IDEAS help page. Note that these files are not on the IDEAS site. Please be patient as the files may be large.
|Date of creation:
|Contact details of provider:
| Postal: Harold Hankins Building, Precinct Centre, Booth Street West, Manchester, M13 9QH
Phone: +44-161-275-2800
Fax: +44-161-273-8829
Web page: http://www.sed.manchester.ac.uk/idpm
More information through EDIRC
References listed on IDEAS
Please report citation or reference errors to , or , if you are the registered author of the cited work, log in to your RePEc Author Service profile, click on "citations" and make appropriate adjustments.:
- Villalonga, Belen, 2000. "Privatization and efficiency: differentiating ownership effects from political, organizational, and dynamic effects," Journal of Economic Behavior & Organization, Elsevier, vol. 42(1), pages 43-74, May.
- Mark Armstrong & Simon Cowan & John Vickers, 1994. "Regulatory Reform: Economic Analysis and British Experience," MIT Press Books, The MIT Press, edition 1, volume 1, number 0262510790.
- Shirley, Mary & Walsh, Patrick, 2000. "Public versus private ownership : the current state of the debate," Policy Research Working Paper Series 2420, The World Bank.
- Rodrik, Dani, 2000.
"Institutions For High-Quality Growth: What They Are And How To Acquire Them,"
CEPR Discussion Papers
2370, C.E.P.R. Discussion Papers.
- Dani Rodrik, 2006. "Institutions for High-Quality Growth: What They Are and How to Acquire Them," Chapters, in: Institutions, Globalisation and Empowerment, chapter 2 Edward Elgar Publishing.
- Dani Rodrik, 2000. "Institutions for High-Quality Growth: What They are and How to Acquire Them," NBER Working Papers 7540, National Bureau of Economic Research, Inc.
- Globerman, Steven & Shapiro, Daniel, 2002. "Global Foreign Direct Investment Flows: The Role of Governance Infrastructure," World Development, Elsevier, vol. 30(11), pages 1899-1919, November.
- Guasch, J. Luis & Hahn, Robert W., 1997.
"The costs and benefits of regulation : implications for developing countries,"
Policy Research Working Paper Series
1773, The World Bank.
- Guasch, J Luis & Hahn, Robert W, 1999. "The Costs and Benefits of Regulation: Implications for Developing Countries," World Bank Research Observer, World Bank Group, vol. 14(1), pages 137-158, February.
- Dhaneshwar Ghura & Barry Goodwin, 2000. "Determinants of private investment: a cross-regional empirical investigation," Applied Economics, Taylor & Francis Journals, vol. 32(14), pages 1819-1829.
- Preetum Domah & Pollitt, M.G. & Jon Stern, 2002. "Modelling the Costs of Electricity Regulation: Evidence of Human Resource Constraints in Developing Countries," Cambridge Working Papers in Economics 0229, Faculty of Economics, University of Cambridge.
- Clarke, George R.G. & Wallsten, Scott J., 2002. "Universal(ly bad) service - providing infrastructure services to rural and poor urban consumers," Policy Research Working Paper Series 2868, The World Bank.
- Hardman Moore, John & Hart, Oliver, 1985.
"Incomplete Contracts and Renegotiation,"
CEPR Discussion Papers
60, C.E.P.R. Discussion Papers.
- Hart, Oliver D & Moore, John, 1988. "Incomplete Contracts and Renegotiation," Econometrica, Econometric Society, vol. 56(4), pages 755-785, July.
- Oliver Hart & John Moore, 1985. "Incomplete Contracts and Renegotiation," Working papers 367, Massachusetts Institute of Technology (MIT), Department of Economics.
- Colin Kirkpatrick & David Parker & Yin-Fang Zhang, 2004.
"Regulatory Impact Assessment in Developing and Transition Economies: A Survey of Current Practice,"
Public Money & Management,
Taylor & Francis Journals, vol. 24(5), pages 291-296, October.
- Colin Kirkpatrick & David Parker & Yin-Fang Zhang, 2004. "Regulatory Impact Assessment in Developing and Transition Economies: A Survey of Current Practice," Public Money & Management, Chartered Institute of Public Finance and Accountancy, vol. 24(5), pages 291-296, October.
- Zhang, Yin-Fang & Kirkpatrick, Colin & Parker, David, 2002.
"Electricity Sector Reform in Developing Countries: An Econometric Assessment of the Effects of Privatisation, Competition and Regulation,"
Centre on Regulation and Competition (CRC) Working papers
30593, University of Manchester, Institute for Development Policy and Management (IDPM).
- Yin-Fang Zhang & David Parker & Colin Kirkpatrick, 2008. "Electricity sector reform in developing countries: an econometric assessment of the effects of privatization, competition and regulation," Journal of Regulatory Economics, Springer, vol. 33(2), pages 159-178, April.
- Dawson, John W, 1998. "Institutions, Investment, and Growth: New Cross-Country and Panel Data Evidence," Economic Inquiry, Western Economic Association International, vol. 36(4), pages 603-19, October.
- David M. Newbery, 2002. "Privatization, Restructuring, and Regulation of Network Utilities," MIT Press Books, The MIT Press, edition 1, volume 1, number 0262640481.
- Parker, David & Kirkpatrick, Colin, 2003.
"Privatisation in Developing Countries: A Review of the Evidence and the Policy Lessons,"
Centre on Regulation and Competition (CRC) Working papers
30623, University of Manchester, Institute for Development Policy and Management (IDPM).
- David Parker & Colin Kirkpatrick, 2005. "Privatisation in Developing Countries: A Review of the Evidence and the Policy Lessons," Journal of Development Studies, Taylor & Francis Journals, vol. 41(4), pages 513-541.
- Jalilian, Hossein & Kirkpatrick, Colin & Parker, David, 2007. "The Impact of Regulation on Economic Growth in Developing Countries: A Cross-Country Analysis," World Development, Elsevier, vol. 35(1), pages 87-103, January.
- Marianne Fay & Danny Leipziger & Quentin Wodon & Tito Yepes, 2003. "Achieving the Millennium Development Goals : The role of infrastructure," Policy Research Working Paper Series 3163, The World Bank.
- Wallsten, Scott J, 2001. "An Econometric Analysis of Telecom Competition, Privatization, and Regulation in Africa and Latin America," Journal of Industrial Economics, Wiley Blackwell, vol. 49(1), pages 1-19, March.
This item is not listed on Wikipedia, on a reading list or among the top items on IDEAS.
When requesting a correction, please mention this item's handle: RePEc:ags:idpmcr:30703. See general information about how to correct material in RePEc.
For technical questions regarding this item, or to correct its authors, title, abstract, bibliographic or download information, contact: (AgEcon Search)
If you have authored this item and are not yet registered with RePEc, we encourage you to do it here. This allows to link your profile to this item. It also allows you to accept potential citations to this item that we are uncertain about.
If references are entirely missing, you can add them using this form.
If the full references list an item that is present in RePEc, but the system did not link to it, you can help with this form.
If you know of missing items citing this one, you can help us creating those links by adding the relevant references in the same way as above, for each refering item. If you are a registered author of this item, you may also want to check the "citations" tab in your profile, as there may be some citations waiting for confirmation.
Please note that corrections may take a couple of weeks to filter through the various RePEc services.


text:
Submit ticket here.
All University issued mobile phones must be approved by a Vice President or Dean prior to placing an order. After ordering your smartphone, a member from UNIT will contact you to setup an appointment to configure your device.
**Eligibility for a University-issued mobile device will be periodically re-assessed, especially when an employee changes jobs or filling an open position**
Mobile Device Standards
Traveling Abroad?
When traveling overseas for University business, an international calling plan must be added to the University issued device to save international roaming charges. UNIT/ Telecommunications requires one week's notice to add international features to a device. The approximate monthly cost of an international calling plan is $60.00 plus usage. An international calling plan provides the user with a discounted roaming rate voice and data, but it does not provide free international calling or data. Dean or VP approval is required in writing before an international plan will be added to a University owned device.
Chat Support Hours:
Mondays - Thursdays: 9AM - 7PM
Fridays: 9AM - 4PM
Submit ticket here.
If you are currently experiencing network connection issues, please fill out and submit this form so that we can help troubleshoot this issue.
Student Job Application
Apply for a job working in UNIT
Gartner Resources Avaiable Online
Get connected to the most current and accurate research in the IT industry
University Discount
The university has partnered with AT&T Wireless to provide Villanova students cutting-edge wireless devices and services, as well as an array of discounted calling plans to meet students' needs.
Faculty, staff and alumni also qualify for the discounted calling plans and should visit the AT&T web site above.


text:
Category:Princess Marie Elisabeth of Saxe-Meiningen
From Wikimedia Commons, the free media repository
|Authority control
Princess Marie Elisabeth of Saxe-Meiningen (23 September 1853 - 22 February 1923) was the only daughter of Georg II, Duke of Saxe-Meiningen and his first wife Princess Charlotte of Prussia.
Media in category "Princess Marie Elisabeth of Saxe-Meiningen"
The following 2 files are in this category, out of 2 total.
- MarieElisabethSaMei.jpg 55 KB


text:
Walk-In Unit Thousand Hills Golf Course
From $125 / night
|Per night:
|$125 - $145
|Per week:
|$925 - $1,000
|Pets allowed:
Bedrooms: 2
Bathrooms: 2
Sleeps: 6
Type: Condo
Pets allowed: Yes
Internet: Yes
Dave Shortt
About the owner
Owner Profile
School:Northwest High School, Fontbonne University, Fontbonne University - Saint Louis
- View full profile
|Mar 02 2017
|Sep 06 2017
|6 Nights
|Sep 07 2017
|Dec 31 2017
|2 Nights
|Check In: 4 p.m. Check Out: 10 a.m.
|Lodging tax: 11.6%
|Deposits: 1/2 due at the time of reservation. Balance due 2 weeks prior to check in Cancellation policy: 2 weeks prior: deposit less $100. If you cancel inside the 2 weeks, no refund unless the condo is re rented.
|Payment Options: Cashier's Check, Discover, Mastercard, Money Order, PayPal, Visa
|Other Fees: $75.00 Cleaning fee. One well-behaved pet (up to 40 lbs) is welcome for a nonrefundable fee of $85.00
Reviews (11)
Reviews for this vacation condo rental in Branson, Missouri
Great place.
Jason Fabijanowicz
Great place.
October 27, 2015
Great location. House was perfect. Really enjoyed the whole experience. Not far from Landing or SDC.
Rent this condo for your trip to Branson, Missouri
Donald B. Bell
Wichita Falls, Texas
Rent this condo for your trip to Branson, Missouri
September 4, 2014
We could not have asked for anything better. Previously, we have stayed in the standard motel rooms in Branson. This far exceeded that experience! We brought our 21-year-old son with us this time and he had his own bedroom and bathroom. There were TV's in every room. There was a washer/dryer, dishwasher and was stocked with dishes and most essentials. We were able to bring our small dog and small parrot. They both stayed in cages while we were gone to shows. This helped us avoid pet boarding charges and made this condo that much more of a bargain. It was closer to all of the entertainment venues than most other condos. This saved us both time and gasoline. It was clean and cool. It was close to the pool. One of the bathrooms had a recirculating tub with bubbles. The only concern we had was that the back door required a bit of effort to ensure that it was locked. It seemed that the door frame had shifted and the lock could use some maintenance.
Foothills Condo Rental
Becky Dearixon Harbaugh
Jefferson City, MO 65109
Foothills Condo Rental
June 11, 2013
We loved it! It was clean and the property was beautiful. It was close to everything that we wanted to do. We are definitely planning to come back next summer and stay again!
Very nice
Brent Oliver
Very nice
April 3, 2013
Short walk to pool. Very nice accommodations. Perfect place away from the major traffic but very close to Branson attractions Updated TVs would raise this to a 5-star
February Get-A-Way
Jean White
Glen Carbon, IL
February Get-A-Way
February 27, 2013
This condo is lovely! Perfect location. Will rent from Vacation Home Rentals again!!! Thank you so much for an awesome visit to Branson and we couldn't have had such a good time without the use of this condo.
Love this condo/price!!!
Haylee Hilton
Love this condo/price!!!
November 29, 2010
We stayed at these condos in 2009 and absolutely loved them so in 2010 I searched on the internet and thankfully found them through this website and saved us ALOT of money!!! This will be my first pick when we go to Branson.
Great Stay!
R. Miller
St. Louis
Great Stay!
July 9, 2010
We enjoyed our stay in Branson due to a great Condo. The location was great by being close to the action but also by being located on one of the bypass routes around the main drag. We enjoyed the fact that the unit was on the ground floor with no steps to climb. The condo was very comfortable and the two bed/two bath was just right for our family. Would stay again without a doubt.
Just Wonderful!!
Mary Beth Knueven
salem, Mo
Just Wonderful!!
July 7, 2010
We had a wonderful time. The condo was very clean and tastefully decorated. close to the club house, had to drag the kids away. close to the strip without the crowded feel. Thanks much,
Donna Miller
East Peoria, IL USA
November 18, 2009
The condo was exactly what we were looking for. Location was great, it was quiet, and very roomy. For once, it was as it was presented on the internet. We would definately stay here again. Tammy was great to work with, and answered all questions and concerns.
completely pleasant stay
Tom White
completely pleasant stay
October 30, 2007
My wife and I, my father and mother in law stayed at this condo for a week and had a wonderful time. The apartment was clean and well cared for and had everything we could ask for on hand. Thanks for a great stay.
Very nice condo
A Howell
Cabool, MO USA
Very nice condo
September 26, 2007
The condo was very nice and Tammy was very helpful and easy to work with. Look forward to staying again.
Frequently Asked Questions
19 Reviews
2 Reviews
10 Reviews
8 Reviews
4 Reviews
23 Reviews
4 Reviews


text:
Work Life Balance for Doctors – Whistler Mountain Hike
Work Life Balance for Physicians
- take a Whistler Mountain Day Hike with Me
For a little vicarious high mountain meadow adventure. You will see the mountains around the Whistler Blackomb ski resort, the Black Tusk, rock marmots, fields of flowers and fields of ice.
Watch until the end where I reveal my secret for this kind of work life balance.
and tell me what work life balance activity you are putting on your calendar right now.
- Login or register to post comments
- Feed: The Happy MD - Physician Satisfaction One Doctor at a Time
- Original article
Authored by:
Dike Drummond MDDr. Drummond is a Mayo trained Family Practice Physician with a unique combination of ground level experience in medicine, coaching and personal and business development. Dike maintains that if you are physician with a low Satisfaction Score in your life and career, you are being called to a life of greater meaning and joy. You can learn how to make a Shift to a new relationship with ...
Other Posts by Dike Drummond MD
Latest News
"It is quite safe to say that local search has been becoming more and more vital, whether you're a local hospital or a national shop, a local SEO strategy seems to be a key to driving more customers through your clinic. Ever since Google's Hummingbird update landed, more and more users are seeing more personalized, relevant, and even localized based results for searches!"
"Actually I do not agree with this article. Sure some cases may be a case of food poisoning. I just had a 24 hour flu yesterday. I had no stomach issues. No constipation, no diarrhea, no stomach cramps. I had severe body aches from neck all the way down to my feet, I had a headache all day, I had a ..."