2019 American Ford Ranger - You're seeking articles on our blog within the headline 2019 American Ford Ranger of choices of articles that we got. If you are trying to find 2019 American Ford Ranger article fails to dwell right here, you can see from several of the articles that may suit your research. We are going to help you to get articles 2019 American Ford Ranger you're looking at some of our content which might be suitable as you are looking for the material.
2019 American Ford Ranger - 2019 ford ranger : home - motortrend, 2019 ford ranger first look: welcome home north america finally gets a version of the global midsize pickup, designed specifically for u.s. tastes. 2019 ford ranger: disappointed, Ford fans in the united states have lusted for a new ranger for seven years. ford finally delivered, but the 2019 ford ranger fails to fill me with yearning. there are glowing reviews all across. 2019 ford ranger drive review: midsize truck, Relying on its global ranger pickup, ford was able to rush a new competitor to market while engineering a north america–specific variant that could become the segment's bestseller by relying. 2019 ford ranger . 2019 nissan frontier: compare trucks, Truthfully, the ford isn't the freshest new car around, either. ford revived the name for the american market for 2019, but the truck we're just now getting has been sold overseas for a few years.. 2019 ford ranger pricing, features, ratings reviews, Research the 2019 ford ranger with our expert reviews and ratings. edmunds also has ford ranger pricing, mpg, specs, pictures, safety features, consumer reviews and more. our comprehensive. 2019 ford ranger – mid-size pickup , The ford ranger pickup is returning for 2019, based on the ranger that has been sold elsewhere in the world since 2011, but thoroughly updated and improved for duty here.. 2019 ford ranger reviews | ford ranger price, photos, , Ranger danger. ford has been out of the mid-size-truck game in the u.s. since 2011, which incidentally is the same year as the launch of the global ranger that underpins this new truck and has. Ford ranger (t6) - wikipedia, Unveiled by ford in thailand in 2018, the ford ranger raptor is an upcoming 2019 production model. similar to the larger f-150 raptor, the ranger raptor is a high-performance truck optimized for off-road driving.. Pickup review: 2019 ford ranger | driving, Finally, smaller is coming back in style. pickup trucks have taken "full-size" to a whole new level of ridiculous proportions, to the point that it's tough to get in and out of them, or even.


text:
package pers.season.vml.ar;

import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;
import java.nio.IntBuffer;

import javax.swing.JFrame;

import org.opencv.calib3d.Calib3d;
import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.core.Scalar;
import org.opencv.core.Size;
import org.opencv.imgproc.Imgproc;

import com.jogamp.opengl.GL2;
import com.jogamp.opengl.GLAutoDrawable;
import com.jogamp.opengl.GLCapabilities;
import com.jogamp.opengl.GLEventListener;
import com.jogamp.opengl.GLProfile;
import com.jogamp.opengl.awt.GLCanvas;
import com.jogamp.opengl.glu.GLU;
import com.jogamp.opengl.util.FPSAnimator;
import com.jogamp.opengl.util.texture.Texture;
import com.jogamp.opengl.util.texture.TextureData;

import pers.season.vml.util.ImUtils;

public class Engine3D {
	Mat rvec;
	Mat tvec;
	Mat pic;
	Mat camMat;
	Mat templatePic;
	Mat templatePic_resized;
	GLCanvas glcanvas;
	int[] textureIndexs;

	float scale = 200;

	public GLEventListener gel = new GLEventListener() {

		@Override
		public void init(GLAutoDrawable drawable) {
			final GL2 gl = drawable.getGL().getGL2();
			int texCount = 2;
			textureIndexs = new int[texCount];
			gl.glGenTextures(texCount, textureIndexs, 0);
			for (int i = 0; i < textureIndexs.length; i++) {
				gl.glBindTexture(GL2.GL_TEXTURE_2D, textureIndexs[i]);
				gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_MIN_FILTER, GL2.GL_LINEAR);
				gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_MAG_FILTER, GL2.GL_LINEAR);
			}
		}

		@Override
		public void display(GLAutoDrawable drawable) {
			final GL2 gl = drawable.getGL().getGL2();

			gl.glClear(GL2.GL_DEPTH_BUFFER_BIT | GL2.GL_COLOR_BUFFER_BIT);
			if (pic == null)
				return;

			drawBackground(gl);
			// =====

			if (rvec == null || tvec == null)
				return;

			gl.glMatrixMode(GL2.GL_PROJECTION);
			gl.glLoadMatrixf(ImUtils.get32FMatData(buildProjectionMatrix(camMat, pic.width(), pic.height())), 0);

			gl.glMatrixMode(GL2.GL_MODELVIEW);
			gl.glLoadIdentity();

			Mat rmat = new Mat();
			Mat mv = Mat.zeros(4, 4, CvType.CV_32F);
			Calib3d.Rodrigues(rvec, rmat);
			rmat.t().copyTo(mv.submat(0, 3, 0, 3));
			mv.put(3, 0, -tvec.get(0, 0)[0] / scale, -tvec.get(1, 0)[0] / scale, -tvec.get(2, 0)[0] / scale, 1);
			gl.glLoadMatrixf(ImUtils.get32FMatData(mv), 0);
			drawCoord(gl);
			drawTemplatePlane(gl);
			// =====
			gl.glFlush();
		}

		@Override
		public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) {

		}

		@Override
		public void dispose(GLAutoDrawable drawable) {

		}

	};

	public void update(Mat pic, Mat rvec, Mat tvec) {
		if (pic != null)
			this.pic = pic.clone();
		if (rvec != null)
			this.rvec = rvec.clone();
		else
			this.rvec = null;
		if (tvec != null)
			this.tvec = tvec.clone();
		else
			this.tvec = null;

		glcanvas.repaint();
	}

	public Engine3D(Mat camMat, Mat templatePic) {
		this.camMat = camMat.clone();
		this.templatePic = templatePic.clone();
		this.templatePic_resized = new Mat();
		Imgproc.resize(templatePic, this.templatePic_resized, new Size(256, 256));
		final GLProfile profile = GLProfile.get(GLProfile.GL2);
		GLCapabilities capabilities = new GLCapabilities(profile);

		glcanvas = new GLCanvas(capabilities);
		glcanvas.addGLEventListener(gel);
		glcanvas.setSize(800, 600);

		final JFrame frame = new JFrame();

		frame.getContentPane().add(glcanvas);
		frame.setSize(frame.getContentPane().getPreferredSize());
		frame.setVisible(true);

	}

	protected static Mat buildProjectionMatrix(Mat camMat, int screen_width, int screen_height) {
		Mat result = Mat.zeros(4, 4, CvType.CV_32F);
		float nearPlane = 0.01f; // Near clipping distance
		float farPlane = 100.0f; // Far clipping distance

		// Camera parameters
		float f_x = (float) camMat.get(0, 0)[0];
		float f_y = (float) camMat.get(1, 1)[0];
		float c_x = (float) camMat.get(0, 2)[0];
		float c_y = (float) camMat.get(1, 2)[0];

		result.put(0, 0, -2.0f * f_x / screen_width);
		result.put(1, 1, 2.0f * f_y / screen_height);
		result.put(2, 0, 2.0f * c_x / screen_width - 1.0f, 2.0f * c_y / screen_height - 1.0f,
				-(farPlane + nearPlane) / (farPlane - nearPlane), -1.0f);
		result.put(3, 2, -2.0f * farPlane * nearPlane / (farPlane - nearPlane));
		return result;
	}

	protected void drawBackground(GL2 gl) {

		byte[] data = ImUtils.get8UMatData(pic);

		gl.glPixelStorei(GL2.GL_PACK_ALIGNMENT, 1);
		gl.glBindTexture(GL2.GL_TEXTURE_2D, textureIndexs[0]);
		gl.glTexImage2D(GL2.GL_TEXTURE_2D, 0, GL2.GL_RGB, pic.width(), pic.height(), 0, GL2.GL_BGR,
				GL2.GL_UNSIGNED_BYTE, ByteBuffer.wrap(data));

		float[] bgTextureVertices = { 0, 0, pic.width(), 0, 0, pic.height(), pic.width(), pic.height() };
		float[] bgTextureCoords = { 1, 0, 1, 1, 0, 0, 0, 1 };
		float[] proj = { 0, -2.f / pic.width(), 0, 0, -2.f / pic.height(), 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1 };
		gl.glMatrixMode(GL2.GL_PROJECTION);
		gl.glLoadMatrixf(proj, 0);
		gl.glMatrixMode(GL2.GL_MODELVIEW);
		gl.glLoadIdentity();
		gl.glEnable(GL2.GL_TEXTURE_2D);
		gl.glBindTexture(GL2.GL_TEXTURE_2D, textureIndexs[0]);
		gl.glEnableClientState(GL2.GL_VERTEX_ARRAY);
		gl.glEnableClientState(GL2.GL_TEXTURE_COORD_ARRAY);

		gl.glVertexPointer(2, GL2.GL_FLOAT, 0, makeFloatBuffer(bgTextureVertices));
		gl.glTexCoordPointer(2, GL2.GL_FLOAT, 0, makeFloatBuffer(bgTextureCoords));

		gl.glColor4f(1, 1, 1, 1);
		gl.glDrawArrays(GL2.GL_TRIANGLE_STRIP, 0, 4);

		gl.glDisableClientState(GL2.GL_VERTEX_ARRAY);
		gl.glDisableClientState(GL2.GL_TEXTURE_COORD_ARRAY);
		gl.glDisable(GL2.GL_TEXTURE_2D);
	}

	protected float tempalteRot = 0.0f;

	protected void drawTemplatePlane(GL2 gl) {

		byte[] data = ImUtils.get8UMatData(templatePic_resized);

		gl.glPixelStorei(GL2.GL_PACK_ALIGNMENT, 1);
		gl.glBindTexture(GL2.GL_TEXTURE_2D, textureIndexs[1]);
		gl.glTexImage2D(GL2.GL_TEXTURE_2D, 0, GL2.GL_RGB, templatePic_resized.width(), templatePic_resized.height(), 0,
				GL2.GL_BGR, GL2.GL_UNSIGNED_BYTE, ByteBuffer.wrap(data));

		float[] bgTextureVertices = { 0, 0, 1.5f, -0.75f, 0, 0.75f, 0.75f, 0, 0.75f, 0, 0, 0 };
		float[] bgTextureCoords = { 0, 0, 1, 0, 0, 1, 1, 1 };
		gl.glMatrixMode(GL2.GL_MODELVIEW);
		gl.glPushMatrix();
		gl.glTranslatef(-templatePic.width() / scale / 2f, -templatePic.height() / scale / 2f, 0);
		gl.glRotatef(tempalteRot = tempalteRot + 10, 0, 0, 1);

		gl.glEnable(GL2.GL_TEXTURE_2D);
		gl.glBindTexture(GL2.GL_TEXTURE_2D, textureIndexs[1]);
		gl.glEnableClientState(GL2.GL_VERTEX_ARRAY);
		gl.glEnableClientState(GL2.GL_TEXTURE_COORD_ARRAY);

		gl.glVertexPointer(3, GL2.GL_FLOAT, 0, makeFloatBuffer(bgTextureVertices));
		gl.glTexCoordPointer(2, GL2.GL_FLOAT, 0, makeFloatBuffer(bgTextureCoords));

		gl.glColor4f(1, 1, 1, 1);
		gl.glDrawArrays(GL2.GL_TRIANGLE_STRIP, 0, 4);

		gl.glDisableClientState(GL2.GL_VERTEX_ARRAY);
		gl.glDisableClientState(GL2.GL_TEXTURE_COORD_ARRAY);
		gl.glDisable(GL2.GL_TEXTURE_2D);

		gl.glPopMatrix();
	}

	protected static void drawCoord(GL2 gl) {
		float lineX[] = { 0, 0, 0, -1, 0, 0 };
		float lineY[] = { 0, 0, 0, 0, -1, 0 };
		float lineZ[] = { 0, 0, 0, 0, 0, 1 };

		gl.glLineWidth(2);

		gl.glBegin(GL2.GL_LINES);

		gl.glColor3f(1.0f, 0.0f, 0.0f);
		gl.glVertex3fv(lineX, 0);
		gl.glVertex3fv(lineX, 3);

		gl.glColor3f(0.0f, 1.0f, 0.0f);
		gl.glVertex3fv(lineY, 0);
		gl.glVertex3fv(lineY, 3);

		gl.glColor3f(0.0f, 0.0f, 1.0f);
		gl.glVertex3fv(lineZ, 0);
		gl.glVertex3fv(lineZ, 3);

		gl.glEnd();
	}

	protected static FloatBuffer makeFloatBuffer(float[] arr) {
		ByteBuffer bb = ByteBuffer.allocateDirect(arr.length * 4);
		bb.order(ByteOrder.nativeOrder());
		FloatBuffer fb = bb.asFloatBuffer();
		fb.put(arr);
		fb.position(0);
		return fb;
	}
}

