A top-level encapsulation of a DJI drone/FC connected to your OES. More...
#include <dji_vehicle.hpp>
Public Types | |
| typedef struct DJI::OSDK::Vehicle::ActivateData | ActivateData |
Public Member Functions | |
| Vehicle (const char *device, uint32_t baudRate, bool threadSupport, bool enableAdvancedSensing=false) | |
| Vehicle (bool threadSupport) | |
| void | obtainCtrlAuthority (VehicleCallBack callback=0, UserData userData=0) |
| Obtain the control authority of the api (non-blocking call) More... | |
| ACK::ErrorCode | obtainCtrlAuthority (int timeout) |
| Obtain the control authority of the api (blocking call) More... | |
| void | releaseCtrlAuthority (VehicleCallBack callback=0, UserData userData=0) |
| Release the control authority of the api (non-blocking call) More... | |
| ACK::ErrorCode | releaseCtrlAuthority (int timeout) |
| Release the control authority of the api (blocking call) More... | |
| ACK::ErrorCode | activate (ActivateData *data, int timeout) |
| Send activation control to your flight controller to check if: a) your application registered in your developer account b) API Control enabled in the Assistant software Proceed to programming if activation successful. More... | |
| ACK::DroneVersion | getDroneVersion (int timeout) |
| Send get version control to the vehicle. More... | |
| void | activate (ActivateData *data, VehicleCallBack callback=0, UserData userData=0) |
| Send activation request to your flight controller to check if: a) your application registered in your developer account b) API Control enabled in the Assistant software Proceed to programming if activation successful. More... | |
Public Attributes | |
| OpenProtocol * | protocolLayer |
| DataSubscription * | subscribe |
| DataBroadcast * | broadcast |
| Control * | control |
| Camera * | camera |
| Gimbal * | gimbal |
| MFIO * | mfio |
| MobileCommunication * | moc |
| MobileDevice * | mobileDevice |
| MissionManager * | missionManager |
| HardwareSync * | hardSync |
| VirtualRC * | virtualRC |
| PayloadDevice * | payloadDevice |
| CameraManager * | cameraManager |
| FlightController * | flightController |
| PSDKManager * | psdkManager |
| CircularBuffer * | circularBuffer |
| void * | nbCallbackFunctions [200] |
| UserData | nbUserData [200] |
| bool | hotPointData |
| bool | wayPointData |
| void | getDroneVersion (VehicleCallBack callback=0, UserData userData=0) |
| ActivateData | getAccountData () const |
| void | setAccountData (const ActivateData &value) |
| void | setVersion (const Version::FirmWare &value) |
| Version::FirmWare | getFwVersion () const |
| char * | getHwVersion () const |
| char * | getHwSerialNum () const |
| bool | isLegacyM600 () |
| bool | isM100 () |
| bool | isM210V2 () |
| void | setKey (const char *key) |
| void | setLastReceivedFrame (RecvContainer recvFrame) |
| RecvContainer | getLastReceivedFrame () |
| void * | waitForACK (const uint8_t(&cmd)[OpenProtocolCMD::MAX_CMD_ARRAY_SIZE], int timeout) |
| Wait for ACK frame to arrive. | |
| void | processReceivedData (RecvContainer *receivedFrame) |
| This function takes a frame and calls the right handlers/functions based on the nature of the frame (ack, blocking, etc.) More... | |
| void | callbackPoll () |
| int | callbackIdIndex () |
| Thread * | getSerialReadThread () const |
| Thread management. | |
| Thread * | getCallbackThread () const |
| Thread * | getUSBReadThread () const |
| bool | isUSBThreadReady () |
| uint8_t * | getRawVersionAck () |
| int | functionalSetUp () |
| Initialize all functional Vehicle components like, Subscription, Broadcast, Control, ect. | |
| bool | GimbalSetUp () |
| Initialize gimbal component. | |
| PlatformManager * | getPlatformManager () const |
| void | setEncryption (bool encryptSetting) |
| bool | getEncryption () |
| bool | getActivationStatus () |
| MobileDevice * | getMobileDevice () |
| static bool | parseDroneVersionInfo (Version::VersionData &versionData, uint8_t *ackPtr) |
Detailed Description
A top-level encapsulation of a DJI drone/FC connected to your OES.
This class instantiates objects for all features your drone/FC supports. Create a Vechile object in your code and you will have access to the entire DJI OSDK API.
Member Function Documentation
◆ activate() [1/2]
| ACK::ErrorCode Vehicle::activate | ( | ActivateData * | data, |
| int | timeout | ||
| ) |
Send activation control to your flight controller to check if:
a) your application registered in your developer account
b) API Control enabled in the Assistant software
Proceed to programming if activation successful.
- Remarks
- Blocks until ACK frame arrives or timeout occurs
- Returns
- ACK from flight controller
- Note
- for ios verification
Using function prototype II of send
Let user know about other errors if any
◆ activate() [2/2]
| void Vehicle::activate | ( | ActivateData * | data, |
| VehicleCallBack | callback = 0 , |
||
| UserData | userData = 0 |
||
| ) |
Send activation request to your flight controller to check if:
a) your application registered in your developer account
b) API Control enabled in the Assistant software
Proceed to programming if activation successful.
- Note
- for ios verification
Using function prototype II of send
◆ callbackPoll()
| void Vehicle::callbackPoll | ( | ) |
User sets this to true in order to enable Callback thread with Non blocking calls.
If Head = Tail, there is no data in the buffer, do not call cbPop.
◆ getAccountData()
| Vehicle::ActivateData Vehicle::getAccountData | ( | ) | const |
Get Activation information
◆ getDroneVersion() [1/2]
| ACK::DroneVersion Vehicle::getDroneVersion | ( | int | timeout | ) |
Send get version control to the vehicle.
- Returns
- type ACK::DroneVersion containing: ACKErrorCode: data (ack value) VersionData: hardware version VersionData: firmware version VersionData: hardware serial number VersionData: CRC VersionData: version name
Set fwVersion to 0 so we can catch the error.
Construct final ACK to return to user
◆ getDroneVersion() [2/2]
| void Vehicle::getDroneVersion | ( | VehicleCallBack | callback = 0 , |
| UserData | userData = 0 |
||
| ) |
Get aircraft version.
- Note
- You can query your flight controller prior to activation.
◆ isLegacyM600()
| bool Vehicle::isLegacyM600 | ( | ) |
Check for the special M600 backwards compatibility
◆ isM100()
| bool Vehicle::isM100 | ( | ) |
Check for the M100 backwards compatibility
◆ obtainCtrlAuthority() [1/2]
| void Vehicle::obtainCtrlAuthority | ( | VehicleCallBack | callback = 0 , |
| UserData | userData = 0 |
||
| ) |
Obtain the control authority of the api (non-blocking call)
- Parameters
-
callback callback function userData user data (void ptr)
◆ obtainCtrlAuthority() [2/2]
| ACK::ErrorCode Vehicle::obtainCtrlAuthority | ( | int | timeout | ) |
Obtain the control authority of the api (blocking call)
- Parameters
-
timeout time to wait for ACK
◆ parseDroneVersionInfo()
|
static |
Note down our starting point as a sanity check
2b ACK.
Next, we might have CRC or ID; Put them into a variable that we will parse later. Find next \0
Fill in the termination character
Now we're at the name. First, let's fill up the name field.
Now, we start parsing the name. Let's find the second space character.
Found first space ("SDK-v1.x")
Found second space ("BETA")
Next is the HW version
Fill in the termination character
Finally, we come to the FW version. We don't know if each clause is 2 or 3 digits long.
Special cases M100:
Bug in M100 does not report the right FW.
M600/A3 FW 3.2.10
Bug in M600 does not report the right FW.
Now, we can parse the CRC and ID based on FW version. If it's older than 3.2 then it'll have a CRC, else not.
Not catastrophic error
Fill in the termination character
Not catastrophic error
Fill in the termination character
Finally, we print stuff out.
◆ processReceivedData()
| void Vehicle::processReceivedData | ( | RecvContainer * | receivedFrame | ) |
This function takes a frame and calls the right handlers/functions based on the nature of the frame (ack, blocking, etc.)
- Parameters
-
receivedFrame RecvContainer populated by the protocolLayer
- Returns
- NULL
◆ releaseCtrlAuthority() [1/2]
| void Vehicle::releaseCtrlAuthority | ( | VehicleCallBack | callback = 0 , |
| UserData | userData = 0 |
||
| ) |
Release the control authority of the api (non-blocking call)
- Parameters
-
callback callback function userData user data (void ptr)
◆ releaseCtrlAuthority() [2/2]
| ACK::ErrorCode Vehicle::releaseCtrlAuthority | ( | int | timeout | ) |
Release the control authority of the api (blocking call)
- Parameters
-
timeout time to wait for ACK
◆ setLastReceivedFrame()
| void Vehicle::setLastReceivedFrame | ( | RecvContainer | recvFrame | ) |
- Note
- not used yet Storage for last received packet: accessors
◆ setVersion()
| void Vehicle::setVersion | ( | const Version::FirmWare & | value | ) |
Set SDK version.
Member Data Documentation
◆ nbUserData
| UserData DJI::OSDK::Vehicle::nbUserData[200] |
The documentation for this class was generated from the following files:
- osdk-core/api/inc/dji_vehicle.hpp
- osdk-core/api/src/dji_vehicle.cpp


Interior Decoration
Before Construction
Project prior to launch.
During construction
Construction.
Finished construction
End result.


