Vince's Views
Rush Hour reviewed by Vince Yim
In some respects, Rush Hour is the ultimate exercise in cliched filmmaking. The hero is the renegade cop that prefers to work alone. The cop in question cannot solve the case until he gets in trouble. All Chinese people are somehow involved in the criminal element. The duo must always be completely mismatched. The hero has to say some smart-assed comment before (and after) shooting someone. However, that doesn't necessarily make for a bad film.
Rush Hour is Jackie Chan's first major Hollywood film since the dismal The Protector (1985). Proving once again that Hollywood can learn many things from foreign film markets (ie: Hong Kong), Jackie Chan is given much more free reign than before. Still, some die-hard Jackie Chan fans may be disappointed, as even Chan himself has voiced displeasure over the length of the fight scenes (which he views as too short, according to one interview).
This film takes a familiar theme of east meets west. Jackie Chan is Lee, the straight laced inspector who is imported to help deal with a kidnapping case, while Chris Tucker is Carter, the loudmouthed, destructive cop that is `promoted' to the FBI to help him. Or, at least, so he thinks (also another classic notion in action films: the FBI must always get in the way of our heroes).
Despite the necessary conventions of action films, Rush Hour is some of the most fun you'll spend and hour and forty minutes watching. Jackie Chan continues to be one of the most exciting martial artists on the big screen, continuing to perform his own stunts and dazzling audiences with his flashy kicks and punches. Chris Tucker, familiar from his whiny, annoying role in The Fifth Element is more palatable, complementing Jackie Chan's straight-laced character.
However, Jackie Chan still maintains his comic-slapstick edge, as expected of him and his films. Perfectly downplaying the `fish-out-of-water' routine through his character's attempts at mixing into American culture, he makes up for the down time his character experiences. When he is in action, however, you'll be amused and dazzled. Still being inventive in the use of objects to beat people up (in this case, a steering wheel, a serving tray, and a barstool), Jackie Chan proves to be THE pioneer of slapstick kung fu.
Chris Tucker's character may come across as irritating, yet is also humorous. Since he's not a physical actor to the level of Jackie Chan, he uses his main weapon: his mouth (hence, the tagline, `Fastest hands in the east meets the fastest mouth in the west'). While dialogue is not necessarily Shakespeare, it is appropriate for the film and still very funny.
While not necessarily poignant, attempts at character development and growth between characters come off surprisingly well. Lee's `knowledge' of American pop culture (`That's the Beach Boys!') when contrasted against Carter's lack of knowledge of Chinese culture makes for an interesting scene where Lee teaches Carter the kung fu disarming trick, while Carter teaches Lee hip-hop dance moves.
While Rush Hour is not at the same level as Police Story 3 and 4 (known in North America as Supercop and Jackie Chan's First Strike, respectively), it more than makes up for the poorly received films Operation Condor and Mr. Nice Guy. With its appropriate mixture of high kicks and lots of laughs, it makes for a fun film. As well, it is a true departure from Jackie Chan films, as it is missing one common element: a whiny female co-star.
Rating: 8/10 --
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


{% extends "base.html" %} {% block content %}
Listed below are the additional fees that you'll likely be required to pay on top of the property price.
{% endif %} {% if fees is defined %}| Stamp Duty | ${{ fees.stamp_duty }} |
| Mortgage Registration Fee (Electronic) | ${{ fees.mortgage_registration_fee }} |
| Land Transfer Fee | ${{ fees.land_transfer_fee }} |
| Conveyancing | ${{ fees.conveyancing_fee }} |
| TOTAL | ${{ fees.total_fees }} |
Enter house price estimate to calculate added costs
{{ listing['description'] }}
{{ suburb.name }}'s crime rate in 2019 is {{ suburb.get_low_high_crime_state_2019(council) }} than it's council {{ council.name }}, which itself has a {{ council.get_low_high_crime_state_2019(state) }} crime rate than the state of {{ state.name }}


Special Spesh records Davido pants down using the toilet (Video)
by Damilola IsmailIncase you are one of those doubting whether or not Davido uses the toilet, well we have proof.
Thanks to Special Spesh who shared a video made showing Davido doing the “number 2” with his pants down in the toilet.
Davido who was caught off guard in the video doing his thing when Special Spesh showed up and he could be heard asking “what are you doing?”

Watch video below.
Follow us on Facebook – @Lailasnews; Twitter – @LailaIjeoma for updates


procedure ChromaKey(ABitmap: TCustomBitmap32; TrColor: TColor32);
Preprocesses a Bitmap for standard color key transparency, ie. areas that are of color TrColor are made transparent.
It is possible to use this function several times for different colors.
[See also]


{{ _( "The public AppIDs are disabled to access videos or download files." ) }} ({{ _( "How to apply" ) }})
{{ _( "Attention: inaccessable before AppIDs are deployed." ) }}


|
Simbody
3.6
|
This is the implementation class that supports the Spline_ interface. More...
Public Member Functions | |
| SplineImpl (int degree, const Vector &x, const Vector_< T > &y) | |
| ~SplineImpl () | |
| T | getValue (Real t) const |
| T | getDerivative (int derivOrder, Real t) const |
Public Attributes | |
| int | referenceCount |
| int | degree |
| Vector | x |
| Vector_< T > | y |
This is the implementation class that supports the Spline_ interface.
|
inline |
|
inline |
|
inline |
|
inline |
| int SimTK::Spline_< T >::SplineImpl::referenceCount |
| int SimTK::Spline_< T >::SplineImpl::degree |
| Vector SimTK::Spline_< T >::SplineImpl::x |
| Vector_<T> SimTK::Spline_< T >::SplineImpl::y |


You may have read my no more middlewares blog post and wonder what led me to this mindset about middlewares. I would like to explain here why i think that Express (but also its contesters like Hapi or Restify) are not that good when it comes to build REST APIs by explaining the challenges of designing a HTTP REST API and how I'm trying to do it.
TL.DR. HTTP/REST API complexity does not worth creating a framework.
An HTTP server is a gateway allowing to read/write states. Those states may sit in a database or a file storage system. An HTTP transaction allows you to retrieve those states (with the OPTIONS/GET verbs) and to change them (with POST/PUT/PATCH/DELETE ones). The states are located with the help of URIs, behind an URI one or more states can be involved.
Building an HTTP server mainly consist in defining the states you want to keep and where you want to store them. Once defined, you'll have to define the rules determining what happens when a state changes.
This is the easy part. Retrieving states is done with simple GET requests (you may also have heard about the SEARCH method).
States are rarely provided as is from their storage. They are often transformed into a representation, this is known as representational state transfer (REST).
It is worth noting a resource representation can be seen as a pure
function:
response = f(request, ...states)
Answering a GET HTTP request is as simple as decoding the request, retrieve
the involved states and build a representation of the actual resource.
The beauty of an HTTP server is that states are more concepts than real data. The state of an unexisting resource is that it doesn't exists.
When using the PUT/POST/PATCH methods in an HTTP request, we typically provide some content with our HTTP request that describes the changes we want to perform.
For DELETE ones, it is a bit simpler. We are only providing the name (its URI for instance) of the resource we want to delete.
Handling state changes is a bit harder. Indeed, i usually split it into two phases:
This is when the status code and the HTTP headers are sent to the client. When a server acknowledge a resource change, the implicit contract is that any other request involving its underlying states will take those changes in count.
If someone upload a file by performing a PUT /fs/myfile
request,
you can send response headers only when it is guaranteed that a
GET /fs/myfile
will successfully complete. This is the
transactional part of an HTTP server.
This might not be true for large systems on short time frames or for two clients based on two very distant regions but those trade offs doesn't affect an API design in most cases.
The new states of the resource can be expressed as a pure function of the HTTP
request:
states = f(request)
Then, you will probably need to perform some computations based on those changes. Things like sending an email, processing an image, syncing with third parties etc...
Those post HTTP transaction computes shouldn't change the server state. But since you already answered to the HTTP client everything went fine, you should guarantee those computes will always happen.
The best way to handle this is using a message queueing system like RabbitMQ and having some workers computing those post changes triggers. Once your state change event is in the queue, you can acknowledge the request and be sure expected computations will be done.
The big part in designing those triggers is to ensure the acknowledged data is valid and won't suffer of a lack of information. Content validation is a major concern here.
You also have to deal with the possible outage of the various systems your triggers rely on. This is why i mostly try to handle it with idempotent calls. That way, workers can retry computing an event until it eventually works. This is not always possible though, by example for sending e-mails.
Despite the fact an HTTP server is full of states, the interesting thing to notice about HTTP is that it is a stateless protocol. HTTP transactions are fully independent from each others.
Since a resource representation is a pure function returning a response from a
request and its involved states. You can see the HTTP GET request/response
relation as a pure function until its underlying states change:
response = f(request)
This is where the stateless nature of HTTP helps designing APIs in a simple manner. For the same state and the same request, you'll always get the same response (it is slightly different for POST calls, this is why i avoid using it in most cases).
Indeed, OPTIONS, GET, PUT and DELETE requests are known as idempotent. PATCH and POST ones are not. I avoid using POST but i often create PATCH endpoints while ensuring mines are idempotent (this is while i strongly discourage you using JSON patch since its current implementation forbids doing idempotent patches).
Another interesting property of HTTP is that since a PUT/PATCH and DELETE request contains the full recipe to build the final state of the resource its changing, even if the initial resource state is different, the final state will be the same for two identical requests.
So we end up with a crystal clear vision of modificative and idempotent HTTP
requests
states = f(request) response = f(request, ...states))
All in all, designing a REST API is mainly about describing very simple asynchronous workflows into a few key steps were simple function composition can easily do the job.
This is impossible. At least with high performances and availability. Indeed, to ensure a coherent global state, you have to queue state changes (at least those depending on other states). This is typically the relational databases strategy.
Subscribing to this strategy involves accepting to refuse some state changes. Indeed, imagine that a user wants to change the price of a product. The web application would first retrieve it and prompt a form allowing him to make that change.
Another user could have deleted this product so that when the user will validate the form, the product will no longer exists. Most server side implementation will simply return an error saying the product no longer exists and the user will simply loose its changes. But another implementation could simply "revive" the product or change the archived product price.
But what about two users changing the product price at the same time?  Should we compute the difference between the two concurrent changes? Or maybe prompt the user to do so (like git do for developers).
The final choice strongly depends on a lot of factors and, in fact, the only thing I'm sure about is that you can't fully automate those choices.
Each server endpoint has its own constraint, its own reason to exist and needs you to implement its own, original workflow based on your business constraints.
So, given all those interesting aspects of designing a REST API, why would we use things like middlewares, ORM or that shinny new framework plugin system?
In my quest to find the holy grail of the REST API frameworks, i ended up building my own: Whook.
Guess what, i failed. I thought existing framework were bad while the framework idea itself was bad. Don't get me wrong, i don't say that all HTTP frameworks you can find out on NPM should not be used.
In fact, i managed to use ExpressJS successfully many times and i think it can still be useful for quickly prototyping NodeJS backends. But the truth is that i spent most of my time reducing the Express features i used overtime.
Currently, I'm leaving behind the last Express pieces by using simple libraries providing pure functions most of the time.
In my quest to design great REST APIs with NodeJS, i finally ended up with a few simple patterns and principles i want to share with you:
As we saw above, an HTTP server is constantly dealing with external states. Those states can be database servers, key/value stores, other REST APIs, the current time etc...
This has a lot to do with the process lifetime. Indeed, before accepting connections we must ensure the database connection is correctly set. Also, when shutting down a server, we must ensure that every requests were fulfilled.
For those concerns, i created Knifecyle, a dependency injection system inspired by the Angular one. It is pretty simple but allows me maintaining states services decoupled from the actual server endpoints code.
It also allow me to tied an endpoint with its required services and only those ones. That way i can easily reuse an endpoint in another project while being sure all its needed services are available.
Since it injects services thanks to a simple object, it has no footprint on the endpoint handlers. That way i can reuse it in any other application.
There is nothing worse than having no documentation. The first building block of an endpoint should be its documentation.
When creating endpoints, i begin by writing a module describing its inputs and outputs. It is not necessarily a Swagger definition but an intermediate description that could produce a Swagger definition file.
That way we avoid documentation drifting. Never rely on a human when it comes to documenting anything.
Since an HTTP endpoint is a unique and original workflow you have to implement, i prefer using only one handler per endpoint and use async functions composition in a single file that describes this workflow.
I recently released Siso that allows to create a simple routing function without having to rely on a complete framework.
For each endpoints, i create an unique workflow based on a promise chain whose stages basically are:
In consequence, my code is organized in a simple manner that map the above workflow structure:
I take care to avoid coupling endpoint workflows with route declaration in order to keep my workflows the purest possible. You can see those principles in action into the Trip Story project we made for an hackathon (worth nothing it till uses Express ;) ). It is a step backward though but i promise I'll soon release a new side project with all those principles in action.
I'd like to end this post by a call to the JavaScript community: please, release purely functional modules whenever possible. Projects like jshttp are nice and allows a shift to a more functional approach.
We should stop assuming a req
, res
or
app
object and instead create pure function that manipulate
headers, query strings or contents directly.
With the raise of service workers, the need to reuse backend code in the browser will be crucial. Adopting a more functional approach will allow to take best advantages of the existing codebases.
It will be very hard, maybe impossible, to reuse your ORM code into the browser, neither to make predictive HTTP responses in a service worker with a codebase relying on middlewares or your preferred framework plugin system.
I hope you find this post more clear and wish it will help improve the way we are creating REST web services with NodeJS.