redpajama_set_name: RedPajamaGithub


text:
Site search Researcher
グローバルナビゲーション(英語)
Operations and future plans
Living in Kyoto
Health, safety, and environment
Study at KyotoU
Visa/tuition/scholarships/housing
Research & Collaborate
Research support and scholorship
Visa/Housing/Daily Life
Research compliance & ethics
Global KyotoU
Global profile
International risk & crisis management
Global University Social Responsibility
KyotoU International Concierge and information resources manager
ヘッダー プライマリーリンク(英語)
Current Students & Staff
ヘッダー セカンダリーリンク(日本語以外)
A stellar explosion caught a birth
Corporations & Researchers
The first moment of a supernova captured by an amateur astronomer
An international team of researchers, including Keiichi Maeda from Kyoto University's Department of Astronomy, reported evidence for the detection of the first light from a supernova, the so-called shock breakout. The result was reported in the journal Nature .
This moment of a supernova becoming visible in the sky was captured by an amateur astronomer, and has helped the team validate theoretical predictions about the initial evolution of such stellar explosions.
How the structure of a star affects its supernova explosion properties has remained an open question, and understanding it would be a significant step forward in astrophysics research. Current theory suggests an explosive shockwave travels through the star's interior before reaching the surface, producing a sharp peak of electromagnetic emissions.
The strength and duration of this signal, known as shock breakout is believed to largely depend on the outer structure of the star and on the presence or absence of matter around it. However, testing this theory requires the observation of the exact moment a star becomes a supernova.
Melina Bersten, a researcher at the National Scientific and Technical Research Council-Argentina, had said the chances of capturing such an event are slim.
"If we think that on average each galaxy roughly produces one supernova per century, and that a century contains nearly 900 thousand hours, then the chance of observing the right galaxy at the right moment is not much greater than one in a million. However, the actual chances are smaller, at least down to one in ten million. One needs to take into account the facts that we can only see the galaxy during the night time and that the sky must be clear."
Luckily, on September 20, 2016, amateur astronomer Víctor Buso from Rosario, Argentina, was testing his new camera on his rooftop observatory in hopes of photographing his first supernova. After an hour of taking images Buso noticed a new object had appeared, and it became more obvious with time. He had captured the moment a supernova had exploded!
Named SN 2016gkg, a team of researchers led by Bersten, analyzed the images. The rapid brightening rate combined with a very low luminosity had no analogue among known supernovae, and the team concluded Buso had discovered SN 2016gkg during a shock breakout.
"When Buso told us how he had observed and what he had witnessed, we realized this was a unique finding," said Bersten.
By comparing the photometry of the images with their computer simulations, the team found an initial sharp rise in supernova light that could only be explained by shock emergence
"To our surprise, images had a great quality considering they were obtained from the middle of a large city in the midst of the pampas", notes Dr. Gastón Folatelli from IALP, who led the data analysis. He adds "sky conditions seem to have been nearly ideal on that night!"
Their conclusion was supported by the fact that the models required no modification in order to consistently reproduce the initial rise and the rest of the supernova evolution. Moreover, SN 2016gkg happened to be a rather ordinary event, which would imply that the observed phase is common to all supernovae.
Illustration of a shock breakout
Dr. Keiichi Maeda
Sequence of combined images obtained by Víctor Buso as SN 2016gkg arises in the outskirts of galaxy NGC 613. Labels indicate the time each image was taken. The supernova location is indicated by the red circles. Notably the supernova appears and stabrightens and steadily brightens within one hour, as shown in the lower-right panel.
Observed light curve of SN 2016gkg (dots) and explosion model (red line). The model reproduces three distinct phases in the supernova evolution that occur on different time scales. First, the shock breakout (with a time scale of hours), then the post-shock cooling emission (days), and finally the emission due to radioactive heating (weeks). Buso's discovery observations, shown in blue, indicate such a rapid rise that can only be attributed to the shock breakout.
【DOI】 https://doi.org/10.1038/nature25151
M. C. Bersten, G. Folatelli, F. García, S. D. Van Dyk, O. G. Benvenuto, M. Orellana, V. Buso, J. L. Sánchez, M. Tanaka, K. Maeda, A. V. Filippenko, W. Zheng, T. G. Brink, S. B. Cenko, T. de Jaeger, S. Kumar, T. J. Moriya, K. Nomoto, D. A. Perley, I. Shivvers & N. Smith (2018). A surge of light at the birth of a supernova. Nature, 554, 497–499.
Share on Facebook Share on Twitter Share via E-mail
iCeMS makes highly conductive antiperovskites with soft anion lattices
Large transporter protein linked to schizophrenia
Protein twist and squeeze confers cancer drug resistance
The ABCs of species evolution
More research news
〒606-8501 Yoshida-honmachi, Sakyo-ku, Kyoto-shi, Kyoto JAPAN
Safety Confirmation System
Staff portal (in Japanese)

redpajama_set_name: RedPajamaCommonCrawl


LAGOS, Nigeria, September 17, 2018/ — Africa's premier fintech event, the Africa Fintech Summit, (www.AfricaFintechSummit.com) will be held for the first time in Lagos, Nigeria, on November 8-9, 2018. This event comes on the heels of the earlier edition in Washington D.C. which featured leading policy makers, c-suite business executives, start-ups, and investors.
Reacting to the decision to host the Summit in Lagos, the Senior Special Assistant to the President on Technology, Lanre Osibona, stated, "This reflects the progress Nigeria is making in the areas of technology and financial services.


The key to rebuilding the region's economy is to build on companies and workers already here, a researcher from Northern Illinois University told leaders from three states tonight.
Read the rest of this story at BusinessRockford.com. Scroll to the bottom of the page to leave a comment.


text:
//-----------------------------------------------------------------------------
// Product:     OpenCTM
// File:        openctm.h
// Description: OpenCTM API definition.
//-----------------------------------------------------------------------------
// Copyright (c) 2009-2010 Marcus Geelnard
//
// This software is provided 'as-is', without any express or implied
// warranty. In no event will the authors be held liable for any damages
// arising from the use of this software.
//
// Permission is granted to anyone to use this software for any purpose,
// including commercial applications, and to alter it and redistribute it
// freely, subject to the following restrictions:
//
//     1. The origin of this software must not be misrepresented; you must not
//     claim that you wrote the original software. If you use this software
//     in a product, an acknowledgment in the product documentation would be
//     appreciated but is not required.
//
//     2. Altered source versions must be plainly marked as such, and must not
//     be misrepresented as being the original software.
//
//     3. This notice may not be removed or altered from any source
//     distribution.
//-----------------------------------------------------------------------------

#ifndef __OPENCTM_H_
#define __OPENCTM_H_

/*! @mainpage OpenCTM API Reference
 *
 * @section intro_sec Introduction
 *
 * OpenCTM is an open file format for storing compressed triangle meshes.
 * In order to easily read and write OpenCTM files (usually suffixed .ctm) an
 * API (Application Program Interface) is provided that can easily be used from
 * most modern programming languages.
 *
 * The OpenCTM functionality itself is written in highly portable standard C
 * (C99).
 *
 * @section usage_sec Usage
 *
 * For information about how to use the OpenCTM API, see openctm.h.
 *
 * For information about the C++ wrapper classes, see CTMimporter and
 * CTMexporter.
 *
 * @section example_sec Example usage
 *
 * @subsection example_load_sec Loading a CTM file
 *
 * Here is a simple example of loading a CTM file:
 *
 * @code
 *   CTMcontext context;
 *   CTMuint    vertCount, triCount, * indices;
 *   CTMfloat   * vertices;
 *
 *   // Create a new context
 *   context = ctmNewContext(CTM_IMPORT);
 *
 *   // Load the OpenCTM file
 *   ctmLoad(context, "mymesh.ctm");
 *   if(ctmGetError(context) == CTM_NONE)
 *   {
 *     // Access the mesh data
 *     vertCount = ctmGetInteger(context, CTM_VERTEX_COUNT);
 *     vertices = ctmGetFloatArray(context, CTM_VERTICES);
 *     triCount = ctmGetInteger(context, CTM_TRIANGLE_COUNT);
 *     indices = ctmGetIntegerArray(context, CTM_INDICES);
 *
 *     // Deal with the mesh (e.g. transcode it to our internal representation)
 *     // ...
 *   }
 *
 *   // Free the context
 *   ctmFreeContext(context);
 * @endcode
 *
 * @subsection example_create_sec Creating a CTM file
 *
 * Here is a simple example of creating a CTM file:
 *
 * @code
 *   CTMcontext context;
 *   CTMuint    vertCount, triCount, * indices;
 *   CTMfloat   * vertices;
 *
 *   // Create our mesh in memory
 *   vertCount = 100;
 *   triCount = 120;
 *   vertices = (CTMfloat *) malloc(3 * sizeof(CTMfloat) * vertCount);
 *   indices = (CTMuint *) malloc(3 * sizeof(CTMuint) * triCount);
 *   // ...
 *
 *   // Create a new context
 *   context = ctmNewContext(CTM_EXPORT);
 *
 *   // Define our mesh representation to OpenCTM (store references to it in
 *   // the context)
 *   ctmDefineMesh(context, vertices, vertCount, indices, triCount, NULL);
 *
 *   // Save the OpenCTM file
 *   ctmSave(context, "mymesh.ctm");
 *
 *   // Free the context
 *   ctmFreeContext(context);
 *
 *   // Free our mesh
 *   free(indices);
 *   free(vertices);
 * @endcode
 */

