It's time to play! The program prompts the user to think of an animal and then tries to guess what it is. If the computer fails, the program should ask the user what this animal is and what statement can help distinguish it from another one. This knowledge is supposed to be stored in a form of a binary tree and kept in memory only for the duration of the game session.
The program should ask the user about their favorite animal. This animal name will be the root node in our knowledge tree. When the computer starts the game, it will ask questions starting from the top, that is, the root node. If the computer makes a wrong guess, it should ask the user two questions: first, what animal the user had in mind, and second, what statement can help the computer distinguish the animal it guessed (old) from the animal that the person actually thought of (new). The program should clarify whether that fact is correct for the new animal. After that, the name of the "old" animal in the tree is replaced with the new statement, and two new leaves are added to this node: one with the "old" animal and another with the "new" animal.
Let's look at an example so that you can better visualize the game process.
When the program starts and prompts the user for their favorite animal, the user replies that it is a cat.
|
( Cat )
| |
null null
We get a binary tree where the root node is unique and has no children. Such a node is called a leaf.
Suppose that then the user has thought of a dog. To the computer's question "Is it a cat?", they answer negatively. The user then enters the name of the intended animal, "dog", and the statement "It can climb trees". The correct answer for a dog is "no". Knowing this, the computer builds a new tree:
( Can it climbs trees? )
| |
yes no
| |
( Cat ) ( Dog )
| | | |
null null null null
In the new tree, the root element is the statement, and the node has two children: the names of the animals.
So, if the program does not guess the animal correctly, two items are added to the knowledge tree: the name of the new animal and a fact that distinguishes one animal from the other. After some game time, the knowledge tree could look something like this:
At the end of each session, the program should ask the user if they want to keep playing or quit the game. In this stage, we are not yet saving the knowledge tree to the disk, so when the user decides to finish the game, the built knowledge tree will disappear. Don't worry: in the next step, we will learn how to save it.
The greater-than symbol followed by a space >
represents the user input. Note that it's not part of the input.
Hi, Early Bird!
I want to learn about animals.
Which animal do you like most?
> cat
Wonderful! I've learned so much about animals!
Let's play a game!
You think of an animal, and I guess it.
Press enter when you're ready.
>
Is it a cat?
> No
I give up. What animal do you have in mind?
> a shark
Specify a fact that distinguishes a cat from a shark.
The sentence should satisfy one of the following templates:
- It can ...
- It has ...
- It is a/an ...
> It is a mammal
Is the statement correct for a shark?
> No
I have learned the following facts about animals:
- The cat is a mammal.
- The shark isn't a mammal.
I can distinguish these animals by asking the question:
- Is it a mammal?
Nice! I've learned so much about animals!
Would you like to play again?
> No
Have a nice day!


Hey, Geoff
It's
on
Recreation
YouTube
Webdev Multireddit
r/games
r/nintendoswitch
r/aww
r/rarepuppers
Tech
Hacker News
The Verge
Polygon
Daring Fireball
Ars Technica
r/apple
News
CBC News
Twitter
FiveThirtyEight
r/politics
r/worldnews
r/canadapolitics
Work
Platform Repo
Mobile Repo
Dev Platform
Dev Admin
App Store Connect
Google Play Console


Emotional Intelligence
- What learnings did you take from the chapter?
- How did you find the two minutes of mindfulness?
I learned about the important of mindfulness in every day life. It's a powerful mindset to adopt and evovle over time, so you can react to a situation with a concious mind. Therefore, when things don't go to plan, you'll be able to control your reaction and not break down with stress or speak out with anger. It was interesting to read the scientific studies and results. I feel that I should start exploring mindfulness and seeing what it can offer.
It almost took the entire two minutes to achieve mindfulness, as my mind is an ongoing storage bank. I tend to not write things down and leave them to roll around in my head 24/7. Over the next few days/weeks I look forward to seeing changes here. I find it easy to achieve mindfulness during karate, as I'm away from technology and it's after class when we're all exhausted.


This is a reconstructed snapshot of NL-menu, which was the first Dutch web index. This snapshot was recovered from a CD-ROM with the contents of NL-menu, which was created shortly before the site closed down in early 2004.
Go to NL-menu
Known issues
- Links to categories that contain sub-categories don't work in Firefox. Workaround: right-click on the link and open it in a new tab (or disable JavaScript). In Chrome/Chromium these links work normally.
- The site contains a number of forms that don't work because the associated CGI scripts are missing (these scripts are not on the CD-ROM).
- Some pages show the URL http://www.kbresearch.nl, instead of the original http://www.nl-menu.nl. This is an unintended side-effect of the script that was used to update the links.
See also the blog: Resurrecting the first Dutch web index: NL-menu revisited
Go to NL-menu
© 2018 KB | National Library of the Netherlands with help from Jekyll Bootstrap
and Twitter Bootstrap


