Simple windows game framework:
Programmer reference
Table of contents
Part 1. Welcome to
Simple windows game framework
Chapter 1.
Introduction
Introduction
Hello from Russia. My name is Popov Evgeniy Alekseyevich. I am the
individual programmer. I enjoy creating software. I also like old–school
video games. Do you want to develop video games for Microsoft Windows? You
need a good game engine for doing it. I made my own engine. I hope that my
C++ game engine will be useful for many programmers.
Features
Let me show the engine features. Let's go.
- Open source code.
- Easy to use object–orientated design.
- Very fast.
- Minimum external dependencies: only DirectX, OPENGL and standard
Windows API libraries.
- Don't need to link a main program with the engine binary file.
The engine is just source code files with all engine codes.
Installation
How install this engine? Follow these steps:
Copy these files to your project directory:
Add it to your project.
Add this directive to your code: #include "SWGF.h"
Yes. This is really all that you need to do.
Feedback
Send me e–mail if you want contact
with me.
Chapter 2. A special
thanks
I want to say «Big thanks for technical consultation» to these
peoples:
Also thanks to PVS–Studio team for free
license.
Chapter 3. License
Simple windows game
framework license
Copyright (C) 2015 – 2023 Popov Evgeniy Alekseyevich
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.
Third–party license
Copyright (c) 2007 – 2010 The Khronos Group Inc.
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and/or associated documentation files (the
"Materials"), to deal in the Materials without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Materials, and to
permit persons to whom the Materials are furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Materials.
 IN
NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE
USE OR OTHER DEALINGS IN THE MATERIALS.
Chapter 4. System
requirements
You can see minimum system requirement below.
| Operating system |
Windows XP or higher |
| Minimum color depth |
16 bits |
| Sound card |
Any sound card |
| Processor |
Intel Pentium 4 for 32–bit system |
| Intel Core 2 Duo for 64–bit system |
Chapter 5. Trouble
guide
You need Visual
C++ Redistributable Packages if you game code compiled under Visual C++.
Chapter 6. Compilers
This engine successfully tested with these compilers:
- TDM–GCC
- MINGW–w64
- Visual C++ 2008
- Visual C++ 2010
- Visual C++ 2012
- Visual C++ 2013
- Visual C++ 2015
- Visual C++ 2017
- Visual C++ 2019
- Visual C++ 2022
- C++ Builder XE4
- C++ Builder XE5
- C++ Builder XE6
- C++ Builder XE7
- C++ Builder XE8
- C++ Builder 10 Seattle
- C++ Builder 10.1 Berlin
- C++ Builder 10.2 Tokyo
- C++ Builder 10.3 Rio
- C++ Builder 10.4 Sydney
- C++ Builder 11 Alexandria
Chapter 7. Platform
specific notes
DirectX
You need to update DirectX
End-User Runtime before run your game.
Windows XP support
You need TDM–GCC or Visual C++ 2008 for Windows
XP support.
Compiler
optimization
Disable all compiler optimization for correct working. See documentation
of your favorite compiler for more information about compiler
optimization.
Note for Visual C++ users
Disable pre–compiled headers before start compilation. Old Visual C++
users can do it via project creation wizard.
Visual C++ 2017 or higher users must follow these steps:
- Go to «Project properties – C/C++ – Precompiled Headers»
- Set «Precomiled Header» option to «Not Using Precompiled
Headers»
Note for MINGW–w64 and
TDM–GCC users
Don't forget to link your program with these files:
- user32.lib
- kernel32.lib
- gdi32.lib
- opengl32.lib
- ole32.lib
- strmiids.lib
- xinput.lib
See documentation of the compiler for more information about linking.
Chapter 8. The engine
name–space
SWGF is the main name–space.
All the engine classes declared in few nested namespaces.
Chapter 9. Custom
date types
Almost all custom data types declared in SWGF
namespace.
Part 2. Base things
Chapter 1. Coordinate
system
The engine uses standard coordinate system. Coordinates start at top–left
corner. Look to this picture to understand it.
Chapter 2. A game
cycle
What is the main point in your game? A game cycle. You can see the
structure of a typical game cycle below.
Part 3. Graphics
Chapter 1. The
sub–namespace
All subsystems in this section declared in Graphics
sub–namespace.
Chapter 2. Base
graphics subsystem
Introduce to base graphics
subsystem
Base graphics subsystem do rendering game scene. This subsystem using OPENGL for render. Most modern video–card
support hardware accelerated OPENGL. Software emulated OPENGL will
activate if hardware acceleration not available.
Render performance
Always use latest video–card drivers. It can increase render performance.
You can also try to change screen resolution if you have low render
performance.
Fps limitation
Fps is an important thing. Many fps need for good animation, but it also
needs high processor usage. Fps limit is 60 by default. It is optimal
value.
Work with base graphics
subsystem
Screen class provide access to
the base graphic subsystem. Let's look at public methods.
void Screen::clear_screen(); –
Clear the screen. Fill it by black color.
void Screen::initialize(); –
Initialize the base graphic subsystem with default screen resolution.
void Screen::initialize(const
unsigned int width,const unsigned
int heigt); –
Initialize the base graphic subsystem with custom screen resolution.
bool Screen::sync();
– Show current back–buffer content on screen. Return false if a game is
terminated. This method uses fps limit and do wait between frames.
bool Screen::update(); – Show
current back–buffer content on screen. Return false if a game is
terminated. This method ignoring fps limit and need high processor usage.
bool Screen::is_ready(); –
Return true if the subsystem is already initialized.
bool Screen::is_accelerated() const;
– Return true if render is hardware accelerated.
bool Screen::is_software() const;
– Return true if software render is active.
unsigned int Screen::get_fps() const;
– Return current fps value.
unsigned long int Screen::get_color()
const; – Return current color depth in bits per pixel.
unsigned int Screen::get_width() const;
– Return screen width in pixels.
unsigned int Screen::get_height()
const; – Return screen height in pixels.
Screen* Screen::get_handle(); –
Return the handle to base graphics subsystem object.
Chapter 3. Picture
subsystem
An important subsystem
Picture subsystem implement image storage.
Work with picture
subsystem
Picture class provide simple
access to picture subsystem. Don't use it directly. Let's look at public
methods.
unsigned int *Picture::get_image();
– Return handle to image storage.
void Picture::destroy_image();
– Destroy an image in the storage.
bool
Picture::is_storage_empty() const; – Return true if storage is
empty.
unsigned int Picture::get_image_width()
const; – Return image width in pixels.
unsigned int
Picture::get_image_height() const; – Return image height in
pixels.
size_t
Picture::get_image_lenght() const; – Return image length in
bytes.
Chapter 4. Animation
subsystem
An important subsystem
Animation subsystem let you control animation frames.
Frame indexing
First frame index is 1.
Work with animation subsystem
Animation class provide simple
access to animation subsystem. Don't use it directly. Let's look at public
methods.
unsigned int Animation::get_frames()
const; – Return amount of frames in scrollable background or
animated sprite.
unsigned int Animation::get_frame()
const; – Return current frame in scrollable background or
animated sprite.
Chapter 5. Image kind
Image kind look as predefined constants. You can see it below.
Image kind
|
Description |
| STATIC_IMAGE |
Normal background or normal sprite
|
| HORIZONTAL_ANIMATED |
Horizontal scrolling background or horizontal strip |
| VERTICAL_ANIMATED |
Vertical scrolling background or vertical strip
|
Chapter 6. Background
Level decoration
Background is a big image. It is like decoration in theater stage. Any
game has a background. The background will stretch to screen resolution
before rendering the game scene.
There are two background kinds: normal background and scrolling
background. The scrolling background is a big image with few frames.
Horizontal orientated scrolling background look like horizontal orientated
photo ribbon. Vertical orientated scrolling background look like vertical
orientated photo ribbon.
Work with background
Just use Background class to
work with background. Let's look at public methods.
void Background::prepare(const Screen
*screen); – Prepare for drawing.
void Background::prepare(Screen
&screen); – Prepare for drawing.
void Background::prepare(const unsigned
int width,const unsigned int heigt); – Prepare for drawing.
void Background::disable_mirror();
– Disable background mirroring mode.
void Background::horizontal_mirror();
– Set horizontal background mirroring mode.
void Background::vertical_mirror();
– Set vertical background mirroring mode.
void Background::complex_mirror();
– Set both horizontal and vertical background mirroring mode.
void Background::set_target(const
unsigned int target); – Set target frame in scrollable
background.
void Background::step(); –
Increase number of target frame in scrollable background. Set it to 1 if
number of target frame more than frame amount.
void Background::set_setting(const
SWGF::IMAGE_KIND kind,const unsigned int frames); – Set setting.
Last argument will ignore if background is not scrollable.
void Background::load(Image
*background,const SWGF::IMAGE_KIND kind,const unsigned int frames);
– Load background from the buffer.
void Background::load(Image
&background,const SWGF::IMAGE_KIND kind,const unsigned int frames);
– Load background from the buffer.
void Background::load(Image
*background); – Load normal background from the buffer.
void Background::load(Image
&background); – Load normal background from the
buffer.
void Background::load(const char
*name,const SWGF::IMAGE_KIND kind,const unsigned int frames); –
Load background from target file.
void Background::load(const char *name);
– Load normal background from target file.
void Background::draw(); – Draw
a background.
void Background::draw(const unsigned int
target); – Draw target frame in scrollable background.
void Background::destroy_image();
– Destroy a background image.
void Background::destroy(); –
Destroy a background image and destroy a background texture.
unsigned int Background::get_frame()
const; – Return current frame in scrollable background.
unsigned int Background::get_frames()
const; – Return frame amount in scrollable background.
unsigned int Background::get_width()
const; – Return the width of the background.
unsigned int Background::get_height()
const; – Return the height of the background.
SWGF::IMAGE_KIND Background::get_kind()
const; – Get background type.
Background texture
Background don't draw if background texture is don't exist. Background
texture will automatically create after call load_background method.
Important notice
Always call prepare method after
set background setting or load background.
Chapter 7. Base
sprite subsystem
Small important
thing
A sprite is a transparent image. It is useful for many things: enemies,
bonuses, etc&
Work with base sprite subsystem
Billboard class provide simple
access to base sprite subsystem. Don't use it directly. Let's look at
public methods.
void
Billboard::set_transparent(const bool enabled); – Enable or
disable the transparent mode.
bool Billboard::get_transparent()
const; – Return true if transparent mode is enable.
void
Billboard::set_position(const unsigned int x, const unsigned int y);
– Set sprite position.
void Billboard::set_size(const unsigned
int width, const unsigned int height); – Change the sprite size.
void Billboard::set_x(const
unsigned int x); – Set x–coordinate of the sprite position.
void Billboard::set_y(const
unsigned int y); – Set y–coordinate of the sprite position.
void
Billboard::set_width(const unsigned int width); – Change the
sprite width.
void Billboard::set_height(const
unsigned int height); – Change the sprite height.
unsigned int Billboard::increase_x(); – Increase
x–coordinate and return increased x–position.
unsigned int Billboard::decrease_x(); – Decrease
x–coordinate and return decreased x–position.
unsigned int Billboard::increase_y(); – Increase
y–coordinate and return increased y–position.
unsigned int Billboard::decrease_y(); – Decrease
y–coordinate and return increased y–position.
unsigned int Billboard::increase_x(const unsigned int
increment); – Increase x–coordinate with user value and return
increased x–position.
unsigned int Billboard::decrease_x(const unsigned int
decrement); – Decrease x–coordinate with user value and return
decreased x–position.
unsigned int Billboard::increase_y(const unsigned int
increment); – Increase y–coordinate with user value and return
increased y–position.
unsigned int Billboard::decrease_y(const unsigned int
decrement); – Decrease y–coordinate with user value and return
decreased y–position.
unsigned int
Billboard::get_x() const; – Return x–coordinate of the sprite
position.
unsigned int Billboard::get_y() const;
– Return y–coordinate of the sprite position.
unsigned int Billboard::get_width()
const; – Return the width of the sprite.
unsigned int Billboard::get_height()
const; – Return the height of the sprite.
SWGF::BOX Billboard::get_box()
const; – Return collision related information.
void Billboard::disable_mirror();
– Disable sprite mirroring mode.
void Billboard::horizontal_mirror();
– Set horizontal sprite mirroring mode.
void Billboard::vertical_mirror();
– Set vertical sprite mirroring mode.
void Billboard::complex_mirror();
– Set both horizontal and vertical sprite mirroring mode.
void
Billboard::draw(); – Draw a sprite.
void Billboard::draw(const
unsigned int x, const unsigned int y); – Set sprite position and
draw it.
void Billboard::draw(const bool transparency); – Set
transparent mode and draw a sprite.
void Billboard::draw(const bool transparency,const unsigned
int x, const unsigned int y); – Set transparent mode and draw a
sprite at target position.
Chapter 8. Ordinary
sprites
Sprite types
There are two kinds of ordinary sprites: normal sprites and strip. The
strip is an animated sprite. Do you remember an analog camera?
Strip look like photo ribbon. Horizontal strip look like the horizontal
orientated photo ribbon.
Vertical strip look like the vertical orientated photo ribbon.
Frame indexing
First frame index is 1.
Work with sprites
Just use Sprite class to work
with a sprite. It is derived from threeclasses: Billboard,
Animation and Picture.
Let's look at public methods.
void Sprite::set_setting(const
SWGF::IMAGE_KIND kind,const unsigned int frames); – Set sprite
settings. Last argument will ignore if sprite not animated.
void Sprite::load(Image *buffer,const
SWGF::IMAGE_KIND kind,const unsigned int frames); – Load a sprite
from the buffer and set it setting.
void Sprite::load(Image *buffer);
– Load a normal sprite from the buffer.
void Sprite::load(Image
&buffer,const SWGF::IMAGE_KIND kind,const unsigned int frames);
– Load a sprite from the buffer and set it setting.
void Sprite::load(Image &buffer);
– Load a normal sprite from the buffer.
void Sprite::load(const char *name,const
SWGF::IMAGE_KIND kind,const unsigned int frames); – Load a sprite
from target file and set it setting.
void Sprite::load(const
char *name); – Load a
normal sprite from target file.
void Sprite::set_target(const unsigned
int target); – Set target frame in strip.
void Sprite::step(); – Increase
number of target frame in strip. Set it to 1 if number of target frame
more than frame amount.
SWGF::IMAGE_KIND Sprite::get_kind()
const; – Get sprite type.
Sprite*
Sprite::get_handle(); – Return the handle to sprite object.
void Sprite::clone(Sprite *target);
– Create copy of the sprite if the image storage of target sprite is not
empty.
void Sprite::clone(Sprite &target);
– Create copy of the sprite if the image storage of target sprite is not
empty.
void Sprite::destroy(); –
Destroy a sprite image and destroy a sprite texture.
Sprite texture
Sprite will don't draw if sprite texture is don't exist. Sprite texture
will automatically create when load or clone sprite.
Chapter 9. Sprite
sheet
Some words about sprite
sheet
Sprite sheet is a special kind of animated sprites. Each frame has fixed
size. A sprite sheet is a matrix of frames. Look to this picture to
understand it.
Row and column
First row is 1. First column is 1.
Work with sprite sheet
subsystem
Sheet class provide access to
the sprite sheet subsystem. It is derived from three classes:
Billboard, Picture
and Animation. Let's look at
public methods.
unsigned int Sheet::get_row(const unsigned int target)
const; – Return row of target frame.
unsigned int Sheet::get_column(const unsigned int target)
const; – Return column of
target frame.
unsigned int
Sheet::calculate(const unsigned int row,const unsigned int column)
const; – Calculate the frame by row and column.
unsigned int
Sheet::get_rows() const; – Return row amount.
unsigned int Sheet::get_columns()
const; – Return column amount.
void Sheet::destroy();
– Destroy a sprite sheet image and destroy a sprite sheet texture.
void Sheet::select(const
unsigned int row,const unsigned int column); – Select the sprite
by row and column.
void Sheet::select(const
unsigned int target); – Select the sprite by frame number.
void Sheet::step(); –
Increase number of target frame. Set it to 1 if number of target frame
more than frame amount.
void Sheet::load(Image
*sheet,const unsigned int row_amount,const unsigned int column_amount);
– Load a sprite sheet from the buffer.
void Sheet::load(Image &sheet,const
unsigned int row_amount,const unsigned int column_amount); – Load
a sprite sheet from the buffer.
void Sheet::load(const char *name,const
unsigned int row_amount,const unsigned int column_amount); – Load
a sprite sheet from tagret file.
Sheet* Sheet::get_handle(); –
Return the handle to sprite sheet.
void Sheet::clone(Sheet *target);
– Create copy of the sprite sheet if the image storage of target sprite
sheet is not empty.
void Sheet::clone(Sheet &target);
– Create copy of the sprite sheet if the image storage of target sprite
sheet is not empty.
Sprite sheet texture
Sprite will don't draw if sprite sheet texture is don't exist. A sprite
sheet texture will automatically create after call load_sheet
method.
Chapter 10. Text
How to draw a text?
Just use text subsystem to draw a text. This subsystem need a font for
text drawing. You must load a font before start draw the text. The font is
just a sprite sheet with 16 rows and 16 columns.
Valid characters
Only 8–bit characters supported.
Text orientation
Text orientation look as predefined constants. You can see it below.
Text orientation
|
Description |
| HORIZONTAL_TEXT |
Horizontal orientated text
|
| VERTICAL_TEXT |
Vertical orientated text |
Work with text
Text class provide a simple
interface to text subsystem. Let's look at public methods.
SWGF::TEXT_KIND Text::get_orientation()
const; – Get current text orientation.
void Text::set_orientation(const
SWGF::TEXT_KIND target); – Set current text orientation.
unsigned int Text::get_font_width()
const; – Get current font width in pixels.
unsigned int Text::get_font_height()
const; – Get current font height in pixels.
void Text::set_position(const unsigned
int x,const unsigned int y); – Set output position.
void Text::set_size(const unsigned int
width,const unsigned int height); – Change the font size.
void Text::set_width(const unsigned int
width); – Set the font width.
void Text::set_height(const unsigned int
height); – Set the font height.
void Text::set_setting(const unsigned
int width,const unsigned int height,const SWGF::TEXT_KIND kind);
– Set text output settings.
void Text::load_font(Image *font);
– Load a font from the buffer.
void Text::load_font(Image &font);
– Load a font from the buffer.
void Text::load_font(const char *name);
– Load a font from target file.
void Text::print(const char target);
– Draw single character at current position.
void Text::print(const char *target);
– Draw text at current position.
void Text::print(const unsigned int
x,const unsigned int y,const char target); – Draw single
character at specific position.
void Text::print(const unsigned int
x,const unsigned int y,const char *target); – Draw text at
specific position.
void Text::disable_mirror(); –
Disable text mirroring mode.
void Text::horizontal_mirror(); –
Set horizontal text mirroring mode.
void Text::vertical_mirror(); –
Set vertical text mirroring mode.
void Text::complex_mirror(); –
Set both horizontal and vertical text mirroring mode.
void Text::destroy_image(); –
Destroy a font image.
void Text::destroy_font(); –
Destroy a font image and destroy a font texture.
Chapter 11. Loading
images
Load an image from files
Use image loader to load an image from a file. Image
class provide simple access to image loader. It is a simple class with few
methods.
unsigned
char *Image::load_tga(const
char *name); – Load a Truevision TGA image and return handle to
image buffer.
unsigned char *Image::get_data();
– Return handle to image buffer.
unsigned int Image::get_width() const;
– Return width of current image.
unsigned int Image::get_height() const;
– Return height of current image.
size_t Image::get_length() const;
– Return length of image buffer in bytes.
Image* Image::get_handle(); –
Return the handle to image loader.
void Image::destroy_image(); –
Destroy the current image and free image buffer.
Important remark
A new will image replace current image if current image already exist.
Incorrect images will ignore and don't load.
Supported format
All loading images must have correct specification. You can load an
image from 32 bit Truevision
TGA pictures.
Recommend software
You can use a wide range of graphics software to convert your images to
the correct format. I recommend use GIMP
for doing it. It is a powerful image editor.
Part 4. Common things
Chapter 1. The
sub–namespace
Almost all subsystems in this section declared in Common
sub–namespace.
Chapter 2. Abnormal
program termination
You can use Halt function to
terminate a program. This function declared in SWGF
name–space.
void SWGF::Halt(const char *message);
– Terminate the program. Write error message to log file if logging
enabled.
Chapter 3. Timer
Timer is a very useful thing. Just use Timer
class to work with the timer. Let's look at public methods.
void Timer::set_timer(const double
seconds); – Set timer interval and initialize start point.
double Timer::get_interval() const;
– Return current timer interval.
bool Timer::check_timer(); –
Return true and reinitialize start point if interval between stop and
start points large or equal than specific seconds.
Chapter 4. Collision
An important thing for any
game
What is an important thing for a video games? A collision.
Collision detail
Collision detector using bounding box collision method to detect
collision. Collision related information store in special custom data
type.
typedef struct
{
unsigned int x;
unsigned int y;
unsigned int width;
unsigned int height;
} BOX;
Work with collision detector
Collision class provide easy
access to collision detector. It is a simple class with few methods. Let's
look at public methods.
void Collision::set_target(const
SWGF::BOX &first_target,const SWGF::BOX &second_target);
– Set targets for collision detector.
bool Collision::check_collision()
const; – Return true if collision between two objects is
accepted.
bool Collision::check_collision(const
SWGF::BOX &first_target,const SWGF::BOX &second_target);
– Set collision targets and check collision between it.
Part 5. Other
important things
Chapter 1. The
sub–namespace
All subsystems in this section declared in Misc
sub–namespace.
Chapter 2. Memory
RAM is an important resource. Just use Memory
class to get total memory size and free memory size. Let's look at public
methods.
unsigned long long int
Memory::get_total_physical(); – Return total physical memory size
in bytes.
unsigned long long int
Memory::get_free_physical(); – Return free physical memory size
in bytes.
unsigned long long int
Memory::get_total_virtual(); – Return total virtual
memory size in bytes.
unsigned long long int
Memory::get_free_virtual(); – Return free virtual
memory size in bytes.
unsigned long int Memory::get_usage();
– Return percentage of physical memory usage.
Chapter 3. Audio
A
few words about sound subsystem
Audio subsystem intend for playing music and sounds. Waveform
Audio File Format, MPEG
Audio Layer 3 and Windows
Media Audio are supported.
Additional formats
You can use an additional format if you install third–party codecs.
Working with sound
Just use Audio class to work
with sound. Let's look at public methods.
void Audio::initialize(); –
Initialize the subsystem.
void Audio::initialize(const char
*target); – Initialize the subsystem and load a sound file.
void Audio::load(const char *target);
– Load a sound file.
void Audio::play(); – Play a
content of the target file.
void Audio::play_loop(); –
Checking play status and restart play if needed.
void Audio::play(const bool loop);
– Play a sound. You can set loop flag as true for loop playing mode.
void Audio::stop(); – Stop
playing a content of the target file.
bool Audio::check_playing(); –
Return true if the sound resource is playing.
Part 6. Misc
Chapter 1. File
system
File system subsystem implement as two simple functions. All these
functions declared in Filesystem
sub–namespace.
file_exist function check the
target file for exist.
delete_file function delete the
target file.
All functions take target file name as argument and return false if the
operation failed.
Chapter 2. Tools
This module implemented as few functions. All these
functions declared in Tools
sub–namespace.
void quit(); –
Exit from your program and return user to operating system.
bool enable_logging(const char *name); – Enable redirecting error messages to
a log file and return false if the operation failed.
void randomize(); – Initialize random number generator.
unsigned int get_random(const int
number); –
Return a random value between zero and the number.
unsigned int get_texture_size();
– Return maximum width or height of texture.
SWGF::BOX generate_box(const unsigned
int x,const unsigned int y,const unsigned int width,const unsigned int
height); – Generate collision related information.
Chapter 3. Resource
manager
A resource is an instance of a user–defined class or structure.
Resource manager is storage for resources. It implemented as few template
functions. All these functions declared in Resource
sub–namespace.
create function create single
resource or terminate the program if operation failed. It didn't take
argument and return handle of the resource.
create_array function create
resource array or terminate the program if operation failed. It takes
resource amount as argument and return handle of resource array.
destroy function delete resource
if it already exists. This function takes resource handle as argument.
destroy_array function delete
resource array if it already exists. This function takes resource array
handle as argument.
Part 7. Binary files
Chapter 1. The
sub–namespace
All subsystems in this section declared in File
sub–namespace.
Chapter 2. Base
binary file subsystem
Work with binary files
Binary_File class provide simple access to base binary subsystem.
Don't use it directly. Let's look at public methods.
void Binary_File::close(); – Close the file.
void Binary_File::set_position(const long int offset); – Set the
file position.
long int Binary_File::get_position(); – Return current file
position.
long int Binary_File::get_length(); – Return file length in bytes.
bool Binary_File::check_error(); – Return true if last file
operation failed.
bool Binary_File::is_open() const;
– Return true if the file was successfully open.
Important notice
Target file size limit is 2 gigabytes.
Chapter 3. File
reader
File reader is intending to reading data from a binary files. Input_File
class provide access to file reader. It is derived from Binary_File
class. Let's look at public methods.
void Input_File::open(const char *name); – Open a file for read.
void Input_File::read(void *buffer,const size_t length); – Read
data from the file.
Chapter 4. File
writer
File writer is intending to write data to binary files. Output_File
class provide access to file writer. It is derived from Binary_File
class. Let's look at public methods.
void Output_File::open(const char *name); – Open a file for write.
void Output_File::create_temp(); – Create a temporary file. This
file will be deleted when it closed.
void Output_File::write(const void *buffer,const size_t
length); – Write data to the file.
void Output_File::flush(); – Force writing internal
buffer data to the file.
Part 8. Input
Chapter 1. The
sub–namespace
All subsystems in this section declared in Input
sub–namespace.
Chapter 2. Keyboard
Low–level input
Any keyboard has a built–in chip. It generates a special code when user
press or release key. This code called «scan code».
Working with keyboard
Just use Keyboard class to work
with a keyboard. Let's look at public methods.
void Keyboard::initialize(); –
Initialize the subsystem.
bool Keyboard::check_hold(const
unsigned char code); – Return true if key with specific scan–code
is press or holding.
bool Keyboard::check_press(const
unsigned char code); – Return true if key with specific scan–code
was press.
bool Keyboard::check_release(const
unsigned char code); – Return true if key with specific scan–code
was release.
bool Keyboard::is_ready() const;
– Return true if the subsystem is already initialized.
List of supported scan–codes
You can see a list of scan–codes below.
| Key |
Code |
Key |
Code |
Key |
Code |
| Escape |
1 |
A |
30 |
F1 |
59 |
| ! or 1 |
2 |
S |
31 |
F2 |
60 |
| @ or 2 |
3 |
D |
32 |
F3 |
61 |
| # or 3 |
4 |
F |
33 |
F4 |
62 |
| $ or 4 |
5 |
G |
34 |
F5 |
63 |
| % or 5 |
6 |
H |
35 |
F6 |
64 |
| ^ or 6 |
7 |
J |
36 |
F7 |
65 |
| & or 7 |
8 |
K |
37 |
F8 |
66 |
| * or 8 |
9 |
L |
38 |
F9 |
67 |
| ( or 9 |
10 |
: or ; |
39 |
F10 |
68 |
| 0 or ) |
11 |
" or ' |
40 |
F11 |
133 |
| _ or – |
12 |
~ or ` |
41 |
F12 |
134 |
| + or = |
13 |
Left Shift |
42 |
Num Lock |
69 |
| Backspace |
14 |
| or \ |
43 |
Scroll Lock |
70 |
| Tab |
15 |
Z |
44 |
Home or 7 |
71 |
| Q |
16 |
X |
45 |
Up or 8 |
72 |
| W |
17 |
C |
46 |
Page up or 9 |
73 |
| E |
18 |
V |
47 |
Gray – |
74 |
| R |
19 |
B |
48 |
Left or 4 |
75 |
| T |
20 |
N |
49 |
Center or 5 |
76 |
| Y |
21 |
M |
50 |
Right or 6 |
77 |
| U |
22 |
< or , |
51 |
Gray + |
78 |
| I |
23 |
> or . |
52 |
End or 1 |
79 |
| O |
24 |
? or / |
53 |
Down or 2 |
80 |
| P |
25 |
Right shift |
54 |
Page down or 3 |
81 |
| { or [ |
26 |
Print Screen or * |
55 |
Insert or 0 |
82 |
| } or ] |
27 |
Alt |
56 |
Delete or . |
83 |
| Enter |
28 |
Spacebar |
57 |
|
|
| Control |
29 |
Caps Lock |
58 |
|
|
Chapter 3. Mouse
A few words about mouse
Mouse is very useful for interaction with graphical user interface. But
mouse also can use in a video games.
Working with mouse
Just use Mouse class to work
with a mouse. Let's look at public methods.
void Mouse::show(); – Show mouse
cursor.
void Mouse::hide(); – Hide mouse
cursor.
unsigned int Mouse::get_x(); –
Return x position of mouse.
unsigned int Mouse::get_y(); –
Return y position of mouse.
void Mouse::set_position(const unsigned
int x,const unsigned int y); – Set position of mouse.
bool Mouse::check_hold(const
SWGF::MOUSE_BUTTON button); – Return true if specific mouse
button is press or holding.
bool Mouse::check_press(const
SWGF::MOUSE_BUTTON button); – Return true if specific mouse
button was press.
bool Mouse::check_release(const
SWGF::MOUSE_BUTTON button); – Return true if specific mouse
button was release.
Mouse buttons
Mouse button codes look as predefined constants. You can see it
below.
| Mouse button code |
Button |
| MOUSE_LEFT |
Left button |
| MOUSE_RIGHT |
Right button |
| MOUSE_MIDDLE |
Middle button |
Chapter 4. Game–pad
Best friend of retro gamer
What is good choice for game control device when user play in arcade or
old–school style video–game? A game–pad. This engine provides simple
access to a game–pads.
Numbers of connect game–pads
You can connect a few game–pads. Any connected game–pad have an internal
index. First game–pad is 0. Maximum amount of connected game-pad is 4.
First game–pad will activate by default at program start.
Buttons codes
Buttons codes look as predefined constants. You can see it below.
| Button code |
Description |
| GAMEPAD_UP |
D–pad up |
| GAMEPAD_DOWN |
D–pad down |
| GAMEPAD_LEFT |
D–pad left |
| GAMEPAD_RIGHT |
D–pad right |
| GAMEPAD_A |
A
|
| GAMEPAD_B |
B
|
| GAMEPAD_X |
X |
| GAMEPAD_Y |
Y |
GAMEPAD_LEFT_BUMPER
|
Left bumper
|
GAMEPAD_RIGHT_BUMPER
|
Right bumper
|
GAMEPAD_START
|
Start
|
GAMEPAD_BACK
|
Back
|
Sticks identifiers
Sticks identifiers look as predefined constants. You can see it
below.
| Identifiers |
Description |
| GAMEPAD_LEFT_STICK |
Left stick |
| GAMEPAD_RIGHT_STICK |
Right stick |
Triggers identifiers
Triggers identifiers look as predefined constants. You can see it below.
Identifiers
|
Description
|
GAMEPAD_LEFT_TRIGGER
|
Left trigger
|
GAMEPAD_RIGHT_TRIGGER
|
Right trigger
|
Stick direction
Stick direction look as predefined constants. You can see it below.
| Value |
X–direction |
Y–direction |
| GAMEPAD_NEUTRAL_DIRECTION |
Neutral |
Neutral |
| GAMEPAD_POSITIVE_DIRECTION |
Right |
Up |
| GAMEPAD_NEGATIVE_DIRECTION |
Left |
Down |
Working with game–pad
Just use Gamepad class to work
with game–pad. Let's look at public methods.
void Gamepad::set_active(const unsigned
int gamepad); – Set current active game-pad. Always call it after
get amount of connected game-pads.
unsigned int Gamepad::get_amount();
– Return amount of connected game-pads.
unsigned int Gamepad::get_active()
const; – Return identifer of current active game-pad.
bool Gamepad::check_connection();
– Return true if active game-pad is connected.
void Gamepad::update(); – Update
game-pad state.
bool Gamepad::check_button_hold(const
SWGF::GAMEPAD_BUTTONS button) const; – Return true if a button of
active game-pad is pressed or holding.
bool Gamepad::check_button_press(const
SWGF::GAMEPAD_BUTTONS button) const; – Return true if a button of
active game-pad is pressed.
bool
Gamepad::check_button_released(const SWGF::GAMEPAD_BUTTONS button)
const; – Return true if a button of active game-pad is released.
bool Gamepad::check_trigger_hold(const
SWGF::GAMEPAD_TRIGGERS trigger) const; – Return true if specific
trigger of active game-pad is pressed or holding.
bool Gamepad::check_trigger_press(const
SWGF::GAMEPAD_TRIGGERS trigger) const; – Return true if specific
trigger of active game-pad is pressed.
bool
Gamepad::check_trigger_release(const SWGF::GAMEPAD_TRIGGERS trigger)
const; – Return true if specific trigger of active game-pad is
released.
unsigned char
Gamepad::get_left_trigger() const; – Return current value of left
analog trigger.
unsigned char
Gamepad::get_right_trigger() const; – Return current value of
right analog trigger.
GAMEPAD_DIRECTION
Gamepad::get_stick_x(const SWGF::GAMEPAD_STICKS stick) const; –
Return x-direction of specific stick.
GAMEPAD_DIRECTION
Gamepad::get_stick_y(const SWGF::GAMEPAD_STICKS stick) const; –
Return y-direction of specific stick.
GAMEPAD_DIRECTION
Gamepad::get_left_stick_x() const; – Return x-direction of left
stick.
GAMEPAD_DIRECTION
Gamepad::get_left_stick_y() const; – Return y-direction of left
stick.
GAMEPAD_DIRECTION
Gamepad::get_right_stick_x() const; – Return x-direction of right
stick.
GAMEPAD_DIRECTION
Gamepad::get_right_stick_y() const; – Return y-direction of right
stick.
bool Gamepad::set_vibration(const
unsigned short int left,const unsigned short int right); – Set
vibration level for rumble motors(left and right) of active game-pad.
Vibration level is value from 0 to 65535. Return false if operation was
fail.
bool Gamepad::disable_vibration();
– Disable vibration of active game-pad. Return false if operation was
fail.
nsigned short int
Gamepad::get_left_motor() const; – Return vibration level of left
rumble motor.
nsigned short int
Gamepad::get_right_motor() const; – Return vibration level of
right rumble motor.
Part 9. Internal
details of the engine subsystems
Chapter 1. A few
words for a curious programmer
The engine subsystems have a different internal structure. It has
hidden from you, and you don't have access to it. Do you want to know
about hiding things? Just read a next chapter.
Chapter 2. Internal
classes
Internal classes
Some classes designed for internal use only. Don't touch them. What doing
these strange classes?
Microsoft Windows specific
classes
All Microsoft Windows specific classes declared in Internal
sub–namespace.
Engine creates the game window
and do message processing.
Synchronization implements the
synchronization timer.
Display implement display
manager.
WINGL contain Windows
specific OPENGL initialization code.
Core classes
All engine core classes declared in Core
sub–namespace.
FPS implement fps
counter.
Unicode_Convertor implement system code–page to UTF–16
convertor.
Buffer implement custom memory
buffer.
Render implement OPENGL
render.
Resizer intending to calculate
correct texture size.
Rectangle intending to draw
textured rectangle.
Shape is base class of Rectangle
class.
Chapter 3. Base
graphics subsystem
Visible object
Any visible object is a textured rectangle.
Images
A texture width must be a power of two. A texture height also must be
a power of two. Any image will automatically resize before load.
Vertex arrays and texture
coordinates arrays
Any rectangle need four vertexes and four texture coordinates.
Single vertex represent by follow custom data type.
typedef struct Vertex
{
int x;
int y;
};
Single texture coordinate represent by follow custom data
type.
typedef struct
{
double u;
double v;
} Point;
All these custom types declared in Core
sub–namespace.
Chapter 4. Game–pad
Game–pad subsystem working over XINPUT.
It available as part of DirectX. XInput support by Xbox 360 controller or
compatible devices.
Chapter 5. Input
Input back–end
Keyboard and mouse input subsystems are simple. It works over standard
Windows API.
Internal key state
Internal state of keyboard keys and mouse buttons look as
predefined constants. You can see it below.
| Key/button state |
Description |
| KEY_PRESSED |
A key\button is press or holding |
| KEY_RELEASED |
A key\button was release |
Chapter 6. Audio
Audio subsystem working over DirectShow.
It is available as part of DirectX.
DirectX is pre–installed by default under modern versions of Windows.
Version history
0.1 – 6.3.6 – Old branch.
6.3.7 – 6.5.1 – Experimental branch.
6.5.2 – Source code synced with Eugene game development kit 6.5.7.
6.5.3 – Small changes.
6.5.4 – Game-pad subsystem back-ported from Black game development kit 4.1.4.
6.5.5 – 6.6.6 – Game-pad subsystem improved.
<IP_ADDRESS> – Documentation updated.
6.6.7 – Small changes.
6.6.8 – 6.7 – Game-pad subsystem improved.
6.7.1 – Source code synced with Eugene game development kit 6.6.1.
6.7.2 – Synchronization timer back-ported from Gray game development kit 2.3.5.
6.7.3 – Windows XP support removed.
6.7.4 – 6.7.5 – Small changes.
6.7.6 – Source code synced with Eugene game development kit 6.6.6.
6.7.7 – Source code synced with Eugene game development kit 6.7.
6.7.8 – Source code synced with Eugene game development kit 6.7.1.
6.7.9 – 6.8 – Game-pad subsystem improved.
6.8.1 – Source code synced with Eugene game development kit 6.7.6.
6.8.2 – Source code synced with Eugene game development kit 6.7.7.
6.8.3 – Source code synced with Eugene game development kit 6.7.8.
6.8.4 – Source code synced with Eugene game development kit 6.7.9.
6.8.5 – Source code synced with Eugene game development kit 6.8.
6.8.6 – Source code synced with Eugene game development kit 6.8.2.
6.8.7 – Source code synced with Eugene game development kit 6.8.4.
6.8.8 – Source code synced with Eugene game development kit 6.8.5.
6.8.9 – Source code synced with Eugene game development kit 6.8.6.
6.9 – Source code synced with Eugene game development kit 6.8.7.
6.9.1 – Source code synced with Black game development kit 4.4.7.
6.9.2 – Source code synced with Eugene game development kit 6.9.2.
6.9.3 – Source code synced with Neon game development kit 6.2.6.
6.9.4 – Synchronization timer improved.
6.9.5 – Source code synced with Eugene game development kit 6.9.4.
6.9.6 – Source code synced with Neon game development kit 6.3.4.
6.9.7 – Source code synced with Eugene game development kit 6.9.9.
6.9.8 – Source code synced with Neon game development kit 6.3.7.
6.9.9 – Source code synced with Eugene game development kit 7.0.1.
7.0 – Source code synced with Eugene game development kit 7.0.2.
7.0.1 – 7.0.2 – Small changes.
7.0.3 – Image resizer improved.
7.0.4 – 7.0.7 – Small changes.
7.0.8 – Source code synced with Eugene game development kit 7.1.8.
7.0.9 – Source code synced with Eugene game development kit 7.1.9.
7.1 – Source code synced with Eugene game development kit 7.2.
7.1.1 – Source code synced with Eugene game development kit 7.2.1.
7.1.2 – Source code synced with Eugene game development kit 7.2.2.
7.1.3 – Source code synced with Eugene game development kit 7.2.4.
7.1.4 – 7.1.5 – Image resizer improved.
7.1.6 – Source code synced with Eugene game development kit 7.2.5.
7.1.7 – Source code synced with Eugene game development kit 7.2.6.
7.1.8 – Source code synced with Eugene game development kit 7.2.7.
7.1.9 – Source code synced with Eugene game development kit 7.2.8.
7.2 – Source code synced with Eugene game development kit 7.2.9.
7.2.1 – Source code synced with Eugene game development kit 7.3.
7.2.2 – Source code synced with Eugene game development kit 7.3.1.
7.2.3 – Source code synced with Eugene game development kit 7.3.2.
7.2.4 – Source code synced with Eugene game development kit 7.3.3.
7.2.5 – Source code synced with Eugene game development kit 7.3.4.
7.2.6 – Source code synced with Eugene game development kit 7.3.5.


UGRC Presentations
a collection of talks
UGIC
2013: Base map caching
2014: Web Api
2015: Web Application Options
2016: Welcome to the wonder world of GitHub
2017: Forklift
2017: Break out of your Silo
2017: AGRC's Discover Server Not Just Google Imagery
2017: Aggregating Utahs Statewide Roads
2020: Putting Pandas to Work: Solving GIS Problems in Python
2021: Next-Generation 911 (NG911) in Utah: Current Status and GIS Update
2021: Collaboration is Key to the Future of Geospatial
2021: Introduction to Python Programing (zip file)
2022: Ditch the Cursors: Editing Feature Classes with Spatially Enabled DataFrames
2022: OpenUGRC: Leveraging OpenStreetMap for Statewide Data
2022: Improving Your Python Programming Experience
2023: Preaching Pandas Power for Python Programming Progress
(
Jupyter Notebook
,
Video
)
2023: Generating Useful Data with Computer Vision Tools: 2 Use Cases
2023: Introducing palletjack: A Library for Updating AGOL Layers from pandas DataFrames
(
Video
)
devsummit
2012: Road Kill
2013: Javascript Boilerplate Tour
2014: Demystifying the dojo build
2015: Our Favorite Things
2016: How to Play Nicely with Others - Building Geospatial Components
ESRI UC
2019: Consolidating Utah's GIS Data for Next Generation 911 (NG911)
NSGIC
2018: NG911 Data Prep
2019: Utah and the PLSS
2019: Utah's New GIS Data Lifecycle
2020: Things that go Together
2020: Thinking Beyond the Map
2021: Revamping your Data Wardrobe to Give it More Curb Appeal
2021: News from the Utah Potpourri of GIS
2021: GIS 101 Series - Geocoding
2022: Mining new GIS Users
2022: Implementing a Rating System to Enhance Data Quality
SLUG
2020: Introducing the Latest SGID Delivery System
2022: A UGRC Update
2023: Collaborative Trailheads: Maintaining SGID Data in OpenStreetMap
MOTH
2017: NG911 Data Collaboration
Universities
2021 UVU Earth Science Seminar: This Thing Called
Love
GIS: An Introduction to AGRC
Misc.
2020: Utah's SGID - Unlocking Geospatial Data (Bridging the Gap Between Proprietary and Open Source GIS)
2020: Open Geospatial
2020: Validating Election Data - Address Points and Voting Precincts
2021: Addressing and its Impacts on 911 Call Routing and Dispatching
2022: USPE Presentation: GIS Data, Resources, and Applications
2022: G5 Presentation: GIS & 911 - From Your Phone to the St George Communications Center


--- ---
Department of Mathematics
Indian Institute of Science
Bangalore 560 012
SEMINAR
|
Speaker |
: |
Prof. Gerald Warnecke |
| Affiliation | : | Magdeburg, Germany |
|
Subject Area |
: |
Mathematics
|
|
Venue |
: |
Lecture Hall - I, Dept of Mathematics
|
|
Time |
: |
4.00 pm
|
|
Date |
: |
May 21,2007 (Monday) |
|
Title |
: |
Adaptive Numerical Solution of Intracellular Calcium Dynamics |
| Abstract | : |
Calcium waves are an important means of intrcellular signaling. Intracellular calcium release at the endoplasmatic reticulum is a prime example of the role of stochastic effects in cellular systems. Realistic models consist of deterministic systems of reaction-diffusion equations in three dimensional space coupled to stochastic transitions of calcium channels at the domain boundary. The resulting dynamics has multiple time and space scales, which complicates computer simulations. In this talk we focus on the PDE aspect of the numerical computations. We use adaptive linear finite elements to efficiently resolve the extreme spatial gradients of concentration variables close to a channel. Further, parallel computing is needed for realistic simulations. We describe the algorithmic approach and we demonstrate its efficiency by computational examples. Our single channel model matches experimental data by Mak et al. (PNAS 95, 1998) and results in intriguing dynamics if calcium is used as a carrier. Random openings of the channel accumulate in bursts of calcium blips that may prove central for the understanding of cellular calcium dynamics. We plan to extend our computations to more realistic domain geometries and to use local time stepping methods. |


Website for Midthaug Strekkmetall
Molde Kemiske Renseri, nettside
Rakvaag Glass, nettside
Axelstories, nettside
Landing pages for FLOW TAXI
Therapy center, logo
Phuket Buy House, landing page
Copymonster website
Aquarelle magazine
Bizon Imobil website
Fiscal data operator, landing
Fan invitation
Website for building
Landing page for Olimp
Photo illustration
Landing page for Olimp
Hair care, landing
Portrait retouch
Advertising poster
Hair care, landing
Desk calendar
Shutterstock photo portfolio
Advertising poster
Digital lab, logo


Fingbers - from fingers to numbers. Helping starters to master the basic concept of finger counting by using Machine Learning. Show your fingers at the webcam to get the relative number and its value.
loading...


MEA says 23 per cent petitions seeking H-1B visas were denied in 2019
The H-1B is a non-immigrant visa which allows US companies to employ foreign workers in speciality occupations that require theoretical or technical expertise.
by Express Web DeskThe External Affairs Ministry Thursday said that at least 23 per cent new petitions seeking H-1B visas for the US were denied in the 2019 fiscal year.
The H-1B is a non-immigrant visa, which allows US companies to employ foreign workers in speciality occupations that require theoretical or technical expertise.
Minister of State for External Affairs V Muraleedharan, in a written reply in the Rajya Sabha, said that according to the data given out by the United States Citizenship and Immigration Services (USCIS), a total of 1,16,031 new petitions were processed and completed in 2019, out of which 27,707 petitions — accounting nearly 23.9 per cent — were denied.
“Indian nationals account for nearly 70 per cent of all H-1B visa issued, even though the share of Indian IT companies in the H-1B visa is relatively small,” the minister stated.
He also added that Indians also accounted for about 93 per cent of all Employment Authorization Document issued to H-4 visa holding spouses of H-1B beneficiaries as per statistics available till December 2017.
Replying to another question, Muraleedharan said that as per information received, there is a concern across the global IT industry operating in the US over approval rates for H-1B petitions, a higher rate of rejection among IT companies, and cost implications of higher scrutiny and additional requests for evidence.
Muraleedharan added that according to stats of USCIS, 84.8 per cent of the total H-1B petitions completed in the Fiscal Year 2019 (October 2018-September 2019) were approved, as against 95.7 per cent of the total in the Fiscal Year 2015 (October 2014-September 2015).
(With PTI inputs)


I’ve been doing a lot of organizational work on the book this week – adding all the notes and photos from my trip to ETS to Scrivener, making sure all the books and articles I’ve read (or that I plan to read) are in Zotero
I Can Haz PDF? (And/Or I Can Pay for a Research Assistant) on teachingmachin.es. Thanks to everyone who helped track down these articles – there are many more articles that I need to find, so I am going to try to take a day-trip to a nearby university library in the coming weeks so that I can get everything
This time of year I’m usually well into writing my year-in-review articles. But this year, I’m too busy with the book to devote two months to that project. As of now, I’m planning to do a much shorter version of the series
I talked to Nathan Maton in preparation for a recording we’ll do in a week or so about tech ethics
I talked to Navneet Alang about an article he’s working on on learning analytics
Reading and Viewing and Listening
I’m listening to the audiobook I Contain Multitudes
I watched Incredibles 2 and The Bill Murray Stories: Life Lessons from a Mythical Man
I finally finished reading Programs, Teachers, and Machines


0:00
0:00
Joe_Strummer_Mondo_Bongo
Maroon 5 - She Will Be Loved
Green Day - Boulevard Of Broken Dreams
Michael Learns To Rock - That's Why


setting-up-script.Rmd
Here is an example script you can run to get a feel for how you might set up CSVs for a report.
Once you’ve set up an account code and filter, you can use this in your various metrics:
# First you'll want to set an account code
code <- "QUIR01BA"
# Then set a filter - remember to add a brand
filter <- "published inthelast week and relevancy is relevant and brand isorchildof 10006"
If you want to find brand IDs from an account, look at the article on finding brands using R.
# To use a function from chartingtest, you'll first need to load the library
library(chartingtest)
# Now you can get a breakdown of volume and sentiment (including net sentiment) by date
volume_sentiment_metric(code, filter)
| published | count | netSentiment | netSentimentPercent | uniqueAuthors | positiveSentiment | positivePercent | negativeSentiment | negativePercent | neutralSentiment | neutralPercent |
|---|---|---|---|---|---|---|---|---|---|---|
| 2018-08-30 | 0 | 0 | 0.00 | 0 | 0 | 0.0% | 0 | 0% | 0 | 0% |
| 2018-08-31 | 4 | 3 | 0.75 | 3 | 3 | 75.0% | 0 | 0% | 1 | 25% |
| 2018-09-01 | 5 | 0 | 0.00 | 2 | 0 | 0.0% | 0 | 0% | 5 | 100% |
| 2018-09-02 | 1 | 0 | 0.00 | 1 | 0 | 0.0% | 0 | 0% | 1 | 100% |
| 2018-09-03 | 0 | 0 | 0.00 | 0 | 0 | 0.0% | 0 | 0% | 0 | 0% |
| 2018-09-04 | 1 | 0 | 0.00 | 1 | 0 | 0.0% | 0 | 0% | 1 | 100% |
| 2018-09-05 | 3 | 1 | 0.33 | 2 | 1 | 33.3% | 0 | 0% | 2 | 67% |
| 2018-09-06 | 0 | 0 | 0.00 | 0 | 0 | 0.0% | 0 | 0% | 0 | 0% |
# You can group by day, week or month
volume_sentiment_metric(code, filter, group = "week")
| published | count | netSentiment | netSentimentPercent | uniqueAuthors | positiveSentiment | positivePercent | negativeSentiment | negativePercent | neutralSentiment | neutralPercent |
|---|---|---|---|---|---|---|---|---|---|---|
| 2018-08-30 | 0 | 0 | 0.00 | 0 | 0 | 0.0% | 0 | 0% | 0 | 0% |
| 2018-08-31 | 4 | 3 | 0.75 | 3 | 3 | 75.0% | 0 | 0% | 1 | 25% |
| 2018-09-01 | 5 | 0 | 0.00 | 2 | 0 | 0.0% | 0 | 0% | 5 | 100% |
| 2018-09-02 | 1 | 0 | 0.00 | 1 | 0 | 0.0% | 0 | 0% | 1 | 100% |
| 2018-09-03 | 0 | 0 | 0.00 | 0 | 0 | 0.0% | 0 | 0% | 0 | 0% |
| 2018-09-04 | 1 | 0 | 0.00 | 1 | 0 | 0.0% | 0 | 0% | 1 | 100% |
| 2018-09-05 | 3 | 1 | 0.33 | 2 | 1 | 33.3% | 0 | 0% | 2 | 67% |
| 2018-09-06 | 0 | 0 | 0.00 | 0 | 0 | 0.0% | 0 | 0% | 0 | 0% |
# To save to CSV, set save=TRUE - you'll be asked to enter a filename
volume_sentiment_metric(code, filter, group = "day", save=TRUE)
# If you want to run the code as part of a script, you can specify the file upfront and it will save automatically
volume_sentiment_metric(code, filter, group = "day", file="C:/Users/brandseye/Documents/volume_sentiment.csv")
# Get data for the sentiment metric
sentiment_metric(code, filter)
| Sentiment | Count | Percentage |
|---|---|---|
| Negative | 0 | 0.0% |
| Neutral | 5 | 71.4% |
| Positive | 2 | 28.6% |
# Get data for the stats metric
stats_metric(code, filter)
| Metric | Value |
|---|---|
| Volume | 14 |
| Authors | 6 |
| OTS | 18784 |
| Engagement | 2 |
| Sites | 3 |
| Verified Sample | 7 |
| Positive | 2 |
| Neutral | 5 |
| Negative | 0 |
| Positive % | 28.6% |
| Neutral % | 71.4% |
| Negative % | 0% |
Here is an example of a script you might run to get all the CSVs for a particular report. In this example we will set the filter only once, but you could use multiple filters if you like, or add additional filtering to a particular metric.
How to run the example:
PATH_TO_YOUR_FOLDER
with the folder where you’d like to save the CSVs, e.g. C:/Users/You/YourReportlibrary(chartingtest)
# Loading 'glue' so we can set the folder name once and then stick it together with the filename
library(glue)
# Set account code to use
code <- "QUIR01BA"
# Set the filter to use
filter <- "published inthelast week and relevancy is relevant and brand isorchildof 10006"
folder <- "PATH_TO_YOUR_FOLDER"
# Get the volume breakdown
volume_sentiment_metric(code,
filter,
file = glue(folder, "/volume-metric.csv")) # join the folder name onto the file name
# Get the hourly breakdown
time_of_day_metric(code,
filter,
file = glue(folder, "/time-of-day.csv"))
# Top 10 authors
authors_metric(code,
filter,
truncateAt = 10, #Only give me the first 10 authors
glue(folder, "/authors-metric.csv"))
# Top 10 sites
sites_metric(code,
filter,
truncateAt = 10, #Only give me the first 10 sites
file = glue(folder, "/sites-metric.csv"))
# Sentiment breakdown
sentiment_metric(code,
filter,
file = glue(folder, "/sentiment-metric.csv"))
# Top 10 words
wordcloud_metric(code,
filter,
file = glue(folder, "/wordcloud-metric.csv"))


Arrays and hashes are two types of objects in the Ruby programming languange. Yet, unlike individual objects like an integer or a string, they are container objects. This means that arrays and hashes act as collections of objects, where you can assign them a whole heap of information in the form of any object (including arrays and hashes!). First, I'll describe more thoroughly the array object and then the hash object.
An array in the simplest of descriptions can be thought of as a list of objects. Here's an example of a variable named animals with an array of strings assigned to it:
animals = ["monkey", "kangaroo", "octopus"]
Visually, we can regonize an array object through its use of square brackets: [] . Inside of the array above are three string objects. Arrays use an ordered index system to identify each of the objects within it. Ordered means that each object in an array is given an index, which in the case of an array is a number, that follows normal seqeuntial counting. HOWEVER! By "normal" I'm referring to the programming norm of counting that always begins at 0. Therefore, using the animal array example above, the "monkey" string object would have an index of 0; the "kangaroo" string object would have an index of 1; and the "octopus" string object would have an index of 2. Subsequent objects after "octopus" would continue the sequential numerical indexing.
Hashes like arrays use an ordered, index system to identify the information within it. Hashes begin to differ from arrays when it comes to how it stores objects. Hashes store information by a key/ value pair. Here's an example of a variable named my_pet with a hash assigned to it:
my_pet = { "name" => "Rufus",
"type" => "dog",
"breed" => "chihuahua",
"favorite food" => "ALL THE MEATS" }
In hash variable my_pet "name", "type", "breed", and "favorite food" are keys, where as "Rufus", "dog", "chihuahua", and "ALL THE MEATS" are the keys' respective values. A hash key works as an index of a hash value. The key and value of a hash pair can be any kind of object -- in this example I used strings. This is important to note, for it is here where a major difference between hashes and arrays is occurs. A hash key is like an array index, but instead of only being an index identified by an integer it can be any object (including an integer). Another interesting aspect of a hash's index system is that there is also a meta-index, where each key/ value pair has a numerical index, just like the objects in an array. Similar to arrays the meta-index system of hashes follows a sequential numbering. So, the key/value pair of "name" => "Rufus" has a meta-index of 0, and so on.
Arrays and hashes provide powerful ways to store and access data. Depending on the context and desired uses of various information, both arrays and hashes offer dynamic modes of working with data in our programs.


Axis Ant Tasks
Axis comes with Ant tasks to automate aspects of the
build process inside ant. To use these tasks, you need
-
Apache Ant 1.5.1 or later
-
The library axis-ant.jar which contains the tasks
-
All the main Axis libraries
Declaring the Tasks
To declare the tasks, set up a classpath to include the axis task JAR and
all the dependent libraries. Including everything in the axis lib directory
should suffice
<path id="axis.classpath">
<fileset dir="${axis.home}/build/lib">
<include name="**/*.jar" />
</fileset>
</path>
Then use the <taskdef> declaration to declare all the tasks listed
in a properties file inside the axis-ant.jar file:
<taskdef resource="axis-tasks.properties"
classpathref="axis.classpath" />
Creating Java files from WSDL
This uses the <axis-wsdl2java> task.
<axis-wsdl2java
output="${generated.dir}"
testcase="true"
verbose="true"
url="${local.wsdl}" >
<mapping
namespace="http://axis.apache.org/ns/interop"
package="interop" />
</axis-wsdl2java>
The mapping elements are used to list the mappings from XML namespaces to
Java packages; you can include as many as you need.
Creating WSDL files from Java
This uses the <axis-java2wsdl> task.
Talking to the admin service
This can be done with the
<axis-admin> task.
<axis-admin
port="${target.port}"
hostname="${target.server}"
failonerror="true"
servletpath="${target.appname}/services/AdminService"
debug="true"
xmlfile="${endpoint-stub.wsdd}"
/>
Here the target.* properties are pulled from a properties file for the
system being deployed to, so a single build file can deploy to different
systems with ease.


A histogram subdivides a numerical range into bins, and counts the number of data points with each segment. The resulting bar chart provides a discrete estimate of the probability density function.
This example demonstrates a histogram over a numerical range, with a segment to show the prevalence of null values.
Visual comparison of estimated probability distributions for a sample of numeric values. A normal (Gaussian) distribution parameterized by the mean and standard deviation, and a kernel density estimate. This example supports estimates of either probability density functions (pdf) or cumulative distribution functions (cdf), using Vega’s density transform.
A box plot summarizes a distribution of quantitative values using a set of summary statistics. Here, the boxes show the interquartile range (IQR), with the white bar indicating the median value. The thin lines (“whiskers”) currently show the extent of the minimum and maximum values; other values, such as whiskers extending 1.5 * IQR from each end of the box, are often used as well. See the violin plot example for an alternative approach.
A violin plot visualizes a distribution of quantitative values as a continuous approximation of the probability density function, computed using kernel density estimation (KDE). The densities are additionally annotated with the median value and interquartile range, shown as black lines. Violin plots can be more informative than classical box plots.
A plot of the top-k film directors by aggregate worldwide gross. Performs an aggregation of all directors, ranks them, and filters to only the top results, using the 'window' transform.
A plot of the top-k film directors, plus all other directors, by aggregate worldwide gross. Unlike the previous example, this chart includes a category of all other directors aggregated together. The visualization spec first computes aggregates for all directors and ranks them. It then copies these ranks back to the source data using a lookup transform, and determines which directors belong in the “other” category before performing a final aggregation.
A binned scatterplot is a more scalable alternative to the standard scatter plot. The data points are grouped into bins, and an aggregate statistic is used to summarize each bin. Here we use a circular area encoding to depict the count of records, visualizing the density of data points. For higher bin counts color might instead be used, though with some loss of perceptual comparison accuracy.
A contour plot depicts the density of data points using a set of discrete levels. Akin to contour lines on topographic maps, each contour boundary is an isoline of constant density. Kernel density estimation is performed to generate a continuous approximation of the sample density.
A wheat plot is an alternative to standard dot plots and histograms that incorporates aspects of both. The x-coordinate of a point is based on its exact value. The y-coordinate is determined by grouping points into histogram bins, then stacking them based on their rank order within each bin. While not scalable to large numbers of data points, wheat plots allow inspection of (and interaction with) individual points without overplotting.


initgame
`Prev `__
I
`Next `__
--------------
**initgame**: /in·it´gaym/, n.
[IRC] An `*IRC* `__ version of the trivia game “Botticelli”,
in which one user changes his `*nick* <../N/nick.html>`__ to the
initials of a famous person or other named entity, and the others on the
channel ask yes or no questions, with the one to guess the person
getting to be “it” next. As a courtesy, the one picking the initials
starts by providing a 4-letter hint of the form sex, nationality,
life-status, reality-status. For example, MAAR means “Male, American,
Alive, Real” (as opposed to “fictional”). Initgame can be surprisingly
addictive. See also `*hing* <../H/hing.html>`__.
[1996 update: a recognizable version of the initgame has become a staple
of some radio talk shows in the U.S. We had it first! -- ESR]
--------------
+----------------------------+----------------------------+-----------------------------------+
| `Prev `__ | `Up <../I.html>`__ | `Next `__ |
+----------------------------+----------------------------+-----------------------------------+
| Infocom | `Home <../index.html>`__ | insanely great |
+----------------------------+----------------------------+-----------------------------------+


Example Page to Invoke a Service
(Feel free to change the service name and input data in the source for the specific service you want to test repeatedly)
Service name to invoke :
Json Input Data :
Response data


Click this input element:
This calendar is auto-created.
So is the one on this input.
This calendar is auto-created with months: 3 and direction: 'future'.
This calander on this input is auto-created with direction: 'future'.
This calendar allows clicks outside of the focused month (dayOutOfMonthClickable: true):
This calendar has no year navigation (useYearNav: false).


Load Balancing for Virtual Environments in Distributed Systems
Sara Chen
(Supervisor: Dr Frederick Li)
Background
-
Push for more immersive experiences resulting in more complex virtual environments
-
To cope, most virtual environments are now hosted on distributed systems
Problems
Consistency must be maintained, but this is difficult because:
- Unreliable nature of networks
- Race conditions
- Enforcing guaranteed delivery takes time and bandwidth
Leads to the
overloading problem
Added Complexity
Trade-off between contradictory objectives:
- Time-critical system
- Delivery and ordering of messages need to be guaranteed
Static Load Balancing
The de facto standard used across industry due to simplicity
- Relies on players to choose
- Divides up virtual environment into regions
- Uses masking techniques
Weaknesses
- Cannot adapt to unexpected user behavior
- Not resilient towards component failure
- Overprovisions resources
Planning
- Researched existing work
- Chose open source frameworks and tools
Logic Servers
Responsible for executing game logic and maintaining state of virtual environment
Redis Server
Acts as a message queue and guarantees that a client continues to receive updates on an area of interest that spans different servers
Master Server
Monitors requests and status of each component
Gate Server
Assigns newly-connected clients to a logic server
AI Bots
Sufficient to generate the traffic needed to stress servers
Evaluation Methods
Latency
Estimated using a ping-pong scheme
Median latency is used to prevent data from being skewed
CPU Utilization
- Watches for overloading on components
- Verifies if workload has been distributed evenly across the system
Dynamic Load Balancing
Built around the idea of utilizing the properties of the
Fibonacci Heap
| Operation |
Binary Heap |
Binomial Heap |
Fibonacci Heap |
| findMin |
1 |
log n |
1 |
| insert |
log n |
log n |
1 |
| decreaseKey |
log n |
log n |
1 |
| merge |
n |
log n |
1 |
Improved AI Behavior
AI bots can be given more complex behavior based on population movement to better resemble human players
Hotspots can be added to emulate production environments


Hi! I’m Alex. I’m a designer and a developer, focused on making meaningful experiences for users on the web. You can find my code on GitHub, pixels on Dribbble, and finished work below.
I live and work somewhere between artist and engineer. I strive to find the beauty in efficient design, whether that design is ink on paper or code executed on a server. I primarily work with Ruby on Rails and Node.js, though I’ve dabbled with other frameworks and languages.
I currently a proud student of the Startup Institute, furthering my knowledge of web development and attending entirely too many networking events.
Give a holler! I’d love to hear from you. Or if you’d rather, find me on the various social media sites below.


My faves!
This is a list of things I absolutely love to do
- Shopping for anything and everything
- Swimming (but heck not out on a lake/ocean)
- I live for make-overs and photoshoots
- Did I mention I can dance 6hours straight (but can't last in the gym past half an hour)
- Books/series/documentaries..anything to cheat me out of this life even if for just a moment
Then there are things I couldn't live without
- Faith
- Food
- Facts
- and definitely Fun
My favorite websites
- Of course where I love to shop Jumia
- I just go through the houses and I wish I was in one. Maybe Zanzibar, maybe Maldives Airbnb
- The opportunities everywhere around the world are endless with AIESEC


public interface Session extends Mutex, Serializable
On the ClientStart
side, this object is maintained, as
long, as the ClientStart stays connected to the Server.
On the ServerStart
side, this object is maintained within an Client
and shared across all Connection between each of the Connections of the Client.
If you wanted to, you could create an custom Session-Class and provide it to an Client using Client.setSession(Session)
.
Note that especially the behaviour of the methods triggerPrimation()
, primed()
and newPrimation()
should NOT be changed to maintain the Behaviour of the internal Mechanisms. Otherwise you might break the core Mechanisms between
Client-Server-Communication or Connection establishment.
Otherwise you can feel free to create an custom Session.
Client
,
Connection
,
ReceiveFamily
,
CommunicationRegistration
| Modifier and Type | Method and Description |
|---|---|
void |
addHeartBeat(HeartBeat<Session> heartBeat)
Adds and holds an
HeartBeat , which handles any Session. |
static Session |
createNew(Client client)
Returns a new instance of the internal implementation of this interface.
|
<T> com.github.thorbenkuck.keller.pipe.Pipeline<T> |
eventOf(Class<T> clazz)
Prepares and returns an
Pipeline instance for an given Class. |
String |
getIdentifier()
Returns the unique identifier of this Session.
|
Properties |
getProperties()
Returns the internal
Properties instance. |
boolean |
isIdentified()
Describes whether or not this Session is identified
Value is controlled via
setIdentified(boolean)
The Default value for this is: false |
void |
newPrimation()
Resets the internal primed state.
|
Awaiting |
primed()
Returns the internal state, whether or not this Session is primed.
|
void |
removeHeartBeat(HeartBeat<Session> heartBeat)
Removes an previously set
HeartBeat instance, using the addHeartBeat(HeartBeat) method. |
void |
send(Object o)
Sends an Object over the Network.
|
void |
setIdentified(boolean identified)
Sets this Sessions identification value.
|
void |
setIdentifier(String identifier)
Sets this Sessions identifier value.
|
void |
setProperties(Properties properties)
Sets this Sessions internal
Properties instance. |
<T> void |
triggerEvent(Class<T> clazz,
T t)
Triggers an before set Event, using
eventOf(Class) . |
void |
triggerPrimation()
This method is only used by the
Client . |
SessionUpdater |
update()
This is a functional style of updating the Session.
|
static Session createNew(Client client)
Based upon the given client, a SendBridge
-implementation will
be created to allow the Session to send objects.
The use of this Method is encouraged over instantiating the internal Session manually! The internal Implementation might change due to development reasons and might be swapped easy without breaking code using this method
client
- the Client, which is connected to the Sessionboolean isIdentified()
Value is controlled via setIdentified(boolean)
The Default value for this is: false
void setIdentified(boolean identified)
It regulates the output of isIdentified()
identified
- the new boolean valueString getIdentifier()
Value is controlled via setIdentifier(String)
The Default value for this is: UUID.randomUUID() created inside of the SessionImpl constructor
void setIdentifier(String identifier)
It regulates the output of getIdentifier()
identifier
- the new Identifier for this particular SessionProperties getProperties()
Properties
instance.
This instance might be shared across multiple Sessions, but it is discouraged to send this instance to an ClientStart.
Value is controlled via setProperties(Properties)
The Default value for this is: new Properties()
void setProperties(Properties properties)
Properties
instance.
It regulates the output of getProperties()
properties
- the new Properties
instance that this Session will usevoid send(Object o)
This Method utilizes an SendBridge
to send the given Object to the
Server.
This Method does no Sanity-Checks, neither does it work asynchronously! Its return depends completely on the implementation
of the corresponding Client
and the corresponding Connection
.
The mechanisms of Serialization, Encryption, s.o. therefor also depend on the corresponding Client
and the
corresponding Connection
.
Since this Method is not offering an Parameter to choose the Connection, the chosen Connection will be the Clients
DefaultConnection
, which is initialized at the first
connect of the corresponding ClientStart.
This Method waits for the Primation of the corresponding Client and therefor of this Session.
o
- the Object that should be send over the Network.<T> com.github.thorbenkuck.keller.pipe.Pipeline<T> eventOf(Class<T> clazz)
Pipeline
instance for an given Class.
Those Events can be handled as you like. Since the returned Value is an Pipeline, you can edit as you like. Note that after an Pipeline has been created, you cannot delete it! You can clear the existing instance, but you cannot free up the memory space of that Pipeline
An event, encapsulated inside such an Pipeline can than be triggered using triggerEvent(Class, Object)
.
T
- Generic type about the type, which this Pipeline is going to handleclazz
- The Class, of which the Event is aboutPipeline
-implementation, to add or modify the Event<T> void triggerEvent(Class<T> clazz, T t)
eventOf(Class)
.
It searches for an corresponding Pipeline and if present runs it.
If it cannot find an Pipeline a.e. no Event has been registered, an IllegalArgumentException
is thrown.
The class is required, because of Javas type-erasure. Because t.getClass()
, does not return an Class
of the Type of the Object, but of ? extends Object.
T
- the Type of the Pipelineclazz
- the Identifier Class for this eventt
- an Object instance of the ClassIllegalArgumentException
- if no Pipeline is setvoid addHeartBeat(HeartBeat<Session> heartBeat)
HeartBeat
, which handles any Session.
Note that this method does not create an HeartBeat, it accepts any Instance of an HeartBeat and starts it asynchronous. Other than maintaining and running said HearBeat, this method and the Session in total does nothing else with an HeartBeat!
heartBeat
- the HeartBeat that should be added to this Sessionvoid removeHeartBeat(HeartBeat<Session> heartBeat)
HeartBeat
instance, using the addHeartBeat(HeartBeat)
method.heartBeat
- the HeartBeat that should be removed from this Sessionvoid triggerPrimation()
Client
.
The Primation is an internal Mechanism, to check the State, whether or not the current Session is ready to be used.
As any new Client is created, it gets an new Instance of a Session, which by default is not primed. Than, after the
Handshake between the ClientStart and the ServerStart, the Client is going to be Primed by calling
Client.triggerPrimation()
. This results in this Method being called.
Internally, this method is further used whenever an new Connection is successfully established.
The use of this method is not forbidden, but discouraged since this might screw up the internal mechanisms
Awaiting primed()
Awaiting
interface and you can await it, by calling Awaiting.synchronize()
.
This instance of Awaiting will continue, once triggerPrimation()
is called.
void newPrimation()
Awaiting
.
The use of this Method is certainly not forbidden, but discouraged. Calling this method might screw up the internal mechanisms.
SessionUpdater update()
If you use this on the Client-Side, note that calling SessionUpdater.sendOverNetwork()
will NOT update the
Session on the Server-Side
SessionUpdater
instance for you to use.Copyright © 2018. All rights reserved.


WEEK 9 THURSDAY
Year 1 (Year 2)
FIRST READING Tobit 6:9-12; 7:1.9-12.16; 8:1.4-9
A reading from the Book of Tobit
In those days: when he entered Media and was
already approaching
The word of the Lord
RESPONSORIAL PSALM Psalm 128:1-2.3.4-5 (R. see 1a)
R. Blessed are all who fear the Lord.
Blessed are all who fear the LORD, and walk in his ways!
By the labour of your hands you shall eat. You will be blessed and prosper.
R. Blessed are all who fear the Lord.

R. Blessed are all who fear the Lord.
Indeed thus shall be blessed the man who fears the
LORD. May the LORD bless you from Sion. May you see
R. Blessed are all who fear the Lord.
FIRST READING 2 Timothy 2:8-15
A reading from the second Letter of Saint Paul to Timothy
Beloved: Remember Jesus Christ, risen from the dead, descended from David, as preached in my gospel, the gospel for which I am suffering and wearing fetters like a criminal. But the word of God is not fettered. Therefore I endure everything for the sake of the elect, that they also may obtain salvation in Christ Jesus with its eternal glory. The saying is sure: If we have died with him, we shall also live with him; if we endure, we shall also reign with him; if we deny him, he also will deny us; if we are faithless, he remains faithful-- for he cannot deny himself. Remind them of this, and charge them before the Lord to avoid disputing about words, which does no good, but only ruins the hearers. Do your best to present yourself to God as one approved, a workman who has no need to be ashamed, rightly handling the word of truth.
The word of the Lord
RESPONSORIAL PSALM Psalm 25:4-5ab.8-9.10 and 14 (R. 4a)
R. O Lord, make me know your ways.
O LORD, make me know your ways. Teach me your
paths.
R. O Lord, make me know your ways.
Good and upright is the LORD; he shows the way to
sinners. He guides the humble in right judgement; to the humble he teaches his
way.
R. O Lord, make me know your ways.
All the LORD’s paths are mercy and faithfulness,
for those who keep his covenant and commands. The LORD's secret is for those
who fear him; to them he reveals his covenant.
R. O Lord, make me know your ways.
R. Alleluia. Our Saviour Christ Jesus abolished death and brought life and immortality to light through the Gospel. R. Alleluia.
GOSPEL Mark 12:28-34
A reading from the holy Gospel according to Mark
At that time: One of the scribes came up and asked
Jesus, "Which commandment is the first of all?"  The
second is this, 'You shall love your neighbour as yourself.' There is no other
commandment greater than these." And the scribe said to him, "You are
right, Teacher; you have truly said that he is one, and there is no other but
he; and to love him with all the heart, and with all the understanding, and
with all the strength, and to love one's neighbour as oneself, is much more
than all whole burnt offerings and sacrifices." And when Jesus saw that he
answered wisely, he said to him, "You are not far from the
The Gospel of the Lord


Alexander Joens
DEV GOD WEBSITE
"Go too far away from the road. Or don't", InspiroBot
HOBBIES
I LIKE TO _____ WHILE AT HOME!
- CREATE GAMES
- PLAY GAMES
- WATCH ANIME
- EAT
- SLEEP
I LIKE TO _____ WHILE AT WORK!
- WORK
- LEARN
- ACHEIVE SUCCESS
KANJI REPRESENTATION
KANJI that represents my traits and goals!
赳
Strong, Brave
将来
Future
刻苦
Hard Working
友
Friendly
幸福
Happiness
福
Luck


TWISTER A film review by Scott Renshaw Copyright 1996 Scott Renshaw
(Warner Bros.) Starring: Helen Hunt, Bill Paxton, Cary Elwes, Jami Gertz. Screenplay: Michael Crichton, Anne-Marie Martin. Director: Jan DeBont. Reviewed by Scott Renshaw.
The makers of big-budget summer movies and those who attend those movies appear to have come to an understanding, an understanding best exemplified by an observation I made while watching TWISTER. Several times during the film, there would come a point where it would become clear that the latest sequence showcasing Industrial Light & Magic's computer-generated tornados was at an end (it usually coincided with the dialogue once again becoming audible), at which point several members of the audience would stand up and quickly make their way towards the restroom. They were probably rather secure in the knowledge that they would not miss any crucial plot twists or juicy bits of character development during these brief expository interludes, and even if they did, they were not missing what they had come to the film to see. Not a penny of the money they had plunked down would be wasted if they missed a couple of the characters engaged in conversation.
It is this complicity which produces monotonous displays of technological prowess like TWISTER, a film with a script that makes JURASSIC PARK's look positively labyrinthine by comparison. The shell of a story involves a pair of daredevil meteorologists named Jo (Helen Hunt) and Bill (Bill Paxton) who are about to finalize their divorce after years of chasing storms together. Bill is engaged to another woman (Jami Gertz), and comes to collect the divorce papers just as Jo and her team are about to set off in pursuit of a rare series of tornados. Naturally, Bill comes along as they attempt to deploy a device which will provide valuable data for predicting tornados, just as a corporate-financed (and hence evil) competitor named Jonas (Cary Elwes) is attempting to do the same thing. Also naturally, the device can only work if it is picked up by a tornado crossing its path, which results in the scientists racing to catch up with twisters so they can leave one of devices.
I suppose you have to give the creators of TWISTER credit for coming up with a premise which involves people trying their damnedest to get close to tornados rather than trying their damnedest to get very far away; it could have been even more tedious. The problem is that it doesn't take long before TWISTER starts to look like a loop film. There are only so many ways you can film a bunch of vehicles driving through fields, over dirt roads, along highways before it becomes a chore to watch, and while director Jan DeBont uses every swooping trick at his disposal, there is an awful lot of nothing going on during TWISTER an awful lot of the time. There may be more driving in TWISTER than there was in DeBont's debut feature SPEED.
Of course, SPEED had Sandra Bullock playing an actual character to engage the audience; TWISTER has Helen Hunt playing producer and co-scripter Michael Crichton's generically flinty female scientist character. Hunt is probably a better actor than Bullock, and certainly provides the requisite cuteness factor, but Bullock's heroine was able to comment on SPEED's improbability throughout the film with her priceless reactions. The trite love/hate relationship with which Hunt is saddled is something no one could tunnel out from under, and neither she nor Paxton has the big screen charisma to make the scenes without inclement weather anything but a monumental bore. Every single character manages the astonishing non-Euclidean feat of being less than one-dimensional, with characterization coming in such subtle forms as the fleet of identical black mini-vans used by Elwes' corporate scientists (as though you actually needed to see the three 6's behind his ear) or the Van Halen tunes blasted by one of Hunt's more annoyingly quirky cohorts (Philip Seymour Hoffman).
Films like TWISTER are often defended with comparisons to amusement park rides -- that they make up in thrills what they lack in drama. I don't think TWISTER even qualifies as a roller-coaster.  TWISTER is a surprisingly gloomy and inert experience, with exactly two flashes of inspiration through its two hour running time. When they come, they only serve to remind you what the rest of the film is lacking: any sense of the fun that summer movies are supposed to provide. Whatever one might think of the increasing mindlessness of effects-driven blockbusters, you'd think they could at least manage to entertain, or to give you a reason to come back when you get up to go to the restroom.
On the Renshaw scale of 0 to 10 sucking sounds: 3.
-- Scott Renshaw Stanford University http://www-leland.stanford.edu/~srenshaw
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Class for secure user authentication.
| Properties | |
|---|---|
|
protected
|
Internal property for storing the time to live of the access token. |
|
protected
|
Internal property for storing the encryption algorithm. |
|
protected
|
Internal property for storing the pass phrase for the private key. |
|
protected
|
Internal property for storing the path to the provate key file. |
|
protected
|
Internal property for storing the path to the public key file. |
|
protected
|
Internal property for storing the time to live of the refresh token. |
|
protected
|
Internal property for storing the sekret key. |
|
protected
|
Internal property for the list of supported algorithms. |
|
protected
|
Internal reference to the token storage object. |
|
protected
|
Internal reference to the user authenticator object. |
| Methods | |
|---|---|
|
public
|
Authenticates the user based on the specified credentials and writes the response. |
|
protected
|
Internal auxiliary function for creation of the jwt token. |
|
protected
|
Internal auxiliary function for creation of the token record. |
|
protected
|
Internal auxiliary function for generation of the signature of the data for all supported algorithms. |
|
protected
|
Internal auxiliary function for generation of the signature of the data for the algorithms RS256, RS384, RS512. |
|
protected
|
Internal auxiliary function for generation of a token string. |
|
protected
|
Internal auxiliary function for extraction of the payload from the jwt access token. |
|
public
|
Initializes the authentication manager with parameters. |
|
public
|
Invalidates all token records for the client. |
|
public
|
Invalidates the token record for the jwt access token. |
|
public
|
Invalidates all token records for the refresh token. |
|
public
|
Invalidates all token records for the user. |
|
public
|
Refreshes the access and refresh tokens by using the valid refresh token. |
|
protected
|
Internal auxiliary function for safe base64 decoding. |
|
protected
|
Internal auxiliary function for safe base64 encoding. |
|
protected
|
Internal auxiliary function for validation of the parameters. |
|
public
|
Verifies the jwt access token. |
|
protected
|
Internal auxiliary function for verification of the signature of the data for all supported algorithms. |
|
protected
|
Internal auxiliary function for verification of the data signature for the algorithms RS256, RS384, RS512. |
|
public
|
Verifies the refresh token. |
Internal property for storing the time to live of the access token.
Internal property for storing the encryption algorithm.
The supported algorithms are HS256, HS384, HS512, RS256, RS384, RS512.
Internal property for storing the pass phrase for the private key.
Only required, if the private key was generated with a pass phrase.
Internal property for storing the path to the provate key file.
Required for the algorithms: RS256, RS384, RS512.
Internal property for storing the path to the public key file.
Required for the algorithms: RS256, RS384, RS512.
Internal property for storing the time to live of the refresh token.
Internal property for storing the sekret key.
The secret key is required for the algoritms HS256, HS384, HS512.
Internal property for the list of supported algorithms.
Internal reference to the token storage object.
It must implement \OAuth2\Interfaces\ITokenStorage.
Internal reference to the user authenticator object.
It must implement \OAuth2\Interfaces\IUserAuthenticator.
Authenticates the user based on the specified credentials and writes the response.
| Name | Pass type | Value type | Default value | Description |
|---|---|---|---|---|
| $credentials | by value | array |
The credentials for the authentication. The expected credentials are:
|
|
| $response | by reference | array |
The response upon successful authentication. The expected properties are:
|
It might throw an exception in the case of any system errors:
It might throw the InvalidCredentialsException if the authentication fails.
It might throw the MissingParametersException if any required paramters are empty.
Internal auxiliary function for creation of the jwt token.
| Name | Pass type | Value type | Default value | Description |
|---|---|---|---|---|
| $payload | by value | array |
The payload array. |
Returns the jwt token string.
It might throw an exception in the case of any system errors:
Internal auxiliary function for creation of the token record.
| Name | Pass type | Value type | Default value | Description |
|---|---|---|---|---|
| $user_id | by value | string |
The user id for which the tokens were issued. |
|
| $client_id | by value | string |
The client id for which the tokens were issued. |
|
| $response | by reference | array |
The response to be filled with the user data and tokens. |
It might throw an exception in the case of any errors:
Internal auxiliary function for generation of the signature of the data for all supported algorithms.
| Name | Pass type | Value type | Default value | Description |
|---|---|---|---|---|
| $input | by value | string |
Data to be signed. |
Returns the signature of the data.
It might throw an exception in the case of any system errors:
Internal auxiliary function for generation of the signature of the data for the algorithms RS256, RS384, RS512.
| Name | Pass type | Value type | Default value | Description |
|---|---|---|---|---|
| $input | by value | string |
Data which is signed. |
|
| $algorithm_id | by value | string |
Algorithm to use for signing. The supported algorithms are: RS256, RS384, RS512. |
Returns the signature of the data.
It might throw an exception in the case of any system errors:
Internal auxiliary function for generation of a token string.
Returns the token string.
It might throw an exception in the case of any system errors:
Internal auxiliary function for extraction of the payload from the jwt access token.
| Name | Pass type | Value type | Default value | Description |
|---|---|---|---|---|
| $jwt_access_token | by value | string |
The jwt access token. |
|
| $verify_signature | by value | bool | true |
The flag to control whether the signature should be verified or not. |
Returns the extracted payload array.
It might throw an exception in the case of any errors:
It might throw the InvalidTokenException if the jwt access token is invalid.
Initializes the authentication manager with parameters.
| Name | Pass type | Value type | Default value | Description |
|---|---|---|---|---|
| $parameters | by value | array |
The parameters are:
|
It might throw an exception in the case of any system errors:
Invalidates all token records for the client.
The invalidation by the client id is asserted by a valid client id and a valid refresh token. If the refresh token is expired, the invalidation can be done only after authentication.
The invalidation is done by using \OAuth2\Interfaces\ITokenStorage::deleteTokenRecordByKey() with the key 'client_id'.
| Name | Pass type | Value type | Default value | Description |
|---|---|---|---|---|
| $user_id | by value | string |
The user id for which the refresh token was issued. |
|
| $client_id | by value | string |
The client id for which the refresh token was issued. |
|
| $refresh_token | by value | string |
The refresh token generated upon successful authentication. |
It might throw an exception in the case of any system errors:
It might throw the InvalidTokenException if the refresh token is invalid or expired.
It might throw the TokenExpiredException if the jwt refresh token is expired.
It might throw the MissingParametersException if any required paramters are empty.
Invalidates the token record for the jwt access token.
The invalidation is done by using \OAuth2\Interfaces\ITokenStorage::deleteTokenRecordByKey() with the key 'access_token'.
The origin access token is extracted from the jwt payload.
| Name | Pass type | Value type | Default value | Description |
|---|---|---|---|---|
| $jwt_access_token | by value | string |
The jwt access token generated upon successful authentication. |
It might throw an exception in the case of any errors:
It might throw the InvalidTokenException if the jwt access token is invalid.
Invalidates all token records for the refresh token.
The invalidation is done by using \OAuth2\Interfaces\ITokenStorage::deleteTokenRecordByKey() with the key 'refresh_token'.
| Name | Pass type | Value type | Default value | Description |
|---|---|---|---|---|
| $refresh_token | by value | string |
The refresh token generated upon successful authentication. |
It might throw an exception in the case of any system errors:
It should throw the InvalidTokenException if the refresh token is invalid.
Invalidates all token records for the user.
The invalidation by the user id is asserted by a valid client id and a valid refresh token. If the refresh token is expired, the invalidation can be done only after authentication.
The invalidation is done by using \OAuth2\Interfaces\ITokenStorage::deleteTokenRecordByKey() with the key 'user_id'.
| Name | Pass type | Value type | Default value | Description |
|---|---|---|---|---|
| $user_id | by value | string |
The user id for which the refresh token was issued. |
|
| $client_id | by value | string |
The client id for which the refresh token was issued. |
|
| $refresh_token | by value | string |
The refresh token generated upon successful authentication. |
It might throw an exception in the case of any system errors:
It might throw the InvalidTokenException if the refresh token is invalid or expired.
It might throw the TokenExpiredException if the jwt refresh token is expired.
It might throw the MissingParametersException if any required paramters are empty.
Refreshes the access and refresh tokens by using the valid refresh token.
| Name | Pass type | Value type | Default value | Description |
|---|---|---|---|---|
| $refresh_token | by value | string |
The refresh token generated upon successful authentication. |
|
| $user_id | by value | string |
The user id for which the refresh token was issued. |
|
| $client_id | by value | string |
The client id for which the refresh token was issued. |
|
| $response | by reference | array |
The response upon successful refresh. The expected properties are:
|
It might throw an exception in the case of any system errors:
It might throw the InvalidTokenException if the refresh token is invalid or expired.
It might throw the TokenExpiredException if the refresh token is expired.
It might throw the MissingParametersException if any required paramters are empty.
Internal auxiliary function for safe base64 decoding.
| Name | Pass type | Value type | Default value | Description |
|---|---|---|---|---|
| $b64 | by value | string |
Data to be decoded. |
Returns the base64 decoded data string.
Internal auxiliary function for safe base64 encoding.
| Name | Pass type | Value type | Default value | Description |
|---|---|---|---|---|
| $data | by value | string |
Data to be encoded. |
Returns the base64 encoded data string.
Internal auxiliary function for validation of the parameters.
It might throw an exception in the case of any system errors:
Verifies the jwt access token.
| Name | Pass type | Value type | Default value | Description |
|---|---|---|---|---|
| $jwt_access_token | by value | string |
The jwt access token generated upon successful authentication. |
|
| $check_on_server | by value | bool | true |
This flag defines whether only the signatire should be checked or also the authentication server should be asked. |
Returns the payload array on successful verification, otherwise false.
It might throw an exception in the case of any system errors:
It might throw the InvalidTokenException if the jwt access token is invalid.
It might throw the TokenExpiredException if the jwt access token is expired.
It might throw the MissingParametersException if any required paramters are empty.
Internal auxiliary function for verification of the signature of the data for all supported algorithms.
| Name | Pass type | Value type | Default value | Description |
|---|---|---|---|---|
| $input | by value | string |
Data which was signed. |
|
| $signature | by value | string |
Signature used for signing. |
It might throw an exception in the case of any errors:
Internal auxiliary function for verification of the data signature for the algorithms RS256, RS384, RS512.
| Name | Pass type | Value type | Default value | Description |
|---|---|---|---|---|
| $input | by value | string |
Data which is signed. |
|
| $signature | by value | string |
Signature used for signing the data. |
|
| $algorithm_id | by value | string |
Algorithm used for signing. The supported algorithms are: RS256, RS384, RS512. |
It might throw an exception in the case of any system errors:
Verifies the refresh token.
| Name | Pass type | Value type | Default value | Description |
|---|---|---|---|---|
| $refresh_token | by value | string |
The refresh token to be verified. |
|
| $user_id | by value | string |
The user id for which the refresh token was issued. |
|
| $client_id | by value | string |
The client id for which the refresh token was issued. |
It might throw an exception in the case of any system errors.
It should throw the InvalidTokenException if the refresh token is invalid.
It might throw the TokenExpiredException if the jwt access token is expired.
It should throw the MissingParametersException if any required parameters are empty.


Customize the name you want associated with all bids, item sales, and chat messages (must be 3 to 15 characters).
Choose the location any of your sold auction items will originate from.
When you begin a bid on an item the default price amount will be automatically incremented by this number (1 to 100).
Choose how you want the tab pane laid out on the page.
Customize the background color of the notification panel that displays messages at the top of the page.
Customize the foreground text color of the notification panel that displays messages at the top of the page.
Change how wide the chat and bid history popups should be (200 to 2000 pixels).
Change the component theme used by ICEfaces.
If selected then your choices on this form will be stored as web browser cookies, and reloaded from there on subsequent visits.