#ifdef __cplusplus
extern "C" {
#endif

// Declare calling conventions etc.
#if defined(WIN32) || defined(_WIN32)
  // Windows
  #if defined(OPENCTM_STATIC)
    #define CTMEXPORT
  #else
    #if defined(OPENCTM_BUILD)
      #define CTMEXPORT __declspec(dllexport)
    #else
      #define CTMEXPORT __declspec(dllimport)
    #endif
  #endif
  #if defined(__MINGW32__)
    #define CTMCALL __attribute__ ((__stdcall__))
  #elif (defined(_M_MRX000) || defined(_M_IX86) || defined(_M_ALPHA) || defined(_M_PPC)) && !defined(MIDL_PASS)
    #define CTMCALL __stdcall
  #else
    #define CTMCALL
  #endif
#else
  // Unix
  #if !defined(OPENCTM_STATIC) && !defined(OPENCTM_BUILD)
    #define CTMEXPORT extern
  #else
    #if defined(OPENCTM_BUILD) && defined(__GNUC__) && (__GNUC__ >= 4)
      #define CTMEXPORT __attribute__ ((visibility("default")))
    #else
      #define CTMEXPORT
    #endif
  #endif
  #define CTMCALL
#endif

// Get system specific type definitions for sized integers. We use the C99
// standard stdint.h for this.
#ifdef _MSC_VER
  // MS Visual Studio does not support C99
  typedef int int32_t;
  typedef unsigned int uint32_t;
#else
  #include <stdint.h>
#endif

/// OpenCTM API version (1.0).
#define CTM_API_VERSION 0x00000100

/// Boolean TRUE.
#define CTM_TRUE 1

/// Boolean FALSE.
#define CTM_FALSE 0

/// Single precision floating point type (IEEE 754 32 bits wide).
typedef float CTMfloat;

/// Signed integer (32 bits wide).
typedef int32_t CTMint;

/// Unsigned integer (32 bits wide).
typedef uint32_t CTMuint;

/// OpenCTM context handle.
typedef void * CTMcontext;

/// OpenCTM specific enumerators.
/// @note For the information query functions, it is an error to query a value
///       of the wrong type (e.g. to query a string value with the
///       ctmGetInteger() function).
typedef enum {
  // Error codes (see ctmGetError())
  CTM_NONE              = 0x0000, ///< No error has occured (everything is OK).
                                  ///  Also used as an error return value for
                                  ///  functions that should return a CTMenum
                                  ///  value.
  CTM_INVALID_CONTEXT   = 0x0001, ///< The OpenCTM context was invalid (e.g. NULL).
  CTM_INVALID_ARGUMENT  = 0x0002, ///< A function argument was invalid.
  CTM_INVALID_OPERATION = 0x0003, ///< The operation is not allowed.
  CTM_INVALID_MESH      = 0x0004, ///< The mesh was invalid (e.g. no vertices).
  CTM_OUT_OF_MEMORY     = 0x0005, ///< Not enough memory to proceed.
  CTM_FILE_ERROR        = 0x0006, ///< File I/O error.
  CTM_BAD_FORMAT        = 0x0007, ///< File format error (e.g. unrecognized format or corrupted file).
  CTM_LZMA_ERROR        = 0x0008, ///< An error occured within the LZMA library.
  CTM_INTERNAL_ERROR    = 0x0009, ///< An internal error occured (indicates a bug).
  CTM_UNSUPPORTED_FORMAT_VERSION = 0x000A, ///< Unsupported file format version.

  // OpenCTM context modes
  CTM_IMPORT            = 0x0101, ///< The OpenCTM context will be used for importing data.
  CTM_EXPORT            = 0x0102, ///< The OpenCTM context will be used for exporting data.

  // Compression methods
  CTM_METHOD_RAW        = 0x0201, ///< Just store the raw data.
  CTM_METHOD_MG1        = 0x0202, ///< Lossless compression (floating point).
  CTM_METHOD_MG2        = 0x0203, ///< Lossless compression (fixed point).

  // Context queries
  CTM_VERTEX_COUNT      = 0x0301, ///< Number of vertices in the mesh (integer).
  CTM_TRIANGLE_COUNT    = 0x0302, ///< Number of triangles in the mesh (integer).
  CTM_HAS_NORMALS       = 0x0303, ///< CTM_TRUE if the mesh has normals (integer).
  CTM_UV_MAP_COUNT      = 0x0304, ///< Number of UV coordinate sets (integer).
  CTM_ATTRIB_MAP_COUNT  = 0x0305, ///< Number of custom attribute sets (integer).
  CTM_VERTEX_PRECISION  = 0x0306, ///< Vertex precision - for MG2 (float).
  CTM_NORMAL_PRECISION  = 0x0307, ///< Normal precision - for MG2 (float).
  CTM_COMPRESSION_METHOD = 0x0308, ///< Compression method (integer).
  CTM_FILE_COMMENT      = 0x0309, ///< File comment (string).

  // UV/attribute map queries
  CTM_NAME              = 0x0501, ///< Unique name (UV/attrib map string).
  CTM_FILE_NAME         = 0x0502, ///< File name reference (UV map string).
  CTM_PRECISION         = 0x0503, ///< Value precision (UV/attrib map float).

  // Array queries
  CTM_INDICES           = 0x0601, ///< Triangle indices (integer array).
  CTM_VERTICES          = 0x0602, ///< Vertex point coordinates (float array).
  CTM_NORMALS           = 0x0603, ///< Per vertex normals (float array).
  CTM_UV_MAP_1          = 0x0700, ///< Per vertex UV map 1 (float array).
  CTM_UV_MAP_2          = 0x0701, ///< Per vertex UV map 2 (float array).
  CTM_UV_MAP_3          = 0x0702, ///< Per vertex UV map 3 (float array).
  CTM_UV_MAP_4          = 0x0703, ///< Per vertex UV map 4 (float array).
  CTM_UV_MAP_5          = 0x0704, ///< Per vertex UV map 5 (float array).
  CTM_UV_MAP_6          = 0x0705, ///< Per vertex UV map 6 (float array).
  CTM_UV_MAP_7          = 0x0706, ///< Per vertex UV map 7 (float array).
  CTM_UV_MAP_8          = 0x0707, ///< Per vertex UV map 8 (float array).
  CTM_ATTRIB_MAP_1      = 0x0800, ///< Per vertex attribute map 1 (float array).
  CTM_ATTRIB_MAP_2      = 0x0801, ///< Per vertex attribute map 2 (float array).
  CTM_ATTRIB_MAP_3      = 0x0802, ///< Per vertex attribute map 3 (float array).
  CTM_ATTRIB_MAP_4      = 0x0803, ///< Per vertex attribute map 4 (float array).
  CTM_ATTRIB_MAP_5      = 0x0804, ///< Per vertex attribute map 5 (float array).
  CTM_ATTRIB_MAP_6      = 0x0805, ///< Per vertex attribute map 6 (float array).
  CTM_ATTRIB_MAP_7      = 0x0806, ///< Per vertex attribute map 7 (float array).
  CTM_ATTRIB_MAP_8      = 0x0807  ///< Per vertex attribute map 8 (float array).
} CTMenum;

/// Stream read() function pointer.
/// @param[in] aBuf Pointer to the memory buffer to which data should be read.
/// @param[in] aCount The number of bytes to read.
/// @param[in] aUserData The custom user data that was passed to the
///            ctmLoadCustom() function.
/// @return The number of bytes actually read (if this is less than aCount, it
///         indicates that an error occured or the end of file was reached
///         before all bytes were read).
typedef CTMuint (CTMCALL * CTMreadfn)(void * aBuf, CTMuint aCount, void * aUserData);

/// Stream write() function pointer.
/// @param[in] aBuf Pointer to the memory buffer from which data should be written.
/// @param[in] aCount The number of bytes to write.
/// @param[in] aUserData The custom user data that was passed to the
///            ctmSaveCustom() function.
/// @return The number of bytes actually written (if this is less than aCount, it
///         indicates that an error occured).
typedef CTMuint (CTMCALL * CTMwritefn)(const void * aBuf, CTMuint aCount, void * aUserData);

/// Create a new OpenCTM context. The context is used for all subsequent
/// OpenCTM function calls. Several contexts can coexist at the same time.
/// @param[in] aMode An OpenCTM context mode. Set this to CTM_IMPORT if the
///            context will be used for importing data, or set it to CTM_EXPORT
///            if it will be used for exporting data.
/// @return An OpenCTM context handle (or NULL if no context could be created).
CTMEXPORT CTMcontext CTMCALL ctmNewContext(CTMenum aMode);

/// Free an OpenCTM context.
/// @param[in] aContext An OpenCTM context that has been created by
///            ctmNewContext().
/// @see ctmNewContext()
CTMEXPORT void CTMCALL ctmFreeContext(CTMcontext aContext);

/// Returns the latest error. Calling this function will return the last
/// produced error code, or CTM_NO_ERROR (zero) if no error has occured since
/// the last call to ctmGetError(). When this function is called, the internal
/// error varibale will be reset to CTM_NONE.
/// @param[in] aContext An OpenCTM context that has been created by
///            ctmNewContext().
/// @return An OpenCTM error code.
/// @see CTMenum
CTMEXPORT CTMenum CTMCALL ctmGetError(CTMcontext aContext);

/// Converts an OpenCTM error code to a zero-terminated string.
/// @param[in] aError An OpenCTM error code, as returned by ctmGetError().
/// @return A zero terminated string that describes the error. For instance,
///         if \c aError is CTM_INVALID_OPERATION, then the return value will
///         be "CTM_INVALID_OPERATION".
/// @see CTMenum
CTMEXPORT const char * CTMCALL ctmErrorString(CTMenum aError);

/// Get information about an OpenCTM context.
/// @param[in] aContext An OpenCTM context that has been created by
///            ctmNewContext().
/// @param[in] aProperty Which property to return.
/// @return An integer value, representing the OpenCTM context property given
///         by \c aProperty.
/// @see CTMenum
CTMEXPORT CTMuint CTMCALL ctmGetInteger(CTMcontext aContext, CTMenum aProperty);

/// Get information about an OpenCTM context.
/// @param[in] aContext An OpenCTM context that has been created by
///            ctmNewContext().
/// @param[in] aProperty Which property to return.
/// @return A floating point value, representing the OpenCTM context property
///         given by \c aProperty.
/// @see CTMenum
CTMEXPORT CTMfloat CTMCALL ctmGetFloat(CTMcontext aContext, CTMenum aProperty);

/// Get an integer array from an OpenCTM context.
/// @param[in] aContext An OpenCTM context that has been created by
///             ctmNewContext().
/// @param[in] aProperty Which array to return.
/// @return An integer array. If the requested array does not exist, or
///         if \c aProperty does not indicate an integer array, the function
///         returns NULL.
/// @note The array is only valid as long as the OpenCTM context is valid, or
///       until the corresponding array changes within the OpenCTM context.
///       Trying to access an invalid array will result in undefined
///       behaviour. Therefor it is recommended that the array is copied to
///       a new variable if it is to be used other than directly after the call
///       to ctmGetIntegerArray().
/// @see CTMenum
CTMEXPORT const CTMuint * CTMCALL ctmGetIntegerArray(CTMcontext aContext,
  CTMenum aProperty);

/// Get a floating point array from an OpenCTM context.
/// @param[in] aContext An OpenCTM context that has been created by
///            ctmNewContext().
/// @param[in] aProperty Which array to return.
/// @return A floating point array. If the requested array does not exist, or
///         if \c aProperty does not indicate a float array, the function
///         returns NULL.
/// @note The array is only valid as long as the OpenCTM context is valid, or
///       until the corresponding array changes within the OpenCTM context.
///       Trying to access an invalid array will result in undefined
///       behaviour. Therefor it is recommended that the array is copied to
///       a new variable if it is to be used other than directly after the call
///       to ctmGetFloatArray().
/// @see CTMenum
CTMEXPORT const CTMfloat * CTMCALL ctmGetFloatArray(CTMcontext aContext,
  CTMenum aProperty);

/// Get a reference to the named UV map.
/// @param[in] aContext An OpenCTM context that has been created by
///            ctmNewContext().
/// @param[in] aName The name of the UV map that should be returned.
/// @return A reference to a UV map. If the UV map was found, a value of
///         CTM_UV_MAP_1 or higher is returned, otherwise CTM_NONE is
///         returned.
CTMEXPORT CTMenum CTMCALL ctmGetNamedUVMap(CTMcontext aContext,
  const char * aName);

/// Get information about a UV map.
/// @param[in] aContext An OpenCTM context that has been created by
///            ctmNewContext().
/// @param[in] aUVMap Which UV map to query (CTM_UV_MAP_1 or higher).
/// @param[in] aProperty Which UV map property to return.
/// @return A string value, representing the UV map property given
///         by \c aProperty.
/// @note The string is only valid as long as the UV map within the OpenCTM
///       context is valid. Trying to access an invalid string will result in
///       undefined behaviour. Therefor it is recommended that the string is
///       copied to a new variable if it is to be used other than directly after
///       the call to ctmGetUVMapString().
/// @see CTMenum
CTMEXPORT const char * CTMCALL ctmGetUVMapString(CTMcontext aContext,
  CTMenum aUVMap, CTMenum aProperty);

/// Get information about a UV map.
/// @param[in] aContext An OpenCTM context that has been created by
///            ctmNewContext().
/// @param[in] aUVMap Which UV map to query (CTM_UV_MAP_1 or higher).
/// @param[in] aProperty Which UV map property to return.
/// @return A floating point value, representing the UV map property given
///         by \c aProperty.
/// @see CTMenum
CTMEXPORT CTMfloat CTMCALL ctmGetUVMapFloat(CTMcontext aContext,
  CTMenum aUVMap, CTMenum aProperty);

/// Get a reference to the named vertex attribute map.
/// @param[in] aContext An OpenCTM context that has been created by
///            ctmNewContext().
/// @param[in] aName The name of the attribute map that should be returned.
/// @return A reference to an attribute map. If the attribute map was found,
///         a value of CTM_ATTRIB_MAP_1 or higher is returned, otherwise
///         CTM_NONE is returned.
CTMEXPORT CTMenum CTMCALL ctmGetNamedAttribMap(CTMcontext aContext,
  const char * aName);

/// Get information about a vertex attribute map.
/// @param[in] aContext An OpenCTM context that has been created by
///            ctmNewContext().
/// @param[in] aAttribMap Which vertex attribute map to query (CTM_ATTRIB_MAP_1
///            or higher).
/// @param[in] aProperty Which vertex attribute map property to return.
/// @return A string value, representing the vertex attribute map property given
///         by \c aProperty.
/// @note The string is only valid as long as the vertex attribute map within
///       the OpenCTM context is valid. Trying to access an invalid string will
///       result in undefined behaviour. Therefor it is recommended that the
///       string is copied to a new variable if it is to be used other than
///       directly after the call to ctmGetAttribMapString().
/// @see CTMenum
CTMEXPORT const char * CTMCALL ctmGetAttribMapString(CTMcontext aContext,
  CTMenum aAttribMap, CTMenum aProperty);

/// Get information about a vertex attribute map.
/// @param[in] aContext An OpenCTM context that has been created by
///            ctmNewContext().
/// @param[in] aAttribMap Which vertex attribute map to query (CTM_ATTRIB_MAP_1
///            or higher).
/// @param[in] aProperty Which vertex attribute map property to return.
/// @return A floating point value, representing the vertex attribute map
///         property given by \c aProperty.
/// @see CTMenum
CTMEXPORT CTMfloat CTMCALL ctmGetAttribMapFloat(CTMcontext aContext,
  CTMenum aAttribMap, CTMenum aProperty);

/// Get information about an OpenCTM context.
/// @param[in] aContext An OpenCTM context that has been created by
///            ctmNewContext().
/// @param[in] aProperty Which property to return.
/// @return A string value, representing the OpenCTM context property given
///         by \c aProperty.
/// @note The string is only valid as long as the OpenCTM context is valid, or
///       until the corresponding string changes within the OpenCTM context
///       (e.g. calling ctmFileComment() invalidates the CTM_FILE_COMMENT
///       string). Trying to access an invalid string will result in undefined
///       behaviour. Therefor it is recommended that the string is copied to
///       a new variable if it is to be used other than directly after the call
///       to ctmGetString().
/// @see CTMenum
CTMEXPORT const char * CTMCALL ctmGetString(CTMcontext aContext,
  CTMenum aProperty);

/// Set which compression method to use for the given OpenCTM context.
/// The selected compression method will be used when calling the ctmSave()
/// function.
/// @param[in] aContext An OpenCTM context that has been created by
///            ctmNewContext().
/// @param[in] aMethod Which compression method to use: CTM_METHOD_RAW,
///            CTM_METHOD_MG1 or CTM_METHOD_MG2 (the default method is
///            CTM_METHOD_MG1).
/// @see CTM_METHOD_RAW, CTM_METHOD_MG1, CTM_METHOD_MG2
CTMEXPORT void CTMCALL ctmCompressionMethod(CTMcontext aContext,
  CTMenum aMethod);

/// Set which LZMA compression level to use for the given OpenCTM context.
/// The compression level can be between 0 (fastest) and 9 (best). The higher
/// the compression level, the more memory is required for compression and
/// decompression. The default compression level is 1.
/// @param[in] aContext An OpenCTM context that has been created by
///            ctmNewContext().
/// @param[in] aLevel Which compression level to use (0 to 9).
CTMEXPORT void CTMCALL ctmCompressionLevel(CTMcontext aContext,
  CTMuint aLevel);

/// Set the vertex coordinate precision (only used by the MG2 compression
/// method).
/// @param[in] aContext An OpenCTM context that has been created by
///            ctmNewContext().
/// @param[in] aPrecision Fixed point precision. For instance, if this value is
///            0.001, all vertex coordinates will be rounded to three decimals.
///            The default vertex coordinate precision is 2^-10 ~= 0.00098.
CTMEXPORT void CTMCALL ctmVertexPrecision(CTMcontext aContext,
  CTMfloat aPrecision);

/// Set the vertex coordinate precision, relative to the mesh dimensions (only
/// used by the MG2 compression method).
/// @param[in] aContext An OpenCTM context that has been created by
///            ctmNewContext().
/// @param[in] aRelPrecision Relative precision. This factor is multiplied by the
///            average triangle edge length in the mesh in order to obtain the
///            final, fixed point precision. For instance, if aRelPrecision is
///            0.01, and the average edge length is 3.7, then the fixed point
///            precision is set to 0.037.
/// @note The mesh must have been defined using the ctmDefineMesh() function
///       before calling this function.
/// @see ctmVertexPrecision().
CTMEXPORT void CTMCALL ctmVertexPrecisionRel(CTMcontext aContext,
  CTMfloat aRelPrecision);

/// Set the normal precision (only used by the MG2 compression method). The
/// normal is represented in spherical coordinates in the MG2 compression
/// method, and the normal precision controls the angular and radial resolution.
/// @param[in] aContext An OpenCTM context that has been created by
///            ctmNewContext().
/// @param[in] aPrecision Fixed point precision. For the angular information,
///            this value represents the angular precision. For the radial
///            information, this value is the linear resolution. For instance,
///            0.01 means that the circle is divided into 100 steps, and the
///            normal magnitude is rounded to 2 decimals. The default normal
///            precision is 2^-8 ~= 0.0039.
CTMEXPORT void CTMCALL ctmNormalPrecision(CTMcontext aContext,
  CTMfloat aPrecision);

/// Set the coordinate precision for the specified UV map (only used by the
/// MG2 compression method).
/// @param[in] aContext An OpenCTM context that has been created by
///            ctmNewContext().
/// @param[in] aUVMap A UV map specifier for a defined UV map
///            (CTM_UV_MAP_1, ...).
/// @param[in] aPrecision Fixed point precision. For instance, if this value is
///            0.001, all UV coordinates will be rounded to three decimals.
///            The default UV coordinate precision is 2^-12 ~= 0.00024.
/// @see ctmAddUVMap().
CTMEXPORT void CTMCALL ctmUVCoordPrecision(CTMcontext aContext,
  CTMenum aUVMap, CTMfloat aPrecision);

/// Set the attribute value precision for the specified attribute map (only
/// used by the MG2 compression method).
/// @param[in] aContext An OpenCTM context that has been created by
///            ctmNewContext().
/// @param[in] aAttribMap An attribute map specifier for a defined attribute map
///            (CTM_ATTRIB_MAP_1, ...).
/// @param[in] aPrecision Fixed point precision. For instance, if this value is
///            0.001, all attribute values will be rounded to three decimals.
///            If the attributes represent integer values, set the precision
///            to 1.0. The default attribute precision is 2^-8 ~= 0.0039.
/// @see ctmAddAttribMap().
CTMEXPORT void CTMCALL ctmAttribPrecision(CTMcontext aContext,
  CTMenum aAttribMap, CTMfloat aPrecision);

/// Set the file comment for the given OpenCTM context.
/// @param[in] aContext An OpenCTM context that has been created by
///            ctmNewContext().
/// @param[in] aFileComment The file comment (zero terminated UTF-8 string).
CTMEXPORT void CTMCALL ctmFileComment(CTMcontext aContext,
  const char * aFileComment);

/// Define a triangle mesh.
/// @param[in] aContext An OpenCTM context that has been created by
///            ctmNewContext().
/// @param[in] aVertices An array of vertices (three consecutive floats make
///            one vertex).
/// @param[in] aVertexCount The number of vertices in \c aVertices (and
///            optionally \c aTexCoords).
/// @param[in] aIndices An array of vertex indices (three consecutive integers
///            make one triangle).
/// @param[in] aTriangleCount The number of triangles in \c aIndices (there
///            must be exactly 3 x \c aTriangleCount indices in \c aIndices).
/// @param[in] aNormals An array of per-vertex normals (or NULL if there are
///            no normals). Each normal is made up by three consecutive floats,
///            and there must be \c aVertexCount normals.
/// @see ctmAddUVMap(), ctmAddAttribMap(), ctmSave(), ctmSaveCustom().
CTMEXPORT void CTMCALL ctmDefineMesh(CTMcontext aContext,
  const CTMfloat * aVertices, CTMuint aVertexCount, const CTMuint * aIndices,
  CTMuint aTriangleCount, const CTMfloat * aNormals);

/// Define a UV map. There can be several UV maps in a mesh. A UV map is
/// typically used for 2D texture mapping.
/// @param[in] aContext An OpenCTM context that has been created by
///            ctmNewContext().
/// @param[in] aUVCoords An array of UV coordinates. Each UV coordinate is made
///            up by two consecutive floats, and there must be as many
///            coordinates as there are vertices in the mesh.
/// @param[in] aName A unique name for this UV map (zero terminated UTF-8
///            string).
/// @param[in] aFileName A reference to a image file (zero terminated
///            UTF-8 string). If no file name reference exists, pass NULL.
/// @return A UV map index (CTM_UV_MAP_1 and higher). If the function
///         failed, it will return the zero valued CTM_NONE (use ctmGetError()
///         to determine the cause of the error).
/// @note A triangle mesh must have been defined before calling this function,
///       since the number of vertices is defined by the triangle mesh.
/// @see ctmDefineMesh().
CTMEXPORT CTMenum CTMCALL ctmAddUVMap(CTMcontext aContext,
  const CTMfloat * aUVCoords, const char * aName, const char * aFileName);

/// Define a custom vertex attribute map. Custom vertex attributes can be used
/// for defining special per-vertex attributes, such as color, weight, ambient
/// occlusion factor, etc.
/// @param[in] aContext An OpenCTM context that has been created by
///            ctmNewContext().
/// @param[in] aAttribValues An array of attribute values. Each attribute value
///            is made up by four consecutive floats, and there must be as many
///            values as there are vertices in the mesh.
/// @param[in] aName A unique name for this attribute map (zero terminated UTF-8
///            string).
/// @return A attribute map index (CTM_ATTRIB_MAP_1 and higher). If the function
///         failed, it will return the zero valued CTM_NONE (use ctmGetError()
///         to determine the cause of the error).
/// @note A triangle mesh must have been defined before calling this function,
///       since the number of vertices is defined by the triangle mesh.
/// @see ctmDefineMesh().
CTMEXPORT CTMenum CTMCALL ctmAddAttribMap(CTMcontext aContext,
  const CTMfloat * aAttribValues, const char * aName);

/// Load an OpenCTM format file into the context. The mesh data can be retrieved
/// with the various ctmGet functions.
/// @param[in] aContext An OpenCTM context that has been created by
///            ctmNewContext().
/// @param[in] aFileName The name of the file to be loaded.
CTMEXPORT void CTMCALL ctmLoad(CTMcontext aContext, const char * aFileName);

/// Load an OpenCTM format file using a custom stream read function. The mesh
/// data can be retrieved with the various ctmGet functions.
/// @param[in] aContext An OpenCTM context that has been created by
///            ctmNewContext().
/// @param[in] aReadFn Pointer to a custom stream read function.
/// @param[in] aUserData Custom user data, which can be a C language FILE
///            handle, C++ istream object, or a custom object pointer
///            of any type. The user data pointer will be passed to the
///            custom stream read function.
/// @see CTMreadfn.
CTMEXPORT void CTMCALL ctmLoadCustom(CTMcontext aContext, CTMreadfn aReadFn,
  void * aUserData);

/// Save an OpenCTM format file. The mesh must have been defined by
/// ctmDefineMesh().
/// @param[in] aContext An OpenCTM context that has been created by
///            ctmNewContext().
/// @param[in] aFileName The name of the file to be saved.
CTMEXPORT void CTMCALL ctmSave(CTMcontext aContext, const char * aFileName);

/// Save an OpenCTM format file using a custom stream write function. The mesh
/// must have been defined by ctmDefineMesh().
/// @param[in] aContext An OpenCTM context that has been created by
///            ctmNewContext().
/// @param[in] aWriteFn Pointer to a custom stream write function.
/// @param[in] aUserData Custom user data, which can be a C language FILE
///            handle, C++ ostream object, or a custom object pointer
///            of any type. The user data pointer will be passed to the
///            custom stream write function.
/// @see CTMwritefn.
CTMEXPORT void CTMCALL ctmSaveCustom(CTMcontext aContext, CTMwritefn aWriteFn,
  void * aUserData);

#ifdef __cplusplus
}
#endif

