Arrange all files in the following directory structure:
(META-INF
and its contents are special, but all other files can be arranged into any subdirectory structure. All references to them, in the various files, may have to be adjusted though.)
Then zip them into an archive with Zip. The filename extension should be ‘epub’, and the mimetype
file must be first (and uncompressed), and extra file attributes must be excluded:
(Get Zip from: ftp://ftp.info-zip.org/pub/infozip/ or http://www.info-zip.org/Zip.html .)
Other zip programs can probably be used, if they can do the same things.
(The Sony Reader, and perhaps others, have an extra requirement: each HTML file must be < 300KB and < 100KB when zipped.)


It's story time soon. Why don't you tell Mr. roboRogers any number from 0 to 100, and they will tell you a story about that number!


I'm a Mechatronic Engineer (2001) and Master in Aeronautical Engineer (2004). I have worked on aeronautical industry since 2003 as "System Integration Test Engineer". Nowadays, I have worked with system integration tests on RIG with main focus on engine and its controller (FADEC). I'm very experienced on software test on simulated environment with real controllers/components (HIL) to validate and to verify how the system and its interfaces would behave in normal, failed and out of envelope conditions. These activities demmand wide knowlodge on "ARP4754" and "System Engineer" directrices.
This field of work makes me present on the aircraft entire lifecycle, from initial definition, Type Certification, entry-into-service and fleet support.
My intention is to have a place to store and share my developments and knowledge.
I have scripted for a long time and I've tryed different languages but I'm confident using Python (2.7 and 3) that I've used on my daily work (creating scripts for test automation and test analysis) and my personal stuffs since 2008.
During the quarentine, forced by COVID-19 (a few months on 2020), I decided to improve my Python skills besides of adding the Java and the set HTML5/CSS3 to my portfolio.


To apply the basic styles to your input simply add hmInput
to your input-element.
This directive adds all you need to start developing your forms with input-elements.
There is also a possibility to make your input readonly by just adding the readonly
attribute to your element
There are three different sizes you can apply to your input-element.
You can apply a size by filling out the Input of the hmInput
Directive called sizing
.
When you want the normal size then simple leave out the Input because the default is normal.
Disabling your input is super easy just add disabled
to your input and it should be disabled.
The validation is acomplished inside of the hmInput
Directive.
As you might know in Angular there are two different ways of building your forms.
The first and more easy to use one is Template-Driven Forms where you define your form inside of the template.
You can try the validation by adding a required
to your input-element than focus in and out of your input.
There should now be a red-border around your input.
The second is Reactive-Forms where you define your form in your typescript code in a more declarative way.
You can try the validation by adding a create a FormControl
and adding Validators.required
to your control than focus in and out of your input.
There should now be a red-border around your input.


  We have the best C.A.K.E And A Prayer Rebate anywhere. thesis_keywords: C.A.K.E And A Prayer, C.A.K.E And A Prayer Coupon Code, C.A.K.E And A Prayer Discount, C.A.K.E And A Prayer Rebate product_name: C.A.K.E And A Prayer hop_url: http://www.icouponblog.com/hop.php?id=1330 ---
Do you need a product to show how much you care for a loved one who may be sick, or suffering from a life change event? Do you need to show that person you are praying for them and that they are not forgotten, but much loved, cherished and remembered in their hour of gloom and need? C.A.K.E And A Prayer is a product that allows you to do that. C.A.K.E is an acronym for Compassion, Appreciation, Kindness, and Encouragement. So you can send a gift of C.A.K.E And A Prayer which will let the recipient know that they are in your thoughts and prayers. It will boost their spirits. Check out C.A.K.E And A Prayer and use our discount coupon to get a great deal.
C.A.K.E And A Prayer makes a perfect, thoughtful present. You will never send flowers again. You can choose from an array of products. You can send confectionary products, appreciation or compassion candles. You can also send framed inspirations, poems, lines from the scripture, gift prayer message cards, C.A.K.E apparel, T-shirts and so much more. Your recipient will feel loved and encouraged and appreciated. It is a unique and personalized gift which will lift the spirits of the recipient. You can create a combination of gifts and send it to a loved one.
Check out C.A.K.E And A Prayer and you will love the personalized message of kindness, strength and encouragement. Flowers die, balloons deflate but C.A.K.E And A Prayer will be the best keepsake. It will mean so much more. Check it out now.


Here we're using Grunt to generate a list of image sizes for us.
We then pass those sizes into Imager.


Ruby Cheat Sheet!!
Ruby Enumerables
Enumerable is possible in Ruby due to the notion of “mixins.” In most languages, code sharing is only possible through inheritance, and inheritance is generally limited to one parent class. In addition to classes, Ruby has modules which are containers for methods and constants. If you want to write code once and share it between a bunch of unrelated classes, you can put it in modules to be “mixed in” with your classes.
Ruby Integers
This class is the basis for the two concrete classes that hold whole numbers, Bignum and Fixnum.
num = 291937429
Ruby Strings
A string is a group of characters that typically make up human readable words or sentences. Because strings are essentially the mechanism by which applications communicate with their users it is inevitable that string manipulation is a key part of programming.
string = "hello"
Ruby Array
Ordered, Zero Indexed - Integer-Indexed, collections, of any object
a = []
a = Array.new
a = Array.new(5)
a[3] => fourth element in array
Ruby Hash
A Hash is a collection of key-value pairs like this: "employee" => "salary". It is similar to an Array, except that indexing is done via arbitrary keys of any object type, not an integer index. As with arrays, there is a variety of ways to create hashes. You can create an empty hash with the new class method:
months = Hash.new
You can also use new to create a hash with a default value, which is otherwise just nil:
months = Hash.new( "month" )
or
months = Hash.new "month"


helper functions for converting data types for HMM models More...
#include <hmm.h>
Functions | |
| std::vector< double > | array2vec (double ary[], int len) |
| converts C array (of doubles) to std::vector of doubles More... | |
| std::vector< int > | array2vec (int ary[], int len) |
| converts C array (of ints) to std::vector of ints More... | |
| void | vec2array (std::vector< double > vIn, double *ary) |
| converts std::vector of doubles to array using std::copy More... | |
| void | modDub (double *pDub) |
| modifies the value at a pointer location, for debuggin More... | |
| void | modDubVec (double *pDub, int lenDub) |
| modifies the values across vector at a pointer location, for debuggin More... | |
helper functions for converting data types for HMM models
helper functions for converting data types for HMM models
| std::vector<double> array2vec | ( | double | ary[], |
| int | len | ||
| ) |
converts C array (of doubles) to std::vector of doubles
| ary | C array in |
| len | length of vector |
| std::vector<int> array2vec | ( | int | ary[], |
| int | len | ||
| ) |
converts C array (of ints) to std::vector of ints
| ary | C array in |
| len | ength of vector |
| void modDub | ( | double * | pDub | ) |
modifies the value at a pointer location, for debuggin
| pDub | pointer to double |
| void modDubVec | ( | double * | pDub, |
| int | lenDub | ||
| ) |
modifies the values across vector at a pointer location, for debuggin
| pDub | pointer to start of vector of doubles |
| lenDub | length of vector of doubles |
| void vec2array | ( | std::vector< double > | vIn, |
| double * | ary | ||
| ) |
converts std::vector of doubles to array using std::copy
| vIn | std::vector in |
| ary | pointer to location where array should be copied |


Export all data from the API Management into an output file or use such a file to import data into
this installation.
It is important that no changes are made in the API Manager during an import/export process. Disabling user access to the API Manager while this process is ongoing is strongly recommended.
Export Data
Once the export has started, your browser should prompt you to download the exported data file. If the export is completed, you will have to refresh this page before starting another export.
Import Data
Uploading file, please wait...
{{ uploadPercentage }}%
Importing data, please wait - this may take some time...
Import failed. Please check the response below for error messages:
Data import completed. Please check the response below for details:


Jurgen Klopp sends message to Liverpool stars ahead of "heavyweight world title fight"
The Reds face Genk in the Champions League on Tuesday night, and the Liverpool boss have been preaching against complacency
by Mark Jones, https://www.mirror.co.uk/authors/mark-jones/Jurgen Klopp says his Liverpool players can't afford to be complacent against Genk because every Champions League game is a "heavyweight world title fight" to the finish.
The European champions beat Tuesday night's opponents 4-1 in Belgium a fortnight ago, and welcome them to Anfield seeking a third straight European victory as they look to defend their crown.
While it may be tempting for his players to shift their focus to Sunday's titanic Premier League clash with Manchester City , Klopp is warning that any lack of focus could lead to them facing a winner-takes-all final group stage match, just as they did last season.
The Reds very nearly didn't even make the knockout stages as they relied on a late Alisson Becker save against Napoli to secure qualification, and Klopp is hoping that they've learned from their near miss.
“There is work for us to do tonight and we cannot and must not have our focus anywhere but here. We must be in the moment," Klopp wrote in his matchday programme notes for the Genk clash.
“We saw just how tight the group was last season. The very last kick of the very last group game could have put us out.
"If you for even half-a-second lose sight of how hard this competition is and how precious each and every point is, trust me, we will not have the experiences like we enjoyed the last couple of seasons.
“A Champions League game, be it group or knockout, is a heavyweight world title fight every time.  These teams don’t just have a puncher’s chance, they are winners with a winner’s approach.
“If you have the wrong attitude or the wrong mindset you will lose. There is no question of this."
The Anfield clash kicks off at 8pm GMT.


Company
Add/Edit employee
Name:
Surname:
Date of birth:
Department
HUMAN RESOURCE
INFORMATION AND TECHNOLOGY SUPPORT
RESEARCH AND DEVELOPMENT
Salary:


--- title: "3.10 Practice Datasets" lastmod: 2019-05-24T00:00:00 draft: false type: docs maths: true output: blogdown::html_page: toc: false linktitle: "3.10 SPSS: Practice Datasets" menu: docs: parent: SOC224 weight: 395 ---
Pornography Dataset
Dataset
Codebook
Singapore Sex Dataset
Dataset
Codebook
Cheating Dataset
Dataset
Codebook
Territorial Change Dataset
Dataset
Codebook
Australian Electoral Study 2013 - Reduced
Dataset - Excel
Dataset - SPSS Data file
Codebook
The full original data can be found by following the links below to:
This is an article based on analysis of the AES 2013 data:
Ian McAllister (2016) Internet use, political knowledge and youth electoral
participation in Australia, Journal of Youth Studies, 19:9, 1220-1236,
DOI: 10.1080/13676261.2016.1154936


| Modifier and Type | Constant Field | Value |
|---|---|---|
public static final int |
DEF_PATTERN_LENGTH
|
3 |
public static final float |
KEY_BOARD_BOTTOM_WEIGHT
|
0.14000000059604645f |
public static final float |
KEY_BOARD_TOP_WEIGHT
|
0.20000000298023224f |
public static final int |
NO_OF_KEY_BOARD_COLUMNS
|
3 |
public static final int |
NO_OF_KEY_BOARD_ROWS
|
4 |
| Modifier and Type | Constant Field | Value |
|---|---|---|
public static final int |
DYNAMIC_PIN_LENGTH
|
0 |
| Modifier and Type | Constant Field | Value |
|---|---|---|
private static final long |
ERROR_ANIMATION_DURATION
|
400L |
| Modifier and Type | Constant Field | Value |
|---|---|---|
private static final long |
ERROR_ANIMATION_DURATION
|
400L |
| Modifier and Type | Constant Field | Value |
|---|---|---|
private static final long |
ANIMATION_DURATION
|
1000L |
private static final String |
DEF_FINGERPRINT_STATUS
|
"Scan your finger to authenticate" |
| Modifier and Type | Constant Field | Value |
|---|---|---|
private static final String |
DEF_TITLE_TEXT
|
"Enter pattern" |
| Modifier and Type | Constant Field | Value |
|---|---|---|
private static final String |
DEF_TITLE_TEXT
|
"Enter PIN" |
private static final long |
ERROR_ANIMATION_DURATION
|
400L |
| Modifier and Type | Constant Field | Value |
|---|---|---|
static final int |
CANNOT_RECOGNIZE_ERROR
|
456 |
private static final String |
ERROR_FAILED_TO_GENERATE_KEY
|
"Failed to generate secrete key for
authentication." |
private static final String |
ERROR_FAILED_TO_INIT_CHIPPER
|
"Failed to generate cipher key for
authentication." |
static final int |
NON_RECOVERABLE_ERROR
|
566 |
static final int |
RECOVERABLE_ERROR
|
843 |
| Modifier and Type | Constant Field | Value |
|---|---|---|
public static final String |
BACKSPACE_TITLE
|
"-1" |
| Modifier and Type | Constant Field | Value |
|---|---|---|
private static final long |
ANIMATION_DURATION
|
200L |
| Modifier and Type | Constant Field | Value |
|---|---|---|
private static final int |
MAX_RIPPLE_ALPHA
|
100 |
private static final int |
RIPPLE_DURATION
|
350 |
| Modifier and Type | Constant Field | Value |
|---|---|---|
private static final long |
ANIMATION_DURATION
|
200L |
| Modifier and Type | Constant Field | Value |
|---|---|---|
private static final String |
ARG_CURRENT_PIN
|
"current_pin" |


Library: Algorithms
Function
An algorithm that finds a subsequence within a sequence of values
#include <algorithm> namespace std { template <class ForwardIterator1, class ForwardIterator2> ForwardIterator1 search(ForwardIterator1 start1, ForwardIterator1 finish1, ForwardIterator2 start2, ForwardIterator2 finish2); template <class ForwardIterator1, class ForwardIterator2, class BinaryPredicate> ForwardIterator1 search(ForwardIterator1 start1, ForwardIterator1 finish1, ForwardIterator2 start2, ForwardIterator2 finish2, BinaryPredicate binary_pred); template <class ForwardIterator, class Size, class T> ForwardIterator search_n(ForwardIterator start, ForwardIterator finish, Size count, const T& value); template <class ForwardIterator, class Size, class T, class BinaryPredicate> ForwardIterator search_n(ForwardIterator start ForwardIterator finish, Size count, const T& value, BinaryPredicate pred) }
The search() and search_n() algorithms search for a subsequence within a sequence. The search() algorithm searches for a subsequence [start2, finish2) within a sequence [start1, finish1), and returns the beginning location of the subsequence. If it does not find the subsequence, search() returns finish1. The first version of search() uses operator==() as a default, and the second version allows you to specify a binary predicate to perform the comparison.
The search_n() algorithm searches for the subsequence composed of count occurrences of value within a sequence [start, finish), and returns start if this subsequence is found. If it does not find the subsequence, search_n() returns finish. The first version of search_n() uses operator==() as a default, and the second version allows you to specify a binary predicate to perform the comparison.
search() performs at most (finish1 - start1)*(finish2-start2) applications of the corresponding predicate.
search_n() performs at most (finish - start)* count applications of the corresponding predicate.
// // search.cpp // #include <algorithm> #include <list> #include <iostream> int main () { #ifndef _RWSTD_NO_NAMESPACE using namespace std; #endif // Initialize a list sequence and subsequence with // characters. char seq[40] = "Here's a string with a substring in it"; char subseq[10] = "substring"; list<char,allocator<char> > sequence(seq, seq+38); list<char,allocator<char> > subseqnc(subseq, subseq+9); // Print out the original sequence. cout << endl << "The subsequence, " << subseq << ", was found at the "; cout << endl << "location identified by a '*'" << endl << " "; // Create an iterator to identify the location of // subsequence within sequence. list<char,allocator<char> >::iterator place; // Do search. place = search(sequence.begin(), sequence.end(), subseqnc.begin(), subseqnc.end()); // Identify result by marking first character with a '*'. *place = '*'; // Output sequence to display result. for (list<char,allocator<char> >::iterator i = sequence.begin(); i != sequence.end(); i++) cout << *i; cout << endl; return 0; } Program Output:
The subsequence, substring, was found at the location identified by a '*' Here's a string with a *ubstring in it
ISO/IEC 14882:1998 -- International Standard for Information Systems -- Programming Language C++, Section 25.1.9


{% extends "new_base.html" %} {% block title %}Import interactions{% endblock %} {% block panel %}
Failed to load a corpus: uploaded json is not valid!


Next:
Iteration Dictionary
, Previous:
Iteration
, Up:
Iteration
6.1 The LOOP Facility
•
Overview of the Loop Facility
:
•
Variable Initialization and Stepping Clauses
:
•
Value Accumulation Clauses
:
•
Termination Test Clauses
:
•
Unconditional Execution Clauses
:
•
Conditional Execution Clauses
:
•
Miscellaneous Clauses
:
•
Examples of Miscellaneous Loop Features
:
•
Notes about Loop
:


{% extends "base.html" %} {% block activepage_values %} class="active"{% endblock %} {% block title %}SoCraTes 2014 - Our Values{% endblock %} {% block content %}
A primary goal of SoCraTes conference is to be inclusive to the largest number of contributors, with the most varied and diverse backgrounds possible. As such, we are committed to providing a friendly, safe and welcoming environment for all, regardless of gender, sexual orientation, programming language, ability, ethnicity, socioeconomic status, and religion (or lack thereof).
And so we invite all those who participate in the SoCraTes conference and the community surrounding the conference to help us create safe and positive experiences for everyone.
This code of conduct applies to the SoCraTes conference itself and to all digital spaces that are related to the SoCraTes conference, such as the wiki and mailing list.
Contact us at<EMAIL_ADDRESS>with any questions or concerns you might have.
This Code of Conduct is heavily based on the following works.
{% endblock %}


Bug ID :{{message.bug_id}}
Message : {{message.message}}
Summary
Description
Execution Steps
Reported By
Assigned To
Module Id
Comments
Attachment Id


Foróige Email accounts and Staff Portal
Over the coming days you will receive an email that will have the details of your new foroige.ie email account- this username and password also grants you access to our intranet, the Staff Portal. (The staff portal is our primary location for all policies, procedures and news about the organisation- make sure to visit it at least once a day, and use the search to find the answers to questions you may have).
Once you have the Staff Portal open, you'll see shortcuts in the middle of the main page to your email, calendars and docs- we will be providing training in docs at a later stage, but you can start using your email and calendar immediately.
You may access your email and the staff portal from any computer with an Internet connection using these login details; just remember the staff.foroige.ie address!
Google Chrome
Download and install Google Chrome: it's the fastest and most secure Internet browser, and the best way to access your email, the staff portal and the Internet generally.
Agresso
Agresso is the business support software used by Foróige. It records personnel information and accounting records of the organisation. Within Agresso you will be required to raise purchase requisitions, work diaries and expense claims, your direct line supervisor will provide you with all the necessary training.
New Computers
If you are to receive a new computer, we will contact you and let you know when it is ready to collect. It will be pre-installed with all the software you will need, including Microsoft Office (Word, Excel, Powerpoint, etc.) and antivirus and encryption software (encryption is only needed on laptops).
Any further questions or in need of assistance contact us by email: foroige@support.ie


Git: An Introduction to Git
January 1st, 2016
- What are the benefits of version control?
- How does git help you keep track of changes?
- Why use GitHub to store your code?
What are the benefits of version control?
Version control doesnt allow you to do things that you couldnt do without it. It merely allows you do those things easier. Every developer makes mistakes and has wanted to revert back to an older version of their code. Version control makes this easier than maually copying all the files and directories into new directories each time yu want to make a checkpoint. Instead, all you have to do is issue 1 or 2 commands and the checkpoint, or snapshot, just happens. Easy. To revert back, again, just 1 or 2 commands and you're back in business. The same goes for maintaining multiple versions of your code. You want a productino version, a testing version, and a development version. Just a few commands and the hard work is done for yu. This is also very similar to having a version for experimenting with new features that you dont want to interfere with the regular development cycle. A simple 'git checkout -b {{branch_name}}' and you get a whole new workspace to play around with. What about trying to track down a bug? with version control you can easily compare two versinos of code, see the differences, ad identify which changes must have caused the undesired behavior. 'git diff {{version_1}} {{version_2}}'. If you wanted to submit changes to the codebase, and yo want to make sure that the changes you make, arent also conflicting with the changes that others are making, (did i mention version control makes it easy to have undreds of developers working on the same project simultaneously? well, it does!), then merge the changes and let the version control tell you if there are any conflicts and courteously point them out to you. These are just some of the many benefits of us9ng version contorl. Read the docs, tutorials, and just experiment and Im sure youll h=find a whole lot more as well.
How does git help you keep track of changes?
Git is an open source version control system developed by Linus Torvalds. Some version control systems only record the changes made by each 'checkpoint'. This allows all the changes to be recorded and not take up very much space. Git on the other hand, takes 'snapshopts' of the entire codebase and records the entirety of each document that was altered. Each snapshot is linked to the previous snapshot (and sometimes multiple snapshots) creating a clear timeline and indicating where exactly all the code changes came from. You can easily search for metadata associated with each change such as which developer amde the change, when the change was made, what changes were made before that.
Why use Github to store code?
GitHib is a website that stores all your code, and changes and provides a browser based graphical user inteface. This service allows your code to be readable from anywhere in the whorld at all times. It allows any developer in the world to contribute to your project, if you so choose to let them. It allows you to explore all the changes to your code. It offers oher developer centered services like issue tracking and a wiki.


Event Detail
Home
Event Detail
Event Sechudule:
Event Discription
Tags:
charity
/ donation
/ needy
Share:
Delete
Update


For Maxine’s final MOSTEC (MIT Online Science Technology Engineering Community) project, she decided to tackle a project facing many cyclists. While cycling in a busy urban environment, it is difficult to be aware of upcoming obstacles and rear approaching cars simultaneously. The car detecting cycling device provides an audio and visual alert when a car is approaching.
An ultrasonic sensor, see figure 1, constantly runs to detect an obstruction within 12 feet. If the obstruction is between 12 and 6 feet the audio alert “car approaching” is amplified through the speaker and the white LED is illuminated. Once the obstruction reach 6 feet or less from the rear of the bike, “car back” is amplified and the red LED is illuminated. The audio alerts were recordings of Maxine’s voice because python’s eSpeak proved hard to understand. The reason for the two levels of alert is to prepare the cyclist. Once a car begins approaching the cyclist it may turn away or continue to pass. Either way, the cyclist can prepare to proceed with caution.
With the help of Maxine’s MIT EECS (electrical engineering,computer science) summer course, she assembled the device with Raspberry Pi GPIO pins and python programming. Other electrical components of the project: moxbotic ultrasonic sensor, analog to digital chip, audio amplifier, two LEDs, and speaker. The final product was a successful proof of concept and prototype.


Preparation time
less than 30 mins
Cooking time
10 to 30 mins
Serves
Serves 4
This stunning Chinese seafood and fish feast is bursting with flavour and comes with a quick pickle of goji berry and swede.
Equipment and preparation: you will need a large bamboo steamer and at least three heatproof plates that will fit and stack inside the steamer (be sure not to cover up all of the steam holes around the edges of the plates).
For the goji berry and swede pickle, in a small pan, parboil the cubes of swede. Drain and place on a plate to chill in the fridge for 10 minutes.
Place the goji berries in a heatproof bowl, pour over boiling water, leave it for one minute and then rinse and drain.
In a small bowl, toss together the chilled swede and goji berries. Before serving add all the rest of the ingredients and mix well for a quick delicious pickle to serve with the fish.
For the sea bass, prepare the fish by rinsing it under cold running water and pat dry with paper towels. Cut two slits into both sides of the fish and season with salt and white pepper.
Stuff the slits and inside the belly cavity with the sliced ginger. Place the fish on a heatproof plate (making sure that the plate and fish fit inside the bamboo steamer without covering up all of the steam holes around the edges of the plate). Set aside another bamboo steamer tray and plate to use for the clams.
Pour half of the light Chinese lager over the fish. Place the plate of fish in a bamboo steamer, stack and cover with the lid. Place the whole steamer basket over a wok that is three-quarters full with boiling water, making sure the water does not touch the base of the steamer.
Steam until the fish is cooked through and the flesh flakes when poked with a knife - about 8-10 minutes (depending on the thickness of the fish. Don’t steam it too long or the skin will separate, not look as good and will be less tender).
About four minutes into steaming, put the palourde clams on a separate heatproof plate that fits inside another bamboo steamer tray. Season with salt, ground white pepper, grated ginger, and drizzle over the remaining light Chinese lager. Steam the clams with the fish until the flesh of the fish flakes when poked and all the shells of the clams have opened.
Once the sea bass is cooked through, turn off the heat. Leave the sea bass in the steamer to stay hot.
To finish the sea bass, heat a small wok, add the peanut oil and heat to high for a minute. Take off the heat. Remove the lid of the bamboo steamer for the fish and place the spring onions and coriander cress over the top. Pour over the low-sodium light soy sauce, followed by the toasted sesame oil. Pour over the hot peanut oil and it will create a sizzle as it heats up the spring onions and herbs.
In the traditional Chinese way the fish is served whole in the steamer at the table because it symbolises unity and completeness, but you can also serve individual portions for a more modern presentation.
To serve, spoon a fillet of the sea bass onto a warm plate, decorate with some palourde clams, the goji berry and swede quick ‘pickle’, blanched baby pak choi leaves, spring onion curls and the coriander micro herbs. Spoon the fish juices over the fish and clams and serve immediately.


News
- Feb 01, 2017: Some of the presented slide sets are also online. (Please find the links to PDFs within the program.)
- Jan 30, 2017: The proceedings are now officially published via the TUM University Library.
(ISBN: 978-3-00-055564-0 / DOI: 10.14459/2017md1344297) - Jan 24, 2017: Pre-Print of COSH/VisorHPC proceedings is online.
- Jan 09, 2017: The (tentative) workshop program is online.
- Jan 02, 2017: This year, we’ve decided to merge the VisorHPC workshop with the HiPEAC’s workshop on Co-Scheduling of HPC Applications in order to present a comprehensive program.
- Dec 20, 2016: We are looking forward to the invited keynote talk by Prof. DK Panda:
HPC Meets Cloud: Opportunities and Challenges in Designing High-Performance MPI and Big Data Libraries on Virtualized InfiniBand Clusters
- Dec 20, 2016: Call for participation! The early bird registration rate for HiPEAC 17 ends on December 25! Register right here!
- Nov 30, 2016: The author notification has been postponed by one week to December 07 (Sorry for this inconvenience, but please stay tuned!)
- Oct 31, 2016: The paper submission deadline has been extended by two weeks until November 15.
- Oct 21, 2016: The program committee list is online.
- Oct 03, 2016: It’s our great pleasure to announce that Professor DK Panda of the Ohio State University volunteered to deliver the invited keynote talk.
About VisorHPC
Although virtualization solutions are quite common in server farms and cloud computing environments, their usage is in contrast by far not prevalent in the domain of high-performance computing (HPC). This is because, at least up to now, virtualization solutions like the employment of virtual machines (VM) have proven to be too heavyweight to be acceptable in scalable HPC systems. However, future exascale systems, equipped with a much higher degree of computing power but also with a much larger amount of computing cores than today’s HPC systems, will demand for resiliency and malleability features that may only be provided by increasing likewise the degree of virtualization within the systems. Moreover, recent advancements, e.g. concerning container-based virtualization or regarding hardware abstraction of high-performance interconnects, currently propel the idea of introducing more virtualization solutions even in the domain of HPC. Prominent examples for such added values stemming from virtualization and fostering resiliency, usability and malleability also in HPC systems are the possibility of live-migration and transparent checkpoint/restart, as well as the option to provide each user with an individual environment in terms of customized VM images.
Keynote Abstract
Significant growth has been witnessed during the last few years in HPC clusters with multi-/many-core processors, accelerators, and high-performance interconnects (such as InfiniBand, Omni-Path, iWARP, and RoCE). To alleviate the cost burden, sharing HPC cluster resources to end users through virtualization for both scientific computing and Big Data processing is becoming more and more attractive. The recently introduced Single Root I/O Virtualization (SR-IOV) technique for InfiniBand and High Speed Ethernet provides native I/O virtualization capabilities and is changing the landscape of HPC virtualization. However, SR-IOV lacks locality-aware communication support, which leads to performance overheads for inter-VM communication even within the same host. In this talk, we will first present our recent studies done on MVAPICH2-Virt MPI library over virtualized SR-IOV-enabled InfiniBand clusters, which can fully take advantage of SR-IOV and IVShmem to deliver near-native performance for HPC applications under Standalone, OpenStack, and Containers environments. In the second part, we will present a framework for extending SLURM with virtualization-oriented capabilities, such as dynamic virtual machine creation with SR-IOV and IVShmem resources, to effectively run MPI jobs over virtualized InfiniBand clusters. Next, we will demonstrate how high-performance solutions can be designed to run Big Data applications (like Hadoop) in HPC cloud environments. Finally, we will share our experiences of running these designs on the Chameleon Cloud testbed.
The keynote will be delivered by Dhabaleswar K. (DK) Panda of The Ohio State University.
DK Panda is a Professor and University Distinguished Scholar of Computer Science and Engineering at the Ohio State University. He has published over 400 papers in the area of high-end computing and networking. The MVAPICH2 (High Performance MPI and PGAS over InfiniBand, Omni-Path, iWARP and RoCE) libraries, designed and developed by his research group, are currently being used by more than 2,700 organizations worldwide (in 83 countries). More than 405,000 downloads of this software have taken place from the project’s site. As of Nov’16, this software is empowering several InfiniBand clusters (including the 1st, 13th, 17th, and 40th ranked ones) in the TOP500 list. The RDMA packages for Apache Spark, Apache Hadoop, Apache HBase, and Memcached together with OSU HiBD benchmarks from his group are also publicly available. These libraries are currently being used by more than 200 organizations in 29 countries. More than 19,000 downloads of these libraries have taken place. He is an IEEE Fellow.
More details about Prof. Panda are available at http://www.cse.ohio-state.edu/~panda.
Program
-
10:00 - 10:10 Welcome and Introduction
-
10:10 - 11:10 Keynote Talk by Prof. DK Panda:
HPC Meets Cloud: Opportunities and Challenges in Designing High-Performance MPI and Big Data Libraries on Virtualized InfiniBand Clusters -
Coffee Break
-
11:40 - 12:00 S. Fan, F. Chen, H. Rauchfuss, N. Har’el, U. Schilling and N. Struckmann:
Towards a Lightweight RDMA Para-Virtualization for HPC -
12:00 - 12:30 T. Küstner, C. Trinitis, J. Weidendorfer, A. Blaszczyk, P. Kaufmann and M. Johansson:
On the Applicability of Virtualization in an Industrial HPC Environment -
12:30 - 13:00 S. Pickartz, J. Breitbart and S. Lankes:
Co-scheduling on Upcoming Many-Core Architectures -
Lunch Break
-
14:15 - 15:00 Invited Talk by Dr. Mikko Byckling from Intel Finland:
An Update on Intel Technologies for High Performance Computing -
15:00 - 15:30 A. de Blanche and T. Lundqvist:
Disallowing Same-program Co-schedules to Improve Efficiency in Quad-core Servers -
Coffee Break
-
16:00 - 16:30 I. Papadakis, K. Nikas, V. Karakostas, G. Goumas and N. Koziris:
Improving QoS and Utilisation in modern multi-core servers with Dynamic Cache Partitioning -
16:30 - 16:45 HermitCore Live Demo by Dr. Stefan Lankes:
HermitCore: A Library Operating System for Cloud and High-Performance Computing -
16:45 - 17:00 Wrap-up and Workshop Closing
Workshop Topics
All subjects concerning virtualization solutions in HPC, especially (but not limited to):
- Employment and management of virtual machines and/or software containers in HPC
- Checkpointing and/or migration solutions for resiliency and malleability in HPC
- Solutions for network and I/O virtualization regarding HPC interconnects
- Parallel I/O and HPC storage solutions taking advantage from virtualization
- Hypervisors and other virtualization solutions tailored for HPC systems
- Virtualization solutions for dealing with heterogeneity in HPC environments
- Extensions to resource managers and job schedulers with respect to virtualization
- Adaptation of cloud-computing technologies to HPC environments
- Operating system support for virtualization in HPC systems
- Performance and power analysis of virtualized HPC systems
- Debugging and/or profiling in virtual environments
Call for Papers
- Open call for papers
- All papers will be peer-reviewed
- Accepted papers will be published online
- Proceedings will be referenceable through ISBN plus DOI
- Three types of papers are welcome for submission:
- Full (regular) research papers of 6-8 pages (will be peer-reviewed by at least 3 reviewers)
- Short papers of up to 4 pages (may include content not yet mature enough for a full paper)
- Industrial white papers of up to 4 pages (may present products from a technical point of view)
Submission Guidelines
- Papers should be formatted according to the IEEE manuscript templates for conferences
- Please stick to the page limits of 4 and 8 pages, respectively
- Submissions should be done via the EasyChair submission server
Preliminary Deadlines
- Paper submission deadline:
October 31November 15, 2016 - Notification of acceptance:
November 30December 07, 2016 - Camera ready due:
December 15January 15, 2016
Program Committee
- Frank Bellosa, Karlsruhe Institute of Technology (KIT)
- Carsten Clauss, ParTec Cluster Competence Center GmbH
- Stefan Lankes, RWTH Aachen University
- Julián Morillo Pozo, Barcelona Supercomputing Center (BSC)
- Lena Oden, Argonne National Laboratory (ANL)
- Pablo Reble, Intel Corporation
- Josh Simons, VMware, Inc.
- Josef Weidendorfer, Technical University of Munich (TUM)
Organizers and Contact
- Carsten Clauss, ParTec Cluster Competence Center GmbH, Germany, Email<EMAIL_ADDRESS>- Stefan Lankes, RWTH Aachen University, Germany, Email: slankes@eonerc.rwth-aachen.de


Overview & Credits
DosDumpProcess
DosForceSystemDump
DosProfile
DosQProcStat
DQPS.H
DosQueryMemState
DosQueryModFromEIP
DosQuerySysState
DOSQSS.H
DOSQ.C - Query Processes (Example)
LSOF.C - List Open Files (Example)
DosReplaceModule
DosSuppressPopUps
The Color Selection Control
HPFS Large Disk Access
Undocumented extensions to Event Semaphores
How to reset the Physical Palette
Extensions to WinQuerySysValue and WinSetSysValue
Extensions to WinDrawBorder
WinSetTitle
WinSetTitle.c
WinSetTitle.def
WinSetTitleAndIcon
WinSetTitleAndIcon.c
WinSetTitleAndIcon.def
WinHSwitchFromHapp
Environment Variables


Factorials
A simple program to compute factorials of positive integers in JavaScript.
Find the factorial of:
This document requires you to enable JavaScript in order to be viewed properly.
Created by
Bill Mei


Modal title
×
Modal body text goes here.
Home
Order Info
Order Info
Your transaction was successfully processed
Thank you for shopping with us :)
Be sure to checkout
cloudjourney.io
for more cool stuff


