“Udakañhi nayanti nettikā, Usukārā namayanti tejanaṁ; Dāruṁ namayanti tacchakā, Attānaṁ damayanti subbatā”ti. … Kulo thero ….
Irrigators guide water, fletchers shape arrows, carpenters carve wood; those true to their vows tame themselves.


Ocean [ai57], ocean, in The Inner Sea
Last updated Turn #101
Ocean [ai57], ocean, in The Inner Sea
------------------------------------------------------------------------
20: The Savvy Aardvark [ha5r], ship, 2 hulls, 1 rowing port, 6 sails,
20: 32% damaged, arrived from Ocean [ai56], owner:
20: Phantasm [n4b], Imperial Empire, duke, with eight sailors
21: The Savvy Aardvark [ha5r], ship, 2 hulls, 1 rowing port, 6 sails,
21: 32% damaged, departed for Ocean [ai58].
Routes leaving Ocean:
North, to Ocean [ah57], Crystal Sea, 6 days
East, to Ocean [ai58], 6 days
South, to Ocean [aj57], 6 days
West, to Ocean [ai56], 6 days


Problem 1. Exchange if greater
Result:
Problem 2. Multiplication Sign
Result:
Problem 3. The biggest of Three
Result:
Problem 4. Sort 3 numbers
Result:
Problem 5. Digit as word
Result:
Problem 6. Quadratic equation
Result:
Problem 7. The biggest of five numbers
Result:
Problem 8. Number as words
Result:


Examples
Example 5
This example is taken from the
MDN docs for Document.write()
. When you click on the button below, the entire HTML document will be
overwritten and replaced with an h1
element with the text
Out with the old - in with the new
To return the document to its previous state, simply reload the page.


I am currently doing my Internship at PSA Corporation as a Product Engineer Intern.
I have a keen interest on Full-stack Enterprise Development and have been learning
about it since the second year of my study.
Personally, I feel that technology has played a huge role in the advancement of today's
society
in
every aspect (and still continue to!), and
I wish to be part of the driving force to spread awareness and empower people by leveraging
technology.
Interests
Web Development
I have the most experience in Java Enterprise Edition (EE) platform with JavaServer Faces (JSF)
and AngularTS as the server-side and client-side framework respectively.
Presently, I am exploring more on development in a full JavaScript environment (nodeJS,
expressJS and React),
and I would LOVE to talk more about it.
My next interest to learn more on is on .NET framework, seeing that it is one of the most
popular framework in Singapore, but that's something for the future :)
Computer Network and Security
Ever since my diploma education (Business Information Technology), I have always been passionate
about Information Security and Networking.
Web development do not require much prerequisite on networking, but having an understanding of
the lower level socket programming and
it's underlying protocols allowed me to appreciate how things work.
On the other hand, security measures are required to enforce the Confidentiality, Integrity and
Availability of information.
Always excited to discuss on information security management topics!
Portfolio
Some of the projects that I've worked on during my school.
CoolBins
Smart Waste Management System
SDGKMS
Knowledge Management System
SaveSave
Interest Rates Optimiser
Shoeper Market
Full Stack Web Development Project
Crowd Funder
Database Project
Merlion Car Rental
My First Java EE Project
Edu-tainment System
Temasek Polytechnic's Final Year
Project
Want to know more?
Have a quick chat with me on any of the links!
CoolBins
Smart Waste Management Project
This was one of the most memorable project I've had as it is an Internet-of-Things (IoT) project. Disposal of garbage is
a highly important task that unfortunately, nobody likes to do. Hence, CoolBins aim to simplify the unpleasant experience of
dealing with rubbish.
The Smart Waste Management's architecture consist of 3 layers:
Plant (Physical location of our bins with the sensors and motors in it)
Fog Processor
Cloud Server
At the Plant layer, the bin is equiped with multiple Microbits with different sensors. The Microbits communicates with each other via
radio wave, and there is a central Microbit that sends the bin's data upstream to the RaspBerry Pi (Fog Processor) via serial over usb communication. Similarly, the
central Microbit receives information from the RaspBerry Pi and propagate it to the rest via radio signal.
Secondly, at the Fog Processor layer, the RaspBerry Pi is able to display the current information of it's own Bin on its own's onboard LED display for users to view the status. On top of that,
it will send it's information up to the Cloud Server via Message Queuing Telemetry Transport (MQTT).
Lastly, the Cloud Server runs on a lightweight Flask Application that is able to display the statuses of all the CoolBins at the different location in a dashboard.
It also feature a floorplan where it shows a heatmap of the usage of the bins to allow the management users to better plan the cleaning schedule and placement of bins in popular spots.
Check out this short video demo of CoolBins in action!
The SDGKMS enable users to kickstart their social project to achieve any of the 17 SDGs, as well as developing a portfolio page for their
institution and/or personal page. In a typical project, project owner may require additional resources to sustain their project, which may be offered
by other individuals or institutions at a cost or even for free.
The recommendation algorithm developed by the team helps to match resource requests to
relevant offers by a series of keyword matching and the availability, reducing the effort required for project owners to manually seek donors. Additional,
a reward and leaderboard systems helps to motivate more users to contribute to different resources and projects.
SDGKMS features a data mapping utility, where administrators can use of web scrapping tools to scrape for social entreprenuers' basic information into an excel spreadsheet to import into the system.
Based on the imported information, the SDGKMS will automate the profile creation process for these social entreprenuers and send an invitation email to them to activate their account.
SDGKMS also follows a Freemium Model, where basic services (limited search, profile views) are provided to every users. At a small costs, users get to upgrade their
account to premium users and they get to enjoy unlimited access to other users' projects and portfolio.
The SDGKMS consists of an Angular Web Application, an Ionic Mobile Application with Jakarta Enterprise Edition (EE) as the common backend service.
The Jakarta EE service was built and ran by Maven and deployed onto our local GlassFish server with mySQL.
Java Persistence API (JPA) was the Object-Relationship Mapping (ORM) technology used to map the Jakarta EE entities with the mySQL records.
Additionally, other services such as Java Cryptography API (for Role-Based Access Control), Enterprise JavaBeans (EJB) Timers , PayPal Payment API, etc were utilised.
In this project, every member is a full stack developer. We handled from backend logic to frontend UI/UX for our individual modules.
I wrote the application logic on our Enterprise SessionBean Layer and exposed them via RESTful APIs on the Jakarta EE Application for the Angular and Ionic Application to call.
My key focus areas were: Project Management module such as the Creation, Read, Update, Deletion (CRUD) of projects, Management of team members
in a project, Key Performance Index (KPI) management, Resource Offers Management and the Freemium Model. Fortunately, the concept of the two-way data model,
writing service classes for the angular components to call were familiar with me as I have had prior experience with Angular.
On the other hand, it took me slightly longer to design the Ionic mobile app, as I had lesser experience with working with Ionic. Working with Ionic is also slightly
trickier as the native design for iOS and Android were different, which meant that certain design may not work as intended for the other OS. Fortunately, I had wonderful
groupmates who helped one another that led to the successful implemention of our project.
Lastly, as part of the testing requirement, I used JUnit as the testing framework, and wrote test cases to assert the Jakarta EE's Session Beans to ensure that the backend programming
implementations are written correctly such as: exceptions thrown properly when validation fails, expected results returned when cases passes, etc.
For more information about this project, feel free to check out the project showcase page here! Thanks to everybody's
dedication to the project, we even achieved 3rd in place for the popularity votes during the showcase session!
Keywords: Jakarta EE, Angular, Ionic, JPA, MySQL, JUnit, Knowledge Management System
SaveSave
Interest Rate Optimiser
I spent my summer interning as a Front End Web Developer at NUS FinTech Lab. SaveSave
was
a Financial Technology (FinTech) web application that provide users with spending
recommendations
for their bank accounts by analysing their bank statements.
The tech stack chosen for this project was ReactJS for it's frontend web
framework,
nodeJS/expressJS as
the backend logic, and the relational database was hosted on the cloud by
Microsoft
SQL Server.
In this project, I made use of the React State Management and the browser's local
storage heavily to
store insensitive information about our user. Additionally, React props were used to
in page routing in order to
push information from a page to another.
Although my official job title was Front End Web Developer, I implemented password
salt and hashing for the
backend logic and also in the database scheme.
I also performed network engineer roles by configuring the
Virtual Machine to connect to the Ubuntu Server from the School of Computing. I
setup
Nginx Web Server to host SaveSave's
webpage and configured Nginx to act as a reverse proxy to handle any RESTful
api calls.
As this was a project for the NUS FinTech Lab, I can only give a brief description on it's setup
feel free to PM me to discuss more about React and other FinTech applications!
Keywords: ReactJS, NodeJS, Microsoft SQL, Ubuntu 16.4, Nginx
Shoeper Market
Full Stack Web Development
Shoeper Market was a project done for my software development module (IS3106), where
my groupmates and I
built an online platform for shoe lovers to buy/sell their shoes.
Shoeper Market is a multi-tier (3-tier) architecture application which consist of
the Data, Logic and Presentation tier.
The data tier runs on mySQL, the logic tier runs on Java Enterprise Edition (J2EE),
and the presentation tier runs on JavaServer Faces (JSF) and AngularTS.
Java Persistence API (JPA) was utilised as an Object-Relational Mapping (ORM) to
manage persistence and interaction between the server and database.
Shoeper Marketplace (the customer facing web app) was built on AngularTS while
Shoeper Market (the admin and vendor management portal) was built on JSF.
Both frameworks followed the Model-View-ViewModel (MVVM) framework, whereby
managedBeans and typescript objects were used in the JSF and AngularTS framework
respectively.
I wrote RESTful Web Services using J2EE's JAX-RS to handle incoming HTTP requests
from the Shoeper Marketplace and to send the appropriate
outgoing HTTP responses. For Shoeper Market, the managedBean's dependency injection
helped to call the logic that were in the EJB layer.
Login Page for customers (AngularTS)
SignUp Page for customers (AngularTS)
Reset Password for customers (AngularTS)
Editing Profile for customers (AngularTS)
Landing Page [Admin/ Shoe Vendors have different dashboard view]
(JSF)
Vendor checking shoe stocks level (JSF)
Internal staff managing restock requests (JSF)
Vendor credit management and sales performance tracking
Keywords: Java Enterprise Edition, JPA, Java Server Faces, AngularTS
Crowd Funder
Database Project
Crowd Funder was another school project that focused more on database management.
The objective of this system was to provide a platform for users to host their
events
and to have other users support them by 'funding' them.
The main technology stack used were HTML/PHP/PostgreSQL, and they were hosted using XAMPP. Since this
project was focused on
database management, more emphasis were placed on writing PostgreSQL triggers and
designing the Entity Relationship (ER) Diagram.
A Trigger is a special kind of stored procedure that triggers upon an
occurance of any CRUD operations.
On the other hand, while designing the ER diagram, a huge focus was on enfocing the
relationships (One-to-one/ One-To-Many/ Many-To-Many)
and the particiation contraints (Total/Partial).
While users can create/fund projects, there are also admins managing the system
(ban/suspend projects and users),
and triggers were used to enforce constraints such as ensuring that a user is not
banned, a project has must have a minimum
number of goals to reach, etc.
*Note: Since this was focused on DMBS, there was minimal weightage on
UI/UX, hence I spent more time on the backend over the UI.
ER Diagram
One example of complex query: 'Find my top fan'
Another example of complex query: 'People with similar interests'
Use this area to describe your project. Lorem ipsum dolor sit amet, consectetur
adipisicing elit. Est blanditiis dolorem culpa incidunt minus dignissimos deserunt
repellat aperiam quasi sunt officia expedita beatae cupiditate, maiores repudiandae,
nostrum, reiciendis facere nemo!
Date: August - November 2019
dasd: PHP, asd
Merlion Car Rental
First Java EE Project
This was my first experience working with Java EE. The main focus on this
application was to get familiar with working
with the Enterprise JavaBeans (EJBs) for logic processing, the difference between
stateless/stateful/singleton session beans,
when to use the different states and the javabeans convention for getter/setter.
Additionally, bean validations were used to enforce the correct data format of given
input.
In this application, Merlion Car Rental simulated a car rental system that allocates
available rental cars to users
at their desired location, and also for Merlion Car Rental's staffs to transport the
car over to the location if it was unavailable at that particular pickup point.
Since the main objective of this project was to focus on Java EE's capabilities, the
only 'UI' is a system log on the terminal that parse
user's inputs for their choice selections.
Class Diagram
Entity Diagram
Screenshot of terminal UI: Entrance 'page'
Screenshot of terminal UI: Viewing the different car rental rates
Together with Aventis School of Management, my groupmates and I built an Edutainment
(Education + Entertainment)
system.
This project was built mainly on HTML5/PHP and mySQL database. The system was split
into 2: Front End for students to view learning materials and
a backend content management system for administrators to upload new videos.
Other than designing the UI in the Front End, my main scopes included: Designing the
'recommended video' feature, Login Page, and Comment Section for each videos.