// C++ extensions to the API (to disable C++ extensions, define OPENCTM_NO_CPP)
#if defined(__cplusplus) && !defined(OPENCTM_NO_CPP)
  #include "openctmpp.h"
#endif

#endif // __OPENCTM_H_


text:
The Personal and the Political: Reconciling Right and Left Perspectives
Galen Watts
I'd like to propose two theses which, together, identify the basic failings of the Left and Right in today's political landscape: the Left proposes political solutions to what are essentially personal problems, while the Right proposes personal solutions to fundamentally political problems.
I recently met a young man who grew up working class in a small Canadian town. Intelligent and able, he was the first in his family to get into university. Though dismayed when he learned he had to take out huge student loans in order to afford school, he dreamed of a better life for himself, so went for it. Having grown up in a rural area, he immediately felt out of place in the big city where his university was located. Moreover, in order to afford tuition and rent, he was forced to work a part-time job. He envied his peers, whose parents paid for their school and living expenses, allowing them more time to study. Yet, throughout his first year, he dutifully worked his job, studying in his spare time. In his second year, the sense of being out of place began to really affect him: by this time, he'd made few social connections and was struggling with depression. To cope, he took up binge drinking and occasional cocaine use. This allowed him to get through his classes. By graduation, he had racked up a massive student debt, despite having worked the entire four years. Worse still, he couldn't find a job in his field, so was forced to accept a job in the service industry—the fact that he could have got this job without a four-year degree was not lost on him, but he felt he had no choice. His parents couldn't help him financially, nor could they supply him with any professional connections that might advance his career. The first of his family to graduate from university, he couldn't believe he was now working a job he despised, with little hope of repaying his loans any time soon. Unable to shake the feeling that he was a failure, his alcohol and cocaine consumption rapidly increased from an occasional binge to everyday use. Over the next few years, his life fell apart. He lost his retail job for turning up to work drunk. He turned on his family, blaming his humble beginnings for his woes. And he fell into a pattern of getting physical with his girlfriend when under the influence. He ended up being court-ordered to attend a treatment centre for substance abuse, after being charged with a DUI.
Life narratives contain a degree of complexity that cannot be easily reduced to a single set of morals. But, in many ways, it is stories like these which set our political imaginations alight and trigger our social consciences. Consider how progressives and conservatives, respectively, might listen to a story such as this, and what lessons each would distil.
The Progressive Take
As I have argued elsewhere, progressives and leftists are primarily concerned with the role of social structures (laws, cultural norms, institutions) in individual outcomes. Their social theory leads them to view individuals' circumstances and decisions as principally determined by macro features of social life, as opposed to, say, personal intentions, and therefore tend to trace micro-level problems to structural causes.
We can identify a number of areas in which social institutions failed this young man. To begin with, his class background conferred a disadvantage regarding educational opportunity. Progressives would rightly view the burdens placed on him (having to take out large student loans and work part-time while in school) as at odds with social justice. (Progressives might also contend that the problems began long before this young man went to university, as the inequality his parents suffered was arguably the result of an unjust economic system). This economic disadvantage only increased the sense of cultural separation he experienced at university. Progressives might also argue that this young man should not be graduating university only to enter a workforce with few opportunities, and none that allow him to repay his loans. They would argue that getting a university education should not condemn a person to a life of debt—as it has for many millennials today , a situation that has rightly been denounced. Progressives might also argue that this young man should have been better supported—both at school and outside it—by various social services, such as mental health and counselling services, and pharmacare. They might also suggest the need for a cultural shift, whereby young men like him don't feel they have to suffer from depression and addiction in silence. Some might even advocate new ideals of masculinity and blame toxic masculinity for his mistreatment of his girlfriend. Progressives will not all agree on specific policy proposals, but they would agree that this situation calls for substantive structural, legal and cultural change. In short, the progressive take would identify political problems and attendant political solutions.
The Conservative Take
The conservative approach to social issues focuses on empowering individuals in ways that encourage them to take responsibility for their actions and develop character. Their social theory leads them to pay attention to where individuals fail in their decision-making or act irresponsibly.
The young man made a number of poor choices that led to his eventual downfall. He ought not have turned to alcohol and drugs to cope with his problems, as they offered a far from sustainable solution. Conservatives would argue that he should have exhibited more self-control, and found healthier ways to adapt to his circumstances. Another problem from the conservative perspective might be the young man's unwillingness to humbly accept his employment situation after graduating, or at least to recognize that going off the rails is likely to achieve nothing. Nevertheless, conservatives would probably have much more to say about this young man's choices upon his descent into self-destruction. They would probably point out that he was foolish to show up to work drunk, demonstrated a lack of gratitude and responsibility in blaming his parents for his troubles, and had no excuse for hitting his girlfriend. My guess is that many conservatives would be glad to see this young man placed in a facility where he will be taught to take responsibility for his past actions and control his emotions (of course, some may wish to see him receive harsher treatment). Thus, rather than pay attention to social structures, conservatives would likely view this young man as in dire need of moral reform. They would probably contend that he requires a healthy dose of humility, gratitude and responsibility, and deserves condemnation for his unruly behaviour. Some might also argue that such values would be best fostered by a voluntary association (perhaps religious in nature), which could act as both a source of moral accountability and of the belonging and community which the young man sorely lacks. The details of the conservative take are bound to differ from person to person, but such a view would likely focus on how this young man failed to make good choices and take responsibility for his actions. In sum, a conservative take would identify personal problems and attendant personal solutions.
Conclusion: Matching Like with Like
Progressive and conservative perspectives can both contribute to our social and political imaginations, however we must differentiate between levels of analysis. We need to first identify whether the issue we are dealing with is primarily personal or political in nature. One of the primary problems with both the Left and Right today is that they often endorse solutions drawn from the wrong level of analysis.
Since the 1970s, it has become commonplace among those on the Left to view the personal as political, but blurring the boundary between these concepts is incredibly unhelpful and politically unproductive.
For instance, progressive (political) solutions will do little to address the conservative (personal) problems now facing this young man in rehab. Structural social change will not help this young man overcome his addictions, nor will it help him overcome his resentment towards his family or avoid becoming physical with his girlfriend in future. Conservatives are surely right to say that these goals can only be accomplished if he takes responsibility for himself and works toward maturing as a person. Indeed, progressives often forget that, while systemic change may reduce (perhaps even stamp out) the kinds of problems this young man faces, it will do little for those who presently suffer from them. Thus framing these personal dilemmas as political not only obfuscates the self-work this young man has to engage in, but also denies the important differences between this and the structural and policy changes necessary to prevent a life history like his from being repeated.
Conversely, conservative (personal) solutions will do little to nothing to address the real (political) problems identified by progressives. For instance, the economic injustice he experienced is not addressed by encouraging this young man to take responsibility for himself. Indeed, one of the primary problems with endorsing conservative solutions without attention to progressive diagnoses and prescriptions is that they can occlude the need for the latter. While this young man might do well to humbly accept that he must now do the hard work of repairing the relationships he has abused, we —that is, society and the liberal democratic state—must also accept our collective responsibility for allowing him to slip through the cracks. In other words, while he ought to take responsibility for himself, we ought to take responsibility for reducing arbitrary disadvantages and creating just institutions.
Progressive and conservative approaches are not antithetical to one another, but complementary. We cannot have one without the other. They address two quite distinct levels of analysis — the personal and the political — which account for the two sides of society: the individual and the social. We would be wise to acknowledge that social and political issues almost always encompass both sides, and think more carefully, on a case by case basis, about how to disentangle one from the other. Doing so would create a world where personal problems receive personal solutions, while political problems receive political solutions.
Left-Wing Politics
Galen Watts is a Banting Postdoctoral Fellow based at KU Leuven's Centre for Sociological Research. His research interests include religion, culture, and politics.
Jordan Moss
Niall McCrae
Lee Lance says:
How was the young man in the example to know the job prospects for a given course of study? It's obviously unwise to take on debt to qualify for a job you cannot get, or a job that doesn't pay enough to justify the loan. One social solution is for the university or the government to publish information about degree (and training!) programs, the cost of the programs, the job opportunities upon graduation (including the likelihood of actually getting a job) and the expected pay.
The young man still needs the personal solution of taking the trouble to check that information and to pick a program that will actually get him a position, that he can actually do, that he can afford, and that will pay for itself. He might find that he would be better off as a plumber or electrician.
I think both social responsibility and personal responsibility are needed.
I have worked in educational settings as a participant (student or teacher) or as a semi-observer (note-taker) and I have noticed how the distinct aims of different political camps can bolster one another if only they allow it. Consider these three aims for classroom conduct:
1. Deference to authority
2. Respect between individuals
3. Consideration for marginalized groups
One could identify these aims as traditional conservative, classical liberal and social-democratic respectively. At a pinch '1' can exist all by itself but can result in a stultifying and overly restrictive atmosphere. '2' can exist by itself but only if the individuals involved already have a mature mindset. And it is very difficult for '3' to exist by itself among minors who tend to be fractious and filled with simplistic notions of how the world works (sometimes bolstered by the prejudiced attitudes of parents). These three things work much better in combination.
This seems like common sense but I have observed teachers who seem embarrassed by their own authority. They preside over rather lax classes in which only an interest in the subject matter can focus the students. One thing these usually lax teachers respond vigorously to is any hint of prejudice (as they should). But this moment of censure can be summarily dismissed by the students because it is the exception rather than the rule. These teachers are confusing legitimate authority (derived from expertise and the support of an institution) with the spurious notion of innate superiority and therefore rejecting both. If only they would compromise with reality they would find they can further their own aims so much better.
Eugene Podrazik says:
I recall a passage from Heyek's book, The Road to Serfdom, that the bigger the role of government, the more political every decision becomes. Filling up the gas tank in your car should be one of a number of Saturday morning chores. Yet, depending on what you may choose to drive it can now become a statement–virtue signaling, sticking it in your eye or what ever.
Might I suggest, better defined boundaries between the individual and social would help. Further, is the subject of appropriate forum. Every moment of the day isn't another political statement. Or, perhaps a live and let live philosophy. I may shake my head at the individual choices a person may make, but perhaps a philosophical shrug of your shoulders is generally the best reaction.
Thomas Smith says:
Ok, good dichotomy here, which I will use for my sociology classes (that I teach). But I still don't see how the conservative position, by its very nature, can offer real solutions for society: Which is all that we can talk about. At most, the ideal of personal responsibility can be offered as a big part of the mental health programs that fall, according to the author, on the liberal Progressive side. As a Gestalt therapist in training, I am trained to emphasize this in my therapy with my clients: to use our therapy as a means of examining where they are guilty of what Sartre called "bad faith," what Fritz Perls called a "creative adjustment," adopted in childhood in the face of bad parenting, that doesn't work anymore.
But what do the conservatives have to offer in terms of encouraging personal responsibility? Rolling back the welfare state: without offering a full employment program? Instead of trying to rehabilitate criminals: killing them or locking them away in prisons, where they can learn even more sophisticated skills to commit crimes, because they have now become stigmatized effectively from taking a job that might ennoble them?
The only game in town is really still, C. Wright Mills' "sociological imagination": making ourselves aware of how our personal troubles are due to social problems, and addressing those problems with collective solutions. And personally, becoming aware that there is more that one can do for oneself than what has become habitual to this point in time. But the latter is not a social solution. Conservatives don't offer them. They merely defend capitalism from any meaningful reform.
"the ideal of personal responsibility can be offered as a big part of the mental health programs"
Marvelous, so even personal responsibility can only come via a social program.
The article says that conservatives might suggest voluntary associations (possibly religious) as the answer to individual isolation. To my mind, however, this solution transcends ideology. I would hope his campus had been large enough to support various student clubs. Sports, hobbies and interests cut across distinctions like urban and rural and this could have helped immensely. University administrations can provide a framework in which club formation is fostered, an collectivist response. Of course, the individual must then decide to join clubs for this to work…
When I was 17, I took exams and I had a difficult choice – to interrupt exams and choose another easier university or take a chance (I did poorly the first of a series of exams and the risk of not going anywhere was great).
My mother asked me: "Maybe you will choose a more reliable option?"
Without any pathos, I did not know what it was, I answered: "Mom, this is my way, and whatever it is, I want to go it till the end." A bit presumptuous, isn't it? At least, I think so now.
Mom looked at me very carefully and said nothing.
It's a true story.
Therefore, I do not like «Progressives»…
Kencathedrus says:
I live as much as possible outside the dichotomy of Left and Right. Basically I try to live my best life by living between Function and Dysfunction (obviously leaning more toward the Functional side of the spectrum). Looking at life this way cleans up the ideological and political bull-crap in my life. When viewing life through this lens, I see the much of contemporary left-wing ideology is totally dysfunctional. There is no coherence to it apart from what the author correctly states as the Left wanting to politicize the personal. The Right has its problems too, but thankfully lacks the moral sermonizing that the Left loves to engage in so I can tolerate it more.
The current political climate does nothing except lay blame for personal failures at the feet of others. It's just an excuse for people to hate others and feel self-righteous about it.
Once you break life down into Function and Dysfunction, everything becomes a lot simpler. Since I've done this I've developed a healthy 'f*ck this' attitude to society's dramas and can work quietly on advancing myself.
John Raykowski says:
"but thankfully lacks the moral sermonizing"
You honestly do not notice the constant moral sermonizing from the 'religious' right?
A bit hard of hearing in the right ear, perhaps?
Andrew Miller says:
Not just the religious right. Plenty of conservatives convinced that poverty, or indeed any lack of opportunity can only be explained by a moral failing of the individual, and more than happy to point out what those moral failings apparently are.
Obviously it's not only a preserve of the right, but to argue it basically a preserve of the left suggests a life lived under a rock where the only sound which seeps in the chuntering of SJ Twitter.
Al R says:
"Plenty of conservatives convinced that poverty, or indeed any lack of opportunity can only be explained by a moral failing of the individual." I disagree, I would say that the failings are a result of an inadequate educational system at home and at the schools.
@John Raykowski: we're at a strange crossroads in history where the evangelical right are now more freedom and fun-loving than the mainstream left.
While this exposes some ideological differences, the disease is in the Social Media confines. There is a sort of distillation of ideology, where it barely existed 20 years ago. Go along to get along if you will. I have seen several people adapt and cultivate ideals, purely based on their peer groups on social media. Throw in a healthy dose of "Look at Me Narcissism," and we have a recipe for disaster. In fact, the US government has adopted the role of the Narcissistic Parent. Often these parents play the children against each other and some go as far as Munchhausen by Proxy to garner attention for themselves.
It all goes a little deeper than just this…Search "20 signs of Narcissism," or "Narcissistic Parent." You can thank me later. :))
Lincoln Dunstan says:
Just one fundamental problem the young man encountered was, "I am going to university to become a brain surgeon, but it is inconsequential that there are no opportunities out there for brain surgeons!!"