--- layout: post title: What I am recently reading date: '2014-01-04T21:18:00+01:00' tags: - donald knuth - charles bukowski - alan turing - books category: 'Reading' tumblr_url: http://andywenk.tumblr.com/post/72233638537/what-i-am-recently-reading ---
having over two weeks off - with Christmas during this time - means there is a good portion of time I can use to read. I really like reading a lot - unfortunately mostly textbooks. Actually, I started to force myself to also read some different stuff what leads to the first book I am reading.
Momo
When I was a kid and teeny, I hated reading. I think I read around ten books until I was eighteen. That resulted in very bad grades in school for German class. Today, as I am trained a little more, I find a lot of typos in novels and also textbooks … woot :-). But one book fascinated me and I just needed four days to read it: Momo, written by Michale Ende. I guess everybody knows this book. If not - go and get a copy! It is translated in many many languages.
Companion to the Papers of Donald Knuth
I am fascinated by Donald E. Knuth (DEK). Unfortunately I am not a mathematician (even though my interest is growing the older I get) and because of that, the theoretical stuff is really hard for me to understand. But I am still trying hard to read The Art of Computer Programming :-). I read Companion to the Papers of Donald Knuth already - I guess in three days. It consists mostly of conversations between DEK and Dikran Karaguezian. They speak about Knuth’s live and important things he thinks and did. It’s massively interesting.
Selected Papers on Computer Science
Resulting in reading the previous book, I bought Selected Papers on Computer Science from DEK. In this book he is explaining many CS aspects to a broader audience with more or less no mathematical or programming background. I started just a little bit and am looking forward to reading it. DEK’ writing style is really amazing and great.
Notes of a Dirty Old Man - Charles Bukowski
Ah - here is the first non technical book of great value. I love Bukowski. He is doing literature porn at it’s best. The book includes 36 short stories or columns he has written for a newspaper.  It’s really funny and amusing to read.
The Annotated Turing
Everybody in the field of CS knows turing and knows the ACM and knows the Turing award. I stumbled about the book The Annotated Turing written by Charles Petzold (a Microsoft textbook author) while searching on amazon after Turing. I strongly recommend this book to everyone who wants to understand what a Turing machine is and how it describes a lot the basics for modern computers. The author annotates the whole paper ON COMPUTABLE NUMBERS, WITH AN APPLICATION TO THE ENTSCHEIDUNGSPROBLEM and explains what Turing meant. Petzold is giving a lot of examples of Touring machines and as an introduction some historical background to mathematics.
Doctor Sleep - Steven King
In the range of the ten books I read when I was a teen are also some Steven King books. And for sure did I see Shining not only once. So there was Doctor Sleep under the Christmas Tree - really fitting :-). It’s quite a long book with 704 pages (German edition) so I need to prepare myself to find the mood to read it. The last book in the same size I started reading … erm … one and a half years ago :-) …
Hopefully this short list is inspiring to someone or at least informative. There are quite some other books beside my bed or laying around in some preferred reading corners in our house but the list above is what I am concentrating on at the moment.
After having read many textbooks, it is becoming harder and harder to find good ones. All O’Reilly books and also Galileo Computing books (including both my books) suffer from the dictated form they have to have. I know that the authors have just little influence to this fact but it still makes them kind of boring (not including my books :-) ). Have you read one, you have read all of them beside the changed topic. The books from DEK for example are different because he is dictating the form.
My intention is not to blame any of the authors of O’Reilly or Galileo Computing books but there is a difference between textbooks and textbooks and I start to recognise that a lot. Therefor I ask the distributors to let authors write higher quality books. You should find some way’s how to do that.
EDIT: If you are interested in mathematical books check out the list in the blogpost “5 insanely great books about mathematics you should read” by kjrose.
Cheers
Andy