Storage¶
-
class
MyPiEye.Storage.
ImageStorage
(config, creds_folder='.')[source]¶ -
__init__
(config, creds_folder='.')[source]¶ Parameters: - config – the main config
- creds_folder – where to store the .json (unused?)
-
executor
= <concurrent.futures.process.ProcessPoolExecutor object>¶
-
Local Filesystem¶
Saves both annotated (with boxes) and non-annotated files.
-
MyPiEye.Storage.local_filesystem.
local_save
(savedir, box_name, nobox_name, subdirectory)[source]¶ Copies the files to the local filesystem. If the subdirectories don’t exist, they will be created.
Parameters: - savedir – The local base directory to save files
- box_name – the filename of the image with boxes
- nobox_name – the filename of a clean image
- subdirectory – the subdirectory to store them in
Returns: tuple of resolved filenames. Raises if the base directory doesn’t exist.
Google Drive¶
Save to Google. Maintaining the folder is completely manual, this only uploads.
GDriveStorage¶
-
class
MyPiEye.Storage.
GDriveStorage
(gauth, gdrive_folder)[source]¶ -
__init__
(gauth, gdrive_folder)[source]¶ Represents a folder on GDrive. Only folders off the root are supported.
The app is restricted to only files and folders that it creates, so it is important that the same credentials be used to initialize the app.
Parameters: - gauth – an initialized
GDriveAuth
object. - gdrive_folder – the name of the folder.
- gauth – an initialized
-
folder_lock
= <Lock(owner=None)>¶
-
main_folder
(create=False)[source]¶ Sets self.folder_id
Parameters: create – Create the folder if it doesn’t exist. Returns: the id on success, None on fail.
-
GDriveAuth¶
-
class
MyPiEye.Storage.
GDriveAuth
(client_id, client_secret, credential_filename)[source]¶ Provider for uploading to Google Drive.
- Auth info is kept in a caller-specified JSON file with the following fields:
- refresh_token
- access_token
- expires_in
The easiest way to use it is to call the class method py:func:get_access_token. Note that this will prompt the user at the command line if the app hasn’t been authorized yet.
- Expected usage:
- create object
- call
init_auth()
. If the app hasn’t been validated, it will return False. Otherwise, use object access_token. - call
init_token()
. This starts the authorization flow. Returns fields to be displayed to the user. - call
validate_token()
in a loop, until True is returned. - Every so often, call
refresh_token()
. Callinginit_auth()
will work, too.
Access can be revoked at https://myaccount.google.com/permissions?pli=1
-
__init__
(client_id, client_secret, credential_filename)[source]¶ Google-provided items, and a filename to store the cookie.
Parameters: - client_id – From Google
- client_secret – From Google
- credential_filename – a filename
-
init_auth
()[source]¶ Loads auth from file, and tries to connect. If the initial attempt fails, then it will try to refresh the token.
Returns: True if we have a valid auth_token
-
classmethod
init_gauth
(client_id, client_secret, filename)[source]¶ Helper for getting an initialized object. This will prompt the user at the command line with validation code if one has not been set.
Parameters: - client_id –
- client_secret –
- filename – the filename for the saved tokens. Used by :func:__init__
Returns: None on failure, initialized
GDriveAuth
object
-
init_token
()[source]¶ Begin the validation flow for user confirmation and permission. Used for “new” installations. The user should be prompted with the returned values so they can go to Google and allow this app to access their Google Drive files and folders.
Returns: tuple with verification_url, user_code, and device_code
-
refresh_auth_token
()[source]¶ Attempts to refresh existing token. If successful, updates the file.
Returns: True on success.
-
try_auth
()[source]¶ Tries to get a list of files from the root. It doesn’t matter if there are any.
Returns: True if authenticated.
-
validate_token
(device_code)[source]¶ The second stage of the validation flow. Checks if the validation code has been entered by the user at Google. Saves to self.credential_file if it is. Retries should be handled by the caller.
Parameters: device_code – returned from init_token()
.Returns: True on success, None if waiting, and False on error.


Genesis 31:14
And Rachel and Leah answered and said unto him, Is there yet any portion or inheritance for us in our father's house?


Augustus Brine declined offers for a ride home. He wanted to walk. He needed to think. Gian Hen Gian walked at his side.
“I can repair your truck, make it fly if you wish,” the Djinn said.
“I don’t want it,” Brine said. “I’m not even sure I want to go home.”
“You may do as you wish, Augustus Brine.”
“I don’t want to go back to the store either. I think I’ll give the business to Robert and Jenny.”
“Is it wise to put the drunkard in the wine barrel?”
“He won’t drink anymore. I want them to have the house, too. I’ll start the paperwork in the morning.”
“It is done.”
“Just like that?”
“You doubt the word of the King of the Djinn?”
They walked in silence for a while before Brine spoke again.
“It seems wrong that Travis has lived so long without having a life, without love.”
“No, not like myself. I’ve had a good life.”
“Would you have me make him young again?”
Brine thought for a moment before he answered. “Could you make him age in reverse? For each year that passes he is a year younger?”
“It can be done.”
“And her, too?”
“Her?”
“Amanda. Could you make them grow young together?”
“It can be done, if you command it.”
“I do.”
“It is done. Will you tell them?”
“No, not right away. It will be a nice surprise.”
“And what of yourself, Augustus Brine? What is it you wish?”
“I don’t know. I always thought I’d make a good madam.”
Before the Djinn could say anything else, Rachel’s van sputtered up beside them and stopped. She rolled down the window and said, “Do you need a ride, Gus?”
“He is trying to think,” the Djinn snapped.
“Don’t be rude,” Brine said to the Djinn. “Which way are you going?”
“I don’t know for sure. I don’t feel like going home—maybe ever.”
Brine walked around the front of the van and slid open the cargo door. “Get in, Gian Hen Gian.”
The Djinn got into the van. Brine slammed the cargo door and climbed into the passenger seat next to Rachel.
“Well?” she said.
“East,” Brine said. “Nevada.”
It was called King’s Lake. When it appeared in the desert, it simultaneously appeared on every map of Nevada that had ever been printed. People who had passed through that part of the state swore that they had never seen it before, yet there it was on the map.
Above the tree-lined banks of King’s Lake stood a palace with a hundred rooms. Atop the palace a massive electric sign read, BRINE’S BAIT, TACKLE, AND FINE WOMEN.
Anyone who visited the palace was greeted by a beautiful, dark-haired woman, who took their money and led them to a room. On their way out a tiny brown man in a rumpled suit returned their money and wished them well.
Upon returning home the visitors told of a white-haired man who sat all day in the lotus position at the end of a pier in front of the palace, fishing and smoking a pipe. They said that when evening approached, the dark-haired woman would join the man and together they would watch the sun go down.
The visitors were never quite clear as to what had happened to them while they were at the palace. It didn’t seem to matter. But after a visit they found that they appreciated the simple pleasures that life presented to them and they were happy. And although they recommended Brine’s to their friends, they never returned themselves.
What went on in the rooms is another story altogether.


Arrangements for Brass Instruments by Kevin Duggins
You can see, hear and buy some of my arrangements at http://www.scoreexchange.com/profiles/polishedbrassmusic.
If you would like an arrangement written for your event or ensemble, please contact me here and let me know what you have in mind.
Kevin Duggins is a trombonist and arranger living in the Minneapolis area in Minnesota, U.S.A. He plays in several groups in and around Minneapolis, and writes arrangements for Celebration Brass and other brass groups. He has earned a Master of Music degree in Trombone Performance from Indiana University.


Uses of Package
io.fluentlenium.core.hook
Package
Description
-
-
ClassDescriptionBase hook implementation.Hook interface.Builder of hook chains from element supplier, element locator supplier and hook definitions list.Control interface for hooks.Definition of a hook, containing class of the hook and defined options
-
ClassDescriptionBase hook supporting
FluentWebElement
API.Base hook implementation.Hook interface.Annotation used to declared a hook on a test adapter, container or element field.Annotation used to declared hook options. -
ClassDescriptionDefinition of a hook, containing class of the hook and defined options
-
ClassDescriptionHook interface.Builder of hook chains from element supplier, element locator supplier and hook definitions list.Definition of a hook, containing class of the hook and defined options


{% extends "base.html" %} {% load imagekit %} {% load boxes %} {% block page_title %}Our Success Stories | {{ SITE_INFO.site_name }}{% endblock %} {% block body_attributes %}class="python success-stories"{% endblock %} {% block header_content %}
Python allows us to produce maintainable features in record times, with a minimum of developers.
Cuong Do, Software Architect
YouTube.com
{{ story.pull_quote }} Read more
{{ story.name }}
See All


