lwres_lwpacket_renderheader, lwres_lwpacket_parseheader — lightweight resolver packet handling functions
#include <lwres/lwpacket.h>
lwres_result_t
lwres_lwpacket_renderheader( |
lwres_buffer_t * | b, |
| lwres_lwpacket_t * |
pkt) ; |
lwres_result_t
lwres_lwpacket_parseheader( |
lwres_buffer_t * | b, |
| lwres_lwpacket_t * |
pkt) ; |
These functions rely on a
struct lwres_lwpacket
which is defined in
lwres/lwpacket.h
.
typedef struct lwres_lwpacket lwres_lwpacket_t;
struct lwres_lwpacket { lwres_uint32_t length; lwres_uint16_t version; lwres_uint16_t pktflags; lwres_uint32_t serial; lwres_uint32_t opcode; lwres_uint32_t result; lwres_uint32_t recvlength; lwres_uint16_t authtype; lwres_uint16_t authlength; };
The elements of this structure are:
length
the overall packet length, including the entire packet header. This field is filled in by the lwres_gabn_*() and lwres_gnba_*() calls.
version
the header format. There is currently only one format, LWRES_LWPACKETVERSION_0. This field is filled in by the lwres_gabn_*() and lwres_gnba_*() calls.
pktflags
library-defined flags for this packet: for instance whether the packet is a request or a reply. Flag values can be set, but not defined by the caller. This field is filled in by the application wit the exception of the LWRES_LWPACKETFLAG_RESPONSE bit, which is set by the library in the lwres_gabn_*() and lwres_gnba_*() calls.
serial
is set by the requestor and is returned in all replies. If two or more packets from the same source have the same serial number and are from the same source, they are assumed to be duplicates and the latter ones may be dropped. This field must be set by the application.
opcode
indicates the operation. Opcodes between 0x00000000 and 0x03ffffff are reserved for use by the lightweight resolver library. Opcodes between 0x04000000 and 0xffffffff are application defined. This field is filled in by the lwres_gabn_*() and lwres_gnba_*() calls.
result
is only valid for replies. Results between 0x04000000 and 0xffffffff are application defined. Results between 0x00000000 and 0x03ffffff are reserved for library use. This field is filled in by the lwres_gabn_*() and lwres_gnba_*() calls.
recvlength
is the maximum buffer size that the receiver can handle on requests and the size of the buffer needed to satisfy a request when the buffer is too large for replies. This field is supplied by the application.
authtype
defines the packet level authentication that is used. Authorisation types between 0x1000 and 0xffff are application defined and types between 0x0000 and 0x0fff are reserved for library use. Currently these are not used and must be zero.
authlen
gives the length of the authentication data. Since packet authentication is currently not used, this must be zero.
The following opcodes are currently defined:
NOOP
Success is always returned and the packet contents are echoed. The lwres_noop_*() functions should be used for this type.
GETADDRSBYNAME
returns all known addresses for a given name. The lwres_gabn_*() functions should be used for this type.
GETNAMEBYADDR
return the hostname for the given address. The lwres_gnba_*() functions should be used for this type.
lwres_lwpacket_renderheader()
transfers the contents of lightweight resolver packet structure
lwres_lwpacket_t *pkt
in
network byte order to the lightweight resolver buffer,
*b
.
lwres_lwpacket_parseheader()
performs the converse operation. It transfers data in network
byte order from buffer *b
to resolver
packet *pkt
. The contents of the buffer
b
should correspond to a
lwres_lwpacket_t.


Gatekeeper Esmeralda:
I heard that there are many monsters wandering around the hunter's village. For those travelers who are tired and short of time, using the door of space and time that we gatekeepers open can be one of the best options
Teleport
Exchange Dimension Diamonds.
[Noblesse Exclusive] Teleport
Move to the Arena & Monster Race Track (Free).
Quest


Sapporo budgets ¥700 million in road repairs for Olympic events
SAPPORO – Sapporo proposed on Monday an additional supplementary budget of ¥700 million ($6.5 million) to its city assembly for road repair expenses, in preparation for the 2020 Olympic marathon and race walk events that were confirmed last month to be relocated to the city from Tokyo.
The city, which assessed that 8.7 km of the 10.7-km portion of event routes under its jurisdiction will require repairs, is aiming to complete the roadwork by the end of next May.
Only the first 20-km lap of the marathon course has been confirmed so far by the International Olympic Committee. Organizers plan to decide on routes for subsequent laps by the middle of December.
The IOC executive board agreed last Wednesday that the race walking event will make a round trip up and down the boulevard between Odori Park and Sapporo Station.
The assembly’s construction committee plans to commence repairs for roads related to Olympic events in early March, aiming to have repairs completed in time for the final inspection of the courses in June by World Athletics, the world governing body for track and field athletics.
An overlay construction method will be used to smooth out and repave the road surface, following requests from organizers that cracks be repaired to prevent athletes from injuring themselves or tripping, the city said.
GET THE BEST OF THE JAPAN TIMES IN FIVE EASY PIECES WITH TAKE 5
JOIN THE CONVERSATION


Visual hierarchy & layout
Imagine...
You're lost in india.
You made a judgement based on visual appearance.
Now imagine...
You're an employer at a big-time company.
Pick one employee.
|
|
You just proved that visual design matters.
Judgments based on substance require reader attention, so readers with limited attention are more likely to make judgments based on design.
- Matthew Butterick
Visual hierarchy
The layering of objects to provide an order for information.
Also known as:
Depth
Foreground / background
Figure / ground
Hold the eye of the viewer
Group analysis: George Seurat, "A Sunday Afternoon on the island of La Grand Jatte - 1884"
Contrast
Contrast: leads you to the figures
Rhythm
Rhythm: lines indicate two directions
Continuity
Continuity: figures are looking towards the same point
Closure
Closure: figures lead your eye in loops
Similarity
Similarity: smaller curves appear in the background
Balance
Balance: asymmetrical in foreground
Balance: asymmetrical in midground
Balance: asymmetrical in background
All these principles create visual hierarchy.
Keep these analysis techniques in mind...
Peer group activity
- 2 min: Observe
- 5 min: Identify
- 10 min: Analyze
- 10 min: Evaluate
A note on critique and feedback
"I like your piece" and "I don't like your piece"
"The piece uses similarity well. It creates a good visual hierarchy."
Critique sandwich
- Positive feedback
- Constructive feedback
- Positive feedback
Visual flow
Starts at top left
Visual flow
Usability tip:
Shorter lines are easier to read than longer lines.
Guideline:
Line length limit is 45–90 characters or 2–3 alphabets.
We know about element to element relationships.
Element to page
Dal bhat
Proportion of tokri to bhat?
Dal bhat plate: a kind of grid
Horizontal and vertical rules
White space
Using space to organize or highlight elements.
Loudness is an effective form of emphasis.
But so is silence.
- Matthew Butterick
Quiz!
How many squares do you feel are in this grid?
"I feel like this is right."
- any designer
"I am subconsciously using the principle of contrast to create depth."
- what they really mean
Design principles
Not just lines, but layers of shapes
Rule of thirds grid
Thirds in photography
Thirds in presentation
Thirds in presentations
Rule of thirds
Place elements along gridlines
Groups of three are inherently more interesting
(and funnier)
Individual activity
Make a landscape out of given objects in inkscape
- 10 min: Brainstorm at least 3 different compositions
- 5 min: Peer group discussion and brainstorming
- 5 min: Pick and refine one composition
Group discussion
Is the composition pleasing or interesting to look at?
Do the objects adhere to the grid of thirds?
"Trick" question!
"Golden" ratio grid
Non-example
Individual activity
Make a layout poster out of given items and golden ratio grid
- 2 min: Observe
- 5 min: Brainstorm
sketch 3+ ideas using different placements of golden grid
- 10 min: Mockup
create the grid/simple structure of the 3 ideas in inkscape
- 5 min: Peer discussion
narrow down to one idea
- 10min: Refinement
Group discussion
Is the composition pleasing or interesting to look at?
What features are interesting?
How did the piece utilize the golden ratio?
Proportions of subdivisions
Pleasing proportions don't have to be 'golden'
Review
Why is visual hierarchy important?
What kind of feedback should we give during critiques?
Why is proportion in layout useful?


ifference between fixed and fluid layouts
1000000000000000000000000sssssssss000
10000000
1000000000000000000000000000
10000000


Try out our Premium Member services: Virtual Legal Assistant, Query Alert Service and an ad-free experience. Free for one month and pay only if you like it.
IN THE HIGH COURT OF JUDICATURE AT PATNA Criminal Miscellaneous No.6785 of 2017 Arising Out of PS.Case No. -1 Year- 2016 Thana -GOVERNMENT OFFICIAL COMP. District- SITAMARHI ====================================================== Om Prakash Dhanuka son of Late Purshottam Lal Dhanuka Chairman cum Managing Director, Riga Sugar Company Ltd. (Distillery Division), resident of Dhanuka Gram, P.O. & P.S. - Riga, District - Sitamarhi. .... .... Petitioner/s Versus 1. The State of Bihar. 2. The Bihar State Pollution Control Board through Suresh Prasad Roy, Assistant Environmental Engineer, Patliputra Industrial Area, N.S. B - 2, District - Patna. .... .... Opposite Party/s ====================================================== Appearance : For the Petitioner/s : Mr. Y.V. Giri, Sr. Advocate Mr. Ashish Giri, Advocate For the Opposite Party/s : Mr. J.N. Thakur, APP ====================================================== CORAM: HONOURABLE MR. JUSTICE DINESH KUMAR SINGH ORAL ORDER
02/ 19-05-2017 The present application has been filed for quashing the order dated 19.11.2016 passed by learned Chief Judicial Magistrate, Sitamarhi in Complaint Case No. 01 of 2016, whereby process has been directed to be issued after cognizance being taken for the offences punishable under Sections 43 and 44 of the Water (Prevention & Control of Pollution) Act, 1974.
It is submitted by learned Senior Counsel for the petitioner that the complaint has been filed by an unauthorized person as Section 49(1)(a) of the Act clearly mandates that no court shall taken cognizance of an offence under the Act except on Patna High Court Cr.Misc. No.6785 of 2017 (2) dt.19-05-2017 2/2 a complaint made by the Board or any officer authorized in this behalf by the Board whereas in the present case the Board authorized Chairman to file complaint but the Chairman delegated the authorized power in favour of the complainant-opposite party no. 2, Assistant Environment Engineer which is in derogation to the provisions under Section 49(1)(a) of the Act. It is further submitted that accusations do not constitute any offence.
Mr. J. N. Thakur, learned counsel for the State prays for adjournment to file counter affidavit. It is also expected form the counsel for Pollution Board to file counter affidavit.
Put up this matter on 17th of July, 2017.
In the meantime, further proceedings of Complaint Case No. 01 of 2016 pending in the court of learned Chief Judicial Magistrate, Sitamarhi with regard to the petitioner shall remain stayed.
(Dinesh Kumar Singh, J) DKS/-
U T