Preparation time
less than 30 mins
Cooking time
10 to 30 mins
Serves
Serves 2-4
Preheat the grill to its highest setting.
Place the bread into a food processor and blend into medium-sized breadcrumbs.
Add the remaining stuffing ingredients, except for the parsley, to the breadcrumbs and blend until thoroughly combined. (If it becomes a lump, remove the lid and break it up a little with a spoon.) Stir in the chopped parsely.
For the crayfish, using a sharp knife, cut all of the crayfish lengthways from tip to tail. Remove any waste sacs from the crayfish.
Arrange the crayfish, side-by-side, on a roasting tray. Smear up a generous amount of the stuffing onto the flesh side of each crayfish half.
Sprinkle the crayfish with salt and place under the grill. Grill for 4-5 minutes, or until completely cooked through. The shells will turn completely red when cooked. If there are any remaining signs of dark brown or blue colouring, they are not ready and require a few minutes more.
To serve, transfer the cooked crayfish to a plate, and arrange in rows. Serve with lemon wedges.


CTA BUS TRACKER
Home
Tracker
find your bus times
Western & Addison: Northbound
Western & Addison: Southbound
Addison & Western: Westbound
Addison & Western: Eastbound
Find your bus
find the route results


Home
Gallery
Products
Services
About
Student
Department
University
City
Scroll the document to see the changes


|
chessCAMO
|
Public Member Functions | |
| void | formPieces (vector< Sprite > &pieces, const vector< Sprite > &pieceType, const vector< Piece * > &board) |
| Forms the pieces for the current board representation. More... | |
| void | formReservoir (vector< Sprite > &reservoir, const vector< Sprite > &pieceType) |
| Forms the piece reservoir. More... | |
| void | drawText (RenderWindow &window, Text &text_object, string message, int size, unsigned int pos_x, unsigned int pos_y, Font font, Color color, unsigned int style) |
| Draws text to the screen according to the provided parameters. More... | |
| void | drawRect (RenderWindow &window, RectangleShape &rect_object, float width, float height, unsigned int pos_x, unsigned int pos_y, Color color, int out_thick, Color out_color) |
| Draws a rectangle in the interface window. More... | |
| void | getLegalMoves (vector< int > &legalMoves, int src, Chess &chess) |
| Gets the squares of legal moves. More... | |
| void | getSideToMoveSquares (vector< int > &sideSquares, Chess &chess) |
| Gets the squares of all pieces that match the turn type. More... | |
| void | resetPosition (string file_status, string file_promotion, string message, int move_num, Chess &chess, vector< int > &sideSquares) |
| Resets the position to the corresponding position indicated by 'move_num'. More... | |
| void | streamIO (string file_path, string message, bool draw_or_resign, Chess &chess) |
| Writes data to an output stream (file) and reads in data from an input stream (file) as need. Used for promotion and warning messages. More... | |
|
inline |
Forms the pieces for the current board representation.
| pieces | The pieces to draw on the board | |
| [in] | pieceType | The piece type from which the drawn piece image is obtained |
| [in] | board | The current board representation |
|
inline |
Forms the piece reservoir.
| reservoir | The piece reservoir | |
| [in] | pieceType | The piece type from which the drawn piece image is obtained |
|
inline |
Draws text to the screen according to the provided parameters.
| window | The window on which to draw | |
| text_object | The text object that is used | |
| [in] | message | The message to write |
| [in] | size | The size of the characters |
| [in] | pos_x | The x position on the screen |
| [in] | pos_y | The y position on the screen |
| [in] | font | The font to use |
| [in] | color | The color that the text will be |
| [in] | style | The text's style |
|
inline |
Draws a rectangle in the interface window.
| window | The window on which to draw | |
| rect_object | The rectangle object that is used | |
| [in] | width | The width of the rectangle |
| [in] | height | The height of the rectangle |
| [in] | pos_x | The x position on the screen |
| [in] | pos_y | The y position on the screen |
| [in] | color | The color that the rectangle will be filled with |
| [in] | out_thick | The outline thickness (negative values go toward the center of rectangle) |
| [in] | out_color | The outline color |
|
inline |
Gets the squares of legal moves.
| legalMoves | The legal moves vector | |
| [in] | src | The piece's source square |
| chess | The chess object |
|
inline |
Gets the squares of all pieces that match the turn type.
| sideSquares | The squares of the side whose turn it is currently. |
| chess | The chess object |
|
inline |
Resets the position to the corresponding position indicated by 'move_num'.
| [in] | file_status | The file path for status information |
| [in] | file_promotion | The file path for promotion information |
| [in] | message | The message to use as a warning |
| [in] | move_num | The move number to revert the position to |
| chess | The chess object | |
| sideSquares | The squares of pieces whose turn it will be (updated by reference) |
|
inline |
Writes data to an output stream (file) and reads in data from an input stream (file) as need. Used for promotion and warning messages.
| [in] | file_path | The file path to read/write from |
| [in] | message | The message to write |
| [in] | draw_or_resign | Whether to apply the drawOrResign function |
| chess | The chess object |


{% extends sitebase.html %} {% block head %} {% end %} {% block content %}
Server time-outs can cause the
Compute pooling values
button to become incorrectly grayed out and thus unusable.
If this happens to you, recover by leaving this page and then coming
back to it.


Rohit Sharma shares 'Zlatan moment' as Ranveer Singh finds it 'cool'
by IANSNEW DELHI: India's stand-in skipper Rohit Sharma on Friday posted a throwback picture with Ravindra Jadeja and Ishant Sharma and that has gone viral with Rohit comparing Ishant to Zlatan Ibrahimovic due to the similarity in hairstyle.
The caption in the photo read: "We got zlatan amongst us. Great fun chatting."
In fact, it also got Bollywood star Ranveer Singh excited and he wrote: "Cool."
India will play the opening T20I of the three-match series against Bangladesh on Sunday.


|
PocketSphinx
5prealpha
|
Operations on dictionary. More...
#include <sphinxbase/hash_table.h>
#include "s3types.h"
#include "bin_mdef.h"
#include "pocketsphinx_export.h"
Go to the source code of this file.
Data Structures | |
| struct | dictword_t |
| a structure for one dictionary word. More... | |
| struct | dict_t |
| a structure for a dictionary. More... | |
Macros | |
| #define | S3DICT_INC_SZ 4096 |
| #define | dict_size(d) ((d)->n_word) |
| Packaged macro access to dictionary members. | |
| #define | dict_num_fillers(d) (dict_filler_end(d) - dict_filler_start(d)) |
| #define | dict_num_real_words(d) (dict_size(d) - (dict_filler_end(d) - dict_filler_start(d)) - 2) |
| Number of "real words" in the dictionary. More... | |
| #define | dict_basewid(d, w) ((d)->word[w].basewid) |
| #define | dict_wordstr(d, w) ((w) < 0 ? NULL : (d)->word[w].word) |
| #define | dict_basestr(d, w) ((d)->word[dict_basewid(d,w)].word) |
| #define | dict_nextalt(d, w) ((d)->word[w].alt) |
| #define | dict_pronlen(d, w) ((d)->word[w].pronlen) |
| #define | dict_pron(d, w, p) ((d)->word[w].ciphone[p]) |
| The CI phones of the word w at position p. | |
| #define | dict_filler_start(d) ((d)->filler_start) |
| #define | dict_filler_end(d) ((d)->filler_end) |
| #define | dict_startwid(d) ((d)->startwid) |
| #define | dict_finishwid(d) ((d)->finishwid) |
| #define | dict_silwid(d) ((d)->silwid) |
| #define | dict_is_single_phone(d, w) ((d)->word[w].pronlen == 1) |
| #define | dict_first_phone(d, w) ((d)->word[w].ciphone[0]) |
| #define | dict_second_phone(d, w) ((d)->word[w].ciphone[1]) |
| #define | dict_second_last_phone(d, w) ((d)->word[w].ciphone[(d)->word[w].pronlen - 2]) |
| #define | dict_last_phone(d, w) ((d)->word[w].ciphone[(d)->word[w].pronlen - 1]) |
| #define | S3_START_WORD "<s>" |
| #define | S3_FINISH_WORD "</s>" |
| #define | S3_SILENCE_WORD "<sil>" |
| #define | S3_UNKNOWN_WORD "<UNK>" |
Functions | |
| dict_t * | dict_init (cmd_ln_t *config, bin_mdef_t *mdef) |
| Initialize a new dictionary. More... | |
| int | dict_write (dict_t *dict, char const *filename, char const *format) |
| Write dictionary to a file. | |
| POCKETSPHINX_EXPORT s3wid_t | dict_wordid (dict_t *d, const char *word) |
| Return word id for given word string if present. More... | |
| int | dict_filler_word (dict_t *d, s3wid_t w) |
| Return 1 if w is a filler word, 0 if not. More... | |
| POCKETSPHINX_EXPORT int | dict_real_word (dict_t *d, s3wid_t w) |
| Test if w is a "real" word, i.e. More... | |
| s3wid_t | dict_add_word (dict_t *d, char const *word, s3cipid_t const *p, int32 np) |
| Add a word with the given ciphone pronunciation list to the dictionary. More... | |
| const char * | dict_ciphone_str (dict_t *d, s3wid_t wid, int32 pos) |
| Return value: CI phone string for the given word, phone position. More... | |
| int32 | dict_word2basestr (char *word) |
| If the given word contains a trailing "(....)" (i.e., a Sphinx-II style alternative pronunciation specification), strip that trailing portion from it. More... | |
| dict_t * | dict_retain (dict_t *d) |
| Retain a pointer to an dict_t. | |
| int | dict_free (dict_t *d) |
| Release a pointer to a dictionary. | |
| void | dict_report (dict_t *d) |
| Report a dictionary structure. More... | |
Operations on dictionary.
Definition in file dict.h.
| #define dict_num_real_words | ( | d | ) | (dict_size(d) - (dict_filler_end(d) - dict_filler_start(d)) - 2) |
Add a word with the given ciphone pronunciation list to the dictionary.
Return value: Result word id if successful, BAD_S3WID otherwise
| d | The dictionary structure. |
| word | The word. |
| p | The pronunciation. |
| np | Number of phones. |
Definition at line 80 of file dict.c.
References dict_t::max_words, and dict_t::n_word.
Referenced by ps_add_word().
| const char* dict_ciphone_str | ( | dict_t * | d, |
| s3wid_t | wid, | ||
| int32 | pos | ||
| ) |
Return value: CI phone string for the given word, phone position.
| d | In: Dictionary to look up |
| wid | In: Component word being looked up |
| pos | In: Pronunciation phone position |
Definition at line 69 of file dict.c.
References bin_mdef_ciphone_str(), dictword_t::ciphone, dict_t::mdef, and dict_t::word.
| int dict_filler_word | ( | dict_t * | d, |
| s3wid_t | w | ||
| ) |
Return 1 if w is a filler word, 0 if not.
A filler word is one that was read in from the filler dictionary; however, sentence START and FINISH words are not filler words.
| d | The dictionary structure |
| w | The word ID |
Definition at line 413 of file dict.c.
Referenced by ps_lattice_bestpath(), ps_lattice_penalize_fillers(), and ps_lattice_posterior().
| dict_t* dict_init | ( | cmd_ln_t * | config, |
| bin_mdef_t * | mdef | ||
| ) |
Initialize a new dictionary.
If config and mdef are supplied, then the dictionary will be read from the files specified by the -dict and -fdict options in config, with case sensitivity determined by the -dictcase option.
Otherwise an empty case-sensitive dictionary will be created.
Return ptr to dict_t if successful, NULL otherwise.
| config | Configuration (-dict, -fdict, -dictcase) or NULL |
| mdef | For looking up CI phone IDs (or NULL) |
Definition at line 252 of file dict.c.
References dict_t::max_words.
Referenced by ps_lattice_read(), and ps_load_dict().
| POCKETSPHINX_EXPORT int dict_real_word | ( | dict_t * | d, |
| s3wid_t | w | ||
| ) |
Test if w is a "real" word, i.e.
neither a filler word nor START/FINISH.
| d | The dictionary structure |
| w | The word ID |
Definition at line 427 of file dict.c.
Referenced by dict_write(), ps_astar_hyp(), and ps_lattice_hyp().
| void dict_report | ( | dict_t * | d | ) |
Report a dictionary structure.
| d | A dictionary structure |
Definition at line 499 of file dict.c.
References dict_t::max_words, and dict_t::n_word.
| int32 dict_word2basestr | ( | char * | word | ) |
If the given word contains a trailing "(....)" (i.e., a Sphinx-II style alternative pronunciation specification), strip that trailing portion from it.
Note that the given string is modified. Return value: If string was modified, the character position at which the original string was truncated; otherwise -1.
| POCKETSPHINX_EXPORT s3wid_t dict_wordid | ( | dict_t * | d, |
| const char * | word | ||
| ) |
Return word id for given word string if present.
Otherwise return BAD_S3WID
Definition at line 399 of file dict.c.
References BAD_S3WID, and dict_t::ht.
Referenced by ps_lookup_word().