Our Team Of Professors is To Help You with Your Dissertation!
To be the best means to work hard and to know what it takes for successful goals achieving. That is what we do for every customer who comes to TrustMyPaper! Discover our wide range of writing features you get!
When writing a dissertation paper you need to obey a number of extremely important rules in order to receive a splendid quality material that your tutor will enjoy reading. One of the requirements is to follow the most common structure – around 10 chapters with specific purpose. Another one is to never commit any mistakes or let a piece of misleading information appear as such imperfections are able to destroy everything you have been working on. There is not a shadow of doubt that you must be extremely competent in the area of study in which the project is written. If necessary, go ahead and read as many books as needed.
When a specialist does something, he or she will do it with respect to the quality and your customer satisfaction. At least that is how we will do it at TrustMyPaper.com. All of our writers are PhD degree holders which is a huge advantage in this type of work. Needless to say, they have tremendous knowledge in every niche and are not afraid to make broad researches. Send us the requirements that your professor has given you, as well as any relevant information that might help and we will start as quickly as possible.


text:
Juno discovering Jupiter with Io
1618, Pieter Lastman
The best-known account of the story comes from Ovid's 'Metamorphoses' (I, 583ff). Io was seduced by Jupiter and he then transformed her into a heifer in an attempt to deceive his wife, Juno. Juno, however, made Jupiter give the heifer to her whereupon she put it in the charge of Argus, the hundred-eyed watchman. Here, Lastman shows the moment when Juno descends to earth, surrounded by peacocks and asks for the heifer. He adds two figures not mentioned by Ovid - Cupid and the man with the mask which are allegories of love and deceit respectively. The tails of the peacocks have no 'eyes' yet. Jupiter later had Argus killed, and his hundred eyes were transferred to the peacock's tail.
Ovid's book had already been translated into Dutch in about 1590 and was often used by artists as a source for mythological subjects for their paintings: it eventually became known as the 'Painters' Bible'. The Dutch writer Karel van Mander in 1604 devoted a substantial portion of his 'Schilderboek' (Book of Painting) to the interpretation of Ovid's stories.
Pieter Lastman
Inscription summary
Signed; Dated
Presented by Julius Weitzner, 1957