The igx-autocomplete directive provides a way to enhance a text input by showing a panel of suggested options provided by the developer.
Using the igx-drop-down as a provider, allows using its functionalities like grouping, templating, etc.
You can read more about configuring those components, using the following links:
The following sample demonstrates igx-drop-down with defined groups:


|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object android.support.v4.view.PagerAdapter
public abstract class PagerAdapter
Base class providing the adapter to populate pages inside of
a ViewPager
. You will most likely want to use a more
specific implementation of this, such as
FragmentPagerAdapter
or
FragmentStatePagerAdapter
.
When you implement a PagerAdapter, you must override the following methods at minimum:
instantiateItem(ViewGroup, int)
destroyItem(ViewGroup, int, Object)
getCount()
isViewFromObject(View, Object)
PagerAdapter is more general than the adapters used for
AdapterViews
. Instead of providing a
View recycling mechanism directly ViewPager uses callbacks to indicate the
steps taken during an update. A PagerAdapter may implement a form of View
recycling if desired or use a more sophisticated method of managing page
Views such as Fragment transactions where each page is represented by its
own Fragment.
ViewPager associates each page with a key Object instead of working with
Views directly. This key is used to track and uniquely identify a given page
independent of its position in the adapter. A call to the PagerAdapter method
startUpdate(ViewGroup)
indicates that the contents of the ViewPager
are about to change. One or more calls to instantiateItem(ViewGroup, int)
and/or destroyItem(ViewGroup, int, Object)
will follow, and the end
of an update will be signaled by a call to finishUpdate(ViewGroup)
.
By the time finishUpdate
returns the views
associated with the key objects returned by
instantiateItem
should be added to
the parent ViewGroup passed to these methods and the views associated with
the keys passed to destroyItem
should be removed. The method isViewFromObject(View, Object)
identifies
whether a page View is associated with a given key object.
A very simple PagerAdapter may choose to use the page Views themselves
as key objects, returning them from instantiateItem(ViewGroup, int)
after creation and adding them to the parent ViewGroup. A matching
destroyItem(ViewGroup, int, Object)
implementation would remove the
View from the parent ViewGroup and isViewFromObject(View, Object)
could be implemented as return view == object;
.
PagerAdapter supports data set changes. Data set changes must occur on the
main thread and must end with a call to notifyDataSetChanged()
similar
to AdapterView adapters derived from android.widget.BaseAdapter
. A data
set change may involve pages being added, removed, or changing position. The
ViewPager will keep the current page active provided the adapter implements
the method getItemPosition(Object)
.
| Field Summary | |
|---|---|
static int |
POSITION_NONE
|
static int |
POSITION_UNCHANGED
|
| Constructor Summary | |
|---|---|
PagerAdapter()
|
| Method Summary | |
|---|---|
void |
destroyItem(ViewGroup container,
int position,
java.lang.Object object)
Remove a page for the given position. |
void |
destroyItem(View container,
int position,
java.lang.Object object)
Deprecated. Use destroyItem(ViewGroup, int, Object) |
void |
finishUpdate(View container)
Deprecated. Use finishUpdate(ViewGroup) |
void |
finishUpdate(ViewGroup container)
Called when the a change in the shown pages has been completed. |
abstract int |
getCount()
Return the number of views available. |
int |
getItemPosition(java.lang.Object object)
Called when the host view is attempting to determine if an item's position has changed. |
java.lang.CharSequence |
getPageTitle(int position)
This method may be called by the ViewPager to obtain a title string to describe the specified page. |
float |
getPageWidth(int position)
Returns the proportional width of a given page as a percentage of the ViewPager's measured width from (0.f-1.f] |
java.lang.Object |
instantiateItem(ViewGroup container,
int position)
Create the page for the given position. |
java.lang.Object |
instantiateItem(View container,
int position)
Deprecated. Use instantiateItem(ViewGroup, int) |
abstract boolean |
isViewFromObject(View view,
java.lang.Object object)
Determines whether a page View is associated with a specific key object as returned by instantiateItem(ViewGroup, int) . |
void |
notifyDataSetChanged()
This method should be called by the application if the data backing this adapter has changed and associated views should update. |
void |
registerDataSetObserver(DataSetObserver observer)
Register an observer to receive callbacks related to the adapter's data changing. |
void |
restoreState(Parcelable state,
java.lang.ClassLoader loader)
Restore any instance state associated with this adapter and its pages that was previously saved by saveState() . |
Parcelable |
saveState()
Save any instance state associated with this adapter and its pages that should be restored if the current UI state needs to be reconstructed. |
void |
setPrimaryItem(ViewGroup container,
int position,
java.lang.Object object)
Called to inform the adapter of which item is currently considered to be the "primary", that is the one show to the user as the current page. |
void |
setPrimaryItem(View container,
int position,
java.lang.Object object)
Deprecated. Use setPrimaryItem(ViewGroup, int, Object) |
void |
startUpdate(View container)
Deprecated. Use startUpdate(ViewGroup) |
void |
startUpdate(ViewGroup container)
Called when a change in the shown pages is going to start being made. |
void |
unregisterDataSetObserver(DataSetObserver observer)
Unregister an observer from callbacks related to the adapter's data changing. |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Field Detail |
|---|
public static final int POSITION_UNCHANGED
public static final int POSITION_NONE
| Constructor Detail |
|---|
public PagerAdapter()
| Method Detail |
|---|
public abstract int getCount()
public void startUpdate(ViewGroup container)
container
- The containing View which is displaying this adapter's
page views.public java.lang.Object instantiateItem(ViewGroup container, int position)
finishUpdate(ViewGroup)
.
container
- The containing View in which the page will be shown.position
- The page position to be instantiated.
public void destroyItem(ViewGroup container, int position, java.lang.Object object)
finishUpdate(ViewGroup)
.
container
- The containing View from which the page will be removed.position
- The page position to be removed.object
- The same object that was returned by
instantiateItem(View, int)
.public void setPrimaryItem(ViewGroup container, int position, java.lang.Object object)
container
- The containing View from which the page will be removed.position
- The page position that is now the primary.object
- The same object that was returned by
instantiateItem(View, int)
.public void finishUpdate(ViewGroup container)
container
- The containing View which is displaying this adapter's
page views.public void startUpdate(View container)
startUpdate(ViewGroup)
container
- The containing View which is displaying this adapter's
page views.public java.lang.Object instantiateItem(View container, int position)
instantiateItem(ViewGroup, int)
finishUpdate(ViewGroup)
.
container
- The containing View in which the page will be shown.position
- The page position to be instantiated.
public void destroyItem(View container, int position, java.lang.Object object)
destroyItem(ViewGroup, int, Object)
finishUpdate(View)
.
container
- The containing View from which the page will be removed.position
- The page position to be removed.object
- The same object that was returned by
instantiateItem(View, int)
.public void setPrimaryItem(View container, int position, java.lang.Object object)
setPrimaryItem(ViewGroup, int, Object)
container
- The containing View from which the page will be removed.position
- The page position that is now the primary.object
- The same object that was returned by
instantiateItem(View, int)
.public void finishUpdate(View container)
finishUpdate(ViewGroup)
container
- The containing View which is displaying this adapter's
page views.public abstract boolean isViewFromObject(View view, java.lang.Object object)
instantiateItem(ViewGroup, int)
. This method is
required for a PagerAdapter to function properly.
view
- Page View to check for association with object
object
- Object to check for association with view
view
is associated with the key object object
public Parcelable saveState()
public void restoreState(Parcelable state, java.lang.ClassLoader loader)
saveState()
.
state
- State previously saved by a call to saveState()
loader
- A ClassLoader that should be used to instantiate any restored objectspublic int getItemPosition(java.lang.Object object)
POSITION_UNCHANGED
if the position of the given
item has not changed or POSITION_NONE
if the item is no longer present
in the adapter.
The default implementation assumes that items will never
change position and always returns POSITION_UNCHANGED
.
object
- Object representing an item, previously returned by a call to
instantiateItem(View, int)
.
getCount()
),
POSITION_UNCHANGED
if the object's position has not changed,
or POSITION_NONE
if the item is no longer present.public void notifyDataSetChanged()
public void registerDataSetObserver(DataSetObserver observer)
observer
- The android.database.DataSetObserver
which will receive callbacks.public void unregisterDataSetObserver(DataSetObserver observer)
observer
- The android.database.DataSetObserver
which will be unregistered.public java.lang.CharSequence getPageTitle(int position)
position
- The position of the title requested
public float getPageWidth(int position)
position
- The position of the page requested
|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |


International scientific agency from Norway called NORSAR has in its report states that the resilience of buildings in Guwahati to probable earthquake is far better than buildings studied in other cities of India. (first reported by TheNortEastToday)
This project examined aprox. 16,000 buildings samples in Guwahati. Experts from Norway and Assam Engineering College have imposed simulated earthquakes like the Nepal earthquake or even bigger including the Great Assam earthquake of 1897 and 1950 and their impact on these buildings. They have just concluded their studies and submitted their final report which states that the resilience power of buildings in Guwahati to probable earthquake is far better than buildings studied in other cities of India.
In Guwahati, no high rise building can be constructed without the services of licensed; architects,
engineers, structural engineers, geotechnical engineers and field supervisors. The design prepared by
the Structural Engineer has to be vetted by a Structural Design Review Panel like IIT Guwahati and
Assam Engineering College.
P.K Sharma, President of AREIDA has said, “Assam must learn to live with earthquakes; and Guwahati
cannot escape high rise buildings due to scarcity and affordability of residential land.”


Add your listing!
Easy setup, 100% free
Get started
Go!
Latest listings
Card title
{{dlListing.title}}
Load more


I am a data engineering enthusisast and currently working as a data engineering lead with a lead company in United states. Passionate about data and always looking to solve real life problems through data solutions.
APACHE SPARKApache Spark I daily use spark to process data in range of terrabyte and petabytes.PythonPython I use python mainly to create userdefined fuctions or supporting function for data processing or for orchestrating data pipelinesAIRFLOWI use airflow for scheduling my data pipelines.HBASEUsed hbase for any data functionalites which needed updates and key based. |
SNOWFLAKESnowflake is the tool used for data warehousing for majority of the usecases.TABLEAUUsed mainly for visualization and as webedit.REDSHIFTUsed as backend for targetted campaign management system for fast data access.GITHUBUsed as code versioning tool. |
Photo by Benjamin Davies on Unsplash
Self service analytics is a common usecase now a days . Explaining a potential candidate "Druid" ,how can take this spot.
Photo by Sai Kiran Anagani on Unsplash
Most of the scenario in modern technology world "Data lake" term reffers to a object storage system like S3 or a onpremise system like HDFS. These systems doesnt have a delete capability. In this article i am explaining different approaches you can take to enable deletes on data lake.
Photo by Sai Kiran Anagani on Unsplash
Talking about federated data queries using Athena.