Status & Alarms Summary
Last Updated: 20 Aug 2013 22:05:08
Observatories
Lasers
URL
State
OVR
State
Laser
Sensitive
CFHT
OK
NO
YES
GEMINI
OK
NO
YES
IRTF
OK
NO
NO
KECK1
OK
NO
YES
KECK2
OK
NO
YES
SUBARU
OK
NO
NO
UH2.2M
STALE
NO
NO
Laser State
Shutter Event
(site,duration)
Predictions
(number, site list)
GEMINI
On-Sky
None
None
KECK1
Off
None
None
KECK2
Off
None
None
SUBARU
Off
None
None
Collisions
Laser
Scope
Started
Ends
Priority
Laser "ON" Preview (Predictions & Collisions)
Laser
Scope
Starts
Ends
Priority
Heartbeat Status
:
Collector
GA_Engine
Status_Mgr
LTCS Main Page
Status & Alarms Summary
Configuration
Query Tool
Telescope Status
Gemini version: 4.3.gemini
Keck patch level
p22
Original version from: CARA, W.M. Keck Observatory.


An important part of developing a solution to a problem is collecting, visualizing and analyzing quantitive data. We've attempted to gain insights into what would influence students to attend school events.
To collect additional data on high school students and new college students we created a survey. The goal of this survey was collect primary data on our target market.
A few conclusions can be drawn from the data collected through the survey. Firstly, everyone has different habits and wants for the number of events that they attend. There are outliers, such as the person who attends 40 events per year. Because of this an incentive system may be more or less effective depending on who is targeted.
Additonally, there is some variation in how people respond to specific incentives. The most popular incentive is small value gift cards, closely followed by extra credit.
We also looked at data from Statista on the percentage of US Households that have attended high school sports game. Predictions are set to remain fairly low. This demonstrates that there is low outside interest in high school sports from parents and other family members.


Please enter Service No.
Please enter Password
Please enter your pet Name
Please enter your birth place
Please enter your mother tongue
Please enter new Password
Password must contain a digit,capital letter,small letter with length 8.
Please enter confirm Password
Please enter current Password
Please enter your pet Name.
Please enter your birth Place


MyStudyPal is a free study tool effective for helping students study smarter not harder. Contrary to popular belief that studying for long hours is ideal for A students, research has shown that studying in blocks is a more productive way of studying. And that is what MyStudyPal does for you!
With MyStudyPal, you get to; Break long hours of study into
shorter periods
Schedule study times ahead. You won't forget to study for that
important test or exam!
Customize your study buddy. It will remind you when it's time
to hit the books.
Build a productive study habit that will fetch you those A's.


Please enter your first name *
Please enter your last name *
Please enter a valid email *
Please enter a valid mobile number *
You're going to be using your mobile number (not your email) whenever you sign in, so make sure you enter your correct number!
Please check the fields for filling errors.
{{signUpError}}


| Date - Time | Board Game | Complexity | Seats | Location | Organisator | |
|---|---|---|---|---|---|---|
| {{ boardgamenight.dateTime | date : 'dd/MM/yy - HH:mm'}} | {{ boardgamenight.boardgameName }} |
{{ (boardgamenight.totalPlayerCount - boardgamenight.availablePlayerCount) + boardgamenight.players.length }} / {{ boardgamenight.totalPlayerCount }}
{{ (boardgamenight.totalPlayerCount - boardgamenight.availablePlayerCount) + boardgamenight.players.length }} / {{ boardgamenight.totalPlayerCount }}
|
{{ boardgamenight.city }}
{{ boardgamenight.city }}
|
{{ boardgamenight.organisator.fullName }} |
|


Click below to see the HTML version of this email.
http://link.cvs.com/r/OJOS01I/BHRX1/FV5XG3/GKN0I9X/F0P2E/K9/t?a=OJOS01I&b=RKCDN&c=1O9GFCL&d=NWESAG&e=1&f=09b7c99822e05974cf5a
****************************************************
CVS/pharmacy®
****************************************************
25% off 5-star beauty.*
Check out this offer and more >
http://link.cvs.com/r/OJOS01I/BHRX1/FV5XG3/GKN0I9X/9HS8X/K9/t?a=OJOS01I&b=RKCDN&c=1O9GFCL&d=NWESAG&e=1&f=09b7c99822e05974cf5a
****************************************************
Add<EMAIL_ADDRESS>to your address book to continue receiving our emails.
****************************************************
*Available online only. Expires 3/6/13 at 11:59 PM ET. To receive the 25% off Beauty discount, you must click the Get Offer link in the email to activate your offer. Excludes Burt’s Bees, Badger, CHI Appliances, Essie, John Frieda Precision Foam Hair Color, LaRoche-Posay, Lierac, Miss Jessie’s, Nailtiques, Omnilux, Olay Pro X, Orly, Vichy, Zeno and all Salon Hair Care. The 25% sale cannot be combined with another product sale running at the same time. You will receive the larger discount.You are receiving this email because you indicated you wanted to be informed of the latest news and specials from CVS/pharmacy online. If you prefer not to receive future emails, please unsubscribe below. Please note that if you are opted in for other CVS/pharmacy email communications, you will continue to receive them unless you opt-out specifically for those.
http://link.cvs.com/u/OJOS01I/BHRX1/FV5XG3/GKN0I9X/V1/aHVibGVlcGg2MDZAdHVtYmxyLmNvbQ==/
© Copyright 2013 CVS.com
http://link.cvs.com/r/OJOS01I/BHRX1/FV5XG3/GKN0I9X/L7B43/K9/t?a=EM_Win_030413
One CVS Drive, Woonsocket, RI 02895
[[OJOS01I-RKCDN-BHRX1-FV5XG3-GKN0I9X-M-M2-20130304-f1ddc43868d4730]]