Emotional intelligence is basically the ability to understand how things affect yours and other’s feelings and emotions. As well as how to manage them in positive ways to do things like relieve stress, communicate with others, and tackle challenges.
Well IQ is more about technical knowledge and intelligence of a subject/s whereas EQ is mainly the emotional and feelings side of things
EQ is important because IQ isn’t the only thing needed. Like for example someone may be the smartest person in the room but that doesn’t necessarily mean anyone will want to work with them. Whereas someone who may not be the smartest, but has a high emotional intelligence is someone people will want to work with.


WATCH: Stars react to seeing Winter Classic jersey for first time
by FOX Sports SouthwestThis is Winter Classic cool.
Cameras caught the reactions of several of the Dallas Stars players as they set their sights on the new jerseys the team will be wearing at the Cotton Bowl on January 1st when they face the Nashville Predators in the Winter Classic.
Old school, yet modern…head coach Jim Montgomery describes it perfectly.
Check out the video below:


My favorites
▼
|
Sign in
Your search -
label:asdasd lkjnhbvcx
- did not generate any results.
Powered by
Google Project Hosting


6th edition
Flashback
ThoughtWorks is pleased to have successfully hosted another edition of vodQA in Bangalore. This edition of vodQA, aimed at taking you to another level altogether, where you get a wider perspective of testing.
vodQA is a forum for testing enthusiasts, working on latest developments from the world of software testing. Here, one meets with old and new counterparts, exchanges ideas and learnings with the larger testing community.
For any further questions / suggestions write to us at:
<EMAIL_ADDRESS>8:45 AM
Registrations
9:15 AM
Event Kick Off
9:40 - 10:00 AM
Key Note Address
by Manish Kumar (ThoughtWorks)
10:05 - 10:45 AM
Track 1
The What, Why and How of Web Analytics Testing
by Anand Bagmar (ThoughtWorks)
View Presentation
Track 2
Visual Regression Testing with Galen
by Jyothy Mariam John & Rishabh Rao (ThoughtWorks)
View Presentation
10:45 - 11:00 AM
Tea Break
11:00 - 11:40 AM
Track 1
Test Automation Strategies for Legacy Systems
by Jayaprakash Puttaswamy (Aritha Consulting)
View Presentation
Track 2
Speed up your tests with Appium
by Sai Krishna (ThoughtWorks)
View Presentation
11:50 AM - 12:30 PM
Track 1
Data Analytics - Testing Spectrum
by Kokila Rudresh & Shalini Saini (ThoughtWorks)
View Presentation
Track 2
The Future of Mobile Automation Testing, appium steals it!!
by Srinivasan Sekar (TESCO)
View Presentation
12:30 - 1:20 PM
Lunch Break
1:30 - 1:45 PM
Lightning talk: Gauge from an end-user's perspective
by Fathima Harris (ThoughtWorks)
View Presentation
1:50 - 2:05 PM
Lightning talk: IoT Testing Trends
by Nalinikanth M (ThoughtWorks)
View Presentation
2:10 - 2:25 PM
Lightning talk: Mountebank
by Nagesh Kumar (ThoughtWorks)
View Presentation
2:25 - 2:40 PM
Tea Break
2:40 - 4:15 PM
Track 1
QA Consulting - An interactive discussion
by Pallipuspa Samal & Kokila Rudresh (ThoughtWorks)
Track 2
Workshop: Performance testing with Gatling for Beginners
by Shweta Hegde & Ashray Mehta (ThoughtWorks)
Track 3
Workshop: XSS - What the heck?! [Security testing hands-on]
by Harinee Muralinath & Karthik Krishnan (ThoughtWorks)
View Presentation
4:25 - 4:35 PM
Vote of Thanks
4:35 PM onwards
Networking
ThoughtWorks Technologies (India) Pvt. Ltd. ACR Mansion G + 3floors 147/F, 8th Main,3rdBlock Koramangala Bangalore-560034 « Open in Google Maps »


It's a perfect day for a picnic! Pack your basket with your favorite food and make sure you remember the order in which it was packed!
1) Create a background for your picnic game. You can use colors, images, and/or shapes.
2) Create a basket sprite and food sprites to put in the basket. Put the food sprites in random locations (not in the basket).
3) When a food sprite is clicked, have it move to a spot in the basket.
4) Create a new variable packed and set it to an empty list. Show packed on the screen. Every time a food sprite is clicked, add its name to the packed list. Make sure a name can only be added once.
5) If the basket is all packed, let the player know that he or she must unpack it.
6) When a packed food sprite is clicked, have it move out of the basket to a random location.
7) Create a new variable unpacked and set it to an empty list. Show unpacked on the screen. Every time a packed food sprite is clicked, add its name to the unpacked list. Make sure a name can only be added once.
8) Tell the player that he or she must unpack the basket in the same order it was packed.
9) Check to see if the order in which the basket is unpacked matches the order in which it was packed. If the order doesn't match up, let the player know and put all the food back in the basket.


Any University of Alberta student is welcome to join regardless of faculty or discipline. If you have an interest in robotics, planes, RC toys, imaging, electronics, computers, programming or just enjoying building things then you would fit right in. Please send us a message or click the link at the top of the page to be added to the mailing list and receive all of the updates on meeting and event times.
If you are interested in receiving e-mails about meetings and events, click here to subscribe to our mailing list. Use your CCID and password to login if prompted.
Alternatively, come to our weekly meetings at 5:00 PM on Tuesdays in ETLC E2-002 or e-mail us at joinuaarg@gmail.com.


This application acts as a bridge between Donors and NGOs, it helps the donor to donate unused medicines to NGOs and further, these medicines are utilized by a needy person. At this platform, NGOs can easily find their required donor in just a few clicks. They can easily contact each other.
Some times we have extra medicine which we never going to use in the future and it gets wasted, if we donate these medicines to the needy person that will be a great thing. So our application did the same job it provides Both NGOs and Donar a platform on which you can fill the details of the extra medicine like its name, company name, manufacturing date, expiry date, and if you want you can upload the photo of it and further process is handled by our application to connect that donor to the needy / NGOs, which they further use to save someone's life.
Learn moreDream it. Wish it. Do it.

Developer
Unleash the potential that is in another and you unleash the potential that is in you
Developer
When you do some good work and if it inspires others, then you have just created the ripple effect.
Developer
The harder you work for something, the greater you’ll feel when you achieve it.


Source
(defun replace-slot-index (rucksack class slot index-spec unique-p)
;; We have an index but need a different one now. This requires
;; some care because we need to re-index all objects from the old
;; index.
(let ((current-index (rucksack-slot-index rucksack class slot))
(new-index (rucksack-add-slot-index rucksack class slot
index-spec
unique-p
:errorp nil)))
;; Re-index all objects for the new index.
;; DO: This re-indexing can cause an error (e.g. if the old
;; index has non-unique keys, the new index has unique keys
;; and some keys occur more than once). We need to handle
;; that error here and offer some decent restarts (e.g.
;; remove the index entirely, or go back to the old index).
(map-index current-index
(lambda (slot-value object)
(index-insert new-index slot-value object)))
;; We don't need to remove the old index explicitly, because
;; RUCKSACK-ADD-SLOT-INDEX already did that for us.
))
Source Context


Split that bill is an app borne out of a desire to simply the process of splitting bill items amongst friends.
The app provides facilities for conveniently managing bill details, bill items, extra charges as well as the all-important function of splitting the said items to participating friends. You can read more about the features here.
From a technical perspective, this also serves as a personal showcase of the author's capabilities with new and exciting technologies like Angular, .Net Core and EF Core, among others. This forms part of a bigger collection of highly-usable and uber-creative apps under TensileForm, a software development initiative started by the same author.


|
The
Intel® Server Board SBT2 is a high-performance dual Intel®
Pentium® III Xeon processor-based server board designed
for departmental and e-Business infrastructure. Engineered for medium-sized
business and workgroup environments, the SBT2 is highly expandable.
It is an excellent choice for high-availability e-Business applications
such as Web, database, departmental, and messaging servers.
Click the Intel® SBT2 Server Board image or any of the links
below the above rule to get more in-depth information about this component. |
|


HOT ADS
California's Collection
Sweet new collection, mexican ilustrator artist Daniela California present a new award winner summer collection inspired in pop culture.
Dry Technology, It works driving the humidity to the surface of the garnment, and evaporating it.
This garnment is made with 12 waste bottles.
By Dani California
Limited Pieces
Purchase Details
Tops
Dani California's collection & basic
Empathy is Punk 1
Recycled Fabric
Made in:
Mexico
$25.00
Empathy is Punk 2
Recycled Fabric
Made in:
Mexico
$25.00
Basic Top
Recycled Fabric
Made in:
Mexico
$20.00
T-shirts
Panda Rojo's collection
FT T-shirt
Organic Cotton
Made in:
Mexico
$30.00
Inspired T-shirt
Organic Cotton
Made in:
Mexico
$30.00
No problem T-shirt
Recycled Fabric
Made in:
Mexico
$30.00
Sunset Blvd. T-shirt
Organic Cotton
Made in:
Mexico
$30.00
B-women T-shirt
Organic Cotton
Made in:
Mexico
$30.00
Stripes T-shirt
Organic Cotton
Made in:
Mexico
$30.00
T-shirts
Bkinga's collection
Planet Kitty Baby T-shirt
Recycled Cotton
Made in:
Mexico
$27.00
Astro Kitty Baby T-shirt
Recycled Cotton
Made in:
Mexico
$27.00
Hakuna Matata T-shirt
Recycled Cotton
Made in:
Mexico
$28.00
Batt into Kitty T-shirt
Recycled Cotton
Made in:
Mexico
$28.00
Mini-Skull T-shirt
Recycled Cotton
Made in:
Mexico
$30.00
Miau T-shirt
Recycled Cotton
Made in:
Mexico
$30.00