WELCOME My name is Alex Wade, I'm a 22 year old developer currently looking for a position in the Greater New York area. I've got a Computer Science degree from Bucknell University, experience in real-world positions, as well a chrome exension! I hope to be able to learn more at my next developing position.
Click to learn more about me!


This is version $internalRuntimeVersion$ of the AMP runtime.
For a list of commits contained in this release, click
here.
Release channels
These switches control which release channel (prod, RC, or dev) of AMP JS
will be served through the Google AMP Cache.
Note: These controls set a cookie on the domain name cdn.ampproject.org. If your browser is
set to block all third-party cookies, they will not function. Make sure third-party cookies are enabled, or
allowlisted on the websites that you are testing.
Advanced
You can manually opt in to a previously released RTV using this form.
Warning: This is an advanced setting. It is intended for use while debugging AMP runtime code, and is
not meant to be used to publish AMP documents. To opt out of this setting, clear the RTV in the input field.
Experiments
Experiments can no longer be enabled on the top-level cdn.ampproject.org/experiments.html.
They must be toggled on the specific subdomain e.g. www-example-com.cdn.ampproject.org/experiments.html.
Find the AMP Cache experiments page for your source domain or AMP page URL:
Experiments
These switches toggle experiments for documents served at the current subdomain
of the Google AMP Cache:
cdn.ampproject.org
Please exercise caution. These experiments are not fully tested and might
contain bugs or have unexpected side effects. Please only activate them
if you work on the AMP Project
or plan to create AMP documents that use unreleased features for testing purposes.
See the AMP project
documentation
to find out more about experiments, and how to activate them outside of
the Google AMP Cache (including in local development).


---
layout: null
section-type: about
title: About
---
## About
I am a FullStack Software engineer with a strong background in Javascript. I work with technologies such as AngularJS, Backbone, and Ionic on the frontend, as well as Node.js/Express, MongoDB, and MySQL on the backend.
Being in the IT field for over 5 years, I have a passion for solving problems, especially with other software engineers.
Skills: JavaScript • Node.js/Express.js • AngularJs • Backbone.js • MongoDB • React • D3.js • jQuery • HTML5/CSS3 • Git • TDD/Mocha/Jasmine • Grunt • Agile Methods
### What I do in my spare time:
* Travels
* Food
* Cars


Excel in Continuous Integration
Business Users like Excel. Besides its original use case of calculating, lists are a favourite use case. They also serve as poor man's requirement and bug tracker, so they siep into software development too.
While Excel sheets are great for interaction, they are a beast for anything automation. The irony of it: Modern Excel files (the xslx flavour) are nothing less than zip files with XML content. However that format is, let's say, [insert expletives here].
From an XML representation I would expect something like <cell row="23" col="44">Some value</cell>
. However that's not what Excel does. Rename an xlsx to zip and see for yourself. Also (which makes sense for Excel itself) empty cells are not represented in XML.
Cutting a long story short, an Excel file or its XML representation poses some challenges:
- XML format is not very suitable for automation, like generating reports using XSLT
- Excel automation only runs on Windows (and when you run headless, you trade the head for a headache). That makes it a no-go for most automation server environments
- Empty cells are absent from the XML (a variation of "not suitable")
- Cross reports with other files (e.g. logs in XML format) is hard
To overcome these limitations I wrote Excel2XML. It is a little Java command line utility that converts Excel into a more digestible XML format. I used Microsoft's contribution to the Apache POI project to read the file. It has the following functions:
- Extract workbooks in one or separate files per worksheet
- Ignore all formatting
- Computed cells return their last result values, unless it is a formula error, then the formula is returned
- The first line of each sheet is treated as column headers, which are extracted as columns/column elements
- Each cell has a
column
, arow
and atitle
attribute. The title reflects the value from the first row. This allows in XSLT to query the title instead of relying on the column number. Reordering, adding or removing columns won't kill your XSLT stylesheet that way - Optional empty cells can be generated with an attribute of
empty="true"
- Runs on Java8 completely from command line
- Calling it without parameters outputs the exact syntax of options
The full syntax: java -jar excel2xml.jar -i somefile.xslt [-o somefile.xml [ ]-e] [-s] [-w3,4]
- -i the input file in xslx format
- -o the output file. If missing same name as input, but extension xml
- -e generate empty cells. If missing: cells without data are skipped
- -s generate a single file for the whole workbook. If missing: creates one file per sheet
- -w comma separated list of sheets to export. Starts at 0. If missing: exports all sheets
Head over to the git repository and grab a release. Let me know what use you found. As usual YMMV
Posted by Stephan H Wissel on 02 October 2017 | Comments (1) | categories: Continuous integration XML


bittos
Browse
Profile
Post
Sign-up
My Backyard Photo
This is my nice backyard #nofilter
username
This a comment; username.id
Post a comment


RxJS Letter Counting Example
Example to show getting the current length of the input.
Text buffer:
Start Typing!


Experience Certainty:
IT Services Business Solutions Consulting Services
Forgot Password Page
OTP:
* Email Id Is Required
Create Password:
*
Confirm Password:
*
Please Enter correct password
Submit
Login Here