text:
Trilby is a 1923 American silent drama film directed by James Young and starring Andrée Lafayette, Creighton Hale, and Arthur Edmund Carewe. It is an adaptation of the 1894 novel Trilby by George du Maurier about a young woman named Trilby who falls under the power of the domineering mesmerist Svengali.

Plot
A beautiful young model named Trilby falls in love with a young man named Little Billee when they meet in a laundry. A vile mesmerist named Svengali also encounters the girl and becomes obsessed over her. After Little Billee proposes marriage to Trilby, Svengali kidnaps her and uses his hypnotic powers to mesmerize her. He finds that although he can erase her will and make her do anything, he cannot make her love him. Svengali uses his powers to turn Trilby into a talented singer, and tours the capitals of Europe with her as her manager. Svengali dies from a heart attack, and Trilby immediately loses her ability to sing and dies as well shortly thereafter.

Cast

Production
French actress Andree Lafayette traveled to Hollywood to make this film (her first major role), then after making a picture in Canada soon after, returned to France where she more or less retired in the mid-1930s. "Trilby" was filmed earlier in 1915, directed by Maurice Tourneur, but the 1923 version is considered superior by critics. Variety called Andree Lafayette "the ideal Trilby in face and figure". Interestingly, James Young (director of the 1923 version) had a small role in Tourneur's 1915 production, as it starred his wife Clara Kimball Young in the lead role of Trilby.

Arthur Edmond Carewe had a very successful career as an actor until he died in 1937, appearing in several horror classics as The Phantom of the Opera (1925) and Mystery in the Wax Museum (1933). Creighton Hale also went on to appear in several silent horror classics as well, including The Cat and the Canary (1927) and Seven Footprints to Satan (1929).

Director Young shot two different endings for the film, one following the novel in which Trilby dies, and one in which she lives (as in the revamped 1915 version by Maurice Tourneur). At the last minute, the producers opted for the version in which she dies, because "that ending was so familiar to movie audiences at the time".

The film was remade as Svengali in Germany in 1927, which starred Paul Wegener in the title role. The first sound film version of Trilby was made in the United States in 1931 (also retitled Svengali), considered by critics to be "the definitive adaptation" today.

References

Bibliography
 Munden, Kenneth White. The American Film Institute Catalog of Motion Pictures Produced in the United States, Part 1. University of California Press, 1997.

External links

Still from a magazine, National Portrait Gallery (London)

1923 films
1923 drama films
Silent American drama films
Films directed by James Young
American silent feature films
1920s English-language films
American black-and-white films
First National Pictures films
Films set in Paris
Films based on British novels
1920s American films

redpajama_set_name: RedPajamaWikipedia


We are website and print magazine written by and for university students in the UK. We provide training, guidance and opportunities for writers to develop - such as interviewing personalities, running their own campaign on a theme (e.g. male mental health or women in the music industry), get press passes and review art exhibitions, films, albums and much more!
As part of the BigChoice Group, you will get to work alongside a team of professionals dedicated to the student experience - from finding the right university to on-the-job training and finding their first job.
We encourage a good work-life balance and love going to the pub together. And although you'll be working from home, we'll make sure you feel part of the team.
We work with students from all over the UK to publish the best news, opinions and features. Not only this, but we've also helped our student writers to secure proper jobs in the real world, with some of our writers going on to work for The Times, MTV, The Guardian or the NME.


text:
Timothy E. Cook (1954–2006) was an American scholar of mass communications, Professor of Journalism at Louisiana State University.

Cook is known for his books on the interaction of politics and the media, and also as an influence on journalism research and education. He was best known for his widely reviewed book Governing with the News.

Books
Making Laws and Making News : Media Strategies in the U.S. House of Representatives Timothy E. Cook, Brookings Institution 1989
Review, by L. Reisenbach, The American Political Science Review, v.84Governing with the news : the news media as a political institution by Timothy E Cook. Chicago : University of Chicago Press, ©1998 . 2nd ed., 2005
Review, by Steven Chaffee The American Political Science Review, Vol. 94, No. 3 (Sep., 2000), pp. 718–719
Review,  by Robert Schmuhl  Commonweal,  Nov, 1998
Review, by Brody, R. A. (1998). Public Opinion Quarterly, 62, 665–667.
Review, by Mondak, J. (1998). Political Science Quarterly, 113, 716–717.
Review, by Pippa Norris, (1999) Journal of Politics, 16, 227–230.Freeing the Presses : the First Amendment in Action  / edited by Timothy E. Cook. Baton Rouge : Louisiana State University Press, ©2005. Notes for the next epidemic. Part one: Lessons from the news coverage of AIDS'' by Timothy E Cook;  John F. Kennedy School of Government.;  Joan Shorenstein Barone Center on the Press, Politics, and Public Policy. OCLC 24785654.

References