The continuation token to start from.
This is equivalent to the etag and continuation value from the ChangeFeedResponse
Max amount of items to return per page
The session token to use. If not specified, will use the most recent captured session token to start with.
Signals whether to start from the beginning or not.
Specified the start time to start reading changes from.
Generated using TypeDoc
Specifies options for the change feed
Some of these options control where and when to start reading from the change feed. The order of precedence is:
If none of those options are set, it will start reading changes from the first
ChangeFeedIterator.executeNext()
call.


| User | Recorded payments |
|---|---|
| {{ recordedCount.userFullName }} | {{ recordedCount.count }} |
| User | Role | Carry Forward | Validated payments | Yet to submit | Submitted | Carry forward | Ready to review |
|---|---|---|---|---|---|---|---|
| {{ feeClerk.userFullName }} | {{ feeClerk.userRole }} | 0 | {{ feeClerk.validatedPayments }} | 0 | {{ feeClerk.submitted }} | 0 | {{ feeClerk.readyToReview }} |
| User | Role | Reviewed | Rejected | Approved | Carry forward | Ready to transfer to BAR |
|---|---|---|---|---|---|---|
| {{ seniorFeeClerk.userFullName }} | {{ seniorFeeClerk.userRole }} | {{ seniorFeeClerk.rejected + seniorFeeClerk.approved }} | {{ seniorFeeClerk.rejected }} | {{ seniorFeeClerk.approved }} | 0 | {{ seniorFeeClerk.readyToTransferToBar }} |
| User | Role | Reviewed | Rejected | Transferred to BAR |
|---|---|---|---|---|
| Totals | - | 0 | 0 | {{ total }} |
| {{ deliveryManager.userFullName }} | {{ deliveryManager.userRole }} | 0 | 0 | {{ deliveryManager.readyToTransferToBar }} |


This is a Palindrome page
Welcome to Palindrome Checker! A palindrome is a phrase that is spelled the same way, backwards and forwards (ignoring spacing and punctuation; only alphanumeric characters matter). For example:
- Was it a cat I saw?
This is very exciting, isn't it?!