Model class provides the interface to the probabilistic modelling of trajectories.
More...
|
| def | __init__ (self, cluster_data, settings) |
| | Initialise a model. More...
|
| |
| def | clear (self) |
| |
| def | getMean (self) |
| |
| def | getSamples (self, nsamples) |
| |
| def | getKS (self, cluster_data, sigma_arr, nsamples=100) |
| |
| def | isInside_grid (self, sdwidth, xx, yy, zz=None) |
| |
| def | isInside_pnts (self, P, sdwidth=1, nellipse=50) |
| |
| def | evalLogLikelihood (self, xx, yy, zz=None) |
| |
| def | getOutline (self, sdwidth=1) |
| |
|
| def | _norm2real (self, mu_y, sig_y, outline) |
| |
| def | _clusterdata2points (self, cluster_data) |
| |
| def | _getEllipse (self, c, A, sdwidth=1, nellipse=10) |
| |
| def | _getSample (self, c, A, nsamples=1, std=1) |
| |
| def | _getCoordsEllipse (self, nellipse=20, sdwidth=5) |
| |
| def | _eval_logp (self, Y_pos) |
| |
| def | _grid2points (self, xx, yy, zz=None) |
| |
| def | _points2grid (self, s, Y_idx) |
| |
| def | _get_point_cloud (self, sdwidth=1, nellipse=50) |
| |
Model class provides the interface to the probabilistic modelling of trajectories.
These trajectories are a single ensemble
§ __init__()
| def teetool.model.Model.__init__ |
( |
|
self, |
|
|
|
cluster_data, |
|
|
|
settings |
|
) |
| |
Initialise a model.
- Parameters
-
| self | object pointer |
| cluster_data | list of (x, Y) trajectory data |
| settings | a dictionary with "model_type" = resampling, ML, or EM "ngaus": number of Gaussians to create for output, REQUIRED for ML and EM, "basis_type" = gaussian, bernstein, "nbasis": number of basis functions |
§ _clusterdata2points()
| def teetool.model.Model._clusterdata2points |
( |
|
self, |
|
|
|
cluster_data |
|
) |
| |
|
private |
returns the points Y [npoints x ndim]
§ _eval_logp()
| def teetool.model.Model._eval_logp |
( |
|
self, |
|
|
|
Y_pos |
|
) |
| |
|
private |
evaluates on a grid, aiming at the desired number of points
§ _get_point_cloud()
| def teetool.model.Model._get_point_cloud |
( |
|
self, |
|
|
|
sdwidth = 1 , |
|
|
|
nellipse = 50 |
|
) |
| |
|
private |
returns a list with point clouds, representing the transition between Gaussians
input paramters:
- none
§ _getCoordsEllipse()
| def teetool.model.Model._getCoordsEllipse |
( |
|
self, |
|
|
|
nellipse = 20 , |
|
|
|
sdwidth = 5 |
|
) |
| |
|
private |
returns an array of xy(z) coordinates
nellipse is number of points in ellipsoid and sdwidth is the variance
§ _getEllipse()
| def teetool.model.Model._getEllipse |
( |
|
self, |
|
|
|
c, |
|
|
|
A, |
|
|
|
sdwidth = 1 , |
|
|
|
nellipse = 10 |
|
) |
| |
|
private |
§ _getSample()
| def teetool.model.Model._getSample |
( |
|
self, |
|
|
|
c, |
|
|
|
A, |
|
|
|
nsamples = 1 , |
|
|
|
std = 1 |
|
) |
| |
|
private |
returns nsamples samples of the given Gaussian
§ _grid2points()
| def teetool.model.Model._grid2points |
( |
|
self, |
|
|
|
xx, |
|
|
|
yy, |
|
|
|
zz = None |
|
) |
| |
|
private |
returns an Y matrix for a given grid
xx, yy, (zz) are mgrid
§ _norm2real()
| def teetool.model.Model._norm2real |
( |
|
self, |
|
|
|
mu_y, |
|
|
|
sig_y, |
|
|
|
outline |
|
) |
| |
|
private |
returns the normalised values back to the original
§ _points2grid()
| def teetool.model.Model._points2grid |
( |
|
self, |
|
|
|
s, |
|
|
|
Y_idx |
|
) |
| |
|
private |
converts points to a matrix
s is values np.array and Y_idx is position np.array
§ clear()
| def teetool.model.Model.clear |
( |
|
self | ) |
|
§ evalLogLikelihood()
| def teetool.model.Model.evalLogLikelihood |
( |
|
self, |
|
|
|
xx, |
|
|
|
yy, |
|
|
|
zz = None |
|
) |
| |
evaluates values in this grid [2d/3d] and returns values
example grid:
xx, yy, zz = np.mgrid[-60:60:20j, -10:240:20j, -60:60:20j]
§ getKS()
| def teetool.model.Model.getKS |
( |
|
self, |
|
|
|
cluster_data, |
|
|
|
sigma_arr, |
|
|
|
nsamples = 100 |
|
) |
| |
calculated the ks value
input:
cluster_data - data to evaluate against
nsamples - number of samples to use
sigma_arr - array which standard deviation to evalute
§ getMean()
| def teetool.model.Model.getMean |
( |
|
self | ) |
|
returns the average trajectory [x, y, (z)]
§ getOutline()
| def teetool.model.Model.getOutline |
( |
|
self, |
|
|
|
sdwidth = 1 |
|
) |
| |
returns the outline [xmin, xmax, ymin, ymax, zmin, zmax]
input parameters:
- sdwidth
§ getSamples()
| def teetool.model.Model.getSamples |
( |
|
self, |
|
|
|
nsamples |
|
) |
| |
return nsamples of the model
§ isInside_grid()
| def teetool.model.Model.isInside_grid |
( |
|
self, |
|
|
|
sdwidth, |
|
|
|
xx, |
|
|
|
yy, |
|
|
|
zz = None |
|
) |
| |
evaluate if points are inside a grid
Input parameters:
- sdwidth
- xx
- yy
- zz (when 3d)
§ isInside_pnts()
| def teetool.model.Model.isInside_pnts |
( |
|
self, |
|
|
|
P, |
|
|
|
sdwidth = 1 , |
|
|
|
nellipse = 50 |
|
) |
| |
tests if points P NxD 'points' x 'dimensions' are inside the tube
§ _cA
covariance matrix [ndim x ndim] in ngaus cells
§ _cc
mean vector [ndim x 1] in ngaus cells
§ _list_logp
| teetool.model.Model._list_logp |
|
private |
previously calculated values log-likelihood
§ _list_tube
| teetool.model.Model._list_tube |
|
private |
previously calculated values confidence region
§ _mu_y
| teetool.model.Model._mu_y |
|
private |
mean vector [ngaus*ndim x 1]
§ _ndim
| teetool.model.Model._ndim |
|
private |
dimension of cluster_data
§ _sig_y
| teetool.model.Model._sig_y |
|
private |
covariance matrix [ngaus*ndim x ngaus*ndim]
The documentation for this class was generated from the following file:


TreeDemoHelp.html
)
for the tree demo.
Selecting any branch node in the tree results
in this file being displayed.
When you select a leaf node (a book),
this pane displays an HTML file for that book.
This demo uses a split pane to separate the tree and this HTML view. Drag the divider up or down to change the space distribution.


Check your answers
- Number of cases
- 256
- Total claim
- £5,403
- Claim period
- November 2017
Statement of truth
By submitting this claim you confirm that to the best of your knowledge:
- you're entitled to claim
- the details you've given are correct
You agree to the terms and conditions and that details you've given will be securely stored and used to process your claim.


How to Activate the "Remote framework..." Menu Item in the Knopflerfish Desktop
The Knopflerfish Desktop has the ability to remote control frameworks running on other computers or devices (including headless devices that cannot run the desktop them selves). This document describes how to activate this feature.
Typically, the "Remote framework…" menu item (in the File menu) is greyed out. The reason for this is that, typically, the remote framework service that the desktop is looking for is not present. To connect to a remote framework, the desktop needs an implementation of the org.knopflerfish.service.remotefw.RemoteFramework interface. This implementation decides which protocol to use and handles the communication.
The implementation described here uses kSOAP 2, which is a small-footprint SOAP implementation on top of kXML. It provides remote access to all functionality in the desktop (including the log tab and the console).
Terminology
Server: The server in this context is the remote controlled framework that waits for connections to its SOAP servlet.
Client: The client in this context is the framework that is running the desktop that is connecting to and controlling the server.
Needed Bundles
Two special bundles are needed both on the server and the client side:
- ksoap-osgi (ksoap-osgi_all-1.0.0.jar) - Contains the kSOAP libs and registers the SOAP servlet.
- ksoap_remotefw (ksoap_remotefw_all-1.0.0.jar) - Supplies the RemoteFramework implementation (on the client) and handles .
These standard bundles are needed as stated below:
- desktop (desktop_all-1.1.0.jar) - Needed on the client (of course).
- remotefw_api (remotefw_api-1.0.0.jar) - Needed on the server to provide the org.knopflerfish.service.remotefw package (when the desktop is not installed).
Since a servlet is used, the HTTP (http_all-1.1.0.jar) and JSDK (jsdk-2.2.jar) bundles are also needed. As usual, some of these bundles also depend on a number of standard bundles (including the Knopflerfish util bundle).
Configuration
The configuration is done with system properties. All of them have reasonable defaults and things will work without configuration.
Server
- org.osgi.service.http.port - Defines the port for the HTTP server. Defaults to 80.
- org.knopflerfish.soap.remotefw.server - Can be set to true on the client just to make it clear that it is a server. Defaults to true.
- org.knopflerfish.soap.remotefw.client - Can be set to false on the server. No RemoteFramework service will be registered and the desktop (if installed) will not be able to use the remote framework feature. Defaults to true.
Client
- org.knopflerfish.soap.remotefw.client.eventinterval - Defines the time (in ms) between polls to get events and log entries from the server. Defaults to 3000.
- org.knopflerfish.soap.remotefw.server - Can be set to false on the client. No servlet will be registered and other desktops will not be able to connect to this framework. Defaults to true.
- org.knopflerfish.soap.remotefw.client - Can be set to true on the client just to make it clear that it is a client. Defaults to true.
- org.knopflerfish.soap.remotefw.client.sendlocalpaths - Set to true to avoid sending base64 encoded bundles when installing. Defaults to false.
Common
- org.knopflerfish.soap.remotefw.client.debug - If set to true, causes the ksoap bundles to print some debug information. Defaults to false.
Connecting
When all the above is done and you start your frameworks, you'll find that the "Remote framework…" menu item is available. Click on it.
Enter the address to the remote framework. You should only enter the server name and the port, e.g. "http://localhost:8080". The rest is added automatically.
Click OK.
The desktop will be closed and reopened with the address to the remote framework in the title bar (e.g. "Knopflerfish OSGi desktop (http://localhost:8080)"). If the parenthesis are empty, something is wrong and you need to consult your log.
Known Problems
If the remote framework is shut down (which can be done remotely by running the console command "framework shutdown"), the desktop may behave strangely.
Log entries can appear in unexpected order.


Gaon Chart releases chart rankings for the month of October 2019
by GhostWriterThe Gaon Chart is the national chart of South Korea and is intended to be the equivalent of Oricon in Japan and Billboard in the United States.
Check out the digital singles and album rankings for the month of October 2019 below!
< Gaon Chart National Digital Singles Ranking >
| Rank | Artist & Title | Points |
| 1 | AKMU - How can I love the heartbreak, you're the one I love | 238,910,175 |
| 2 | Jang Bum Joon - Your Shampoo Scent In The Flowers | 189,564,560 |
| 3 | Lim Jae Hyun - I'm A Little Drunk | 152,070,719 |
| 4 | Bolbbalgan4 - Workaholic | 133,909,485 |
| 5 | Paul Kim - Farewell | 132,402,953 |
| 6 | Maktub - To You My Light | 120,752,352 |
| 7 | Jeon Sang Kun - I Still Love You A Lot | 119,160,557 |
| 8 | Hynn - The Lonely Bloom Stands Alone | 115,379,831 |
| 9 | Song Haye - Another Love | 111,984,403 |
| 10 | Jang Deok Chul - See You Later | 104,992,529 |
< Gaon Chart National Physical Albums Ranking >
| Rank | Artist & Album | Album Sales | Distributor |
| 1 | Super Junior - Time_Slip | 365,751 | Dreamus |
| 2 | MONSTA X - FOLLOW _ FIND YOU | 185,573 | Kakao M |
| 3 | NU'EST - The Table | 183,100 | Genie Music, Stone Music |
| 4 | TXT - The Dream Chapter _ MAGIC | 175,407 | Dreamus |
| 5 | Chen - Dear My Dear | 158,200 | Dreamus |
| 6 | Taeyeon - Purpose | 154,258 | Dreamus |
| 7 | SuperM - SuperM The 1st Mini Album | 153,590 | Dreamus |
| 8 | ATEEZ - TREASURE EP.FIN _ All To Action | 137,412 | Genie Music, Stone Music |
| 9 | BTS - MAP OF THE SOUL _ PERSONA | 119,892 (Total Sales: 3,676,337) | Dreamus |
| 10 | AB6IX - 6IXENSE | 117,910 | Warner Music |
Note: Gaon has removed the download and streaming chart numbers.


