For many programmers their bread and butter involves slaving over code written in a general purpose language, such as C++, C# or Java. These all require a text editor for modifying the program source code and a compiler for turning that into something the machine can actually use. Those working in the realm of the dynamic languages have a similar toolset, albeit with an interpreter or JIT compiler to turn their masterpiece into boring old machine code.
And for some this is where it ends too. The testing, deployment, documentation & project management fairies all take over now to finish off those other menial tasks. After all, the hard work’s been done, right?
As the software systems we are trying to create get more and more complex, so does the number and type of tools we need to use to get the job done. In some big corporations there are teams dedicated to testing and deployment, but that still leaves an awful lot that we need to cover ourselves. In the smaller shops you’ve got all that along with painting your office once in a while too.
We should always strive to use “the right tool for the job”, but that doesn’t mean that we have to buy an all-singing, all-dancing bug tracking system if our development practices ensure that our bug count remains low – a spreadsheet may well be “the right tool”. At least, it might for now. Later, if the spreadsheet becomes unwieldy (hopefully due a high demand for more useful features, not bugs) we can investigate alternatives then.
The problems we need to solve outside of our core code-writing activity are often varied. After the text editor (nay, IDE) and compiler (which is often chosen for us) the Version Control System probably comes next in the list as we need to manage our code-lines as we checkout, commit, branch, merge and spelunk on a regular basis. From there it’s a short hop to the Continuous Integration server that automates a set of build scripts and ad-hoc tools that even Heath Robinson would be proud of. Deployment is probably a similar affair. Even if “all” you turn out is an .MSI something has to produce that, and you’ll need to track your builds and symbols somewhere just in case a bug shows up in the field.
Oh, yes, and there is testing too. Unit testing forms the basis of many team’s testing strategy, with integration and system scale testing thrown in for good measure. Once you reach the outer layers of the system there are a plethora of tools to help with those really gnarly problems, like testing UI’s and web services. Although you will probably strive to create automated tests where possible, there is still a place for manual testing and that must involve some sort of tooling too, even though you might not think of it that way.
If your product is a system composed of many moving parts, such as for batch processing or a service, you’ve also got the support and monitoring sides to consider. The distinction between an “operator” and “developer” are so blurred now that you might have to do a spot of log trawling and live debugging followed by the creation of a patch that needs to be rolled out post-haste. Getting from “problem discovered” to “fix deployed” could well see the use of a tool chest that would make an electrician feel under-equipped. If it’s really serious there might be some major “glue” required to hold the system together until the correct action can be implemented, tested and rolled-out.
And that’s what this column wants to be about – how people solve the problems that allow us to do the other thing we actually think we’re being paid to do. Any discussion of text editors is clearly out of scope on the basis that it’s only mildly less contentious than discussing tabs and spaces. Similarly it’s not an excuse to rope in 3rd parties to write some “Advertorials” either. It’s a chance for jobbing programmers to open up their own tool boxes and let the C Vu readership know what kinds of cool stuff they have in there and how they use it.
The good thing about metaphorical tool boxes is that they are TARDIS like in nature and so can contain everything from the svelte and simple TR through to the powerful and mind-bending GIT. Yes, we can all read the manual on how TR and GIT might be used, but what’s more important is how do you use it? Why do you use it? What are some of the trade-offs that caused you to choose, say, the monkey wrench over the spanner? The aim is to try and convert some of that Unconscious Incompetence into Conscious Incompetence [1], or better yet into Conscious Competence by exposing new tools, or just reminding some of us about the old ones that are collecting dust because we’ve forgotten about them. Better yet how have you managed to make up for the shortfall in one tool’s feature set by using another?
Clearly the classic UNIX commands such as SED and AWK provide a huge source of inspiration, but I’m also hoping we can look further a field to the less obvious. For instance, have you ever treated .csv files and Excel spreadsheets as database tables to aid in testing? Or, how do you generate a unique build number? What about the kinds of information you put on a dashboard for your support team?
Sadly the one-way communication of these
pages will likely only wet your appetite and so you’ll need somewhere else to
go to delve into the finer points of how, what, why, when and where. For that
there is always “
So, pop open that tool box have a rummage around and see what interesting stuff you can find.
[1] http://chrisoldwood.blogspot.co.uk/2010/04/turning-unconscious-incompetence-to.html
Chris Oldwood
29 January 2013
Bio
Chris started out as a bedroom coder in the 80s, writing assembler on 8-bit micros. These days it’s C++ and C# on Windows in big plush corporate offices. He is also the commentator for the Godmanchester Gala Day Duck Race and can be contacted via<EMAIL_ADDRESS>or @chrisoldwood.


Detection of anomalous space-time clusters using the scan statistics methodology. Focuses on prospective surveillance of data streams, scanning for clusters with ongoing anomalies. Hypothesis testing is made possible by Monte Carlo simulation.
| Version: | 1.0.1 |
| Depends: | R (≥ 3.4) |
| Imports: | dplyr, emdbook, ismev, magrittr, methods, plyr, purrr, Rcpp, reliaR, sets, tibble, tidyr |
| LinkingTo: | Rcpp, RcppArmadillo |
| Suggests: | doParallel, foreach, ggplot2, knitr, MASS, pscl, reshape2, rmarkdown, sp, testthat |
| Published: | 2018-01-24 |
| Author: | Benjamin Allévius [aut, cre] |
| Maintainer: | Benjamin Allévius <benjak at math.su.se> |
| BugReports: | https://github.com/BenjaK/scanstatistics/issues |
| License: | GPL (≥ 3) |
| URL: | https://github.com/BenjaK/scanstatistics |
| NeedsCompilation: | yes |
| SystemRequirements: | C++11 |
| Materials: | README NEWS |
| CRAN checks: | scanstatistics results |
| Reference manual: | scanstatistics.pdf |
| Vignettes: |
Introduction to scanstatistics |
| Package source: | scanstatistics_1.0.1.tar.gz |
| Windows binaries: | r-devel: scanstatistics_1.0.1.zip, r-release: scanstatistics_1.0.1.zip, r-oldrel: scanstatistics_1.0.1.zip |
| OS X binaries: | r-release: scanstatistics_1.0.1.tgz, r-oldrel: scanstatistics_1.0.1.tgz |
| Old sources: | scanstatistics archive |
Please use the canonical form https://CRAN.R-project.org/package=scanstatistics to link to this page.


Sharad Pawar reveals disagreement with Sena, Congress over sharing CM post led to delay in govt formation
Sharad Pawar said on Monday that the three parties couldn't agree on sharing the CM post equally and there were differences.
by Pankaj P. KhelkarHIGHLIGHTS
- Sharad Pawar has said there was no consensus between the 3 parties over power sharing
- Sharad Pawar also said he would never betray Shiv Sena because he made a promise
- Pawar also said three parties forming govt need time to iron out differences
NCP chief Sharad Pawar has finally come clean on why the three parties took so much time to arrive at a consensus on government formation in Maharashtra. Pawar said on Monday the three parties couldn't agree on sharing the CM post equally and there were differences.
Speaking at an event in Maharashtra's Karad, Sharad Pawar said, "We had demanded 50-50 sharing of the CM's post and there were differences among the parties. There was no consensus."
FOLLOW LIVE UPDATES ON MAHARASHTRA POLITICS
Two days after his nephew sprung a surprise and foiled all plans of the NCP to form the government with Shiv Sena and Congress, Sharad Pawar has finally spoken on the delay in staking claim, which gave enough time for Ajit Pawar to orchestrate the coup that left everyone shocked.
On being asked if he Ajit Pawar's move has his backing, Sharad Pawar said, "I have come much ahead with Shiv Sena. I would have taken my partymen in confidence if I had such plans."
He added, "I cannot do anything bad with Shiv Sena as I promised them. We have to run the government for 5 years with three parties, we couldn't act in a hurry."
NCP and Congress leaders held several rounds of meetings over the past week since the President's rule was imposed in Maharashtra on November 12. Soon after BJP refused to form the government, Shiv Sena reached out to NCP-Congress, however, even after almost two weeks, the three parties couldn't stake claim to form the government.
While insiders from the meetings suggested Congress demanded the Deputy CM's post and consensus on the Common Minimum Programme (CMP), it is clear now that NCP and Shiv Sena too couldn't agree on the power sharing formula.
Sharad Pawar made the big revelation at the death anniversary event of former Maharashtra Chief Minister Yashwantrao Balwantrao Chavan at Karad on Monday.
Meanwhile, NCP, Congress and Shiv Sena leaders submitted a letter of support to Governor BS Koshyari on Monday morning ahead of the crucial Supreme Court hearing of their petition.
The parties had moved the court seeking an immediate floor test in the Maharashtra assembly.