#include <PlatformAdapter.h>
The adapter is used by the skin, but it may also be used by the application (or game), if an abstraction from the system libraries is required. The platform adapter provides primitive rendering operations such as lines, rectangles, images, font, and so on. It is set when initializing the desktop.
The choice of the right platform adapter typically results from the platform (PC, Mac, Linux, ...) and the rendering technology (DirectX, OpenGL, ...). You can choose one of the provided implementations, but you can also implement your own one.
DirectXPlatformAdapter
Definition at line 34 of file PlatformAdapter.h.
Public Types | |
| enum | BlendType { BLENDTYPE_NORMAL, BLENDTYPE_OPAQUE, BLENDTYPE_SILHOUETTE, BLENDTYPE_STENCIL } |
Public Member Functions | |
| virtual void | clear (DrawingContext &context, unsigned long fillColor=GL_BLACK)=NULL |
| Clears the entire surface defined by a drawing context. | |
| virtual void | clearClipboard ()=NULL |
| Clears the contents of the system's clipboard or at least the text version of it, so that getClipboardText() will return an empty string. | |
| virtual Mutex * | createMutex ()=NULL |
| Creates a new mutex object for inter-thread synchronisation. | |
| Image * | createRenderTarget (Vector size, Image::Type imageType=Image::TYPE_RGB_ALPHA) |
| Creates a new render target image. | |
| virtual Thread * | createThread (int(*function)(Thread &thread, void *parameter), void *parameter)=NULL |
| Creates a new thread for a given function or static method. | |
| void | destroyRenderTarget (Image *image) |
| Destroys a render target image. | |
| void | draw3DRect (DrawingContext &context, Vector from, Vector to, unsigned long fillColor, unsigned long topLeftBorderColor, unsigned long bottomRightBorderColor) |
| Draws a rectangle (or square) with colored top-left and bottom-right borders, generating a pseudo-3D effect. | |
| virtual void | drawEllipse (DrawingContext &context, Vector center, Vector radius, unsigned long fillColor, unsigned long borderColor)=NULL |
| Draws an ellipse (or circle) with (or without) an outline. | |
| void | drawEllipse (DrawingContext &context, Vector center, Vector radius, unsigned long fillColor) |
| Draws an ellipse (or circle) without an outline. | |
| virtual void | drawImage (DrawingContext &context, Image *image, Vector sourcePosition, Vector sourceSize, Vector targetPosition, Vector targetSize, unsigned long modulationColor=GL_WHITE, BlendType blendType=BLENDTYPE_NORMAL)=NULL |
| Draws a part of an image with stretching or shrinking. | |
| void | drawImage (DrawingContext &context, Image *image, Vector sourcePosition, Vector sourceSize, Vector targetPosition, unsigned long modulationColor=GL_WHITE, BlendType blendType=BLENDTYPE_NORMAL) |
| Draws a part of an image without stretching or shrinking. | |
| void | drawImage (DrawingContext &context, Image *image, Vector targetPosition, Vector targetSize, unsigned long modulationColor=GL_WHITE, BlendType blendType=BLENDTYPE_NORMAL) |
| Draws all of an image with stretching or shrinking. | |
| void | drawImage (DrawingContext &context, Image *image, Vector targetPosition, unsigned long modulationColor=GL_WHITE, BlendType blendType=BLENDTYPE_NORMAL) |
| Draws all of an image without stretching or shrinking. | |
| virtual void | drawLine (DrawingContext &context, Vector from, Vector to, unsigned long color)=NULL |
| Draws a line from a given position to another one. | |
| virtual void | drawMonoText (DrawingContext &context, Font *font, Vector position, const String &text, unsigned long color, bool caps=false, bool withHotKeys=false, bool ellipse=true) |
| Draws a mono-colored text at a given position, using a given font and a provided color. | |
| virtual void | drawPixel (DrawingContext &context, Vector position, unsigned long color)=NULL |
| Draws a pixel at a given position, using a provided drawing context. | |
| virtual void | drawRect (DrawingContext &context, Vector from, Vector to, unsigned long fillColor, unsigned long borderColor)=NULL |
| Draws a rectangle (or square) with (or without) an outline. | |
| void | drawRect (DrawingContext &context, Vector from, Vector to, unsigned long fillColor) |
| Draws a rectangle (or square) without an outline. | |
| virtual void | drawRotatedImage (DrawingContext &context, Image *image, Vector sourcePosition, Vector sourceSize, Vector targetPosition, Vector targetSize, Vector rotationAnchor, double rotationAngle, unsigned long modulationColor=GL_WHITE, BlendType blendType=BLENDTYPE_NORMAL)=NULL |
| Draws a part of an image with stretching or shrinking, and using rotation. | |
| void | drawRotatedImage (DrawingContext &context, Image *image, Vector sourcePosition, Vector sourceSize, Vector targetPosition, Vector rotationAnchor, double rotationAngle, unsigned long modulationColor=GL_WHITE, BlendType blendType=BLENDTYPE_NORMAL) |
| Draws a part of an image without stretching or shrinking, and using rotation. | |
| void | drawRotatedImage (DrawingContext &context, Image *image, Vector targetPosition, Vector targetSize, Vector rotationAnchor, double rotationAngle, unsigned long modulationColor=GL_WHITE, BlendType blendType=BLENDTYPE_NORMAL) |
| Draws all of an image with stretching or shrinking, and using rotation. | |
| void | drawRotatedImage (DrawingContext &context, Image *image, Vector targetPosition, Vector rotationAnchor, double rotationAngle, unsigned long modulationColor=GL_WHITE, BlendType blendType=BLENDTYPE_NORMAL) |
| Draws all of an image without stretching or shrinking, and using rotation. | |
| virtual void | drawText (DrawingContext &context, Font *font, Vector position, const String &text, unsigned char alpha=255, bool caps=false, bool withHotKeys=false, bool ellipse=false) |
| Draws a multi-colored text at a given position, using a given font and alpha blending. | |
| virtual void | drawTriangle (DrawingContext &context, Vector *vertices, unsigned long fillColor, unsigned long borderColor)=NULL |
| Draws a triangle with (or without) an outline. | |
| void | drawTriangle (DrawingContext &context, Vector *vertices, unsigned long fillColor) |
| Draws a triangle without an outline. | |
| virtual unsigned long | getAbsoluteTime ()=NULL |
| Returns the current time since the beginning of the ERA (since 1st of January 1970, 0:00) in seconds. | |
| virtual unsigned long | getAvailableVideoMemory ()=NULL |
| Returns the currently available video memory in KB. | |
| virtual String | getClipboardText ()=NULL |
| Returns a text version of the current content of the system's clipboard. | |
| virtual String | getConfigFolder (const String &manufacturer, const String &applicationName)=NULL |
| Returns the path to the configuration folder for this application on the OS. | |
| virtual char | getDecimalPoint ()=NULL |
| Returns the decimal point used by the system's default locale. | |
| Font * | getFont (const String &path) |
| Returns a font by its font file path. | |
| Image * | getImage (const String &path, bool load=false) |
| Returns an image by its file path. | |
| virtual JoystickHandler * | getJoystickHandler ()=NULL |
| Returns the joystick input handler of this platform adapter. | |
| virtual KeyboardHandler * | getKeyboardHandler ()=NULL |
| Returns the keyboard input handler of this platform adapter. | |
| virtual const char * | getKeyName (int keyCode)=NULL |
| Returns the human friendly name of a key for a given key code. | |
| virtual int | getMasterVolume ()=NULL |
| Returns the current master volume, which ranges from 0 to 255. | |
| virtual MouseHandler * | getMouseHandler ()=NULL |
| Returns the mouse input handler of this platform adapter. | |
| virtual unsigned long | getPixel (DrawingContext &context, Vector position)=NULL |
| Returns the color of a pixel at a given position, using a given drawing context. | |
| unsigned long | getPixel (Image *image, Vector position) |
| Returns the color of an image's pixel at a given position. | |
| virtual Vector | getScreenSize ()=NULL |
| Returns the size of the entire screen. | |
| virtual unsigned long | getTime ()=NULL |
| Returns the current time in milli seconds since the application's start. | |
| virtual void | initialize ()=NULL |
| Initializes the platform adapter. | |
| virtual bool | isAlphaFullySupported ()=NULL |
| Returns whether the alpha operations are fully supported. | |
| virtual bool | isApplicationFocused ()=NULL |
| Returns whether the application is currently focused. | |
| virtual bool | isDeleteKey (int keyCode)=NULL |
| Returns whether a given key is the delete key. | |
| virtual bool | isMute ()=NULL |
| Returns whether the speakers are mute (which is independent from the master volume). | |
| virtual bool | isPow2Required ()=NULL |
| Returns whether all images widths and height require to be a power of two. | |
| virtual bool | isSquareRequired ()=NULL |
| Returns whether all images widths and height require to be equal. | |
| virtual void | minimizeDesktop ()=NULL |
| Minimizes the entire application. | |
| virtual void | onDesktopTitleChanged () |
| Called when the desktop title changes. | |
| virtual void | openUrl (const String &url)=NULL |
| Opens a given URL in a web browser. | |
| virtual void | restoreDesktop ()=NULL |
| Restores the entire application. | |
| virtual void | setClipboardText (const String &text)=NULL |
| Sets a given text into system's clipboard. | |
| virtual void | setMasterVolume (int masterVolume)=NULL |
| Sets the current master volume, which ranges from 0 to 255. | |
| virtual void | setMute (bool mute)=NULL |
| Sets whether the speakers are mute (which is independent from the master volume). | |
| virtual void | showFrame ()=NULL |
| Issues to show the drawing operations since the last call to showFrame(). | |
| virtual void | shutDown ()=NULL |
| Shuts down the platform adapter. | |
| virtual void | sleep (unsigned long time)=NULL |
| Suspends the current thread for a given number of milli seconds. | |
| void | sleepWithCheatProtection (unsigned long time) |
| Suspends the current thread for a given number of milli seconds, splitting the time into slices to prevent cheating by shifting the clock. | |
| virtual void | update ()=NULL |
| Called each frame to perform operations depending on the system, such as dispatching Windows messages. | |
Public Attributes | |
| friend | Desktop |
| friend | Scene |
Protected Member Functions | |
| virtual Font * | createFont (const String &path)=NULL |
| Creates a new font object for a given font file path. | |
| virtual Image * | createImage (const String &path, Image::Type imageType)=NULL |
| Creates a new image object from a file, or an empty render target. | |
| virtual void | drawTextInternal (DrawingContext &context, Font *font, Vector position, const String &text, unsigned long modulationColor, BlendType blendType, bool caps, bool withHotKeys, bool ellipse)=NULL |
| Draws a multi-colored text at a given position, using a given font and alpha blending. | |
| void | updateExclusive () |
| Updates all handlers when the scene's exclusive changes. | |
| virtual | ~PlatformAdapter () |
| Destroys the platform adapter. | |
Protected Attributes | |
| StringKeyHashMap< Image > | fileBasedImages |
| The currently managed file-based images. | |
| StringKeyHashMap< Font > | fonts |
| The currently managed fonts. | |
| ArrayList< Image > | renderTargetImages |
| The currently managed render target images. |
|
|
Definition at line 39 of file PlatformAdapter.h. |
|
|
Destroys the platform adapter.
|
|
|
Clears the entire surface defined by a drawing context.
|
|
|
Clears the contents of the system's clipboard or at least the text version of it, so that getClipboardText() will return an empty string.
|
|
|
Creates a new font object for a given font file path.
|
|
|
Creates a new image object from a file, or an empty render target.
|
|
|
Creates a new mutex object for inter-thread synchronisation. Only needed when working with multiple thread, using createThread. Use rarely.
|
|
|
Creates a new render target image.
|
|
|
Creates a new thread for a given function or static method. The thread starts in suspended state, so you have to resume it to start it.
|
|
|
Destroys a render target image.
|
|
|
Draws a rectangle (or square) with colored top-left and bottom-right borders, generating a pseudo-3D effect.
|
|
|
Draws an ellipse (or circle) with (or without) an outline.
|
|
|
Draws an ellipse (or circle) without an outline.
|
|
|
Draws a part of an image with stretching or shrinking.
|
|
|
Draws a part of an image without stretching or shrinking.
|
|
|
Draws all of an image with stretching or shrinking.
|
|
|
Draws all of an image without stretching or shrinking.
|
|
|
Draws a line from a given position to another one.
|
|
|
Draws a mono-colored text at a given position, using a given font and a provided color.
|
|
|
Draws a pixel at a given position, using a provided drawing context.
|
|
|
Draws a rectangle (or square) with (or without) an outline.
|
|
|
Draws a rectangle (or square) without an outline.
|
|
|
Draws a part of an image with stretching or shrinking, and using rotation.
|
|
|
Draws a part of an image without stretching or shrinking, and using rotation.
|
|
|
Draws all of an image with stretching or shrinking, and using rotation.
|
|
|
Draws all of an image without stretching or shrinking, and using rotation.
|
|
|
Draws a multi-colored text at a given position, using a given font and alpha blending.
|
|
|
Draws a multi-colored text at a given position, using a given font and alpha blending.
|
|
|
Draws a triangle with (or without) an outline.
|
|
|
Draws a triangle without an outline.
|
|
|
Returns the current time since the beginning of the ERA (since 1st of January 1970, 0:00) in seconds.
|
|
|
Returns the currently available video memory in KB.
|
|
|
Returns a text version of the current content of the system's clipboard.
|
|
|
Returns the path to the configuration folder for this application on the OS. This may be the application path itself, or another folder designated to configurations.
|
|
|
Returns the decimal point used by the system's default locale.
|
|
|
Returns a font by its font file path. The font is managed by the adapter, so using the font the first time loads it into memory. Consequtive uses return the same instance again.
|
|
|
Returns an image by its file path. The image is managed by the adapter, so using the image the first time loads it into memory. Consequtive uses return the same instance again.
|
|
|
Returns the joystick input handler of this platform adapter.
|
|
|
Returns the keyboard input handler of this platform adapter.
|
|
|
Returns the human friendly name of a key for a given key code.
|
|
|
Returns the current master volume, which ranges from 0 to 255.
|
|
|
Returns the mouse input handler of this platform adapter.
|
|
|
Returns the color of a pixel at a given position, using a given drawing context.
|
|
|
Returns the color of an image's pixel at a given position.
|
|
|
Returns the size of the entire screen.
|
|
|
Returns the current time in milli seconds since the application's start.
|
|
|
Initializes the platform adapter. This method is called by the desktop when it is initialized. Do not call this method manually.
|
|
|
Returns whether the alpha operations are fully supported. If not, some alpha blending may fail and fall back to opaqueness.
|
|
|
Returns whether the application is currently focused.
|
|
|
Returns whether a given key is the delete key.
|
|
|
Returns whether the speakers are mute (which is independent from the master volume).
|
|
|
Returns whether all images widths and height require to be a power of two.
|
|
|
Returns whether all images widths and height require to be equal.
|
|
|
Minimizes the entire application.
|
|
|
Called when the desktop title changes. Update the desktop title in any OS window etc. |
|
|
Opens a given URL in a web browser.
|
|
|
Restores the entire application.
|
|
|
Sets a given text into system's clipboard.
|
|
|
Sets the current master volume, which ranges from 0 to 255.
|
|
|
Sets whether the speakers are mute (which is independent from the master volume).
|
|
|
Issues to show the drawing operations since the last call to showFrame(). Call this method at the end of a frame. |
|
|
Shuts down the platform adapter. This method is called by the desktop when it is shut down. Do not call this method manually.
|
|
|
Suspends the current thread for a given number of milli seconds.
|
|
|
Suspends the current thread for a given number of milli seconds, splitting the time into slices to prevent cheating by shifting the clock. On the other hand, this is a little less accurate.
|
|
|
Called each frame to perform operations depending on the system, such as dispatching Windows messages.
|
|
|
Updates all handlers when the scene's exclusive changes.
|
|
|
Definition at line 74 of file PlatformAdapter.h. |
|
|
The currently managed file-based images.
Definition at line 83 of file PlatformAdapter.h. |
|
|
The currently managed fonts.
Definition at line 89 of file PlatformAdapter.h. |
|
|
The currently managed render target images.
Definition at line 95 of file PlatformAdapter.h. |
|
|
Definition at line 75 of file PlatformAdapter.h. |