I LOVE TROUBLE A Film Review Copyright Dragan Antulov 1999
Every now and then, reviewers are faced with the films that are hard to be properly reviewed. Most of the time it happens with films that leave so overwhelming impact, either good or bad, that in the end reviewers must work hard to express his thoughts or feelings. But, sometimes it can happen for rather trivial reasons. I LOVE TROUBLE happened to be one of such occasions for the author of this review. The impression left by the film wasn't overwhelming - on the contrary, there were hardly any impression at all, since I had real trouble keeping myself awake while watching it. Which surprise me to this day, because the movie theatre was full, I was close to sound speakers, the show wasn't late and I didn't lack sleep before the show. Such things happen very rarely to me, and, after many years, the closest thing to solution to this mystery is probably the quality of the film itself.
The plot revolves around two rival Chicago reporters - old Peter Brackett (Nick Nolte) and young, aspiring Sabrina Peterson (Julia Roberts). Two of them are assigned to cover the train collision. As soon as they meet, they start scooping each other, but during the process they both discover sinister plot involving cancerogenic milk, and also the romantic feelings they have for each other. The plot in this film is rather secondary to its real raison d'Ítre - romantic pairing reminiscent of classical screwball comedies starring Spencer Tracy and Katharine Hepburn. Movie author, director and screenwriter Charles Shyer, who had some experiences with turning the screwball spirit into modern setting with FATHER OF THE BRIDE, tries again, this time pairing old Nick Nolte with young Julia Roberts. However, although there is some chemistry between the two, soon it stops to arouse any interest. It probably happens due to poorly executed genre mix, that collides light-hearted romantic comedy with rather uninteresting plot suitable to pure action thrillers. Shyer as director fails to make the proper transition between the two, and fails in both areas, making the story cliched and predictable. The end result is rather forgettable effort, which convinced me not to watch movie again. I'll give it the benefit of the doubt, though.
RATING: 3/10 (+)
Review written on May 8th 1999
Dragan Antulov a.k.a. Drax Fido: 2:381/100 E-mail<EMAIL_ADDRESS>E-mail<EMAIL_ADDRESS>E-mail<EMAIL_ADDRESS>The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Welcome to SETAphish
Campaign details
{% if error_msg %}KO! We were unable to retrieve the campaign details
Reason for that: {{ error_msg }}
{% elif summary %}General information
Campaign components
Main Phishing Statistics
User statistics
{% if details.results %}| User ID | First Name | Last Name | Position | Status | |
|---|---|---|---|---|---|
| {{ result.id }} | {{ result.first_name }} | {{ result.last_name }} | {{ result.email }} | {{ result.position }} | {{ result.status|upper }} |
Downloads
| General Stats | User stats |
|---|---|
No details found
{% endif %}


Enumerable Methods
Hey guys, I hope all is well. Today I am going to be blogging about an enumerable method in Ruby. The specific enumerable method I will be discussing today will be Enumerable#map. This method is very useful and since learning it I have already used it in my code a couple times. What does this method do anyways? To dive into that lets first look at a simple example of how it works.
e.g.
1.-Array=[1,2,3,4,5,6,7,8,9,10]
2.-Array.map{|number| number.odd?}
^ this returns
[true, false, true, false, true, false, true, false, true, false]
Alright guys, so what happened? First off what the #map method does is iterate through the object that is placed in front of it (this would be array). Then it applies all the code that you provided in the curly brackets on line 2. |number| is how we define the variable that #map will use to iterate over the array. For instance, once the first element in the array has had the code executed on it it will then move on to the next element. This happens until every character in the array has been iterated through. The code I ran on the number variable is the #odd? method which returns true if the number is odd and false otherwise. As you can see from the output that the the #odd? method has been applied to all objects in the array.
#map method is very useful for multiple reasons. To give you guys a quick example of how useful it is let’s apply the same code above to a bigger array. What if instead of the Array variable on line one containing an array of 10 integers it contained 1000 integers. Also, what if these numbers were all random, how would you go about finding how many odd numbers there are in that array? This is were the #map saves the day because if we apply the same code on line 2 to this bigger array it will instantly return a string with identified odd and even values. All we would need to do is count the true statements in the array and we would know exactly how many odd numbers are in this 1000 integer array.


sparvk is an opensource distribution of operating systems. Every unit of sparvk is assembled keeping the following principles in mind:-
Consistent. Sparvk applications should provide a consistent experience to all the users in a team. Consistency is essential to reduce the amount of effort that must be spend to train new staff. Manuals prepared once may be used for years on end without becoming outdated. Updates to software must not break existing workflows. Sparvk aims to become the foundational technology in your organization. On top of which you can create your own business rules and systems.
Offline. Applications should work in spotty network conditions. We look building systems that can operate in disconnected environments. A user should not need Internet connectivity to work on documents. They should be able to access their data regardless of the network connectivity. An internet connection may enhance the experience by allowing them to install updates and new applications but in no way should it be a necessity for doing actual work.
Besides these fundamental rules there are a few other principles that influence our work
Security. Sparvk systems are secure by default. You won’t need to install any antivirus programs. You won’t have to worry about your privacy. You can encrypt entire hard disks so that as long as you protect your master password your data is secure. Even if it gets stolen.
User isolation. Although a sparvk system can be used by multiple accounts at once every user will get his own work environment that can’t be tresspassed by other users of the system. Unless you happen to be the administrator every user will only get to see and interact with their own data.
Although we have a set of guidelines that we follow while working on our technology that does not mean that you as a distributor partner or as a customer have to honor or even follow these guidelines. And while you have to take care of not violating open source licenses on which sparvk is built , as a user of you are free to do with it as you please.


Enter your new logo
Enter your new location
Enter new rate
Change Email
Enter old password
Enter new password
Confirm new password