PEEKFD
Section: User Commands (1)Updated: APRIL 2007
Index Return to Main Contents
NAME
peekfd - peek at file descriptors of running processesSYNOPSIS
peekfd [-8,--eight-bit-clean] [-n,--no-headers] [-f,--follow] [-d,--duplicates-removed] [-V,--version] [-h,--help] pid [fd] [fd] ...DESCRIPTION
peekfd attaches to a running process and intercepts all reads and writes to file descriptors. You can specify the desired file descriptor numbers or dump all of them.OPTIONS
- -8
- Do no post-processing on the bytes being read or written.
- -n
- Do not display headers indicating the source of the bytes dumped.
- -c
- Also dump the requested file descriptor activity in any new child processes that are created.
- -d
- Remove duplicate read/writes from the output. If you're looking at a tty with echo, you might want this.
- -v
- Display a version string.
- -h
- Display a help message.
FILES
/proc/*/fd- Not used but useful for the user to look at to get good file descriptor numbers.
ENVIRONMENT
None.DIAGNOSTICS
The following diagnostics may be issued on stderr:Error attaching to pid ...
- An unknown error occured while attempted to attach to a process.. you may need to be root.
BUGS
Probably lots. Don't be surprised if the process you are monitoring dies.AUTHOR
Trent Waddington<EMAIL_ADDRESS>ALSO
ttysnoop(8)
Index
This document was created by man2html, using the manual pages.
Time: 05:29:07 GMT, December 24, 2015


Eco Lab has a deliberate policy of not having a dependency on
Boost, but to be as compatible with Boost as far as it is
possible. The Eco Lab graph library has been designed to be
interoperable with the Boost Graph Library. The file
test/test_boostgraph.cc
gives some examples of interoperation
with Boost.


--- layout: post status: publish published: true title: Lisp and other Languages author: display_name: Tomas Restrepo login: tomasr email<EMAIL_ADDRESS>url: http://winterdom.com/ author_login: tomasr author_email<EMAIL_ADDRESS>author_url: http://winterdom.com/ wordpress_id: 353 wordpress_url: http://winterdom.com/2002/05/lispandotherlanguages date: '2002-05-24 13:25:33 +0000' date_gmt: '2002-05-24 13:25:33 +0000' categories: - Development tags: [] comments: [] ---
I just read this discussion between Paul Prescod and Paul Snively regarding Python and several other programming languages.
I find this kind of discussions quite interesting for two reasons: 1) Programming Languages and Compiler design is one of the topics I really like in Computer Science, and 2) they make some very intriguing comparisions between different languages and Lisp. For quite a while I've wanted to get acquainted with other programming languages like Python and Scheme, but so far, I haven't had the time to do so... there's just so many hours each day, ya know. I'd love it if anyone had any pointers on these, though!
On a related issue. Paul Graham has a very nice article on Lisp and other languages entitled "Revenge of the Nerds". I must admit that while although I've always been intrigued by the power of Lisp, I find the syntax just plain horrible... particularly since I discovered that I couldn't understand crap of what I had written in Lisp half an hour after doing it...


Flying High: Hobbyist OpenGL from Python
This is a transcript-from-memory (what I wish I'd said) of the talk I just gave at EuroPython 2010, for which I owe a debt of gratitude to Richard Jones for his last-minute moral support while wrestling with projectors and refresh rates; and to the whole team of hard-working volunteers, especially John Pinner & Richard Taylor, who gave so much time and effort to make EuroPython in the UK brilliant once again.
The demonstrated code is available at https://github.com/tartley/gloopy
With this talk I want to give an overview of creating 3D graphics in OpenGL from Python. Instead of covering topics already covered by a thousand OpenGL tutorials, I want to shift attention towards some ideas of how to generate the input to your renderer - how to algorithmically create geometry. I'll show that with just a paltry few hundred lines of relatively simple code, you can generate some interestingly chunky shapes - virtual sculptures, if you will. Since this talk has the word hobbyist in the title, I want to emphasise how easy this is, and I want to have some fun with the pretty pictures.
Out of interest, how many people here are already expert OpenGL users (a few hands hesitantly go up, then some think about it and go down again) err, I mean how many have already used OpenGL to do anything at all (about half the people raise their hand.)
Inspirations
As the field of computer graphics advances, there's an understandable tendency for more photorealism, This is laudable, but I also feel that the effort expended on achieving this technical goal is often undertaken without considering whether photorealism is the best aesthetic choice for a particular project.
In the past, games and other applications adopted particular visual styles out of technical necessity. As is often the case, these restrictions resulted in a diverse blossoming of creative ideas, producing an enormous set of distinctive visual styles and experiences.
Crucially, the most successful and memorable examples of these were projects that found ways to work in harmony with the restrictions of the medium, rather than attempting to gloss over them.
Advances in computing power and technique provide modern games and applications with a far wider range of options in how to present themselves visually, and yet the greater proportion of them seem content with a conventional and unimaginative 'near-photorealistic' appearance. This disappoints me, because I feel that projects that opt for a more highly stylised look, when appropriately chosen, can create a vastly more striking and memorable artistic experiences. This is true in movies and all kinds of art.
As an amateur graphics programmer, I don't have large resources nor much experience to throw at the problem, so my options and my abilities are limited. But, like a good artist, I believe it should still be possible to create things that are both strikingly beautiful and highly functional, either by working with the restrictions of the medium, or by finding creative ways to exploit or extend them.
In particular, the kind of minimal, clean-lined aesthetic that amateur OpenGL programs take on by default are useful for their crisp precision, as charting and visualisation tools. But above that, I love them for their stark minimalism, their clean lines and homogeneous fields of colour.
I wish more professional game developers had an incentive to aim for less conventional aesthetics - whether they be deliberately retro, or else striking out in some new direction of their own. It's that brave minority of projects which do this which form my inspiration.
Starting Point
I'm assuming we already have a minimal OpenGL application, that:
- Opens a window
- Provides an OpenGL context for us to render to
- Sets appropriate 3D projection matrix
- Sets the initial modelview matrix state based on the position and orientation of a 'camera' object
- Calls our empty 'draw' function once per monitor refresh.
This results in a blank screen, at 60fps. Here's a screenshot, so you can see exactly what it's doing:
I'm using pyglet & PyOpenGL for this, but this isn't important. Any framework that provides the above abilities, such as PyGame, along with bindings to OpenGL, will be just fine. Whichever framework you use, this minimal application might take on the order of about 150 lines of code, and is covered in countless tutorials all over the web.
From here on in I plan to show (or at least describe) pretty much all of the code that I add on top of this minimal OpenGL loop.
Goal
To begin with, I'm going to lead you as quickly as I can through a Shape class, that model 3D shapes, in a way useful for the creation of geometry, and then a Glyph class that converts these geometries into arrays for OpenGL. Finally these arrays get passed into a Render class, which simply calls glDrawElements to render them.
Once the above infrastructure is in place, we can have some fun generating interesting shapes to make pretty pictures with. The conventional way to provide geometry to your OpenGL code is by loading your data from files. Today though, I want to stick with generating geometry from code, to see where that leads.
Modelling Polyhedra
A polyhedron is a 3D shape with flat faces and straight edges. We can model coloured polyhedra using a simple Shape class:
Vec3 = namedtuple('Vec3', 'x y z') Color = namedtuple('Color', 'r g b a') class Shape(object): def __init__(self, vertices, faces, face_colors): # list of Vec3s self.vertices = vertices # list of faces, each face is a list of indices into 'vertices' self.faces = faces # List of colors, one per face self.face_colors = face_colors
An instance of this class, for example, might represent a yellow cube, or a tetrahedron with green and black faces, or any other coloured polyhedron we can imagine.
To demonstrate how classes Shape, Glyph and Render hang together, let's examine an even simpler example, a yellow triangle joined to a red square:
You can see this geometry features five vertices (v0 to v4), which are used by the two faces. This might be represented by an instance of Shape:
v0 = Vec3( 1, 1, 0) v1 = Vec3( 1, -1, 0) v2 = Vec3(-1, -1, 0) v3 = Vec3(-1, 1, 0) v4 = Vec3( 1, 0, 2) red = Color(255, 0, 0, 255) yellow = Color(255, 255, 0, 255) shape = Shape( vertices=[v0, v1, v2, v3, v4], faces=[ [2, 3, 4], # f0, triangle [0, 1, 2, 3], # f1, square ], face_colors=[red, yellow], )
The integers in the 'faces' member are indices into the vertices list. So the triangular face, for example, is formed by linking vertices 2, 3 and 4.
Step 1. Creating a Ctypes Vertex array
In order to render our Shape, we need to convert it to some ctypes arrays that OpenGL will eat:
- glvertices - an array of GLfloats (three for each vertex)
- glindices - an array of GLubytes (one for each index of each face)
- glcolors - an array of GLubytes (four for each vertex)
To generate glvertices, we need to dereference the indices in Shape.faces, to produce a new list of vertices, rearranged into the order they are going to be drawn:
The most visible aspect of this change is that the vertices are re-ordered, such that the indices now simply read '0, 1, 2, 3, 4, 5...'. However that isn't actually necessary. The important part of this transformation is that vertices which are re-used are now duplicated in the vertex list. For example v0 now occurs twice. As a result of this vertex duplication, one the two instances of '0' in the faces lists now instead reads '3' (referencing the new second copy of v0).
This duplication of vertices is required, because when v0 is used for the first time, it is as part of the red triangle, and when it is used the second time it is as part of the yellow square. The color of the vertex changes from one occurrence to the next. All the attributes of a vertex (position, color, texture co-ords, normals, etc) are treated as an atomic unit, so whenever any attribute changes, as the color is changing here, the vertex position needs to be redundantly specified again, so as to create a new unique vertex with its own unique attribute values. Even if the color of v0 in our example was identical for each use, we will see later that other vertex attributes such as surface normals will still differ. Don't sweat trying to eliminate these redundancies, they are necessary, unless every single attribute of the re-used vertex (including surface normals) are identical.
The code in Glyph.get_glverts() performs this dereferencing step:
class Glyph(object): def get_glverts(self, shape, num_glverts): glverts = chain.from_iterable( shape.vertices[index] for face in shape.faces for index in face ) ArrayType = GLfloat * (num_glverts * 3) return ArrayType(*glverts)
This uses a generator to produce the vertices in the order that we need them. 'ArrayType' shows the standard idiom to create a ctypes array - we take the datatype of the array elements, in this case GLfloat since our vertex positions consist of three floats, and multiply it by the required length of the array. This yields a new array type. The final return statement instantiates this array type using the data supplied by the glverts generator.
Step 2. Creating Ctypes Index Arrays
The second job Glyph has to do is create a ctypes indices array, which is derived from the Shape's faces. In doing this, it has to break the Shape's faces down into individual triangles.
The vertex list is unchanged by this step, and the first face - the triangle - is also unchanged. The second face, the square, has been broken into two triangles.
There are well-known algorithms for breaking an arbitrary polygon down into individual triangles. Using the utility functions found in the GLU library, this can be done in about 150 lines of Python. But in the interests of keeping it simple, I decided to restrict our code to just handling convex faces. Tessellating these faces can be done using a considerably simpler algorithm:
def tessellate(face): ''' Break the given face into triangles. e.g. [0, 1, 2, 3, 4] -> [[0, 1, 2], [0, 2, 3], [0, 3, 4]] Does not work on concave faces. ''' return ( [face[0], face[i], face[i + 1]] for i in xrange(1, len(face) - 1) )
We again use a generator, to simply join up the face's first vertex with all the other vertices, like this:
Now we have our tessellate function, Glyph can now create the glindices array in much the same way as it generated the glvertices. I wasn't smart enough to write this as a generator first time around, I presume it would require more than one generator to do it (anyone?), so I'm needlessly creating an in-memory copy of the sequence, but it turns out I need to take its length right afterwards anyway, so what the heck:
class Glyph(object): def get_glindices(self, faces): glindices = [] face_offset = 0 for face in faces: indices = xrange(face_offset, face_offset + len(face)) glindices.extend(chain(*tessellate(indices))) face_offset += len(face) ArrayType = GLubyte * len(glindices) return ArrayType(glindices)
This is more complex than get_glvertices because it is performing both of the transformations described in steps 1 and 2. But it's still pretty straightforward. Note that the type of the index array will have change from GLubytes to GLushorts (or GLuints) if the number of vertices rises above 256 (or 65,536.)
Step 3. Creating Ctypes Color Arrays
Finally, we need an array of vertex colors. This is the simplest of the lot, generated by repeating the face_color for each face, once per vertex:
class Glyph(object): def get_glcolors(self, faces, face_colors, num_glvertices): glcolors = chain.from_iterable( repeat(color, len(face)) for face, color in izip(faces, face_colors) ) ArrayType = GLubyte * (num_glvertices * 4) return ArrayType(chain(*glcolors))
First Light
It's might seem like a teensy bit of a slog to get here, but it hasn't been more than sixty lines of code, and now we're in a position to pass our ctypes arrays into OpenGL's drawElements. This happens in our Render.draw() method:
class Render(object): def draw(self, world): for item in world: glVertexPointer(3, GL_FLOAT, 0, item.glyph.glvertices) glColorPointer(4, GL_UNSIGNED_BYTE, 0, item.glyph.glcolors) # TODO: handle the item's position and orientation glDrawElements( GL_TRIANGLES, len(item.glyph.glindices), GL_UNSIGNED_BYTE, item.glyph.glindices )
This is canonical OpenGL render code, so I'm not going to dissect it, but now we get some actual visible output:
Hooray! \o/ We can move our camera position around, and view this 3D object from different angles.
There's a minor wrinkle here that I'm glossing over. I've turned on backface culling, so the triangle and square aren't visible if we view them from the back. For all our future examples I plan on using closed polyhedra, so we won't be able to see the 'backs' of the faces - those will be on the inside of the polyhedron.
The Fun Stuff
So now we've got all our infrastructure in place, we can start creating factory functions to churn out some Shapes. Let's start with something straightforward, a tetrahedron (triangle-based pyramid):
def Tetrahedron(edge, face_colors=None): size = edge / sqrt(2)/2 vertices = [ (+size, +size, +size), (-size, -size, +size), (-size, +size, -size), (+size, -size, -size), ] faces = [ [0, 2, 1], [1, 3, 0], [2, 3, 1], [0, 3, 2] ] return Shape(vertices, faces, face_colors)
Which produces a tetrahedron:
Then a cube factory:
def Cube(edge, face_colors=None): e2 = edge / 2 verts = list(itertools.product(*repeat([-e2, +e2], 3))) faces = [ [0, 1, 3, 2], # left [4, 6, 7, 5], # right [7, 3, 1, 5], # front [0, 2, 6, 4], # back [3, 7, 6, 2], # top [1, 0, 4, 5], # bottom ] return Shape(verts, faces, face_colors)
The six faces are quite evident, but the use of itertools.product to produce the list of vertices perhaps deserves a bit of exposition. It's an inspired tip from Î¤Î–Î©Î¤Î–Î™ÎŸÎ¥. Just to spell it out in longhand:
>>> from itertools import repeat, product >>> list(product(*repeat([-1, +1], 3))) [(-1, -1, -1), (-1, -1, 1), (-1, 1, -1), (-1, 1, 1), (1, -1, -1), (1, -1, 1), (1, 1, -1), (1, 1, 1)]
So there are the eight vertices of the cube, and that gets us the following:
We can add a few more vertices and faces, to make ourselves a truncated cube:
Once we've got truncated cubes, we might as well add one last face to form the entrance:
There's nothing to stop us adding several of these shapes into the world at once, but since we haven't yet moved any of them away from the origin, they just sit there, embedded within one another:
Moving objects around
In our earlier Render.draw() method, we left a 'TODO' comment in place, to note that we weren't yet handling item positions and orientations. Here's what Render.draw looks like when we fill that code in:
class Render(object): def draw(self, world): for item in world: glVertexPointer(3, GL_FLOAT, 0, item.glyph.glvertices) glColorPointer(4, GL_UNSIGNED_BYTE, 0, item.glyph.glcolors) glPushMatrix() glTranslatef(*item.position) glMultMatrixf(item.orientation.matrix) glDrawElements( GL_TRIANGLES, len(item.glyph.glindices), GL_UNSIGNED_BYTE, item.glyph.glindices ) glPopMatrix()
Again, this is very standard OpenGL usage. To set an item's position attribute, I'm going to use a bit of code that I already snuck into the demo without telling you about. It's the code that moves the camera around in space. A simplified version is here, class Orbit, which will return a new position each time it gets called. The locus of this position is an orbit around the origin:
class Orbit(object): def __init__(self, distance, speed, phase=None): self.distance = distance self.speed = speed if phase is None: phase = random.uniform(0, 2 * pi) self.phase = phase def __call__(self, time): bearing = time * self.speed + self.phase x = self.distance * math.sin(bearing) z = self.distance * math.cos(bearing) return Vec3(x, 0, z)
The actual camera uses a slightly longer version I call WobblyOrbit (not shown), which operates in exactly the same way. Any 'mover' class, i.e. one that returns a Vec3 position when called, can be used to move the camera, or any other item, around in space:
class GameItem(object): def __init__(self, ** kwargs): self.__dict__.update(** kwargs) world.add( GameItem( shape=Cube(1, repeat(red)), mover=Orbit(distance=20, speed=4), ) ) # then, in world.update(): for item in self.items: if item.mover: item.position = item.mover(self.time)
Similarly, we can spin items using 'spinner' classes, that tweak an item's orientation as time goes by.
With these all in place, we can now add many Shapes to the world, each moving and rotating independently:
Next week: Composite Shapes...
This is all great as far as it goes, but it turns out we have a performance problem. Adding more than about 450 shapes at once starts to slow down below 60fps (This is all on my trusty 2005-era Thinkpad T60 laptop.) The bottleneck turns out to be in our Render.draw() loop. Each of those OpenGL functions are from (wrappers around) the OpenGL C library, and calling across the Python / C boundary like this incurs a per-function call overhead. Also, a second looming problem is that creating more interesting shapes is going to become more onerous and error-prone, as we create longer and more complex lists of vertices and faces in our code.
One partial solution to both these problems is to use composite shapes, in which we can compose many copies of our basic shapes into one single, more complex shape. This will allow us to use algorithmic means to produce more fun geometry, and will also help us draw more complex shapes, composed of many simpler shapes, without requiring several separate OpenGL function calls for each of the simple shapes.


Octane benchmarks
Raw numbers
The experiment compares 5 configurations per benchmark:
-
Default: Plain TypeScript compiler output
-
Safe: Safe TypeScript compiler output (with instrumented runtime checks)
-
Safe Optimized: Safe TypeScript compiler output, uses inlined runtime checks
-
Weak Map: Safe TypeScript compiler output, uses a separate Weak Map to maintain RTTI tags
-
TS*: Safe TypeScript compiler output, uses an eager tagging strategy
For each benchmark, we report arithmetic mean and margin of error for both typed and untyped versions of the benchmark. All times are in seconds.
Running times for Octance benchmarks. All times are in seconds.
|
Default |
Safe |
Safe Optimized |
Weak Map |
TS* |
|
Mean | MOE |
Mean | MOE |
Mean | MOE |
Mean | MOE |
Mean | MOE |
include(data.html)
Comparative slowdowns
Following table shows the percentage slowdowns of each configuration.
Slowdown for each configuration. Negative numbers indicate speedups.
|
Safe (w.r.t. Default) |
Safe Optimized (w.r.t. Safe) |
Weak Map (w.r.t. Safe) |
TS* (w.r.t. Safe) |
include(slowdowns.html)


Posted on August 15, 2020 at 12:00 PM
University Centre Peterborough (UCP) are committed to providing an outstanding, supportive academic experience for all our students. The safety and wellbeing of our students and staff is at the heart of everything we do, and because of this we’ll continue to follow the guidance from the OfS (Office for Students), Public Health England (PHE) and the DfE (Department of Education).
The situation we are in is unprecedented, but our primary focus is to ensure that you can progress on your course and realise your ambitions. The detail below should reassure you about the steps we are taking to ensure this.
We will be consulting with you on your preferences and responding to any queries you have in the form of a FAQ which will soon be published on our website.
Courses involving practical assessments and learning such as science-based provision may have a higher percentage of face-to-face content in semester one.
It will be our intention to return to face-to-face delivery as soon as it is safe to do so.
In the forthcoming weeks we will communicate specific course related information to applicants. This page contains the latest information which we will update with an FAQ as the situation continues to evolve.
Please stay safe and do contact us if you require further guidance. The UCP team are here to help and we are very much looking forward to you studying with us in September.


AHackerWebA simply readable Hacker News web app.
AngularJS refactoring of HackerWeb, an HTML5 application developped by Cheeaun
Rewritten by Guillaume Biton.
Original Built by Lim Chee Aun.Not affiliated with Hacker News or YCombinator.


$ whoami Jonas Ferry $ git config --get user.email<EMAIL_ADDRESS>$ echo $HOME Stockholm, Sweden $ jobs [3] 2012 <Running> Information Engineer at Sigma Technology [2] 2011 <Stopped> FPGA consultant at ORSoC [1] 2008 <Stopped> ASIC designer at RUAG Space $ history 1979 was born 1996 became vegetarian 1998 performed military service 1999 started philosophy studies at the university 2000 started master of science in information technology 2006 published role-playing games 2007 became vegan & got married & published short stories 2008 delivered baby 2009 received master of science degree in IT/socware 2012 had baby delivered 2014 published role-playing games 2021 published spaceoban $ ls bookmarks.htm passwords.txt README $ cat bookmarks.htm http://www.linkedin.com/in/jonasferry https://github.com/jonasferry http://www.icheckmovies.com/profile/jonas+ferry/ http://jonasferry.com/ferryhack.htm http://jonasferry.com/spaceoban.html $ _


Take grocery store to mobile. Easily create a marketplace by adding more sellers. The solution has two mobile apps one is for customers and another one is for sellers and for people involved in order fulfillment. Customers can see feed of products, place an order and track the order. Sellers can see and manage their orders, send push notifications and messages automatically. Sellers can handle all of their business through the mobile app itself. All the options to manage orders, update inventory and product data, update delivery slots and adding employees are there. Everything is highly customizable.


module Concurrent
{include:file:README.md}
@!macro thread_safe_variable_comparison
## Thread-safe Variable Classes Each of the thread-safe variable classes is designed to solve a different problem. In general: * *{Concurrent::Agent}:* Shared, mutable variable providing independent, uncoordinated, *asynchronous* change of individual values. Best used when the value will undergo frequent, complex updates. Suitable when the result of an update does not need to be known immediately. * *{Concurrent::Atom}:* Shared, mutable variable providing independent, uncoordinated, *synchronous* change of individual values. Best used when the value will undergo frequent reads but only occasional, though complex, updates. Suitable when the result of an update must be known immediately. * *{Concurrent::AtomicReference}:* A simple object reference that can be atomically. Updates are synchronous but fast. Best used when updates a simple set operations. Not suitable when updates are complex. {Concurrent::AtomicBoolean} and {Concurrent::AtomicFixnum} are similar but optimized for the given data type. * *{Concurrent::Exchanger}:* Shared, stateless synchronization point. Used when two or more threads need to exchange data. The threads will pair then block on each other until the exchange is complete. * *{Concurrent::MVar}:* Shared synchronization point. Used when one thread must give a value to another, which must take the value. The threads will block on each other until the exchange is complete. * *{Concurrent::ThreadLocalVar}:* Shared, mutable, isolated variable which holds a different value for each thread which has access. Often used as an instance variable in objects which must maintain different state for different threads. * *{Concurrent::TVar}:* Shared, mutable variables which provide *coordinated*, *synchronous*, change of *many* stated. Used when multiple value must change together, in an all-or-nothing transaction.
TODO (pitr-ch 14-Mar-2017): deprecate, Future
, Promise
, etc.
Constants
- ArrayImplementation
@!macro internal_implementation_note
- AtExit
@see
AtExitImplementation
@!visibility private- AtomicBooleanImplementation
@!visibility private @!macro internal_implementation_note
- AtomicFixnumImplementation
@!visibility private @!macro internal_implementation_note
- AtomicReferenceImplementation
@!macro internal_implementation_note
- CancelledOperationError
Raised when an asynchronous operation is cancelled before execution.
- ConfigurationError
Raised when errors occur during configuration.
- CountDownLatchImplementation
@!visibility private @!macro internal_implementation_note
- Error
- ExchangerImplementation
@!visibility private @!macro internal_implementation_note
- GLOBAL_FAST_EXECUTOR
@!visibility private
- GLOBAL_IMMEDIATE_EXECUTOR
@!visibility private
- GLOBAL_IO_EXECUTOR
@!visibility private
- GLOBAL_LOGGER
@!visibility private
- GLOBAL_MONOTONIC_CLOCK
Clock that cannot be set and represents monotonic time since some unspecified starting point.
@!visibility private
- GLOBAL_TIMER_SET
@!visibility private
- HashImplementation
@!macro internal_implementation_note
- IllegalOperationError
Raised when an operation is attempted which is not legal given the receiver's current state
- ImmutabilityError
Raised when an attempt is made to violate an immutability guarantee.
- InitializationError
Raised when an object's methods are called when it has not been properly initialized.
- LifecycleError
Raised when a lifecycle method (such as `stop`) is called in an improper sequence or when the object is in an inappropriate state.
- MaxRestartFrequencyError
Raised when an object with a start/stop lifecycle has been started an excessive number of times. Often used in conjunction with a restart policy or strategy.
- NULL
Various classes within allows for
nil
values to be stored, so a specialNULL
token is required to indicate the “nil-ness”. @!visibility private- NULL_LOGGER
Suppresses all output when used for logging.
- PromiseExecutionError
- RejectedExecutionError
Raised by an `Executor` when it is unable to process a given task, possibly because of a reject policy or other internal error.
- ResourceLimitError
Raised when any finite resource, such as a lock counter, exceeds its maximum limit/threshold.
- SemaphoreImplementation
@!visibility private @!macro internal_implementation_note
- SetImplementation
@!macro internal_implementation_note
- SingleThreadExecutorImplementation
- ThreadLocalVarImplementation
@!visibility private @!macro internal_implementation_note
- ThreadPoolExecutorImplementation
- TimeoutError
Raised when an operation times out.
- VERSION
Public Class Methods
Abort a currently running transaction - see `Concurrent::atomically`.
# File lib/concurrent/tvar.rb, line 150 def abort_transaction raise Transaction::AbortError.new end
Run a block that reads and writes `TVar`s as a single atomic transaction. With respect to the value of `TVar` objects, the transaction is atomic, in that it either happens or it does not, consistent, in that the `TVar` objects involved will never enter an illegal state, and isolated, in that transactions never interfere with each other. You may recognise these properties from database transactions.
There are some very important and unusual semantics that you must be aware of:
-
Most importantly, the block that you pass to atomically may be executed
more than once. In most cases your code should be free of side-effects, except for via TVar.
-
If an exception escapes an atomically block it will abort the transaction.
-
It is undefined behaviour to use callcc or Fiber with atomically.
-
If you create a new thread within an atomically, it will not be part of
the transaction. Creating a thread counts as a side-effect.
Transactions within transactions are flattened to a single transaction.
@example
a = new TVar(100_000) b = new TVar(100) Concurrent::atomically do a.value -= 10 b.value += 10 end
# File lib/concurrent/tvar.rb, line 93 def atomically raise ArgumentError.new('no block given') unless block_given? # Get the current transaction transaction = Transaction::current # Are we not already in a transaction (not nested)? if transaction.nil? # New transaction begin # Retry loop loop do # Create a new transaction transaction = Transaction.new Transaction::current = transaction # Run the block, aborting on exceptions begin result = yield rescue Transaction::AbortError => e transaction.abort result = Transaction::ABORTED rescue Transaction::LeaveError => e transaction.abort break result rescue => e transaction.abort raise e end # If we can commit, break out of the loop if result != Transaction::ABORTED if transaction.commit break result end end end ensure # Clear the current transaction Transaction::current = nil end else # Nested transaction - flatten it and just run the block yield end end
# File lib/concurrent/dataflow.rb, line 56 def call_dataflow(method, executor, *inputs, &block) raise ArgumentError.new('an executor must be provided') if executor.nil? raise ArgumentError.new('no block given') unless block_given? unless inputs.all? { |input| input.is_a? IVar } raise ArgumentError.new("Not all dependencies are IVars.\nDependencies: #{ inputs.inspect }") end result = Future.new(executor: executor) do values = inputs.map { |input| input.send(method) } block.call(*values) end if inputs.empty? result.execute else counter = DependencyCounter.new(inputs.size) { result.execute } inputs.each do |input| input.add_observer counter end end result end
@return [Logger] Logger with provided level and output.
# File lib/concurrent/configuration.rb, line 19 def self.create_simple_logger(level = Logger::FATAL, output = $stderr) # TODO (pitr-ch 24-Dec-2016): figure out why it had to be replaced, stdlogger was deadlocking lambda do |severity, progname, message = nil, &block| return false if severity < level message = block ? block.call : message formatted_message = case message when String message when Exception format "%s (%s)\n%s", message.message, message.class, (message.backtrace || []).join("\n") else message.inspect end output.print format "[%s] %5s -- %s: %s\n", Time.now.strftime('%Y-%m-%d %H:%M:%S.%L'), Logger::SEV_LABEL[severity], progname, formatted_message true end end
@return [Logger] Logger with provided level and output. @deprecated
# File lib/concurrent/configuration.rb, line 51 def self.create_stdlib_logger(level = Logger::FATAL, output = $stderr) logger = Logger.new(output) logger.level = level logger.formatter = lambda do |severity, datetime, progname, msg| formatted_message = case msg when String msg when Exception format "%s (%s)\n%s", msg.message, msg.class, (msg.backtrace || []).join("\n") else msg.inspect end format "[%s] %5s -- %s: %s\n", datetime.strftime('%Y-%m-%d %H:%M:%S.%L'), severity, progname, formatted_message end lambda do |loglevel, progname, message = nil, &block| logger.add loglevel, message, progname, &block end end
Dataflow allows you to create a task that will be scheduled when all of its data dependencies are available. {include:file:docs-source/dataflow.md}
@param [Future] inputs zero or more `Future` operations that this dataflow depends upon
@yield The operation to perform once all the dependencies are met @yieldparam [Future] inputs each of the `Future` inputs to the dataflow @yieldreturn [Object] the result of the block operation
@return [Object] the result of all the operations
@raise [ArgumentError] if no block is given @raise [ArgumentError] if any of the inputs are not `IVar`s
# File lib/concurrent/dataflow.rb, line 34 def dataflow(*inputs, &block) dataflow_with(Concurrent.global_io_executor, *inputs, &block) end
# File lib/concurrent/dataflow.rb, line 44 def dataflow!(*inputs, &block) dataflow_with!(Concurrent.global_io_executor, *inputs, &block) end
# File lib/concurrent/dataflow.rb, line 39 def dataflow_with(executor, *inputs, &block) call_dataflow(:value, executor, *inputs, &block) end
# File lib/concurrent/dataflow.rb, line 49 def dataflow_with!(executor, *inputs, &block) call_dataflow(:value!, executor, *inputs, &block) end
Disables AtExit
handlers including pool auto-termination handlers. When disabled it will be the application programmer's responsibility to ensure that the handlers are shutdown properly prior to application exit by calling {AtExit.run} method.
@note this option should be needed only because of `at_exit` ordering
issues which may arise when running some of the testing frameworks. E.g. Minitest's test-suite runs itself in `at_exit` callback which executes after the pools are already terminated. Then auto termination needs to be disabled and called manually after test-suite ends.
@note This method should never be called
from within a gem. It should *only* be used from within the main application and even then it should be used only when necessary.
@see AtExit
# File lib/concurrent/configuration.rb, line 129 def self.disable_at_exit_handlers! AtExit.enabled = false end
General access point to global executors. @param [Symbol, Executor] executor_identifier symbols:
- :fast - {Concurrent.global_fast_executor} - :io - {Concurrent.global_io_executor} - :immediate - {Concurrent.global_immediate_executor}
@return [Executor]
# File lib/concurrent/configuration.rb, line 164 def self.executor(executor_identifier) Options.executor(executor_identifier) end
Global thread pool optimized for short, fast operations.
@return [ThreadPoolExecutor] the thread pool
# File lib/concurrent/configuration.rb, line 136 def self.global_fast_executor GLOBAL_FAST_EXECUTOR.value end
# File lib/concurrent/configuration.rb, line 147 def self.global_immediate_executor GLOBAL_IMMEDIATE_EXECUTOR end
Global thread pool optimized for long, blocking (IO) tasks.
@return [ThreadPoolExecutor] the thread pool
# File lib/concurrent/configuration.rb, line 143 def self.global_io_executor GLOBAL_IO_EXECUTOR.value end
# File lib/concurrent/configuration.rb, line 91 def self.global_logger GLOBAL_LOGGER.value end
# File lib/concurrent/configuration.rb, line 95 def self.global_logger=(value) GLOBAL_LOGGER.value = value end
Global thread pool user for global timers.
@return [Concurrent::TimerSet] the thread pool
# File lib/concurrent/configuration.rb, line 154 def self.global_timer_set GLOBAL_TIMER_SET.value end
Leave a transaction without committing or aborting - see `Concurrent::atomically`.
# File lib/concurrent/tvar.rb, line 155 def leave_transaction raise Transaction::LeaveError.new end
@!macro monotonic_get_time
Returns the current time a tracked by the application monotonic clock. @return [Float] The current monotonic time since some unspecified starting point @!macro monotonic_clock_warning
# File lib/concurrent/utility/monotonic_time.rb, line 53 def monotonic_time GLOBAL_MONOTONIC_CLOCK.get_time end
# File lib/concurrent/utility/monotonic_time.rb, line 6 def initialize @last_time = Time.now.to_f super() end
# File lib/concurrent/configuration.rb, line 168 def self.new_fast_executor(opts = {}) FixedThreadPool.new( [2, Concurrent.processor_count].max, auto_terminate: opts.fetch(:auto_terminate, true), idletime: 60, # 1 minute max_queue: 0, # unlimited fallback_policy: :abort # shouldn't matter -- 0 max queue ) end
# File lib/concurrent/configuration.rb, line 178 def self.new_io_executor(opts = {}) CachedThreadPool.new( auto_terminate: opts.fetch(:auto_terminate, true), fallback_policy: :abort # shouldn't matter -- 0 max queue ) end
# File lib/concurrent/utility/processor_counter.rb, line 155 def self.physical_processor_count processor_counter.physical_processor_count end
# File lib/concurrent/utility/processor_counter.rb, line 151 def self.processor_count processor_counter.processor_count end
Use logger created by create_simple_logger to log concurrent-ruby messages.
# File lib/concurrent/configuration.rb, line 45 def self.use_simple_logger(level = Logger::FATAL, output = $stderr) Concurrent.global_logger = create_simple_logger level, output end
Use logger created by create_stdlib_logger to log concurrent-ruby messages. @deprecated
# File lib/concurrent/configuration.rb, line 78 def self.use_stdlib_logger(level = Logger::FATAL, output = $stderr) Concurrent.global_logger = create_stdlib_logger level, output end
Public Instance Methods
@!visibility private
# File lib/concurrent/utility/monotonic_time.rb, line 13 def get_time Process.clock_gettime(Process::CLOCK_MONOTONIC) end
Private Instance Methods
Abort a currently running transaction - see `Concurrent::atomically`.
# File lib/concurrent/tvar.rb, line 150 def abort_transaction raise Transaction::AbortError.new end
Run a block that reads and writes `TVar`s as a single atomic transaction. With respect to the value of `TVar` objects, the transaction is atomic, in that it either happens or it does not, consistent, in that the `TVar` objects involved will never enter an illegal state, and isolated, in that transactions never interfere with each other. You may recognise these properties from database transactions.
There are some very important and unusual semantics that you must be aware of:
-
Most importantly, the block that you pass to atomically may be executed
more than once. In most cases your code should be free of side-effects, except for via TVar.
-
If an exception escapes an atomically block it will abort the transaction.
-
It is undefined behaviour to use callcc or Fiber with atomically.
-
If you create a new thread within an atomically, it will not be part of
the transaction. Creating a thread counts as a side-effect.
Transactions within transactions are flattened to a single transaction.
@example
a = new TVar(100_000) b = new TVar(100) Concurrent::atomically do a.value -= 10 b.value += 10 end
# File lib/concurrent/tvar.rb, line 93 def atomically raise ArgumentError.new('no block given') unless block_given? # Get the current transaction transaction = Transaction::current # Are we not already in a transaction (not nested)? if transaction.nil? # New transaction begin # Retry loop loop do # Create a new transaction transaction = Transaction.new Transaction::current = transaction # Run the block, aborting on exceptions begin result = yield rescue Transaction::AbortError => e transaction.abort result = Transaction::ABORTED rescue Transaction::LeaveError => e transaction.abort break result rescue => e transaction.abort raise e end # If we can commit, break out of the loop if result != Transaction::ABORTED if transaction.commit break result end end end ensure # Clear the current transaction Transaction::current = nil end else # Nested transaction - flatten it and just run the block yield end end
# File lib/concurrent/dataflow.rb, line 56 def call_dataflow(method, executor, *inputs, &block) raise ArgumentError.new('an executor must be provided') if executor.nil? raise ArgumentError.new('no block given') unless block_given? unless inputs.all? { |input| input.is_a? IVar } raise ArgumentError.new("Not all dependencies are IVars.\nDependencies: #{ inputs.inspect }") end result = Future.new(executor: executor) do values = inputs.map { |input| input.send(method) } block.call(*values) end if inputs.empty? result.execute else counter = DependencyCounter.new(inputs.size) { result.execute } inputs.each do |input| input.add_observer counter end end result end
Dataflow allows you to create a task that will be scheduled when all of its data dependencies are available. {include:file:docs-source/dataflow.md}
@param [Future] inputs zero or more `Future` operations that this dataflow depends upon
@yield The operation to perform once all the dependencies are met @yieldparam [Future] inputs each of the `Future` inputs to the dataflow @yieldreturn [Object] the result of the block operation
@return [Object] the result of all the operations
@raise [ArgumentError] if no block is given @raise [ArgumentError] if any of the inputs are not `IVar`s
# File lib/concurrent/dataflow.rb, line 34 def dataflow(*inputs, &block) dataflow_with(Concurrent.global_io_executor, *inputs, &block) end
# File lib/concurrent/dataflow.rb, line 44 def dataflow!(*inputs, &block) dataflow_with!(Concurrent.global_io_executor, *inputs, &block) end
# File lib/concurrent/dataflow.rb, line 39 def dataflow_with(executor, *inputs, &block) call_dataflow(:value, executor, *inputs, &block) end
# File lib/concurrent/dataflow.rb, line 49 def dataflow_with!(executor, *inputs, &block) call_dataflow(:value!, executor, *inputs, &block) end
Leave a transaction without committing or aborting - see `Concurrent::atomically`.
# File lib/concurrent/tvar.rb, line 155 def leave_transaction raise Transaction::LeaveError.new end
@!macro monotonic_get_time
Returns the current time a tracked by the application monotonic clock. @return [Float] The current monotonic time since some unspecified starting point @!macro monotonic_clock_warning
# File lib/concurrent/utility/monotonic_time.rb, line 53 def monotonic_time GLOBAL_MONOTONIC_CLOCK.get_time end


Federal Report Finds Economic Gap Between Rural Counties
by DAVID REESE(CN) — The gap between personal incomes in rural farming communities and rural communities with recreation-based economies is widening in rural America, a new federal report released Wednesday says.
The “Rural America at a Glance 2019” report from the U.S. Department of Agriculture studied rural America and the roughly 46 million people who live there, from people in counties close to urban areas to people who live in isolated, sparsely populated counties.
The report focused on demographic and socioeconomic trends after the end of the Great Recession in 2009 and according to report author John Pender, an economic researcher with the USDA, the counties with abundant recreation amenities like ski areas and beaches fared best in population growth and personal income growth from 2010 to 2017.
Pender’s research focused on rural American wealth and prosperity. The report focused on counties of 50,000 people and less, as well as counties close to larger urban centers.
Rural counties that relied on farming, mining, manufacturing and government spending fared the worst in personal income and population growth, the report found.
From 2010 to 2018, population grew in metropolitan counties and in rural counties close to urban areas, while population declined in other types of nonmetropolitan counties.
Employment grew in all types of rural counties except for completely rural counties not close to a metropolitan area. There were also lower rates of labor-force participation in nonmetropolitan rural areas, something Pender said is due to an older, less-educated population.
Poverty rates in rural America are highest in the most rural, isolated counties and the gap between poverty rates in these counties has grown. However, poverty rates have declined since 2013 in all types of nonmetropolitan counties.
Personal income was significantly higher and grew faster in metropolitan counties than in nonmetropolitan counties from 2010 to 2017, although personal income declined from 2015 to 2017 in the most rural and remote type of nonmetropolitan counties.
Pender said part of the reason for this decline in personal income was the decline in farm income and mining income, since these industries are more prominent in more rural and remote counties.
Personal income declined in farming-dependent nonmetropolitan counties after 2013, and in mining-dependent counties after 2014.
Population declined 0.4 percent in rural counties compared to growth in metro counties, part of a long-term declining trend in birth rates and an aging population, Pender said. Employment in non-metropolitan county employment is still one percent below pre-recession levels.
Personal income in rural metropolitan counties through 2017 averaged $54,000, compared to $40,000 in non-metropolitan counties, according to Pender. This gap is due in large part to rural counties that have attractive natural surroundings, such as ski areas or beaches.
These recreation-based economies tend to attract people with higher, stabilized retirement incomes padded by dividends and other assets, even though much of the work in these economies is in service industries.
“The wages tend to be low in service industries but people are willing to live there because of natural amenities,” Pender said.
Copyright © 2019 courthousenews.com


Cory believes that when we join together and work together, we will rise together.
The importance of community was impressed on Cory early in life. When Cory’s parents decided to move into a neighborhood in a good school district, no one would sell them a home due to the color of their skin. A group of volunteer lawyers, who had witnessed acts of violence against peaceful voting rights activists on Bloody Sunday, were inspired to help Black families and stepped in to advocate for Cory's family in their journey to homeownership.
Cory attended Stanford University on a football scholarship and helped fellow students by working as a peer crisis counselor. He also spent time mentoring middle school students in East Palo Alto. Later, he studied at the University of Oxford on a Rhodes Scholarship and graduated from Yale Law School in 1997.
Instead of going to work for a big law firm after leaving Yale, Cory moved into a public housing project in Newark, where he teamed up with the other tenants to take on a slumlord accused of intentional neglect of the property and won. As a city council member, he drew attention to the violence that plagued the city and called for efficiency and transparency in City Hall. In 2006, he was elected mayor with 72 percent of the vote.
Two decades later, Cory still lives in Newark’s Central Ward.
Bringing People Together
As mayor, Cory took on some of the city’s biggest challenges—fighting to curb crime, reinvigorating a dwindling local economy, and raising morale across the city—bringing together a diverse coalition of people to deliver real change for residents. Four years into Cory’s term, the 2010 Census showed the city’s population growing instead of shrinking for the first time in more than half a century.
Making Lasting Change
A senator since 2013, Cory has written and championed dozens of bills aimed at addressing our broken criminal justice system, expanding economic opportunity, and fighting for equal justice for everyone.
In 2018, he helped to write and pass the First Step Act—a bipartisan bill that, for the first time in decades, makes meaningful reforms to our criminal justice system and begins to reverse the injustices of mass incarceration. In 2019, he reintroduced the Marijuana Justice Act, which would legalize marijuana at the federal level and restore justice to those already convicted of marijuana-related offenses—convictions that disproportionately affect low-income communities and communities of color.
Cory believes in an economy that values American workers and benefits everyone, not just the privileged few. His baby bonds proposal, the American Opportunity Accounts Act, would virtually close the racial wealth gap by funding a federally-backed savings account for every child born in America that grows with them as they grow up, ensuring that all children born in this country are afforded the opportunity for upward mobility.
Cory is leading the fight for equal justice for all Americans. He is an original co-sponsor of the Equality Act to protect the rights of LGBTQ Americans, has advocated to expand access to health care like Medicare for All, and is committed to addressing climate change with an eye toward its impact on vulnerable communities. Cory’s landmark Environmental Justice Act strengthens legal protections against environmental injustice for communities of color, low-income communities, and indigenous communities.
As a tenant lawyer, city councilman, mayor, and now U.S. senator, Cory has spent his life bringing people together to take on the problems we face. And what he’s learned is that the support of a loving community can overcome even the most insurmountable challenges. His vision for our country is one in which we are measured by our ability to love and to come together to create a more fair and just nation for everyone.


anki-set-randomizer FRONT
5.02. Styling directives: Display statement
"display":
This one is bit special. It has several statements which change elements in a very drastic way:
[[You don't even notice me!::Bienvenue::Welcome::Youkoso::$style(vanish, dp:none)::$apply(vanish)]] [[$c(1, -1)]].
[[I::am::not::randomized::at::all!::$pick(0:10:10)::$s(s1, display:orig)::$a(s1)]]
* "display:sort": This causes elements to be sorted according to their original appearance on the card:
[[alpha::beta::gamma::delta::epsilon::$s(s2, display:sort)::$a(s2)]]
[[a::b::c::d::e::$a(s2)]]
[[$m(2, -2)::$m(2, -1)::$a(s2)]]
* "display:empty": This causes elements to shown as empty, even though they might have multiple elements: [[Even::though::I::have::so::many::elements::I::still::appear::empty::$s(s3, dp:empty)::$a(s3)]]
* "block:true": Even though not technically a display attribute, it still is very useful:
[[When your text wraps multiple lines it's helpful to have this attribute.
See how this line is colored in correctly.::$s(s4, blk:true, od:,cd:)::$a(s4)]]


Contains various general purpose elements related to Sage.
http://www.cycle99.com/schemas/sage/sage.xsd
Inserts the Sage version as a text node, replacing the original element.
Emits a value similar to:
Provides a generic element referring to a link that Sage resolves and appends as an href
attribute during runtime. Read more.
Specifies the id
of the link this element refers to.
A querystring list of name-value pairs to be used as substitution values for any placeholders in the URL text of the link this element refers to. For more information, see linking.
If true
, this attribute will cause the resulting link to be URL-encoded. This is useful when the link is being generated as a part of another link, or anywhere where the URL needs to be encoded.
Provides a generic element that refers to a predefined link that Sage resolves, replacing the element with the resolved link URL. Read more.
Specifies the id
of the link this element refers to.
A querystring list of name-value pairs to be used as substitution values for any placeholders in the URL text of the link this element refers to. For more information, see linking.
If true
, this attribute will cause the resulting link to be URL-encoded. This is useful when the link is being generated as a part of another link, or anywhere where the URL needs to be encoded.
This element is used to wrap markup that should be preserved as-is; that is, no preprocessing (xml inclusions, phrase or variable substitution etc) will be done on it; it's content will be served as specified, and the sage:literal
element itself will be filtered out from the final output. The main usage of this element is to illustrate example usage.
XSLT template (ignored, the template just skips over the element).
Includes another document or document fragment as either xml
or text
within the current document, replacing the including element with the included content.
Including a complete document
Including a document fragment, using the xpath
attribute
Specifies the path to the document to include.
Specifies the parse mode of the document. Possible values are xml
and text
.
When parse="xml"
, the expression specified with the xpath
attribute is evaluated to identify a portion of the resource to include. This attribute is optional; when omitted, the entire resource is included. The namespace prefixes that can be used
here are any namespaces prefixes defined in the document where the sage:include
element is being used, as well as the common namespaces and namespace prefixes in use throughout Sage.
Optional alternative content to display in it's place if loading of the resource specified by the parent sage:include
element fails.
In this example, there are two levels of fallback:
Report error


Name *
Vendor *
Relevant Gender* Male Female ALL
Relevant Personality* High Self-Transcedence Hifh Self-Enhancement High adventurousness High Outgoing High Emotional High Romantic Quotient High Intellect High openness quotientOpenness and low emotional range High Openness and low emotional range
Advertisement URL *
Fields with * are required


--- layout: page title: "About" description: "This is what I do." header-img: "img/red.jpg" ---
Hello everyone, my name is Yue Liang. I am a master degree student at Stevens Institute of Technology, majoring in computer engineering. Here is my resume.
This is my personal blog. I will share some technical skills that I learnt from class, projects I have worked with and my own thoughts and ideas.
In each post, there is a comment section down below. If you have any doubts, please fell free to tell me. (I may not respond to you ^_^)
You can also find me from social media, check my social icons!


JavaScript is disabled on your browser.
Skip navigation links
Overview
Package
Class
Tree
Deprecated
Index
Help
Prev Letter
Next Letter
Frames
No Frames
All Classes
SEARCH:
JavaScript is disabled on your browser.
A
C
D
E
G
H
I
L
M
O
P
R
S
T
V
S
SecuredGCMUsage
- Class in
cryptography
This class securely performs AES encryption in GCM mode, with 256 bits key size.
SecuredGCMUsage()
- Constructor for class cryptography.
SecuredGCMUsage
SecuredRSAUsage
- Class in
cryptography
SecuredRSAUsage()
- Constructor for class cryptography.
SecuredRSAUsage
sendCommand(PrintWriter, PublicKey, String, String)
- Method in class server.
TcpServer
Sends a command to the client
sendCommand(String, String)
- Method in class client.
TcpClient
Attempts to format, encrypt, and send the
command
and
arguments
to the server that the client is currently connected to
sendText(PrintWriter, PublicKey, String)
- Method in class server.
TcpServer
Sends a simple message to the client containing
data
sendText(String)
- Method in class client.
TcpClient
Attempts to encrypt and send the
data
to the server that the client is currently connected to
server
- package server
ServerConnection
- Class in
listener_references
ServerConnection class that contains information about a socket connection to a client
ServerConnection(TcpServer, Socket, PublicKey, PrintWriter)
- Constructor for class listener_references.
ServerConnection
ServerConnectionListener
- Interface in
listeners
ServerConnectionListener to be fired whenever a connection is made or destroyed
ServerException
- Exception in
server
ServerException(String)
- Constructor for exception server.
ServerException
ServerListenerManager
- Class in
server
ServerListenerManager()
- Constructor for class server.
ServerListenerManager
Constructs a new
ServerListenerManager
with no listeners pre-registered
start()
- Method in class server.
TcpServer
Starts up the server if it is not already running
A
C
D
E
G
H
I
L
M
O
P
R
S
T
V
Skip navigation links
Overview
Package
Class
Tree
Deprecated
Index
Help
Prev Letter
Next Letter
Frames
No Frames
All Classes
JavaScript is disabled on your browser.


Page Links: Index Page
| ChristiaanJ 13th Oct 2010, 22:50 permalink Post: 572 |
Mike
,
No, sadly there is no known footage of a real Concorde barrel roll. But it's been done.... repeatedly. Confirmed not only by Brian Wadpole, but even by Andr\xe9 Turcat himself. Who, by the way, stated that "what annoyed me the most about it all.... was that I never had an occasion to do it myself....". CJ |
Page Links: Index Page


Research Institute of Advanced Technology was founded on 1st January 2018 by Isaac Nyakoi with the aim of helping the society by providing essential services to needy beneficiaries and to equip them with key skills that are relevant in this 21st century.
Our key mandate is to make the society a better place and to inculcate technological advancedment into this generaton.
Research Institute of Advanced Technology is an institution that is aimed at improving the life of the young generation by equiping them with mandatory skills that will be handy in their area of specialization and we also offer a wide variety of services to our clientelle to meet their needs in their respective areas.
Our goal is to equip, train and add value to our students such that they will be fit in their area of specialization and to offer quality services to our clientelle in research work.
To be a leading institution to proffesionalism and value addition to the society and to offer a helping hand to needy students while fostering integrity and maximizing the potential of the society by harnesting the potential of our students.


home
profile
gallery
contact
Truong Montgomery Architect PLLC
166 East 92nd Street 3A
New York, NY 10128-2410
Tel<PHONE_NUMBER>
info@truongmontgomery.com


LOGO
Thursday — March 5, 2020
Latest News
Why designers should be involved in the lasw making process
Iran Metha 5 hours ago
Three things startups need to consider before buying insurance
Iran Metha5 hours ago
Why designers should be involved in the lasw making process
Iran Metha5 hours ago
Why designers should be involved in the lasw making process
Iran Metha5 hours ago
T Mobile's merger with print is now worth $40 billion, thanks to the buls
David Canneis9 hours ago
Why you should wear roller skates to your next networking event
Boris Veldhusen va Detten 5 hours ago
A President's Day tech deals yuou wont wabt to miss
TNW Deals5 hours ago
Latest funding rounds on Index.co
Add info
Get updates by email
See more
Advanced Bio Designs
$434M
PRIVATE EQUITY
Blah Venture Fund
Transportation +3
New ;Leaf Symbiotic
$44M
SERIES A
Kickstarter Seed Fund
Transportation +3
Special Homes Limited
$44M
SERIES D
Kickstarter Seed Fund
Transportation +3
ArmorCanvas
$434M
PRIVATE EQUITY
Kickstarter Seed Fund
Transportation +3
Apps
MOST POPULAR
No Spoilers: How to mute words and phrases on Twitter
Rachael Kaser 1 day ago
LATEST
Alexis Ohanian and Serj Tankian team up to help build a social network for Armenia
- Google Assitant gets its own phine uver in India
- Pam and Angela from the Offie are rewatching the show for thier new podcast
- Mozilla rolls out new automated crypto jacking feagture in firefox
- Google anounces Stadia, it cros platform game straming service
Tech
MOST POPULAR
No Spoilers: How to mute words and phrases on Twitter
Rachael Kaser1 day ago
LATEST
Alexis Ohanian and Serj Tankian team up to help build a social network for Armenia
- Google Assitant gets its own phine uver in India
- Pam and Angela from the Offie are rewatching the show for thier new podcast
- Mozilla rolls out new automated crypto jacking feagture in firefox
- Google anounces Stadia, it cros platform game straming service
Tech
MOST POPULAR
No Spoilers: How to mute words and phrases on Twitter
Rachael Kaser1 day ago
LATEST
Alexis Ohanian and Serj Tankian team up to help build a social network for Armenia
- Google Assitant gets its own phine uver in India
- Pam and Angela from the Offie are rewatching the show for thier new podcast
- Mozilla rolls out new automated crypto jacking feagture in firefox
- Google anounces Stadia, it cros platform game straming service
Creative
MOST POPULAR
No Spoilers: How to mute words and phrases on Twitter
Rachael Kaser1 day ago
LATEST
Alexis Ohanian and Serj Tankian team up to help build a social network for Armenia
- Google Assitant gets its own phine uver in India
- Pam and Angela from the Offie are rewatching the show for thier new podcast
- Mozilla rolls out new automated crypto jacking feagture in firefox
- Google anounces Stadia, it cros platform game straming service
Podium
MOST POPULAR
No Spoilers: How to mute words and phrases on Twitter
Rachael Kaser1 day ago
LATEST
Alexis Ohanian and Serj Tankian team up to help build a social network for Armenia
- Google Assitant gets its own phine uver in India
- Pam and Angela from the Offie are rewatching the show for thier new podcast
- Mozilla rolls out new automated crypto jacking feagture in firefox
- Google anounces Stadia, it cros platform game straming service
APPS
MOST POPULAR
No Spoilers: How to mute words and phrases on Twitter
Rachael Kaser1 day ago
LATEST
Alexis Ohanian and Serj Tankian team up to help build a social network for Armenia
- Google Assitant gets its own phine uver in India
- Pam and Angela from the Offie are rewatching the show for thier new podcast
- Mozilla rolls out new automated crypto jacking feagture in firefox
- Google anounces Stadia, it cros platform game straming service
Launch
MOST POPULAR
No Spoilers: How to mute words and phrases on Twitter
Rachael Kaser1 day ago
LATEST
Alexis Ohanian and Serj Tankian team up to help build a social network for Armenia
- Google Assitant gets its own phine uver in India
- Pam and Angela from the Offie are rewatching the show for thier new podcast
- Mozilla rolls out new automated crypto jacking feagture in firefox
- Google anounces Stadia, it cros platform game straming service
Distract
MOST POPULAR
No Spoilers: How to mute words and phrases on Twitter
Rachael Kaser1 day ago
LATEST
Alexis Ohanian and Serj Tankian team up to help build a social network for Armenia
- Google Assitant gets its own phine uver in India
- Pam and Angela from the Offie are rewatching the show for thier new podcast
- Mozilla rolls out new automated crypto jacking feagture in firefox
- Google anounces Stadia, it cros platform game straming service
Latest Deals
See all Deals
The Ultimate Cisco Networking Expert Certification Training Bundle
$34.99$28.9995% OFF
The Ultimate Cisco Networking Expert Certification Training Bundle
$34.99$28.9995% OFF
The Ultimate Cisco Networking Expert Certification Training Bundle
$34.99$28.99The Ultimate Cisco Networking Expert Certification Training Bundle
$34.99$28.99The Ultimate Cisco Networking Expert Certification Training Bundle
$34.99$28.99The Ultimate Cisco Networking Expert Certification Training Bundle
$34.99$28.9995% OFF
The Ultimate Cisco Networking Expert Certification Training Bundle
$34.99$28.9995% OFF


To avoid the overhead of remote method invocation, J2EE application often adopt the Value Object (now called 'Transfer Object') Pattern (J2EE blueprints). The client receives just a copy of the actual stored data, which can then used without generating additional network traffic.
If the client needs to make changes on this object, the application can use the "Updatable Transfer Objects" strategy as described in Sun's pattern catalogue.
However, this introduces additional complexity: "There is an impact on the design using the updatable Transfer Objects in terms of update propagation, synchronization, and version control." (Sun).
In other words, the developer must take care of a mechanism on the server side to apply changes in the TOs back to the storage tier. If serveral clients access the same data, he will also need to implement a locking mechanism to avoid inconsistencies.
There are several possibilites to solve this problems:
The SVO project has adopted the latter approach to solve the problem, as adding behaviour by adding code to the TOs is very intrusive and error-prone. Code generation has its own quirks and adds another layer of complexity which must be dealt with.
AOP allows for a clean seperation between the aspects "data transfer" and "version control". However, we chose not to use AOP for the moment mainly because it would add yet another dependency (think remote deployement where size is crucial) and doesn't offer the full flexibility of "low-level" bytecode manipulation.
This low-levelness is often regard as hack, but most of the 'smart stuff' is actually happening 'outside' the bytecode modification, so the code is easy to change without having to step down to bytecode level. Think of the bytecode modification merely as providing the 'hooks' to plug in normal, unmodified classes.
Ideally, these modification should be transparent to the user, i.e you code your TOs as before without having to worry about version control etc. On deployment (or on runtime), the needed functionality is automatically added and can be used instantly.
| back | index | next |


Convert .doc to .pdf
This service converts Word documents to PDF documents.
Upload file to convert
Upload your file


04 DECEMBER 2015
CONTINUE READING
18 AUGUST 2015
CONTINUE READING
18 JULY 2015
CONTINUE READING
02 JULY 2015
CONTINUE READING
15 JUNE 2015
CONTINUE READING
28 OCTOBER 2014
CONTINUE READING
17 OCTOBER 2014
CONTINUE READING
06 OCTOBER 2014
CONTINUE READING
18 JULY 2014
CONTINUE READING
16 JULY 2014
CONTINUE READING


Begin repairs in a week, PWD told
by Staff ReporterThe Sub-Divisional Magistrate Court at Ottappalam has ordered that the repair work of the broken roads in Ottappalam taluk begin within a week.
Sub Collector Arjun Pandyan, who is the subdivisional magistrate of Ottappalam, ordered on Friday that major roads such as Ottappalam-Cherpulassery, Vaniyamkulam-Kothakkurissi, and Lakkidi-Railway Gate should be repaired without delay.
PWD executive engineer here and assistant executive engineer at Shoranur were asked to appear before the magistrate on November 28 if they have reasons for any delay.
Citizen’s right
Mr. Pandyan said that good roads were a citizen’s right, and it was a matter of grave concern that human lives were being lost on roads because of the poor condition.