The OpenGL interface¶
pyglet provides an interface to OpenGL and GLU. The interface is used by all of pyglet’s higher-level API’s, so that all rendering is done efficiently by the graphics card, rather than the operating system. You can access this interface directly; using it is much like using OpenGL from C.
The interface is a “thin-wrapper” around libGL.so on Linux, opengl32.dll on Windows and OpenGL.framework on OS X. The pyglet maintainers regenerate the interface from the latest specifications, so it is always up-to-date with the latest version and almost all extensions.
The interface is provided by the pyglet.gl package. To use it you will need a good knowledge of OpenGL, C and ctypes. You may prefer to use OpenGL without using ctypes, in which case you should investigate PyOpenGL. PyOpenGL provides similar functionality with a more “Pythonic” interface, and will work with pyglet without any modification.
Using OpenGL¶
Documentation of OpenGL and GLU are provided at the OpenGL website and (more comprehensively) in the OpenGL Programming Guide.
Importing the package gives access to OpenGL, GLU, and all OpenGL registered extensions. This is sufficient for all but the most advanced uses of OpenGL:
from pyglet.gl import *
All function names and constants are identical to the C counterparts. For example, the following program draws a triangle on the screen:
from pyglet.gl import *
# Direct OpenGL commands to this window.
window = pyglet.window.Window()
@window.event
def on_draw():
glClear(GL_COLOR_BUFFER_BIT)
glLoadIdentity()
glBegin(GL_TRIANGLES)
glVertex2f(0, 0)
glVertex2f(window.width, 0)
glVertex2f(window.width, window.height)
glEnd()
pyglet.app.run()
Some OpenGL functions require an array of data. These arrays must be constructed as ctypes arrays of the correct type. The following example draw the same triangle as above, but uses a vertex array instead of the immediate-mode functions. Note the construction of the vertex array using a one-dimensional ctypes array of GLfloat:
from pyglet.gl import *
window = pyglet.window.Window()
vertices = [
0, 0,
window.width, 0,
window.width, window.height]
vertices_gl = (GLfloat * len(vertices))(*vertices)
glEnableClientState(GL_VERTEX_ARRAY)
glVertexPointer(2, GL_FLOAT, 0, vertices_gl)
@window.event
def on_draw():
glClear(GL_COLOR_BUFFER_BIT)
glLoadIdentity()
glDrawArrays(GL_TRIANGLES, 0, len(vertices) // 2)
pyglet.app.run()
Similar array constructions can be used to create data for vertex buffer objects, texture data, polygon stipple data and the map functions.
Resizing the window¶
pyglet sets up the viewport and an orthographic projection on each window automatically. It does this in a default on_resize handler defined on Window:
@window.event
def on_resize(width, height):
glViewport(0, 0, width, height)
glMatrixMode(gl.GL_PROJECTION)
glLoadIdentity()
glOrtho(0, width, 0, height, -1, 1)
glMatrixMode(gl.GL_MODELVIEW)
If you need to define your own projection (for example, to use a 3-dimensional perspective projection), you should override this event with your own; for example:
@window.event
def on_resize(width, height):
glViewport(0, 0, width, height)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
gluPerspective(65, width / float(height), .1, 1000)
glMatrixMode(GL_MODELVIEW)
return pyglet.event.EVENT_HANDLED
Note that the on_resize handler is called for a window the first time it is displayed, as well as any time it is later resized.
Error checking¶
By default, pyglet calls glGetError after every GL function call (except where such a check would be invalid). If an error is reported, pyglet raises GLException with the result of gluErrorString as the message.
This is very handy during development, as it catches common coding errors early on. However, it has a significant impact on performance, and is disabled when python is run with the -O option.
You can also disable this error check by setting the following option before importing pyglet.gl or pyglet.window:
# Disable error checking for increased performance
pyglet.options['debug_gl'] = False
from pyglet.gl import *
Setting the option after importing pyglet.gl will have no effect. Once disabled, there is no error-checking overhead in each GL call.
Using extension functions¶
Before using an extension function, you should check that the extension is implemented by the current driver. Typically this is done using glGetString(GL_EXTENSIONS), but pyglet has a convenience module, pyglet.gl.gl_info that does this for you:
if pyglet.gl.gl_info.have_extension('GL_ARB_shadow'):
# ... do shadow-related code.
else:
# ... raise an exception, or use a fallback method
You can also easily check the version of OpenGL:
if pyglet.gl.gl_info.have_version(1,5):
# We can assume all OpenGL 1.5 functions are implemented.
Remember to only call the gl_info functions after creating a window.
There is a corresponding glu_info module for checking the version and extensions of GLU.
nVidia often release hardware with extensions before having them registered officially. When you import * from pyglet.gl you import only the registered extensions. You can import the latest nVidia extensions with:
from pyglet.gl.glext_nv import *
Using multiple windows¶
pyglet allows you to create and display any number of windows simultaneously. Each will be created with its own OpenGL context, however all contexts will share the same texture objects, display lists, shader programs, and so on, by default [1]. Each context has its own state and framebuffers.
There is always an active context (unless there are no windows). When using pyglet.app.run for the application event loop, pyglet ensures that the correct window is the active context before dispatching the on_draw or on_resize events.
In other cases, you can explicitly set the active context with Window.switch_to.
| [1] | Sometimes objects and lists cannot be shared between contexts; for example, when the contexts are provided by different video devices. This will usually only occur if you explicitly select different screens driven by different devices. |
AGL, GLX and WGL¶
The OpenGL context itself is managed by an operating-system specific library: AGL on OS X, GLX under X11 and WGL on Windows. pyglet handles these details when a window is created, but you may need to use the functions directly (for example, to use pbuffers) or an extension function.
The modules are named pyglet.gl.agl, pyglet.gl.glx and pyglet.gl.wgl. You must only import the correct module for the running operating system:
if sys.platform.startswith('linux'):
from pyglet.gl.glx import *
glxCreatePbuffer(...)
elif sys.platform == 'darwin':
from pyglet.gl.agl import *
aglCreatePbuffer(...)
Alternativally you can use pyglet.compat_platform to support platforms that are compatible with platforms not officially supported by pyglet. For example FreeBSD systems will appear as linux-compat in pyglet.compat_platform.
There are convenience modules for querying the version and extensions of WGL and GLX named pyglet.gl.wgl_info and pyglet.gl.glx_info, respectively. AGL does not have such a module, just query the version of OS X instead.
If using GLX extensions, you can import pyglet.gl.glxext_arb for the registered extensions or pyglet.gl.glxext_nv for the latest nVidia extensions.
Similarly, if using WGL extensions, import pyglet.gl.wglext_arb or pyglet.gl.wglext_nv.


Preparation time
overnight
Cooking time
10 to 30 mins
Serves
Serves 6
Pork and clams may seem like an unusual combination but it tastes delicious.
Make the massa de pimentão in advance; it will keep for a couple of weeks in the fridge or can be frozen. Put the peppers in a glass bowl, layering them with the salt. Cover with cling film and leave for 24 hours at room temperature.
Preheat the oven to 150C/130C Fan/Gas 2.
Drain the peppers; put them on a baking sheet and slow-roast for about 1½ hours. Transfer to a bowl, cover and leave to cool slightly. Remove the skin and blitz the peppers to a paste in a food processor. Mix in the olive oil and store in a sterilized glass jar for up to 2 weeks.
Put the pork chunks in a bowl. Add the massa de pimentão, garlic and paprika and massage into the meat. Pour in the wine. Cover, transfer to the fridge and chill for 12–24 hours.
Strain the pork through a sieve or colander over a bowl and reserve the marinade. Heat 2–3 tablespoons oil in a large, shallow lidded casserole. Fry the pork in batches over high heat until browned all over. Reduce the heat to medium. Return all the pork to the pan along with the remaining olive oil and the onion and fry for 4–5 minutes, until the onion starts to soften.
Stir in the tomato paste and reserved marinade, turn up the heat to medium–high and bring to the boil. Continue to cook for 2 minutes, or until the liquid is reduced in volume by half. Add the clams to the pan (discarding any that do not close when given a sharp tap). Cover with a lid and cook for 3–5 minutes, or until the clams have steamed open.
Season to taste with salt and pepper. Discard any clams that do not open after cooking. Stir through three-quarters of the coriander, scatter with the remainder and serve at once.


Greens demand Zahradil conflict of interest probe
by EUobserverThe Greens are demanding an internal investigation by the European Parliament into Czech MEP Jan Zahradil following a story by this website on possible conflicts of interest in his role as lead negotiator on the EU trade deal with Vietnam. "These allegations reported by EUobserver are serious," said Belgian Green MEP Saskia Bricmont, in a statement, noting Zahradil should step down as rapporteur if the allegations are proven correct.


R140 Million Was Set Aside For Bank Of Lisbon Demolition
by SG EditorThe Gauteng Department of Infrastructure Development on Sunday said more than R100 million was budgeted for the Bank of Lisbon building’s demolition.
The building was demolished on Sunday after a fire last September, which claimed the lives of three firemen.
A new building will be erected as part of an inner-city rejuvenation project which will see 17 other buildings being renovated.
The Gauteng infrastructure development portfolio said the demolition of the Bank of Lisbon building was a success and that clean-up operations would be completed by early next year.
At least R140 million was budgeted for the complete demolition project, with R90 million of that used for Sunday’s implosion. The final costs will only be determined when clean-up operations are completed.
MEC Tasneem Motara said: “To date, we have spent just [about] R90 million. We will know at the end of the process what the total is.”
The inner-city rejuvenation project will see the renovation of 17 other buildings with the area being names the Kopanong Precinct.
Proposals on the precinct have already begun.


Actions, resources, and condition keys for Amazon SES
Amazon SES (service prefix:
ses
) provides the following service-specific resources, actions, and condition context keys for use in IAM permission policies.
References:
-
Learn how to configure this service .
-
View a list of the API operations available for this service .
-
Learn how to secure this service and its resources by using IAM permission policies.
Topics
Actions defined by Amazon SES
You can specify the following actions in the
Action
element of an IAM policy statement. Use policies to grant permissions to perform an operation in AWS. When you use an action in a policy, you usually allow or deny access to the API operation or CLI command with the same name. However, in some cases, a single action controls access to more than one operation. Alternatively, some operations require several different actions.
The
Resource types
column of the Actions table indicates whether each action supports resource-level permissions. If there is no value for this column, you must specify all resources ("*") to which the policy applies in the
Resource
element of your policy statement. If the column includes a resource type, then you can specify an ARN of that type in a statement with that action. If the action has one or more required resources, the caller must have permission to use the action with those resources. Required resources are indicated in the table with an asterisk (*). If you limit resource access with the
Resource
element in an IAM policy, you must include an ARN or pattern for each required resource type. Some actions support multiple resource types. If the resource type is optional (not indicated as required), then you can choose to use one of the optional resource types.
The
Condition keys
column of the Actions table includes keys that you can specify in a policy statement's
Condition
element. For more information on the condition keys that are associated with resources for the service, see the
Condition keys
column of the Resource types table.
For details about the columns in the following table, see Actions table .
| Actions | Description | Access level | Resource types (*required) | Condition keys | Dependent actions |
|---|---|---|---|---|---|
| CloneReceiptRuleSet | Grants permission to create a receipt rule set by cloning an existing one | Write | |||
| CreateConfigurationSet | Grants permission to create a new configuration set | Write | |||
| CreateConfigurationSetEventDestination | Grants permission to create a configuration set event destination | Write | |||
| CreateConfigurationSetTrackingOptions | Grants permission to creates an association between a configuration set and a custom domain for open and click event tracking | Write | |||
| CreateCustomVerificationEmailTemplate | Grants permission to create a new custom verification email template | Write | |||
| CreateReceiptFilter | Grants permission to create a new IP address filter | Write | |||
| CreateReceiptRule | Grants permission to create a receipt rule | Write | |||
| CreateReceiptRuleSet | Grants permission to create an empty receipt rule set | Write | |||
| CreateTemplate | Grants permission to creates an email template | Write | |||
| DeleteConfigurationSet | Grants permission to delete an existing configuration set | Write | |||
| DeleteConfigurationSetEventDestination | Grants permission to delete an event destination | Write | |||
| DeleteConfigurationSetTrackingOptions | Grants permission to delete an association between a configuration set and a custom domain for open and click event tracking | Write | |||
| DeleteCustomVerificationEmailTemplate | Grants permission to delete an existing custom verification email template | Write | |||
| DeleteIdentity | Grants permission to delete the specified identity | Write | |||
| DeleteIdentityPolicy | Grants permission to delete the specified sending authorization policy for the given identity (an email address or a domain) | Permissions management | |||
| DeleteReceiptFilter | Grants permission to delete the specified IP address filter | Write | |||
| DeleteReceiptRule | Grants permission to delete the specified receipt rule | Write | |||
| DeleteReceiptRuleSet | Grants permission to delete the specified receipt rule set and all of the receipt rules it contains | Write | |||
| DeleteTemplate | Grants permission to delete an email template | Write | |||
| DeleteVerifiedEmailAddress | Grants permission to delete the specified email address from the list of verified addresses | Write | |||
| DescribeActiveReceiptRuleSet | Grants permission to return the metadata and receipt rules for the receipt rule set that is currently active | Read | |||
| DescribeConfigurationSet | Grants permission to return the details of the specified configuration set | Read | |||
| DescribeReceiptRule | Grants permission to return the details of the specified receipt rule | Read | |||
| DescribeReceiptRuleSet | Grants permission to return the details of the specified receipt rule set | Read | |||
| GetAccountSendingEnabled | Grants permission to return the email sending status of your account | Read | |||
| GetCustomVerificationEmailTemplate | Grants permission to return the custom email verification template for the template name you specify | Read | |||
| GetIdentityDkimAttributes | Grants permission to return the current status of Easy DKIM signing for an entity | Read | |||
| GetIdentityMailFromDomainAttributes | Grants permission to return the custom MAIL FROM attributes for a list of identities (email addresses and/or domains) | Read | |||
| GetIdentityNotificationAttributes | Grants permission to return a structure describing identity notification attributes for a list of verified identities (email addresses and/or domains), | Read | |||
| GetIdentityPolicies | Grants permission to return the requested sending authorization policies for the given identity (an email address or a domain) | Read | |||
| GetIdentityVerificationAttributes | Grants permission to return the verification status and (for domain identities) the verification token for a list of identities | Read | |||
| GetSendQuota | Grants permission to return the user's current sending limits | Read | |||
| GetSendStatistics | Grants permission to returns the user's sending statistics | Read | |||
| GetTemplate | Grants permission to return the template object, which includes the subject line, HTML par, and text part for the template you specify | Read | |||
| ListConfigurationSets | Grants permission to list all of the configuration sets for your account | List | |||
| ListCustomVerificationEmailTemplates | Grants permission to list all of the existing custom verification email templates for your account | List | |||
| ListIdentities | Grants permission to list the email identities for your account | List | |||
| ListIdentityPolicies | Grants permission to list all of the email templates for your account | List | |||
| ListReceiptFilters | Grants permission to list the IP address filters associated with your account | Read | |||
| ListReceiptRuleSets | Grants permission to list the receipt rule sets that exist under your account | Read | |||
| ListTemplates | Grants permission to list the email templates present in your account | List | |||
| ListVerifiedEmailAddresses | Grants permission to list all of the email addresses that have been verified in your account | Read | |||
| PutConfigurationSetDeliveryOptions | Grants permission to add or update the delivery options for a configuration set | Write | |||
| PutIdentityPolicy | Grants permission to add or update a sending authorization policy for the specified identity (an email address or a domain) | Permissions management | |||
| ReorderReceiptRuleSet | Grants permission to reorder the receipt rules within a receipt rule set | Write | |||
| SendBounce | Grants permission to generate and send a bounce message to the sender of an email you received through Amazon SES | Write | |||
| SendBulkTemplatedEmail | Grants permission to compose an email message to multiple destinations | Write | |||
| SendCustomVerificationEmail | Grants permission to add an email address to the list of identities and attempts to verify it for your account | Write | |||
| SendEmail | Grants permission to send an email message | Write | |||
| SendRawEmail | Grants permission to send an email message, with header and content specified by the client | Write | |||
| SendTemplatedEmail | Grants permission to compose an email message using an email template | Write | |||
| SetActiveReceiptRuleSet | Grants permission to set the specified receipt rule set as the active receipt rule set | Write | |||
| SetIdentityDkimEnabled | Grants permission to enable or disable Easy DKIM signing of email sent from an identity | Write | |||
| SetIdentityFeedbackForwardingEnabled | Grants permission to enable or disable whether Amazon SES forwards bounce and complaint notifications for an identity (an email address or a domain) | Write | |||
| SetIdentityHeadersInNotificationsEnabled | Grants permission to set whether Amazon SES includes the original email headers in the Amazon Simple Notification Service (Amazon SNS) notifications of a specified type for a given identity (an email address or a domain) | Write | |||
| SetIdentityMailFromDomain | Grants permission to enable or disable the custom MAIL FROM domain setup for a verified identity | Write | |||
| SetIdentityNotificationTopic | Grants permission to set an Amazon Simple Notification Service (Amazon SNS) topic to use when delivering notifications for a verified identity | Write | |||
| SetReceiptRulePosition | Grants permission to set the position of the specified receipt rule in the receipt rule set | Write | |||
| TestRenderTemplate | Grants permission to create a preview of the MIME content of an email when provided with a template and a set of replacement data | Write | |||
| UpdateAccountSendingEnabled | Grants permission to enable or disable email sending for your account | Write | |||
| UpdateConfigurationSetEventDestination | Grants permission to update the event destination of a configuration set | Write | |||
| UpdateConfigurationSetReputationMetricsEnabled | Grants permission to enable or disable the publishing of reputation metrics for emails sent using a specific configuration set | Write | |||
| UpdateConfigurationSetSendingEnabled | Grants permission to enable or disable email sending for messages sent using a specific configuration set | Write | |||
| UpdateConfigurationSetTrackingOptions | Grants permission to modify an association between a configuration set and a custom domain for open and click event tracking | Write | |||
| UpdateCustomVerificationEmailTemplate | Grants permission to update an existing custom verification email template | Write | |||
| UpdateReceiptRule | Grants permission to update a receipt rule | Write | |||
| UpdateTemplate | Grants permission to update an email template | Write | |||
| VerifyDomainDkim | Grants permission to return a set of DKIM tokens for a domain | Write | |||
| VerifyDomainIdentity | Grants permission to verify a domain | Write | |||
| VerifyEmailAddress | Grants permission to verify an email address | Write | |||
| VerifyEmailIdentity | Grants permission to verify an email identity | Write |
Resource types defined by Amazon SES
The following resource types are defined by this service and can be used in the
Resource
element of IAM permission policy statements. Each action in the
Actions table
identifies the resource types that can be specified with that action. A resource type can also define which condition keys you can include in a policy. These keys are displayed in the last column of the Resource types table. For details about the columns in the following table, see
Resource types table
.
| Resource types | ARN | Condition keys |
|---|---|---|
| configuration-set |
arn:$
{
Partition}:ses:$
{
Region}:$
{
Account}:configuration-set/$
{
ConfigurationSetName}
|
|
| custom-verification-email-template |
arn:$
{
Partition}:ses:$
{
Region}:$
{
Account}:custom-verification-email-template/$
{
TemplateName}
|
|
| identity |
arn:$
{
Partition}:ses:$
{
Region}:$
{
Account}:identity/$
{
IdentityName}
|
|
| template |
arn:$
{
Partition}:ses:$
{
Region}:$
{
Account}:template/$
{
TemplateName}
|
Condition keys for Amazon SES
Amazon SES defines the following condition keys that can be used in the
Condition
element of an IAM policy. You can use these keys to further refine the conditions under which the policy statement applies. For details about the columns in the following table, see
Condition keys table
.
To view the global condition keys that are available to all services, see Available global condition keys .
| Condition keys | Description | Type |
|---|---|---|
| ses:ApiVersion | Filters actions based on the SES API version | String |
| ses:FeedbackAddress | Filters actions based on the "Return-Path" address, which specifies where bounces and complaints are sent by email feedback forwarding | String |
| ses:FromAddress | Filters actions based on the "From" address of a message | String |
| ses:FromDisplayName | Filters actions based on the "From" address that is used as the display name of a message | String |
| ses:Recipients | Filters actions based on the recipient addresses of a message, which include the "To", "CC", and "BCC" addresses | ArrayOfString |


Meltdown (CVE-2017-5754)
Meltdown breaks the fundamental isolation between user applications and the operating system.
Spectre (CVE-2017-5753 and CVE-2017-5715)
Spectre breaks the isolation between different applications.
An attacker can use both vulnerabilities for stealing passworts and sensitive data. More information can be found at https://meltdownattack.com/.
How to check if your pc is vulnerable
Visit the official microsoft site for more information https://support.microsoft.com/en-us/help/4073119/protect-against-speculative-execution-side-channel-vulnerabilities-in.
Open powershell as admin
Open the start-menu and write powershell. Right click and select “Run as Administrator”. Click yes on the dialog for running as admin.
Install the PowerShell Module
Typ the following into the powershell.
1 | Install-Module SpeculationControl |
Press two times ‘y’ for installing the module.
Run the PowerShell module to validate the protections are enabled
Enter the following commands (You can also copy the commands from the official microsoft site)
1 | $SaveExecutionPolicy = Get-ExecutionPolicy |
Press ‘y’ for changing the Execution Policy
1 | Import-Module SpeculationControl |
After this enter
1 | Set-ExecutionPolicy $SaveExecutionPolicy -Scope Currentuser |
Press ‘y’ for changing the Execution Policy to the original state
Your are protected against meldown and spectre when you seeing only green-colored True’s.
If you have an old motherboard as i have and not getting any bios or firmware upgrade, then it will look like this:
This means that i am protected against meltdown but not against spectre.
You can see Spectre in action using this small program from github https://github.com/stephanvandekerkhof/cpp-spectre-meltdown-vulnerability-windows-test
Download spectre-meltdown-vulnerability-windows-test.exe and excecute it:
If you see the following output (as i see on my PC)
then your are vulnerable against Spectre.
This program creates a variable
1 | char *secret = "MELTDOWN/SPECTRE-POC by Stephan of EHVSN"; |
and uses Spectre to read its content.
What to do, if you are not protected against Spectre (like me)
- Update your Browser and maybe use chrome.
- If you are using chrome, activate Strict site isolation by entering
1
chrome://flags/#enable-site-per-process
into the address bar.
- Activate Strict site isolation and restart chrome. If it is activated, it should now look like this:
- Chrome tries to prevent attacks with javascripts, as you can read here: https://sites.google.com/a/chromium.org/dev/Home/chromium-security/ssca
- Buy a new PC (?) as your old one will most likely not get any new BIOS upgrade. The last update for my BIOS was 2015. But lets hope and wait.
Do you have also some usefull tips for windows user which are vulnerable against Spectre? Please let me know!
This page is synchronized from the post: ‘Protect your Windows PC against Meldown and Spectre’


{% extends "layout.html" %} {% block content %}
Product Purpose
We aim to provide a client-facing product that allows end-users to understand how their loan application, or general credit profile would be viewed by prospective institutional lenders.
In order to account for the situational nature of lending practices present in real companies, we will factor in the behavior of fixed income securities markets along with client-provided information.
Factoring in personal information alongside relevant macroeconomic data will allow a client to walk away with a clear understanding of their financial position in the current market climate.


You need to select text in an input box for any "Google suggest" type functions, however the selection model changes a lot between different browsers. The DWRUtil function to help here is: DWRUtil.selectRange(ele, start, end)
.
For example:
DWRUtil.selectRange("sel-test",
,
)
An input with id="sel-test"
:
Generally speaking DWR is not a generic Javascript library so it does not attempt to provide fill this need. However this is one of these really useful functions to have around if you are doing Ajax work.


Scale for Number Clients: Differentially Private Over-the-Air Computation Federated Learning (DP-AirComp FL)
Over-the-air computation (AirComp)-based federated learning (FL) enables low-latency uploads and the aggregation of machine learning models by exploiting simultaneous co-channel transmission and the resultant waveform superposition.
We aimed at realizing secure AirComp-based FL against various privacy attacks where malicious central servers infer clients' private data from aggregated global models. To this end, a differentially private AirComp-based FL is designed in this study, where the key idea is to harness receiver noise perturbation injected to aggregated global models inherently, thereby preventing the inference of clients' private data.
However, the variance of the inherent receiver noise is often uncontrollable, which renders the process of injecting an appropriate noise perturbation to achieve a desired privacy level quite challenging. Hence, we designed transmit power control across clients, wherein the received signal level is adjusted intentionally to control the noise perturbation levels effectively, thereby achieving the desired privacy level.
It is observed that a higher privacy level requires lower transmit power, which indicates the tradeoff between the privacy level and signal-to-noise ratio (SNR).
To understand this tradeoff more fully, the closed-form expressions of SNR (with respect to the privacy level) are derived, and the tradeoff was analytically demonstrated.
The analytical results also demonstrated that among the configurable parameters, the number of participating clients is a key parameter that enhances the received SNR under the aforementioned tradeoff. The analytical results are validated through numerical evaluations.
Publications
Y. Koda, K. Yamamoto, T. Nishio, and M. Morikura, “Differentially private airComp federated
learning with power adaptation harnessing receiver noise,” in Proc. IEEE GLOBECOM 2020, Taipei, Taiwan, Dec. 2020, pp.1-6.(IEEE Xplore:
,
Arxiv:
)
(Acceptance rate: 38%)
Scale for Model Size: Distillation-Based Semi-supervised Federated Learning (DS-FL)
We developed a federated learning (FL) framework overcoming largely incremental communication costs due to model sizes in typical frameworks without compromising model performance.
To this end, based on the idea of leveraging an unlabeled open dataset, we proposed a distillation-based semi-supervised FL (DS-FL) algorithm that exchanges the outputs of local models among mobile devices, instead of model parameter exchange employed by the typical frameworks.
In DS-FL, the communication cost depends only on the output dimensions of the models and does not scale up according to the model size.
The exchanged model outputs are used to label each sample of the open dataset, which creates an additionally labeled dataset.
Based on the new dataset, local models are further trained, and model performance is enhanced owing to the data augmentation effect. We further highlight that in DS-FL, the heterogeneity of the devices' dataset leads to ambiguous of each data sample and lowing of the training convergence.
To prevent this, we proposed entropy reduction averaging, where the aggregated model outputs are intentionally sharpened.
Moreover, extensive experiments show that DS-FL reduces communication costs up to 99% relative to those of the FL benchmark while achieving similar or higher classification accuracy.
Publications
S. Itahara, T. Nishio, Y. Koda, M. Morikura, and K. Yamamoto, “Distillation-based semi-supervised federated learning for communication-efficient collaborative training with non-IID private data,” submitted to IEEE Transactions on Mobile Computing, Minor Revision.


Chocolate Balls
Also known as "Coconut Balls" and "Swedish Chocolate Balls"
metadata
Created on 2018-11-30
Estimated time needed: At least 25 minutes. At most 25 minutes.
Ingredients
| 200 | g | butter | softened, not melted | |
| 180 | g | sugar | ||
| 150 | g | instant oats | ||
| 50 | g | coconut flakes | ||
| 8 | g | cocoa powder | ||
| 2 | tbsp | strong coffee | ||
| 1 | tsp | vanilla extract |
Scaling
Timeline
Directions
⌛ Active time 5 minutes
- 150 g instant oats
- 180 g sugar
- 8 g cocoa powder
Mix dry ingredients in a bowl
⌛ Active time 2 minutes
- 200 g butter | softened, not melted
- 1 tsp vanilla extract
- 2 tbsp strong coffee
Add butter and spices:
Softening the butter beforehand might be a good idea. Make sure the coffee isn't so warm it would melt the butter.
⌛ Active time 3 minutes
Knead:
By hand, until you have an even dough.
⌛ Active time 10 minutes
Shape into small balls
⌛ Active time 5 minutes
- 50 g coconut flakes


|
MoveToCode
|
Base class explicitly launching Windows Mixed Reality's system keyboard for InputField and TMP_InputField To be attached to the same GameObject with either of the components. More...
Protected Member Functions | |
| abstract Graphic | TextGraphic (T inputField) |
| abstract Graphic | PlaceHolderGraphic (T inputField) |
Protected Attributes | |
| T | inputField |
Additional Inherited Members | |
| Public Member Functions inherited from Microsoft.MixedReality.Toolkit.Experimental.UI.MixedRealityKeyboardBase | |
| void | HideKeyboard () |
| Closes the keyboard for user interaction. More... | |
| virtual void | ShowKeyboard (string text="", bool multiLine=false) |
| Opens the keyboard for user interaction. More... | |
| virtual void | ClearKeyboardText () |
| Removes the current text from the keyboard. More... | |
| Properties inherited from Microsoft.MixedReality.Toolkit.Experimental.UI.MixedRealityKeyboardBase | |
| bool | Visible [get] |
| Returns true if the keyboard is currently open. More... | |
| int | CaretIndex = 0 [get] |
| Returns the index of the caret within the text. More... | |
| UnityEvent | OnShowKeyboard [get, set] |
| Event which triggers when the keyboard is shown. More... | |
| UnityEvent | OnCommitText [get, set] |
| Event which triggers when commit action is invoked on the keyboard. More... | |
| UnityEvent | OnHideKeyboard [get, set] |
| Event which triggers when the keyboard is hidden. More... | |
| abstract string | Text [get, protected set] |
Base class explicitly launching Windows Mixed Reality's system keyboard for InputField and TMP_InputField To be attached to the same GameObject with either of the components.
| T |
| T | : | Selectable |
|
protectedpure virtual |
|
protectedpure virtual |
|
protected |


Remains of long-missing soldier coming home to Mississippi
GREENWOOD, Miss. (AP) - A Mississippi family will hold a funeral next month for a soldier who died during the Korean War.
The remains of U.S. Army Cpl. Joe T. Avant were identified in September.
The Greenwood Commonwealth reported a funeral is set for Dec. 13 in Avant’s hometown of Greenwood.
TOP STORIES
Nancy Pelosi goes for slam dunk -- and crashes to court
George Soros group asks Fox News to ban guest who claimed billionaire controls State Dept.
Democrats huff, puff, bluff and blow, but impeachment falls down
“He will have the same military honors of someone who is killed in war today,” said his younger sister, Delores Moore.
Avant was 20 when he was reported missing in action in 1950. He was declared dead in 1953.
In July, the U.S. received 55 boxes containing remains of American service members lost during the Korean War. Avant’s remains were identified from that.
“We are so thankful as a family that we are getting this closure after 69 years,” Moore said. “We are so grateful. Our desire is to honor our brother.”
Avant’s remains will arrive in Jackson a couple of days before the funeral. Moore said many members of the Avant family will drive to the Jackson airport for a ceremony by Army members from Fort Polk, Louisiana.
A convoy of vehicles and the Patriot Guard Riders, a group of motorcycle riders consisting of active and retired military service members, will accompany the hearse from Jackson to Greenwood.
“The Army has been so supportive of us as a family during this process,” Moore said.
The Defense POW/MIA Accounting Agency’s personnel profile of Avant states, “In 2018, the North Korean government repatriated 55 boxes containing the remains of American service members lost during the Korean War. One box contained remains recovered from the east side of the Chosin Reservoir, which made an association with Cpl. Avant feasible.”
To identify Avant’s remains, scientists used anthropological analysis and circumstantial and material evidence. Scientists from the Armed Forces Medical Examiner System used mitochondrial DNA and autosomal DNA and analysis.
Members of the Avant family had provided DNA samples to the Department of Defense about 20 years ago.
Avant deployed in late 1950. He served in the Heavy Mortar Company, 31st Infantry Regiment, 7th Infantry Division. His unit was part of the 31st Regimental Combat Team during the Battle of the Chosin Reservoir. He was reported missing in action on Nov. 30, 1950, near the Chosin Reservoir, North Korea, when his unit was attacked. After the battle, his remains could not be recovered.
The Defense POW/MIA Accounting Agency reports more than 7,600 Americans remain unaccounted for from the Korean War.`
Information from: The Greenwood Commonwealth, http://www.gwcommonwealth.com
Sign up for Daily Newsletters
Copyright © 2019 The Washington Times, LLC.
Please read our comment policy before commenting.


Select Area
Select Mart
UserID
Change Location
Checklist
Purchases
Account
How it Works
logout
Product Currently Unavailable
Please try Later...
ok


|
Simbody
3.5
|
This abstract class represents a mathematical function that calculates a value of arbitrary type based on M real arguments. More...
Classes | |
| class | Constant |
| This is a Function_ subclass which simply returns a fixed value, independent of its arguments. More... | |
| class | Linear |
| This is a Function_ subclass whose output value is a linear function of its arguments: f(x, y, ...) = ax+by+...+c. More... | |
| class | Polynomial |
| This is a Function_ subclass whose output value is a polynomial of its argument: f(x) = ax^n+bx^(n-1)+...+c. More... | |
| class | Sinusoid |
| This is a Function_ subclass whose output value is a sinusoid of its argument: f(x) = a*sin(w*x + p) where a is amplitude, w is frequency in radians per unit of x, p is phase in radians. More... | |
| class | Step |
| This is a Function_ subclass whose output value y=f(x) is smoothly stepped from y=y0 to y1 as its input argument goes from x=x0 to x1. More... | |
Public Member Functions | |
| virtual | ~Function_ () |
| virtual T | calcValue (const Vector &x) const =0 |
| Calculate the value of this function at a particular point. More... | |
| virtual T | calcDerivative (const Array_< int > &derivComponents, const Vector &x) const =0 |
| Calculate a partial derivative of this function at a particular point. More... | |
| T | calcDerivative (const std::vector< int > &derivComponents, const Vector &x) const |
| This provides compatibility with std::vector without requiring any copying. More... | |
| virtual int | getArgumentSize () const =0 |
| Get the number of components expected in the input vector. More... | |
| virtual int | getMaxDerivativeOrder () const =0 |
| Get the maximum derivative order this Function_ object can calculate. More... | |
This abstract class represents a mathematical function that calculates a value of arbitrary type based on M real arguments.
The output type is set as a template argument, while the number of input components may be determined at runtime. The name "Function" (with no trailing _) may be used as a synonym for Function_<Real>.
Subclasses define particular mathematical functions. Predefined subclasses are provided for several common function types: Function_<T>::Constant, Function_<T>::Linear, Function_<T>::Polynomial, and Function_<T>::Step. You can define your own subclasses for other function types. The Spline_ class also provides a convenient way to create various types of Functions.
|
inlinevirtual |
|
pure virtual |
Calculate the value of this function at a particular point.
| x | the Vector of input arguments. Its size must equal the value returned by getArgumentSize(). |
Implemented in SimTK::BicubicFunction, SimTK::Function_< T >::Step, SimTK::Function_< T >::Sinusoid, SimTK::Function_< T >::Polynomial, SimTK::Function_< T >::Linear, SimTK::Spline_< T >, and SimTK::Function_< T >::Constant.
|
pure virtual |
Calculate a partial derivative of this function at a particular point.
Which derivative to take is specified by listing the input components with which to take it. For example, if derivComponents=={0}, that indicates a first derivative with respective to component 0. If derivComponents=={0, 0, 0}, that indicates a third derivative with respective to component 0. If derivComponents=={4, 7}, that indicates a partial second derivative with respect to components 4 and 7.
| derivComponents | The input components with respect to which the derivative should be taken. Its size must be less than or equal to the value returned by getMaxDerivativeOrder(). |
| x | The Vector of input arguments. Its size must equal the value returned by getArgumentSize(). |
Implemented in SimTK::BicubicFunction, SimTK::Function_< T >::Step, SimTK::Function_< T >::Sinusoid, SimTK::Function_< T >::Polynomial, SimTK::Function_< T >::Linear, SimTK::Spline_< T >, and SimTK::Function_< T >::Constant.
|
inline |
This provides compatibility with std::vector without requiring any copying.
|
pure virtual |
Get the number of components expected in the input vector.
Implemented in SimTK::BicubicFunction, SimTK::Function_< T >::Step, SimTK::Function_< T >::Sinusoid, SimTK::Function_< T >::Polynomial, SimTK::Function_< T >::Linear, SimTK::Spline_< T >, and SimTK::Function_< T >::Constant.
|
pure virtual |
Get the maximum derivative order this Function_ object can calculate.
Implemented in SimTK::BicubicFunction, SimTK::Function_< T >::Step, SimTK::Function_< T >::Sinusoid, SimTK::Function_< T >::Polynomial, SimTK::Function_< T >::Linear, SimTK::Spline_< T >, and SimTK::Function_< T >::Constant.


Source code for deepchem.models.tensorgraph.optimizers
"""Optimizers and related classes for use with TensorGraph."""
import tensorflow as tf
[docs]class Optimizer(object):
"""An algorithm for optimizing a TensorGraph based model.
This is an abstract class. Subclasses represent specific optimization algorithms.
"""
def _create_optimizer(self, global_step):
"""Construct the TensorFlow optimizer.
Parameters
----------
global_step: tensor
a tensor containing the global step index during optimization, used for learning rate decay
Returns
-------
a new TensorFlow optimizer implementing the algorithm
"""
raise NotImplemented("Subclasses must implement this")
[docs]class LearningRateSchedule(object):
"""A schedule for changing the learning rate over the course of optimization.
This is an abstract class. Subclasses represent specific schedules.
"""
def _create_tensor(self, global_step):
"""Construct a tensor that equals the learning rate.
Parameters
----------
global_step: tensor
a tensor containing the global step index during optimization
Returns
-------
a tensor that equals the learning rate
"""
raise NotImplemented("Subclasses must implement this")
[docs]class Adam(Optimizer):
"""The Adam optimization algorithm."""
def __init__(self, learning_rate=0.001, beta1=0.9, beta2=0.999,
epsilon=1e-08):
"""Construct an Adam optimizer.
Parameters
----------
learning_rate: float or LearningRateSchedule
the learning rate to use for optimization
beta1: float
a parameter of the Adam algorithm
beta2: float
a parameter of the Adam algorithm
epsilon: float
a parameter of the Adam algorithm
"""
self.learning_rate = learning_rate
self.beta1 = beta1
self.beta2 = beta2
self.epsilon = epsilon
def _create_optimizer(self, global_step):
if isinstance(self.learning_rate, LearningRateSchedule):
learning_rate = self.learning_rate._create_tensor(global_step)
else:
learning_rate = self.learning_rate
return tf.train.AdamOptimizer(
learning_rate=learning_rate,
beta1=self.beta1,
beta2=self.beta2,
epsilon=self.epsilon)
[docs]class GradientDescent(Optimizer):
"""The gradient descent optimization algorithm."""
def __init__(self, learning_rate=0.001):
"""Construct a gradient descent optimizer.
Parameters
----------
learning_rate: float or LearningRateSchedule
the learning rate to use for optimization
"""
self.learning_rate = learning_rate
def _create_optimizer(self, global_step):
if isinstance(self.learning_rate, LearningRateSchedule):
learning_rate = self.learning_rate._create_tensor(global_step)
else:
learning_rate = self.learning_rate
return tf.train.GradientDescentOptimizer(learning_rate=learning_rate)
[docs]class ExponentialDecay(LearningRateSchedule):
"""A learning rate that decreases exponentially with the number of training steps."""
def __init__(self, initial_rate, decay_rate, decay_steps, staircase=True):
"""Create an exponentially decaying learning rate.
The learning rate starts as initial_rate. Every decay_steps training steps, it is multiplied by decay_rate.
Parameters
----------
initial_rate: float
the initial learning rate
decay_rate: float
the base of the exponential
decay_steps: int
the number of training steps over which the rate decreases by decay_rate
staircase: bool
if True, the learning rate decreases by discrete jumps every decay_steps.
if False, the learning rate decreases smoothly every step
"""
self.initial_rate = initial_rate
self.decay_rate = decay_rate
self.decay_steps = decay_steps
self.staircase = staircase
def _create_tensor(self, global_step):
return tf.train.exponential_decay(
learning_rate=self.initial_rate,
global_step=global_step,
decay_rate=self.decay_rate,
decay_steps=self.decay_steps,
staircase=self.staircase)
[docs]class PolynomialDecay(LearningRateSchedule):
"""A learning rate that decreases from an initial value to a final value over a fixed number of training steps."""
def __init__(self, initial_rate, final_rate, decay_steps, power=1.0):
"""Create a smoothly decaying learning rate.
The learning rate starts as initial_rate. It smoothly decreases to final_rate over decay_steps training steps.
It decays as a function of (1-step/decay_steps)**power. Once the final rate is reached, it remains there for
the rest of optimization.
Parameters
----------
initial_rate: float
the initial learning rate
final_rate: float
the final learning rate
decay_steps: int
the number of training steps over which the rate decreases from initial_rate to final_rate
power: float
the exponent controlling the shape of the decay
"""
self.initial_rate = initial_rate
self.final_rate = final_rate
self.decay_steps = decay_steps
self.power = power
def _create_tensor(self, global_step):
return tf.train.polynomial_decay(
learning_rate=self.initial_rate,
end_learning_rate=self.final_rate,
global_step=global_step,
decay_steps=self.decay_steps,
power=self.power)


QALD-4 is the fourth in a series of evaluation campaigns on multilingual question answering over linked data, this time with a strong emphasis on interlinked datasets and hybrid approaches using information from both structured and unstructured data. QALD-4 is part of the Question Answering lab at CLEF 2014.
While more and more structured data is published on the web, the question of how typical web users can access this body of knowledge becomes of crucial importance. Over the past years, there is a growing amount of research on interaction paradigms that allow end users to profit from the expressive power of Semantic Web standards while at the same time hiding their complexity behind an intuitive and easy-to-use interface. Especially natural language interfaces have received wide attention, as they allow users to express arbitrarily complex information needs in an intuitive fashion and, at least in principle, in their own language. Multilingualism has, in fact, become an issue of major interest for the Semantic Web community, as both the number of actors creating and publishing data all in languages other than English, as well as the amount of users that access this data and speak native languages other than English is growing substantially.
The key challenge is to translate the users' information needs into a form such that they can be evaluated using standard Semantic Web query processing and inferencing techniques. Over the past years, a range of approaches have been developed to address this challenge, showing significant advances towards answering natural language questions with respect to large, heterogeneous sets of structured data. However, only few systems yet address the fact that the structured data available nowadays is distributed among a large collection of inter- connected datasets, and that answers to questions can often only be provided if information from several sources are combined. In addition, a lot of information is still available only in textual form, both on the web and in the form of labels and abstracts in linked data sources. Therefore approaches are needed that can not only deal with the specifi character of structured data but also with finding information in several sources, processing both structured and unstructured information, and combining such gathered information into one answer.


I am awesome.I am awesome.I am awesome.I am awesome.
I am awesome.I am awesome.I am awesome.I am awesome.I am awesome.I am awesome.I am awesome.I am awesome.I am awesome.I am awesome.I am awesome.I am awesome.I am awesome.I am awesome.I am awesome.I am awesome.I am awesome.I am awesome.I am awesome.I am awesome.I am awesome.I am awesome.I am awesome.I am awesome.I am awesome.I am awesome.I am awesome.I am awesome.
Projects
Bank
using TDD - an application, re-creating an experience with a bank teller; Accounts created were put into a collection allowing for deposit, withdrawal, and transfers of currency between accounts
using TDD - a simulated pet and environment developed to interact with end user, with growing needs for care, adoption, removal and any other plausible actions for a pet shelter such as cleanliness, and happiness.
hospital system imitation, effectively creating a pseudo accounts for associated employees, ie doctor, nurse, and janitors. The application not only allowed for adding information of employees, but removal as well and searches for certain types of employees.


--- title: Ariel Anders layout: default test: pooooo ---
Roboticist at Robust.AI
I am a roboticist with almost a decade of experience blending the fields of robotics and computer science. Currently, I am working at an early stage robotics startup, robust.ai.
I completed my PhD at MIT where I researched robust robotic manipulation methods with the vision of enabling household helpers. As a teaching assistant at MIT, I taught three undergraduate hands-on robotics laboratory courses and instructed two high-school autonomous vehicle classes. As a PhD candidate, I also lectured a mechanical engineering course on Dynamics at Olin College of Engineering. My passions extend outside research and education: at MIT I helped found a clean energy assessment center, developed an iOS app for people with vision impairment, and received a grant to install therapy lamps across campus.
I attained a BS in Computer Engineering from the University of California: Santa Cruz in 2012. I earned a Master of Science in Electrical Engineering and Computer Science from MIT in 2014 and completed my PhD in 2019.
|
Contact Information |
||
|---|---|---|
|<EMAIL_ADDRESS>|
|
Robust.AI 380 Portage Ave Palo Alto, CA 94306 |


Posts about mswin-dev
- £ key in Windows on a US laptop keyboard, done right.
- TIL: Launch Gitk displaying all branches
- TIL: 'Go to Definition' in Vim for Python using Ctags, Done Right
- Rerun unit tests whenever files update
- TIL: More Colored Terminal text on Windows: AnsiCon
- colorama: Simple cross-platform Python API for colored terminal text
- Acceptance Testing .NET Applications using IronPython
- Howto bundle binary dependancies with py2exe, et al.
- TIL: MSWindows Programming : Propogating child process exit values out of .bat scripts
- My Fonts Look Crap. I blame Windows and ATI.
- Set your Prompt
- Programming on Windows : Use Console
- Making a wix installer run a program by default


Mac OS X 10.7 Lion: the Ars Technica review
Window resizing
A lack of traditional scroll bars also means the elimination of the small patch of pixels in the lower-right corner of a window where the vertical and horizontal scroll bars meet. Since 1984, this area has been home to the one and only control used to resize a window. Setting the scroll bar appearance preference to "always visible" restores the clickable real estate, albeit sans the traditional "grip lines."
Despite the plain appearance, this resize control works as expected; what's unexpected is the cursor change that accompanies the action. The double-arrow cursor has been used in other operating systems for years, mostly to differentiate two-axis resizing (width and height) from single-axis resizing (height only or width only). When there's only one resize control per window, it's obvious that it can be used to change both the width and the height. Lion's new cursor can mean only one thing…
That's right, long-suffering switchers, Lion finally allows windows to be resized from any edge and from all four corners, with a special cursor for each of the eight starting points. (When a window is at its size limit, the cursors show an arrow pointing in a single direction—a nice touch.)
As you can see from the image above, what Apple hasn't done is add borders to the windows. So where, exactly, do we "grab" when resizing from a borderless window edge? There's no way around it: some pixels must be sacrificed to the gods of Fitts's law.
A few pixels within the outer edge of the content area of the window (two to three, depending on where you count from) are commandeered for window resizing purposes. You can still click on these areas, and the click event will correctly propagate to the application that owns the window, but you'll be clicking with a resize cursor instead of a normal arrow cursor.
Two to three pixels doesn't make for a very wide target, however, which is why Apple has chosen to appropriate pixels from both sides of the window border. Four to five pixels outside the content area of the window are also clickable for window resizing purposes. Clicks in these areas don't get sent to the window (they're out of the window's bounds) and they don't get sent to whatever happens to be behind the active window—you know, the thing that you ostensibly just clicked on. Effectively, Lion windows have thin, invisible borders around them used only for resizing. (Unlike Mac OS 8 and 9 windows, which had real, visible borders, Lion windows can't be dragged by their borders.)
When overlay scroll bars are in use, the full 16x16 pixel home of the traditional resize widget in the lower-right corner is clickable, making this still the easiest target for window resizing, whether it's visible or not.
Lion has a few more surprises on window edges, one of which is window size-related. Windows belonging to applications that support Lion's new full-screen mode may show an embossed double arrow icon on the far-right side of their title bars. Clicking it will cause the window to fill the entire screen. Other windows, the Dock, and even the menu bar are hidden in this mode. The window's title bar also disappears, making it unclear how to exit this mode. But just stab the cursor at the top of the screen and the menu bar slides back down into view, containing all the expected menus plus a reversed version of the double arrow symbol. Click the inward-facing arrows to take the current window out of full-screen mode.
Animation
Mac OS X has always used animation in its user interface, starting with the genie effect over a decade ago, and really ramping up with the introduction of the Core Animation framework three years ago. Lion continues this trend. In nearly all new or changed applications in Lion, if something conceivable can be animated, it is. The Finder is a good example. Even features whose functionality hasn't actually changed in Lion, such as dragging multiple items from one window to another, are given a fresh coating of animation and fades.
At its best, animation explicitly communicates information that was either absent or only implied before. For example, the genie animation tells the user where a window goes when it's minimized. In other cases, such as the water ripple effect in Dashboard, animation can add a bit of fun to an interface.
But danger lurks. A newly discovered animation might delight the user the first time it's shown, but the 350th time might not seem quite so magical. This is especially true if the animation adds a delay to the task, and if that task is done frequently as part of a time-sensitive overall task. The Dashboard water ripple is acceptable because adding a new widget to the screen is an infrequent task. But if the screen rippled every single time a new window appeared anywhere in the OS, users would revolt.
Well, guess what happens every time a new window appears on the screen in Lion? No, it's nothing as garish as a water ripple, but there is an animation. Each window starts as a tiny dot centered on the window's eventual position on the screen, then quickly animates to its full size.
This animation conveys no new information. It does not tell the user where a window came from, since the animation starts at the final position of the window. Whether or not the animation actually delays the opening of the window, it certainly feels like it does, which is even more important. This type of animation can make Lion feel slower than Snow Leopard. And when an animation like this stutters or skips a few frames due to heavy disk i/o or CPU usage, it makes your whole Mac feel slower, like you're playing a 3D game with an inadequate video card. And for what? For what someone at Apple hopes will be a lasting feeling of delight?
Perhaps it could be argued that the animation catches the eye more than a window that appears instantly (though that probably depends on the size of the window and what's behind it on the screen). For "unexpected" windows like error dialog boxes, that could be a benefit. But for "expected" windows (i.e., those that appear in response to deliberate user input), the powerful, primordial pull of these moving images is an unwelcome distraction, not a benefit.
It's conceivable that this animation could delight some users, but I have a hard time believing that the enjoyment will last much past the first week. (Interestingly, this animation does not play in reverse when a window is closed. This, perversely, makes window closing feel faster than window opening in Lion.)
Unlike the scrolling behaviors discussed earlier, there are no user-visible preferences for these new animations, which makes it all the more important for Apple to strike a good balance. In my estimation, Lion crosses the line in a few places; the new window animation is the most egregious example. I look forward to discovering a way to disable it. [Update: here it is: defaults write NSGlobalDomain NSAutomaticWindowAnimationsEnabled -bool NO
]
User comments


Across
1)
ate
eight
2)
plain
plane
3)
course
coarse
4)
red
read
Down
1)
weak
week
2)
tale
tail
3)
allowed
aloud
4)
stair
stare


Chania
The City
Chania is the capital of the Chania region on the island of Crete. The city can be divided in two parts, the old town and the modern city.
Resize the browser window to see how the content respond to the resizing.
Dropdown Options....1
Second Dropdown box
Dropdown Options....2
dgbg
- Option 1
- Option 2
- Option 3
- Option 4
- Option 5
Dropdown Options....3
- Option 1
- Option 2
- Option 3
- Option 4
- Option 5


Name
City
Adam Freeman
London
Joe Smith
New York
Anne Jones
Paris
I like
apples
and oranges.
Name
City
Peter Pererson
Boston
Chuck Fellows
Paris
Jane Firth
Paris


Begum Of Bollywood Is Back With The Season 2 Of What Women Want On 104.8 Ishq
by By LekhakaShe was bold, fierce and unapologetic! Kareena Kapoor Khan, who donned the RJ hat with much ease and flair in the first season of What Women Want on 104.8 Ishq, is back on the mic with yet another exciting season.
Giving a sneak-peek into what's in store this time, Ishq FM treats its audience by releasing the trailer for the upcoming season. Sharing some tongue in cheek fun to starting imperative conversations on societal reservations, the trailer gives us a glance into candid yet bold conversations between the Bollywood diva and some of the iconic names in the industry.
Saif Ali Khan, Sharmila Tagore, Rhea Kapoor, Raveena Tandon, Kartik Aryan, Kajol and many more can be seen sharing the couch with the mega star in this exciting first look. Stay tuned, as the show launches very soon on Ishq FM's YouTube page. To know more on what went down between them, catch the trailer here!


INFO
Rigging - IK2Bone.
Another CharacterSolver, the IK2Bone, is demonstated in this sample. The solver is controlled by two positions, the target and the upvector. The manipulators used function in screen space.


This structure provides status information for a sec_proxy thread. More...
#include <csl_sec_proxy.h>
Data Fields | |
| uint32_t | dir |
| uint32_t | maxMsgCnt |
| uint32_t | curMsgCnt |
This structure provides status information for a sec_proxy thread.
| uint32_t CSL_SecProxyThreadStatus::curMsgCnt |
Max message count allowed for an outbound proxy thread (valid only when dir==0). CSL_SEC_PROXY_THREAD_STATUS_UNAVAILABLE = information not available.
| uint32_t CSL_SecProxyThreadStatus::dir |
sec_proxy thread error: 0 = no error, 1 = error detected
| uint32_t CSL_SecProxyThreadStatus::maxMsgCnt |
Direction for the proxy thread: 0 = outbound, write only, 1 = inbound, read only, CSL_SEC_PROXY_THREAD_STATUS_UNAVAILABLE = information not available


When you work with us, you are part of a team of committed collaborators. All aspects of our software development process are integrated, iterative and agile. Our approach unifies design, development and product management to create exceptional products. We start each project by understanding your business goals, the user’s needs and the product requirements. Then we help translate them into effective and elegant solutions.
When you work with us, you are part of a team of committed collaborators. All aspects of our software development process are integrated, iterative and agile. Our approach unifies design, development and product management to create exceptional products. We start each project by understanding your business goals, the user's needs and the product requirements. Then we help translate them into effective and elegant solutions.
Our design practice offers a full range of services including branding strategy, interaction and visual design and user experience testing. Throughout your project, our designers create and implement visual designs and workflows, solicit user feedback, and work with you to make sure what gets built is what is needed.
All engineers are fluent in the latest enterprise, mobile and web development technologies. They collaborate with your team to write, test, and improve code on a daily basis, using proven practices such as test-driven development and pair programing.
Planning and development is iterative. Because we are constantly coding and testing, the products we build are always ready to go live. This iterative process allows for changes as business requirements evolve.
Planning and development is iterative. Because we are constantly coding and testing, the products we build are always ready to go live. This iterative process allows for changes as business requirements evolve.