|
Connected Home over IP
672cf7684
|
The below class implements the draft 01 version of the Spake2+ protocol as defined in https://www.ietf.org/id/draft-bar-cfrg-spake2plus-01.html. More...
#include <crypto/CHIPCryptoPAL.h>
Public Member Functions | |
| Spake2p (size_t fe_size, size_t point_size, size_t hash_size) | |
| virtual | ~Spake2p () |
| CHIP_ERROR | Init (const uint8_t *context, size_t context_len) |
| Initialize Spake2+ with some context specific information. More... | |
| CHIP_ERROR | BeginVerifier (const uint8_t *my_identity, size_t my_identity_len, const uint8_t *peer_identity, size_t peer_identity_len, const uint8_t *w0in, size_t w0in_len, const uint8_t *Lin, size_t Lin_len) |
| Start the Spake2+ process as a verifier (i.e. More... | |
| CHIP_ERROR | BeginProver (const uint8_t *my_identity, size_t my_identity_len, const uint8_t *peer_identity, size_t peer_identity_len, const uint8_t *w0in, size_t w0in_len, const uint8_t *w1in, size_t w1in_len) |
| Start the Spake2+ process as a prover (i.e. More... | |
| CHIP_ERROR | ComputeRoundOne (uint8_t *out, size_t *out_len) |
| Compute the first round of the protocol. More... | |
| CHIP_ERROR | ComputeRoundTwo (const uint8_t *in, size_t in_len, uint8_t *out, size_t *out_len) |
| Compute the second round of the protocol. More... | |
| CHIP_ERROR | KeyConfirm (const uint8_t *in, size_t in_len) |
| Confirm that each party computed the same keys. More... | |
| CHIP_ERROR | GetKeys (uint8_t *out, size_t *out_len) |
| Return the shared secret. More... | |
| CHIP_ERROR | InternalHash (const uint8_t *in, size_t in_len) |
| CHIP_ERROR | WriteMN () |
| CHIP_ERROR | GenerateKeys () |
| virtual CHIP_ERROR | FELoad (const uint8_t *in, size_t in_len, void *fe)=0 |
| Load a field element. More... | |
| virtual CHIP_ERROR | FEWrite (const void *fe, uint8_t *out, size_t out_len)=0 |
| Write a field element in big-endian format. More... | |
| virtual CHIP_ERROR | FEGenerate (void *fe)=0 |
| Generate a field element. More... | |
| virtual CHIP_ERROR | FEMul (void *fer, const void *fe1, const void *fe2)=0 |
| Multiply two field elements, fer = fe1 * fe2. More... | |
| virtual CHIP_ERROR | PointLoad (const uint8_t *in, size_t in_len, void *R)=0 |
| Load a point from 0x04 || X || Y format. More... | |
| virtual CHIP_ERROR | PointWrite (const void *R, uint8_t *out, size_t out_len)=0 |
| Write a point in 0x04 || X || Y format. More... | |
| virtual CHIP_ERROR | PointMul (void *R, const void *P1, const void *fe1)=0 |
| Scalar multiplication, R = fe1 * P1. More... | |
| virtual CHIP_ERROR | PointAddMul (void *R, const void *P1, const void *fe1, const void *P2, const void *fe2)=0 |
| Scalar multiplication with addition, R = fe1 * P1 + fe2 * P2. More... | |
| virtual CHIP_ERROR | PointInvert (void *R)=0 |
| Point inversion. More... | |
| virtual CHIP_ERROR | PointCofactorMul (void *R)=0 |
| Multiply a point by the curve cofactor. More... | |
| virtual CHIP_ERROR | PointIsValid (void *R)=0 |
| virtual CHIP_ERROR | ComputeL (uint8_t *Lout, size_t *L_len, const uint8_t *w1in, size_t w1in_len)=0 |
Public Attributes | |
| void * | M |
| void * | N |
| const void * | G |
| void * | X |
| void * | Y |
| void * | L |
| void * | Z |
| void * | V |
| void * | w0 |
| void * | w1 |
| void * | xy |
| void * | order |
| void * | tempbn |
Protected Member Functions | |
| virtual CHIP_ERROR | InitImpl ()=0 |
| Initialize underlying implementation curve, points, field elements, etc. More... | |
| virtual CHIP_ERROR | Hash (const uint8_t *in, size_t in_len)=0 |
| Hash in_len bytes of in into the internal hash context. More... | |
| virtual CHIP_ERROR | HashFinalize (uint8_t *out)=0 |
| Return the hash. More... | |
| virtual CHIP_ERROR | Mac (const uint8_t *key, size_t key_len, const uint8_t *in, size_t in_len, uint8_t *out)=0 |
| Generate a message authentication code. More... | |
| virtual CHIP_ERROR | MacVerify (const uint8_t *key, size_t key_len, const uint8_t *mac, size_t mac_len, const uint8_t *in, size_t in_len)=0 |
| Verify a message authentication code. More... | |
| virtual CHIP_ERROR | KDF (const uint8_t *ikm, size_t ikm_len, const uint8_t *salt, size_t salt_len, const uint8_t *info, size_t info_len, uint8_t *out, size_t out_len)=0 |
| Derive an key of length out_len. More... | |
Protected Attributes | |
| CHIP_SPAKE2P_ROLE | role |
| CHIP_SPAKE2P_STATE | state |
| size_t | fe_size |
| size_t | hash_size |
| size_t | point_size |
| uint8_t | Kcab [kMAX_Hash_Length] |
| uint8_t | Kae [kMAX_Hash_Length] |
| uint8_t * | Kca |
| uint8_t * | Kcb |
| uint8_t * | Ka |
| uint8_t * | Ke |
The below class implements the draft 01 version of the Spake2+ protocol as defined in https://www.ietf.org/id/draft-bar-cfrg-spake2plus-01.html.
The following describes the protocol flows:
Commissioner Accessory ------------ --------- Init BeginProver ComputeRoundOne -------------> Init BeginVerifier /- ComputeRoundOne <------------- ComputeRoundTwo ComputeRoundTwo -------------> KeyConfirm KeyConfirm GetKeys GetKeys
| chip::Crypto::Spake2p::Spake2p | ( | size_t | fe_size, |
| size_t | point_size, | ||
| size_t | hash_size | ||
| ) |
|
inlinevirtual |
| CHIP_ERROR chip::Crypto::Spake2p::BeginProver | ( | const uint8_t * | my_identity, |
| size_t | my_identity_len, | ||
| const uint8_t * | peer_identity, | ||
| size_t | peer_identity_len, | ||
| const uint8_t * | w0in, | ||
| size_t | w0in_len, | ||
| const uint8_t * | w1in, | ||
| size_t | w1in_len | ||
| ) |
Start the Spake2+ process as a prover (i.e.
a commisioner).
| my_identity | The prover identity. May be NULL if identities are not established. |
| my_identity_len | The prover identity length. |
| peer_identity | The peer identity. May be NULL if identities are not established. |
| peer_identity_len | The peer identity length. |
| w0in | The input w0 (an output from the PBKDF). |
| w0in_len | The input w0 length. |
| w1in | The input w1 (an output from the PBKDF). |
| w1in_len | The input w1 length. |
| CHIP_ERROR chip::Crypto::Spake2p::BeginVerifier | ( | const uint8_t * | my_identity, |
| size_t | my_identity_len, | ||
| const uint8_t * | peer_identity, | ||
| size_t | peer_identity_len, | ||
| const uint8_t * | w0in, | ||
| size_t | w0in_len, | ||
| const uint8_t * | Lin, | ||
| size_t | Lin_len | ||
| ) |
Start the Spake2+ process as a verifier (i.e.
an accessory being provisioned).
| my_identity | The verifier identity. May be NULL if identities are not established. |
| my_identity_len | The verifier identity length. |
| peer_identity | The peer identity. May be NULL if identities are not established. |
| peer_identity_len | The peer identity length. |
| w0in | The input w0 (an output from the PBKDF). |
| w0in_len | The input w0 length. |
| Lin | The input L (a parameter baked into the device or computed with ComputeL). |
| Lin_len | The input L length. |
|
pure virtual |
Implemented in chip::Crypto::Spake2p_P256_SHA256_HKDF_HMAC.
| CHIP_ERROR chip::Crypto::Spake2p::ComputeRoundOne | ( | uint8_t * | out, |
| size_t * | out_len | ||
| ) |
Compute the first round of the protocol.
| out | The output first round Spake2+ contribution. |
| out_len | The output first round Spake2+ contribution length. |
| CHIP_ERROR chip::Crypto::Spake2p::ComputeRoundTwo | ( | const uint8_t * | in, |
| size_t | in_len, | ||
| uint8_t * | out, | ||
| size_t * | out_len | ||
| ) |
Compute the second round of the protocol.
| in | The peer first round Spake2+ contribution. |
| in_len | The peer first round Spake2+ contribution length. |
| out | The output second round Spake2+ contribution. |
| out_len | The output second round Spake2+ contribution length. |
|
pure virtual |
Generate a field element.
| fe | A pointer to an initialized implementation dependant field element. |
Implemented in chip::Crypto::Spake2p_P256_SHA256_HKDF_HMAC.
|
pure virtual |
Load a field element.
| in | The input big endian field element. |
| in_len | The size of the input buffer in bytes. |
| fe | A pointer to an initialized implementation dependant field element. |
Implemented in chip::Crypto::Spake2p_P256_SHA256_HKDF_HMAC.
|
pure virtual |
Multiply two field elements, fer = fe1 * fe2.
| fer | A pointer to an initialized implementation dependant field element. |
| fe1 | A pointer to an initialized implementation dependant field element. |
| fe2 | A pointer to an initialized implementation dependant field element. |
Implemented in chip::Crypto::Spake2p_P256_SHA256_HKDF_HMAC.
|
pure virtual |
Write a field element in big-endian format.
| fe | The field element to write. |
| out | The output buffer. |
| out_len | The length of the output buffer. |
Implemented in chip::Crypto::Spake2p_P256_SHA256_HKDF_HMAC.
| CHIP_ERROR chip::Crypto::Spake2p::GenerateKeys | ( | ) |
| CHIP_ERROR chip::Crypto::Spake2p::GetKeys | ( | uint8_t * | out, |
| size_t * | out_len | ||
| ) |
Return the shared secret.
| out | The output secret. |
| out_len | The output secret length. |
|
protectedpure virtual |
Hash in_len bytes of in into the internal hash context.
| in | The input buffer. |
| in_len | Size of the input buffer in bytes. |
Implemented in chip::Crypto::Spake2p_P256_SHA256_HKDF_HMAC.
|
protectedpure virtual |
Return the hash.
| out | Output buffer. The size is implicit and is determined by the hash used. |
Implemented in chip::Crypto::Spake2p_P256_SHA256_HKDF_HMAC.
| CHIP_ERROR chip::Crypto::Spake2p::Init | ( | const uint8_t * | context, |
| size_t | context_len | ||
| ) |
Initialize Spake2+ with some context specific information.
| context | The context is arbitrary but should include information about the protocol being run, contain the transcript for negotiation, include the PKBDF parameters, etc. |
| context_len | The length of the context. |
|
protectedpure virtual |
Initialize underlying implementation curve, points, field elements, etc.
The implementation needs to:
Initialize each of the points below and set the relevant pointers on the class: a. M b. N c. G d. X e. Y f. L g. Z h. V
As an example: this.M = implementation_alloc_point();
Implemented in chip::Crypto::Spake2p_P256_SHA256_HKDF_HMAC.
| CHIP_ERROR chip::Crypto::Spake2p::InternalHash | ( | const uint8_t * | in, |
| size_t | in_len | ||
| ) |
|
protectedpure virtual |
Derive an key of length out_len.
| ikm | The input key material buffer. |
| ikm_len | The input key material length. |
| salt | The optional salt. This may be NULL. |
| salt_len | The size of the salt in bytes. |
| info | The info. |
| info_len | The size of the info in bytes. |
| out | The output key |
| out_len | The output key length |
Implemented in chip::Crypto::Spake2p_P256_SHA256_HKDF_HMAC.
| CHIP_ERROR chip::Crypto::Spake2p::KeyConfirm | ( | const uint8_t * | in, |
| size_t | in_len | ||
| ) |
Confirm that each party computed the same keys.
| in | The peer second round Spake2+ contribution. |
| in_len | The peer second round Spake2+ contribution length. |
|
protectedpure virtual |
Generate a message authentication code.
| key | The MAC key buffer. |
| key_len | The size of the MAC key in bytes. |
| in | The input buffer. |
| in_len | The size of the input data to MAC in bytes. |
| out | The output MAC buffer. Size is implicit and is determined by the hash used. |
Implemented in chip::Crypto::Spake2p_P256_SHA256_HKDF_HMAC.
|
protectedpure virtual |
Verify a message authentication code.
| key | The MAC key buffer. |
| key_len | The size of the MAC key in bytes. |
| mac | The input MAC buffer. |
| mac_len | The size of the MAC in bytes. |
| in | The input buffer to verify. |
| in_len | The size of the input data to verify in bytes. |
Implemented in chip::Crypto::Spake2p_P256_SHA256_HKDF_HMAC.
|
pure virtual |
Scalar multiplication with addition, R = fe1 * P1 + fe2 * P2.
| R | Resultant point |
| P1 | Input point |
| fe1 | Input field element. |
| P2 | Input point |
| fe2 | Input field element. |
Implemented in chip::Crypto::Spake2p_P256_SHA256_HKDF_HMAC.
|
pure virtual |
Multiply a point by the curve cofactor.
| R | Input/Output point to point_invert |
Implemented in chip::Crypto::Spake2p_P256_SHA256_HKDF_HMAC.
|
pure virtual |
Point inversion.
| R | Input/Output point to point_invert |
Implemented in chip::Crypto::Spake2p_P256_SHA256_HKDF_HMAC.
|
pure virtual |
Implemented in chip::Crypto::Spake2p_P256_SHA256_HKDF_HMAC.
|
pure virtual |
Load a point from 0x04 || X || Y format.
| in | Input buffer |
| in_len | Input buffer length |
| R | A pointer to an initialized implementation dependant point. |
Implemented in chip::Crypto::Spake2p_P256_SHA256_HKDF_HMAC.
|
pure virtual |
Scalar multiplication, R = fe1 * P1.
| R | Resultant point |
| P1 | Input point |
| fe1 | Input field element. |
Implemented in chip::Crypto::Spake2p_P256_SHA256_HKDF_HMAC.
|
pure virtual |
Write a point in 0x04 || X || Y format.
| R | A pointer to an initialized implementation dependant point. |
| out | Output buffer |
| out_len | Length of the output buffer |
Implemented in chip::Crypto::Spake2p_P256_SHA256_HKDF_HMAC.
| CHIP_ERROR chip::Crypto::Spake2p::WriteMN | ( | ) |
|
protected |
| const void* chip::Crypto::Spake2p::G |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
| void* chip::Crypto::Spake2p::L |
| void* chip::Crypto::Spake2p::M |
| void* chip::Crypto::Spake2p::N |
| void* chip::Crypto::Spake2p::order |
|
protected |
|
protected |
|
protected |
| void* chip::Crypto::Spake2p::tempbn |
| void* chip::Crypto::Spake2p::V |
| void* chip::Crypto::Spake2p::w0 |
| void* chip::Crypto::Spake2p::w1 |
| void* chip::Crypto::Spake2p::X |
| void* chip::Crypto::Spake2p::xy |
| void* chip::Crypto::Spake2p::Y |
| void* chip::Crypto::Spake2p::Z |