Louisiana State University alumni
Williams College faculty
2006 deaths
1954 births
American political scientists
20th-century political scientists


Comments: Heated Seats, Moonroof, Navigation, Back-Up Camera, Satellite Radio, SE CONVENIENCE PACKAGE, TRANSMISSION: 6-SPEED AUTOMATIC W/SEL... EPA 29 MPG Hwy/27 MPG City! Moondust Silver Metallic exterior and Ebony Black interior CLICK ME!
Heated Driver Seat, Back-Up Camera, Satellite Radio Rear Spoiler, Sunroof, Aluminum Wheels, Privacy Glass, Keyless Entry, Steering Wheel Controls, Child Safety Locks.
SE CONVENIENCE PACKAGE 7 Speakers, 110V/150W AC Power Outlet, SYNC 3 Communications & Entertainment System w/47B, enhanced voice recognition, voice-activated touchscreen navigation system, SiriusXM Traffic and Travel Link, 8" LCD capacitive touchscreen in center stack w/swipe and pinch-to-zoom capability, AppLink, 911 Assist, Apple CarPlay, Android Auto and 2 smart-charging USB ports, Blind Spot Information System (BLIS), cross-traffic alert, Ambient Lighting, SYNC Connect, remote start, lock and unlock for vehicle, schedule specific times to remotely start vehicle, locate parked vehicle, check vehicle status ( service for 5 years from the vehicle sale date as recorded by the dealer) and Wi-Fi hotspot that connects up to 10 devices ( a trial subscription of 3 months or 3 gigabytes -, ENGINE: 1.0L ECOBOOST auto start-stop technology (STD), MOONDUST SILVER METALLIC, TRANSMISSION: 6-SPEED AUTOMATIC W/SELECTSHIFT (STD), EQUIPMENT GROUP 200A.


Have you ever gazed upon the landscape of Minecraft and thought to yourself, "this would be an amazing RPG"? Me neither, but at least soon there will be an option.
You may have heard of Square Enix, the notable developers of the Final Fantasy and Dragon Quest series of video games. Today they unveiled their next game, named Dragon Quest Builders. Unfortunately besides the screenshot above, and calling it a 'block-building RPG', there wasn't much information released. Whatever it is, it will be released for the PS4, PS3 and PS Vita at an unknown date.
Take a peek at the source link below for the original source.
I always thought Minecraft should have more RPG elements to it, but making it into an RPG game seemed like too much to me. However, this game seems like it could be very good.
Anyone else feel like the person standing on the stone looks like Link?


The next version of Dark Nova 5 has been released!! It is currently on PBW and on www.spaceempires5.com. Soon will be available here as well.
Each unit has it's own specialized weapon mounts to reflect the special purpose of each.
Lots of new ground weapons including racial infantry weapons.
Removed- Larger Troop weapons are no longer available for Infantry Units.
Changed- Ground Cannon can be mounted on Scouts.
Fixed- Duplicate copy of Cargo Bay.
ok im feeling like im doin sumut stupid as i cant find the download on se5.com, and i only get "web page cannot be found" from the pbw link.. do i need to have an account there?
On PBW, yes. Dont' know why it's not on se5.com yet... I uploaded it quite some time ago. I'm uploading it here now so once Fyron gets to check it out, it'll be here too.


text:
Construction and Earth Moving
Drilling Mining and Quarrying
Demolition and Recycling
Transportation, Shipping, and Aviation
Environment and Infrastructure
Forestry, Agriculture and Fur Farming
Firefighting Rescue and Military
Special Vehicles and Process Industry
Offshore and Subsea
High pressure water
Magnet Power
Power Boosting
Webcast and Webinar Archive
Our Approach to Corporate Sustainability
DYNASET Values
The four core values are customer-oriented approach, courage, DYNASET technology and teamwork. Dynaset values have settled as a part of company's culture already for decades ago. The personnel have adapted and nurture these values in their everyday work. They are not only the main route to the growth and success but also guidelines for worksite well-being.
Customer Oriented-Approach
Customer-oriented approach as a value means a true partnership and collaboration with customers and co-operation partners. This approach has been integrated into our internal company culture as well. Every employee operates as a customer to each other. The customer-oriented approach in the company also means the way of thinking and working where the needs, benefits, and rights of the customer are considered. This goes all the way to the product quality.
We have set high standards to our customer service. For example, the company's guidelines include goals for the speed and quality to communicate with the customers. Dynaset is interested to understand and develop their business. This curiosity helps us to produce better products and applications for the specific needs of the customers.
As a pioneer, Dynaset operates with courage. The courage as value originates all the way to the early years of the company history. The company's founder Reijo Karppinen has been open-minded, courageous, and persistent when developing the products, establishing, and scaling the business. Mr. Karppinen has rooted this attitude to the rest in the company for over the years. The courage has been one of the key factors to success of the company and its customers.
Dynaset is a forerunner which has created its own path with the innovative technology and the ways of working. The company is always courageously moving forward. Dynaset personnel is open-mindedly willing to develop new products and applications for vast range of industries. They are constantly developing new ways to work and solve customer's problems. The personnel manage risks, but they are very experimental for example with new applications and willing to bring new innovations to the market.
DYNASET Technology
DYNASET Technology is based on hydraulic power. The technology converts hydraulic power to other forms of energy. The company's products and applications are innovative which allow versatile solutions and utilization for the customers. Dynaset technology enables the best power-to-size ratio in the world. A pioneering mind set is behind the market's most advanced products which are fully integrable with all kinds of machinery.
As a pioneer, Dynaset is always following its own path and creating new innovations based on hydraulic powered technology. The company is always bringing new, fresh, and in-house designed products and applications to the market. There is a strong will and approach meant to create something original.
Teamwork has been part of Dynaset's operating culture for decades. Different departments fluently advance the work together. The company philosophy is that all the jobs are equally important. In that sense, everyone is equal. It really doesn't matter if you are a director or blue-collar worker, you are important part of the team.
The structures which support teamwork have been developed in the company. Ideas evolve to greatness within an excellent team. Helping each other is built-in to the company culture which supports well-being at work. Teamwork also supports learning from each other and gives personnel better opportunity to influence between different departments. As an outcome, Dynaset has a high team-spirit. Despite which team an employee is working, he or she is a part of one big Dynaset family.
What Kind of Work Place DYNASET is? [English Subtitles]
What is it like to be part of the DYNASET team? What is it like to work in this family business? What is our work atmosphere like? What do we think about our values which are customer oriented-approach, courage, company technology, and teamwork? In the video, several employees express their opinions in their own words on the above-mentioned topics. Take a peek behind the scenes and get to know us. Turn on English Subtitles from the YouTube player menu.


Guesthouse4U is situated in Witbank and is close to shopping centers, restaurants, cinemas and the famous Witbank dam. The guest house offers 15 elegantly furnished en-suite rooms for a comfortably stay.
All the rooms are equipped with bar fridges, televisions with M-Net and DStv, Internet access and secure undercover parking with a security gate. We offer bed and breakfast accommodation and dinner can be arranged on request. There is a clear swimming pool for the hot days of summer for all guests to enjoy.
Witbank boasts plenty of activities to suit all preferences. The area is bustling with fantastic coffee shops, inviting farm stalls and fascinating cultural villages selling arts and crafts. Witbank is home to the well-known Witbank dam. This dam is known as the largest municipal dam in the southern hemisphere and boasts a catchment area of more than 3540 square kilometres. Of course, this magnificent dam is ideal for numerous exciting water sports such as skiing, windsurfing and fishing.
Relax and watch the vibrant bird life in the area or enjoy a hike on one of the many beautiful hiking trails. Witbank also offers opportunities to go parasailing, golfing, scenic hiking and adrenaline pumping 4×4 trails.
Request a quote from Guesthouse4U at no obligation.


text:
Sydafrika deltog i de olympiska sommarspelen 2000 med en trupp bestående av 127 deltagare, 89 män och 38 kvinnor, och de tog totalt fem medaljer.

Medaljer

Silver
 Hestrie Cloete - Friidrott, höjdhopp
 Terence Parkin - Simning, 200 m bröstsim

Brons
 Llewellyn Herbert - Friidrott, 400 m häck
 Frantz Kruger - Friidrott, diskuskastning
 Penny Heyns - Simning, 100 m bröstsim

Baseboll

I gruppspelet mötte alla lag varandra och de fyra bästa lagen (Kuba, USA, Sydkorea och Japan) gick vidare.

Boxning

Lätt flugvikt
Phumzile Matyhila
Omgång 1 — Bye
Omgång 2 — Förlorade mot Suleiman Wanjau Bilali från Kenya (→ gick inte vidare)

Fjädervikt
Jeffrey Mathebula
Omgång 1 — Besegrade Nouzeddine Medjehoud från Algeriet
Omgång 2 — Förlorade mot Bekzat Sattarkhanov från Kazakstan (→ gick inte vidare)

Lätt tungvikt
Danie Venter
Omgång 1 — Besegrade Ihab Alyousef från Syrien
Omgång 2 — förlorade mot Gurcharan Singh från Indien (→ gick inte vidare)

Bågskytte

Cykling

Terräng
Damernas terränglopp
Erica Lynn Green
 Final — 2:03:32.37 (→ 25:e plats)

Landsväg
Herrarnas linjelopp
David George
 Final — 5:45:51 (→ 86:e plats)
Robert Owen Hunter
 Final — DNF

Bana
Herrarnas tempolopp
Garen Bloch
Final — 01:04.478 (→ 8:e plats)

Fotboll

Herrar

Gruppspel

Friidrott

Herrarnas 100 meter
Matthew Quinn
 Omgång 1 — 10.44
 Omgång 2 — 10.27 (→ gick inte vidare)

Herrarnas 400 meter
Hendrick Mokganyetsi
 Omgång 1 — 45.22
 Omgång 2 — 45.15
 Semifinal — 45.52
 Final — 45.26 (→ 6:a plats)
Arnaud Malherbe
 Omgång 1 — 45.73
 Omgång 2 — 45.59 (→ gick inte vidare)

Herrarnas 800 meter
Johan Botha
 Omgång 1 — 01:46.91
 Semifinal — 01:45.49 (→ gick inte vidare)
Hezekiél Sepeng
 Omgång 1 — 01:47.46
 Semifinal — 01:44.85
 Final — 01:45.29 (→ 4:a plats)
Werner Botha
 Omgång 1 — 01:47.83
 Semifinal — 01:46.53 (→ gick inte vidare)

Herrarnas 110 meter häck
Shaun Bownes
 Omgång 1 — 13.53
 Omgång 2 — 13.54
 Semifinal — 13.41 (→ gick inte vidare)

Herrarnas 400 meter häck
Llewellyn Herbert
 Omgång 1 — 49.25
 Semifinal — 48.38
 Final — 47.81 (→  Brons)
Alwyn Myburgh
 Omgång 1 — 49.57
 Semifinal — 49.25 (→ gick inte vidare)

Herrarnas 4 x 400 meter stafett
Werner Botha, Llewellyn Herbert, Arnaud Malherbe, Hendrick Mokganyetsi, Alwyn Myburgh, Hezekiél Sepeng
 Omgång 1 — 03:04.08
 Semifinal — 03:01.25 (→ gick inte vidare)

Herrarnas kulstötning
Janus Robberts
 Kval — 19.79
 Final — 20.32 (→ 7:a plats)
Burger Lambrechts
 Kval — 19.75 (→ gick inte vidare)
Karel Potgieter
 Kval — 19.02 (→ gick inte vidare)

Herrarnas diskuskastning
Frantz Kruger
 Kval — 67.54
 Final — 68.19 (→  Brons)

Frits Potgieter
 Kval — 61.56 (→ gick inte vidare)

Herrarnas spjutkastning
Ali Al-Jadani
 Kval — 68.70 (→ gick inte vidare)

