--- layout: resume title: resumé menu: resumé ---
Development of web applications in a LAMPP environment, management of network infrastructure in a Windows and Linux environment: Active Directory, Exchange, Sharepoint, DNS, Group Policy, wireless networking; design of websites with a custom internal framework, interacting with Drupal, CiviCRM, and Joomla; and internal and external technical support through a helpdesk environment.
Co-owner, web development company.
Designed & managed web applications, technical support, and network administration.
Design & management of web site, technology, and social media.
Setup and operation of theatrical lighting and sound equipment.
Setup and operation of theatrical lighting and sound equipment.
Design, setup and operation of theatrical lighting and sound equipment.
Setup, configuration, maintenance and troubleshooting of desktop & laptop computers, servers, routers, switches, ethernet cabling.
{{ site.time | date: "%Y" | minus:2004 }} years experience - HTML, CSS, JavaScript; {{ site.time | date: "%Y" | minus:2007 }} years experience - Java, PHP; {{ site.time | date: "%Y" | minus:2010 }} years experience - C, SQL; {{ site.time | date: "%Y" | minus:2012 }} years experience - Python, Ruby. Participated in Agile software development framework.
Experience with: Windows (XP, Vista, 7, 8), Linux (Red Hat, Fedora, Ubuntu), MS Office (& alternatives), Adobe, Macromedia, Mail Programs (POP, SMTP, IMAP), versioning (SVN, Git) and other programs.
Experience designing, implementing and troubleshooting Home and Small office computer networks: File & printer sharing, configuring QoS, Firewalls, Port Forwarding, DMZ, gateways, subnets, Active Directory, Group Policy, long-range networking with external antennae and repeaters. Experience designing and maintaining websites using SSH, FTP / SFTP, cPanel as well as domain configuration such as custom name servers and A, CNAME, MX records.
Experience with client interaction, inclusion of clients in development process & maintaining professionalism.
Information Systems & Human Behaviour (Honours Bachelor's Degree)
Economics
Information Systems (Bachelor's Degree first year)
International Baccalaureate Candidate
High School Diploma with Honours


Upload Editor
Setup Spreadsheet
Load Content Type
Select Content Type to load:
Load
Load Files
Select Files or Directory to Load:
Additional Options
Generate Unique Identifiers?
Actions
Save CSV
Save CSV & Check
Close & Upload
No spreadsheet has been loaded yet.


CONTACT US!
Wayne Kudoi
CFO.
KeepFit Company
Contact
Joseph Muema.
CDO
KeepFit Company
Contact
Micah Tugi.
CEO & Founder.
KeepFit Company
Contact
Charles Maina.
CTO.
KeepFit Company
Contact
Email address:
feedback:


The hand-farting farmer who found newsreel fame in 1933
by David PescovitzThis is Cecil H. Dill, a farmer from Traverse Coty, Michigan, who discovered his unique, er, talent for making music with his hands. In the year of 1914. In the month of February.


The ob-grid
class will create a dynamic 12 columns system. The number of columns shrinks to 8 below the LG breakpoint
(1240px), to 4 below the SM breakpoint (600px) and to 2 below 360px. Items exceeding the column count will automatically be wrapped on a
new line, so a single container suffices for all rows, albeit having one container per row is also possible. All items will always be
aligned on grid lines and any unused space will be left blank.
There are two possibilities to span multiple columns, either by specifying the number of columns to span or by specifying the relative
width. Absolute spans will span the exact number of columns given, trimmed to the maximum number of available ones, which can lead to
empty space at a row's end. Relative spans will, when adding up to one, always occupy the whole row. For this to work, spans of one
third had to be tweaked to be uneven when there are 8 or 4 columns. There's a caveat when 3 ob-third
items have to span 4
columns, in this case, the ob-third-flexible
class has to be manually set on the second or third
ob-third
item.
| class | LG+ | LG to SM | SM to 360px | 360px- |
|---|---|---|---|---|
| ob-span-2 | 2 | 2 | 2 | 2 |
| ob-span-3 | 3 | 3 | 3 | 2 |
| ob-span-4 | 4 | 4 | 4 | 2 |
| ob-span-5 | 5 | 5 | 4 | 2 |
| ob-span-6 | 6 | 6 | 4 | 2 |
| ob-span-7 | 7 | 7 | 4 | 2 |
| ob-span-8 | 8 | 8 | 4 | 2 |
| ob-span-9 | 9 | 8 | 4 | 2 |
| ob-span-10 | 10 | 8 | 4 | 2 |
| ob-span-11 | 11 | 8 | 4 | 2 |
| ob-span-12 | 12 | 8 | 4 | 2 |
| ob-full | 12 | 8 | 4 | 2 |
| ob-half | 6 | 4 | 2 | 1 |
| ob-quarter | 3 | 2 | 1 | 1 |
| ob-three-quarters | 9 | 6 | 3 | 1 |
| ob-third | 4 | 2 / 3* | 1 / 2* | 1 |
| ob-two-thirds | 8 | 5 | 2 | 1 |
The ob-flex
class will create a dynamic 12 columns system. The number of columns shrinks to 8 below the LG breakpoint
(1240px), to 4 below the SM breakpoint (600px) and to 2 below 360px. Each row will be filled with the maximum number of items. The items
exceeding the column count will be automatically wrapped on a new line and the remaining space will be covered by evenly stretching all
the items in the row. This behavior implies two things, first the items will not be aligned on the grid lines. Second, while one
container for all items is possible, one container per row is advised to actually have some control over the number of items per row and
their relative width.
Unlike with the ob-grid
system, the items can't span multiple columns but they can be widened. The
ob-grow-2
to ob-grow-6
classes are defined to extend an item's width relative to its siblings. The higher the
growth factor, the wider the column. The actual width also depends on the number of other items in the row and their respective growth
value. If there's enough space, ob-grow-6
will actually be 6 times wider than a default item. If not, then it will be as
wide as possible.


Before Change
self.np_random = np.random.RandomState()
self.np_random.seed(seed)
self.observation_space = Box(low=0.0, high=1.0, shape=(28,28,1))
self.action_space = Discrete(10)
self.episode_len = episode_len
self.time = 0
self.no_images = no_images
After Change
// we could use temporary directory for this with a context manager and
// TemporaryDirecotry, but then each test that uses mnist would re-download the data
// this way the data is not cleaned up, but we only download it once per machine
mnist_path = osp.join(tempfile.gettempdir(), "MNIST_data")
with filelock.FileLock(mnist_path + ".lock"):
self.mnist = input_data.read_data_sets(mnist_path)
self.np_random = np.random.RandomState()


served with passion
Nothing brings people together like good food.
People who love to eat are always the best people
The fondest memories are made when gathered around the table
Fresh fish
Our first tasty offer
Fried Crispy Chicken
8 pieces, Grab your offer!!!
All happiness depends on a leisurely breakfast, check out our menu for more delicacy.
Lunch hour is the best hour of the day you can try out some of our traditional delicacy
You can try out some of our tantalizing salads prepared by our professional chefs.
Life is too short to say no cake, you can check out some of our cakes varieties.
Sult'an Pepper
Ksh.1200


The earth and all that fills it must listen, the world, and all things that come from it.
2 For Yahweh is angry with all the nations, and furious against all their armies;
he has completely destroyed them, he has handed them over to the slaughter.
3 Their slain will be left unburied; the stench of their dead bodies will be everywhere,
and the mountains will be soaked with their blood.
4 All the stars of the sky will fade away,
and the sky will be rolled up like a scroll; and all their stars will fade away,
as the leaf fades from off the vine, and as the overripe figs from the fig tree.
5 For when my sword will have drunk its fill in heaven;
look, it will now come down on Edom, on the people I am setting apart for destruction.
6 The sword of Yahweh is dripping with blood and covered with fat,
dripping with the blood of lambs and goats, covered with the fat of the kidneys of rams.
For Yahweh has a sacrifice in Bozrah and a great slaughter in the land of Edom.
7 Wild oxen will be slaughtered along with them, and young bulls with the older ones.
Their land will be drunk with blood, and their dust made fat with fatness.
8 For it will be a day of vengeance for Yahweh and a year when he will pay them back for the cause of Zion.
9 The streams of Edom will be turned into pitch, her dust into sulfur,
and her land will become burning pitch.
10 It will burn night and day; its smoke will rise forever;
from generation to generation it will
be a wasteland; no one will pass through it forever and ever.
11 But wild birds and animals will live there; the owl and the raven will make their nest in it.
He will stretch over it the measuring line of ruin and the plumbline of destruction.
12 Her nobles
will have nothing left to call a kingdom, and all her princes will be nothing.
13 Thorns will overgrow her palaces, nettles and thistles her fortresses.
It will be a habitation of jackals, a place for ostriches.
14 The wild animals and the hyenas will meet there, and the wild goats will cry to one another.
Nocturnal animals will settle there and find for themselves a place of rest.
15 Owls will make nests, lay and hatch their eggs, hatch and protect their young.
Yes, there hawks will gather, each one with its mate.
16 Search through the scroll of Yahweh; not one of these will be missing.
None will lack for a mate; for his mouth has commanded it, and his spirit has gathered them.
17 He has cast lots for their places, and his hand has measured it out for them by a cord.
They will possess it for ever; from
generation to generation they will live there.


Why use Coaches Trust?
-
Trusted Network
Save time and costs by getting directly in touch with trusted coaches all around the world.
-
Cost Effective
Bypass expensive recruitment services and speak with those who have the athlete's best interests at heart; their coaches!
-
Real Time Connections
Cut through the clutter and get direct contact with the athlete's coach who knows more about them.
How it works
-
Collegiate coaches can network globally with trusted coaches and share information about their scholarship opportunities using our unique red/green light system.
-
trusted coaches
-
Trusted coaches from around the world share first hand information, video links and trusted referrals about their student athletes to collegiate coaches.
-
COLLEGES
-
STUDENT ATHLETES
trusted coaches
STUDENT ATHLETES
COLLEGES
Athlete Coaches
-
Create the list your
student athlete's. -
Nominate your student
athlete's for available
scholarships. -
Share quality information and
video links directly with college
coaches. -
Chat directly with college coaches
to help your athletes select the
right opportunity for them.
College Coaches
- You want to recruit the best student athletes for your program
- Post your scholarship opportunities using our unique colour coding system.
- Network with trusted coaches who best know potential prospects
- Begin your recruitment process by staying in direct contact with your network of trusted coaches and their student athletes
- Receive credible information from trusted coaches for each prospect


Notes for Monday, April 10. Cosine distance, Locality-sensitive hashing.
FOR WEDNESDAY: Watch
Solve Every Statistics Problem with One Weird Trick
(~5m).
The latest update on whether interactive graphics are dead,
for maps
.
On
embracing curiosity
by Lisa Charlotte Rost.
Be the grader:
a student project from UIUC
.
LSH, an interface inspired by
Benjamin van Durme
.
Are data vectors close? How does this relate to cosines?
Randomized approximations to cosine similarity.
Add Random Classifier
Click to move the red vector, click and drag to move both vectors:


Germany’s CDU seeks to block Huawei from 5G rollout
Angela Merkel’s party passed a motion giving the Bundestag veto power over the matter.
by Matthew KarnitschnigBERLIN — Huawei’s chances of becoming a primary supplier for Germany’s 5G networks diminished on Saturday after the ruling Christian Democrats (CDU) moved to block the Chinese company by stipulating that the German parliament have the final say on the matter.
The party, ignoring opposition from Chancellor Angela Merkel, passed a motion at its convention that would bar 5G equipment suppliers from countries where the government holds sway over the business world.
The authors of the notion made it clear they were targeting Huawei. Critics of the Chinese company warn that using its equipment could expose countries’ communications networks to Chinese surveillance and even sabotage, suggestions Huawei has forcefully denied.
“As a society and state we cannot expose ourselves to attack,” the CDU motion read. “The only suppliers that can be trusted are those which are not under the influence of undemocratic states that lack functioning structures regarding the rule of law.”
The motion, in particular the requirement that the German Bundestag, or parliament, be granted veto power, likely dashes Huawei’s prospects to play a central role in Germany’s 5G expansion.
While Merkel has recently said she favors allowing the Chinese to participate in the contracts, which are expected to be worth billions, many in her party have severe reservations, as Saturday’s motion illustrated. The Social Democrats, which govern alongside the CDU, are also skeptical, as are the Greens and other opposition parties.
The CDU decision will be welcomed in Washington, where officials have been warning Germany and other European allies of the potential security dangers installing Huawei’s equipment could bring.


The DIPswitches on this clock should be set to 24-hour display, AUTO DST off, data format 0 or 2 (see below) and baud rate 9600. If this clock is to used as the source for the IRIG Audio Decoder (refclock_irig.c in this distribution), set the DIPswitches for AM IRIG output and IRIG format 1 (IRIG B with signature control).
There are two timecode formats used by these clocks. Format 0, which is available with both the Netclock/2 and 8170, and format 2, which is available only with the Netclock/2 and specially modified 8170.
Format 0 (22 ASCII printing characters):
<cr><lf>i ddd hh:mm:ss TZ=zz<cr><lf> on-time = first <cr> i = synchronization flag (' ' = in synch, '?' = out synch) hh:mm:ss = hours, minutes, secondsThe alarm condition is indicated by other than ' ' at i, which occurs during initial synchronization and when received signal is lost for about ten hours.
Format 2 (24 ASCII printing characters):
<cr><lf>iqyy ddd hh:mm:ss.fff ld on-time = <cr> i = synchronization flag (' ' = in synch, '?' = out synch) q = quality indicator (' ' = locked, 'A'...'D' = unlocked) yy = year (as broadcast) ddd = day of year hh:mm:ss.fff = hours, minutes, seconds, millisecondsThe alarm condition is indicated by other than ' ' at i, which occurs during initial synchronization and when received signal is lost for about ten hours. The unlock condition is indicated by other than ' ' at q.
The q is normally ' ' when the time error is less than 1 ms and a character in the set A...D when the time error is less than 10, 100, 500 and greater than 500 ms respectively. The l is normally ' ', but is set to L early in the month of an upcoming UTC leap second and reset to ' ' on the first day of the following month. The d is set to S for standard time S, I on the day preceding a switch to daylight time, D for daylight time and O on the day preceding a switch to standard time. The start bit of the first <cr> is synchronized to the indicated time as returned.
This driver does not need to be told which format is in use - it figures out which one from the length of the message. A three-stage median filter is used to reduce jitter and provide a dispersion measure. The driver makes no attempt to correct for the intrinsic jitter of the radio itself, which is a known problem with the older radios.


|
Mali
For description Last record 2 hours ago |
34 Records Share Settings |
|
Virginia
For description Last record 2 hours ago |
755 Records |
No forms here, add a form now
Name your form .xls


title = "Portfolio" url = "/portfolio" layout = "cms-layout" is_hidden = 0 == Latest works Portfolio Home / Latest works Our works We have done lots of works, lets check some Project california Web Development Project california Web Development Project california Web Development Project california Web Development Project california Web Development Project california Web Development
Web Development


CHESS ENGINE
BLACK HOLE
N-BODY SIMULATION
EPIC ORCHESTRAL
FLOCKING SIMULATION
NEURAL NETWORK
2048 BOT
PARTICLE SYSTEM
FLASH GAME
RAY TRACER
3D LIBRARY
MATRIX CMD
FORCE-DIRECTED GRAPH


KeyboardAdjuster
public protocol KeyboardAdjuster: class
Undocumented
-
Undocumented
Declaration
Swift
var keyboardAdjustmentHelper: KeyboardAdjustmentHelper
-
activateKeyboardAdjuster()
Extension methodActivates keyboard adjustment for the calling view controller.
Date
February 18, 2016Declaration
Swift
public func activateKeyboardAdjuster()
-
activateKeyboardAdjuster(showBlock:hideBlock:)
Extension methodEnable keyboard adjustment for the current view controller, providing optional closures to call when the keyboard appears and when it disappears.
Date
February 18, 2016Declaration
Swift
public func activateKeyboardAdjuster(showBlock: (() -> Void)?, hideBlock: (() -> Void)?)
Parameters
showBlock
(optional) a block to call when the keyboard appears
hideBlock
(optional) a block to call when the keyboard disappears
-
deactivateKeyboardAdjuster()
Extension methodCall this in your
viewWillDisappear
method for yourUIViewController
. This method removes any active keyboard observers from your view controller.Date
February 18, 2016Declaration
Swift
public func deactivateKeyboardAdjuster()


Hello! Welcome to my website!
I am a passionate Engineering student pursuing a Master's Thesis in Mechanical Engineering with a specialization in Thermal-Fluid Science and HVAC-Energy Systems. Stepping towards my field of interest and specialization, I am currently working on Project -'Heat Pump Management of Low-Grade Heat in Buildings'. The project is based on modeling a heat pump system for residential buildings, using 'Grid-Interactive Technology', coupled with the Thermal Energy Storage (TES) unit (water tank) to increase the efficiency of an HVAC system and reducing the energy cost.
I am enthusiastic about designing and building interdisciplinary engineering solutions in a hands-on-environment and look to further my abilities in a field of Energy-Sustainability and Thermal Engineering solutions. My inner drive for excellence and attention to detail is complemented by a sense of humility to stay focused on my goals. I live by the motto "Always be learning" and am excited about what next there is to learn and experience.
'Heat Pump Management of Low-Grade Heat in Buildings' [Concept Paper]
Conduction & Radiation Heat Transfer, Modern Energy Technologies, Modern Power Cycles, Mathematical Model Engineering Analysis, Advanced Thermodynamics, Internal Combustion Engines, Fluid Mechanics, Energy Management in Commercial Buildings.
Research Assistant - Dept. of Mechanical Engineering
Student Member - ASHRAE
Office Assistant - Stony Brook University Campus Residences
Treasurer - Indian Grad Student Association
Bachelor of Technology in Mechanical Engineering
August 14- May 18
GPA - 3.61/4.0
Heat Power, Engineering Thermodynamics, Thermal Engineering, Power Plant Engineering, Fluid Mechanics and Power Engineering, Heat and Mass Transfer, Machine Design, Automobile Engineering, CAD/CAM, Finite Element Method.
Teaching Assistant - Intro to Engineering Mechanics
Student Member - ISHRAE
Coordinator - University Technical Festival
ASHRAE Certified HVAC Design Training, Level-1 (18 PDHs) and Level-2 (12 PDHs) [Certificate]
You can contact me via personal email or LinkedIn below.


UIKitTestable
UIKit becomes testable.
Usage
Testing with UINavigationController.pushViewController(_:animated:)
// BEFORE
import UIKit
class MyViewController: UIViewController {
@IBAction func doSomething(_ sender: Any) {
// Checking the whether pushViewController was called or not is hard.
self.navigationController?.pushViewController(self)
}
}
// AFTER
import UIKit
import UIKitTestable
class MyViewController: UIViewController {
private let navigator: NavigatorProtocol
@IBAction func doSomething(_ sender: Any) {
// Easily inject a NavigatorStub or NavigatorSpy because they conform NavigatorProtocol.
self.navigator.push(viewController: self)
}
}
// MyViewControllerTests.swift
import XCTest
import UIKitTestable
class MyViewControllerTests: XCTestCase {
func testDoSomething() {
let navigatorSpy = NavigatorSpy()
// Inject the spy to verify how many time the .push was called.
let myViewController = MyViewController(navigatorSpy)
myViewController.doSomething(nil)
XCTAssertEqual(navigatorSpy.calledArgs.count, 1)
}
}
See other usages.
Testing with UIViewController.present(_:animated:completion:)
// BEFORE
import UIKit
class MyViewController: UIViewController {
@IBAction func doSomething(_ sender: Any) {
// Checking the whether present was called or not is hard.
self.present(anotherViewController)
}
}
// AFTER
import UIKit
import UIKitTestable
class MyViewController: UIViewController {
private let modalPresenter: ModalPresenterProtocol
@IBAction func doSomething(_ sender: Any) {
// Easily inject a ModalPresenterStub or ModalPresenterSpy because they conform ModalPresenterProtocol.
self.modalPresnter.present(viewController: anotherViewController)
}
}
// MyViewControllerTests.swift
import XCTest
import UIKitTestable
class MyViewControllerTests: XCTestCase {
func testDoSomething() {
let modalPresenterSpy = ModalPresenterSpy()
// Inject the spy to verify how many time the .present was called.
let myViewController = MyViewController(modalPresenterSpy)
myViewController.doSomething(nil)
XCTAssertEqual(modalPresenterSpy.calledArgs.count, 1)
}
}
See other usages.
Documentations
You can re-generate the docs by ./tools/generate-docs
on this repository.
Installation
Carthage
Add the following line to your Cartfile
:
github "Kuniwak/UIKitTestable"
CocoaPods
Not supported yet. If you want to support CocoaPods, please send the patch.
License
MIT.


A neutral viewpoint on Creativism and Uniformism
by Agnes
on 2016-04-30
by Agnes
on 2016-04-30
It seems like more and more students are converting to either Uniformism or Creativism every day. Much of this can be attributed to Trevisia’s and Fron’s recent fiery posts. Many come to my office during walk-in hours to ask whether they are more suited for Uniformism or Creativism. “If you have to ask,” I tell them, “Perhaps you are neither.”
During this stressful time of year, with thesis deadlines and final exams coming up, students seek a support group. It is not surprising that the Uniformists have swelled in rank: joining requires only a purchase of a shirt and instantly allows the wearer to join the Uniformist group of friends at lunch (especially appealing if one has no friends). Joining the Creativists, on the other hand, requires a heroic effort; although they call it an Initiation, the term “hazing” is more accurate1; furthermore their meetings are more chaotic then friendly, involving spilled paint, broken voices, collapsing chairs, and rap battles. Recently, however, they are debating whether to allow members to join for a two-month trial period before Initiation. This is a step in the right direction.
Some readers have questioned my neutral status. Is my post on running not a insult to the Uniformists? No, I merely tell the truth as it is. As you can see from this post, I am equally critical to the Creativists and the Uniformists.
Recently, after a lengthy process, the Scoop, traditionally a very Creativist enterprise, has declared that Tuesdays will be Uniformist day. I am pleased with the decision; however, many are not. I am sure that already, the Creativists are planning retaliation. I urged Trevisia not to give in to intolerance, but she merely made a creative face at me and hurried on her way.
I am worried. It is only a matter of time before the Uniformists and Creativists will come to blows again.
Our foreign friends will be familiar with this word, but for those who have never ventured abroad, let me explain. In foreign universities, students belong to “fraternities” and “sororities,” which are the analogue of our religions except that they are devoid of ideology. Fraternities and sororities are characterized by a “hazing” process which involves running in the streets naked, drinking copious amounts of alcohol, navigating booby-trapped mazes while blindfolded, being pushed backwards into a lake, and so forth. While the specific activities are different, their essence is similar; the key difference between fraternists and Creativists is that for Creativists, these types of activities are self-inflicted.↩


Chess Cloud Database(aka. "CDB") API has two parts, first is to probe the database, which can be achieved by reqesting CDB's HTTP-based RESTful API.
Then, as an extension to the existing UCI engine protocol, a few new options can be added so that the GUI and the engine can work better when handling results from CDB.
CDB's API access point is: http://www.chessdb.cn/cdb.php?action=[ACTION]{&[OPTION1]=[VALUE1]...&[OPTIONn]=[VALUEn]}
In which the fields are defined as:
ACTION: Action type, for example, query all known moves (queryall), suggest a move (query / querybest), request analysis (queue), etc.
OPTION & VALUE: Options, for example, position to query (board) and automatic learning (learn), etc.
Mandatory: board, set to the FEN format encoding of the position to query, e.g. &board=rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1
Optional: showall, set to false if unknown moves should be omitted, e.g. &showall=0 or &showall=1, default is 0, only return known moves
Optional: egtbmetric, set to desired EGTB metric, e.g. &egtbmetric=dtz or &egtbmetric=dtm, default is dtz, using DTZ tablebases
Optional: learn, set to whether automatic learning should be enabled, e.g. &learn=0 or &learn=1, default is 1, enabling automatic learning
Return: move data separated by "|", of which each field is separated by ",", fields may contain "move", "score", "rank", "winrate" and "note"
If the position is invalid, "invalid board" is returned, if the position is unknown, "unknown" is returned, if the position is a checkmate or stalemate, "checkmate" or "stalemate" is returned
Mandatory: board, set to the FEN format encoding of the position to query, e.g. &board=rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1
Optional: endgame, set to whether only EGTB data should be returned, e.g. &endgame=0 or &endgame=1, default is 0, all data are returned
Optional: egtbmetric, set to desired EGTB metric, e.g. &egtbmetric=dtz or &egtbmetric=dtm, default is dtz, using DTZ tablebases
Optional: learn, set to whether automatic learning should be enabled, e.g. &learn=0 or &learn=1, default is 1, enabling automatic learning
Return: move data separated by "|", of which a normal move are returned as move:[MOVE], an EGTB move is returned as egtb:[MOVE], a candidate move is returned as search:[MOVE]
Candidate moves are a list of moves that may require further processing, such as sending them as "searchmoves" to an engine
If the position is invalid, "invalid board" is returned, if no satisfing move is found, "nobestmove" is returned
Mandatory: board, set to the FEN format encoding of the position to query, e.g. &board=rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1
Optional: egtbmetric, set to desired EGTB metric, e.g. &egtbmetric=dtz or &egtbmetric=dtm, default is dtz, using DTZ tablebases
Optional: learn, set to whether automatic learning should be enabled, e.g. &learn=0 or &learn=1, default is 1, enabling automatic learning
Return: CDB's evaluation score of the position, as in eval:[SCORE]
If the position is invalid, "invalid board" is returned, if the position is unknown, "unknown" is returned
Mandatory: board, set to the FEN format encoding of the position to query, e.g. &board=rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1
Optional: egtbmetric, set to desired EGTB metric, e.g. &egtbmetric=dtz or &egtbmetric=dtm, default is dtz, using DTZ tablebases
Optional: learn, set to whether automatic learning should be enabled, e.g. &learn=0 or &learn=1, default is 1, enabling automatic learning
Return: CDB's analysis line of the position, as in score:[SCORE],depth:[DEPTH],pv:[MOVE1]{...|[MOVEn]}
If the position is invalid, "invalid board" is returned, if the position is unknown, "unknown" is returned
Mandatory: board, set to the FEN format encoding of the position to query, e.g. &board=rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1
Return: ok means success
If the position is invalid, "invalid board" is returned, if the position is trivial, nothing is returned
Mandatory: board, set to the FEN format encoding of the position to query, e.g. &board=rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1
Mandatory: move, set to the desired move for analysis, e.g. &move=move:c3c4
Return: ok means success
If the position is invalid, "invalid board" is returned, if the position is trivial, nothing is returned
Usually, only GUIs should send API queries to CDB, engines do not need to make any network queries.
Preferably GUIs can inform the engines about the information returned from CDB via UCI, for example:
While sending "go" commands to engines, append "bookmove [MOVE]" to suggest a move from opening book, engines can decide whether to immediately return "bestmove [MOVE]" or start their own search ignoring the suggestions.
This option is ignored in analysis mode (go infinite) or pondering (go ponder) and must be placed before "searchmoves"
During searches, sending "hint score [SCORE] depth [DEPTH] pv [MOVE1]{... [MOVEn]}" to inform engines about known principal variations.
While sending "go" commands to engines, append "egtbmove [MOVE]" to suggest a move from EGTB, engines can decide whether to immediately return "bestmove [MOVE]" or start their own search ignoring the suggestions.
This option is ignored in analysis mode (go infinite) or pondering (go ponder) and must be placed before "searchmoves"


Please distribute
points between the following options.
Option
Importance
You've used too many points! Please remove some.
You've got
points left to use.
Finished


Gilles Amado and Haroldo Vinagre Brasil
Mentions the concept of Gambiarras
"Another very interesting category we may include in Brazil'sjeitinhoculture is that of "gambiarra," which is a kind of a nonprofessional, cheap, and quick repair or mending (Paulielo, 1984).Gambiarraas a rule "breaks up" in very improper circumstances because the definitive arrangement is always posponed. In this way a provisional solution becomes a permanent one, despite the risks in its adoption."
"Brazilians usegambiarrasto patch up cars, utilities and even the federal constitution, because it is easier to make a quick repair than it is to give a matter some more thought. In a positive interpretation,gambiarrareflects flexibility"


Your product name is too short.
Your product name is too long.
Your product name is required.
Please enter character only.


Phys.org
Phys.org is a science news site that I found via Reddit. It covers news on science and technology, reported through fields like biology or physics, with an emphasis on detailing research. It's very focused and informative. Perhaps, it can be considered serious, niche, and practical. But the appeal of it is in its no frills approach. If I want to browse science news, I look no further than phys.org. There's almost nothing extraneous you to wade through.
Arriving on the home page puts you into view of about seven stories split into two sections. But easily moving through subsections is the positive here. Stories from nine science fields and those aggregated by popularity, comments, date, rank, inclusion of video, etc are all easily navigated to via headers. The eye is drawn to the banner but that is almost a byproduct of how inconspicous the rest of the page is. It's just information and a couple of thumbnails.
I'd describe the site visuals as textual, basic, structured, repetitive, and functional. Some of these don't sound like positives, but I don't go to a news site to look at pretty things. I believe the site was built around a principle to avoid distraction, something that is useful when reading news.
Navigating through the site is very easy, both from the home page and from article pages. This is because the content isn't diversionary and the paths almost always go through the header or a sidebar.
This is a site you can be proud to procrastinate on. You almost certainly come out more informed than when you went in.
~Goodreads
According to wikipedia, Goodreads is a "social cataloging" website, which is an appropriate term for it. It doesn't try to sell you anything directly, although it is owned by Amazon, and it almost certainly data mines. The purpose is simple. Data mine, for sure, but also provide a resource for learning about books and what people think about them. It's casual, informative, open, restrained, and maybe a little sly.
The homepage isn't my cup of tea. If you have an account it's almost entirely updates or new discussions, both of which I don't read. The normal homepage is a standard account sign up page, which could be improved. There's nothing that really stands out close up or far away. The worthwhile pages, for me, are account pages (my own, others, and those for books). On these pages, it's incredibly easy to find book, reviews, and new information. An account page has 4-5 different listings of books, presented in different forms.
The design is very comfortable. It's approachable, and it draws you in. The social component is restrained, usually pushed off to a sidebar. There is a lot of open space on the typical page. The thumbnails are small, and the entire site operates almost in a two-color scheme (white and light tan).
The website solves the issue of dealing with an ulimited amount of books. How do you present all that potential? You let users do it for you. Community is crucial for building up accessible data. Navigation is not that easy, but there is some benefit in that. For instance, it's difficult to navigate to the discussion pages from any given page, but it's a positive if you aren't interested in reading such material. What you don't want to see stays hidden.
This is another site where you can be productive with procrastination if your intent is to find some books to read. The drain of reading discussions and reviews could have some impact, but again, they are a component of the website isn't really forced, so if you don't want to go that route, you don't have to.
~Hype Machine
Hype Machine, unlike the other two websites focuses on audio. It aggregates songs posted on blogs and allows visitors to listen to them. Thus, there is a demphasis on images and text, and a priority placed on finding something to listen to. It is funcional, engaging, restrained, purposed, and casual.
When looking at the homepage, you are drawn to the posted songs, whatever is updated at that moment. Even those these objects are primarly text, their font size is greater than anything else on the page. That is how they capture your attention. Visuals are very basic. Like Goodreads, a small number of colors are used, this time green, black, and white. It is soft and clean. Save the energy for that Deadmau5 remix. A lot of empty space is provided. The visuals mirror the purpose.
Navigation isn't too difficult. This is because you move by browsing and searching. The site is built to let you browse. With providing audio as the goal, it is as easy to find a song on the homepage as it is on any other page.
This again, is a unique site when it comes to procrastination and long term use. There is very little textual content. It is unlikely taht most people waste their time navigating through this site, reading things. But you can have it open all day for listening to music. This is a crucial component of its success. This is not a site that makes you bored or anxious. This is a site to see what's new.
~


The complete tutorial & session schedule for Percona Live MySQL Conference & Expo 2014 is released. This schedule offers both a sense of achievement as well as a sense of regret; for I believe the schedule is very good, and yet some good proposals had to be left out.
This is an inevitable result of a conference that is popular and receives far more proposals than can fit within the time frames. This conference offers 96 session slots and 16 3-hour tutorial slots. We got well over 300 proposals -- I'm not even sure how to count them -- and they just can't all fit in. My sincere apologies to all those left out. A proposal of mine was just rejected yesterday from another conference; I can sympathize and empathize with all turned down.
As part of our interest in having a diversity of talks and speakers, we have promoted talks by less frequent speakers and newly presenting companies. We are happy to grow the community!
Although titled "Percona Live", this conference's program is managed by a diverse and independent committee. We had good discussions and some very good thinking and advice were offered. I'm happy to acknowledge and thank the committee members:
- Cédric Peintre, Dailymotion
- Giuseppe Maxia, Continuent
- Ivan Zoratti, SkySQL
- Jay Janssen, Percona
- Jeremy Cole, Google
- Laine Campbell, PalominoDB (now Blackbird, congrats!)
- Liz van Dijk, Percona
- Roland Bouman, Pentaho
- Tim Callaghan, Tokutek
- Todd Farmer, Oracle
- myself, Outbrain
Looking at the schedule I'm as always eager to attend many more sessions than I can; until I get more replicas of myself, It's again down to choosing between multiple prominent talks at each time slot.
Thank you to all those who submitted a proposal! (It's cool, just saying)
Birds of a Feather, Lightning Talks
Call for papers continues! You are encouraged to submit your proposals until end of January. These proposals are reviewed by the committee, and eventually chosen and scheduled by Giuseppe Maxia. See also:
- Call for papers (with lightning talks): Percona Live MySQL Conference 2014
- Submissions at Percona Live Santa Clara 2014 and Lightning talks


--- layout: default title: Books recommendations description: Embedded systems related books recommendations ---
{{ item.title }}
{{ item.tag }}


Item 1.
Practice:
Create a new document.
Write several sentences. Misspell at least one word in each sentence.
Open the spelling checker Press space + dots16.
-
"Spelling checker menu" is displayed by the BrailleNote.
document check
look up word
word check
paragraph or section check
check from cursor to end of document
-
Focus on "document check"
Toggle through list space, enter
Direct selection letter d
-
BrailleNote displays the first misspelling and gives you the prompt "option?" so that you can decide what you want to do. You have the following choices. The options are listed here for you.
Ignore all occurrences of the word letter i
Skip only this occurrence of the word Space + dot5
Add word to the dictionary letter a
Correct the word letter c
Look up the word letter l
Suggestions letter s
An example of an error in my document is given here. Explore using the spelling checker in your own document. Use all options as appropriate.


| Contract Name | Type | Expire Date | Strike | Premium |
|---|---|---|---|---|
| GOOG170714C00940000 | Call | 07/14/2017 | $ 940 | $7.5 |
| GOOG170714P00960000 | Put | 07/14/2017 | $960 | $19.5 |
import matplotlib.pyplot as plt %pylab inline price = np.arange(900,1000,1) strike = 940 premium = 7.5 payoff = [max(-premium, i - strike-premium) for i in price] plt.plot(price, payoff) plt.xlabel('Price at T S_T ($)') plt.ylabel('payoff') plt.title('Call option Payoff at Expiry') plt.grid(True) price = np.arange(900,1000,1) strike = 960 premium = 19.5 payoff = [max(-premium, strike - i -premium) for i in price] plt.plot(price, payoff) plt.xlabel('Price at T S_T ($)') plt.ylabel('payoff') plt.title('Put option Payoff at Expiry') plt.grid(True)The above payoff diagrams illustrate the cash payoff on an option at the expiration date. For a call option, the net payoff is negative if the price of the underlying asset is less than the strike price(The negative payoff comes from the premium). If the underlying price exceeds the strike price, the gross payoff is the price of the underlying asset minus the strike price and the premium. For a put option, the net payoff is positive if the underlying price is less than the strike price. If the price of the underlying asset exceeds the strike price, the gross payoff is negative because you pay premuim for purchasing the contracts.
| Payoff | \(S_t > K\) | \(S_t < K\) |
| Portfolio A | \(S_t - K+K=S_t\) | \(0+K=K\) |
| Portfolio B | \(0+S_t =S_t\) | \(K-S_t+S_t=K\) |
| Strategy | Content |
| Conversion | Synthetic Short Position: short call + long put The actual stock position: long the underlying stocks |
| Reversal | Synthetic Long Position: long call + short put The actual stock position: short the underlying stocks |


Mailing List and Bug Tracker
If you run into trouble using Caius and require assistance, please ask for help in the Google group caius-users. If you encounter a problem that you think is a bug in the framework itself, please report it through the issue tracker on Github.
Getting Involved
You can fork the source code on Github or clone it to your comuputer by running the following command:
git clone https://github.com/tobijk/caius.git caius
You are welcome to submit patches for bugfixes, improvements and new features!
About the WebDriver API
The WebDriver module that comes with Caius implements the Selenium WebDriver API for Tcl. The underlying protocol is documented here. The Tcl module does not support loading drivers directly, but instead delegates this task to Selenium Server.
Learning Tcl
If you are entirely new to Tcl, you may want to learn a bit about the language itself before you dive into writing tests. Admittedly, Tcl is not among the most popular languages nowadays, even though it may have been in the past. But it has some intriguing features (such as the uplevel command) that make it extremely versatile and extensible.
In case you wonder if Tcl is worth learning, at all, you should read Salvatore Sanfilippo's article Tcl the Misunderstood. It will introduce you to the core concepts that Tcl is built on and may give you a fairly good idea of whether and why learning Tcl may be of interest to you.
The canonical source of information about the language for Tcl newcomers is the Tcl Tutorial. Once you have grasped the basics, you may want to familiarize yourself also with incr Tcl, the object-oriented extension that Caius is built on.
Licensing
Caius is both Free and Open Source Software, published under the MIT License. That means you can modify it, re-distribute it and use it in your consulting projects without restrictions.


Riki was born middle child to the great dynasty of Tahlin. With an older brother groomed for the throne, and a younger brother coddled and kept, Riki, the small middle son, seemed born for the art of invisibility. It was an art he cultivated, and one which ultimately saved his life on the night that his people were betrayed and his family slaughtered. Of all the royal line, he alone escaped, small and agile, unassuming, using smoke as cover. He cut his way out of the royal grounds, using the advantage of surprise, quietly slitting the throats of one enemy warrior after another. Now free of his royal responsibilities, Riki uses his talents in service to a new trade: Stealth Assassin.


Add Record
Search
Contact
World Leading Technology
     Now At Your Fingers
Easy to use
Accurate
Guaranteed to work
“Poverty is the parent of revolution and crime.”
Aristotle
“When a man is denied the right to live the life he believes in, he has no choice but to become an outlaw.”
Nelson Mandela
“To have once been a criminal is no disgrace. To remain a criminal is the disgrace”
Malcolm X
Previous
Previous
Add a Record to the Blockchain
Select Severity of the crime
Murder
Robbery
Child Abuse
Riot
Submit
Enter Image
Get a Record from the Blockchain
Search
Record Id
Date
Place
Severity
Get Information using Block id
Find
✅
Date
Place
Severity
Find
© Copyright 2021 Blockchain Project


Employee (class: AcDbBlockReference)
|_ Extension Dictionary (class:AcDbDictionary)
|_ "ASDK_EMPLOYEE_DICTIONARY" (class:AcDbDictionary)
|_ "DETAILS" (class:AsdkEmployeeDetails)
In addition to our discussion of custom objects and extension dictionaries,
here we introduce the concept of the separation of the User Interface from
it's Object commonly termed DB/UI separation. In this section we will build
two applications; an ObjectDBX application representing the DB portion
of our application; and an ObjectARX application representing the
UI portion of our application. You will be pleased to know that the ObjectARX
Wizard handles both ObjectARX and ObjectDBX applications - as we will see
shortly.
As a starting point for this exercise, use the files you created in the previous step or open the project contained in the Step05 folder. In this exercise we will create three new AutoCAD commands "ADDDETAIL", "LISTDETAILS" and "REMOVEDETAIL".When the "ADDDETAIL" command is executed,
When the "LISTDETAILS" command is executed,
- The user will be prompted to select an EMPLOYEE block reference.
- If the selection is successful, the user will be prompted to enter EMPLOYEE details.
- The function will get the entity's Extension Dictionary.
- The function will verify that the EMPLOYEE block reference has a base level "ASDK_EMPLOYEE_DICTIONARY" dictionary.
- If the EMPLOYEE block reference does not contain an AsdkEmployeeDetails object, it will create a new AsdkEmployeeDetails object , fill in the appropriate details, and add the AsdkEmployeeDetails object to the base level of the EMPLOYEE block reference Extension Dictionary.
When the "REMOVEDETAIL" command is executed,
- The user will be prompted to select an EMPLOYEE block reference.
- If the selection is successful, retrieve the EMPLOYEE block reference Extension Dictionary.
- If the EMPLOYEE block reference has an Extension Dictionary, retrieve the "ASDK_EMPLOYEE_DICTIONARY" dictionary.
- If the EMPLOYEE block reference has an "ASDK_EMPLOYEE_DICTIONARY" dictionary, retrieve the "DETAILS" AsdkEmployeeDetails object.
- If the AsdkEmployeeDetails object exists, retrieve is data and prompt to the user.
- The user will be prompted to select an EMPLOYEE block reference.
- If the selection is successful, the function will retrieve the EMPLOYEE block reference Extension Dictionary.
- If the EMPLOYEE block reference has an Extension Dictionary, the function will retrieve the "ASDK_EMPLOYEE_DICTIONARY" dictionary.
- If the EMPLOYEE block reference has an "ASDK_EMPLOYEE_DICTIONARY" dictionary, it will retrieve the "DETAILS" AsdkEmployeeDetails object.
- If the AsdkEmployeeDetails object exists, it will erase it and if there are no other entries referencing the "ASDK_EMPLOYEE_DICTIONARY" dictionary, the dictionary will also be erased.
NOTE: Select the link to view implementation details.
- Load project "Step05", which was created with the ObjectARX Wizard and contains the commands and source from the previous step or continue with the files you created from the previous step.
- Create a sub project for the ObjectDBX (*.dbx) module.
- Create the AsdkEmployeeDetails object.
- Register the command ADDDETAIL, set the name of the function to be called to 'asdkadddetail()'.
- Register the command LISTDETAILS, set the name of the function to be called to 'asdklistdetails()'.
- Register the command REMOVEDETAIL, set the name of the function to be called to 'asdkremovedetail()'.
- Add the AsdkEmployeeDetails object to the command module.
- Testing the application.
Create a sub project for the ObjectDBX (*.dbx) module
- From the "File" pull down menu of Visual C++ 6.0, select "New...".
- Select the "Projects" tab in the dialog that appears.
- Select "ObjectARX 2000 AppWizard" in the list of project types.
- Enter EmployeeDetails as project name.
- Select the 'Add to current workspace' radio button.
Step 5 Figure 1 - Creating a Sub Project EmployeeDetails
- When presented with the new dialog (Step 1 of 1), choose "ObjectDBX (custom object definition)" radio button - IMPORTANT!!
- Click "Finish" and then "OK."
Step 5 Figure 2 - Selecting the ObjectARX class wizard
Step 5 Figure 3 - Creating the AsdkEmployeeDetails class
Step 5 Figure 4 - Adding member functions to the AsdkEmployeeDetails
class
| Variable Name | Data Type | DXF Code |
| m_lastName | char* | 300 |
| m_firstName | char* | 301 |
| m_cube | Adesk::Int32 | 90 |
| m_ID | Adeak::Int32 | 91 |
Step 5 Figure 5 - Adding member variable to the AsdkEmployeeDetails
class
| //{{AFX_ARX_DATA_ACCESS(AsdkEmployeeDetails)
Acad::ErrorStatus setID(const Adesk::Int32 ID); Acad::ErrorStatus iD(Adesk::Int32& ID); Acad::ErrorStatus setCube(const Adesk::Int32 cube); Acad::ErrorStatus cube(Adesk::Int32& cube); Acad::ErrorStatus setFirstName(const char* firstName); Acad::ErrorStatus firstName(char*& firstName); Acad::ErrorStatus setLastName(const char* lastName); Acad::ErrorStatus lastName(char*& lastName); //}}AFX_ARX_DATA_ACCESS |
| #ifndef ASDKEMPLOYEEDETAILS_DBXSERVICE
#define ASDKEMPLOYEEDETAILS_DBXSERVICE "ASDKEMPLOYEEDETAILS_DBXSERVICE" #endif |
This was added by the ObjectARX Wizard. This will be used to register
a service in ObjectARX.
| void InitApplication()
{ // NOTE: DO NOT edit the following lines. //{{AFX_ARX_INIT AsdkEmployeeDetails::rxInit(); acrxBuildClassHierarchy(); acrxRegisterService(ASDKEMPLOYEEDETAILS_DBXSERVICE); //}}AFX_ARX_INIT // TODO: add your initialization functions } |
Here we initialize the AsdkEmployeeDetails class, build
the ObjectARX class hierarchy and add a service called ASKDEMPLOYEEDETAILS_DBXSERVICE,
we will see later how we utilize this service in our ObjectARX application.
For more information on these functions and their usage, refer to the ObjectARX
Developers Guide and online help.
NOTE: If you want to compile the ObjectARX application at this point, please refer to the "Add the AsdkEmployeeDetails object to the command module" instructions before compiling your application.
Implementation of the ADDDETAIL command - 'asdkadddetail()'
Algorithm
- Register the command ADDDETAIL with the ObjectARX Wizard and set the function to be call to 'asdkadddetail()'.
- Let the user select a block reference (acedEntSel()).
- Convert the ads_name to an AcDbObjectId (acdbGetObjectId()).
- Open the object (acdbOpenAcDbObject()).
- Check with the isKindOf() function that the user has selected a block reference (AcDbBlockReference::desc())
- Return if it is not a block reference.
- Input employee data for employee ID; employee Cube; employee first name; employee last name (acedGetInt(), acedGetString()).
- Get the extension dictionary of the EMPLOYEE block reference (AcDbObject::extensionDictionary()).
- If the EMPLOYEE block reference does not have an extension dictionary create one. (AcDbObject::createExtensionDictionary())
- Open the extension dictionary. If the extension dictionary was erased previously, then open the erased extension dictionary, since we can reuse the extension dictionary.
- If the extension dictionary was erased (AcDbObject::isErased ()) unerase it (AcDbObject::erase(Adesk::kFalse))
- Retrieve the "ASDK_EMPLOYEE_DICTIONARY" (AcDbDictionary::getAt())
- If the "ASDK_EMLOYEE_DICTIONARY" AcDbDictionary does not exist, create an "ASDK_EMPLOYEE_DICTIONARY" AcDbDictionary and add it to the EMPLOYEE block reference extension dictionary.
- Check to see if an AsdkEmployeeDetails object is already present in the "ASDK_EMPLOYEE_DICTIONARY" (we store AsdkEmployeeDetails objects under the key "DETAILS")
- If an AsdkEmployeeDetails object does not exist, create a new AsdkEmployeeDetails object and set it's data.
- Add a new AsdkEmployeeDetails object under the key "DETAILS" in the "ASDK_EMPLOYEE_DICTIONARY"
- Try to implement this function yourself. Don't forget the ObjectARX online help. If you get stuck, you may use the ObjectARX component gallery under "Step5 - asdkadddetail" and study the source code.
Implementation of the LISTDETAILS command - 'asdklistdetails()'
Algorithm
- Register the command LISTDETAILS with the ObjectARX Wizard and set the function to be called to 'asdklistdetails()'.
- Let the user select a block reference (acedEntSel()).
- Convert the ads_name to an AcDbObjectId (acdbGetObjectId()).
- Open the object (acdbOpenAcDbObject()).
- Check with the isKindOf() function that the user has selected a block reference (AcDbBlockReference::desc()).
- Return if it is not a block reference.
- Retrieve the extension dictionary of the block reference. If there is none return. (AcDbObject::extensionDictionary()).
- Retrieve the "ASDK_EMPLOYEE_DICTIONARY" (AcDbDictionary::getAt()). If there is none return.
- Retrieve the AsdkEmployeeDetails object from the "ASDK_EMPLOYEE_DICTIONARY" under the "DETAILS" key.
- Retrieve the AsdkEmployeeDetails object data and print the details.
- Try to implement this function yourself. Don't forget the ObjectARX online help. If you get stuck, you may use the ObjectARX component gallery under "Step5 - asdklistdetails" and study the source code.
Implementation of the REMOVEDETAIL command - 'asdkremovedetail()'
Algorithm
- Register the command REMOVEDETAIL with the ObjectARX Wizard and set the function to be called to 'asdkremovedetail()'.
- Let the user select a block reference (acedEntSel()).
- Convert the ads_name to an AcDbObjectId (acdbGetObjectId()).
- Open the object (acdbOpenAcDbObject()).
- Check with the isKindOf() function that the user has selected a block reference (AcDbBlockReference::desc()).
- Return if it is not a block reference.
- Retrieve the extension dictionary of the block reference. If there is none return. (AcDbObject::extensionDictionary()).
- Retrieve the "ASDK_EMPLOYEE_DICTIONARY" (AcDbDictionary::getAt()). If there is none return.
- Retrieve the AsdkEmployeeDetails object from the "ASDK_EMPLOYEE_DICTIONARY" under the "DETAILS" key.
- Erase the AsdkEmployeeDetails object (AcDbObject::erase()).
- Erase the dictionaries if they contains no more entries. (AcDbDictionary::numEntries())
- Try to implement this function yourself. Don't forget the ObjectARX online help. If you get stuck, your may use the ObjectARX component gallery under "Step5 - asdkremovedetail" and study the source code.
Add code to acrxEntryPoint()
- Add the following code to the 'acrxEntryPoint()' of the 'Project.cpp' file.
AcRxObject *pSvc;
if ( !(pSvc =acrxServiceDictionary->at (ASDKEMPLOYEEDETAILS_DBXSERVICE)) ) {
// Try to load the module, if it is not yet present
if ( !acrxDynamicLinker->loadModule ("AsdkEmployeeDetails.dbx", 0) ) {
acutPrintf ("Unable to load AsdkEmployeeDetails.dbx. Unloading this application...\n") ;
return (AcRx::kRetError) ;
}
}Here we are checking to see if the ObjectDBX application is loaded. This is achieved by checking to see if the ASDKEMPLOYEEDETAILS_DBXSERVICE service is registered. If the service is not registered, load the ObjectDBX module. Alternatively this code could be added to the 'InitApplication()' function generated by the ObjectARX Wizard.
NOTE: When loading our ObjectARX applications, the dependent ObjectDBX files are located in the same folder as the step we are working on, in this particular case 'STEP05'. When we load our ObjectARX application, the associated ObjectDBX file(s) will be found. Normal practice is to locate ObjectDBX files in the "Autodesk Shared" folder which is usually located at:
C:\Program Files\Common Files\Autodesk Shared
Step 5 Figure 6 - Location of ObjectDBX Files
Add the AsdkEmployeeDetails object to the command module
- Add the AsdkEmployeeDetails.h to StdArx.h - #include "EmployeeDetails\AsdkEmployeeDetails.h"
- Add AsdkEmployeeDetails.lib to the libraries of the linker settings.
- In Project.cpp at the AcRx::kInitAppMsg location in acrxEntryPoint() add code to load the DBX module. You may use the ObjectARX component gallery under "Step5 - kInitAppMsg" and study the source code.
Test the application
- Build the application and load the ObjectDBX module first then load the ObjectARX application. Insert some EMPLOYEE block references and run the ADDDETAIL command. After you have added some employee data you may call the commands LISTDETAILS or REMOVEDETAIL.


Harry offered support to Gareth Thomas and his family
Former rugby player Gareth Thomas has told how the Duke of Sussex offered support to him and his family after he publicly revealed he was HIV positive.
The ex-Wales rugby captain told ITV’s Loose Women that Harry contacted him straight away.
“When I came out publicly about my living with HIV status, he straight away contacted me, he offered support – not just for me – he said, ‘Are your mum and dad OK? Is your husband OK? Is your stepdaughter OK?'”
The pair have since collaborated on a new film released by the Terrence Higgins Trust to mark national HIV Testing Week.
Thomas added: “We need to also break the stigma of getting tested. People are fearful of being tested.”
On revealing his diagnosis, he said: “It’s impacted my life in a way that has made me so powerful. I am stripped bare.
“I have nothing to hide which is actually quite a free feeling, it’s really nice. It’s really, really nice.
“What I see now every day which gives me more – this is not about me – more strength and more belief in what I represent, I see people talking about HIV.”
After Thomas revealed he was HIV positive, Harry, on his SussexRoyal social media account, described him as an “absolute legend”.
The duke said: “In sharing your story of being HIV+, you are saving lives and shattering stigma, by showing you can be strong and resilient while living with HIV.”


--- layout: post title: Good sample pyramid set to practise date: 2012-09-03 17:21:35.000000000 +01:00 type: post parent_id: '0' published: true password: '' status: publish categories: - swimming tags: [] meta: _edit_last: '1' author: Noel permalink: "/good-sample-pyramid-set-to-practise/" ---
Taken from Go Swim: starting at 4 swims at around 1 minute, increase by 10 seconds for 7 sets, then head back down to 1 minute again, decreasing by 10 seconds each time.


Write a program that starts at the number 1 then prints to screen, sequentially through numbers 1 to 10.
Write a program that displays the following text as a string: Hello, World!


by Nathan Braswell
SpiderMonkey is Mozilla's JavaScript engine.
Firefox, but also...
SpiderMonkey is the original JavaScript engine developed by Brendan Eich
Currently, three main parts
Highly optimized, but just can't be fast enough to compete without help.
Just-In-Time compiler
Time for some Monkey Business
Optimize those loops
Hunting for speed
Show them the meaning of haste
Behind every great JIT is ... another JIT.
This time, it's not a JIT
Optimization module for asm.js
SpiderMonkey is really, really fast.
If you add or fix a feature you have to...
Write JavaScript standard features and libraries ... in JavaScript
Something old, something new
...a lot newEvery little bit helps / A journey of a thousand miles
Inlining! JITs wooo!
Self-hosting is your friend!More than meets the eye
It's a let! It's a var! It's ... just a var.
Building on quicksand
Let variables go in their own scope now.
let a = 4;
this.a; // Doesn't work (well, it shouldn't)
var b = 8;
this.b; // works
Still need to actually put let variables on the new scope


{% extends "base.html" %} {% block title %}{% trans "Confirm your email address" %} - {{ block.super }}{% endblock title %} {% block content %}
{% blocktrans with request.user.email_unconfirmed as email %}We have sent an email to {{ email }} address.{% endblocktrans %}
{% trans "Please click on the link provided in that email to associate this email address with your account." %}
{% endblock content %}


The hero's birthday is {{ birthday | date:"shortDate" }} in the "shortDate" format.
The hero's birthday is {{ birthday | date:format }} in "{{format}}" format. Click the toggle button to change formats.


class: top, left, inverse, title-slide # Education & Globalization ## Session 11 ### Dr. Zhou Yisu 周憶粟 ### 2018/09/27 --- # Gender & Social Class ## Aims - Understand the role education plays in changing people's social status - Understand the complexity of gender related labor issue --- ## The big picture ![](https://hbr.org/resources/images/article_assets/2016/05/W160429_MILANOVIC_WHOHAS-700x535.png) --- ## From a historical perspective: How China changes the world ![:wscale 80%](./pic/World Income Distribution 1988 to 2011.gif) --- ## Globalization: The story so far Macro perspective: under the nation-state framework and through global trade, millions of poor people from the developing world where elevated from poverty. - They became richer - They became healthier -- How did they do that? - Hard work - Developing nations incorporate themselves into the global trade network by: + Doing work people from developing country are not willing to do + Doing work on the cheap + Develop its own technology and climb up the .green[value chain] 價值鏈 (i.e. using business processes and resources to produce highly profitable products also known as higher-margin products.) --- ### Japan did it first: 1960s ![](https://flashbak.com/wp-content/uploads/2014/03/PA-10874928-1.jpg) .footnote[Source: https://flashbak.com/1960-girls-take-stretch-breaks-at-tokyos-sony-factory-4566/] --- ### Hong Kong followed in the 1970s ![](https://cdn3.i-scmp.com/sites/default/files/styles/980x551/public/images/methode/2018/03/26/b85fafda-308e-11e8-9019-a420e6317de0_1280x720_175636.JPG?itok=S9pvHcHu) .footnote[source: https://www.scmp.com/lifestyle/fashion-beauty/article/2138919/history-hong-kongs-textile-and-fashion-industry-explored] --- ### Taiwan as well: textile & garment -> assemble electronics -> semiconductors Trend: move from low value-added products to high value-added products ![:wscale 40%](https://taiwantoday.tw/site/Tr/public/MMO/TR%20Images/201106p31.jpg) .footnote[Source: https://taiwantoday.tw/news.php?post=13965&unit=8,8,29,32,32,45] --- ### South Korea continues to climb up the .green[value chain] 價值鏈 ![](https://cdn.wccftech.com/wp-content/uploads/2018/03/enterprise-aerial-factory-view-2x1.jpg) .footnote[Source: https://wccftech.com/samsung-intel-take-back-semiconductor-crown-ihs-markit/] --- ## This process fundamentally changed people's life In the East, journalist Zha Jianying and Evan Osnos made some vivid depications: - _Age of ambition: chasing fortune, truth, and faith in the new China_ / 野心時代 : 在新中國追求財富, 真相和信仰 .red[1] - _Tide players: the movers and shakers of a rising China_ / 弄潮兒 : 中國崛起中的行動者和推動者 -- At the same time, working class from the developed world suffer tremendously: wage stagnated, benefits gone, old jobs gone (think Daniel Blake) .footnote[[1] Chapter 6 is a very intriguing story about Macao.] --- ### .violet[Rust belt] 銹帶: Abandoned factory buildings in downtown Detroit ![](https://secure.i.telegraph.co.uk/multimedia/archive/02449/detroit-illo_2449168b.jpg) .footnote[Source: https://www.telegraph.co.uk/culture/books/non_fictionreviews/9795276/The-Last-Days-of-Detroit-by-Mark-Binelli-review.html] --- background-image: url(https://media.istockphoto.com/photos/abandoned-buildings-in-downtown-detroit-picture-id121897093) background-size: contain --- ## Donald Trump say: bring back our jobs. The battle is still on: Trump and associates wish to _reverse_ globalization, by: - Posing tariff to disrupt global trade - Re-negotiate trade agreement, to get "a better deal" (i.e. relax import quota; opening up key areas to the U.S. companies; better protection of intellectual property rights) - Pulling the U.S. out of the global institutions. Possibly building a series of bilateral relationships 雙邊關係. -- A question for you to consider: .cyan[How would you construct an argument against Trump and associates?] --- ## The role education plays in the globalization process Sociologist David Baker called today a ".violet[schooled society]": education has transformed our world. Society that is actively created and defined by education. We already know how knowledge workers & body workers are both affected by education (note: necessarily schooling). -- ### Today's story is to focus on the micro perspective. Taking a look at how social class & gender are affected by globalization --- background-image: url(https://farm1.staticflickr.com/35/73389522_58bc999458_b.jpg) background-size: contain ### Time: 2005-06 --- background-image: url(https://farm1.staticflickr.com/6/75914522_65917a885d_o.jpg) background-size: contain --- background-image: url(https://farm1.staticflickr.com/30/101011020_f61162e7f4_o.jpg) background-size: contain --- background-image: url(https://lh3.googleusercontent.com/W_WnuFLScjiJRju-nzehDWCThIkUaiEn0KOhU6FsRVI7VX8MOPmudYvQVODEqz_Mc_0n-8dZ-6vmgyf-B201BsWA-IWGqxuyv-UBK0w_tcQY9Y9EY0SmyNVuW8bAXiVUIu2cImXsoA=w2400) background-size: contain --- background-image: url(https://farm1.staticflickr.com/31/66760033_48dd1439e8_z.jpg) background-size: contain --- background-image: url(https://farm1.staticflickr.com/32/67840148_34d596059c_z.jpg) background-size: contain --- background-image: url(https://farm1.staticflickr.com/24/64422894_584bc79243_z.jpg) background-size: contain --- background-image: url(https://farm1.staticflickr.com/47/176113994_914237e06c_b.jpg) background-size: contain --- ## My student's story is one case in the global narrative of gender & education ![](http://3.bp.blogspot.com/-VWZQTDPmR3o/TpWoyAGa-JI/AAAAAAAAAWQ/icYBKxDaJ_k/s1600/wdr+2.JPG) --- ## Globally, girls have been catching up with boys in education ![:wscale 80%](https://gem-report-2017.unesco.org/wp-content/uploads/2018/03/figure-1.png) .footnote[Source: [UNESCO/ Global Education Monitoring Report](https://gem-report-2017.unesco.org/en/chapter/gender_monitoring_participation-and-completion/)] --- ## Why do you think girls are disadvantaged at lower levels of education but favored at higher level? ![](http://3.bp.blogspot.com/-VWZQTDPmR3o/TpWoyAGa-JI/AAAAAAAAAWQ/icYBKxDaJ_k/s1600/wdr+2.JPG) --- ### Girls are systematically discriminated in agricultural societies: A case from Vietnam ![](https://farm3.staticflickr.com/2683/5852661131_c65acc3841_o.jpg) --- ## From my student's case - She represented many many more Asian who benefited from the rise of China + More educational opportunity (though at a cost) + Jobs (semi-knowledge worker) that were not available a generation ago -- - Her story is not written yet + Still vulnerable: job not stable, family responsibilities, huge cost to urbanize + But education provides "a way out" * Is this view of education instrumental? Yes. But it is a powerful narrative. --- ## Globalization & gender equality .orange[Globalization greatly improved the lives of women in the developing world] - More working opportunities outside of traditional household role or farming - Because of these new working opportunities, the cost of keeping women at home becomes much higher. - Women are more entrepreneurial: most of small business are headed by women - Globalization largely expand banking services: empowering women to save more, invest more wisely and take over the family financial decision making -- .orange[Still a long way toward gender equality] 性別平等: - Occupation segregation: labor market offer male and female very different types of jobs + Women are less likely to be offered high rank, high pay jobs + Women are less likely to enter the professional work: lawyers, doctors, engineers... - Vulnerability in marriage market --- Transformations of economic activities have had a particular significant impact: .orange[Feminization of labor] 勞動的女性化： increasing participation of women in the global formal and informal paid-labor force ![](https://flashbak.com/wp-content/uploads/2014/03/PA-10874928-1.jpg) --- Feminization of labor is concerned by .violet[feminization of poverty] .red[2] 貧困女性化 and .violet[female proletarianization] 女性的無產化, when: - economy shift toward export-oriented manufacturing 出口導向型的製造業 - more women are being drawn into .green[labor-intensive] and .green[low-paying] industries such as textiles, appareal, food processing, and electronics. .footnote[[2] The phenomenon that women represent disproportionate percentages of the world's poor. UN describes it as "the burden of poverty borne by women, especially in developing countries".] --- ## What are these types of jobs? Jobs in these industries are characterized by the .violet[flexible use of] labor, .violet[high turnover rates], .violet[part-time] and .violet[temporary] employment, and .violet[a lack of security] and .violet[benefits]. -- Women are preferred in these industries because they typically work for lower wages (due to gender discrimination), tend to have better education (girls usually outperform boys in schools), regarded as easy to manage by male employers and managers: - Docile 溫馴 - Greater patience 耐心 - More dexterity 靈巧 Other cases see Rizter & Dean p.405-411 --- ## An example: smartphone assembly line  --- ## Two competing views about women presented 1. Pun Ngai 潘毅 (https://sociology.hku.hk/people/pun-ngai/) + Critical + Feminization of labor is a exploitative in nature -- 2. Leslie Chang 張彤禾 (https://www.ted.com/talks/leslie_t_chang_the_voices_of_china_s_workers) + More benign view toward this process + Rural girls are getting education, skills, saving up money; enjoy a life style and personal freedom that is no possible when trapped in rural villages. --- ### While there are increasingly more women getting an higher education degree, also more became body workers There has been an increase in female migration: - Domestically from rural to urban areas - Internationally from low-income -> mid-income -> high-income countries - Many of the means are illegal This often results in exploitation and abuse: - poor working conditions - sex industry - mail-order brides --- # .red[Summary] For low-skilled jobs, there isn't any good alternatives. The type of factory work is better than what they would have had back home (.cyan[Leslie Chang's point]) The amount of lift factory job could give to girls are limited. Rather, many (if not most) were trapped inside the factory, exploited, and disposed (.cyan[Pun Ngai's point]) -- Most of workers, male or female, fell somewhere in-between. They stay in one place for a while and move forward. Some are motivated and directed (via social network, love interest, etc); others are adrift. --- Education is an important mechanism for girls to move up. Not just .orange[formal schooling], but .orange[skills training], .orange[short-term certificates] as well. -- The view you choose depends on where you want to focus. If you stand on the workers side, you tend to focus on the exploitative nature of these jobs. Education is just as oppressive. -- If you stand on the consumer or historical perspective, you tend to say "this is inevitable". But that should not take the .violet[empathy] and .violet[social justice] reasoning out of your thinking. -- It is through struggle, protest, and activism that improve the situations of millions of factory workers. --- ## Is China an exception? South Korean Labor Protests in 1987 ![](https://libcom.org/files/images/history/sk.jpg) --- ## Resources - [Why the Global 1% and the Asian Middle Class Have Gained the Most from Globalization](https://hbr.org/2016/05/why-the-global-1-and-the-asian-middle-class-have-gained-the-most-from-globalization) - .green[How has female surpase male in education?] DiPrete, Thomas A., and Claudia Buchmann. _The rise of women: The growing gender gap in education and what it means for American schools._ Russell Sage Foundation, 2013. - Gender gap in global education landscape: https://www.academia.edu/32067782/Gender_Gap_among_High_Achievers_in_Math_and_Implications_for_STEM_Pipeline - .green[Female labor in China] + Ngai, Pun. _Made in China: Women factory workers in a global workplace._ Duke University Press, 2005. 『中國女工——新興打工階級的呼喚』 （潘毅） + Chang, Leslie T. _Factory girls: From village to city in a changing China._ Random House Digital, Inc., 2009.『工廠女孩──在變遷的中國，從農村走向城市』（張彤禾） - .green[What happened in Korea?] Koo, Hagen. _Korean workers: The culture and politics of class formation_. Cornell University Press, 2001. .kt[中文版：] 『韓國工人』（具海根）


public static final class R.attr
extends java.lang.Object
| Modifier and Type | Field and Description |
|---|---|
static int |
dividerColor
Must be a color value, in the form of "
#rgb ",
"#argb ",
"#rrggbb ", or
"#aarrggbb ".
|
static int |
fingerprintDefaultText
Must be a string value, using '\\;' to escape
characters such as '\\n' or '\\uxxxx' for a unicode
character.
|
static int |
fingerprintEnable
Must be a boolean value, either
"
true " or "false ".
|
static int |
fingerprintTextColor
Must be a color value, in the form of "
#rgb ",
"#argb ",
"#rrggbb ", or
"#aarrggbb ".
|
static int |
fingerprintTextSize
Must be a dimension value, which is a
floating point number appended with a unit such as "
14.5sp ".
|
static int |
giveTactileFeedback
Must be a boolean value, either
"
true " or "false ".
|
static int |
noOfColumns
Must be an integer value, such as
"
100 ".
|
static int |
noOfRows
Must be an integer value, such as
"
100 ".
|
static int |
patternLineColor
Must be a color value, in the form of "
#rgb ",
"#argb ",
"#rrggbb ", or
"#aarrggbb ".
|
static int |
pin_titleText
Must be a string value, using '\\;' to escape
characters such as '\\n' or '\\uxxxx' for a unicode
character.
|
static int |
pin_titleTextColor
Must be a color value, in the form of "
#rgb ",
"#argb ",
"#rrggbb ", or
"#aarrggbb ".
|
static int |
titleText
Must be a string value, using '\\;' to escape
characters such as '\\n' or '\\uxxxx' for a unicode
character.
|
static int |
titleTextColor
Must be a color value, in the form of "
#rgb ",
"#argb ",
"#rrggbb ", or
"#aarrggbb ".
|
| Constructor and Description |
|---|
attr()
|
public static int dividerColor
Must be a color value, in the form of "#rgb
",
"#argb
",
"#rrggbb
", or "#aarrggbb
".
This may also be a reference to a resource (in the form
"@[package:]type:name
") or
theme attribute (in the form
"?[package:][type:]name
")
containing a value of this type.
public static int fingerprintDefaultText
Must be a string value, using '\\;' to escape characters such as '\\n' or '\\uxxxx' for a unicode character.
This may also be a reference to a resource (in the form
"@[package:]type:name
") or
theme attribute (in the form
"?[package:][type:]name
")
containing a value of this type.
public static int fingerprintEnable
Must be a boolean value, either
"true
" or "false
".
This may also be a reference to a resource (in the form
"@[package:]type:name
") or
theme attribute (in the form
"?[package:][type:]name
")
containing a value of this type.
public static int fingerprintTextColor
Must be a color value, in the form of "#rgb
",
"#argb
",
"#rrggbb
", or "#aarrggbb
".
This may also be a reference to a resource (in the form
"@[package:]type:name
") or
theme attribute (in the form
"?[package:][type:]name
")
containing a value of this type.
public static int fingerprintTextSize
Must be a dimension value, which is a floating
point number appended with a unit such as "14.5sp
".
Available units are: px (pixels), dp (density-independent
pixels), sp (scaled pixels based on preferred font size),
in (inches), mm (millimeters).
This may also be a reference to a resource (in the form
"@[package:]type:name
") or
theme attribute (in the form
"?[package:][type:]name
")
containing a value of this type.
public static int giveTactileFeedback
Must be a boolean value, either
"true
" or "false
".
This may also be a reference to a resource (in the form
"@[package:]type:name
") or
theme attribute (in the form
"?[package:][type:]name
")
containing a value of this type.
public static int noOfColumns
Must be an integer value, such as
"100
".
This may also be a reference to a resource (in the form
"@[package:]type:name
") or
theme attribute (in the form
"?[package:][type:]name
")
containing a value of this type.
public static int noOfRows
Must be an integer value, such as
"100
".
This may also be a reference to a resource (in the form
"@[package:]type:name
") or
theme attribute (in the form
"?[package:][type:]name
")
containing a value of this type.
public static int patternLineColor
Must be a color value, in the form of "#rgb
",
"#argb
",
"#rrggbb
", or "#aarrggbb
".
This may also be a reference to a resource (in the form
"@[package:]type:name
") or
theme attribute (in the form
"?[package:][type:]name
")
containing a value of this type.
public static int pin_titleText
Must be a string value, using '\\;' to escape characters such as '\\n' or '\\uxxxx' for a unicode character.
This may also be a reference to a resource (in the form
"@[package:]type:name
") or
theme attribute (in the form
"?[package:][type:]name
")
containing a value of this type.
public static int pin_titleTextColor
Must be a color value, in the form of "#rgb
",
"#argb
",
"#rrggbb
", or "#aarrggbb
".
This may also be a reference to a resource (in the form
"@[package:]type:name
") or
theme attribute (in the form
"?[package:][type:]name
")
containing a value of this type.
public static int titleText
Must be a string value, using '\\;' to escape characters such as '\\n' or '\\uxxxx' for a unicode character.
This may also be a reference to a resource (in the form
"@[package:]type:name
") or
theme attribute (in the form
"?[package:][type:]name
")
containing a value of this type.
public static int titleTextColor
Must be a color value, in the form of "#rgb
",
"#argb
",
"#rrggbb
", or "#aarrggbb
".
This may also be a reference to a resource (in the form
"@[package:]type:name
") or
theme attribute (in the form
"?[package:][type:]name
")
containing a value of this type.


C Interface¶
Defines
-
cisOutput_t
¶ Flag for checking if CisInterface.h has already been included.
Aliases to preserve names of original structures.
-
cisInput_t
¶
-
cis_free
¶
-
cisSend
¶ Send arguments as a small formatted message to an output queue. Use the format string to create a message from the input arguments that is then sent to the specified output queue. If the message is larger than CIS_MSG_MAX or cannot be encoded, it will not be sent.
Formatted IO
Output Usage:
- One-time: Create output channel with format specifier. cisOutput_t output_channel = cisOutputFmt(“out_name”, “a=%d, b=%d”);
- Send: ret = cisSend(output_channel, 1, 2);
- Free: cis_free(&output_channel);
Input Usage:
- One-time: Create output channel with format specifier. cisInput_t input_channel = cisInput(“in_name”, “a=%d, b=%d”);
- Prepare: Allocate space for recovered variables. int a, b;
- Receive: int ret = cisRecv(input_channel, &a, &b);
- Return
- int 0 if send succesfull, -1 if send unsuccessful.
- Parameters
cisQ
: cisOutput_t structure that queue should be sent to....
: arguments to be formatted into a message using sprintf.
-
cisRecv
¶ Assign arguments by receiving and parsing a message from an input queue. Receive a message smaller than CIS_MSG_MAX bytes from an input queue and parse it using the associated format string.
- Return
- int -1 if message could not be received or could not be parsed. Length of the received message if message was received and parsed.
- Parameters
cisQ
: cisOutput_t structure that message should be sent to....
: arguments that should be assigned by parsing the received message using sscanf. As these are being assigned, they should be pointers to memory that has already been allocated.
-
cisRecvRealloc
¶
-
vcisSend
¶ Definitions for symmetry, but there is no difference.
-
vcisRecv
¶
-
vcisSend_nolimit
¶
-
vcisRecv_nolimit
¶
-
cisSend_nolimit
¶
-
cisRecv_nolimit
¶
-
cisRpc_t
¶ Remote Procedure Call (RPC) structure. Contains information required to coordinate sending/receiving response/requests from/to an RPC server/client.
Remote Procedure Call (RPC) IO
Handle IO case of a server receiving input from clients, performing some calculation, and then sending a response back to the client.
Server Usage:
- One-time: Create server channels with format specifiers for input and output. cisRpc_t srv = cisRpcServer(“srv_name”, “%d”, “%d %d”);
- Prepare: Allocate space for recovered variables from request. int a;
- Receive request: int ret = rpcRecv(srv, &a);
- Process: Do tasks the server should do with input to produce output. int b = 2*a; int c = 3*a;
- Send response: ret = rpcSend(srv, b, c);
Client Usage:
- One-time: Create client channels to desired server with format specifiers for output and input (should be the same arguments as for the server except for name). cisRpc_t cli = cisRpcClient(“cli_name”, “%d”, “%d %d”);
- Prepare: Allocate space for recovered variables from response. int b, c;
- Call server: int ret = rpcCall(cli, 1, &b, &c);
Clients can also send several requests at once before receiving any responses. This allows the server to be processing the next requests while the client handles the previous response, thereby increasing efficiency. The responses are assumed to be in the same order as the generating requests (i.e. first come, first served).
-
vrpcSend
¶ Format and send a message to an RPC output queue. Format provided arguments list using the output queue format string and then sends it to the output queue under the assumption that it is larger than the maximum message size.
- Return
- integer specifying if the send was succesful. Values >= 0 indicate success.
- Parameters
rpc
: cisRpc_t structure with RPC information.ap
: va_list variable list of arguments for formatting.
-
vrpcRecv
(rpc, nargs, ap)¶ Receive and parse a message from an RPC input queue. Receive a message from the input queue under the assumption that it is larger than the maximum message size. Then parse the message using the input queue format string to extract parameters and assign them to the arguments.
- Return
- integer specifying if the receive was succesful. Values >= 0 indicate success.
- Parameters
rpc
: cisRpc_t structure with RPC information.nargs
: int Number of arguments contained in ap.ap
: va_list variable list of arguments that should be assigned parameters extracted using the format string. Since these will be assigned, they should be pointers to memory that has already been allocated.
-
vrpcRecvRealloc
(rpc, nargs, ap)¶
-
rpcSend
¶ Format and send a message to an RPC output queue. Format provided arguments using the output queue format string and then sends it to the output queue under the assumption that it is larger than the maximum message size.
- Return
- integer specifying if the send was succesful. Values >= 0 indicate success.
- Parameters
rpc
: cisRpc_t structure with RPC information....
: arguments for formatting.
-
rpcRecv
¶ Receive and parse a message from an RPC input queue. Receive a message from the input queue under the assumption that it is larger than the maximum message size. Then parse the message using the input queue format string to extract parameters and assign them to the arguments.
- Return
- integer specifying if the receive was succesful. Values >= 0 indicate success.
- Parameters
rpc
: cisRpc_t structure with RPC information....
: mixed arguments that should be assigned parameters extracted using the format string. Since these will be assigned, they should be pointers to memory that has already been allocated.
-
rpcRecvRealloc
¶
-
vrpcCall
(rpc, nargs, ap)¶
-
vrpcCallRealloc
(rpc, nargs, ap)¶
-
rpcCall
(rpc, ...)¶
-
rpcCallRealloc
(rpc, ...)¶
-
cisAsciiFileInput_t
¶ Definitions for file sturctures.
File IO
Handle I/O from/to a file line by line.
Input Usage:
- One-time: Create file interface by providing a channel name. comm_t fin = cisAsciiFileInput(“file_channel”);
- Prepare: Get pointer for line. char *line;
- Receive each line, terminating when receive returns -1 (EOF or channel closed). int ret = 1; while (ret > 0) { ret = cisRecv(fin, &line); // line will be realloced to fit message Do something with the line }
- Cleanup. Call functions to deallocate structures. free(line);
Output Usage:
- One-time: Create file interface by providing a channel name. comm_t fout = cisAsciiFileOutput(“file_channel”);
- Send lines to the file. If return value is not 0, the send was not succesfull. int ret; ret = cisSend(fin, “Line 1\n”); ret = cisSend(fout, “Line 1\n”); ret = cisSend(fout, “Line 2\n”);
-
cisAsciiFileOutput_t
¶
-
cisAsciiTableInput_t
¶ Definitions for table sturctures.
Table IO
Handle I/O from/to an ASCII table either line-by-line or as an array.
Row-by-Row
Input by Row Usage:
- One-time: Create file interface by providing a channel name. comm_t fin = cisAsciiTableInput(“file_channel”);
- Prepare: Allocate space for variables in row (the format in this example is “%5s %d %f\n” like the output example below). char a[5]; int b; double c;
- Receive each row, terminating when receive returns -1 (EOF or channel closed). int ret = 1; while (ret > 0) { ret = cisRecv(fin, &a, &b, &c); Do something with the row }
Output by Row Usage:
- One-time: Create file interface by providing a channel name and a format string for rows. comm_t fout = cisAsciiTableOutput(“file_channel”, “%5s %d %f\n”);
- Send rows to the file by providing entries. Formatting is handled by the interface. If return value is not 0, the send was not succesful. int ret; ret = cisSend(fout, “one”, 1, 1.0); ret = cisSend(fout, “two”, 2, 2.0);
Array
Input by Array Usage:
- One-time: Create file interface by providing a channel name. comm_t fin = cisAsciiArrayInput(“file_channel”);
- Prepare: Declare pointers for table columns (they will be allocated by the interface once the number of rows is known). char *aCol; int *bCol; double *cCol;
- Receive entire table as columns. Return value will be the number of elements in each column (the number of table rows). Negative values indicate errors. int ret = cisRecv(fin, &a, &b, &c);
- Cleanup. Call functions to deallocate structures. free(a); free(b); free(c);
Output by Array Usage:
- One-time: Create file interface by providing a channel name and a format string for rows. comm_t fout = cisAsciiArrayOutput(“file_channel”, “%5s %d %f\n”);
- Send columns to the file by providing pointers (or arrays). Formatting is handled by the interface. If return value is not 0, the send was not succesful. char aCol[] = {“one “, “two “, “three”}; \ Each str is of len 5 int bCol[3] = {1, 2, 3}; float cCol[3] = {1.0, 2.0, 3.0}; int ret = cisSend(fout, a, b, c);
-
cisAsciiTableOutput_t
¶
-
cisAsciiArrayInput_t
¶
-
cisAsciiArrayOutput_t
¶
-
cisPlyInput_t
¶ Definitions for ply structures.
Ply IO
Handle I/O from/to a Ply file.
Input Usage:
- One-time: Create file interface by providing a channel name. comm_t fin = cisPlyInput(“file_channel”); // channel
- Prepare: Allocate ply structure. ply_t p;
- Receive each structure, terminating when receive returns -1 (EOF or channel closed). int ret = 1; while (ret > 0) { ret = cisRecv(fin, &p); Do something with the ply structure }
Output by Usage:
- One-time: Create file interface by providing a channel name. comm_t fout = cisPlyOutput(“file_channel”); // channel
- Send structure to the file by providing entries. Formatting is handled by the interface. If return value is not 0, the send was not succesful. int ret; ply_t p; Populate the structure ret = cisSend(fout, p); ret = cisSend(fout, p);
-
cisPlyOutput_t
¶
-
cisObjInput_t
¶ Definitions for obj structures.
Obj IO
Handle I/O from/to a Obj file.
Input Usage:
- One-time: Create file interface by providing a channel name. comm_t fin = cisObjInput(“file_channel”); // channel
- Prepare: Allocate obj structure. obj_t p;
- Receive each structure, terminating when receive returns -1 (EOF or channel closed). int ret = 1; while (ret > 0) { ret = cisRecv(fin, &p); Do something with the obj structure }
Output by Usage:
- One-time: Create file interface by providing a channel name. comm_t fout = cisObjOutput(“file_channel”); // channel
- Send structure to the file by providing entries. Formatting is handled by the interface. If return value is not 0, the send was not succesful. int ret; obj_t p; Populate the structure ret = cisSend(fout, p); ret = cisSend(fout, p);
-
cisObjOutput_t
¶
Functions
-
static cisOutput_t
cisOutputFmt
(const char *name, const char *fmtString)¶ Constructor for cisOutput_t structure with format. Create a cisOutput_t structure based on a provided name that is used to locate a particular comm address stored in the environment variable name and a format string that can be used to format arguments into outgoing messages for the queue.
Basic IO
Output Usage:
- One-time: Create output channel (store in named variables) cisOutput_t output_channel = cisOutput(“out_name”);
- Prepare: Format data to a character array buffer. char buffer[CIS_MSG_BUF]; sprintf(buffer, “a=%d, b=%d”, 1, 2);
- Send: ret = cis_send(output_channel, buffer, strlen(buffer));
Input Usage:
- One-time: Create output channel (store in named variables) cisInput_t input_channel = cisInput(“in_name”);
- Prepare: Allocate a character array buffer. char buffer[CIS_MSG_BUF];
- Receive: int ret = cis_recv(input_channel, buffer, CIS_MSG_BUF);
- Return
- cisOutput_t output queue structure.
- Parameters
name
: constant character pointer to name of queue.fmtString
: character pointer to format string.
-
static cisInput_t
cisInputFmt
(const char *name, const char *fmtString)¶ Constructor for cisInput_t structure with format. Create a cisInput_t structure based on a provided name that is used to locate a particular comm address stored in the environment variable name and a format stirng that can be used to extract arguments from received messages.
- Return
- cisInput_t input queue structure.
- Parameters
name
: constant character pointer to name of queue.fmtString
: character pointer to format string.
-
static cisOutput_t
cisOutput
(const char *name)¶ Constructor for cisOutput_t output structure. Create a cisOutput_t structure based on a provided name that is used to locate a particular comm address stored in the environment variable name.
- Return
- cisOutput_t output queue structure.
- Parameters
name
: constant character pointer to name of queue.
-
static cisInput_t
cisInput
(const char *name)¶ Constructor for cisInput_t structure. Create a cisInput_t structure based on a provided name that is used to locate a particular comm address stored in the environment variable name.
- Return
- cisInput_t input queue structure.
- Parameters
name
: constant character pointer to name of queue.
-
static int
cis_send
(const cisOutput_t cisQ, const char *data, const size_t len)¶ Send a message to an output queue. Send a message smaller than CIS_MSG_MAX bytes to an output queue. If the message is larger, it will not be sent.
- Return
- int 0 if send succesfull, -1 if send unsuccessful.
- Parameters
cisQ
: cisOutput_t structure that queue should be sent to.data
: character pointer to message that should be sent.len
: size_t length of message to be sent.
-
static int
cis_send_eof
(const cisOutput_t cisQ)¶ Send EOF message to the output queue.
- Return
- int 0 if send successfull, -1 if unsuccessful.
- Parameters
cisQ
: cisOutput_t structure that message should be sent to.
-
static int
cis_recv
(const cisInput_t cisQ, char *data, const size_t len)¶ Receive a message from an input queue. Receive a message smaller than CIS_MSG_MAX bytes from an input queue.
- Return
- int -1 if message could not be received. Length of the received message if message was received.
- Parameters
cisQ
: cisOutput_t structure that message should be sent to.data
: character pointer to allocated buffer where the message should be saved.len
: const size_t length of the allocated message buffer in bytes.
-
static int
cis_send_nolimit
(const cisOutput_t cisQ, const char *data, const size_t len)¶ Send a large message to an output queue. Send a message larger than CIS_MSG_MAX bytes to an output queue by breaking it up between several smaller messages and sending initial message with the size of the message that should be expected. Must be partnered with cis_recv_nolimit for communication to make sense.
- Return
- int 0 if send succesfull, -1 if send unsuccessful.
- Parameters
cisQ
: cisOutput_t structure that message should be sent to.data
: character pointer to message that should be sent.len
: size_t length of message to be sent.
-
static int
cis_send_nolimit_eof
(const cisOutput_t cisQ)¶ Send EOF message to the output queue.
- Return
- int 0 if send successfull, -1 if unsuccessful.
- Parameters
cisQ
: cisOutput_t structure that message should be sent to.
-
static int
cis_recv_nolimit
(const cisInput_t cisQ, char **data, const size_t len)¶ Receive a large message from an input queue. Receive a message larger than CIS_MSG_MAX bytes from an input queue by receiving it in parts. This expects the first message to be the size of the total message.
- Return
- int -1 if message could not be received. Length of the received message if message was received.
- Parameters
cisQ
: cisOutput_t structure that message should be sent to.data
: character pointer to pointer for allocated buffer where the message should be stored. A pointer to a pointer is used so that the buffer may be reallocated as necessary for the incoming message.len
: size_t length of the initial allocated message buffer in bytes.
-
static comm_t
cisRpcClient
(const char *name, const char *outFormat, const char *inFormat)¶ Constructor for client side RPC structure. Creates an instance of cisRpc_t with provided information.
- Return
- cisRpc_t structure with provided info.
- Parameters
name
: constant character pointer to name for queues.outFormat
: character pointer to format that should be used for formatting output.inFormat
: character pointer to format that should be used for parsing input.
-
static comm_t
cisRpcServer
(const char *name, const char *inFormat, const char *outFormat)¶ Constructor for server side RPC structure. Creates an instance of cisRpc_t with provided information.
- Return
- cisRpc_t structure with provided info.
- Parameters
name
: constant character pointer to name for queues.inFormat
: character pointer to format that should be used for parsing input.outFormat
: character pointer to format that should be used for formatting output.
-
static int
vrpcCallBase
(const cisRpc_t rpc, const int allow_realloc, size_t nargs, va_list_t ap)¶ Send request to an RPC server from the client and wait for a response. Format arguments using the output queue format string, send the message to the output queue, receive a response from the input queue, and assign arguments from the message using the input queue format string to parse it.
- Return
- integer specifying if the receive was succesful. Values >= 0 indicate success.
- Parameters
rpc
: cisRpc_t structure with RPC information.allow_realloc
: int If 1, output arguments are assumed to be pointers to pointers such that they can be reallocated as necessary to receive incoming data. If 0, output arguments are assumed to be preallocated.nargs
: size_t Number of arguments contained in ap including both input and output arguments.ap
: va_list mixed arguments that include those that should be formatted using the output format string, followed by those that should be assigned parameters extracted using the input format string. These that will be assigned should be pointers to memory that has already been allocated.
-
static int
nrpcCallBase
(const cisRpc_t rpc, const int allow_realloc, size_t nargs, ...)¶ Send request to an RPC server from the client and wait for a response. Format arguments using the output queue format string, send the message to the output queue, receive a response from the input queue, and assign arguments from the message using the input queue format string to parse it.
- Return
- integer specifying if the receive was succesful. Values >= 0 indicate success.
- Parameters
rpc
: cisRpc_t structure with RPC information.allow_realloc
: int If 1, output arguments are assumed to be pointers to pointers such that they can be reallocated as necessary to receive incoming data. If 0, output arguments are assumed to be preallocated.nargs
: size_t Number of arguments contained in ap including both input and output arguments....
: mixed arguments that include those that should be formatted using the output format string, followed by those that should be assigned parameters extracted using the input format string. These that will be assigned should be pointers to memory that has already been allocated.
-
static comm_t
cisAsciiFileOutput
(const char *name)¶ Constructor for AsciiFile output comm to channel.
- Return
- comm_t for line-by-line output to a file or channel.
- Parameters
name
: constant character pointer to name of an output channel.
-
static comm_t
cisAsciiFileInput
(const char *name)¶ Constructor for AsciiFile input comm from channel.
- Return
- comm_t for line-by-line input from a file or channel.
- Parameters
name
: constant character pointer to name of an input channel.
-
static comm_t
cisAsciiTableOutput
(const char *name, const char *format_str)¶ Constructor for table output comm to an output channel.
- Return
- comm_t output structure.
- Parameters
name
: constant character pointer to output channel name.format_str
: character pointer to format string that should be used to format rows into table lines.
-
static comm_t
cisAsciiTableInput
(const char *name)¶ Constructor for AsciiTable input comm from an input channel.
- Return
- comm_t input structure.
- Parameters
name
: constant character pointer to input channel name.
-
static comm_t
cisAsciiArrayOutput
(const char *name, const char *format_str)¶ Constructor for table output comm with array output.
- Return
- comm_t output structure.
- Parameters
name
: constant character pointer to an output channel name.format_str
: character pointer to format string that should be used to format rows into table lines.
-
static comm_t
cisAsciiArrayInput
(const char *name)¶ Constructor for AsciiTable input comm with array input.
- Return
- comm_t input structure.
- Parameters
name
: constant character pointer to an input channel name.
-
static comm_t
cisPlyOutput
(const char *name)¶ Constructor for ply output comm to an output channel.
- Return
- comm_t output structure.
- Parameters
name
: constant character pointer to output channel name.
-
static comm_t
cisPlyInput
(const char *name)¶ Constructor for ply input comm from an input channel.
- Return
- comm_t input structure.
- Parameters
name
: constant character pointer to input channel name.
-
static comm_t
cisObjOutput
(const char *name)¶ Constructor for obj output comm to an output channel.
- Return
- comm_t output structure.
- Parameters
name
: constant character pointer to output channel name.
-
static comm_t
cisObjInput
(const char *name)¶ Constructor for obj input comm from an input channel.
- Return
- comm_t input structure.
- Parameters
name
: constant character pointer to input channel name.