Before Change
self.requires_deterministic = requires_deterministic
// Internals specification
for name, spec in self.network.internals_spec().items():
if name in self.states_spec:
raise TensorforceError(
"Name overlap between internals and states: {}.".format(name)
)
if name in self.internals_spec:
raise TensorforceError(
"Name overlap between internals and internals: {}.".format(name)
)
if name in self.actions_spec:
raise TensorforceError(
"Name overlap between internals and actions: {}.".format(name)
)
self.internals_spec[name] = spec
Module.register_tensor(name=name, spec=spec, batched=True)
def tf_initialize(self):
super().tf_initialize()
self.internals_init.update(self.network.internals_init())
After Change
network_cls, first_arg, kwargs = Module.get_module_class_and_kwargs(
module=network, modules=network_modules, inputs_spec=inputs_spec
)
if first_arg is None:
internals = network_cls.internals_spec(**kwargs)
else:
internals = network_cls.internals_spec(first_arg, **kwargs)
super().__init__(
// Model
states=states, internals=internals, actions=actions, scope=scope, device=device,
saver=saver, summarizer=summarizer, execution=execution,


1. Run Old Apps:
Got an application that won't play nice in Windows 7 or Vista, but works fine in XP or an even earlier version of Windows, like Me? Just grab an old Windows CD and install it within a virtual machine (VM). Then install your app.
VMware Player features Unity mode, which allows applications running in the virtual machine to appear as if they're running natively on the host computer. They have their own taskbar buttons and their own program windows, making for a seamless experience. For this to work, however, you'll need to install the VMware Tools program on the virtualized operating system. You're usually prompted to do this after installation of the OS has finished.
2. Access Virus-Infected Data:
Ever been sent a file that your antivirus program has flagged, but which contains important data you just have to view? Most virtualization software includes snapshot functionality, which means you can create a "saved state" of the virtual OS and its entire hard disk. It's a little like travelling back in time.
You could create a snapshot in the virtual machine, open the infected file within the VM to access the data and, if the virus causes chaos, simply click to restore the VM snapshot. Hey presto--a clean virtualized computer.
3. Browse in Complete Safely:
Why not install Windows on VMware Player, then install Firefox, and run it in Unity mode so it appears to run natively on the host computer?
Essentially Firefox will be running in what's known as a sandbox, meaning that should it (or one of its plugins) get hacked while you're online, there'll be no absolutely no risk to your actual operating system. You could create a snapshot once everything's been configured in the virtual machine in order to get things back up and running quickly, should anything go wrong.
4. Test Software, Upgrades, or New Configurations:
The virus testing technique above isn't limited to malware. You could use your virtual computer to test new software, updates, or even new configurations of software before you roll them out for real on your main OS.
Some server administrators use virtualization to create a copy of an existing installation of an operating system, plus its data, which they then run virtualized and play with to see if configuration changes or updates will cause any harm. If you manage workstation computers and want to be sure a Windows update is OK before rolling it out, you could do the same thing--just test it in a virtualized machine first.
5. Run Linux on Top of Windows (or vice-versa):
Want to give Linux a try but can't face repartitioning your computer's hard disk? Provided that it would ordinarily install on your computer, you can run just about any operating system inside a virtual machine, including most Linux distros.
Linux and Mac users have been using virtualization for years to run Windows on top of their chosen OS in this way.
If you run a Linux machine for mail or Web services, as examples, having a desktop version of Linux for occasional use will also make it easier to communicate with the server. There's no need to install PUTTY on Windows to communicate via secure shell (SSH), for example, because Linux has that kind of thing built-in.
6. Back Up an Entire Operating System:
Because the virtual OS is entirely contained within a series of files, backing it up is as simple as backing up any other files. It's the same with virtualized server installations too. If you're running a virtual machine on a server to host your mail server, and it's brought down by a hack attack, then bringing things back to working order is as simple as restoring the backup files (assuming the vulnerability that allowed the hack is quickly addressed once things are up and running, of course).
Bear in mind that creating a copy of a VM creates legal issues. Backing up should be fine, but if you create a copy of a VM installation to give to a friend, for example, then you'll be contravening copyright laws (assuming they apply, as with Microsoft, but not always with Linux).
7. Create a Personal Cloud Computer:
If you're out of the office, there's no need to take your laptop with you. Just leave it running (with power saving turned off!), take your mobile phone or tablet computer instead, and access the laptop via a Remote Desktop Protocol (RDP) connection over the Internet. This will let you access the same desktop environment you're used to, although there'll be no fancy graphics.
If you're running Windows 7 Professional, Ultimate, or Enterprise, then you can configure the computer to accept RDP connections by right-clicking Computer on the Start menu, selecting Properties, and clicking the Remote Settings link in the window that appears. The same instructions work for Windows Vista, although you'll need the Professional, Business, or Ultimate editions. Other versions of Windows don't support setting up an RDP server without a little bit of hacking (Google it).
You'll need to take a note of the public IP address of your router in order to connect remotely, and configure the router to port forward incoming RDP connections to your notebook PC. How this is done varies from computer to computer, but often you can select predefined rules.
Then download an RDP client for your mobile device and connect. For the Apple iPad and iPhone, you can try iTap but there are RDP clients for most platforms.
8. Run Headless For Web Development:
Most virtualization software allows the virtual machine to run headless, which is to say, without displaying a desktop (or other user-interface). Essentially, the virtual PC runs in the background although accepts all other kinds of connections, such as networking. For people creating websites, this offers the possibility of running their very own private web server for testing purposes.
9. Make a Backup of Your Server For Emergencies:
Amazon's Elastic Cloud Computing (EC2) service allows you to copy across any existing virtualized Windows 2008 Server installation for use on EC2 (eventually all kinds of server installs will be supported, such as Linux).
Creating periodic backups of existing server installs in this way could provide vital redundancy if a catastrophe happens to your existing server. After the hurricane hits, leaving your physical servers in a whirl of dust, all you'd have to do is boot up the EC2 image, reconfigure things slightly to take into account the different IP addresses, and then continue as usual.
10. Reuse Old Hardware:
By installing Citrix XenDesktop on your Windows server, you can turn old, less powerful computers into thin clients, wiping out the need for a workstation IT upgrade budget.
The clients access their personal desktop spaces on the server and there's little noticeable difference compared with running the operating system and applications locally.
XenDesktop includes clever technology to avoid common thin-clientpitfalls, such as the fact videos and animations don't play well, by shifting some of the processing work to the client computer.
XenDesktop also allows your workers to access their desktops from home, provided the server is configured to be publicly accessible and they have the right client software installed. You can even use mobile phones to connect to the desktop environments.
© 2014 HaKTuts. All rights reserved.


Trinks
Water
Coffee
Cola
Shake
Tea
Camomile Tea
Turkish Apple Tea
Green Tea
Sencha
Matcha
Food
Fish
Meat
Fruit
Vegetables
Salad
Tomato
Cucumber
Corn
Fish
Shrimp
Onion
Dressing
Oil
Vinegar
Balsamic
Spice
Salt
Pepper
Chili


is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
| Topic | |
|---|---|
| Fullname | Mark Suck |
| Fullname | Jacob Kuck |


Tired of autocorrect changing “craic” to “crack”? “Scoil” to “spoil”? Abair Leat can help with that! Abair Leat’s predictive texting function checks your words against open-source Irish dictionaries, to ensure that you’re getting the most enjoyment out of your Irish-language messaging experience, with minimal frustration.
Get rewarded for using Abair Leat and improving your Irish skills. With every text you send using Abair Leat, you earn points to unlock achievements and rewards. Earn trophies, unlock new emoji libraries, and show off those rewards to your friends on Abair Leat and other social media platforms.
Share photos and videos, express yourself with a library of unique emojis, and start group messages. If you sign up with Facebook, your contact list will automatically update as your friends join the app. Abair Leat also allows you to control your privacy by muting or blocking specific users. You can even share your location with friends.


|
Ocular Engine
|
#include <ResourceSaver.hpp>
Public Member Functions | |
| AResourceSaver (std::string const &extension, ResourceType type) | |
| virtual std::string | getSupportedFileType () const |
| virtual bool | saveResource (Resource *resource, File const &file) |
| ResourceType | getResourceType () const |
Protected Member Functions | |
| virtual bool | writeFile (Core::File const &file, std::vector< unsigned char > buffer, Endianness fileEndianness) |
Protected Attributes | |
| std::string | m_SupportedExtension |
| ResourceType | m_Type |
Base interface for all resource savers.
A resource saver is responsible for saving a specific type of resource to a specified file.
| ResourceType Ocular::Core::AResourceSaver::getResourceType | ( | ) | const |
Returns the type of resource handled by this saver.
| [in] | resource | |
| [in] | file |
Reimplemented in Ocular::Graphics::MeshResourceSaver, Ocular::Graphics::TextureResourceSaver, and Ocular::Graphics::MaterialResourceSaver.
|
protectedvirtual |
Writes the full contents of the provided buffer to the specified file in the requisite endianness.
It is assumed that the incoming buffer has native endian ordering.
| [in] | file | File to write the buffer to |
| [in] | buffer | Buffer container containing the entire file to write. |
| [in] | fileEndianness | The endianness in which to write the data. |


Contains classes and interfaces whose behavior is subject to change within a version (1.1.X). Usage of anything under this package should be carefully considered if you don't want to have to make any code changes when updating for a bug fix/minor enhancement (1.1.X) release.
All that said, there is some powerful stuff here that will be stabilized and moved into the normal package space as, is the case in most versions, the correct interface is defined for it.
If you do find great use in any of these, please let the developers know as we will definately take that into account if we can.


Woman who developed insomnia after daughter's birth hasn't slept for 32 years
All new parents can expect their sleeping pattern to take a hit, but one mum says she’s been unable to get a full night’s rest for the last three decades since her daughter was born.
Michele Townsend, 58, still hasn’t managed more than a few hours’ shut-eye at a time and sometimes survives on as little as four over the space of an entire week.
Despite both her children now being grown up with kids of their own, Michele, from Devon, claims to have been plagued with insomnia since her daughter Ami’s birth 32 years ago.
She initially put it down to being part and parcel of becoming a new mum, but the condition has persisted in the face of dozens of treatments and the grandmother-of-four says it’s ruined her life.

‘It’s a bit like having a half-life. I feel like I’m existing rather living. I try and do the best I can do though.
‘It’s ruined my life in lots of ways but I’ve tried to not let it win.’
Michele said her insomnia stretches back to 1987.
‘It started when my daughter was born, she cried a lot but I just couldn’t sleep at all,’ she added.
‘I’d go to bed absolutely shattered and just couldn’t sleep. Sometimes I’d go a whole week without more than a few minutes’ sleep.
‘These days it comes and goes in waves. When it gets bad it can last for ages.’
Michele has tried hypnosis, sleeping tablets and even yoga to combat her sleeplessness, which has seen her struggle to hold down jobs and even affected her memory.
‘It’s severely limited the options I’ve had in my life,’ she said.
She also described having to sleep in another room so as not to keep disturbing her husband.
‘Obviously we’d prefer to sleep together but at least I don’t have to worry about him snoring,’ she added.
Advertisement Advertisement
Despite the toll it’s taken on Michele and her family, doctors have been unable to treat her insomnia.
She said: ‘It’s exhausting, my family can see in my face whether I’ve slept or not.
‘I tried to drink too much when I was younger too, just in an effort to get some sleep. I’d have a few drinks but it wouldn’t make any difference. It might give me an hour’s sort of sleep and I’d wake up feeling worse.
‘I’ve been to workshops and groups, I’ve even tried to do hypnotherapy and take a sleeping tablets.
‘Nothing has worked. I’m at my wits’ end.’
She added: ‘I just want my life back.’
Got a story for Metro.co.uk?
Get in touch with our news team by emailing us at<EMAIL_ADDRESS>For more stories like this, check our news page.


GAVISCON- aluminum hydroxide and magnesium carbonate liquid
GlaxoSmithKline Consumer Healthcare LP
Disclaimer: Most OTC drugs are not reviewed and approved by FDA, however they may be marketed if they comply with applicable regulations and policies. FDA has not evaluated whether this product complies.
Active ingredient (in each 15mL tablespoonful) Regular Strength
Aluminum hydroxide 95mg
Magnesium carbonate 358mg
Active ingredient (in each 5mL teaspoonful) Extra Strength
Aluminum hydroxide 254mg
Magnesium carbonate 237.5mg
Uses
relieves
- •
- heartburn
- •
- acid indigestion
- •
- sour stomach
- •
- upset stomach associated with these symptoms
Warnings
Do not use if you have kidney disease
Ask a doctor or pharmacist before use if you are
- •
- taking a prescription drug. Antacids may interact with certain prescription drugs.
- •
- if you are on a sodium-restricted diet
When using this product (Regular Strength)
- •
- do not take more than 8 tablespoonfuls in 24 hours
- •
- do not use the maximum dosage for more than 2 weeks
- •
- laxative effect may occur
When using this product (Extra Strength)
- •
- do not take more than 16 teaspoonfuls in 24 hours
- •
- do not use the maximum dosage for more than 2 weeks except under the advice and supervision of a doctor
- •
- laxative effect may occur
Keep out of reach of children.
In case of overdose, get medical help or contact a Poison Control Center right away.
Directions (Regular Strength)
- •
- shake well
- •
- take 1-2 tablespoonfuls four times a day or as directed by a doctor
- •
- take after meals and at bedtime
- •
- dispense product only by spoon or other measuring device
Directions (Extra Strength)
- •
- shake well
- •
- take 2-4 teaspoonfuls four times a day or as directed by a doctor
- •
- take after meals and at bedtime
- •
- dispense product only by spoon or other measuring device
Other information (Regular Strength)
- •
-
each tablespoon (15mL) contains: magnesium 115mg, sodium 52mg
- •
- store at up to 25°C (77°F); avoid freezing
- •
- keep tightly closed
Other information (Extra Strength)
- •
-
each teaspoon (5mL) contains: magnesium 80mg, sodium 14mg
- •
- store at up to 25°C (77°F); avoid freezing
- •
- keep tightly closed
Inactive ingredients (Regular Strength)
benzyl alcohol, D&C yellow #10, edetate disodium, FD&C blue #1, flavor, glycerin, saccharin sodium, sodium alginate, sorbitol solution, water, xanthan gum
Inactive ingredients (Extra Strength Cool Mint)
benzyl alcohol, edetate disodium, flavor, glycerin, saccharin sodium, simethicone emulsion, sodium alginate, sorbitol solution, water, xanthan gum
Inactive Ingredients (Extra Strength Cherry)
Benzyl alcohol, edentate disodium, flavor, glycerin, saccharin sodium, simethicone emulsion, sodium alginate, sorbitol solution, water, xanthan gum
Questions or comments?
call toll-free (English/Spanish) 1-888-367-6471 weekdays
Distributed by:
GlaxoSmithKline Consumer Healthcare, L.P.
Moon Twp, PA 15108, Made in the U.S.A
IMPORTANT:
Do not use if foil inner seal imprinted "SEALED FOR YOUR PROTECTION" is disturbed or missing.
Principal Display Panel
NDC 0135-0094-41
Gaviscon®
REGULAR STRENGTH
LIQUID ANTACID
- •
- Fast-Acting Heartburn Relief
- •
- Helps Keep Acid Down for Hours
COOL MINT
FLAVOR
12 fl oz (355 ml)
©2010 GlaxoSmithKline
FRONT: 100631XB
BACK: 100632XA
Principal Display Panel
NDC 0135-0095-41
Gaviscon®
EXTRA STRENGTH
LIQUID ANTACID
- •
- Fast-Acting Heartburn Relief
- •
- Helps Keep Acid Down for Hours
COOL MINT
FLAVOR
12 fl oz (355 ml)
©2010 GlaxoSmithKline
FRONT: 100651XB
BACK: 100652XA
Principal Display Panel
NDC 0135-0574-01
Gaviscon®
EXTRA STRENGTH
LIQUID ANTACID
- •
- Fast-Acting Heartburn Relief
- •
- Helps Keep Acid Down for Hours
CHERRY
FLAVOR
12 fl oz (355 ml)
©2014 GlaxoSmithKline
FRONT: 103698XA
BACK: 103699XA


Our Vision is to offer the best Products in Medical Industry & Instruments and Automation & Telecom services to our customers. To always exceed customer expectations resulting in customer delight. Our mission is to provide highest possible quality of Medical Supplies & Instrumentation, Automation (PLC’s) and Telecom Systems at the right price. Our commitment to offer nothing but the very best is reflected in our vision & mission statements. We exist because of our customers and we are very grateful to our customers who have made us what we are today. We now strive to take our organization to the next level so that we can serve our customers even better and continue to keep them fully satisfied.
The Primary Business Objectives of JME E AND I TRADING Automation (PLC’s), Medical Supplies & Instruments and Telecom Works are: To cost-effectively manage Medical Supplies & Instruments, Telecom, and PLC’s, Industrial Instrumentation, CCTV Cameras, Access Control, Alarm Systems, Networking, Fiber Optics Systems, Industrial, Commercial & Residential IT Projects for our clients. To enhance the reputation of the group as Medical Suppliers & Instruments, Telecom Systems, Automation(PLC), Industrial Instrumentation, Fiber Optics, Networking and IT specialists.
When it comes to application solutions, instead of multiple vendors, you have one supplier to deal with. You’re also assured of complete customization and rapid implementation by JME E AND I TRADING Automation’s (PLC) and Telecom suite of services, one of the most extensive in the industry. Developed to offer you a total, application specific automation package, not just products. The team comprises of engineers and Technicians who have proven experience on a variety of automation systems including DCS and PLC’s of Siemens, Allen Bradley, Honeywell, Yokogawa, Schneider, ABB and ( Emergency Shutdown Systems ) etc. SCADA systems of Siemens, Wonder ware, I Fix, Adroit, Cytec, etc. Manufacturing Execution System (MES) Cybernetics M.
As a committed and responsible organization, management ensure the highest level of workmanship will be at all times maintained by enforcing strict compliance with standards, specifications and specific client requirements. Fully justifying our ISO 9001 listing. The management of JME E AND I TRADING is fully committed to the implementation of this quality system. Control is exercised in a formalized, documented manner in accordance with our high standard for quality control procedures. However, quality can only be assured by suitably trained personnel and to this end no effort is spared in our constant strive to ensure that personnel stay abreast of developments in their field.


This is part 2 of a tutorial series on how to make an FT style offline web app. If you haven't already, read part 1 first. We left off last time with a severely limited, but working, offline HTML5 web app. This time we will aim to address some of the concerns that were raised at the end of the last tutorial. We will keep the core functionality of the app the same - the same simple RSS reader - and instead focus on making it faster and making it work for everyone, including users of Firefox, IE10 (including web apps formerly known as Metro style), and even old pre-HTML5 browsers, such as IE6. This demo app will continue to be based on the same principals of maximum ubiquity and brevity and so will continue to use jQuery and PHP and will require no special server configuration. As before this tutorial intentionally avoids going into detail on particular technologies and instead attempts to give a high level overview on how, with the fewest lines of code and in the shortest amount of time, various technologies can be brought together to achieve the goals we have set out to solve. This is purely about making the best of what we have available in real browsers today and delivering great experiences on the web platform. As always, the full code is up on GitHub.
| /libraries/client/fastclick.js | Download |
| /source/datasources/network.js | create blank |
| /source/datasources/indexeddb.js | create blank |
| /source/datasources/websql.js | create blank |
| /source/database.js | This file will be replaced by the three Javascript wrappers around the three data source technologies available to browsers (IndexedDB, WebSQL and live-loading from the network - traditional AJAX) which one will be chosen based on the capabilities of the browser being used. |
fastClick = new FastClick(document.body);
) inside the start
function. The start
function is now:
[js]
function start(resources, storeResources) {
APP.database.open(function () {
// Listen to the hash tag changing
$(window).bind("hashchange", route);
// Set up FT FastClick
fastClick = new FastClick(document.body);
// Inject CSS Into the DOM
$("head").append("");
// Create app elements
$("body").html(APP.templates.application());
// Remove our loading splash screen
$("#loading").remove();
route();
});
if (storeResources) {
localStorage.resources = JSON.stringify(resources);
}
}[/js]
| Method name (Parameters) | Notes |
|---|---|
| start(successCallback) | Perform any required data source set up. We need have a success callback because initialising some data sources (indexedDB) may require asynchronous calls. |
| selectOne(model, id, successCallback, failureCallback) | Fetch a single data object from the data store for a type of data. In our demo app the model will always be an article. |
| selectAll(model, successCallback, failureCallback) | Fetch all data objects of a specified type from the data store. |
| insertInto(model, data, successCallback) | Insert data into a data store. |
| deleteAllFrom(model, successCallback) | Clear all the data of one type from a data store. |
jQuery.ajax
method. As far as our app is concerned insertInto
and deleteAllFrom
don't make sense if we don't have a local database because those functions are concerned with caching data for offline use - but we have to implement them to ensure network and Websql/IndexedDB all share the same API, so here calling either of those methods just calls their successCallback
straight away.
Because we need to be able to select individual articles (the selectOne
method) we need to update the /api/articles/index.php file.
[php]
xpath($xpath);
if ($items) {
$output = array();
foreach ($items as $id => $item) {
// This will be encoded as an object, not an array, by json_encode
$output[] = array(
'id' => $id + 1,
'headline' => strval($item->title),
'date' => strval($item->pubDate),
'body' => strval(strip_tags($item->description,'
')),
'author' => strval($item->children('http://purl.org/dc/elements/1.1/')->creator)
);
}
if ($articleId > 0) {
echo json_encode($output[0]);
} else {
echo json_encode($output);
}
}
[/php]
Moving on to the WebSQL data store:
/source/datasources/websql.js
[js]
APP.webSQL = (function () {
'use strict';
var smallDatabase;
function runQuery(query, data, returnFirst, successCallback) {
var i, l, remaining;
if (!(data[0] instanceof Array)) {
data = [data];
}
remaining = data.length;
function innerSuccessCallback(tx, rs) {
var i, l, output = [];
remaining = remaining - 1;
if (!remaining) {
// HACK Convert row object to an array to make our lives easier
for (i = 0, l = rs.rows.length; i < l; i = i + 1) {
output.push(rs.rows.item(i));
}
if (successCallback) {
successCallback(returnFirst ? output[0] : output);
}
}
}
function errorCallback(tx, e) {
if (console) {
console.log("WebSQL error: ", tx, e);
}
}
smallDatabase.transaction(function (tx) {
for (i = 0, l = data.length; i < l; i = i + 1) {
tx.executeSql(query, data[i], innerSuccessCallback, errorCallback);
}
});
}
function insertInto(model, data, successCallback) {
var remaining = data.length, i, l, insertData = [];
if (remaining === 0) {
successCallback();
}
// Convert article array of objects to array of arrays
for (i = 0, l = data.length; i < l; i = i + 1) {
insertData[i] = [data[i].id, data[i].date, data[i].headline, data[i].author, data[i].body];
}
if (model === 'articles') {
runQuery("INSERT INTO articles (id, date, headline, author, body) VALUES (?, ?, ?, ?, ?);", insertData, false, successCallback);
}
}
function deleteAllFrom(model, successCallback) {
runQuery("DELETE FROM " + model, [], false, successCallback);
}
function selectAll(model, successCallback) {
if (model === "articles") {
runQuery("SELECT id, headline, date, author FROM articles", [], false, successCallback);
}
}
function selectOne(model, id, successCallback) {
if (model === "articles") {
runQuery("SELECT id, headline, date, author, body FROM articles WHERE id = ?", [id], true, successCallback);
}
}
function start(successCallback, failureCallback) {
try {
smallDatabase = openDatabase("APP", "1.0", "Not The FT Web App", (5 * 1024 * 1024));
runQuery("CREATE TABLE IF NOT EXISTS articles(id INTEGER PRIMARY KEY ASC, date TIMESTAMP, author TEXT, headline TEXT, body TEXT)", [], false, successCallback);
} catch (e) {
if (failureCallback){
failureCallback();
}
}
}
return {
start: start,
insertInto: insertInto,
deleteAllFrom: deleteAllFrom,
selectAll: selectAll,
selectOne: selectOne
};
}());
[/js]
This is based on the same code the we used in part 1 of the tutorial.
Finally, here's the indexedDB one:
/source/datasources/indexeddb.js
[js]
APP.indexedDB = (function () {
'use strict';
var db, indexedDB, IDBTransaction, IDBKeyRange;
function indexedDBError(event) {
if (typeof console !== "undefined") {
console.error("An error occurred", event);
}
}
function insertInto(model, data, successCallback) {
var transaction = db.transaction([model], IDBTransaction.READ_WRITE || 'readwrite'), store, i, request, total = data.length;
function successCallbackInner() {
total = total - 1;
if (total === 0) {
successCallback();
}
}
transaction.onerror = indexedDBError;
store = transaction.objectStore(model);
for (i in data) {
if (data.hasOwnProperty(i)) {
request = store.add(data[i]);
request.onsuccess = successCallbackInner;
request.onerror = indexedDBError;
}
}
}
function deleteAllFrom(model, successCallback) {
var transaction = db.transaction([model], IDBTransaction.READ_WRITE || 'readwrite'), store, request;
transaction.onerror = indexedDBError;
store = transaction.objectStore(model);
request = store.clear();
request.onerror = indexedDBError;
request.onsuccess = successCallback;
}
function selectAll(model, successCallback) {
var transaction = db.transaction([model], IDBTransaction.READ_ONLY || 'readonly'), store, request, results = [];
transaction.onerror = indexedDBError;
store = transaction.objectStore(model);
request = store.openCursor();
request.onerror = indexedDBError;
request.onsuccess = function (event) {
var result = event.target.result;
// When result is null the end is reached
if (!result) {
successCallback(results);
return;
}
results.push(result.value);
// Weird to hack jslint
result['continue']();
};
}
function selectOne(model, id, successCallback) {
var transaction = db.transaction([model], IDBTransaction.READ_WRITE || 'readwrite'), store, request;
transaction.onerror = indexedDBError;
store = transaction.objectStore(model);
request = store.get(id);
request.onerror = indexedDBError;
request.onsuccess = function (event) {
var result = event.target.result;
successCallback(result);
};
}
function start(successCallback, failureCallback) {
// Protect ourselves inside old browsers
try {
indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB || window.msIndexedDB;
IDBTransaction = window.hasOwnProperty('webkitIndexedDB') ? window.webkitIDBTransaction : window.IDBTransaction;
IDBKeyRange = window.hasOwnProperty('webkitIndexedDB') ? window.webkitIDBKeyRange : window.IDBKeyRange;
} catch (e) {
failureCallback();
}
if (!indexedDB) {
failureCallback();
return;
}
var version = 6,
request = indexedDB.open("APPDATA", version);
function installModels() {
if (db.objectStoreNames.contains("articles")) {
db.deleteObjectStore("articles");
}
// TODO This is strictly model logic, and ought not live inside the indexedDB library, should move.
db.createObjectStore("articles", { keyPath: "id" });
}
request.onsuccess = function (event) {
var setVersionRequest;
db = event.target.result;
version = String(version);
if (db.setVersion && version !== db.version) {
setVersionRequest = db.setVersion(version);
setVersionRequest.onfailure = indexedDBError;
setVersionRequest.onsuccess = function (event) {
installModels();
setVersionRequest.result.oncomplete = function () {
if (successCallback) {
successCallback();
}
};
};
} else {
successCallback();
}
};
request.onupgradeneeded = function (event) {
db = event.target.result;
installModels();
};
request.onerror = function (event) {
alert("You have chosen not to use offline storage");
failureCallback();
};
}
return {
start: start,
insertInto: insertInto,
deleteAllFrom: deleteAllFrom,
selectAll: selectAll,
selectOne: selectOne
};
}());
[/js]
A good resource for understanding indexedDB is on the Mozilla Development Network so I won't go into details on how this works for this tutorial.
One thing to note though is that on the Firefox the browser asks the user for permission to open an IndexedDB database and if the user declines or cancels the prompt, the app should still be able to continue running. This is handled by request.onerror
(notice this calls the failureCallback
function, which we'll implement inside /source/application/applicationcontroller.js). I've added a simple alert so that the user knows they have opted out of offline functionality. In a production app we might like to handle this more gracefully and perhaps even provide instructions on how to re-enable offline storage.
Now we need to update the resources api PHP file so that it is aware of the files we just created. (the old database.js file can also be deleted at the same time)
/api/resources/index.php
[php]
/source/application/applicationcontroller.js
[js]
APP.applicationController = (function () {
'use strict';
var fastClick;
function offlineWarning() {
alert("This feature is only available online.");
}
function pageNotFound() {
alert("That page you were looking for cannot be found.");
}
function showHome() {
$("#body").html(APP.templates.home());
// Load up the last cached copy of the news
APP.articlesController.showArticleList();
$('#refreshButton').click(function () {
// If the user is offline, don't bother trying to synchronize
if (navigator && navigator.onLine === false) {
offlineWarning();
} else {
APP.articlesController.synchronizeWithServer(function failureCallback() {
alert("This feature is not available offline");
});
}
});
}
function showArticle(id) {
$("#body").html(APP.templates.articleLoading());
APP.articlesController.showArticle(id);
}
function route() {
var page = window.location.hash;
if (page) {
page = page.substring(1);
}
if (page.length > 0) {
if (parseInt(page, 10) > 0) {
showArticle(parseInt(page, 10));
} else {
pageNotFound();
}
} else {
showHome();
}
}
function initialize(resources) {
// Listen to the hash tag changing
if ("onhashchange" in window) {
$(window).bind("hashchange", route);
// Support for old IE (which didn't have hash change)
} else {
(function () {
var lastHash = window.location.hash;
window.setInterval(function () {
if (window.location.hash !== lastHash) {
lastHash = window.location.hash;
route();
}
}, 100);
}());
}
// Set up FastClick
fastClick = new FastClick(document.body);
// Inject CSS Into the DOM
$("head").append("");
// Create app elements
$("body").html(APP.templates.application());
// Remove our loading splash screen
$("#loading").remove();
route();
}
// This is to our webapp what main() is to C, $(document).ready is to jQuery, etc
function start(resources, start) {
// When indexedDB available, use it!
APP.indexedDB.start(function indexedDBSuccess() {
APP.database = APP.indexedDB;
initialize(resources);
// When indexedDB is not available, fallback to trying websql
}, function indexedDBFailure() {
APP.webSQL.start(function webSQLSuccess() {
APP.database = APP.webSQL;
initialize(resources);
// When webSQL not available, fall back to using the network
}, function webSQLFailure() {
APP.network.start(function networkSuccess() {
APP.database = APP.network;
initialize(resources);
});
});
});
if (storeResources && window['localStorage']) {
localStorage.resources = JSON.stringify(resources);
}
}
return {
start: start
};
}());
[/js]
The code to decide which data store to use is inside start
. We first attempt to set up an indexedDB database, then if that fails attempt to set up a WebSQL database then finally fall back to using the network. This enables us to get the best out of those browsers that support IndexedDB whilst continuing to be able to support all browsers that do not support these features.
Other changes:
start
is moved to the new private function initialize
- which will get run after whichever data source technology the app chooses to use is fully loaded;route
function to force the value it passes to showArticle
to be an integer.hashchange
event, I've had to implement a short piece of code that runs every 100ms to see if the hash tag has changed. Also I've needed to change the check to see localStorage is available on the device to window['localStorage']
.article
method inside /source/templates.js. Replace the article
function with the code below:-
/source/templates.js
[js]
function article(articleData) {
// If the data is not in the right form, redirect to an error
if (!articleData) {
window.location = '#error';
return;
}
return 'Go back homeContinue to part 3 - ‘Fixing’ the application cache with an iframe


 I'm in the STARS!!!
@CHATTERBOXCODER


Examples
Contain
Contain will make sure that the entire image is displayed within the element, regardless of the elements dimensions.
Cover
Cover will make sure the entire element is covered - but won't guarantee that the entire image will be shown.
/*
BACKGROUND SIZE
Base:
bg = background-size
Modifiers:
cv = cover
cn = contain
Media Query Extensions:
-ns = not-small
-m = medium
-l = large
*/
.bg-cv { background-size: cover; }
.bg-cn { background-size: contain; }
@media (--breakpoint-not-small) {
.bg-cv-ns { background-size: cover; }
.bg-cn-ns { background-size: contain; }
}
@media (--breakpoint-medium) {
.bg-cv-m { background-size: cover; }
.bg-cn-m { background-size: contain; }
}
@media (--breakpoint-large) {
.bg-cv-l { background-size: cover; }
.bg-cn-l { background-size: contain; }
}


© 2014 Doug Letterman renderfast.com
RunParticles is free software distributed under the terms of the MIT License
Basemap © OpenStreetMap contributors
Libraries by Qt Project, Cinder


If you find Hypertext Help with LaTeX to be useful, you are welcome to obtain the complete set of files and install them on your own machine. Retrieval and installation instructions are given below. They may be installed for use either with a webserver, which will ease network traffic and probably give you faster access, or they may be installed as local files which may be "read" by your browser without the necessity of a network connection.
To facilitate off-network usage, the files generally have only local (within the same directory) hypertext links. All links to "external" URLs, including much LaTeX information available on the Web, have been restricted to two pages.
The files may be downloaded as a single gzipped tar archive.
After your web browser downloads the archive, use one of the many (un)compression programs to extract the files within. Some OS desktops may allow you to simply double-click on the archive in order to uncompress it. Some web browsers will automatically uncompress the archive after retrieval, but you might still need to extract the files from the archive.
Alternatively, issue the shell commands:
gunzip latex.tar.gz tar -xf latex.tar
This will create a subdirectory named latex in your current directory. This new directory contains the complete set of HTML files and requires about 1 MByte of disk space.
You may rename or move the entire latex subdirectory as desired; all file references are local to the directory so links should continue to work. The "Introduction" file is index.html and the Table of Contents page is ltx-2.html.
Back to the Introduction
On to the Table of Contents


The Pocket Fuseki Encyclopedia
Here are two files that basically summarize everything I know about the opening or fuseki. I’ve tried to keep it short, but, you know, it’s Go we are talking about. This is the content I wish I had access to when I was a beginner, so I hope you will like it.
I’m a 1d KGS player who has been to a lot of places and talked to a lot of people across the globe, including South Korea and China, so this is not a professional speaking, but I’m sure even some 3d KGS players don’t know some sequences I’ve cited in the files.
The first file of the pair is about the basics, it’s meant to be read by anyone ranging from 20k to 5k, but, again, most players up to 1d will get something out of it. The second one is actually the most valuable asset, it’s meant to be an extensive exploration of everything I know, ranging from the new 3-3 developments to the annals of fuseki, featuring the many Chinese opening fusekis, dual facing 3-4s, the Black Hole fuseki, and many more.
I’ve written this content with Sabaki and would advise the reader to use
it when studying the variations
To ease your way through the massive number of variations I’ve also included a mind map that summarizes all of the branches — using the free XMind software. I wish there were a direct way of linking the branches from the SGF tree to a mind map just so large SGF files were easier to read, but so far that doesn’t exist. I’ve suggested it to the creator of Sabaki on Github and he seems to have been working on a similar idea and perhaps an implementation of this — breakthrough — idea is not far off.
To make everything more digestible, I’ve broken the content into smaller
bites: 4-4, 3-4 and the rest.
You can download everything in one go by clicking
Later, if you wish to continue your studies, I would highly suggest you take a look at Waltheri’s Go Pattern Search, which will give you a database look at what professionals prefer. Other resources like the Josekipedia or Eidogo are also very useful.


Ringgit opens higher against US dollar on US bond yield concerns
KUALA LUMPUR, Nov 12 — The ringgit opened higher against the US dollar today on concerns over US bond yields.
At 9.10am, the ringgit was quoted at 4.1380/1420 versus the US dollar against 4.1421/1450 on Monday.
Axi Trader Asia-Pacific market strategist Stephen Innes said with tonnes of trade optimism baked into the US rates, the risk for the US dollar is that the explosion in US bond yields has run too far ahead of the economic realities.
“As such, conditions could be ripe for a reversal as the bears may start to add or reengage tactically underweight global equities and overweight global sovereigns. This rotation could weigh on the US dollar and boost gold sentiment,” he said in a statement today.
The local note was also traded mostly higher against other major currencies.
The ringgit increased against the Singapore dollar to 3.0418/0449 from Monday’s close of 3.0425/0451 and appreciated against the yen to 3.7901/7944 from 3.8008/8045.
It decreased against the British pound to 5.3211/3287 from 5.3023/3077 but appreciated versus the euro to 4.5650/5703 from 4.5679/5728. — Bernama


Dog lovers rejoice, there's a Christmas party for pooches coming next month
Forget the annual office Christmas bash – the party of the season has been announced and it’s all dogs, everywhere.
The creators of Pug Cafe, which have also given us the Pomeranian café and the sausage dog café have revealed their latest pop-up and it might be their best one yet.
Please welcome the doggy Christmas soiree, a one-off event on 8 December that will feature festive activities galore, with plenty of fabulous four-legged animals.
Pugs, Pomeranians and dachshunds are encouraged to come along and snack on complimentary puppacinos, pawsecco and champaws, while sniffing butts and making friends.
As for the snacks, there will be dog-friendly mince pies, canapés, festive pupcakes and more.
There will be be a seasonal menu with cocktails and spritzes for humans, too.
Here’s the best part: you don’t need to own a pooch to join in on the fun. The event is open to everyone (though you might want to check in with owners before you start cuddling up to their pets).
Advertisement Advertisement
The day is split into six sessions, with each lasting 80 minutes and targeted at a different breed:
- Pomeranians: 10am and 12.40pm
- Dachshunds: 11.20am and 3.20pm
- Pugs: 2pm and 4.40pm
Pug Cafe are hosting the event together with Pet Teezer, who will be giving away a dog brush (worth £12) to the first 350 dog owners to book a ticket.

Tickets cost £12 for dog owners, but dog lovers will need to fork out a few extra pounds at £15. Children aged 16 or under pay slightly less at £6 and £8, for dog owners and dog lovers respectively.
The pooches however, get free entry (which is completely understandable – they are pretty amazing after all).
Apparently, there will also be Instagram dog stars in attendance, though names have not been revealed.
Count us in.


Welcome To South Park Flappy Bird!
Click the button below to go to the Charater Seclector!
Character Selector
Try Playing as these Limited Time Characters!
Super Nanny
Mr.Mackey


SDR receiver compatible with HPSDR
The SDR receiver is ready.
Now you can run the SDR programs that support the HPSDR/Metis protocol.
More details about this application can be found at this link.
SDR programs
Here is a list of the SDR programs that are known to work with this SDR receiver:
- PowerSDR mRX PS that can be downloaded from this link
- QUISK with the hermes/quisk_conf.py configuration file
- CW Skimmer Server and RTTY Skimmer Server
- ghpsdr3-alex client-server distributed system
Running CW Skimmer Server
- Install CW Skimmer Server.
- Copy HermesIntf.dll to the CW Skimmer Server program directory (C:\Program Files (x86)\Afreet\SkimSrv).
- Install Reverse Beacon Network Aggregator.
- Start CW Skimmer Server, configure frequencies and your call sign.
- Start Reverse Beacon Network Aggregator.


Welcome to Wanteds. Wanteds is the number one place to find the things you need. No more wading through lists and lists of spam and useless content in platforms like Gumtree and OLX. Sellers can alos easily identify people looking for what you got. Don't mess around on other platforms. Find some one thats wants what you got!


In Pictures
These dogs have changed our hearts, our lives, our world. Perhaps more so than important cats.
1 of 18
Norm was the first dog to be brave enough to take the first dog selfie.
Your Pictures from Wales
A selection of your photos
Royal visit to Glasgow
Enjoying the Commonwealth Games
Gaza strikes
A heavy night of bombardment


{% extends "general/base.html" %} {% set active_page = "resources" -%} {% set title = "Versions of ATT&CK | MITRE ATT&CK®" -%} {% set parsed = page.data | from_json %} {% block content %} {{ super () }}
The overall ATT&CK catalog is versioned using a major.minor
version schema.
The bi-annual content releases listed on the updates pages increment the major version number.
The minor version number increments for our other small releases, which include typo and data corrections but not typically new content.
Below are a list of versions of the ATT&CK website preserved for posterity, including a permalink to the current version of the site:
| Version | Start Date | End Date | Data | Release Notes |
|---|---|---|---|---|
| ATT&CK {{parsed.current.url}} (current version) | {{parsed.current.date_start}} | n/a | {{parsed.current.name}} on MITRE/CTI | Updates — {{parsed.current.changelog_label}} |
| ATT&CK {{version.url}} | {{version.date_start}} | {{version.date_end}} | {{version.name}} on MITRE/CTI | Updates — {{ version.changelog_label }} |
| Versions from before the migration from MediaWiki are not preserved on this site: | ||||
| ATT&CK {{version.url}} | {{version.date_start}} | {{version.date_end}} | {{version.name}} on MITRE/CTI | Updates — {{ version.changelog_label }} |


STYLE
It's a matter of black and white. Our design team has worked tirelessly to bring you pieces that will suit your style, no matter what it is.
SHOP NOWTHIS MONTH: A limited edition collaboration with artist Loretta Lizzio.
SHOP WATCHES STOREThe styles you love most. This month.
Carefully-considered, stylishly executed pieces for men and women, designed to help you get the most out of every day.
SHOP NOWHere To Win
A limited edition collaboration with Amber Seats. Releasing September 5.
READ MORE


BIG MOMMA'S HOUSE
Reviewed by Harvey Karten Twentieth Century Fox/Regency Enterprises Director: Raja Gosnell Writer: Darryl Quarles (story and screenplay), Don Rhymer Cast: Martin Lawrence, Nia Long, Paul Giamatti, Terrence Howard
In a more innocent time when police corruption meant simply stealing rather than shooting unarmed civilians, Frank Serpico went under cover to expose the deeds of some of his unscrupulous fellow officers. Sidney Lumet's movie about this hero--who had to leave his country to take us residence in Switzerland--was not without humor, one of the most amusing parts focussing on the title character disguised as a Hasidic man and more. The cop in "Big Momma's House" may be like the champion of Lumet's 1973 movie in one way. He is the bearer of false identity, but lacks the variety enjoyed by Serpico. While "Serpico" featured an authentic blend of comedy and drama, in making "Big Momma's House, director Raja Gosnell aims strictly at our funny bone.
 "Big Momma's House" gives even the notion of summer movies a bad name. Utilizing one of the oldest and moldiest species of comedy--female impersonation--Gosnell is not even good at creating anything original. Ripping off a scene far better done by Tony Curtis and Marilyn Monroe in "Some Like It Hot" and generally filching from the modern forerunner of the genre, "Mrs. Doubtfire," this one is merely a showcase for the talent of a crackerjack comic, Martin Lawrence, but proves only that Lawrence can be far better when he's just himself and not decked out as a 400-pound cliche.
The simple plot, which is nothing more than an excuse for foisting one unfunny sitcomish bit after another on the audience, could fit right into a six o'clock sitcom. Even the outdoor scenes look as though they were wheeled in for use by CBS or NBC TV. In this tale, FBI Agent Malcolm Turner (Martin Lawrence), together with his competent but comical sidekick (Paul Giamatti), is on the trail of an escaped killer (Terrence Howard). The FBI guesses that the perp is looking for his former girl friend, Sherry (Nia Long), who may herself be on the run and headed for the house of her estranged relative, Big Momma.
Robin Williams had a far superior script and concept to work with in Chris Columbus's 1993 film "Mrs. Doubtfire." Lawrence, by contrast, is left with the most banal exertions at physical comedy. Disguised as Big Momma--who outweighs him by about 250 pounds--Lawrence is given the most predictable responsibilities, obligations which include fixing his ample bosom when it gets out of alignment, cooking pork chops with a couple of sticks of lard and half a bottle of Crisco, and supporting a rubber mask whose construction is hardly as adept as the ones used by Tom Cruise and company in "M:I-2." The mask begins to tear, the pork chops are burned to a crisp, the boobs go a-bobbin' and Lawrence ponders how he can make a hit on Sherry when Sherry simply does not have romantic feelings for her Big Momma.
The scenes that have some possibility of functioning are one which finds Nia Long cuddling up in bed with the incognito FBI agent (who must convince the comely young woman that what she feels in bed is only a flashlight) and another involving the alleged Big Momma giving a sadistic karate instructor his comeuppance. There is also some snappy gospel singing and a sentimental ending that turns Agent Malcolm Turner from a man who has acquired the hostility of the townsfolk into the citizens' hero after the agent's unconvincing four-minute "testimony" to the congregation. Rent Ted Demme's 1999 movie "Life" to see what Lawrence is really capable of doing when he has a story that juxtaposes genuine poignancy with good, broad comedy.
Rated PG-13. Running time: 95 minutes. (C) 2000 by Harvey Karten<EMAIL_ADDRESS>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


public abstract class Similarity extends Object implements Serializable
Similarity defines the components of Lucene scoring. Overriding computation of these components is a convenient way to alter Lucene scoring.
Suggested reading: Introduction To Information Retrieval, Chapter 6 .
The following describes how Lucene scoring evolves from underlying information retrieval models to (efficient) implementation. We first brief on VSM Score , then derive from it Lucene's Conceptual Scoring Formula , from which, finally, evolves Lucene's Practical Scoring Function (the latter is connected directly with Lucene classes and methods).
Lucene combines Boolean model (BM) of Information Retrieval with Vector Space Model (VSM) of Information Retrieval - documents "approved" by BM are scored by VSM.
In VSM, documents and queries are represented as weighted vectors in a multi-dimensional space, where each distinct index term is a dimension, and weights are Tf-idf values.
VSM does not require weights to be Tf-idf values, but Tf-idf values are believed to produce search results of high quality, and so Lucene is using Tf-idf . Tf and Idf are described in more detail below, but for now, for completion, let's just say that for given term t and document (or query) x , Tf(t,x) varies with the number of occurrences of term t in x (when one increases so does the other) and idf(t) similarly varies with the inverse of the number of index documents containing term t .
VSM score
of document
d
for query
q
is the
Cosine Similarity
of the weighted query vectors
V(q)
and
V(d)
:
|
||||||
|
|
Note: the above equation can be viewed as the dot product of the normalized weighted vectors, in the sense that dividing V(q) by its euclidean norm is normalizing it to a unit vector.
Lucene refines VSM score for both search quality and usability:
Under the simplifying assumption of a single field in the index,
we get
Lucene's Conceptual scoring formula
:
|
|||||||
|
|
The conceptual formula is a simplification in the sense that (1) terms and documents are fielded and (2) boosts are usually per query term rather than per query.
We now describe how Lucene implements this conceptual scoring formula, and derive from it Lucene's Practical Scoring Function .
For efficient score computation some scoring components are computed and aggregated in advance:
Lucene's Practical Scoring Function is derived from the above. The color codes demonstrate how it relates to those of the conceptual formula:
|
|||||||
|
|
where
DefaultSimilarity
is:
tf(t in d)
=
|
frequency ½ |
DefaultSimilarity
is:
idf(t)
=
|
1 + log ( |
|
) |
coord(q,d)
by the Similarity in effect at search time.
DefaultSimilarity
produces a
Euclidean norm
:
queryNorm(q) =
queryNorm(sumOfSquaredWeights)
=
|
|
Weight
object.
For example, a
BooleanQuery
computes this value as:
sumOfSquaredWeights
=
q.getBoost()
2
·
|
∑ | ( idf(t) · t.getBoost() ) 2 |
| t in q |
setBoost()
.
Notice that there is really no direct API for accessing a boost of one term in a multi term query,
but rather multi terms are represented in a query as multi
TermQuery
objects,
and so the boost of a term in the query is accessible by calling the sub-query
getBoost()
.
doc.setBoost()
before adding the document to the index.
field.setBoost()
before adding the field to a document.
computeNorm(java.lang.String, org.apache.lucene.index.FieldInvertState)
method is responsible for
combining all of these factors into a single float.
When a document is added to the index, all the above factors are multiplied.
If the document has multiple fields with the same name, all their boosts are multiplied together:
norm(t,d) =
doc.getBoost()
·
lengthNorm
·
|
∏ |
f.getBoost
()
|
| field f in d named as t |
encoded
as a single byte
before being stored.
At search time, the norm byte value is read from the index
directory
and
decoded
back to a float
norm
value.
This encoding/decoding, while reducing index size, comes with the price of
precision loss - it is not guaranteed that
decode(encode(x)) = x
.
For instance,
decode(encode(0.89)) = 0.75
.
Similarity
for search.
| Modifier and Type | Field and Description |
|---|---|
static int
|
NO_DOC_ID_PROVIDED
|
| Constructor and Description |
|---|
Similarity
()
|
| Modifier and Type | Method and Description |
|---|---|
abstract float
|
computeNorm
(
String
field,
FieldInvertState
state)
Computes the normalization value for a field, given the accumulated
state of term processing for this field (see
FieldInvertState
).
|
abstract float
|
coord
(int overlap,
int maxOverlap)
Computes a score factor based on the fraction of all query terms that a
document contains.
|
static float
|
decodeNorm
(byte b)
Deprecated.
Use
decodeNormValue(byte)
instead.
|
float
|
decodeNormValue
(byte b)
Decodes a normalization factor stored in an index.
|
static byte
|
encodeNorm
(float f)
Deprecated.
Use
encodeNormValue(float)
instead.
|
byte
|
encodeNormValue
(float f)
Encodes a normalization factor for storage in an index.
|
static
Similarity
|
getDefault
()
Return the default Similarity implementation used by indexing and search
code.
|
static float[]
|
getNormDecoder
()
Deprecated.
Use instance methods for encoding/decoding norm values to enable customization.
|
abstract float
|
idf
(int docFreq,
int numDocs)
Computes a score factor based on a term's document frequency (the number
of documents which contain the term).
|
Explanation.IDFExplanation
|
idfExplain
(
Collection
<
Term
> terms,
Searcher
searcher)
Computes a score factor for a phrase.
|
Explanation.IDFExplanation
|
idfExplain
(
Term
term,
Searcher
searcher)
This method forwards to
idfExplain(Term,Searcher,int)
by passing
searcher.docFreq(term)
as the docFreq.
|
Explanation.IDFExplanation
|
idfExplain
(
Term
term,
Searcher
searcher,
int docFreq)
Computes a score factor for a simple term and returns an explanation
for that score factor.
|
float
|
lengthNorm
(
String
fieldName,
int numTokens)
Deprecated.
Please override computeNorm instead
|
abstract float
|
queryNorm
(float sumOfSquaredWeights)
Computes the normalization value for a query given the sum of the squared
weights of each of the query terms.
|
float
|
scorePayload
(int docId,
String
fieldName,
int start,
int end,
byte[] payload,
int offset,
int length)
Calculate a scoring factor based on the data in the payload.
|
static void
|
setDefault
(
Similarity
similarity)
Set the default Similarity implementation used by indexing and search
code.
|
abstract float
|
sloppyFreq
(int distance)
Computes the amount of a sloppy phrase match, based on an edit distance.
|
abstract float
|
tf
(float freq)
Computes a score factor based on a term or phrase's frequency in a
document.
|
float
|
tf
(int freq)
Computes a score factor based on a term or phrase's frequency in a
document.
|
public static final int NO_DOC_ID_PROVIDED
public static void setDefault( Similarity similarity)
public static Similarity getDefault()
This is initially an instance of
DefaultSimilarity
.
@Deprecated public static float decodeNorm(byte b)
decodeNormValue(byte)
instead.
decodeNormValue(byte)
public float decodeNormValue(byte b)
WARNING: If you override this method, you should change the default
Similarity to your implementation with
setDefault(Similarity)
.
Otherwise, your method may not always be called, especially if you omit norms
for some fields.
encodeNormValue(float)
@Deprecated public static float[] getNormDecoder()
encodeNormValue(float)
,
decodeNormValue(byte)
public abstract float computeNorm( String field, FieldInvertState state)
FieldInvertState
).
Implementations should calculate a float value based on the field state and then return that value.
Matches in longer fields are less precise, so implementations of this
method usually return smaller values when
state.getLength()
is large,
and larger values when
state.getLength()
is small.
Note that the return values are computed under
IndexWriter.addDocument(org.apache.lucene.document.Document)
and then stored using
encodeNormValue(float)
.
Thus they have limited precision, and documents
must be re-indexed if this method is altered.
For backward compatibility this method by default calls
lengthNorm(String, int)
passing
FieldInvertState.getLength()
as the second argument, and
then multiplies this value by
FieldInvertState.getBoost()
.
field
- field name
state
- current processing state for this field
@Deprecated public final float lengthNorm( String fieldName, int numTokens)
Matches in longer fields are less precise, so implementations of this
method usually return smaller values when
numTokens
is large,
and larger values when
numTokens
is small.
Note that the return values are computed under
IndexWriter.addDocument(org.apache.lucene.document.Document)
and then stored using
encodeNormValue(float)
.
Thus they have limited precision, and documents
must be re-indexed if this method is altered.
fieldName
- the name of the field
numTokens
- the total number of tokens contained in fields named
fieldName
of
doc
.
AbstractField.setBoost(float)
public abstract float queryNorm(float sumOfSquaredWeights)
This does not affect ranking, but the default implementation does make scores from different queries more comparable than they would be by eliminating the magnitude of the Query vector as a factor in the score.
sumOfSquaredWeights
- the sum of the squares of query term weights
public byte encodeNormValue(float f)
The encoding uses a three-bit mantissa, a five-bit exponent, and the zero-exponent point at 15, thus representing values from around 7x10^9 to 2x10^-9 with about one significant decimal digit of accuracy. Zero is also represented. Negative numbers are rounded up to zero. Values too large to represent are rounded down to the largest representable value. Positive values too small to represent are rounded up to the smallest positive representable value.
WARNING: If you override this method, you should change the default
Similarity to your implementation with
setDefault(Similarity)
.
Otherwise, your method may not always be called, especially if you omit norms
for some fields.
AbstractField.setBoost(float)
,
SmallFloat
@Deprecated public static byte encodeNorm(float f)
encodeNormValue(float)
instead.
f
- norm-value to encode
encodeNormValue(float)
public float tf(int freq)
idf(int, int)
factor for each term in the query and these products are then summed to
form the initial score for a document.
Terms and phrases repeated in a document indicate the topic of the
document, so implementations of this method usually return larger values
when
freq
is large, and smaller values when
freq
is small.
The default implementation calls
tf(float)
.
freq
- the frequency of a term within a document
public abstract float sloppyFreq(int distance)
tf(float)
.
A phrase match with a small edit distance to a document passage more closely matches the document, so implementations of this method usually return larger values when the edit distance is small and smaller values when it is large.
distance
- the edit distance of this sloppy phrase match
PhraseQuery.setSlop(int)
public abstract float tf(float freq)
idf(int, int)
factor for each term in the query and these products are then summed to
form the initial score for a document.
Terms and phrases repeated in a document indicate the topic of the
document, so implementations of this method usually return larger values
when
freq
is large, and smaller values when
freq
is small.
freq
- the frequency of a term within a document
public Explanation.IDFExplanation idfExplain( Term term, Searcher searcher, int docFreq) throws IOException
The default implementation uses:
idf(searcher.docFreq(term), searcher.maxDoc());Note that
Searcher.maxDoc()
is used instead of
IndexReader#numDocs()
because also
Searcher.docFreq(Term)
is used, and when the latter
is inaccurate, so is
Searcher.maxDoc()
, and in the same direction.
In addition,
Searcher.maxDoc()
is more efficient to compute
term
- the term in question
searcher
- the document collection being searched
IOException
public Explanation.IDFExplanation idfExplain( Term term, Searcher searcher) throws IOException
idfExplain(Term,Searcher,int)
by passing
searcher.docFreq(term)
as the docFreq.
WARNING: if you subclass Similariary and override this
method then you may hit a peformance hit for certain
queries. Better to override
idfExplain(Term,Searcher,int)
instead.
IOException
public Explanation.IDFExplanation idfExplain( Collection < Term > terms, Searcher searcher) throws IOException
The default implementation sums the idf factor for each term in the phrase.
terms
- the terms in the phrase
searcher
- the document collection being searched
IOException
public abstract float idf(int docFreq, int numDocs)
tf(int)
factor for each term in the query and these products are
then summed to form the initial score for a document.
Terms that occur in fewer documents are better indicators of topic, so implementations of this method usually return larger values for rare terms, and smaller values for common terms.
docFreq
- the number of documents which contain the term
numDocs
- the total number of documents in the collection
public abstract float coord(int overlap, int maxOverlap)
The presence of a large portion of the query terms indicates a better match with the query, so implementations of this method usually return larger values when the ratio between these parameters is large and smaller values when the ratio between them is small.
overlap
- the number of query terms matched in the document
maxOverlap
- the total number of terms in the query
public float scorePayload(int docId, String fieldName, int start, int end, byte[] payload, int offset, int length)
The default implementation returns 1.
docId
- The docId currently being scored. If this value is
NO_DOC_ID_PROVIDED
, then it should be assumed that the PayloadQuery implementation does not provide document information
fieldName
- The fieldName of the term this payload belongs to
start
- The start position of the payload
end
- The end position of the payload
payload
- The payload byte array to be scored
offset
- The offset into the payload array
length
- The length in the array


Linux Kernel Development using KVM
I am back to doing some kernel hacking. I am building my kernel as I write this post.  I am writing this post to consolidate all of that so that the next time I pick this up, I don’t have to search everywhere.
[Read More]