Herrarnas tresteg
Salem Al-Ahmadi
 Kval — 15.99 (→ gick inte vidare)

Herrarnas stavhopp
Okkert Brits
 Kval — 5.65
 Final — 5.80 (→ 7:a plats)

Herrarnas maraton
Hendrick Ramaala
 Final — 2:16:19 (→ 12:a plats)
Josia Thugwane
 Final — 2:16:59 (→ 20:a plats)
Johannes Maremane
 Final — 2:21:25 (→ 43:a plats)

Damernas 400 meter
Heide Seyerling
 Omgång 1 — 51.92
 Omgång 2 — 50.87
 Semifinal — 51.06
 Final — 50.05 (→ 6:a plats)

Damernas 10 000 meter
Elana Meyer
 Omgång 1 — 32:35.32
 Final — 31:14.70 (→ 8:a plats)

Damernas höjdhopp
Hestrie Cloete
 Kval — 1.94
 Final — 2.01 (→  Silver)

Damernas stavhopp
Elmarie Gerryts
 Kval — 4.30
 Final — NM

Damernas maraton
Colleen De Reuck
 Final — 2:36:48 (→ 31:a plats)

Kanotsport

Sprint
Herrar
Herrarnas K-1 500 m
Alan van Coller
 Kvalheat — 01:41,805
 Semifinal — 01:40,656
 Final — 02:04,981 (→ 8:e plats)

Herrarnas K-1 1000 m
Alan van Coller
 Kvalheat — 03:39,573
 Semifinal — 03:41,727 (→ gick inte vidare)

Damer
Damernas K-1 500 m
Ruth Nortje
 Kvalheat — 01:51,047
 Semifinal — Bye
 Final — 02:20,274 (→ 7:e plats)

Landhockey

Damer
Coach: Gene Muller

Paola Vidulich (GK)
Inke van Wyk (GK)
Jacqueline Geyser
Carina van Zyl
Anli Kotze
Michele MacNaughton
Karen Roberts (c)
Lindsey Carlisle
Karen Symons
Kerry Bee
Pietie Coetzee
Alison Dare
Luntu Ntloko
Marilyn Agliotti
Caryn Bentley
Susan Wessels

Gruppspel

Modern femkamp

Damer
Karina Gerber — 4617 poäng (18:e plats)

Segling

Finnjolle
Ian Ainslie
 Lopp 1 — 7
 Lopp 2 — 17
 Lopp 3 — 14
 Lopp 4 — (19)
 Lopp 5 — (22)
 Lopp 6 — 15
 Lopp 7 — 7
 Lopp 8 — 7
 Lopp 9 — 12
 Lopp 10 — 9
 Lopp 11 — 11
 Final — 99 (→ 14:e plats)

Laser
Gareth Blanckenberg
 Lopp 1 — (24)
 Lopp 2 — 10
 Lopp 3 — (32)
 Lopp 4 — 6
 Lopp 5 — 1
 Lopp 6 — 11
 Lopp 7 — 4
 Lopp 8 — 21
 Lopp 9 — 19
 Lopp 10 — 12
 Lopp 11 — 8
 Final — 92 (→ 9:e plats)

Taekwondo

Triathlon

Referenser

2000 i Sydafrika
Nationer i olympiska sommarspelen 2000
2000


orth Brooklin, Me.--Writing is an affair of yearning for great voyages and hauling on frayed ropes. Every blank page conceals perils for the unwary, but E. B. White is the kind of sailor--deft, controlled, ready to deal with storms and calms--whose craft graces the waters.
For many years he wrote "Notes and Comment"--the opening pages of The New Yorker-- celebrating things in general. In collections of essays ("One Man's Meat," "The Second Tree From the Corner"), in poetry ("The Lady Is Cold"), in children's books ("Stuart Little" and "Charlotte's Web"), and in a writing manual ("The Elements of Style," whose co-author was William Strunk, Jr.) his mastery of form and perspective gave pause to those who sailed in his wake.
With his wife, Katharine, and a barn full of sheep and a coop full of chickens and a dog named Jones, he now lives here the year round, fighting the miseries of age and savoring timeless pleasures.
"The Bible has me dead (70 years old) on July 11," he noted, "and I believe everything I read in print."
He does most of his writing at the water's edge in an old boathouse, sitting in Spartan solitude on a wooden bench. Writing has never come easy, and it took him years to realize that spikes were sticking in his back. Mr. White has now built himself a broader bench and screened in the boathouse and chased off the foxes that burrowed into the ground below.
But he is not doing much writing now. "All I have to do is one English sentence and I fly into a thousand pieces," he said in a recent interview.
Even writing a simple letter is almost more than he can bear these days.
"I wish instead I were doing what my dog is doing at this moment, rolling in something ripe he has found on the beach in order to take on its smell," he said. "His is such an easy, simple way to increase one's stature and enlarge one's personality."
"A pianist achieves a certain tone through the use of his hand, his mind, and his heart," Mr. White continued. "I presume a writer arrives at it in much the same way. I have always tried to say the words and transmit the emotion, if any, and without too much horsing around.
"It has never struck me as harmful to make a conscious effort to elevate one's thoughts, in the hope that by doing so one's writing will get off the ground, even if only for a few seconds (like Orville Wright) and to a low altitude. I am an egoist, inclined to inject myself into almost everything I write. This usually calls for good taste, if one is to stay alive. I'm not against good taste in writing, however unpopular it may be today.
"I was a flop as a daily reporter. Every piece had to be a masterpiece--and before you knew it, Tuesday was Wednesday.
"My deadline now is death. Thurber once said it's remarkable how many people are up and around."
"How should one adjust to age?" Mr. White asked, and replied: "In principle, one shouldn't adjust. In fact, one does. (Or I do.) When my head starts knocking because of my attempt to write, I quit writing instead of carrying on as I used to do when I was young.
"These are adjustments. But I gaze into the faces of our senior citizens in our Southern cities, and they wear a sad look that disturbs me. I am sorry for all those who have agreed to grow old. I haven't agreed yet. Old age is a special problem for me because I've never been able to shed the mental image I have of myself--a lad of about 19.
"A writer certainly has a special problem with aging. The generative process is slowed down, yet the pain and frustration of not writing is as acute as ever. I feel frustrated and in pain a good deal of the time now; but I try to bear in mind the advice of Hubert Humphrey's father. 'Never get sick, Hubert; there isn't time.'"
Parents should adjust to their children, said Mr. White, by staying young. "And by talking to a youngster as though there were no age gap. The gap is real enough--it is as old as the human race. It is natural that there be a gap, and not a bad thing, either.
"I lived in an age when parents weren't scared of their children; they commanded respect, enforced discipline and maintained an orderly household. It can still be done, but the motor car and the TV have clearly added to the burden of the task of discipline and of communication."
"I'm very sympathetic to what young people say," he added. "One day they're defending the flag and the next day they're tearing the ivy off the walls."
He has no simple solution for student dissent or nonconformity.
"I've never been an administrator," he noted, "never been a member of a faculty, never been under fire. It's not easy to keep the true dissenters (those who want to improve something) separate from the phony dissenters (those who want to destroy the whole business). The two intermingle in the heat of campus controversy.
"Universities have become very big, and with the bigness comes remoteness, inaccessibility. This is bad, and it causes trouble. When I was an undergraduate, there were a few professors who went out of their way to befriend students. At the house of one of these men I felt more at home than I did in my own home with my own mother and father. I felt excited, instructed, accepted, influential, and in a healthy condition.
"Apparently, most students today don't enjoy any such experience, and they are ready to dismantle the Establishment before they have either defined it or tasted it. In a democracy, dissent is as essential as the air we breathes. It's only when students form an elite society, immune from ordinary restraints, that I worry about dissent."
He was asked what counsel he would give to those who dissent against the draft.
"I seldom peddle advice to the young," he replied. "Most of them seem better informed than I am, and they have their own special problems.
"I'll say this, though: Every country is entitled to a few mistakes. The Vietnam war is a mistake. The Selective Service is inequitable. Yet even a country that is in the midst of a mistake must have an armed force loyal to its basic beliefs and prepared to defend its general principles. If that were to go, all would go."
His formula for Vietnam: "I think we should withdraw our troops."
Mr. White's prescription for the New York battlefield--about which he wrote "Here Is New York," (1948)--is not withdrawal, but moratorium.
"Someone could suggest that since Manhattan is a small island, unexpandable, it poses a limit to building and to population," he said.
"Nobody ever suggests this--it would be heresy to suggest it. Yet most of the ills of New York are attributable to a too great concentration in too small a space. Every time you look up, somebody has erected another tall office building or another tall apartment building.
Homes are disappearing. Traffic grinds to a halt. New York is an inspiring city, a fantastic city, but I think it is crowding its luck. Structural steel can be its undoing. Without homes, a city loses its quality. It is no longer a city, it is just a happening."
"The truce has been violated of late, obviously, and for good reasons, since it was a truce based on an essential injustice, crying for correction. New York, however, still seems to have the knack of rolling with the punches to a greater degree than most large cities, probably because the punches come with greater frequency and from more directions."
What bothers him about the world at large is "its seductiveness and its challenge."
"If the world were merely seductive," he noted, "that would be easy. If it were merely challenging, that would be no problem. But I arise in the morning torn between a desire to improve (or save) the world and a desire to enjoy (or savor) the world. This makes it hard to plan the day."
In the days to come he hopes to get at his journals. "Some of them are tremendously pretentious in the way they're written," he said, "tremendously callow, the kind of things that go with youth. But I was observing myself very sharply and very shrewdly.
"I was never a reader. I was arriving at conclusions almost independently of the entire history of the world. If I sat down to read everything that had been written--I'm a slow reader--I would never have written anything. My joy and my impulse was to get something down on paper myself.
"Right now the note says that the journal has got to be burned as soon as I die. But if I could work on it myself, I might be able to salvage portions that cry for salvage."
What disturbs him now about himself? "I am bothered chiefly by my little fears that are the same as they were almost 70 years ago. I was born scared and am still scared. This has sometimes tested my courage almost beyond endurance."
"I have no heroes, no saints," he said, "I do have a tremendous respect for anyone who does something extremely well, no matter what. I would rather watch a really gifted plumber than listen to a bad poet. I'd rather watch someone build a good boat than attend the launching of a poorly constructed play. My admirations are wide-ranging and are not confined to arts and letters."
These are the kind of people who give him the willies; "Subtly corrupt people. Vaguely fraudulent people. Talkative people who have nothing to say. Power-hungry people. Creative people with their ear to the ground. People whose names begin with W."
Asked what he cherished most in life, Mr. White replied: "When my wife's Aunt Caroline was in her nineties, she lived with us, and she once remarked: "Remembrance is sufficient of the beauty we have seen.' I cherish the remembrance of the beauty I have seen. I cherish the grave, compulsive word."


text:
{-# LANGUAGE
        MultiParamTypeClasses,
        TemplateHaskell,
        UndecidableInstances
  #-}

module RegExp where

import Prelude hiding (lookup)

import Data.ListTrie.RegExp

import Data.Bits

import Data.KeyMap (empty, insert, toList)
import qualified Data.KeyMap as KeyMap
import Data.Derive.Trie

$(deriveTrie [''Bool])

toBits :: Int -> [Bool]
toBits n = map (testBit n) [0..7]

fromBits :: [Bool] -> Int
fromBits bs = foldr (\ b n -> let n' = shiftL n 1
                              in  if b then n' + 1 else n') 0 bs

exampleTrie :: ListTrie BoolTrie Int
exampleTrie = foldr (\ n -> insert (toBits n) n) empty [0..255]

re1 = rep (sym True)
re2 = rep (sym False)
re3 = rep (sym True `seq_` sym False)
re4 = rep anySym `seq_` sym False `seq` sym True `seq_` rep anySym
re5 = sym True `seq_` rep anySym