This class implements the Document Object Model (DOM) interface
Destructor
The document handler interface
protected Constructor
Error Handler interface
The pure virtual methods in this interface.
This class implements the Document Object Model (DOM) interface. It should be used by applications which choose to parse and process the XML document using the DOM api's. This implementation also allows the applications to install an error and an entitty handler (useful extensions to the DOM specification).It can be used to instantiate a validating or non-validating parser, by setting a member flag.
The parser's default state is: false. This flag is ignored by the underlying scanner if the installed
validator indicates that namespace constraints should be
enforced.
By default, the parser does not to any validation. The default
value is false.
The default value is 'true' and the parser exits on the
first fatal error.
This method is used to start a progressive parse on a XML file.
To continue parsing, subsequent calls must be to the parseNext
method.
It scans through the prolog and returns a token to be used on
subsequent scanNext() calls. If the return value is true, then the
token is legal and ready for further use. If it returns false, then
the scan of the prolog failed and the token is not going to work on
subsequent scanNext() calls.
This method is used to start a progressive parse on a XML file.
To continue parsing, subsequent calls must be to the parseNext
method.
It scans through the prolog and returns a token to be used on
subsequent scanNext() calls. If the return value is true, then the
token is legal and ready for further use. If it returns false, then
the scan of the prolog failed and the token is not going to work on
subsequent scanNext() calls.
This method is used to start a progressive parse on a XML file.
To continue parsing, subsequent calls must be to the parseNext
method.
It scans through the prolog and returns a token to be used on
subsequent scanNext() calls. If the return value is true, then the
token is legal and ready for further use. If it returns false, then
the scan of the prolog failed and the token is not going to work on
subsequent scanNext() calls.
This method is used to continue with progressive parsing of
XML files started by a call to 'parseFirst' method.
It parses the XML file and stops as soon as it comes across
a XML token (as defined in the XML specification).
reuseValidator - The flag indicating whether the existing
validator should be reused or not for this
parsing run.
reuseValidator - The flag indicating whether the existing
validator should be reused or not for this
parsing run.
toFill - A token maintaing state information to maintain
internal consistency between invocation of 'parseNext'
calls.
reuseValidator - The flag indicating whether the existing validator
should be reused or not for this parsing
process.
parseFirst(char*,...)
parseFirst(InputSource&,...)
toFill - A token maintaing state information to maintain
internal consistency between invocation of 'parseNext'
calls.
reuseValidator - The flag indicating whether the existing validator
should be reused or not for this parsing
run.
parseFirst(XMLCh*,...)
parseFirst(InputSource&,...)
toFill - A token maintaing state information to maintain
internal consistency between invocation of 'parseNext'
calls.
reuseValidator - The flag indicating whether the existing validator
should be reused or not for this parsing
process.
parseFirst(XMLCh*,...)
parseFirst(char*,...)
parseFirst(char*,...)
parseFirst(InputSource&,...)
toFill - A pointer to a buffer in which the application
processed system id is stored.
systemId - A const pointer to a Unicode string representing the
system id of the entity just parsed.
Any whitespace before content is ignored. If the current
node is already of type DOM_Node::TEXT_NODE, then these
whitespaces are appended, otherwise a new Text node is
created which stores this data. Essentially all ignoreable
characters are collected in one node.
data - A const pointer to a Unicode string representing the
data of the PI declaration. See the PI production rule
in the XML specification for details.
urlId - An id referring to the namespace prefix, if
namespaces setting is switched on.
isRoot - A flag indicating whether this element was the
root element.
length - The length of the Unicode string 'chars'.
cdataSection - A flag indicating if the characters represent
content from the CDATA section.
urlId - An id referring to the namespace prefix, if
namespaces setting is switched on.
elemPrefix - A const pointer to a Unicode string containing
the namespace prefix for this element. Applicable
only when namespace processing is enabled.
attrList - A const reference to the object containing the
list of attributes just scanned for this element.
attrCount - A count of number of attributes in the list
specified by the parameter 'attrList'.
isEmpty - A flag indicating whether this is an empty element
or not.
isRoot - A flag indicating whether this element was the
root element.
encodingStr - A const pointer to a Unicode string representing
the encoding string value.
standaloneStr - A const pointer to a Unicode string
representing the standalone string value.
actualEncodingStr - A const pointer to a Unicode string
representing the actual encoding string
value.
alphabetic index hierarchy of classes
|
Xerces-C XML Parser for C++ Version 1.1 |
|
|
generated by doc++


I'm currently learning development through Code School & Plural Sight to futher enhance my abilities within Quality Assurance. When I'm not testing, or studying DEV, I enjoy learning about the principles of design, and fine arts.
So far I've covered the following:
Follow me on twitter @jdiliegghio


JavaScript
Posted Sunday June 1st, 2014
Why so popular?
JavaScript has taken over the web. Here are a few reasons why...
- It has a simple syntax, making it a fairly easy language to learn
- No plugins are required to be installed
- JS is more lightweight than Flash and Java
- Several libraries that add useful features to the language are available
Why so awesome?
Aside from being popular, JavaScript is great for the following reasons:
- Displays pop up messages
- Adds effects to webpages
- Extra browser functionality with addons
- ...even games!
Why so...limited?
While popular and awesome, JavaScript also has limitations. If you are looking to do the following with JavaScript, look elsewhere:
- Directly access files on a user's system
- Write directly to files on a server (without a little help)
- Access databases
- Close a window it did not open
- Access websites hosted on another domain


{# # Copyright 2015 Google Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. #} {% extends "base.html" %} {% block content %}
No article found
{% endfor %} {% if next_page_token %} {% endif %} {% endblock %}


Carbon monoxide suspected in couple’s deaths
MILWAUKEE (AP) - The Milwaukee County Medical Examiner’s Office says the deaths of a young couple are being investigated as probable carbon monoxide poisoning.
Authorities say Seveon James and Zahnya Hunter, both 20, were found unresponsive in a running vehicle outside Hunter’s Milwaukee home on Nov. 8. The medical examiner’s reports note the vehicle’s exhaust system appeared rusted and possibly leaking.
No trauma was found to the victims and the cause of their deaths is pending toxicology results.
Sign up for Daily Newsletters
Copyright © 2019 The Washington Times, LLC.
Please read our comment policy before commenting.


| Class | Name | Units |
|---|---|---|
| CBE 140 | Chemical Process Analysis | 4 |
| CHEM 12A | Organic Chemistry I | 5 |
| CHEM 12B | Organic Chemistry II | 5 |
| CHEM 103 | Inorganic Chemistry in Living Systems | 3 |
| CHEM 104A | Advanced Inorganic Chemistry I | 3 |
| CHEM 104B | Advanced Inorganic Chemistry II | 3 |
| CHEM 105 | Instrumental Analysis Lab | 4 |
| CHEM 108 | Inorganic Synthesis Lab | 4 |
| CHEM 120A | Physical Chemistry I: Quantum Mechanics | 3 |
| CHEM 120B | Physical Chemistry II: Statistical Mechanics | 3 |
| CHEM 125 | Physical Chemistry Lab | 3 |
| CHEM 135 | Chemical Biology | 3 |
| CHEM 146 | Radiochemical Methods in Nuclear Technology and Forensics | 3 |
| CHEM/MSE C150 | Introduction to Materials Chemistry | 3 |


|
pyrax
Python Bindings for the Rackspace Cloud
|
This class represents a Block Storage volume. More...
Public Member Functions | |
| def | __init__ |
| def | attach_to_instance |
| Attaches this volume to the cloud server instance at the specified mountpoint. | |
| def | detach |
| Detaches this volume from any device it may be attached to. | |
| def | delete |
| Volumes cannot be deleted if either a) they are attached to a device, or b) they have any snapshots. | |
| def | create_snapshot |
| Creates a snapshot of this volume, with an optional name and description. | |
| def | list_snapshots |
| Returns a list of all snapshots of this volume. | |
| def | delete_all_snapshots |
| Locates all snapshots of this volume and deletes them. | |
Public Attributes | |
| display_name | |
| display_description | |
Properties | |
| name | |
| description |
This class represents a Block Storage volume.
| def __init__ | ( | self, | |
| args, | |||
| kwargs | |||
| ) |
Reimplemented in FakeBlockStorageVolume.
| def attach_to_instance | ( | self, | |
| instance, | |||
| mountpoint | |||
| ) |
Attaches this volume to the cloud server instance at the specified mountpoint.
This requires a call to the cloud servers API; it cannot be done directly.
| def create_snapshot | ( | self, | |
name = None , |
|||
description = None , |
|||
force = False |
|||
| ) |
Creates a snapshot of this volume, with an optional name and description.
Normally snapshots will not happen if the volume is attached. To override this default behavior, pass force=True.
| def delete | ( | self, | |
force = False |
|||
| ) |
Volumes cannot be deleted if either a) they are attached to a device, or b) they have any snapshots.
This method overrides the base delete() method to both better handle these failures, and also to offer a 'force' option. When 'force' is True, the volume is detached, and any dependent snapshots are deleted before calling the volume's delete.
| def delete_all_snapshots | ( | self | ) |
Locates all snapshots of this volume and deletes them.
| def detach | ( | self | ) |
Detaches this volume from any device it may be attached to.
If it is not attached, nothing happens.
| def list_snapshots | ( | self | ) |
Returns a list of all snapshots of this volume.
description [static] |
property(_get_description, _set_description, None, "Convenience for referencing the display_description.")
name [static] |
property(_get_name, _set_name, None, "Convenience for referencing the display_name.")


We offer a valuable and unique external perspective to both emerging and established retail businesses through expertise in business models, cost structures, and resource capabilities and requirements.
Our consulting expertise is focused on combining proven strategies with expert knowledge to provide a complete solution for your retail chain. By developing insightful relationships between retailers and consumers, we provide solutions that can be applied to our client's needs.
Our solutions have been applied across all retail IT solution segments to all channels of retailing; including stores, cross-channel systems and e-commerce platforms. By partnering with our clients, we strive to transfer our retailing knowledge to the clients to ensure successful execution and on-going performance improvements
Founded Cybernetic Retail in February 2011. Before that, Tim was the CIO and GM of E-Commerce at Metro Park.
Lindsey is an experienced project manager, systems analyst, and developer. She specializes in implementing new systems, system integration, and creating custom solutions
Bio stuff
Bio stuff


For those that weren't around in the bull market in 2017, these sorts of drawdowns are normal and to be expected. Bitcoin is insanely volatile and will test your will. I'm not saying we are in a big "BULL", but if it is, expect this
See below for ~24hr drops in the last b...


About us
Opened in 2014, I-takeaway is a casual fine online take away, offering Indian, Chinese, Japanese and Italian dishes. Also a warm hospitality on our online website, on our website we allow you to enter your location and find your nearest take away’ of four different types of top cuisines. A simple website with an easy to use layout which anyone can use. Our terms and conditions also apply, we specialize in four course tasting menus, allowing the customer to select any dishes from the menu £15.00 for free local deliveries. However if the order is less than £15.00 there is a delivery charge for £3.99. We follow our policies strictly and provide our best service.
Terms and Conditions
I-Take Away offers free delivery if your order is over £15.00 if your order is under this then they will be a £3.99 charge. These orders can be delivered too many areas throughout London. If you are not in our delivery area radius you cannot get a delivery.
Payment
Our delivery drivers will carry up to £10 in change, payment must be in £ sterling. If you don’t want to pay by cash our drivers will have PayPal machines which you could use to pay and below you can find which types of cards we accept
We accept the following forms of payment:
Cash
Credit / Charge cards: Visa and MasterCard are accepted.
Debit Cards, such as Delta or Switch are accepted.
PRODUCT TERMS AND CONDITIONS
These set of words and expressions have the following definitions in these PRODUCT Terms and Conditions;
You, Your, The Customer: Means you, the Customer who purchases I-Takeaway;
The Products: These are the Products that the customer receives and are supplied by I-Takeaway
The Website: The website of I-Takeaway
LAW
Where these Conditions apply, any contract shall be in accordance with the laws of England ruled by and assembled as I-Takeaway and the Customer submit to the jurisdiction that is non-exclusive of the Courts of England.
Copyright I-Takeaway UK 2014. All rights reserved.