Memory
Section: Misc. Reference Manual Pages (3tcl)Updated:
Index Return to Main Contents
NAME
ckalloc, memory, ckfree, Tcl_DisplayMemory, Tcl_InitMemory, Tcl_ValidateAllMemory - 合法的内存分配接口总览 SYNOPSIS
memory info memory trace [on|off] memory validate [on|off] memory trace_on_at_malloc nnn memory break_on_malloc nnn memory display file #include <tcl.h> char * ckalloc (unsigned size) void ckfree (char *ptr) int Tcl_DumpActiveMemory (char *fileName); void Tcl_ValidateAllMemory (char *file, int line) void Tcl_InitMemory (interp)
ARGUMENTS
Tcl_Interp *fileName uint size inchar *ptr in Tcl_Interp *interp in A pointer to the Tcl interpreter. char *file in The filename of the caller of Tcl_ValidateAllMemory. int line in The line number of the caller of Tcl_ValidateAllMemory. char *fileName in File to display list of active memory.
描述 DESCRIPTION
ckalloc
This macro allocates memory, in the same manner as malloc, with the following differences: One, ckalloc checks the value returned from malloc (it calls malloc for you) and panics if the allocation request fails. Two, if enabled at compile time, a version of ckalloc with special memory debugging capabilities replaces the normal version of ckalloc, which aids in detecting memory overwrites and leaks (repeated allocations not matched by corresponding frees).
Parameters:
- o size - The size of the memory block to be allocated.
Returns:
- A pointer to the allocated memory block.
ckfree
This macro frees memory allocated by ckalloc. Like ckalloc, when memory debugging is enabled, ckfree has enhanced capabilities for detecting memory overwrites and leaks.
It is very important that you use ckalloc when you need to allocate memory, and that you use ckfree to free it. Should you use malloc to allocate and ckfree to free, spurious memory validation errors will occur when memory debugging is enabled. Should you use free to free memory allocated by ckalloc, memory corruption will occur when memory debugging is enabled. Any memory that is to be become the property of the Tcl interpreter, such as result space, must be allocated with ckalloc. If it is absolutely necessary for an application to pass back malloced memory to Tcl, it will work only if Tcl is complied with the TCL_MEM_DEBUG flag turned off. If you convert your application to use this facility, it will help you find memory over runs and lost memory. Note that memory allocated by a C library routine requiring freeing should still be freed with free, since it calls malloc rather than ckalloc to do the allocation.
Parmeters:
- o ptr - The address of a block to free, as returned by ckalloc.
Tcl_DumpActiveMemory
This function will output a list of all currently allocated memory to the specified file. The following information is outputted for each allocated block of memory: starting and ending addresses (excluding guard zone), size, source file where ckalloc was called to allocate the block and line number in that file. It is especially useful to call Tcl_DumpActiveMemory after the Tcl interpreter has been deleted.
Parameters:
- o fileName - The name of the file to output the memory list to.
Tcl_ValidateAllMemory
Forces a validation of the guard zones of all currently allocated blocks of memory. Normally validation of a block occurs when its freed, unless full validation is enabled, in which case validation of all blocks occurs when ckalloc and ckfree are called. This function forces the validation to occur at any point.
Parameters:
-
o file - The file that this routine is being called from, normally
__FILE__.
o line - The line that this routine is being called from, normally __LINE__.
ENABLING MEMORY DEBUGGING
To enable memory debugging, Tcl should be recompiled from scratch with TCL_MEM_DEBUG defined. This will also compile in a non-stub version of Tcl_InitMemory to add the memory command to Tcl.
TCL_MEM_DEBUG must be either left defined for all modules or undefined for all modules that are going to be linked together. If they are not, link errors will occur, with either TclDbCkfree and Tcl_DbCkalloc or Tcl_Ckalloc and Tcl_Ckfree being undefined.
GUARD ZONES
When memory debugging is enabled, whenever a call to ckalloc is made, slightly more memory than requested is allocated so the memory debugging code can keep track of the allocated memory, and also eight-byte ``guard zones'' are placed in front of and behind the space that will be returned to the caller. (The size of the guard zone is defined by the C #define GUARD_SIZE in baseline/src/ckalloc.c -- it can be extended if you suspect large overwrite problems, at some cost in performance.) A known pattern is written into the guard zones and, on a call to ckfree, the guard zones of the space being freed are checked to see if either zone has been modified in any way. If one has been, the guard bytes and their new contents are identified, and a ``low guard failed'' or ``high guard failed'' message is issued. The ``guard failed'' message includes the address of the memory packet and the file name and line number of the code that called ckfree. This allows you to detect the common sorts of one-off problems, where not enough space was allocated to contain the data written, for example.
THE MEMORY COMMAND
- memory options
-
The Tcl memory command gives the Tcl developer control of Tcl's memory debugging capabilities. The memory command has several suboptions, which are described below. It is only available when Tcl has been compiled with memory debugging enabled. - memory info
-
生成一个报告，包含自从 Tcl 启动以来分配和释放的(内存)总数，当前分配的包(未遇到相应的到 ckfree 的调用的到 ckalloc 的调用的当前数目)的数目，当前分配的字节数，和已分配的包和字节的最大的数目。 - memory trace [on|off]
-
使内存跟踪开启或关闭。在开启内存跟踪的时候，对 ckalloc 的每次调用都导致向 stderr 写一行跟踪信息，其组成有字 ckalloc，随后是返回的地址，分配的内存总数，和进行分配的 C 文件名和代码的行数。例如:...
ckalloc 40e478 98 tclProc.c 1406Calls to ckfree are traced in the same manner, except that the word ckalloc is replaced by the word ckfree.
- memory validate [on|off]
-
使内存生效(validation)开启或关闭。在开启内存生效的时候，在对ckalloc 或 ckfree 的每次调用上，检查用 ckalloc 分配的每块现存的内存的守卫区(guard zone)。这有很大的性能影响而只在强烈怀疑有覆写(overwrite)问题的时候才使用。开启内存生效的益处是在覆写发生之后第一次调用 ckalloc 或 ckfree 的时候就能检测到守卫区覆写，而不是在释放有覆写守卫区的内存的时候，释放可能在内存覆写发生之后才发生。 - memory trace_on_at_malloc nnn
-
在进行了 count 数目 ckalloc 之后启用内存跟踪。例如，如果你键入了 memory trace_on_at_malloc 100，在第 100 次调用 ckalloc 之后，将对所有分配和释放的内存显示内存跟踪信息。因为在一个问题发生之前可能有许多内存活动，如果你能在问题出现( sets in)之前标识出一定数目的分配，决定(judicious)使用这个选项可以减轻跟踪导致的速度变慢(和生成的跟踪信息总数)。在发生一个守卫区错误时，输出自从 Tcl 启动以来发生的内存分配的当前数目。 - memory break_on_malloc nnn
-
在进行了 count 数目的 ckalloc 分配之后，输出一个(中断)消息，表示它现在想进入 C 调试器。 Tcl 将向自身发出一个 SIGINT 信号。如果你在一个 C 调试器下运行 Tcl，它将接着进入调试器命令模式。 - memory display file
-
向指定文件写当前所有分配的内存的一个列表。
DEBUGGING DIFFICULT MEMORY CORRUPTION PROBLEMS
Normally, Tcl compiled with memory debugging enabled will make it easy to isolate a corruption problem. Turning on memory validation with the memory command can help isolate difficult problems. If you suspect (or know) that corruption is occurring before the Tcl interpreter comes up far enough for you to issue commands, you can set MEM_VALIDATE define, recompile tclCkalloc.c and rebuild Tcl. This will enable memory validation from the first call to ckalloc, again, at a large performance impact.
If you are desperate and validating memory on every call to ckalloc and ckfree isn't enough, you can explicitly call Tcl_ValidateAllMemory directly at any point. It takes a char * and an int which are normally the filename and line number of the caller, but they can actually be anything you want. Remember to remove the calls after you find the problem.
关键字 KEYWORDS
ckalloc, ckfree, free, memory, malloc
[中文版维护人]
寒蝉退士[中文版最新更新]
2001/09/28《中国 Linux 论坛 man 手册页翻译计划》:
http://cmpp.linuxforum.net
Index
- NAME
- 总览 SYNOPSIS
- ARGUMENTS
- 描述 DESCRIPTION
- ENABLING MEMORY DEBUGGING
- GUARD ZONES
- THE MEMORY COMMAND
- DEBUGGING DIFFICULT MEMORY CORRUPTION PROBLEMS
- 关键字 KEYWORDS
- [中文版维护人]
- [中文版最新更新]
- 《中国 Linux 论坛 man 手册页翻译计划》:
This document was created by man2html, using the manual pages.
Time: 13:12:25 GMT, December 24, 2015


MySTory
Login
Email
Password
Forgot Password?
Remember me
Login
Not Registered?
Create an account
OR
Login with Facebook
Login with Twitter
Login with Google+


Join us September 22 & 23 in Toronto and help us shape the future of functional UI testing in Ruby.
Featured Participants
- Bret Pettichord - Founder of Watir and member of original launch team for Selenium
- Jeff “Cheezy” Morgan - Author of the Page Object gem (and a host of other testing gems)
- Titus Fortner - Current maintainer of the Ruby Selenium Bindings and project lead for Watir
Ruby is an excellent language in which to write automated browser tests. It is easy to read, fun to use, and has dozens of different gems that do all kinds of different things that make it easier to write and maintain test suites at all levels of complexity. We’d like to improve how some of these gems work together and be able to provide a packaged collection of code that makes it easier for people to ramp up their automated test suites from scratch. I’ve been calling this idea the “Rails of Automated Testing.” In the same way that Rails made it easy and fun for people without much domain experience to create a web application, there is a more specialized need to provide a solution like this for people tasked with writing automated tests.
This might not be a typical hackathon, but we will be deciding on objectives and splitting up into groups to dig into code to make it happen. Project owners will be on hand to answer questions or provide deep dives into the code bases. Options for exploration will include things like: test data management, session configuration, mobile APIs, page modeling and project scaffolding.
Please bring your testing experience and/or your coding skills and join us in Toronto.
Tentative Schedule
Friday
11:30 - Doors open
12 - Introductions and Overview
1 - Coding!
5 - Break for dinner/drinks
Saturday
9:30 - Doors open (breakfast)
10:00 - Recap previous day
11 - Coding!
1 - Lunch Break
2 - Coding!
4 - Presentations, What nexts and Departing thoughts
5 - Break for dinner/drinks
Sponsors
Loblaw Digital: Loblaw Digital is the team building and operating the digital businesses for Canada’s largest and most successful retailer. We create leading responsive e-commerce experiences, including Loblaws Click & Collect, an innovative online grocery shopping experience. We’ve also built and now operate the award-winning JoeFresh.com, along with the iPad/iPhone app. We are based in downtown Toronto and operate like a startup with the resources of a much larger company. We are an entrepreneurial, fast-paced, collaborative, and fun team working towards transforming the way Canadians shop.
Sauce Labs: Sauce Labs makes automated testing awesome. Our cloud-based platform helps developers test native & hybrid mobile and web applications across hundreds of browser / OS platforms, including iOS, Android & Mac OS X. Sauce supports Selenium, Appium and popular JavaScript unit testing frameworks, and integrates with all of the top programming languages, test frameworks and CI systems. With built-in video recording and screenshots of every test case, debugging tools, and secure tunneling for local or firewalled testing. Sauce makes running, debugging and scaling test suites quick and easy. To get started for free, visit saucelabs.com.


Order Form
Vehicle Type:
Select one...
Sedan
Minivan
Luxury
Off-Road
Name:
Pick up Address:
Destination Address:
Telphone Number:
Picture:


Locations
chinook
The Chinook salmon is the largest species in the Pacific salmon genus Oncorhynchus. The common name refers to the Chinookan peoples. Other vernacular names for the species include king salmon, Quinnat salmon, spring salmon, chrome hog, and Tyee salmon.
cutter
Find it in your kitchen
fish
Yes, it is a nice photo
shirt
a piece of clothing for the upper body that has sleeves and usually a collar and buttons down the front but this one has a chinook fishes photo
frosted
frosted cookies
family
let your mobile down then you know your family


Lauren London Praises Nipsey Hussle’s Greatness And Explains Why She Feels Humble With Tear-Jerking Message
by Dylan FisherLauren London has never been one to hide the fact that she admired Nipsey Hussle and cherished the time they had together, and she has talked about their relationship quite often in the past.
And now, months after the rapper’s death, London has continued to make it clear that she was deeply in love with her man, and she is still mourning her loss of him.
This week, it was announced that the late Nipsey became Grammy-nominated artist.
The rapper and activist earned three mentions posthumously, including Best Rap Performance and Best Rap Song for “Racks in the Middle” with Roddy Ricch and Hit-Boy and Best Rap/Sung Performance for “Higher” with “DJ Khaled and John Legend.
London praised the musician and took the decision to open up about her relationship with Nipsey, and has shared various details about the way things between them were.
And one thing is clear from it all — London was very appreciative of what Nipsey did for her, and for the community around him.
She claimed that she was humbled to be around his greatness and proclaimed her eternal love for him.
And of course, many fans of the rapper quickly poured on social media to express their own condolences for her loss, and to remind her that she still has a lot of support from the community, and should keep her head up.
Not that she needs a reminder of that, though.
One person said this: “My boy was fruitful with his craft before he departed 💙💙If he wins, please don’t let his mother accept it on his behalf. We can’t go through one of those speeches again. God bless her, but we just can’t. 🥴”
This follower shared: “He had already been nominated for Victory Lap before he passed for the ones who are saying only because of his death. Well deserved”
Another backer wrote: “Y’all should’ve given him his award when he got nominated last year when he was alive 🙄He wouldn’t have gotten this if he was alive 🚶🏾♀ y’all only show love when they’re gone.”
London is pretty obviously still standing strong, and she will continue to live her life to its fullest, even if she has to do it without the help of Nipsey by her side.
She does seem to get along with the rapper’s fan community quite well, though, so hopefully, she will manage to pull through this difficult time and come out stronger in the end.
The actress is a mother of two.


# MIT License
# Copyright (c) 2021 Vitaman02
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
from io import BytesIO
from typing import Union
from collections import namedtuple
from PIL import Image, ImageFont, ImageDraw
[docs]class Barcode:
"""A base class for all barcode types"""
def __init__(self, barcode: Union[str, int]):
self.code = str(barcode)
@property
def image(self) -> Image.Image:
"""Retrieves and returns the PIL.Image object with the barcode
Returns
-------
PIl.Image.Image:
The barcode image
"""
return self._get_barcode_image()
[docs] def save(self, path: str, size: tuple = None) -> Image.Image:
"""Create a PIL Image object and save it to the path given.
It also returns that image object to the caller.
Parameters
----------
path: str
The path to save the image to
Returns
-------
Returns a PIL Image object to the caller
"""
img = self._get_barcode_image()
if size is not None:
img = img.resize(size)
img.save(path)
[docs] def show(self) -> None:
"""Shows the barcode image"""
img = self._get_barcode_image()
img.show()
[docs] def to_bytesio(self) -> BytesIO:
"""
Write the barcode to a BytesIO object
Returns
-------
Returns the BytesIO object created
"""
obj = BytesIO()
obj.write(self.code.encode("ascii"))
obj.seek(0)
return obj
[docs] def write(self, path: str) -> None:
"""
Tries to save the barcode to a text file
Parameters
----------
path: str
The path of the file
"""
with open(path, "w") as file:
file.write(self.code)
def _get_barcode_image(self) -> Image.Image:
"""Creates a PIL Image from the binary string of the barcode
Returns
-------
A PIL Image with the barcode is returned to the caller.
"""
# Get the padding around the barcode
padding = self.BARCODE_PADDING
# Get the final image's width and height
selected_size, font_size = self.BARCODE_SIZE, self.BARCODE_FONT_SIZE
# This is for the white space around the barcode
padded_size = selected_size[0] + padding.width, selected_size[1] + padding.height
# Get each column's width and height
column_size = self._get_column_size()
# Create a white base image to write columns
base = Image.new("RGB", padded_size, (255, 255, 255))
# Create the image for the barcode
img = Image.new("RGB", (column_size * self.BARCODE_COLUMN_NUMBER, selected_size[1]), (255, 255, 255))
# Get the binary string representation of the barcode digits
binary_string = self.get_binary_string
index = 0
for digit in binary_string:
color = (0, 0, 0) if digit == "1" else (255, 255, 255)
column = Image.new("RGB", (column_size, img.height), color)
img.paste(column, (index, 0))
index += column_size
# Crop redundant whitespace after barcode
img = img.crop((0, 0, index, img.height))
# Paste the barcode on the center of the padded base
Point = namedtuple("Point", "x y")
base_center = Point(base.width // 2, base.height // 2)
img_center = Point(img.width // 2, img.height // 2)
base.paste(img, (base_center.x - img_center.x, base_center.y - img_center.y))
# Write the digits at the bottom
font_path = "./fonts/arial.ttf"
draw = ImageDraw.Draw(base)
font = ImageFont.truetype(font_path, font_size)
text_width, _ = draw.textsize(self.code, font)
x = base_center.x - text_width // 2
y = base.height - (base.height - img.height) // 2
draw.text((x, y), self.code, (0, 0, 0), font=font)
return base
def __eq__(self, other):
if isinstance(other, self.__class__):
return self.code == other.code
elif isinstance(other, str):
return self.code == other
return False
def __str__(self) -> str:
return f"<{self.__class__.__name__}: code={self.code}>"
def __repr__(self):
return self.__str__()


The Society for the Quantitative Analyses of Behavior (SQAB) hosts a yearly conference coinciding with the Annual conference for the Association for Behavior Analysis International (ABAI). Topics span a range of human and non-human experimental research and both paper and poster sessions are offered. The main conference proceedings will take place at the Boston Convention and Exhibition Center (BCEC) in Room 205AB and the poster sessions in Room 205C.
Registration for SQAB 2022 remains open on-site, but online pre-registration is now closed..
As a satellite conference of ABAI, SQAB adheres to ABAI policies regarding vaccination and mask use requirements. According to those policies, attendees will not be required at this time to provide proof of full vaccination upon arriving at the meeting. However, all attendees will be required to wear masks while indoors for the duration of the meeting. If attendees forget their mask at home, we will have free masks available at registration.
Registration and additional information is available on the SQAB 2022 Registration page. The current program for SQAB 2022, including poster schedules, is available here.
May 26nd
Registration: 11:30 - 1:00 pm
01:00 pm - Suzanne Mitchell, Oregon Health & Science University: President’s Introduction
01:15 pm - Ruth Colwill, Brown University: Habituation: The Cinderella of Learning
01:55 pm - Mark Bouton, University of Vermont, Brown University: Context, Behavior Change, and Habit Learning
Break and Refreshments: 2:35 – 2:50 pm
02:50 pm - Ralph Miller, Binghamton University: Researcher Heuristics as an Obstacle to Understanding Learning
03:30 pm - Bryan Klapes, Philadelphia College of Osteopathic Medicine: Modeling and Quantifying Resurgence in an Evolutionary Theory of Behavior Dynamics
Break and Refreshments: 4:10 – 4:25 pm
04:25 pm - Samuel Gershman, Harvard University: Policy Compression
05:05 pm - Juliet Y. Davidow, Northeastern University: Age-Related Differences in Learning: Considerations for Cross-Sectional Modeling of Age in Regression and Computational Models
First Poster Session & Cash Bar: 7:00 - 9:30 pm
May 27th
Coffee & Pastries: 7:45 - 9:00 am
09:00 am - John Krakauer, Johns Hopkins University: The Cognitive-Motor Interface: Deliberation vs. Intelligence
09:40 am - Alireza Soltani, Darmouth College: Information Theory for Behaviorism: Predicting Matching Behavior based on Entropy in the Response to Reward Feedback
Break and Refreshments: 10:20 – 10:35 am
10:35 am - Armando Machado, Universidade de Aveiro: A Dialog between Two Models of Timing, Scalar Expectancy Theory (SET) and Learning-to-Time (LeT)
11:15 am - Andrew Delamater, Brooklyn College: Learning about Reward Identities and Time
Lunch: 11:55 – 1:30 pm
1:30 pm - Michael Young and Brian Howatt, Kansas State University: Response Limitations: How Depletion and Replenishment Cliffs affect Waiting
2:10 pm - Shawn Gilroy, Louisiana State University: The Operant Behavioral Economics of Fad, Questionable, and Pseudoscientific Treatment Consumption
Break and Refreshments: 2:50 – 3:10 pm
3:10 pm - Gene Heyman, Boston College: Choice Principles (the Matching Law and Global Maximizing) help Explain many of Addiction’s Defining Features
3:50 pm - The Tony Nevin Invited Student Presentation Series
João Lucas Bernardy, University of São Paulo: Computational Simulation and the Search for a Quantitative Description of Simple Reinforcement Schedules
Marielena Eudave-Patiño, Universidad de Guadalajara: A Parametric Replication of the Effect on Performance and Timing of Delayed Reinforcement in a Fixed-Interval Schedule
Haoran Wan, Washington University in St. Louis: Comparison of the Adjusting-Amount Procedure and the Monetary Choice Questionnaire for Measuring Delay Discounting
Maria Otero, University of North Texas: Multidimensional Visual Analyses: Performance Mapping of Verbal Behavior using Permutated Radar Charts
Jorge Mallea, Columbia University: Dissociating the Effect of Reinforcement Probability and Rate in Sign and Goal Tracking Behavior
4:30 pm - Awards & Closing Remarks
4:35 pm - Business Meeting
Second Poster Session & Cash Bar: 7:00 - 9:30 pm
ACE Provider: Sean Smith, Ph.D., BCBA-D


| JasperReports Ultimate Guide - Sample Reference - Schema Reference - Configuration Reference - API (Javadoc)
|
|
|
|
|
| JasperReports - Report Parts Sample (version 6.16.0) | |
|
|
|
|
|
| Main Features in This Sample | |
|
| Report parts |
|
|
|
|||||
| top | ||||||
|
|
||||||
| Report parts | Documented by Lucian Chirita | |||||
|
|
||||||
|
| Description / Goal |
| On report parts. | |||
|
| Since |
| 6.0.0 | |||
|
| Other Samples |
|
|
|||
|
|
||||||
|
|
What is a report part
A report part is similar to a subreport, the difference being that pages generated by parts are directly included in the generated report, while subreport pages are embedded into the pages of the parent report. Report parts are not report elements and are not placed on bands, but used instead of bands inside report sections. Parts and bands cannot be mixed in the same report; reports that consist of parts need to have the sectionType attribute set to Part .
We are going to refer to reports that contain parts as part reports.
Part reports can be nested, that is a part of a report can be a part report itself.
All report section (the detail, group header and group footer sections) can contain one or several parts. The report dataset determines how many times each part is instantiated, for example a part placed on the detail section will be printed for each record from the dataset. Dummy groups (that is groups that have constant group expressions) can be used to introduce parts that should only be included once in the generated document. Each part has its own page size, therefore a document obtained from a part report can contain pages of different dimensions. General part configuration Each part can define a name expression, a print when expression, an evaluation time and additional generic properties. The following fragment in JRXML illustrates how a part looks like: <part evaluationTime="Group" evaluationGroup="DatasetGroup"> <property name="custom.property" value="custom_value"/> <printWhenExpression>...</printWhenExpression> <partNameExpression>"A report part"</partNameExpression> <p:subreportPart ...> ... </p:subreportPart> </part> The print when expression is evaluate in order to determine whether the part is to be printed. The name expression provides a user visible name for the part. If the name expression is not defined, the name of the subreport is used. Certain report viewers (such as the JasperReports Swing viewer and the JasperReports Server report viewer) will display tabs for documents generated from part reports. Each part in the report is shown as a tab, and the part name is used as tab label. The optional evaluation time attributes determine the moment at which the part is evaluated and filled. Parts with delayed evaluation are inserted at their original position in the document, you can have a report that has a first part evaluated after all subsequent parts. A delayed evaluation can be achieved by setting the evaluationTime attribute to Report or Group ; in the latter case the evaluationGroup needs to be present.
If the attributes are not present, the part is evaluated immediately.
Group evaluated parts are printed when a group of the report dataset breaks and when the report dataset ends. Report evaluated parts are evaluated after iterating the report dataset and after printing all parts with immediate or group evaluation. Subreport parts JasperReports contains a report part infrastructure that makes use of pluggable part component implementations. A part component is assumed to produce pages that are included in the generated document. The only part implementation currently built into JasperReports uses on a report templates to generate pages. Such a part is called a subreport part. A subreport part has the following structure in JRXML: <part> <p:subreportPart xmlns:p="http://jasperreports.sourceforge.net/jasperreports/parts" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/parts http://jasperreports.sourceforge.net/xsd/parts.xsd" usingCache="true"> <parametersMapExpression>...</parametersMapExpression> <subreportParameter name="SubreportParameter1"> <subreportParameterExpression>...</subreportParameterExpression> </subreportParameter> <subreportParameter name="SubreportParameter2"> <subreportParameterExpression>...</subreportParameterExpression> </subreportParameter> <subreportExpression>"ReportPart.jasper"</subreportExpression> <returnValue subreportVariable="SubreportVariable" toVariable="ParentVariable" calculation="Nothing"/> </p:subreportPart> </part>The semantics of the elements is equivalent to that of subreport elements. One difference from subreport elements is that there are no explicit dataSourceExpression and connectionExpression elements.
One can send a data source or a JDBC connection to a subreport part by defining a subreportParameter that uses REPORT_DATA_SOURCE or REPORT_CONNECTION as parameter name.
Master page variables The preexisting PAGE_NUMBER variable has a scope limited to the lifecycle of the subreport, and it can only be used to print the index of the page in the subreport and the number of pages generated by the subreport part.
Two new variables have been introduced to allow subreport parts to print the index of the current page in the generated document and the total number of pages in the document. The variables are named MASTER_CURRENT_PAGE and MASTER_TOTAL_PAGES and should only be used in text fields that have evaluationTime="Master" or evaluationTime="Auto" because they evaluate to null in all other contexts.
A typical text field using the two variables would look something like the following: <textField evaluationTime="Master"> <reportElement .../> <textFieldExpression>"Page " + $V{MASTER_CURRENT_PAGE} + " of " + $V{MASTER_TOTAL_PAGES}</textFieldExpression> </textField> Table of Contents Special provisions are available for designing a report part that will show a Table of Contents of the generate document. Here is an example of how to create a table of contents with report's hyperlinks at the beginning of a document. |
|||||
|
|
|
|
| © 2001- TIBCO Software Inc. www.jaspersoft.com |


AutoFever inc.™
AutoFever inc.™
Inventory
Contact
Inventory
Search
2017 Ford Focus
Doors: doors
VIN: vin
Color: color
Mileage: mileage
Transmission: trans
Features: features
Click or Swipe to see the next images


3.2. PREDICTIVE PARSING
A blank entry in row
T
, column
x
of the LL(1) parsing table indicates that
the parsing function
T()
does not expect to see token
x
– this will be a syntax
error. How should
error
be handled? It is safe just to raise an exception and
quit parsing, but this is not very friendly to the user. It is better to print an
error message and recover from the error, so that other syntax errors can be
found in the same compilation.
A syntax error occurs when the string of input tokens is not a sentence in
the language. Error recovery is a way of ﬁnding some sentence similar to that
string of tokens. This can proceed by deleting, replacing, or inserting tokens.
For example, error recovery for
T
could proceed by inserting a
num
token.
It’s not necessary to adjust the actual input; it sufﬁces to pretend that the
num
was there, print a message, and return normally.
void T(void) {switch (tok) {
case ID:
case NUM:
case LPAREN: F(); Tprime(); break;
default: printf("expected id, num, or left-paren");
}}
It’s a bit dangerous to do error recovery by insertion, because if the error
cascades to produce another error, the process might loop inﬁnitely. Error re-
covery by deletion is safer, because the loop must eventually terminate when
end-of-ﬁle is reached.
Simple recovery by deletion works by skipping tokens until a token in the
FOLLOW set is reached. For example, error recovery for
T
′
could work like
this:
int Tprime_follow [] = {PLUS, TIMES, RPAREN, EOF, -1};
void Tprime(void) { switch (tok) {
case PLUS:
break;
case TIMES: eat(TIMES); F(); Tprime(); break;
case RPAREN: break;
case EOF:
break;
default:
printf("expected +, *, right-paren,
or end-of-file");
skipto(Tprime_follow);
}}
A recursive-descent parser’s error-recovery mechanisms must be adjusted
(sometimes by trial and error) to avoid a long cascade of error-repair mes-
sages resulting from a single token out of place.
55


it's the 90s boy!
what's good
First:
hello
I hereby sign the rights to my firstborn to the creator of this page


This is the official AtomicDEX mobile beta program channel -
Android: https://play.google.com/store/apps/details?id=com.komodoplatform.atomicdex - iOS: https://testflight.apple.com/join/c2mOLEoC - Please use https://github.com/KomodoPlatform/atomicdex/issues for bug reports and feature requests. For critical security bug reports please do send us your encrypted (https://pgp.mit.edu/pks/lookup?op=get&search=0x379287998EE6CF47) report to<EMAIL_ADDRESS>and allow up to 24h for reply. For atomicDEX API (mm2) related issue reports or feature requests please do use https://github.com/KomodoPlatform/atomicDEX-API/issues
100 messages
Before 05-Dec-19 12:00 AM
ca33331-Oct-19 09:32 PM
we do def. include this in the refactoring and general spam-countermeasures - so even if it is being targeted we are confident to optimize the DEX system to be able to handle very high load as aforementioned by jl777
jl777c31-Oct-19 09:33 PM
if a nationstate does a petabyte/sec Ddos against all the nodes... well nothing can withstand that, but short of some sustained insane level Ddos, with graceful degradation, things would be slower but not stopped. also, when we add filtering by known pubkeys, that will filter out a lot of spam
this was the first atomicDEX stress test, it wasnt able to handle the load that was a lot higher than we expected
jspook1631-Oct-19 09:34 PM
I understand, I just want to get an idea of what is expected as it progresses
jl777c31-Oct-19 09:34 PM
the key is for the load handling to continuously improve and we certainly have a lot of ideas on how to do this
as things progress, this level of traffic will become easy to handle
then a higher level
after that, it seems it is ready for mass usage
jspook1631-Oct-19 09:36 PM
what would you consider mass usage? on par with a typical CEX?
jl777c31-Oct-19 09:36 PM
what is a typical CEX?
jspook1631-Oct-19 09:36 PM
suppose one of the more popular ones...with high usage
jl777c31-Oct-19 09:37 PM
anything other than the major top CEX level of traffic i dont see any issues with, as the trade volumes are really not that big
jspook1631-Oct-19 09:37 PM
Copy
jl777c31-Oct-19 09:37 PM
we cant have lot of small orders due to blockchain based(edited)
maybe it is possible to handle binance level trades, but that is not realistic for the blockchains to support, so it seems a moot point. really the load that needs to be able to handle is whatever load the blockchains can handle
and that is much less than the major CEX trade counts
ca33331-Oct-19 09:39 PM
what would you consider mass usage? - being able to handle loads comparable to any CEX BUT with the big diff. that we will be able to scale this up dynamically - so even if the technical limits are reached (e.g. ~65k ports ) a dynamical scaling would allow us to cover hundreds of thousands if not millions of users once the system is near perfection.
yes - blockchains being a limitation too - agree on that.
jl777c31-Oct-19 09:39 PM
100 swaps per second, per orderbook seems the max the blockchain side can handle
that is 6000 users doing a swap per minute (5 to 10 in parallel)
which actually might be a level we touched today!
4
so when we can handle 6000 users doing 1 swap per minute, that handles the blockchain capacity(edited)
ca33331-Oct-19 09:41 PM
on the other hand your multichain scalability solution could even bring the tech beyond this swap limit at some point in the future
jl777c31-Oct-19 09:42 PM
yes, a cluster of fungible chains can do 100 tx/sec per chain, but we can isolate the trading of each on in a different netid
which means the 6000 users doing 1 swap per minute, per fungible chain can be handled across the netids
fat3lvis31-Oct-19 09:44 PM
It seems an average trade time, or network traffic indicator would be helpful right now. As it is we are just trading blindly, not know if there is a technical issue with our swap, or if it is just network saturation
And is order queueing handled right now? I never waited more than a few minutes today. Would a swap go through eventually or are swaps attempted beyond the network capacity just going nowhere?
jl777c31-Oct-19 09:52 PM
once the network got saturated, it is like a door that had too many people trying to use it at once. some made it through, but most were colliding with others trying to get through.
we did not expect 2000 simultaneous swap attempts for this first stress test, but that is what allowed to find where things meltdown first
round 2, we will do much better, but it is not easy to reproduce such high levels of activity short of doing a public stress test, so until the next one, we wont know for 100% sure if the improvements are enough
phm8731-Oct-19 09:59 PM
it is possible to reproduce with neoload but it is a huge work
cipi31-Oct-19 09:59 PM
bandwith on one of the seed nodes, last 24h
swaps should work again now
another seed node, same time period
SHossain31-Oct-19 10:05 PM
very high load when the stress test started
Andersen31-Oct-19 10:12 PM
someone spaming ?
SHossain31-Oct-19 10:12 PM
no. that is the stress test load
from 2 seed node servers
at 12pm it peaked as everyone joined the stress testing to get swaps done
Goku31-Oct-19 10:25 PM
Hello,
I got a question about a possible collaboration between AtomicDex and Coinomi.
What do dev's think about for being able directly from Coinomi to initiate atomic swaps?
It would bring to the most crypto users access to this awesome technology.
ca33331-Oct-19 10:32 PM
Hi @Goku - we are usually very open for all sort of collaborations. Please contact our Chief Strategist @Steve Lee
1
Patrick Crypto31-Oct-19 11:05 PM
@ca333 "DEX app itself is very stable - i.e. no crashs" while I haven't had the app outright crash and close itself, I have to basically restart it every time I use it because it seems to be unable to reopen connectivity once I switch away from it. Or even just going back from the order book and trying to open it again. It will go from showing say 7-10 orders to 1 to 'create an order'
ca33331-Oct-19 11:18 PM
thank you for the info @Patrick Crypto - can you please send me more infos (operating system version, smartphone device and atomicDEX mobile version) - will investigate this and try to reproduce.
Stinkfist31-Oct-19 11:25 PM
Hi, I was unable to make any swaps, tried for hours.. one of my main issues is most of the time, including now is the Rick and Morty coins were not available to even try to make any swaps. Seems quite unfair to have a contest that people that tried to enter could not...there was one time I was able to try to make some swaps and tried about 40 different ones, but not one even really tried to go through...I know a stress test is supposed to fail, but maybe the requirements to be eligible to win the contest should not have been related to active swaps...
CrisF31-Oct-19 11:26 PM
Hi @Stinkfist, do you mean that you didn't get coins from the faucet?
louchristopher31-Oct-19 11:30 PM
I had more than 130 attempted swaps but only 2 successful swaps went through. Did we have to have 30 successful swaps for the lottery?
CrisF31-Oct-19 11:34 PM
Hi @louchristopher, I'm envious I had quite a few attempts but no luck.
I believe the final results are still been checked. Some logs were sent in later.(edited)
gigamesh31-Oct-19 11:34 PM
@louchristopher youre good
see #official📢
1
louchristopher31-Oct-19 11:35 PM
Thank you.
ca33331-Oct-19 11:35 PM
@louchristopher no - we reduced the reqs so even if no swaps went through but you re listed in the leaderboard you do qualify. And we will also randomly honor testers that didn't make it to the leaderboard at all.
gigamesh31-Oct-19 11:36 PM
randomly honor testers that didn't make it to the leaderboard at all
on closer inspection i cannot see any evidence of the successful swap i thought i had... was i dreaming?
CrisF31-Oct-19 11:50 PM
@louchristopher I'm seeing someone who has more than 30 on the leaderboard. Not sure of the update status on that. You can follow here: https://oracle.earth/mm2_stresstest_combined_leaderboard/
benzo36501-Nov-19 12:07 AM
Cleared all my order. None were successful. Created one just now...still stuck on matching
3d4668ed-52f7-4fe6-b402-49138871dcbb
Stinkfist01-Nov-19 12:10 AM
@CrisF I was able get the faucet, but most of the time they showed up as unconfirmed, I got them to show up maybe twice, we’ll the morty ones did the rick ones never showed up at any point
CrisF01-Nov-19 12:12 AM
Hi @benzo365 , I was the same. the most recent trade I started, just after your message, got a match.
@Stinkfist Good that you were able to have a chance to trade then. What did the explorer say about the RICK?
gigamesh01-Nov-19 12:16 AM
played with Chainswap a couple days ago. iirc both parties had to be online to perform a swap. is the same true of atomic?
kmdkrazy01-Nov-19 12:25 AM
Yes
Artist01-Nov-19 12:26 AM
Well I came In top 40
Xd
花果山01-Nov-19 12:31 AM
I successfully exchanged 13 times. Later I saw that there were too many failures. I deleted the app and reinstalled it.
The statistics list data is not accurate.
Stinkfist01-Nov-19 12:33 AM
Here is the transaction for the morty still says unconfirmed 83c4bb9ff62f7bf74716c476c9995b0e5f9a93d86435fa68c3292c01f4c3df24. And here is the rick which also still says unconfirmed c0126f8697ab711c25cbe168a948ba259cee6d07068ade92c7930c193e605545.
From the chain, I have not only successfully exchanged 1 time.
gigamesh01-Nov-19 01:18 AM
@Stinkfist i have one of those too. never got confirmed
even tho i did badly it was still fun
AkiraX01-Nov-19 02:54 AM
Is it over?
Artist01-Nov-19 03:20 AM
yes
kmdkrazy01-Nov-19 04:51 AM
I think I did another historical feat for a user.... I got 6 tx in 1 block yesterday - block 131791
joker-h01-Nov-19 05:27 AM
I had 1 successful swap, and it was at 18:03 , no lottery tickets for me
Jimm B.01-Nov-19 05:53 AM
@joker-h the conditions have changed. Check #official
Acura01-Nov-19 06:01 AM
AtomicDex Update for iOS released
polycryptoblog01-Nov-19 06:09 AM
Just wanted to post something I noticed , last night about 12 hours or so before the test is when I first noticed the slowness of rick and morty swaps, I switched to doing other coin demos for a bit.
The main difference between earlier swaps and that period was the orderbook size .
gigamesh01-Nov-19 07:28 AM
well ill post my address on the off-chance it helps me get in the pool of "testers that didn't make it to the leaderboard at all"!(edited)
RK3Ytedp7eAt3JxbDThpQ2EAD49X5eCs1i
respect to whoever got over 30. dunno how you managed that (edited)
do the devs want our logs? ill send them on if desired
Artist01-Nov-19 09:09 AM
I made 2 succesful
And like 100 plus failed
XD
tese01-Nov-19 09:10 AM
I still dont appear in the leaderboard with more than 15 :( Lets wait to the logs review for the final results


{% extends "extractor/base.html" %} {% import "bootstrap/wtf.html" as wtf %} {{ wtf.quick_form(form) }} {% block content %}


Get started
This page guides you through the first steps to work on a project. And beyond. The only requirement is to have MarkLogic installed and running already.
TL;DR
Let us start with a summary of this entire introduction. In case you are in a big rush, that should give you enough to get started.
$ npm install mlproj -g # install mlproj $ mlproj help $ mkdir my-foobar # create a new project $ cd my-foobar $ mlproj new $ mlproj show # create the env on MarkLogic $ mlproj setup $ mlproj deploy # deploy code and load data $ mlproj load doc some/doc.xml
One more tip though. Using the global option -d
enters the
"dry run mode". In this mode, no action is actually done, it is only
simulated and displayed, so you can inspect first what would happen
when you run the command for real. For instance for the
command setup
:
$ mlproj -d setup
And now for some more explanations...
Once and for all
Before starting wih mlproj
, you need to install it on your
computer. This has to be done only once:
$ npm install mlproj -g
You can validate that the install was successful by displaying the main help message:
$ mlproj help
The npm install
command has to be invoked only once. But you
can also use it again later to upgrade to the latest version.
Since mlproj
evolves quite rapidly at the moment, it is
recommended you use it for time to time.
New project
Create a new project is as easy as invoking the command new
,
and answering a few questions interactively. It has to be invoked from an
empty directory:
$ mkdir my-foobar $ cd my-foobar $ mlproj new --- Questions --- Project code : my-foobar Title : My own foobar project Name URI (http://mlproj.org/example/my-foobar): http://example.org/my-foobar Version (0.1.0): Port (8080) : --- Summary --- ✓ Project created: my-foobar → Check/edit files in: /home/fgeorges/tmp/my-foobar/xproject $
The values within parentheses are the default values to use, if you hit
the enter
key without typing anything.
As the summary message suggests, files have been created in a new
sub-directory xproject/
, in the current directory. This new
directory contains the project descriptor, as well as the environment files.
More on that later, but for now, just have a look at them and, if MarkLogic
is installed on localhost
:
- adapt user and password in
xproject/mlenvs/dev.json
If not:
- adapt user, password, and host in
xproject/mlenvs/prod.json
- change
"dev.json"
into"prod.json"
inxproject/mlenvs/default.json
Check settings
Congratulations, you have just created your first project! Now invoke the
command show
, to see how it has been configured and if nothing
has to be changed:
$ mlproj show Project: my-foobar title: My own foobar project name: http://example.org/my-foobar version: 0.1.0 Environment: default host: localhost user: admin password: ***** sources dir: /tmp/yo/src/ modules DB: (filesystem) parameters: port: 8080 import graph: -> dev.json -> base.json Database: my-foobar-content id: content forests: my-foobar-content-001 Server: my-foobar group: Default id: app content DB: my-foobar-content port: 8080 root: /tmp/yo/src/ $
What you see here is pretty self-explanatory:
- information about the project itself (essentially what you fed the
command
new
with) - the environment details (connection, parameters, import graph)
- each database and server in the environment, with their details
If anything must be changed, look at the files
in xproject/mlenvs/
, and see if you can adapt the corresponding
value. All details are in the environment format
documentation.
On MarkLogic!
So what is the point of all this, if it is not to create the corresponding components (databases and application servers) on MarkLogic? To do so, nothing more simple:
$ mlproj setup --- Prepare --- • checking the database: my-foobar-content → Retrieve database props: my-foobar-content need to create database: my-foobar-content • checking forests need to create forest: my-foobar-content-001 • checking the http server: my-foobar → Retrieve server props: my-foobar need to create server: my-foobar --- Progress --- → Create database: my-foobar-modules → Create forest: my-foobar-modules-001 → Create database: my-foobar-content → Create forest: my-foobar-content-001 → Create server: my-foobar --- Summary --- Done: ✓ Create database: my-foobar-modules ✓ Create forest: my-foobar-modules-001 ✓ Create database: my-foobar-content ✓ Create forest: my-foobar-content-001 ✓ Create server: my-foobar $
As you can see, mlproj
first gather all information about what
needs to be created, changed, or updated, and accumulate the list of actions
to be done before actually executing them. This maximizes the detection of
errors before starting to make any change.
In case of any error, processing stops. The summary gives the list of completed actions, the error details, then the list of actions that were still to be executed at the time.
Deploy code
Now, let us simulate hours and days and weeks of work, by creating the
following modules in the src/
directory. Feel free to use
JavaScript instead if this is your language of choice. The goal is just to
get some files in src/
.
Note that deploying code to the modules database is only required (and does only make sense) when the app server is attached to a modules database, as opposed to accessing the modules directly on the locahost file system. With the default environment files, this means you need to deploy only if you useprod.json
, not withdev.json
(which is the default). Trying to deploy with the latter will result in an error.
This is src/lib/foo.xqy
:
module namespace foo = "http://example.com/foobar/lib/foo"; declare function foo:hello($who) { 'Hello, ' || $who || '!' };
And this is src/endpoints/bar.xqy
:
import module namespace foo = "http://example.com/foobar/lib/foo" at "../lib/foo.xqy"; foo:hello('world')
Now we can deploy the code to the modules database.
$ mlproj deploy → Insert document: /endpoints/bar.xqy → Insert document: /lib/foo.xqy $
Load data
The last step you might need in order to play with a project is the ability
to load some document. For that, use the command load doc
.
First create a document to be loaded, in data/hello.xml
:
<greetings> <who>World</who> </greetings>
Then load it in the content database:
$ mlproj load doc data/hello.xml
→ Insert document: /hello.xml
$
As you can see, mlproj
conveniently infers the document URI in
the database, based on the filename in the data/
sub-directory.
What now?
This quick overview should give you enough to get started:
install mlproj
, create a new project, create its databases and
app servers on MarkLogic, deploy the code, and load some data.
The next steps now, if you want to learn more, is to have a look at:
- the list of commands available
- the description of the environment files, to describe the components to create on MarkLogic (databases and app servers) and their properties (indexes, URL rewriter, etc.)
Have fun!


Description: The app randomly picks a letter, and the user has to guess which letter the app chose.
Guess what letter I'm thinking of....
Wins: 0
Losses: 0
Number of Guesses: 0
So far, you guessed: ""


Hooks are a new addition in React 16.8. They let you use state and other React features without writing a class.
Building your own Hooks lets you extract component logic into reusable functions.
When we were learning about using the Effect Hook, we saw this component from a chat application that displays a message indicating whether a friend is online or offline:
import React, { useState, useEffect } from 'react';
function FriendStatus(props) {
const [isOnline, setIsOnline] = useState(null);
useEffect(() => {
function handleStatusChange(status) {
setIsOnline(status.isOnline);
}
ChatAPI.subscribeToFriendStatus(props.friend.id, handleStatusChange);
return () => {
ChatAPI.unsubscribeFromFriendStatus(props.friend.id, handleStatusChange);
};
});
if (isOnline === null) {
return 'Loading...';
}
return isOnline ? 'Online' : 'Offline';
}
Now let's say that our chat application also has a contact list, and we want to render names of online users with a
green color. We could copy and paste similar logic above into our FriendListItem
component but it
wouldn't be ideal:
import React, { useState, useEffect } from 'react';
function FriendListItem(props) {
const [isOnline, setIsOnline] = useState(null);
useEffect(() => {
function handleStatusChange(status) {
setIsOnline(status.isOnline);
}
ChatAPI.subscribeToFriendStatus(props.friend.id, handleStatusChange);
return () => {
ChatAPI.unsubscribeFromFriendStatus(props.friend.id, handleStatusChange);
};
});
return (

{props.friend.name}

);
}
Instead, we'd like to share this logic between FriendStatus
and FriendListItem
.
Traditionally in React, we've had two popular ways to share stateful logic between components: render props and higher-order components. We will now look at how Hooks solve many of the same problems without forcing you to add more components to the tree.
When we want to share logic between two JavaScript functions, we extract it to a third function. Both components and Hooks are functions, so this works for them too!
A custom Hook is a JavaScript function whose name starts with "use
" and that may call other Hooks. For example, useFriendStatus
below is our first custom Hook:
import { useState, useEffect } from 'react';
function useFriendStatus(friendID) {
const [isOnline, setIsOnline] = useState(null);
useEffect(() => {
function handleStatusChange(status) {
setIsOnline(status.isOnline);
}
ChatAPI.subscribeToFriendStatus(friendID, handleStatusChange);
return () => {
ChatAPI.unsubscribeFromFriendStatus(friendID, handleStatusChange);
};
});
return isOnline;
}
There's nothing new inside of it – the logic is copied from the components above. Just like in a component, make sure to only call other Hooks unconditionally at the top level of your custom Hook.
Unlike a React component, a custom Hook doesn't need to have a specific signature. We can decide what it takes as
arguments, and what, if anything, it should return. In other words, it's just like a normal function. Its name
should always start with use
so that you can tell at a glance that the rules of Hooks apply to it.
The purpose of our useFriendStatus
Hook is to subscribe us to a friend's status. This is why it takes
friendID
as an argument, and returns whether this friend is online:
function useFriendStatus(friendID) {
const [isOnline, setIsOnline] = useState(null);
// ...
return isOnline;
}
Now let's see how we can use our custom Hook.
In the beginning, our stated goal was to remove the duplicated logic from the FriendStatus
and FriendListItem
components. Both of them want to know whether a friend is online.
Now that we've extracted this logic to a useFriendStatus
hook, we can just use it:
function FriendStatus(props) {
const isOnline = useFriendStatus(props.friend.id);
if (isOnline === null) {
return 'Loading...';
}
return isOnline ? 'Online' : 'Offline';
}
function FriendListItem(props) {
const isOnline = useFriendStatus(props.friend.id);
return (

{props.friend.name}

);
}
Is this code equivalent to the original examples? Yes, it works in exactly the same way. If you look closely, you'll notice we didn't make any changes to the behavior. All we did was to extract some common code between two functions into a separate function. Custom Hooks are a convention that naturally follows from the design of Hooks, rather than a React feature.
Do I have to name my custom Hooks starting with "use
"? Please do. This convention is
very important. Without it, we wouldn't be able to automatically check for violations of rules of Hooks because we couldn't tell if a certain function contains calls
to Hooks inside of it.
Do two components using the same Hook share state? No. Custom Hooks are a mechanism to reuse stateful logic (such as setting up a subscription and remembering the current value), but every time you use a custom Hook, all state and effects inside of it are fully isolated.
How does a custom Hook get isolated state? Each call to a Hook gets isolated state. Because
we call useFriendStatus
directly, from React's point of view our component just calls
useState
and useEffect
. And as we learned earlier, we can call
useState
and useEffect
many times in one component, and they will be completely
independent.
Since Hooks are functions, we can pass information between them.
To illustrate this, we'll use another component from our hypothetical chat example. This is a chat message recipient picker that displays whether the currently selected friend is online:
const friendList = [
{ id: 1, name: 'Phoebe' },
{ id: 2, name: 'Rachel' },
{ id: 3, name: 'Ross' },
];
function ChatRecipientPicker() {
const [recipientID, setRecipientID] = useState(1);
const isRecipientOnline = useFriendStatus(recipientID);
return (
<>
<Circle color={isRecipientOnline ? 'green' : 'red'} />
<select
value={recipientID}
onChange={e => setRecipientID(Number(e.target.value))}
>
{friendList.map(friend => (
<option key={friend.id} value={friend.id}>
{friend.name}
</option>
))}
</select>
</>
);
}
We keep the currently chosen friend ID in the recipientID
state variable, and update it if the user chooses a different friend in the <select>
picker.
Because the useState
Hook call gives us the latest value of the recipientID
state variable, we can pass it to our custom useFriendStatus
Hook as an argument:
const [recipientID, setRecipientID] = useState(1);
const isRecipientOnline = useFriendStatus(recipientID);
This lets us know whether the currently selected friend is online. If we pick a different friend and update the recipientID
state variable, our useFriendStatus
Hook will unsubscribe from the previously selected friend, and subscribe to the status of the newly selected one.
useYourImagination()
Custom Hooks offer the flexibility of sharing logic that wasn't possible in React components before. You can write custom Hooks that cover a wide range of use cases like form handling, animation, declarative subscriptions, timers, and probably many more we haven't considered. What's more, you can build Hooks that are just as easy to use as React's built-in features.
Try to resist adding abstraction too early. Now that function components can do more, it's likely that the average function component in your codebase will become longer. This is normal – don't feel like you have to immediately split it into Hooks. But we also encourage you to start spotting cases where a custom Hook could hide complex logic behind a simple interface, or help untangle a messy component.
For example, maybe you have a complex component that contains a lot of local state that is managed in an ad-hoc way.
useState
doesn't make centralizing the update logic any easier so you might prefer to write it as a Redux reducer:
function todosReducer(state, action) {
switch (action.type) {
case 'add':
return [...state, {
text: action.text,
completed: false
}];
// ... other actions ...
default:
return state;
}
}
Reducers are very convenient to test in isolation, and scale to express complex update logic. You can further break them apart into smaller reducers if necessary. However, you might also enjoy the benefits of using React local state, or might not want to install another library.
So what if we could write a useReducer
Hook that lets us manage the local state of our component with a reducer? A simplified version of it might look like this:
function useReducer(reducer, initialState) {
const [state, setState] = useState(initialState);
function dispatch(action) {
const nextState = reducer(state, action);
setState(nextState);
}
return [state, dispatch];
}
Now we could use it in our component, and let the reducer drive its state management:
function Todos() {
const [todos, dispatch] = useReducer(todosReducer, []);
function handleAddClick(text) {
dispatch({ type: 'add', text });
}
// ...
}
The need to manage local state with a reducer in a complex component is common enough that we've built the
useReducer
Hook right into React. You'll find it together with other built-in Hooks in the Hooks API reference.