MTF Mapper user documentation
Frans van den Bergh (fvdbergh#at#gmail#dot#com)
The MTF mapper package offers a collection of tools to measure Modulation
Transfer Function (MTF) values across edges in images.
It does this by computing the edge spread function of a step edge in an
image, using a method similar to the one described by Khom [1]
(Section C provides a brief overview).
MTF50 values correspond to perceived sharpness of edges; this means that the
MTF mapper tools can be used to evaluate camera lens sharpness, as well as
autofocus behaviour.
MTF mapper offers fully automated operation, producing the following
outputs:
- Annotated images, where the MTF50 value of an edge is printed on top
of the edge itself;
- Profile data sets, where the MTF50 values are represented in a
one-dimensional projection of the image. This is the tool you want if you
are interested in objectively adjusting your DSLR autofocus fine-tuning (see
Section 4 for details of the method).
- MTF surface images, where you can visualise the MTF50 values
across the focal plane, to see the image centre MTF50 relative to edge MTF50,
for example.
MTF mapper expects images containing dark rectangular objects on light
backgrounds; the objects can be slightly out-of-square, e.g., trapezoids or
parallelograms, provided the interior angles are at least reasonably close
to 90.
Special test charts are required for Profile mode.
Section 3.2 describes them in more detail.
Special test charts are also required for MTF surface mode.
Section 3.3 describes them in more detail.
The two main programs of the MTF mapper package are called mtf_mapper
and mtf_mapper_gui
. The GUI is just a front-end to the command line
tool.
A full reference of command line options for the various tools are provided
in Appendix E.
After launching the GUI, you will be faced with a screen that looks like the
one portrayed in Figure 1.
Figure 1:
Screen shot of the MTF mapper gui
|
The right panel (called ``selection'') will contain a list of available
views once some files have been processed. Selecting a view from this list
will cause the relevant image to be displayed in the left panel. First off,
though, you will have to choose some files to process.
This is accomplished by selecting File/Open from the menu. You can select
multiple files to be processed; these files can be in a variety of image formats,
including .png, .jpg, .pgm, or any raw format supported by dcraw
,
including .nef, .cr2, .pef, and .arw. Note that all
previous outputs will be cleared from the ``selection'' panel when new files are
selected. The implication of this is that all files must reside in the same
directory.
Once the selection panel has been populated, you can click on any of the
items to view the relevant data. Clicking on the image filename will display
the original image in the output window; its children will be the outputs
generated by the various modes. The checkboxes in the selection panel can be
used to enable/disable the various output image types. This is useful when
using the keyboard to move up or down the list; disabled output types will
be skipped.
You can drag the image in the output window to pan, or you may choose to use
the scroll bars (if present). The +
, -
, and =
keys may
be used to zoom in, zoom out, or zoom to 100%, but you may have to click on
the image first to set focus.
That concludes the very brief overview of the MTF mapper GUI. The rest of
this document will describe what the various modes and output types can be
used for.
The main tool in the package is called mtf_mapper; you could simply
invoke it as
mtf_mapper <image> <working_dir> [-p|-r|-s|-a]
where <image> can be in a variety of image formats, including
PNG, JPG, TIFF, PNM, and more. A working directory, and the desired
combination of modes, must also be specified.
After successful extraction of MTF50 values from the edges found in
the image, the information is made available in several forms, called
``modes'', detailed next.
Annotation mode (-a or -annotate flag)
No explanation required, really. Input images are searched for rectangular
objects. Once found, the MTF50 value will be computed across each edge of
all the rectangular objects. The resulting value is drawn on top of each
edge, and the result saved as annotated.png by default.
Profile mode (-p or -profile flag)
Using a special test chart illustrated in Figure 2,
the program will construct a profile such as the one shown in
Figure 4, which was derived from the original image
shown downsampled in Figure 2(b). The chart should
be photographed at a angle, preferrably at the specified
distance. Each chart is optimised for a specific viewing distance to counter
the effects of perspective distortion. In practice, this means that the
image of the chart will look like the one in
Figure 2(b), i.e., the rows of blocks to not
appear to taper, and the small blocks are all perfect little squares. Note
how perspective distorts the shape of the foam board on which the chart has
been mounted; the bottom edge of the foam board is clearly not parallel to
the image edge, while the rows of square appear to be parallel to the image
edge.
Thi
Figure 2:
An illustration of the type of test chart used in profile
mode.
[Perspective chart]
[A photo of this type of chart at ]
|
Figure 3:
How the profile is constructed: MTF50 values are collapsed
horizontally onto the -axis to form the profile.
|
Figure 4:
Example of profile generated by MTF mapper. Derived from the image
shown in Figure 2(b).
|
The large central block in the chart (Figure 2)
is called the reference block, and the edge of this block closest to the
centre of the chart (the bottom edge in Figure 2a)
is called the reference edge.
The MTF50 values computed across the edges of all the blocks in the image
are projected onto the -axis1 of the image, thus forming a new set of data
points of the form (-value, MTF50 value). This process is illustrated in
Figure 3. The idea is that about half of the
chart will be in front of the plane of focus, and the other half behind. If
the depth of field is sufficiently shallow, then the closest and furthest of
the small blocks will be noticeably blurry. By projecting the measured
sharpness value (MTF50) of each block along horizontal lines
(Figure 3), we obtain a roughly bell-shaped
profile as shown in green on the left. The peak of this curve corresponds to the plane
of focus, and blocks that are further or closer than this plane are out of
focus to some degree. The blue line indicates the position of the
reference edge.
A complete profile in its usual orientation is shown in
Figure 4. The red dots represent individual MTF50
measurements, and the green curve is merely a smoothed representation of the
same data.
Generally, Profile mode is only intended to be used to calibrate or
evaluate the autofocus sensor of a DSLR; the details of this process are
described in Section 4. The objective is to adjust the
camera so that the blue line (reference edge, or focus position) lines up
with the peak of the green curve / red point cloud. If the blue line is far
from the peak, then you are experiencing either front- or back-focus. If
your chart was positioned at a angle so that the bottom edge
was closer to you, then front focus would mean that the blue line appears to
the left of the peak in the green curve. This depends on the orientation of
the camera, though, so you may want to take a look at the annotated image
(see Section 3.1) to orient yourself. The trick is to
remember that the peak in the green curve (or red point cloud) corresponds
to the actual plane of focus, whereas the blue line corresponds to
where MTF Mapper assumes you have placed the autofocus sensor when you
framed the shot.
MTF Surface mode (-s or -surface flag)
Figure 5:
Example of an MTF surface mode test chart
|
Using any test chart with a regular grid of rectangles (as illustrated in
Figure 5), you can measure the acuity of your
lens/camera system as it varies across the focal plane. Just shoot the chart
at a reasonable distance, making sure that it covers the entire viewfinder.
For typical lenses and unsharpened images, chart alignment is not critical.
Figure 6:
Example of MTF50 image generated by MTF mapper
|
Figure 7:
Example of MTF50 surface generated by MTF mapper
|
Surface mode produces two images: one representing a 2D
representation of MTF50 values across your image, and another showing the
same data rendered as a 3D surface. Examples of both can be seen in
Figures 6 and 7. These
MTF maps show that this particular lens (a Nikon Nikkor 35 mm F1.8 prime
lens, stopped down to F2.8) is fairly sharp, but appears to have some
strange asymmetrical defect -- not that you can tell by looking at photos
taken with this lens, though.
Autofocus fine-tuning
Figure 8:
Illustration showing the top view of the autofocus calibration
set-up
|
Figure 9:
Where to place your autofocus sensor
|
The following steps can be used to calibrate the autofocus fine-tuning of a
DSLR:
- Figure 8 illustrates the basic set-up. The
distance is the ``distance to chart'', and the angle is the
``angle with respect to the test chart''.
- Print out the test chart at a large enough scale. Ideally, your
test chart must be large enough so that you can use it at a distance of
the focal length of your lens. Appendix A offers
some advice on printing your test charts.
Position your camera so that you see the chart from an angle of at least -- the idea is that you
want some of the small blocks to be in front of the plane of focus, and some
of the blocks behind the plane of focus; this is easier to achieve at angles
of and smaller. The reference edge (Section 3.2) should be
exactly at the plane of focus, but since you are reading this, I take it you
are still trying to adjust the autofocus fine-tuning to achieve this.
- You must use a tripod, and it is recommended that you use a remote
shutter release or a timed shutter release to minimise vibrations.
- You should have enough
light for an exposure value of 10-11 (for example, ISO 100 F/1.8 at 1/320
s), which translates into about 2500-5000 lux. This amount of light is
required to achieve consistent performance from
the AF sensor. I use indirect sunlight to reach these levels.
- Set your camera to AF-S (single-servo AF). Select a single AF
point -- the centre AF sensor is recommended. This is critical, as any
other AF mode / sensor selection will not produce the desired results.
On Nikon bodies, I like
to use the AF-ON mode so that the camera only focuses when I ask it to. For
adjusting your AF fine tuning settings, you should use a single AF
operation, i.e., press and hold the AF-ON button until focus lock is
achieved, then release the button. Do not focus a second time.
- Aim the AF sensor reticule so that it straddles the reference edge
(see Figure 9). Take care that the autofocus sensor
is sufficiently far away from other edges (e.g., the horizontal edges of the
reference block in Figure 9, or any of the small
blocks). Keep in mind that the actual sensing area of the autofocus sensor
is typically larger than the reticule you see in the viewfinder, so leave
some padding.
- Manually set the focus of your lens to the near limit, or to
infinity.
- Initiate one AF operation.
- Capture a shot of the test chart. Lower ISO values are better, since MTF
measurements are sensitive to noise.
- Feed the captured image through MTF mapper to produce a profile
(such as illustrated in Figure 4. The vertical blue
line denotes the position of the autofocus reference edge (at least, the one
you should have been using to focus ...). The green curve (or red
points) records the MTF50 values measured along the long axis of the image.
Since the test chart was at a angle with respect to the lens
axis, the long axis of the image is a measure of the distance from the
camera. MTF50 values measured at different -values (in the
Figure 4) thus indicate the
sharpness, or degree of focus, at that specific distance from the camera.
The peak of the green curve represents the plane of focus -- the objective
is to line up the peak of the green curve with the blue vertical line.
- This procedure (steps 7-10) should now be repeated at various autofocus
fine-tuning settings on your camera. You should be able to see the peak of
the green curve shift left or right as you adjust this value. I recommend
capturing your images in batches, first stepping your autofocus fine-tuning
through the range in large steps, running the images through MTF mapper, and
then repeating this in the optimal range with smaller steps until you are
satisfied that you have calibrated your autofocus fine-tuning to the desired
level of accuracy.
Please note that this procedure of calibrating autofocus fine-tuning on your
DSLR is based on some of my own assumptions, which have not been tested
rigorously before the release of this software. Here follows some
background; you are most welcome to skip this section.
Phase-detection autofocus in DSLR cameras works by collecting light from
opposite sides of the lens (the aperture, really), if the article on
Wikipedia is
accurate2. These two
beams of light are steered to two independent linear sensors -- I suspect
that they are simply small strip-like CMOS sensors nowadays. Using
cross-correlation, the AF module then measures the phase shift between the
data collected from the two linear sensors; this phase shift will directly
correspond to the degree of defocus. With this information, the AF module
can then drive the AF motor by approximately the correct amount to
eliminate the phase difference between the signal received by the two
linear sensors, which should bring the object under the relevant AF sensor
into focus.
So the real question is: what algorithms do the AF modules really use to
measure the phase shift? Well, I currently do not know. If you design AF
modules, please fill me in, and I can update my test charts to agree more
closely with what the AF modules expect to see. Many AF test charts on are
available on the Internet, however, most of them use thick line (bar-shaped)
target to draw the AF sensor's attention. Someone on the Internet (now,
there is a reference you can count on) pointed out that bar targets are a
poor choice, because they may be too thin for the AF sensor to detect. I
found this argument appealing, because the AF sensor must have limited
resolution. There is an additional problem with a bar target: which edge of
the bar target is the AF module going to focus on? And this process led me
to the design of my own test charts. Rather than using a bar as an AF
target, why not use a step edge? If the AF module really does use
cross-correlation to measure the phase difference, then a step edge would
produce the best possible results. There would also be not ambiguity as to
where the sensor is focusing, since the step edge only has one feature to
focus on.
Well, it seems to work. The results presented in
Appendix B seem to support this. At least for my
camera bodies and lenses.
I also found it annoying to have to use visual inspection to determine
whether I have set the autofocus fine-tuning optimally. Visual
inspection certainly is a quick way to evaluate the results in the field, but I want to see some
objective data. I want to know that I have calibrated my lenses
perfectly. Anyhow, if you have made it this far, you probably understand.
MTF50 is certainly not the final word on image acuity (read the excellent
Zeiss papers for a start), but it does provide a reasonable relative measure
for the autofocus calibration problem. The MTF50 estimates extracted by MTF
Mapper are reasonably accurate (see Appendix D), at least as
far as internal consistency goes with my own edge image generator. You should
be able to obtain repeatable results within a 5% relative margin.
Testing against other implementations (Mitre SFR 1.4, sfrmat3) have shown
very good agreement, with MTF Mapper delivering slightly more repeatable
results than Mitre SFR (sfrmat4 not tested in bulk yet). The slanted edge
plugin for ImageJ does not appear to be accurate.
Lastly, you should know one very important thing about autofocus systems:
they are not perfect. The tolerances of the AF system (AF module, lens
drive accuracy, etc.) are such that they strike a balance between speed and
accuracy. In other words, the AF system only takes one stab at the problem:
one phase difference measurement results in one focus motor action. The
implication of this is that the AF system will only adjust focus so that it
is ``good enough'', that is, until the circle of confusion drops below the
specified limit. For a Nikon D7000, the circle of
confusion limit is 0.02 mm, which translates into an MTF50 value of around
36 lp/mm. The focus plane may therefore be set to any position within the
range of distances that yield a sharpness of at least 36 lp/mm.
With MTF mapper, you can empirically observe this effect:
manually set focus to infinity, switch to AF, capture image. Now select near
focus (manually), switch to AF, capture image. Comparing the profile plots
of produce by MTF mapper you should be able to see which image was captured
from which direction, and the distance between the peaks in the profiles
should roughly correspond to this ``zone of acceptable focus'' for that
subject distance and magnification.
Two additional utilities are included in the MTF mapper package.
Rectangle generator
The generate_rectangle utility will create a synthetic image of a
rectangle, sampled with a specified Gaussian point spread function. The
rectangle images generated with this utility therefore have a known MTF50
value, which was calculated analytically.
In the current implementation, the Gaussian noise that is optionally added
to the image is not taken into consideration in the analytical calculation
of the expected MTF50 value. This noise certainly makes it more challenging
for software tools to compute the MTF50 values from the generated images,
but it should not bias the result in any way.
Either way, the generate_rectangle utility is useful during
testing, and can be used to cross-calibrate the mtf_mapper utility
with other packages available for computing MTF50 values. (If you have
access to Imatest, please send me some results. Your feedback will help to
improve MTF Mapper).
The generate_test_chart utility can be used to generate SVG files
containing various test charts. Currently, it can generate ``perspective''
charts that are suitable for DSLR autofocus calibration, as well as
empirical measurements of the depth of field of your equipment. It can also
generate ``grid'' charts that contain squares arranged in a regular grid,
which can be used to measure the flatness of field of your
equipment.
Currently, the MTF mapper utilities do not separate MTF50 values into
sagittal and meridional orientations, although such an option would be
relatively straightforward to add, and is planned for a future version.
A bit of a misnomer, since I have yet to receive actual questions :)
- Your program gave me a value of cycles per pixel. Is this any
good? Answer: According to Norman Koren
(http://www.imatest.com/guides/modules/sfr), a value of 0.33 cycles
per pixel is pretty good for unsharpened raw images (emphasis mine).
This is somewhat misleading, though, since expressing MTF50 as c/p is not
independent of the sensor resolution, and Norman may have been referring to
an 8 MP sensor. Take, for example, a sample of the
Nikkor 35 mm f/1.8 prime lens on a D40 body. This combination achieves MTF50
values of around 0.28 c/p. The same lens on a D7000 body achieves around
0.22 c/p. If these values are expressed as line pairs per millimetre
(lp/mm), we actually see 36 lp/mm on the D40, and 46 lp/mm on the D7000. In
this case, it means that the lens is actually able to resolve more detail
than what the D40 could capture. This also explains why I suddenly thought
the lens looked softer on the D7000 -- the per-pixel sharpness was
definitely lower, even though the effective sharpness was higher.
So while c/p units are convenient because they do not require knowledge of the
pixel (or sensor) size, they are not portable to other sensors for the very
same reason.
I prefer to use lp/mm when comparing lenses, but c/p are more natural for
synthetic images. Keep in mind that a Bayer colour filter sensor camera
will never be able to give you ``perfect'' MTF50 values of 0.5 c/p, and that
anything above 0.25 c/p is actually pretty good (before sharpening),
all things considered.
- Cycles per pixel? I wanted lw/ph or lp/mm! Answer: Support
has been added for lp/mm by specifying a pixel size with the
--pixelsize
option.
You can also convert manually using the
following relationship:
|
|
|
(1) |
|
|
|
(2) |
where
is the image height in mm, and
is the image height in pixels.
Tips for printing the test charts
I have printed the MTF Mapper test charts using a variety of printers, and
have the following advice to offer:
- If you are printing on paper, you should aim to use the thickest
paper available. Something like 120 g/m is probably the bare minimum.
All my charts printed on standard 80 g/m paper warped horrendously
with changes in humidity.
- The test charts work best when they are quite flat. I have worked
with an A0 print of the perspective chart that was simply taped to a
plastered wall, and everything seemed to be fine. If, on the other hand,
you are using the grid chart to look for MTF variations in the focal plane
(i.e., Surface mode), then it is critical to keep the chart perfectly
flat. I have found that foam board works very well, especially if you use
a spray glue to fix the printed chart to the foam board.
- Even spray glue combined with a foam board is not good enough to
prevent thin paper from warping due to changes in humidity. If you plan on
using a chart more than once, you must use thick paper.
- I have yet to try this myself, but a local printer can print on a
self-adhesive vinyl sheet. This should be immune to humidity, but
obviously this will be much more expensive than printing on plain paper.
- Print quality is probably not critical when using the perspective
charts -- I have used badly printed (streaky, not quite solid) charts,
and that seemed to be OK on an A0 scale.
- Print the largest chart you possibly can for a given focal length.
In practice, I have found that the A0-size charts work very well for
lenses shorter than 50 mm, since they allow me to keep the chart at a
realistic distance. I have yet to perform extensive tests on A4 charts,
but I suspect they are only safe to use with longer focal lengths
(e.g., 200 mm or longer). Furthermore, at greater distances, you can get
away with lower quality prints -- 300 DPI prints are fine on an A0 chart,
but my become a problem on A4 charts.
- One last tip: If you want the chart to be perfectly aligned at
degrees, you can use a small mirror mounted on a block
(like the one illustrated in Figure 10).  This level of precision is probably not necessary, and simply
measuring out a right-angled triangle to place your tripod is good enough
for most users.
Flat 45 test charts vs. perpendicular charts
Many DIY test charts on the web are of the degree type, i.e., you
simply print out the chart with whatever printer you have, and you shoot the
chart at a angle. These charts have been criticized severely in
the online fora, sometimes with reason. The main argument is that these
charts often have a line (thick or thin) in the centre of the chart that is
to be used as the target for the autofocus sensor. Thin lines can be too
thin for the limited resolution of the AF sensor to detect reliably. Thick
lines can (probably) be detected more reliably, but they actually present
the AF sensor with two edges: a near and a far edge. Which edge did the AF
sensor lock onto?
This brings us to the design of the test charts used in MTF mapper (see
Figure 2). These charts have a solid block in the
centre, with the centremost edge of this block acting as the AF target. The block is
tall enough that the AF sensor sees an unbroken step edge along the height
of the AF sensor (assuming, of course, that the chart is being photographed in a
landscape orientation). The step edge resolves the potential ambiguity that
may occur in other charts using thick lines as target. If the AF sensor is
using a correlation algorithm to determine the phase shift (my best
guess), then the step edge will provide an ideal target. But does this work
in real life? To answer this question, I built an additional prop out of
polystyrene. The objective was to build an AF target that was perpendicular
to the camera axis, similar to the chart that had been in use on LensTip
(http://www.lenstip.com) before they switched to using one of the
LensAlign tools. Figure 10 shows a crop of the
resulting test chart shot.
Figure 10:
Crop of test chart, showing the perpendicular AF target attached
to the flat chart. The checkerboard pattern fixed to the polystyrene block
is at a angle with respect to the chart behind it.
|
Using this modified chart it becomes possible to test whether the plain MTF
Mapper test chart at produces different AF results than using a
perpendicular AF target. Firstly, I should mention that the perpendicular AF
target was significantly larger than the AF reticule in the viewfinder (even
though this is unlikely to matter, since the entire perpendicular AF target
is as the same distance). The following method was used to acquire the
perpendicular data set:
- Rotate the camera (mounted on a 3-way tripod head) so that the AF
reticule is nicely centred on the checkerboard section of the perpendicular
target.
- Manually turn the lens to focus at infinity.
- Press and hold the AF-ON button (i.e., engage AF) until focus lock
is achieved. Release AF-ON button. Only one continuous AF operation is used.
- Now rotate the camera so that the AF reticule is centered on the
reference edge of the chart behind the perpendicular target. This is done
to ensure that spatially variable lens properties (MTF, distortion) are
comparable to the alternative set of images (described below).
- Using mirror lock-up, capture a shot, and repeat from step 1.
The degree (alternative) data set is collected as follows:
- Point the central AF sensor at the reference edge of the chart.
- Manually turn the lens to focus at infinity.
- Perform one AF operation.
- Capture the shot using mirror lock-up, and repeat from step 2.
The same camera settings were used for both data sets. This includes setting
the camera to AF-S mode (Nikon jargon for single-servo AF) using only the
centre AF sensor (definitely a cross-type sensor on the D7000). A critically
important detail is that sufficient light was available throughout the
experiment. I have yet to repeat the experiment to find a tight
lower bound on the required amount of available light, but for this experiment I was
able to use about 10-11 EV (ISO 100 F/1.8 at 1/320 s). I can
also state that 7 EV (ISO 100 F/1.8 at 1/40 s) is definitely not enough light for the
D7000 -- the photos look fine, of course, but the AF performance was
definitely unreliable (not repeatable).
Note that this is a lot of light -- definitely not
representative of the typical shots that I take indoors with available
light. The Nikon AF sensors are usually rated to work from EV up to
EV, but I guess that does not mean the accuracy or repeability is
constant over that range.
Next, the images from the perpendicular data set were processed
(automatically) to mask out the entire perpendicular target, effectively
producing a set of images that look just like the images in the
degree data set. Now we have two similar data sets that can be processed
by MTF Mapper -- the only systematic difference between the two data sets
is the way in which the AF lock was achieved. The MTF profiles of 10 shots
from each data set are shown in Figure 11.
Figure 11:
MTF50 profiles of 10 shots using AF on reference edge
(red), and 10 shots using the perpendicular AF target of
Figure 10 (green).
|
Visually, it is clear that both AF targets produced similar results, even
though quite a bit of variability in focus position is evident. The actual
range of the variability in the focus plane distance was about 45 mm at a
subject distance of 1.8 m.
MTF Mapper computes a value known as the peak shift, which denotes the
difference (in pixels) between the position of sharpest focus (the peak of
the green curve on normal profile plots such as
Figure 4) and the position of the reference edge (the
assumed point of focus). The peak shift values were computed for both
data sets, and compared using Wilcoxon's non-parametric test to determine
whether the means of the peak shift of the two AF methods are
statistically equally. For this data set, the p-value of the Wilcoxon test
(with N=10 for each AF method) was 0.393, meaning that we cannot reject the
null-hypothesis that the means are equal. In other words, the two AF methods
do not produce different results, which means that the solid block reference
edge AF target used in the MTF Mapper perspective test chart works perfectly
well.
Internal workings
Here is a brief outline of how MTF Mapper works:
- The input image is read in, and converted to grayscale (using
OpenCV's default colour matrix). If the input image is an 8-bit image, the
pixel intensities are scaled up to 16 bits; the default is to assume that
8-bit images are sRGB gamma corrected, so the values are linearised while
being scaled to 16 bits. If the input image has a pixel bit depth of 16
bits, no gamma conversion or scaling is applied.
- The image is thresholded using Bradley's adaptive thresholding
algorithm [2]. This is done to identify all the dark objects in
the image.
- The thresholded image is then scanned to extract all the connected
components using the method of Chang et al.[3]. This step
gathers the boundary lists of all the dark objects in the image.
- The image gradient is computed on the original input image. This
is combined with the object boundary lists to identify all
roughly-rectangular objects (called blocks in the sequel).
- For each edge of each detected block, the MTF50 value is computed
as follows (roughly the method of Khom [1]):
- Define a rectangular buffer region that is aligned with and
centered over each edge. The width of this buffer is 32 pixels.
- Compute a reasonable estimate of the orientation of the edge
(using the image gradient information).
- Extract the intensity values of each pixel within the
rectangular buffer, and project the coordinates of this pixel onto the
direction normal to the edge.
- Systematically refine the edge normal to minimise the
difference between sequential projected values; this effectively optimises
the edge normal estimate.
- For each pixel in the buffer, record a pair of values
(distance, intensity), where distance denotes the
length of the pixel coordinates projected onto the edge normal, and
intensity represents the actual pixel intensity value. Note that
the distance values are unevenly sampled. These values are a representation
of the edge spread function (ESF).
- Binning to resample the (distance, intensity) values to a regular grid. The
resampled points are generated at a spacing of 1/8 pixels, i.e., the
profile is oversampled at a factor of 8.
- Apodization is performed by windowing the resampled LSF with
a Hamming window.
- An FFT is computed on the resampled points, and the
normalised FFT magnitude sequence is calculated.
- A systematic correction is applied to counter the distortion
introduced by the finite-difference derivative operations used to compute
the PSF.
- The frequency at which the FFT magnitude sequence reaches a
value of 0.5 is computed using linear interpolation, yielding the MTF50
value.
- The computed MTF50 values are then rendered in various ways,
depending on which output options are selected.
Accuracy
The accuracy of the MTF50 estimates produced by MTF Mapper depends on the
following factors:
- Image resolution, and resulting edge length
- Image noise levels
- Image edge contrast (combined with noise levels, expressed as
Signal-to-Noise Ratio, SNR)
- Edge orientation relative to horizontal or vertical directions
- Edge MTF50 value -- the sharper the edge, the more critical the
above factors become
Figure 12:
Error in MTF50 estimate for edges, SNR=90
|
Figure 13:
Error in MTF50 estimate for edges, SNR=57
|
Figure 14:
95% confidence interval for MTF50 estimate at SNR=90
|
Figure 15:
95% confidence interval for MTF50 estimate at SNR=57
|
Figures 12-13 present an indication of the error in MTF50
estimates. The following parameters applied:
- Edge length was fixed at 75 pixels.
- Two noise levels were investigated: edge contrast at 0.9 times
dynamic range, with noise standard deviation at 0.01 times dynamic range, for an SNR of 90, and
edge contrast at 0.67 with noise at 0.012, for an SNR of 57. The latter case
approximates closely the real world conditions observed with a DSLR camera.
- Edge MTF50 values over the range [0.06,0.7) were sampled.
- Edge orientations of to were
explored.
- A total 200 data points were collected for each MTF50/angle
combination.
Figures 12-13
clearly illustrate how the error increases
with higher edge acuity, especially at slant angles that are further from
ideal. The boxplots are interpreted as follows: the ``whiskers'' indicate the
extreme values observed, although outliers may be excluded and shown
separately as circles; the solid black line in the centre of each box is the
median of the 200 data points, with the red box bounding the 50%
middle-most values. If this data is expressed as a relative value, i.e., MTF50 error over MTF50
value, then the standard deviation of the relative error is roughly below
1%, with the extremes hovering around 5%, up to the Nyquist limit at 0.5
c/p, for the SNR=57 case. The 95% confidence interval width on the absolute errors are given in
Figures 14 and 15.
Sharp lenses should produce values in the range of (0.2,0.35) cycles per
pixel using unsharpened raw images. Overall, both absolute accuracy (bias)
and uncertainty (variance) remain fairly well controlled up to the Nyquist
frequency of 0.5 cycles per pixel, but some effort should be expended to
keep the SNR high (i.e., limit image noise) if high accuracy is desired.
Warning: The slanted edge method does not work at all if the edge
acuity is very high (MTF50 of 0.5 and higher) if your edges
are perfectly aligned with the rows or columns of the image. That is why it
is called the slanted edge method .... Anyway, MTF mapper does not
currently protect you from this case, and will happily try to measure the
MTF50 across any edge you throw at it. If the MTF50 value exceeds 1.0 c/p,
the program will silently ignore that edge, but poorly oriented edges may
produce very high MTF50 values that are still below 1.0, i.e., a sharp edge at an
angle of may very well produce an MTF50 value of 0.86.
It is
recommended that you ensure that your edges are between and
degrees with respect to the horizontal or vertical directions.
Some intermediate angles may produce very inaccurate results, e.g.,
and angles are to be avoided at all costs (those
two angles interfere with the binning algorithm, thus no oversampling is
achieved). Future versions of MTF Mapper may include options to filter out these cases
automatically, but currently you are responsible for keeping edge orientations
reasonable.
User manuals for individual applications
(Rest of this page left blank intentionally)
[pages=1-2]figures/mtf_mapper_man.pdf
[pages=1-3]figures/mtf_generate_rectangle_man.pdf
[pages=1]figures/mtf_generate_test_chart_man.pdf
- 1
- Kohm, K.,
Modulation transfer function measurement
method and results for the Orbview-3 high resolution imaging
satellite,
Congress International Society for Photogrammetry and Remote
Sensing, 20:12-23, 2004.
- 2
- Bradley, D. and Roth, G.,
Adaptive thresholding using the integral image,
Journal of Graphics, GPU, & Game Tools, 12(2):13-21,
2007.
- 3
- Chang, F., Chen, C.J., Lu, C.J.,
A linear-time component-labeling algorithm using contour tracing
technique,
Computer Vision and Image Understanding, 93(2):206-220,
2004
MTF Mapper user documentation
This document was generated using the
LaTeX2HTML translator Version 2008 (1.71)
Copyright © 1993, 1994, 1995, 1996,
Nikos Drakos,
Computer Based Learning Unit, University of Leeds.
Copyright © 1997, 1998, 1999,
Ross Moore,
Mathematics Department, Macquarie University, Sydney.
The command line arguments were:
latex2html -split 0 -nonavigation -nofootnode mtf_mapper.tex
The translation was initiated by users on 2012-03-19
Footnotes
- ...-axis1
- MTF Mapper will auto-detect the
orientation of the image. For ease of discussion, this is called the
-axis.
- ...
accurate2
- http://en.wikipedia.org/wiki/Autofocus
users
2012-03-19


by Dennis Baron, University of Illinois Page 3 of 3 PREVIOUS PAGE
The English-only nativists who attacked the Germans used arguments similar to those heard nowadays against newer immigrants. Benjamin Franklin considered the Pennsylvania Germans to be a “swarthy” racial group distinct from the English majority in the colony. In 1751 he complained, “Why should the Palatine Boors be suffered to swarm into our Settlements, and by herding together establish their Language and Manners to the exclusion of ours? Why should Pennsylvania, founded by the English, become a Colony of Aliens, who will shortly be so numerous as to Germanize us instead of our Anglifying them, and will never adopt our Language or Customs, any more than they can acquire our Complexion?” (The papers of Benjamin Franklin. Ed. Leonard W. Labaree. New Haven: Yale Univ. Press, 1959. vol 4:234).
The Germans were accused by other eighteenth-century Anglos of laziness, illiteracy, clannishness, a reluctance to assimilate, excessive fertility, and Catholicism. They were even blamed for the severe Pennsylvania winters (Feer 1952, 403; Mittelberger 1898, 104). Most irritating to Pennsylvania's English-firsters in the latter 1700s was German language loyalty, although it was clear that, despite community efforts to preserve their language, Germans were adopting English and abandoning German at a rate that should have impressed the rest of the English-speaking population.
Anti-German sentiment spread along with German immigration, and the nation as a whole resisted both the German bilingual schools that were established in parts of the Midwest in the 19th century and the common practice of publishing legal notices in German-American newspapers. On a number of occasions the U.S. Congress again rejected motions to print laws or other documents in German as well as English. The motions were often treated jocularly and were shouted down amidst racist cries of, “What! In the Cherokee? [and in] the Old Congo language!” (Congressional Globe 1844, 7).
Antagonism toward Germans and their language resurfaced in the Midwest in the late 1880s and early 1890s, and again across the country during and after World War I. Between 1917 and 1922 most of the states dropped German from their school curricula. Nebraska's open meeting law of 1919 forbade the use of foreign languages in public, and in 1918 Governor Harding of Iowa proclaimed that “English should and must be the only medium of instruction in public, private, denominational and other similar schools. Conversation in public places, on trains, and over the telephone should be in the English language. Let those who cannot speak or understand the English language conduct their religious worship in their home” (New York Times, 18 June 1918, p. 12). Such attitudes had a chilling effect on language use. As many as eighteen thousand people were charged in the Midwest during and immediately following World War I with violating the English-only statutes (Crawford 1989, 23.)
The anti-German school laws were declared unconstitutional by the U.S. Supreme Court in 1923. In Meyer v. Nebraska, the court ruled that “the protection of the Constitution extends to all,—to those who speak other languages as well as to those born with English on the tongue” (262 U.S. 390). Similar anti-Japanese laws were invalidated by the court in Farrington v. Tokushige in 1927 (273 U.S. 284). And the high court reaffirmed the states' responsibility to educate non-English speakers effectively in Lau v. Nichols (1974) (414 U.S. Reports 563), though the court did not specify how this was to be accomplished.
Nonetheless, Americans remain troubled by foreign languages and their speakers. Despite the fact that the 1980 U.S. Census showed that more than 97 percent of the people in the nation speak English (Waggoner 1988, 69), nativist fears for the safety of English seem stronger than ever. The English Language Amendment (ELA) has been before the Congress since 1981. California passed an official-English law in 1986, a year in which a total of thirty-seven states considered official language measures. In 1989 Arizona, Colorado and Florida passed English-only laws, and votes on the issue are likely in Massachusetts, Ohio and Pennsylvania in the near future. Today's attempts to suppress the use of Asian languages and Spanish in the United States are manifest in state official-language referenda; in local ordinances mandating the use of the roman alphabet on signboards or forbidding the purchase of non-English books by public libraries; and in regulations which require employees to use English on the job and during breaks, or which force school children to use English in schoolbuses as well as classrooms.
Official-English is an emotional issue for many people, involving questions of patriotism as well as racism, language loyalty as well as assimilation. Supporters and opponents of the ELA almost came to blows during a discussion of the subject on the “Donahue” show in Miami a few years ago. Adding to the complexity of the issue is the problem that language legislation, at least in the United States, is difficult if not impossible to enforce. In 1906, Pres. Theodore Roosevelt ordered the federal government to adopt simplified spelling in its official publications. This move generated so much resistance that Roosevelt softly withdrew his order (see Baron, 1982). The New Mexico constitution, establishing English as the new state's official language, was ratified by means of bilingual ballots. A 1923 Illinois law making American, rather than English, the official language of that state was quietly amended in 1969 because Illinois residents continued to speak and teach English in defiance or ignorance of the statute. The English Language Amendment, if it is passed, may also prove to be more of a symbol than an enforceable statute, though many people fear that it could become a dangerous tool for linguistic and cultural repression. In any case, though, the ELA seems one final, and to some observers, paranoid, attempt to make up for the perceived humiliation of 1795, when English reportedly came within a hair's-breadth of losing out as the official language of the United States in a vote which never really took place.
ReferencesDennis Baron is professor of English and linguistics at the University of Illinois at Urbana-Champaign.
Page 3 of 3 PREVIOUS PAGE
| HOME |


EBF and E47 collaborate to induce expression of the endogenous immunoglobulin surrogate light chain genes.
Abstract
Early B cell factor (EBF) and E47 participate in the transcriptional control of early B lymphocyte differentiation. With the aim of identifying genetic targets for these transcription factors, we stably transfected cDNAs encoding EBF or a covalent homodimer of E47, individually or together, into immature hematopoietic Ba/F3 cells, which lack both factors. In combination, EBF and E47 induce efficient expression of the endogenous immunoglobulin surrogate light chain genes, lambda5 and VpreB, whereas other pre-B cell-specific genes remain silent. Multiple functionally important EBF and E47 binding sites were identified in the lambda5 promoter/enhancer region, indicating that lambda5 is a direct genetic target for these transcription factors. Taken together, these data suggest that EBF and E47 synergize to activate expression of a subset of genes that define an early stage of the B cell lineage.


I am a Fullstack Web Developer with a great passion for creating new and innovative solutions. A humble and life long learner and student of technology. My curiousity and determination are defintely strong traits of mine when it comes to problem solving, and my great sence of humor while doing it!
"Whats the object-oriented way to become wealthy?"
"Inheritance"
Graduated with Merits
Marbella, Spain
Mexico, USA, Fiji, Australien, Thailand, Laos, Kambodja och Spanien.
Apart from being a web developer, I enjoy most of my time being outdoors. In the winter, I am an avid skiier and novice ice climber. During the warmer months here in Colorado, I enjoy mountain biking, free climbing, and kayaking.
When forced indoors, I follow a number of sci-fi and fantasy genre movies and television shows, I am an aspiring chef, and I spend a large amount of my free time exploring the latest technolgy advancements in the front-end web development world.
A repl game that provides player with the score of current NHL games. Game also allows user to get more informatio of the teams/players in that particular game through the API.
TDD with JavaScript to make a chatroom-for-one work. Provided with failing tests written in Jasmine, a JS testing framework.Tasks wherre to make the tests pass, through manipulating the DOM using common JavaScript and jQuery functions and use AJAX to retrieve data from a public API.
There are 100 cats in a row all wearing hats. 🐱Make 100 passes over the cats. On the first pass, visit every cat and remove its hat. 🙀 On the second pass, visit every other cat and replace its hat. 😺 On the third pass, visit every third cat. If the cat is hatted, remove its hat 😿. If the cat is un-hatted, replace its hat. 😺 On the 4th-100th passes, do the same. Add hats if they don’t exist and remove hats if they do. On the 100th pass, you should only visit the 100th cat (the last cat), removing or replacing its hat appropriately. Write a program that outputs which cats have hats 😺 and which cats do not 😾 at the end of the 100th iteration.


Flavio Percoco
Hi. I’m Flavio Percoco (a.k.a flaper87), and I’m a Software Engineer currently employed by Red Hat. I am very much into conference speaking, surf, coffee, wine, food, and a thousand other hobbies.
Hi. I’m Flavio Percoco (a.k.a flaper87), and I’m a Software Engineer currently employed by Red Hat. I am very much into conference speaking, surf, coffee, wine, food, and a thousand other hobbies.


| GIO Reference Manual | ||||
|---|---|---|---|---|
| Top | Description | Object Hierarchy | Prerequisites | Properties |
#include <gio/gio.h> GTlsServerConnection; struct GTlsServerConnectionInterface; GIOStream * g_tls_server_connection_new (GIOStream *base_io_stream
,GTlsCertificate *certificate
,GError **error
);
GTlsServerConnection is the server-side subclass of GTlsConnection, representing a server-side TLS connection.
typedef struct _GTlsServerConnection GTlsServerConnection;
TLS server-side connection. This is the server-side implementation of a GTlsConnection.
Since 2.28
struct GTlsServerConnectionInterface { GTypeInterface g_iface; };
GIOStream * g_tls_server_connection_new (GIOStream *base_io_stream
,GTlsCertificate *certificate
,GError **error
);
Creates a new GTlsServerConnection wrapping base_io_stream
(which
must have pollable input and output streams).
|
the GIOStream to wrap |
|
the default server certificate, or NULL . [allow-none]
|
|
GError for error reporting, or NULL to ignore. |
Returns : |
the new
GTlsServerConnection, or NULL on error. [transfer full][type GTlsServerConnection]
|
Since 2.28
"authentication-mode"
property"authentication-mode" GTlsAuthenticationMode : Read / Write
The GTlsAuthenticationMode for the server. This can be changed
before calling g_tls_connection_handshake()
if you want to
rehandshake with a different mode from the initial handshake.
Default value: G_TLS_AUTHENTICATION_NONE
Since 2.28


Home
About Us
Forms Assemblage
Network Usage Survey
Are you willing to let us use your responses for analysis?
Yes
No
Question 1: Which do you use the internet most for?
Work/School
Recreation/Entertainment
both
Question 2: Who is your Internet Service Provider(ISP)?
Options:
Airtel
Jio
Vodafone
BSNL
other
Question 3: How many internet using devices are currently in your home?
Options:
Question 4: Do you use WiFi or ethernet with your computer?
Options:
WiFi
Ethernet
Question 5: Around how many hours a day do you use the internet?
Options:
1-2 hours
3-5 hours
6-9 hours
More than 10 hours
Question 6: Is your internet connection stable?
Options:
My internet is quite stable.
My internet is mostly stable, but it disconnects when there's harsh weather.
My internet is not stable at all, it frequently disconnects for no reason.
Question 7: What is your download speed?
Options:
Under 1 MBps
1-5 hours.
2-10 MBps
10-30 MBps
More than 30 MBps
Question 8: Are you satisfied with the speed of you connection?
Options:
Yes
No, it isn't fast enough for my usage.
Depends on what the person is using the phone for.
Chat with us
Message
Send
Close


--- title: Hadoop Tutorial layout: post ---
In Module 4 you learned the basics of programming with Hadoop MapReduce. That module explains how data moves through a general MapReduce architecture, and what particular methods and classes facilitate the use of the Hadoop for processing. In this module we will look more closely at how to override Hadoop's functionality in various ways. These techniques allow you to customize Hadoop for application-specific purposes.
Great tutorial on really getting into Hadoop. Some of the info is old, but its still worth reading.


A brand new Setur marina opened here in August 2010. It is a convenient place to berth if wanting to visit Istanbul but not pay the high prices of the marinas there. A frequent ferry into Istanbul leaves from next to the marina.
Last updated June 2011.
Cruisers report the marina is virtually empty and that special rates are currently available to attract visitors. These work out to about 60 percent of the large marinas' rates closer into Istanbul.


Tottenham ‘serious’ about signing – Spurs interest is ‘more than the others’
by Sport Witness TeamHakim Ziyech is likely to get a lot of attention leading up to next summer’s transfer window, and perhaps around the winter market as well.
The Ajax forward has scored six goals in 20 appearances so far this season, and added a rather impressive 15 assists. He’s been playing mainly on the right, but is flexible in his position and could suit a number of formations.
Signing for Ajax in 2016 from FC Twente, the 26 year old is getting to the stage that he needs to take the next step, should the right opportunity become available.
That could be at Tottenham.
Calciomercato report AS Roma have been keen for a while and continue to follow the player, along with Napoli and AC Milan. However, it’s claimed that Tottenham are ‘serious’ about signing the player and their interest is ‘more than the others’.
Spurs being keen makes things difficult for Roma, and it’s even stated that with Lorenzo Pellegrini also being linked to Tottenham recently, he and Ziyech could end up alongside each other at Spurs rather than the Serie A club.
Interestingly, in his Tuesday De Telegraaf column, Ajax’s Edwin van der Sar made it clear Ajax will see sales again next summer.


Avul Pakir Jainulabdeen "A. P. J." Abdul Kalam was the 11th President of India from 2002 to 2007. He was intimately involved in India's civilian space program and military missile development efforts. He thus came to be known as the Missile Man of India for his work on the development of ballistic missile and launch vehicle technology.
Timeline
- 1931: Born Avul Pakir Jainulabdeen Abdul Kalam on October 15, in Rameswaram, Tamil Nadu.
- 1954: Graduates in Physics from Saint Joseph's College, Tiruchirappalli, in 1954.
- 1960: Gains degree in Aeronautical Engineering from Madras Institute of Technology.
- Transferred to ISRO from the DRDO.
- India enters the space club by putting the Rohini satellite in the near earth orbit with the first indigenous Satellite Launch Vehicle (SLV-III), developed under the stewardship of Dr. Kalam.
- 1980s-1990s: As the chief of the Integrated Guided Missile Development Programme, he was responsible for the development and operationalisation of AGNI and PRITHVI Missiles.
- 1992-1999: works as Chief Scientific Advisor to the PM and Secretary of the DRDO.
- 1998: India conducts the Pokhran II nuclear tests in May with Dr. Kalam as the chief project coordinator.
- 1999-2001: Principal Scientific Advisor to the Government of India.
- 2002-2007: President of India.
- 2012: Dr. Kalam launches the 'What Can I Give Movement' a programme for the indian youth aimed at defeating corruption.
- 2015: On July 27 Dr. Kalam passes away aged 83, after collapsing because of a cardiac arrest while delivering a lecture at IIM Shillong
Click To Know More About Dr. A. P. J. Abdul Kalam


String
objects or primitives into String
s,
but it can be clearer to use a String.valueOf()
method call.
A quick-fix is suggested to simplify the concatenation.
Example:
void foo(int x, int y) {
String s = "" + x + " ; " + y;
}
After the quick-fix is applied:
void foo(int x, int y) {
String s = x + " ; " + y;
}
Use the Report only where empty strings can be removed without other changes
option to ignore cases cases where removing the empty string
will require adding a String.valueOf()
conversion of another operand.


--- layout: post title: Journal paper accepted tags: - News - Research ---
Our paper Neuromorphic Sensorimotor Adaptation for Robotic Mobile Manipulation: From Sensing to Behaviour was accepted for the Special Issue on Cognitive Robot Architectures in Cognitive Systems Research. The source code is available at Github .


|
Graphitti
A toolkit/software architecture to ease creating high-performance neural network simulators
|
Normally distributed random numbers. More...
Go to the source code of this file.
Classes | |
| class | Norm |
| Generate normally distributed random numbers. More... | |


Loader Class
lib/yui3/src/loader/js/loader.js:58
Loader dynamically loads script and css files. It includes the dependency info for the version of the library in use, and will automatically pull in dependencies for the modules requested. It supports rollup files and will automatically use these when appropriate in order to minimize the number of http connections required to load all of the dependencies. It can load the files from the Yahoo! CDN, and it can utilize the combo service provided on this network to reduce the number of http connections required to download YUI files.
While the loader can be instantiated by the end user, it normally is not.
Constructor
Loader
-
o
Defined in
lib/yui3/src/loader/js/loader.js:58
Parameters:
-
o
Objectan optional set of configuration options. Valid options:
- base: The base dir
- comboBase: The YUI combo service base dir. Ex: http://yui.yahooapis.com/combo?
- root: The root path to prepend to module names for the combo service. Ex: 2.5.2/build/
- filter:.
A filter to apply to result urls. This filter will modify the default
path for all modules. The default path for the YUI library is the
minified version of the files (e.g., event-min.js). The filter property
can be a predefined filter or a custom filter. The valid predefined
filters are:
- DEBUG
- Selects the debug versions of the library (e.g., event-debug.js). This option will automatically include the Logger widget
- RAW
- Selects the non-minified version of the library (e.g., event.js).
myFilter: { 'searchExp': "-min\\.js", 'replaceStr': "-debug.js" }
- filters: per-component filter specification. If specified for a given component, this overrides the filter config. _Note:_ This does not work on combo urls, use the filter property instead.
- combine: Use the YUI combo service to reduce the number of http connections required to load your dependencies
- ignore: A list of modules that should never be dynamically loaded
- force: A list of modules that should always be loaded when required, even if already present on the page
- insertBefore: Node or id for a node that should be used as the insertion point for new nodes
- charset: charset for dynamic nodes (deprecated, use jsAttributes or cssAttributes)
- jsAttributes: object literal containing attributes to add to script nodes
- cssAttributes: object literal containing attributes to add to link nodes
- timeout: The number of milliseconds before a timeout occurs when dynamically loading nodes. If not set, there is no timeout
- context: execution context for all callbacks
- onSuccess: callback for the 'success' event
- onFailure: callback for the 'failure' event
- onCSS: callback for the 'CSSComplete' event. When loading YUI components with CSS the CSS is loaded first, then the script. This provides a moment you can tie into to improve the presentation of the page while the script is loading.
- onTimeout: callback for the 'timeout' event
- onProgress: callback executed each time a script or css file is loaded
- modules: A list of module definitions. See Loader.addModule for the supported module metadata
- groups: A list of group definitions. Each group can contain specific definitions for base, comboBase, combine, and accepts a list of modules. See above for the description of these properties.
- 2in3: the version of the YUI 2 in 3 wrapper to use. The intrinsic support for YUI 2 modules in YUI 3 relies on versions of the YUI 2 components inside YUI 3 module wrappers. These wrappers change over time to accomodate the issues that arise from running YUI 2 in a YUI 3 sandbox.
- yui2: when using the 2in3 project, you can select the version of YUI 2 to use. Valid values * are 2.2.2, 2.3.1, 2.4.1, 2.5.2, 2.6.0, 2.7.0, 2.8.0, and 2.8.1 [default] -- plus all versions of YUI 2 going forward.
Item Index
Methods
- _addLangPack
- _addSkin
- _config
- _continue
- _explode
- _explodeRollups
- _filter
- _finish
- _insert
- _onFailure
- _onSuccess
- _onTimeout
- _reduce
- _rollup
- _setup
- _sort
- _url
- addGroup
- addModule
- calculate
- filterRequires
- formatSkin
- getLangPackName
- getModule
- getProvides
- getRequires
- hash
- insert
- loadNext
- onCSS
- onFailure
- onProgress
- onSuccess
- onTimeout
- partial
- require
- resolve
Methods
_addLangPack
-
lang
-
m
-
packName
Defined in
lib/yui3/src/loader/js/loader.js:1468
Creates a "psuedo" package for languages provided in the lang array
Parameters:
Returns:
_addSkin
-
skin
-
mod
-
parent
Defined in
lib/yui3/src/loader/js/loader.js:766
Adds the skin def to the module info
Parameters:
Returns:
_config
-
o
Defined in
lib/yui3/src/loader/js/loader.js:688
Apply a new config to the Loader instance
Parameters:
-
o
ObjectThe new configuration
_continue
()
private
Defined in
lib/yui3/src/loader/js/loader.js:1961
Once a loader operation is completely finished, process any additional queued items.
_explode
()
private
Defined in
lib/yui3/src/loader/js/loader.js:1579
Inspects the required modules list looking for additional dependencies. Expands the required list to include all required modules. Called by calculate()
_explodeRollups
()
private
Defined in
lib/yui3/src/loader/js/loader.js:1132
Grab all the items that were asked for, check to see if the Loader meta-data contains a "use" array. If it doesm remove the asked item and replace it with the content of the "use". This will make asking for: "dd" Actually ask for: "dd-ddm-base,dd-ddm,dd-ddm-drop,dd-drag,dd-proxy,dd-constrain,dd-drop,dd-scroll,dd-drop-plugin"
_filter
-
u
-
name
Defined in
lib/yui3/src/loader/js/loader.js:2266
Apply filter defined for this instance to a url/path
Parameters:
Returns:
_finish
-
msg
-
success
Defined in
lib/yui3/src/loader/js/loader.js:1711
Handles the queue when a module has been loaded for all cases
_insert
-
source
-
o
-
type
-
[skipcalc=false]
Defined in
lib/yui3/src/loader/js/loader.js:1888
Handles the actual insertion of script/link tags
_onFailure
()
private
Defined in
lib/yui3/src/loader/js/loader.js:1773
The default Loader onFailure handler, calls this.onFailure with a payload
_onSuccess
()
private
Defined in
lib/yui3/src/loader/js/loader.js:1734
The default Loader onSuccess handler, calls this.onSuccess with a payload
_onTimeout
()
private
Defined in
lib/yui3/src/loader/js/loader.js:1791
The default Loader onTimeout handler, calls this.onTimeout with a payload
_reduce
()
Object
private
Defined in
lib/yui3/src/loader/js/loader.js:1671
Remove superceded modules and loaded modules. Called by calculate() after we have the mega list of all dependencies
Returns:
_rollup
()
private
Provided by the rollup module.
Defined in
lib/yui3/src/loader/js/rollup.js:8
Look for rollup packages to determine if all of the modules a rollup supersedes are required. If so, include the rollup to help reduce the total number of connections required. Called by calculate(). This is an optional feature, and requires the appropriate submodule to function.
_setup
()
private
Defined in
lib/yui3/src/loader/js/loader.js:1502
Investigates the current YUI configuration on the page. By default, modules already detected will not be loaded again unless a force option is encountered. Called by calculate()
_sort
()
private
Defined in
lib/yui3/src/loader/js/loader.js:1809
Sorts the dependency tree. The last step of calculate()
_url
-
path
-
name
-
[base=self.base]
Defined in
lib/yui3/src/loader/js/loader.js:2299
Generates the full url for a module
Parameters:
Returns:
addGroup
-
o
-
name
Defined in
lib/yui3/src/loader/js/loader.js:812
Add a new module group
- name:
- required, the group name
- base:
- The base dir for this module group
- root:
- The root path to add to each combo resource path
- combine:
- combo handle
- comboBase:
- combo service base path
- modules:
- the group of modules
addModule
-
o
-
name
Defined in
lib/yui3/src/loader/js/loader.js:849
Add a new module to the component metadata.
- name:
- required, the component name
- type:
- required, the component type (js or css)
- path:
- required, the path to the script from "base"
- requires:
- array of modules required by this component
- optional:
- array of optional modules for this component
- supersedes:
- array of the modules this component replaces
- after:
- array of modules the components which, if present, should be sorted above this one
- after_map:
- faster alternative to 'after' -- supply a hash instead of an array
- rollup:
- the number of superseded modules required for automatic rollup
- fullpath:
- If fullpath is specified, this is used instead of the configured base + path
- skinnable:
- flag to determine if skin assets should automatically be pulled in
- submodules:
- a hash of submodules
- group:
- The group the module belongs to -- this is set automatically when it is added as part of a group configuration.
- lang:
- array of BCP 47 language tags of languages for which this module has localized resource bundles, e.g., ["en-GB","zh-Hans-CN"]
- condition:
- Specifies that the module should be loaded automatically if a condition is met. This is an object with up to three fields: [trigger] - the name of a module that can trigger the auto-load [test] - a function that returns true when the module is to be loaded. [when] - specifies the load order of the conditional module with regard to the position of the trigger module. This should be one of three values: 'before', 'after', or 'instead'. The default is 'after'.
- testresults:
- a hash of test results from Y.Features.all()
Parameters:
Returns:
calculate
-
o
-
type
Defined in
lib/yui3/src/loader/js/loader.js:1439
Calculates the dependency tree, the result is stored in the sorted property.
filterRequires
-
r
Defined in
lib/yui3/src/loader/js/loader.js:1166
Explodes the required array to remove aliases and replace them with real modules
Parameters:
-
r
ArrayThe original requires array
Returns:
formatSkin
-
skin
-
mod
Defined in
lib/yui3/src/loader/js/loader.js:748
Returns the skin module name for the specified skin name. If a module name is supplied, the returned skin module name is specific to the module passed in.
Returns:
getLangPackName
-
lang
-
mname
Defined in
lib/yui3/src/loader/js/loader.js:1569
Builds a module name for a language pack
Returns:
getModule
-
mname
Defined in
lib/yui3/src/loader/js/loader.js:1617
Get's the loader meta data for the requested module
Parameters:
-
mname
StringThe module name to get
Returns:
getProvides
-
name
Defined in
lib/yui3/src/loader/js/loader.js:1407
Returns a hash of module names the supplied module satisfies.
Parameters:
-
name
StringThe name of the module.
Returns:
getRequires
-
mod
Defined in
lib/yui3/src/loader/js/loader.js:1200
Returns an object containing properties for all modules required in order to load the requested module
Parameters:
-
mod
ObjectThe module definition from moduleInfo.
Returns:
hash
-
[calc=false]
-
[s=loader.sorted]
Defined in
lib/yui3/src/loader/js/loader.js:2356
Returns an Object hash of hashes built from loader.sorted
or from an arbitrary list of sorted modules.
Parameters:
Returns:
Example:
This method can be used as an off-line dep calculator
var Y = YUI();
var loader = new Y.Loader({
filter: 'debug',
base: '../../',
root: 'build/',
combine: true,
require: ['node', 'dd', 'console']
});
var out = loader.hash(true);
insert
-
o
-
type
Defined in
lib/yui3/src/loader/js/loader.js:1973
inserts the requested modules and their dependencies.
type
can be "js" or "css". Both script and
css are inserted if type is not provided.
loadNext
-
mname
Defined in
lib/yui3/src/loader/js/loader.js:1993
Executed every time a module is loaded, and if we are in a load cycle, we attempt to load the next script. Public so that it is possible to call this if using a method other than Y.register to determine when scripts are fully loaded
Parameters:
-
mname
Stringoptional the name of the module that has been loaded (which is usually why it is time to load the next one).
onCSS
()
Defined in
lib/yui3/src/loader/js/loader.js:192
Callback for the 'CSSComplete' event. When loading YUI components with CSS the CSS is loaded first, then the script. This provides a moment you can tie into to improve the presentation of the page while the script is loading.
onFailure
()
Defined in
lib/yui3/src/loader/js/loader.js:185
Callback that will be executed if there is a failure
onProgress
()
Defined in
lib/yui3/src/loader/js/loader.js:202
Callback executed each time a script or css file is loaded
onSuccess
()
Defined in
lib/yui3/src/loader/js/loader.js:177
Callback that will be executed when the loader is finished with an insert
onTimeout
()
Defined in
lib/yui3/src/loader/js/loader.js:209
Callback that will be executed if a timeout occurs
require
-
what
Defined in
lib/yui3/src/loader/js/loader.js:1120
Add a requirement for one or more module
Parameters:
-
what
String[] | stringthe modules to load.
resolve
-
[calc=false]
-
[s=loader.sorted]
Defined in
lib/yui3/src/loader/js/loader.js:2311
Returns an Object hash of file arrays built from loader.sorted
or from an arbitrary list of sorted modules.
Parameters:
Returns:
Example:
This method can be used as an off-line dep calculator
var Y = YUI();
var loader = new Y.Loader({
filter: 'debug',
base: '../../',
root: 'build/',
combine: true,
require: ['node', 'dd', 'console']
});
var out = loader.resolve(true);
Properties
_internalCallback
Unknown
private
Defined in
lib/yui3/src/loader/js/loader.js:169
Internal callback to handle multiple internal insert() calls so that css is inserted prior to js
allowRollup
Boolean
Defined in
lib/yui3/src/loader/js/loader.js:353
Should we allow rollups
Default: false
base
String
Defined in
lib/yui3/src/loader/js/loader.js:258
The base directory.
Default: http://yui.yahooapis.com/[YUI VERSION]/build/
charset
String
deprecated
Defined in
lib/yui3/src/loader/js/loader.js:236
Deprecated: , use cssAttributes or jsAttributes.
The charset attribute for inserted nodes
combine
Boolean
Defined in
lib/yui3/src/loader/js/loader.js:280
If configured, the loader will attempt to use the combo service for YUI resources and configured external resources.
Default: true if a base dir isn't in the config
comboBase
String
Defined in
lib/yui3/src/loader/js/loader.js:266
Base path for the combo service
Default: http://yui.yahooapis.com/combo?
comboSep
String
Defined in
lib/yui3/src/loader/js/loader.js:290
The default seperator to use between files in a combo URL
Default: Ampersand
context
Unknown
Defined in
lib/yui3/src/loader/js/loader.js:216
The execution context for all callbacks
Default: {YUI} the YUI instance
cssAttributes
Object
Defined in
lib/yui3/src/loader/js/loader.js:244
An object literal containing attributes to add to link nodes
dirty
Boolean
Defined in
lib/yui3/src/loader/js/loader.js:549
Flag to indicate the dependency tree needs to be recomputed if insert is called again.
Default: true
filter
String | searchExp: string, replaceStr: string
Defined in
lib/yui3/src/loader/js/loader.js:361
A filter to apply to result urls. This filter will modify the default path for all modules. The default path for the YUI library is the minified version of the files (e.g., event-min.js). The filter property can be a predefined filter or a custom filter. The valid predefined filters are:
- DEBUG
- Selects the debug versions of the library (e.g., event-debug.js). This option will automatically include the Logger widget
- RAW
- Selects the non-minified version of the library (e.g., event.js).
You can also define a custom filter, which must be an object literal containing a search expression and a replace string:
myFilter: { 'searchExp': "-min\\.js", 'replaceStr': "-debug.js" }
filters
Object
Defined in
lib/yui3/src/loader/js/loader.js:388
per-component filter specification. If specified for a given component, this overrides the filter config.
force
String[]
Defined in
lib/yui3/src/loader/js/loader.js:343
A list of modules that should always be loaded, even if they have already been inserted into the page.
ignore
String[]
Defined in
lib/yui3/src/loader/js/loader.js:335
A list of modules that should not be loaded, even if they turn up in the dependency tree
ignoreRegistered
Unknown
Defined in
lib/yui3/src/loader/js/loader.js:310
Ignore modules registered on the YUI global
Default: false
insertBefore
String | HTMLElement
Defined in
lib/yui3/src/loader/js/loader.js:229
Node reference or id where new nodes should be inserted before
inserted
string: boolean
Defined in
lib/yui3/src/loader/js/loader.js:558
List of modules inserted by the utility
jsAttributes
Object
Defined in
lib/yui3/src/loader/js/loader.js:251
An object literal containing attributes to add to script nodes
loaded
string: boolean
Defined in
lib/yui3/src/loader/js/loader.js:532
Set when beginning to compute the dependency tree. Composed of what YUI reports to be loaded combined with what has been loaded by any instance on the page with the version number specified in the metadata.
loadOptional
Boolean
Defined in
lib/yui3/src/loader/js/loader.js:514
Whether or not to load optional dependencies for the requested modules
Default: false
maxURLLength
Int
Defined in
lib/yui3/src/loader/js/loader.js:297
Max url length for combo urls. The default is 2048. This is the URL limit for the Yahoo! hosted combo servers. If consuming a different combo service that has a different URL limit it is possible to override this default by supplying the maxURLLength config option. The config option will only take effect if lower than the default.
patterns
Object
Defined in
lib/yui3/src/loader/js/loader.js:403
If a module name is predefined when requested, it is checked againsts the patterns provided in this property. If there is a match, the module is added with the default configuration.
At the moment only supporting module prefixes, but anticipate supporting at least regular expressions.
required
string: boolean
Defined in
lib/yui3/src/loader/js/loader.js:396
The list of requested modules
rollups
Unknown
Defined in
lib/yui3/src/loader/js/loader.js:508
List of rollup files found in the library metadata
root
String
Defined in
lib/yui3/src/loader/js/loader.js:317
Root path to prepend to module path for the combo service
Default: [YUI VERSION]/build/
skin
Unknown
Defined in
lib/yui3/src/loader/js/loader.js:425
Provides the information used to skin the skinnable components. The following skin definition would result in 'skin1' and 'skin2' being loaded for calendar (if calendar was requested), and 'sam' for all other skinnable components:
skin: {
// The default skin, which is automatically applied if not
// overriden by a component-specific skin definition.
// Change this in to apply a different skin globally
defaultSkin: 'sam',
// This is combined with the loader base property to get
// the default root directory for a skin. ex:
// http://yui.yahooapis.com/2.3.0/build/assets/skins/sam/
base: 'assets/skins/',
// Any component-specific overrides can be specified here,
// making it possible to load different skins for different
// components. It is possible to load more than one skin
// for a given component as well.
overrides: {
calendar: ['skin1', 'skin2']
}
}
skipped
Unknown
Defined in
lib/yui3/src/loader/js/loader.js:565
List of skipped modules during insert() because the module was not defined
sorted
String[]
Defined in
lib/yui3/src/loader/js/loader.js:523
All of the derived dependencies in sorted order, which will be populated when either calculate() or insert() is called
timeout
Int
Defined in
lib/yui3/src/loader/js/loader.js:326
Timeout value in milliseconds. If set, self value will be used by the get utility. the timeout event will fire if a timeout occurs.


All,
Does anybody have any good magnetic relays that can handle 20Amps and be controlled with 12-24V? I've done some searching for industrial controls, but nothing has turned up. I want to run various circuits through these and then have a microcontroller turn them on/off to kill the vampire loads that run all day.
http://www.ab.com/en/epub/catalogs/12768/229240/229266/229643/229705/Pro...
http://www.automationdirect.com/adc/Overview/Catalog/Relays_-z-_Timers/Electro-Mechanical_Relays/Latching_Relays,_Octal,_16A_(755_Series)
I want something similar to what they have in Hotels where you insert your key to turn on the room. I want to do this for my house so when I leave I can put the house to sleep (minus the critical circuits like A/C, Refrigeration, microcontroller :)
Thanks,
Brad
Re: 20A Magnetic Latching Relays (Whole house power switch)?
Try searching for "remanent relay". There are a lot here: http://www.releco-relays.net/en/data-sheets-relays-series-irc-mrc-qrc.html but I've not looked at coil voltage/power, contact ratings etc.
Re: 20A Magnetic Latching Relays (Whole house power switch)?
http://www.Schneider-electric.com (US)
https://www.clipsal.com (AU)
Remotely Operated ecB-g3 circuit Breakers (120-240V, 15,20,&30 Amp)￼
Catalog Number
ECB14015G3*
ECB14020G3*
ECB14030G3
What I found: Schneider bought Clipsal which developed C-BUS home automation (Australia) and Schneider had PowerLink G3 lighting control, which is now BACNet compatible (http://www.bacnet.org (Building Automation Control Standard))
All made for industrial use and may be too expensive for residential operations, but my TED tells me I'm spending about $1/night in vampire loads. If those could be shut down throughout they day, that is ~$500/yr.
(Update): Pricing sheet puts this outside of the residential reach
http://static.schneider-electric.us/assets/digest/17605.pdf
Re: 20A Magnetic Latching Relays (Whole house power switch)?
Well, it looks like Belkin and Quirky have just the products to solve my issue:
http://www.homedepot.com/p/Quirky-Wink-Pivot-Power-Genius-Surge-Protecto...
http://www.belkin.com/us/F7C029-Belkin/p/P-F7C029/
Re: 20A Magnetic Latching Relays (Whole house power switch)?
Hi
I use 16amp Schrack relays. Any good? RT314A12 about £4 in UK from RS Components. Easily driven with an L2930D.
Regards
Ian