Create
payment
From
To
To account type
Amount
Currency
Name of the beneficiary
Message to your statement
Message to the beneficiary
Reference
Reference
Urgency
Back
Create
add


Kenya is a country that Is located in East Africa. Kenya has a lot of different landscapes such as highlands, mountains, rift valleys and Lakelands. Maasai Mara Reserve, is one of the biggest tourist attraction in Kenya. The Maasai reserve is the biggest safari with many different types of animals.
One of the major attractions in Kenya is the Safari and wild life


On the Registration page, you enter data required for creating your account.
To register:
This information is mandatory. You are notified by email about the registration.
The system checks whether the syntax of the given email address is valid, and whether the domain name corresponds to the standards as defined and maintained by the Internet Assigned Numbers Authority (IANA).
Examples<EMAIL_ADDRESS><EMAIL_ADDRESS><EMAIL_ADDRESS>Fields marked with an asterisk (*) are mandatory.
! " # $ % & ' * + , / : ; < = > ? \ ^ `
When you type the password, the Password strength field indicates how secure your password is. The color green means that your password is strong and secure. A strong and secure password consists of at least 8 characters, and contains numbers, letters, and special characters.
You are sent an email with the URL for completing the registration process and confirming the creation of your account.
The Login page is displayed and you can log in with the user ID and password you specified.
In addition, you are sent an email with the URL for accessing your account. You can use it for future logins.
After registering, you are automatically assigned the administrator role for your organization. This role provides you with the privileges required to manage your organization and its users and subscriptions.


.:[ 2020-10-16 ]:.
CrossUO Suite 1.0.6:
New: client: custom cryptographic keys entry in config file
New: client: resource tracker gump (see: #161 (comment))
Fix: client: gargoyle anims, some blackthorn issues and sitting fixes
Fix: client: lots and lots of animation issues (missing and wrong animations)
Fix: client: animation patching with client flags
Fix: client: memory leak on animations
Fix: client: spellbook wrong pages when book is not full
Fix: client: improve client version compatibility validation
New: client: reduce memory usage and increase game performance a bit more
New: launcher: application icon (fixes #270)
New: launcher: client 1.26.4a signature (Fix #282)
New: launcher: more logging
New: launcher: double click profile will launch the client (closes #268)
.:[ 2020-08-13 ]:.
CrossUO Suite 1.0.5:
Fix: client: Auto open door is enabled by default
Fix: client: Disable spell icon transparency by default
Fix: client: Crashes with some strings in html gumps
Fix: client: MacOSX uses cmd instead of control for pasting strings
Fix: client: Console cursor movement
Fix: client: Correct height drop on multi and static objects (#261)
New: client: Boat control using mouse
Fix: client: Load client config from the application data directory
Fix: client: Double click on profile name to select character (#252)
New: client: Missing large containes from publish 102 (#248)
New: client: Option to enable large containers
New: client: Support to earthquake weather effect
Fix: client: Talk issues (#243)
Fix: client: Better weather effect on large game canvas
New: launcher: Double-click on profile name will launch it (#268)
Fix: launcher: Missing application icon (#270)
Fix: launcher: Added more client signatures (#265, #267)
Fix: launcher: Save last profile used (#251)
Fix: launcher: Shard highlights in the shard picker (#239)
.:[ 2020-06-13 ]:.
CrossUO Suite 1.0.4:
New: Mysticism Book
New: Mastery Book
Fix: radar coloring support for custom maps
Fix: options screen tooltips
Fix: default macro settings on a clean profile
Fix: unlock FPS by default
Fix: console party/guild/alliance usage
Fix: utf8 decoding crash
.:[ 2020-04-20 ]:.
X:UO Launcher 1.0.3c:
New: Entirely rewritten to simplify deployment and usability
New: List of approved Shards pre-configured to easy configuration
New: Auto-detect client version when possible
CrossUO Suite 1.0.3c:
New: Remove GLEW and SDL2 dependencies
New: Client will be more informative about why it can't launchi correctly
New: Enable client World Map
Fix: UTF8 text input fixes
Fix: Issue loading some data files for recent client (<IP_ADDRESS>+) versions
Fix: NumPad Enter key not working on Windows
Fix: A bit more optimizations which induced a bit of FPS speedup
Fix: Some missing mounts and mount height position
Fix: and a lot of minor crashes
.:[ 2019-02-03 ]:.
X:UO Launcher 1.0.1:
New: UI redesign to help new users and avoid configuration issues
New: Protocol Client Version in Advanced tab to use different packet versions from client data version
Fix: Tooltips on fields to help new users
Fix: Temporary download cache data moved to App Data (%APPDATA% on Windows)
Removed: Features tabs - this will become another tool for Shard Owners
CrossUO 1.0.1:
New: 'ProtocolClientVersion' config option to use different packet versions from client data version
New: 'Language' config option to use different language than the system locale (ENU, FRA, etc.)
New: Parity - CTRL+Q to repeat last console text entry
Fix: Text decoding on Linux/MacOS (for languages with special characters)
Fix: Window resizing issue on login/logout. Thanks @Johnny.
Fix: Cryptography issue causing freeze during login
Remove: Ping feature. This required administrator privileges and was a huge source of issues.
.:[ 2019-01-25 ]:.
Welcome to CrossUO, the very first Ultima Online client with real native multiplatform support.
This is the first release of a new client, so expect issues. We need to release this so you can help us with testing and getting the project in shape going forward.
There is zero new features since the last Orion release, do not expect much. Minor updates will follow until we consider this stable enough to start fixing known Orion bugs and new features.
Be patient and report any issues. Thank you!
CrossUO 1.0.0 and X:UO Launcher 1.0.0:
New: Ubuntu 16.04+ 64bits support
New: Manjaro Linux 18.02+ 64bits support
New: macOS High Sierra 10.13+ support
New: Option to disable activating macros while in console mode (emote, whisper, party, etc.)


The data imported by Open Humans from this study may contain the following potentially identifying or otherwise sensitive information.


All devices have different addresses, just like each house on your block does. These are IP addresses, but instead of a street address it is just a number. IP addresses are broken down into separate parts, country, region, subnetwork, then the device itself. Each number is represented by bits, as is all information that is communicated over the Internet. IP addresses used to be 32 bits long, 8 parts each. This accounted for 4 billion unique IP addresses, which was quickly soaked up by the boom of the Internet. Currently we are transferring from IPv4 to IPv6 which will have 128 bits per address and enough IPs to give each grain of sand on Earth it's own IP address.
DNS servers associates names with the IP addresses. So when you enter the URL onto your web browser, the DNS server will connect the inputted URL and it's respective IP address. There are a myriad of DNS servers, one DNS server could not possibly handle the world's traffic and they are distributed to different zones. DNS was initially created to be a public communication protocol which would be very open to hackers.


--- layout: post title: "The Business of Ed-Tech: September 2018 Funding Data" date: 2018-09-30 19:20:00 +0000 tags: image: https://s3.amazonaws.com/hackedu/2017-03-01-money.jpg imagecredits: https://www.flickr.com/photos/chrisdlugosz/3403776466 ---
Here is the latest data on “the business of education” for September:
What just happened?! There were only 7 investment deals, according to my records at least, in September. Three of these did not disclose the amount of money that was raised, so the investment total of $93.4 million isn’t quite right (and is comprised almost entirely of the $80 million raised by celebrity “teaching” platform Masterclass).
That figure doesn’t make September 2018 the lowest month for investment dollars since I’ve been keeping track. That was back in September 2015. But this month was the lowest in dollars invested since November 2016, and it was the lowest month – again, since I’ve been keeping track– in terms of the number of investments made.
2018 does still appear to be on course to be a strong year in terms of the amount of money invested in education startups. But the number of investments is way, way down.
Perhaps the tech industry’s billionaires are opting to go the “philanthropy” route instead of the VC one. In related news, I have created a new page here on this site to show where the Chan Zuckerberg Initiative money is going. (This is not easy to track as the company is not a foundation and therefore not terribly transparent about its “giving.”)
This list has not changed since last month, but here it is nonetheless -- the companies that have raised the most money in 2018:
Just a reminder: as part of this project, you can review information from the last few years who’s received funding, who’s been acquired, who’s IPO’d, which startups have closed, and who’s investing in the stories that Edsurge tells you about the shape of the education technology industry.
I have created separate GitHub repositories for all areas of funding that I monitor:
These sites include human- and machine-readable versions of this funding data. For more ed-tech data sets, visit Hack Education Data on GitHub.
(If you see an error or omission, please file a GitHub issue. You’re welcome to fork or download the repositories too, of course.)


Linkage and insert sizes:
- To obtain linkage information, the we strove to obtain long paired reads that make optimal use of the 2x250 cycles kits used for sequencing.
- The original Illumina NexteraXT® protocol yields reads much shorter than the desired insert size.
- Additional stringent size selection with the Sage Science BluePippin® resulted in inserts ~500bp


Create Minecraft Plugin using Scratch
This course leverages the students knowledge of minecraft and scratch programming to permit them to create their own minecraft plugin
Most students have already been exposed to scratch programming and the MOJANG minecraft game engine. Combining the two, provides a "familiar" context
that the students can use to develop their own personal game.
Pre-Requisites
Before registering students should have:
- A desktop, laptop, or MAC capable of running minecraft
- A MoJang minecraft account
- A microphone and speakers (or headset) connected to their computer
- 64-bit git for windows installed from: https://git-scm.com/download/win
Notes
Suggested age group: 8 to 16 years old


S-Meet agora
Video Calling
in a new
Way !!!
Created and Developed by Shubhodeep Karmakar
Download S-Meet
Download the APK file from here and
install it in your Android device
DOWNLOAD APP
INFORMATION
ABOUT THE S-MEET AGORA VIDEO CALLING APP
S-Meet agora is a video-communication service android application developed by Shubhodeep Karmakar. It doesn't require any mobile number and works over internet only
Directions to Use
S-MEET HOME
THE HOME PAGE
On opening the app you will get this home screen of s-meet app. In this you can see two sections, first "create room" section and "join room" section. you will select create room section to open the create room tab and the join room section to open the join room tab.
S-MEET CREATE
THE CREATE ROOM TAB
After selecting the "create room" section, a tab will open on you screen with the message "room created" and it will contain your room id. You need to share it to your mate using any messing platform and then have to click on join button to enter into the room.
Remember that you have to note the id before entering the room because after entering the room you cannot see your room id.
S-MEET ROOM
THE ROOM
After selecting the "Join" button, you will enter in the meeting room which has a mute button to mute, a rotate camera button to change the camera, a back button to go back without ending the meeting and a end call button to end the meeting.
The meeting will start once the other member enter the meeting using the meeting id.
S-MEET JOIN
THE JOIN ROOM TAB
Now to join a meeting you need to select the join room section. After selecting the "join room" section, a tab will open on you screen with the message "join room" and a input field to enter the room id. You need to enter the meeting room id provided by the other member and have to click on the join room button.
S-MEET MEETING ROOM
THE LIVE MEETING ROOM
After clicking the "join room" button, you will enter in the live meeting room which has a mute button to mute, a rotate camera button to change the camera, a back button to go back without ending the meeting, a end call button to end the meeting
Remember that maxium 4 members are allowed to enter in a particular room, and if more than 4 members enter the video will be paused automatically and they all together can talk like a phone call.
IMPORTANT INSTRUCTIONS
1)IF VIDEO IS NOT SHOWING AFTER JOINING THE ROOM THEN PLEASE FIRST PAUSE THE VIDEO AND THEN UNPAUSE IT. IF STILL NOT WORKS THEN PLEASE RECONNECT THE MEETING.
2)ONLY 4 MEMBERS ARE ALLOWED AT VIDEO CALLS. IF MORE THAN 4 MEMBERS JOIN THE VIDEO WILL BE PAUSED AUTOMATICALLY AND THEY CAN TALK JUST LIKE A MOBILE CALL OVER INTERNET.
3)COPY THE ROOM ID BEFORE ENTERING THE ROOM. AFTER ENTERING THE ROOM YOU CANNOT SEE THE ID AGAIN.
About the Creator
SHUBHODEEP KARMAKAR
Age: 22 years
college: RCCIIT, Beleghata, India
Department: Information Technology
Passing Year: 2023
visit my linked profile


Before Change
tt = np.array([j[1] for j in self.route_expected_tt[veh_id]])
if self.close_CD:
current_route_choice_indx = random.choice([0, 2])
else:
// the vehicle chooses the route that will allow it to move fastest
// choices between equivalent routes are made randomly
After Change
// the vehicle chooses the route that will allow it to move fastest
// choices between equivalent routes are made randomly
// current_route_choice_indx = random.choice(np.where(min(tt) == tt)[0])
current_route_choice_indx = np.argmin(tt)
route_choices[i] = self.available_route_choices[current_route_choice_indx]
if self.vehicles[veh_id]["route"] != route_choices[i]:


New Facebook app pays people to take part in surveys
Facebook on Monday introduced a "Viewpoints" app in the US that pays members of the social network for taking part in surveys.
The new market research app will be used to improve the Facebook "family" of offerings including Instagram, WhatsApp, Portal, Oculus and the core online social network, according to product manager Erez Naveh.
The app could blunt criticism that Facebook keeps to itself profits made by taking advantage of data shared on the social network.
"We believe the best way to make products better is to get insights directly from people who use them," Naveh said in an online post.
Points can be accumulated to earn payments, which will be sent to people via PayPal.
People who set up accounts in the Viewpoints app will be invited to take part in programs, the first a well-being survey intended to gather insights that can be used to curb negative effects of social media and enhance its benefits, according to Naveh.
Personal information such as name, age, gender, and country of residence will be gathered while setting up Viewpoints accounts, which are only open to people 18 years of age or older.
"We won't sell your information from this app to third parties," Naveh said.
"We also won't publicly share your Facebook Viewpoints activity on Facebook or on other accounts you've linked without your permission."
Viewpoints is only available to US Facebook members, but the California-based internet giant planned to expand it to more countries next year.


%@ page import="java.util.Map" %>
Name:
Task's priority:
Has the task a finish date? (leave blank if it isnt) :
Insert a little description of the task:
Id:


--- layout: docs title: Search description: The search page for spine.io. bodyclass: docs search-result headline: 'Search Results' ---


Swipe.js
JavaScript plugin for creating and analyzing swipe events. Compatible with desktop and mobile browsers, support touch and mouse events.
Usage
var swipe = new Swipe(element);
swipe.bind({
start: function() { ... }
move: function() { ... }
end: function() { ... }
});
Browser support
- Chrome
- Firefox
- Safari
- IE 9+
- Opera 7+
Mobile support
- Android 2+
- iOS 6+
- Windows Phone 8+


If you work one different machines, it is useful to have the possibility to keep a Spark Library, and don't have to recreate it on each machine. You can do this by exporting your Library. Note that some actions can be broken after an importation. For example, an Action configure to open an application, will not works if the application is not installed on the target computer.
When you try to import a Library, Spark allows restoring the Library or merges it. If you choose Restore, Spark will destroy all items currently in your Library and replace them by the full contents of the imported Library.
If you choose to merge, Spark let you choose in a list the items you want to import.
To export your Library, choose File > Backup LibraryÉ.
To import a Spark Library File, double clic on it or drag it on the Spark Icon.


RECIPE WORLD
Home
Recipe
Suggest
Suggest a Recipe
Recipe Name:
Email address:
Ingredients and method
Submit


Lowering the Barr
US President Donald Trump took to Twitter on Thursday to let the American people know that the “degenerate” Washington Post fabricated its recent piece that said he attempted to get Attorney General Bill Barr to hold a press conference that reaffirmed his phone call with his Ukrainian counterpart was indeed “perfect.”
Citing “people familiar with the matter,” the Post claimed in a Wednesday article that Trump requested Barr, the head of the US Department of Justice, back him up amid the ongoing impeachment inquiry concerning his July 25 phone call with Ukrainian President Volodymyr Zelenskyy. According to the paper’s sources, Barr refused to do so.
Aside from Trump’s series of tweets proclaiming his innocence, White House Deputy Press Secretary Hogan Gidley also issued a statement slamming the “shady” Post article: “The President has nothing but respect for AG Barr and greatly appreciates the work he’s done on behalf of the country – and no amount of shady sources with clear intent to divide, smear, and slander will change that.”


Class DBSTypeHandle
java.lang.Object
DBSTypeHandle
- public class DBSTypeHandle
- extends java.lang.Object
This class provides a simple way to see how different types interact
with each other. All types are available as final variables, and all variables
and functions are static, so you should never have to allocate one of these
objects. Which is good, because it's a fairly large array...
- Version:
- 0.1 Java
- Author:
- Evan Hildreth, root -1 Entertainment
|
Method Summary |
static void |
Init()
|
static int |
Lookup(int atkType,
int defType)
|
static java.lang.String |
Name(int type)
|
| Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
BlackMagic
public static final int BlackMagic
- See Also:
- Constant Field Values
Earth
public static final int Earth
- See Also:
- Constant Field Values
Enhanced
public static final int Enhanced
- See Also:
- Constant Field Values
Fighting
public static final int Fighting
- See Also:
- Constant Field Values
Fire
public static final int Fire
- See Also:
- Constant Field Values
Flying
public static final int Flying
- See Also:
- Constant Field Values
Normal
public static final int Normal
- See Also:
- Constant Field Values
Remote
public static final int Remote
- See Also:
- Constant Field Values
Sword
public static final int Sword
- See Also:
- Constant Field Values
TotNumTypes
public static final int TotNumTypes
- See Also:
- Constant Field Values
Water
public static final int Water
- See Also:
- Constant Field Values
WhiteMagic
public static final int WhiteMagic
- See Also:
- Constant Field Values
Wind
public static final int Wind
- See Also:
- Constant Field Values
DBSTypeHandle
public DBSTypeHandle()
Init
public static void Init()
Lookup
public static int Lookup(int atkType,
int defType)
Name
public static java.lang.String Name(int type)


FFS
Section: Linux Programmer's Manual (3)
Updated: 2014-04-14
Index
Return to Main Contents
NAME
ffs, ffsl, ffsll - find first bit set in a word
SYNOPSIS
#include <strings.h>
int ffs(int i);
#include <string.h>
int ffsl(long int i);
int ffsll(long long int i);
Feature Test Macro Requirements for glibc (see
feature_test_macros(7)):
ffs():
-
- Since glibc 2.12:
-
_SVID_SOURCE || _BSD_SOURCE ||
_POSIX_C_SOURCE >= 200809L || _XOPEN_SOURCE >= 700 ||
- Before glibc 2.12:
-
none
ffsl(),
ffsll():
-
_GNU_SOURCE
DESCRIPTION
The
ffs()
function returns the position of the first
(least significant) bit set in the word i.
The least significant bit is position 1 and the
most significant position is, for example, 32 or 64.
The functions
ffsll()
and
ffsl()
do the same but take
arguments of possibly different size.
RETURN VALUE
These functions return the position of the first bit set,
or 0 if no bits are set in
i.
ATTRIBUTES
Multithreading (see pthreads(7))
The
ffs(),
ffsl(),
and
ffsll()
functions are thread-safe.
CONFORMING TO
ffs():
4.3BSD, POSIX.1-2001.
The
ffsl()
and
ffsll()
functions are glibc extensions.
NOTES
BSD systems have a prototype in
<string.h>.
SEE ALSO
memchr(3)
Index
- NAME
-
- SYNOPSIS
-
- DESCRIPTION
-
- RETURN VALUE
-
- ATTRIBUTES
-
- Multithreading (see pthreads(7))
-
- CONFORMING TO
-
- NOTES
-
- SEE ALSO
-
This document was created by
man2html,
using the manual pages.
Time: 02:55:12 GMT, September 18, 2014


One of things I wanted to accomplish when I began learning more about electronics was to build a small device from the ground up. This would include sourcing all parts, writing the necessary code, and designing and 3D printing an enclosure for the device. Given the state the world at this time, as my first foray into electronics design, I decided to make a little device to keep track of US COVID-19 stats.
Bill of Materials
- 1 × Wemos LOLIN D32
- 1 × MSP2402 SPI LCD Screen
- 1 × Protoboard
- 3 × JST connectors
- 2 × Pin headers
Starting off small, I used a micro-controller that came with everything and the kitchen sink.  It's a dev board based around the ESP32-WROOM-32 module and is compatible with the Arduino platform. and comes with WiFi and Bluetooth out of the box. Perhaps a little overkill for what I'm building, but it allowed me to get up and running very quickly.
The MSP2402 screen is an 2.4 inch TFT LCD Screen with a resolution of 320x240 pixels. I chose a larger screen so that I can could make something large enough for "at-a-glance" stats that I could put on a shelf somewhere.
All major pieces were connected together on a protoboard using JST connectors and pin headers so that future revisions can reuse the same components.
Writing the Code
The code for the project is available on GitHub.
The project utilizes a couple useful utilities to make development a lot easier. First and foremost is the PlatformIO IDE plugin for VS Code. This brings some modern niceties that aren't available with the standard Arduino IDE such as dependency version management, a command line based build system, and the ability to use the code editor of your choice.
For the implementation itself, I used:
- Arduino HTTPClient library to make requests to the COVID-19 stats API
- ArduinoJson to parse the API results
- TFT_eSPI to display the results
The basic loop function would look like something below:
1 bool updateScreen = false;
2
3 void loop() {
4 if (wifi.run() == WL_CONNECTED) {
5 unsigned long currentTime = millis();
6 if (currentTime - LAST_UPDATED_TIME >= UPDATE_TIME_MS) {
7 LAST_UPDATED_TIME = currentTime;
8 update_tracker()
9 }
10 }
11
12 if (updateScreen) {
13 render_stats();
14 }
15 }
We want to make sure we have an internet connection (wifi.run()
) and if everything
looks good, we can go ahead and make a request to the API. If anything has changed
in the stats, we'll set a flag to update the screen. Once that request is done,
if the screen update flag is set, we can run through the code to re-render the
contents of the screen.
All in all, the code was very straightforward and pretty similar to how you would build a similar stats tracker in any other language/platform.
Wiring Schematic
Now for the hardware.
To keep track of all the different wires, I used kicad to build out a schematic based on the breadboard prototype I had built. As I get better at kicad, my hope is eventually turn some of these schematics into actual PCBs that can be printed, but for the time being, it's a handy way to visualize the connections.
For this first build, I left out the button which allows you to jump to different screens, but the code and schematic still handles this.
Below are some photos of the final soldered result:
- Photo #1: Overview of the entire project.
- Photo #2: Closeup of the soldering for the main board.
- Photo #3: Closeup of the LCD setup.
Designing & Printing an Enclosure
For the enclosure design, I settled on using Shapr3D for the iPad. It is a fantastic application that has everything I need as a hobbyist to get things done. Since the enclosure is nothing more than a simple rectangular box, diving into more complex tools like Fusion 360 or AutoCAD just didn't seem like a lot of fun.
This was my first enclosure that was designed from scratch, and is comprised of two large halves that are screwed together. The files are available here for download.
I used my MonoPrice Maker Select v2 to print out the enclosure and test prototypes before finally putting everything together.
Finished Result!
Here's a video fo the COVID tracker booting up and loading the data
Some things I would like to work on for v2 of this enclosure:
- New enclosure with better assembly and holes for buttons. The two halves was a naive design decision due to inexperience and made assmebly more difficult than necessary.
- Adding additional screens that can be toggled via buttons.


Login
Apply
Email
Password
Remember me
Sign in
Not member yet?
Apply Now
About
Privacy Policy
Terms
Contacts


JavaScript is disabled on your browser.
Skip navigation links
Overview
Package
Class
Use
Tree
Deprecated
Index
Help
Prev Letter
Next Letter
Frames
No Frames
All Classes
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
F
fallbackContent(String)
- Method in class com.cloudinary.
Url
fetchFormat(String)
- Method in class com.cloudinary.
Transformation
File
- Class in
com.cloudinary
File(String)
- Constructor for class com.cloudinary.
File
finalizeResourceType(String, String, String, boolean, boolean)
- Method in class com.cloudinary.
Url
find()
- Method in class com.cloudinary.
Matcher
find(List<Class>)
- Static method in class com.cloudinary.strategies.
StrategyLoader
FirstCodenameOneLibrary
- Class in
com.codename1.hello
This is a demo class to help you get started building a library
FirstCodenameOneLibrary()
- Constructor for class com.codename1.hello.
FirstCodenameOneLibrary
flags(String...)
- Method in class com.cloudinary.
Transformation
fontFamily
- Variable in class com.cloudinary.transformation.
TextLayerBuilder
fontFamily(String)
- Method in class com.cloudinary.transformation.
TextLayerBuilder
fontSize
- Variable in class com.cloudinary.transformation.
TextLayerBuilder
fontSize(int)
- Method in class com.cloudinary.transformation.
TextLayerBuilder
fontStyle
- Variable in class com.cloudinary.transformation.
TextLayerBuilder
fontStyle(String)
- Method in class com.cloudinary.transformation.
TextLayerBuilder
fontWeight
- Variable in class com.cloudinary.transformation.
TextLayerBuilder
fontWeight(String)
- Method in class com.cloudinary.transformation.
TextLayerBuilder
format
- Variable in class com.cloudinary.
EagerTransformation
format(String)
- Method in class com.cloudinary.
EagerTransformation
format
- Variable in class com.cloudinary.
StoredFile
format
- Variable in class com.cloudinary.transformation.
AbstractLayerBuilder
format(String)
- Method in class com.cloudinary.transformation.
AbstractLayerBuilder
format(String)
- Method in class com.cloudinary.transformation.
TextLayerBuilder
format(String)
- Method in class com.cloudinary.
Url
formattedPublicId()
- Method in class com.cloudinary.transformation.
AbstractLayerBuilder
from(Configuration)
- Method in class com.cloudinary.
Configuration.Builder
Initialize builder from existing
Configuration
from(Configuration)
- Static method in class com.cloudinary.
Configuration
Create a new Configuration from an existing one
from(String)
- Static method in class com.cloudinary.
Configuration
Create a Configuration from a cloudinary url Example url: cloudinary://123456789012345:abcdeghijklmnopqrstuvwxyz12@n07t21i7
fromIdentifier(String)
- Method in class com.cloudinary.
Url
Parses a cloudinary identifier of the form: [<resource_type>/][<image_type >/][v<version>/]<public_id>[.<format>][#<signature>]
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
Skip navigation links
Overview
Package
Class
Use
Tree
Deprecated
Index
Help
Prev Letter
Next Letter
Frames
No Frames
All Classes


Ms. FANG TRAVEL RECORD "Welcome to the world in my eyes." Home Victoria Duskwood About Classdemo volume I VICTORIA volume II DUSKWOOD Shulei Jamie Fang Photography 2018


Based on the Performance of Your Posts Over The Week:
People from Accra viewed your Post the most, try targeting them more for such Posts to instill their interest. This helps you put the right content in the faces of the right people in order to reduce negative feedbacks. Also when posting similar content, use the hashtag #Accra to get more organic reach and follows from interested people in your locality.
Your audience are mostly active between 12pm to 1pm, you should post at that time to get more views from fans. They are more inclined to stay on your Post longer and even engage.
Allowing people and other businesses to tag your page and share it with others is a great way to expand your reach to other audiences and boost Engagement. Consider Partnering with Keexs Shoes because they offer a supporting Service to yours in Accra, also, Nana Kwame can be a good Influencer for your product.
Consider your content type and ensure it is not always Promotional else your audience’s interest in your Posts will reduce. Your content should always be 80% user focused and 20% promotional.


--- layout: post title: google date: '2008-10-16T13:38:24+01:00' tags: [] tumblr_url: http://backlog.robbevan.com/post/54841678/google ---
Google


best-buy
Businessmodel of Best Buy
Customer Segments
Best Buy provides a range of technology products, services and solutions to a broad range of customers. The Company is directly customer-facing, serving general consumers primarily through its network of retail outlets. In the mid-2000s Best Buy began organising its retail operations to targets five principal consumer segments:
Small business customer who has specific needs related to growing sales and increasing the profitability of his or her business.
- Affluent professionals who are looking for the best technology and entertainment products, and demands excellent service;
- Family men who are looking for technology that will improve their lives and that will last;
- Busy suburban mothers; and
- Young consumers who are active early-adopters. Best Buy exclusively serves customers across North America. Its largest market by far is the US, with Canada and Mexico serving as secondary markets.
Value Propositions
Best Buy provides value to its customers in the following ways:
- The quality of its customer service, with the Company providing personal assistance to customers through its knowledgeable in-house sales staff;
- Its competitive pricing and discount deals, with the Company offering products at reasonable prices, as well as offering deals and discounts, including weekly and daily deals;
- Its broad sales reach across North America, with the Company operating a network of 1,200 large-format and 400 small-format stores, principally in the US, as well as in Mexico and Canada;
- Its technical support offerings, with the Company providing expert, in-person technical assistance to its customers through its Geek Squad agents and service centres; and
- Its accessible digital channels, with the Company operating online and mobile channels that enable customers to purchase products and services on the move. ### Channels
Best Buy operates a corporate website at www.corporate.bestbuy.com, through which it provides information on its various products, services, and locations. The Company also operates an online sales channel at www.bestbuy.com, as well as through its Mexican and Canadian sites www.bestbuy.com.ca and www.bestbuy.com.mx, through which customers are able to make purchases, arrange deliveries, and manage accounts. Best Buy online merchandise sales are typically either picked up at Best Buy stores or delivered directly to customers from a distribution centre or retail store. The Company also operates a mobile channel through its iOS and android apps, which offers much of the same functionality.
The majority of Best Buy’s sales are made directly through its sales and customer service staff located at the Company’s physical retail stores. Best Buy operates approximately 1,200 large-format and 400 small-format retail outlets across the US, Canada, and Mexico. The Company also provides direct services through its in-house technical Geek Squad staff, who are located in-store and at specialist service centres.
Customer Relationships
Many of Best Buy’s products are available to customers on a self-service basis through its online sales channels in the US, Canada, and Mexico, as well as through its mobile apps. These channels allow customers to browse products, make purchase, organise deliveries and pickups, and manage transactions without interacting directly with members of the Company sales and customer service staff.
Through its chain of physical retail stores, Best Buy’s sales and customer service staff provide personalised assistance to customers, advising customers on which products are best suited to their needs. This is supplemented by the Company’s Geek Squad staff who provide customers with direct technical support across its product catalogue. Best Buy also provides support through its refund and exchange promise, its protection plans, and trade-in program, as well as through telephone support staff and online resources.
Best Buy also hosts a community forum through which customers are able to interact with one another, discuss problems, and identify fixes. The Company also operates social media accounts with Facebook, Twitter, YouTube, and Google+, through which it is able to interact directly with customers.
Key Activities
Best Buy is a retailer of technology products, services and solutions. The Company serves a spectrum of general consumers through its network of retail stores, its Geek Squad agents and service centres, and its online and mobile sales channels. The Company’s business activities are divided into two operating segments: Domestic
and International. The Domestic segment which comprises the Company’s operations across all states, districts and territories of the US, under its various brand names, including its online and mobile channel bestbuy.com and Best Buy Mobile; International, which comprises the Company’s operations in Canada and Mexico across all its brands, including www.bestbuy.com.ca and www.bestbuy.com.mx. Best Buy’s Domestic and International segments offer products across six categories: consumer electronics, computing and mobile phones, entertainment, appliances, services and other. It has a network of more than 1,600 stores across North America.
Key Partners
Best Buy collaborates with a range of partners across its two operating segments. These partners include:
- Supplier and Vendor Partners, comprising suppliers of goods, services, and tools which support the Company’s operations and provide outsourcing services;
- Affiliate and Marketing Partners, comprising a range of websites and companies that earn commissions for generating sales and traffic for Best Buy’s online and mobile channels;
- Developer Partners, with the Company making its API available so that developers can integrate third-party services into Best Buy functionality;
- Non-Profit and Community Partners, comprising a range of charitable organisations and programs with which the Company collaborates on projects; and
- Strategic and Alliance Partners, comprising a range of companies with which the Company shares resources and collaborates on joint venture projects. Best Buy has recently launched a number of partnerships, including a deal with Macy’s, which has agreed to open small-scale Best Buy sections within its own stores, and a partnership with Eero, with which it has non-exclusive retail agreement to sell Eero-branded Wi-Fi products in its stores.
Key Resources
Best Buy’s key resources are its stock of products, its network of physical retail and distribution infrastructure, its online and mobile channels, its intellectual properties, its partnerships, and its personnel – notably its specialist technical Geek Squad staff.
Best Buy has secured a number of domestic and international trademark and service mark registrations for its brands, as well as a number of patents. The Company deems its intellectual properties to have significant value in its marketing, stores, products and websites.
Best Buy owns and leases a number of properties across the US, Canada, and Mexico. This includes the Company’s 1,600 stores, as well as its distribution centres, service centres, and warehouses.
Cost Structure
Best Buy incurs costs in relation to the acquisition of stock and supplies, the operation and maintenance of its retail stores and distribution infrastructure, the maintenance and development of its online and mobile channels, the maintenance of its IT infrastructure, the management of its partnerships, and the retention of its personnel.
Best Buy’s most substantial expense relates to the cost of goods sold, which amounted to $30.33 billion in the year ended 30th January 2016. The Company also accrued significant selling, general, and administrative costs, which totalled $7.62 billion. The Company’s costs include the payment of salaries and benefits to its workforce of 125,000 full-time employees.
Revenue Streams
Best Buy generates revenue through the sale of various technology and electronic products through its physical retail stores and online channels, as well as the provision of technical support services. The Company’s revenue is derived from sales across the following product categories:
- Consumer Electronics, including home theatre, home automation, digital imaging, health and fitness, and portable audio products;
- Computing and Mobile Phones, including computing and peripherals, networking, tablets, mobile phones, wearables, and e-readers;
- Entertainment, including gaming hardware and software, movies, music, and other software;
- Appliances, including large appliances such as refrigerators, dishwashers, and ovens, and small appliances such as, coffee makers and blenders;
- Services, including consultation, design, delivery, installation, set-up, protection plans, repair, technical support and educational classes; and
- Other, including snacks, beverages and other sundry items. In the year ended 30th January 2016 Best Buy generated annual revenue of $39.53 billion, down slightly on the $40.34 billion recorded by the Company the previous year. The largest portion of the Company’s sales related to its computing and mobile phone products, which accounted for 46% of revenue for the year. This was followed by the sales of consumer electronics which accounted for 32% of revenue.


|
SpriteEditor
|
This is the Sprite Editor part of our project. This tool load frames from image files and make them into a Sprite.
Currently this tool is not integrated with our game, but it can be useful to game development or game engin development.
git repo: https://github.com/Spring21BuildingGameEngines/platformer-clxz-team
Go to your favorite location (file system, not the best coffee shop or steak house in town) and run
git clone xxx (This will probably update this as this should be an open repo)
The problem is this project is developed as a course project of Northeastern University's CS5850, so the repo might not be public yet. Anyone interested can reach out to the author and I'll see what I can do
Now you have the code, impressive! If you are using windows, then I'm 100% sure that this would work. Although not that sure if your OS is MacOS or Linux
Go into platformer-clxz-team/SpriteEditor directory
Build the project by run python script
python build_sprite_editor.py
After the build, you should have a SpriteEditor.exe(or SpriteEditor if MacOS and Linux) lying in the bin folder
Go into the bin folder, double click the SpriteEditor and start building your sprite!
Now you opened the tool, try put in the image file path in the first input box, then specify the width and height of each frame, then input how many frames you want for the sprite.
Then click the load button. If nothing goes wrong, you should see each arbitrary frames being rendered, along with the animated sprite.
Pay attention! If your sprite has over 40 frames, only 40 frames will be showed due to size limit of the window.
After you loaded the sprite from .bmp or .png, you might want to save the current sprite for furthur use. As long as there is a sprite loaded, you can save your sprite to local file.
Just input your designated file path in the last input box, then click the save button.
All files saved by the tool have to have .sed as their suffix. That's the way this tool recognizing the config files.
Instead of putting in all those parameters, if you want to load the sprite from the file that you saved before, just put the .sed file path in the first input box.
After that, do not put in any other parameter, and click load.


Made for FreeCodeCamp's URL Shortener Microservice challenge.
https://hj-url-shortener.herokuapp.com/new/https://google.com/ { originalUrl: https://google.com/, shortUrl: https://hj-url-shortener.herokuapp.com/1 }
Github


To have the debugger work with sourcemaps emitted by the gulp-typescript, we need to use a browser (it doesn't work in VSCode).
Set the TypeScript compiler --module "AMD"


Word Converter!
Want to know the score to a scrabble word? Enter one here and I will calculate it for you!
Click here to submit!
Your Score:


{!extends base.html !} {!block title!}{%set page 'index'%}Jangod, a java template engine{!endblock!} {!block content!}
Jangod is a template engine, a Java-based template language inspired by Django template syntax. So we just simply pulled the character 'D' to end, named "Jangod", to highlight Java characteristic. It's used to generate any text output according to the templates and their reference objects, although at first used for web development especially in MVC (Model View Controller) pattern to generate html page. Benefit from the separation of data and presentation, how to obtain the data is arbitrary, can use cache or lazy-load whatever, let programmers work on what they are good at.
The most powerful feature of Jangod is template inheritance with sub-blocks, only override some blocks to achieve the purpose of reuse tehmplate. Syntax is very simple, ensure that everyone can get started quickly. Jangod is highly customizable, developers can import their tags, filters or macros to enhance the template function. Also, it's an efficient engine while rendering, it can cache templates' parse or even pre-compiled to Java classes to spleed up processing.
{\% extends "base.html" %} {\% block content %}
 {\% if posts %} {\% for post in posts %}

 {\{post.title}}

{\{post.preview}}

{\{post.date|date:"HH:mm yyyy-MM-dd"}}

 {\% endfor %}
 {\% if pager.prev %}
 « Prev
 {\% endif %} {\% if pager.next %}
 Next »
 {\% endif %}
 {\% else %}
Not Found

Sorry, but you are looking for something that isn't here.
 {\% endif %}
 {\% include "sidebar1.html" %} {\% include "sidebar2.html" %} {\% endblock %}
Jangod is free, under Apache License 2.0, and is open-source too. Enjoy it.
{!endblock!}


Components
Attachment
Displays a link to download an attachment and metadata about the file.
GOV.UK component guide
Examples
Example 1
{{ appAttachment({
heading: {
text: 'Attachment one: guidance note'
},
href: 'https://assets.publishing.service.gov.uk/uploads/file/123456/attachment-one.pdf',
metadata: {
filename: 'attachment-one.pdf',
fileSize: 123456,
contentType: 'application/pdf',
pageCount: 10,
thumbnail: 'document'
}
}) }}
Example 2
{{ appAttachment({
heading: {
text: 'Attachment two: guidance note'
},
href: 'https://assets.publishing.service.gov.uk/uploads/file/123456/attachment-two.csv',
metadata: {
filename: 'attachment-two.csv',
fileSize: 23456789,
contentType: 'text/csv',
thumbnail: 'spreadsheet'
}
}) }}
Example 3
{{ appAttachment({
heading: {
text: 'Attachment three: guidance note'
},
href: 'https://assets.publishing.service.gov.uk/uploads/file/123456/attachment-three.ods',
metadata: {
filename: 'attachment-three.ods',
fileSize: 34567890,
contentType: 'application/vnd.oasis.opendocument.spreadsheet',
thumbnail: 'spreadsheet',
isOpenDocument: true
}
}) }}
Example 4
{{ appAttachment({
heading: {
text: 'Attachment four: guidance note'
},
href: 'https://assets.publishing.service.gov.uk/uploads/file/123456/attachment-four.txt',
metadata: {
filename: 'attachment-four.txt',
fileSize: 2148,
contentType: 'text/plain'
}
}) }}
Example 5
{{ appAttachment({
heading: {
text: 'Attachment five: guidance note'
},
href: 'https://assets.publishing.service.gov.uk/uploads/file/123456/attachment-five.pdf',
metadata: {
filename: 'attachment-five.pdf',
fileSize: 1234560,
contentType: 'application/pdf',
pageCount: 123,
thumbnail: 'document',
alternativeFormatContactEmail<EMAIL_ADDRESS>}
}) }}


Click the button to change the background color of this div.
Click me!
Click the button to change the background color of this div.
Click me!


Working on a client project at HSBC bank’s headquarters in Hong Kong, I was tasked to lead the discovery and MVP designs of the developer experience (DX) for a new payment API.
At the time, HSBC already had an existing QR-based consumer payment mobile app, PayMe, with 1.5+ million users and identified an opportunity to expand their solution to businesses via a payment API offering.
I worked with HSBC's product and design teams to lead the design process from discovery research, prototyping to the development of an early stage concept for PayMe's developer API portal.
For my final deliverable, I coded the API portal on Microsoft Azure and collaborated closely with developers and technical writers to insert the relevant content and codes.
(Please note that the details showcased have been edited to maintain confidentiality.)
An easy to follow, easy to integrate and self-explanatory API. Developers want to know what to expect - required inputs, the format and expected outcome.
Developers often look for for example use cases that highlight not just the happy paths, but also the unhappy paths. What are the possible error scenarios and how can developers troubleshoot them?
Developers will reach out when they need help, typically through the API provider's support or StackOverflow, one of the largest forum-based developer online community.
Almost all of the developers referred to Stripe as the golden standard for great API experiences.
Stripe isn't just an API product. It's a developer experience - the API's ease of use, the principle of'Developers First', and a sense of community.
Learning about the Stripe story helped me rethink the DX and pinpoint the focus area.
The face of a good API is good documentation.
Leading payment APIs such as Stripe and PayPal all follow a similar structure - from onboarding, setup, examples, error scenarios, support to resources. This is fairly in line with the developer’s expected journey.
Leveraging this mental model, this is what I arrived at:
Starting from the top, the API would cover what to expect, how to set up and some core concepts specific to the API.
The documentation goes on to highlight example use cases and suggested design guidelines. Finally, there will be a support section covering error scenarios and support options such as FAQ and feedback submission.
Developers experience APIs through a portal, which contains the documentation structured from the Information Architecture.
Looking at some of the key components, developers look for design guidelines on the payment UI and front-end.
Recalling the design principle “easy to integrate”, great APIs typically would make their components ‘copy-and-pastable' like PayPal's.
Depending on the merchant site's UI, they may opt for button containers.
Alternatively, they may use radio buttons.
Payments are multi-device experiences. Including best practices will help guide developers when designing for desktop, mobile web and mobile app contexts.
In some mobile app payment experiences, the customer will need to be redirected to another app. As users are being redirected, it will be helpful to let them know that and their expected next steps.
With a fully functioning MVP, HSBC was able to quickly launch this payment API into beta and acquire target ecommerce businesses. The success metrics will be based on the number of ecommerce businesses acquired and ultimately the adoption rates of consumers paying with PayMe.
Once businesses add PayMe as a new payment method, it will bring convenience to the 1.5+ million customers using PayMe.
My biggest learning was contributing to a larger design system and adapting it to a component library for API consumption. Through close collaboration with both the design and dev teams, we were able to evolve the design system and establish a single source of truth for both merchant (B2B) and customer (B2C) experiences.
As I was whiteboarding these solutions, I started to wonder about the future of API experiences.
As a developer, their current experience involves flipping through different screens, devices and operating systems to build and test APIs. Can the future of API consumption be made more convenient through voice commands instead? How might we promote inclusive design in the world of development?
Check out more portfolio stories:


Before Change
worker, _, client = request[:3]
if client == b"READY":
poller.register(self.frontend, zmq.POLLIN)
logger.info("registered!")
continue
// parsing data size
md = jsonapi.loads(request[-1])
After Change
request = self.backend.recv_multipart()
worker, _, client = request[:3]
free_a_worker(worker)
if client != b"READY" and len(request) > 3:
_, reply = request[3:]
X = np.frombuffer(memoryview(reply), dtype=md["dtype"])
finish_jobs[client].append(X.reshape(md["shape"]))


My name is Eli Roberts. I was born in Fargo, North Dakota, but grew up mainly in Albuquerque. At age 23.5 I returned to Fargo to pursue a career in law enforcement.
My interests include mostly indoor activities. I love scrapbooking, reality television (esp. Jersey Shore), and as duty calls, serving justice to my community.
I also enjoy watching sports, mainly soccer, basketball and football. My favorite teams are Barcelona, New York Knicks, and the New Orleans Saints. I'm also a devout U.S. Quidditch fan! This sport is unfortunately largely underappreciated!
I also like beer... especially Angry Orchard. Stay thirsty!


0
Si vous voyez ce message, veuillez mettre a jour votre navigateur ou utiliser un autre.
Type the word you want to draw and press enter
Create or join a game room
You can share it with your friends by copying the URL.
If you are alone today, you can try to join the "global" room, maybe other players will be there
OK
RESET


W02 Task2
Vector v :=
x:
y:
z:
the min value of components of v is:
the mid value of components of v is:
the max value of components of v is:
GitHub repository
index


The IPSAS-20 "Related Party Disclosures" standard requires the disclosure of specific financial information on related parties.
The standard defines various entities and individuals as related parties and sets out the disclosures required in respect of those parties, including the compensation of key management personnel.
This information has been disclosed in the WFP Financial Statements since IPSAS adoption at WFP and is now being requested for the 2016 Financial Statements.
Related parties can include key management personnel and close family members.
Key management personnel
Key management personnel are defined under IPSAS as those officials who are responsible for the planning, directing and controlling activities of the entity. WFP includes the Executive director, the Deputy executive director and Assistance executive directors into the key management personnel group and includes all Regional directors and Divisional directors in HQ into the other senior management personnel group.
Close family members
Close family members of key management personnel and other senior management personnel include spouse, domestic partner, child and other relatives of the individual or members of the individual’s immediate family. Information regarding close family members who are employed by WFP is included in the disclosure.
As per the regular year-end accounts closure process, you are requested to confirm your 2016 monetary compensation, including your close family member(s).
The information you provide will be treated on a strictly confidential basis and it will be disclosed on an aggregated level as part of the Notes to WFP 2016 Financial Statements.
The deadline to complete this exercise is by 3 February 2017.


This Java library implements Zhang's camera calibration algorithm.
Reference: Z. Zhang, "A flexible new technique for camera calibration", IEEE Transactions on Pattern Analysis and Machine Intelligence, 22(11), pp. 1330-1334 (2000).
Note that this implementation performs the geometric part of camera calculation but does not provide interest point detection and point correspondence calculations. See this extensive report for details.
Author: Wilhelm Burger
Dependencies: Requires ImageJ, the ImagingBook Common library and Apache Commons Math.
Installation:
Copyright and license terms: Permission to use and distribute this software is granted under the BSD 2-Clause "Simplified" License (see http://opensource.org/licenses/BSD-2-Clause). Copyright © 2016 Wilhelm Burger. All rights reserved.


As a lightweight container, Spring is often considered an EJB replacement. We do believe that for many if not most applications and use cases, Spring as a container, combined with its rich supporting functionality in the area of transactions, ORM and JDBC access, is a better choice than implementing equivalent functionality via an EJB container and EJBs.
However, it is important to note that using Spring does not prevent you from using EJBs. In fact, Spring makes it much easier to access EJBs and implement EJBs and functionality within them. Additionally, using Spring to access services provided by EJBs allows the implementation of those services to later transparently be switched between local EJB, remote EJB, or POJO (plain old Java object) variants, without the client code having to be changed.
In this chapter, we look at how Spring can help you access and implement EJBs. Spring provides particular value when accessing stateless session beans (SLSBs), so we'll begin by discussing this.
To invoke a method on a local or remote stateless session bean, client code must normally perform a JNDI lookup to obtain the (local or remote) EJB Home object, then use a 'create' method call on that object to obtain the actual (local or remote) EJB object. One or more methods are then invoked on the EJB.
To avoid repeated low-level code, many EJB applications use the Service Locator and Business Delegate patterns. These are better than spraying JNDI lookups throughout client code, but their usual implementations have significant disadvantages. For example:
Typically code using EJBs depends on Service Locator or Business Delegate singletons, making it hard to test.
In the case of the Service Locator pattern used without a Business Delegate, application code still ends up having to invoke the create() method on an EJB home, and deal with the resulting exceptions. Thus it remains tied to the EJB API and the complexity of the EJB programming model.
Implementing the Business Delegate pattern typically results in significant code duplication, where we have to write numerous methods that simply call the same method on the EJB.
The Spring approach is to allow the creation and use of proxy objects, normally configured inside a Spring container, which act as codeless business delegates. You do not need to write another Service Locator, another JNDI lookup, or duplicate methods in a hand-coded Business Delegate unless you are actually adding real value in such code.
Assume that we have a web controller that needs to use a local
EJB. We’ll follow best practice and use the EJB Business Methods
Interface pattern, so that the EJB’s local interface extends a non
EJB-specific business methods interface. Let’s call this business
methods interface MyComponent
.
public interface MyComponent { ... }
One of the main reasons to use the Business Methods Interface pattern
is to ensure that synchronization between method signatures in local
interface and bean implementation class is automatic. Another reason is
that it later makes it much easier for us to switch to a POJO (plain old
Java object) implementation of the service if it makes sense to do so.
Of course we’ll also need to implement the local home interface and
provide an implementation class that implements SessionBean
and the MyComponent
business methods interface. Now the
only Java coding we’ll need to do to hook up our web tier controller to the
EJB implementation is to expose a setter method of type MyComponent
on the controller. This will save the reference as an instance variable in the
controller:
private MyComponent myComponent; public void setMyComponent(MyComponent myComponent) { this.myComponent = myComponent; }
We can subsequently use this instance variable in any business
method in the controller. Now assuming we are obtaining our controller
object out of a Spring container, we can (in the same context) configure a
LocalStatelessSessionProxyFactoryBean
instance, which
will be the EJB proxy object. The configuration of the proxy, and setting of
the myComponent
property of the controller is done
with a configuration entry such as:
<bean id="myComponent" class="org.springframework.ejb.access.LocalStatelessSessionProxyFactoryBean"> <property name="jndiName" value="ejb/myBean"/> <property name="businessInterface" value="com.mycom.MyComponent"/> </bean> <bean id="myController" class="com.mycom.myController"> <property name="myComponent" ref="myComponent"/> </bean>
There’s a lot of work happening behind the scenes, courtesy of
the Spring AOP framework, although you aren’t forced to work with AOP
concepts to enjoy the results. The myComponent
bean
definition creates a proxy for the EJB, which implements the business
method interface. The EJB local home is cached on startup, so there’s
only a single JNDI lookup. Each time the EJB is invoked, the proxy
invokes the classname
method on the local EJB and
invokes the corresponding business method on the EJB.
The myController
bean definition sets the
myComponent
property of the controller class to the
EJB proxy.
Alternatively (and preferably in case of many such proxy definitions),
consider using the <jee:local-slsb>
configuration element in Spring's "jee" namespace:
<jee:local-slsb id="myComponent" jndi-name="ejb/myBean" business-interface="com.mycom.MyComponent"/> <bean id="myController" class="com.mycom.myController"> <property name="myComponent" ref="myComponent"/> </bean>
This EJB access mechanism delivers huge simplification of
application code: the web tier code (or other EJB client code) has no
dependence on the use of EJB. If we want to replace this EJB reference
with a POJO or a mock object or other test stub, we could simply change
the myComponent
bean definition without changing a
line of Java code. Additionally, we haven’t had to write a single line of
JNDI lookup or other EJB plumbing code as part of our application.
Benchmarks and experience in real applications indicate that the performance overhead of this approach (which involves reflective invocation of the target EJB) is minimal, and is typically undetectable in typical use. Remember that we don’t want to make fine-grained calls to EJBs anyway, as there’s a cost associated with the EJB infrastructure in the application server.
There is one caveat with regards to the JNDI lookup. In a bean
container, this class is normally best used as a singleton (there simply
is no reason to make it a prototype). However, if that bean container
pre-instantiates singletons (as do the various XML
ApplicationContext
variants)
you may have a problem if the bean container is loaded before the EJB
container loads the target EJB. That is because the JNDI lookup will be
performed in the init()
method of this class and then
cached, but the EJB will not have been bound at the target location yet.
The solution is to not pre-instantiate this factory object, but allow it
to be created on first use. In the XML containers, this is controlled via
the lazy-init
attribute.
Although this will not be of interest to the majority of Spring
users, those doing programmatic AOP work with EJBs may want to look at
LocalSlsbInvokerInterceptor
.
Accessing remote EJBs is essentially identical to accessing local
EJBs, except that the
SimpleRemoteStatelessSessionProxyFactoryBean
or
<jee:remote-slsb>
configuration element is used.
Of course, with or without Spring, remote invocation semantics apply; a
call to a method on an object in another VM in another computer does
sometimes have to be treated differently in terms of usage scenarios and
failure handling.
Spring's EJB client support adds one more advantage over the
non-Spring approach. Normally it is problematic for EJB client code to
be easily switched back and forth between calling EJBs locally or
remotely. This is because the remote interface methods must declare that
they throw RemoteException
, and client code must deal
with this, while the local interface methods don't. Client code
written for local EJBs which needs to be moved to remote EJBs
typically has to be modified to add handling for the remote exceptions,
and client code written for remote EJBs which needs to be moved to local
EJBs, can either stay the same but do a lot of unnecessary handling of
remote exceptions, or needs to be modified to remove that code. With the
Spring remote EJB proxy, you can instead not declare any thrown
RemoteException
in your Business Method Interface and
implementing EJB code, have a remote interface which is identical except
that it does throw RemoteException
, and rely on the
proxy to dynamically treat the two interfaces as if they were the same.
That is, client code does not have to deal with the checked
RemoteException
class. Any actual
RemoteException
that is thrown during the EJB
invocation will be re-thrown as the non-checked
RemoteAccessException
class, which is a subclass of
RuntimeException
. The target service can then be
switched at will between a local EJB or remote EJB (or even plain Java
object) implementation, without the client code knowing or caring. Of
course, this is optional; there is nothing stopping you from declaring
RemoteExceptions
in your business interface.
Accessing EJB 2.x Session Beans and EJB 3 Session Beans via Spring
is largely transparent. Spring's EJB accessors, including the
<jee:local-slsb>
and <jee:remote-slsb>
facilities, transparently adapt to the actual component at runtime.
They handle a home interface if found (EJB 2.x style), or perform straight
component invocations if no home interface is available (EJB 3 style).
Note: For EJB 3 Session Beans, you could effectively use a
JndiObjectFactoryBean
/ <jee:jndi-lookup>
as well, since fully usable component references are exposed for plain
JNDI lookups there. Defining explicit <jee:local-slsb>
/ <jee:remote-slsb>
lookups simply provides
consistent and more explicit EJB access configuration.
Spring provides convenience classes to help you implement EJBs. These are designed to encourage the good practice of putting business logic behind EJBs in POJOs, leaving EJBs responsible for transaction demarcation and (optionally) remoting.
To implement a Stateless or Stateful session bean, or a Message Driven
bean, you need only derive your implementation class from
AbstractStatelessSessionBean
,
AbstractStatefulSessionBean
, and
AbstractMessageDrivenBean
/AbstractJmsMessageDrivenBean
,
respectively.
Consider an example Stateless Session bean which actually delegates the implementation to a plain java service object. We have the business interface:
public interface MyComponent { public void myMethod(...); ... }
We also have the plain Java implementation object:
public class MyComponentImpl implements MyComponent { public String myMethod(...) { ... } ... }
And finally the Stateless Session Bean itself:
public class MyFacadeEJB extends AbstractStatelessSessionBean implements MyFacadeLocal { private MyComponent myComp; /** * Obtain our POJO service object from the BeanFactory/ApplicationContext * @see org.springframework.ejb.support.AbstractStatelessSessionBean#onEjbCreate() */ protected void onEjbCreate() throws CreateException { myComp = (MyComponent) getBeanFactory().getBean( ServicesConstants.CONTEXT_MYCOMP_ID); } // for business method, delegate to POJO service impl. public String myFacadeMethod(...) { return myComp.myMethod(...); } ... }
The Spring EJB support base classes will by default create and load
a Spring IoC container as part of their lifecycle, which is then available
to the EJB (for example, as used in the code above to obtain the POJO
service object). The loading is done via a strategy object which is a subclass of
BeanFactoryLocator
. The actual implementation of
BeanFactoryLocator
used by default is
ContextJndiBeanFactoryLocator
, which creates the
ApplicationContext from a resource locations specified as a JNDI
environment variable (in the case of the EJB classes, at
java:comp/env/ejb/BeanFactoryPath
). If there is a need
to change the BeanFactory/ApplicationContext loading strategy, the default
BeanFactoryLocator
implementation used may be overridden
by calling the setBeanFactoryLocator()
method, either
in setSessionContext()
, or in the actual constructor of
the EJB. Please see the Javadocs for more details.
As described in the Javadocs, Stateful Session beans expecting to be
passivated and reactivated as part of their lifecycle, and which use a
non-serializable container instance (which is the normal case) will have
to manually call unloadBeanFactory()
and
loadBeanFactory
from ejbPassivate
and ejbActivate
, respectively, to unload and reload the
BeanFactory on passivation and activation, since it can not be saved by
the EJB container.
The default behavior of the ContextJndiBeanFactoryLocator
classes which is to load an ApplicationContext
for the
use of the EJB is adequate for some situations. However, it is problematic when
the ApplicationContext
is loading a number
of beans, or the initialization of those beans is time consuming or memory
intensive (such as a Hibernate SessionFactory
initialization, for
example), since every EJB will have their own copy. In this case, the user
may want to override the default ContextJndiBeanFactoryLocator
usage and use another BeanFactoryLocator
variant, such as the
ContextSingletonBeanFactoryLocator
which can load and use a
shared container to be used by multiple EJBs or other clients. Doing this is relatively
simple, by adding code similar to this to the EJB:
/** * Override default BeanFactoryLocator implementation * @see javax.ejb.SessionBean#setSessionContext(javax.ejb.SessionContext) */ public void setSessionContext(SessionContext sessionContext) { super.setSessionContext(sessionContext); setBeanFactoryLocator(ContextSingletonBeanFactoryLocator.getInstance()); setBeanFactoryLocatorKey(ServicesConstants.PRIMARY_CONTEXT_ID); }
You would then need to create a bean definition file named beanRefContext.xml
.
This file defines all bean factories (usually in the form of application contexts) that may be used
in the EJB. In many cases, this file will only contain a single bean definition such as this (where
businessApplicationContext.xml
contains the bean definitions for all business
service POJOs):
<beans> <bean id="businessBeanFactory" class="org.springframework.context.support.ClassPathXmlApplicationContext"> <constructor-arg value="businessApplicationContext.xml" /> </bean> </beans>
In the above example, the ServicesConstants.PRIMARY_CONTEXT_ID
constant
would be defined as follows:
public static final String ServicesConstants.PRIMARY_CONTEXT_ID = "businessBeanFactory";
Please see the respective Javadocs for the BeanFactoryLocator
and
ContextSingletonBeanFactoryLocator
classes for more information on
their usage.
For EJB 3 Session Beans and Message-Driven Beans, Spring provides a convenient
interceptor that resolves Spring 2.5's @Autowired
annotation
in the EJB component class:
org.springframework.ejb.interceptor.SpringBeanAutowiringInterceptor
.
This interceptor can be applied through an @Interceptors
annotation
in the EJB component class, or through an interceptor-binding
XML element in the EJB deployment descriptor.
@Stateless @Interceptors(SpringBeanAutowiringInterceptor.class) public class MyFacadeEJB implements MyFacadeLocal { // automatically injected with a matching Spring bean @Autowired private MyComponent myComp; // for business method, delegate to POJO service impl. public String myFacadeMethod(...) { return myComp.myMethod(...); } ... }
SpringBeanAutowiringInterceptor
by default obtains target
beans from a ContextSingletonBeanFactoryLocator
, with the
context defined in a bean definition file named beanRefContext.xml
.
By default, a single context definition is expected, which is obtained by type rather
than by name. However, if you need to choose between multiple context definitions,
a specific locator key is required. The locator key (i.e. the name of the context
definition in beanRefContext.xml
) can be explicitly specified
either through overriding the getBeanFactoryLocatorKey
method
in a custom SpringBeanAutowiringInterceptor
subclass.
Alternatively, consider overriding SpringBeanAutowiringInterceptor
's
getBeanFactory
method, e.g. obtaining a shared
ApplicationContext
from a custom holder class.