--- layout: post title: Aperture 2 and NEF RAW Recipies tags: - Aperture - Aperture 2 - Apple Aperture - Articles - d2h - NEF RAW - Nikon - Nikon Capture NX2 - white balance status: publish type: post published: true meta: _edit_lock: "1245708357" _edit_last: "2" dsq_thread_id: "370594458" --- A quick follow up to the NEF matching post from a few days ago. Even though there were about 700 (exaggeration) downloads of the NEF files that I posted only one person shared their recipe and it was pretty close. As promised here is my recipe for the D2H/s.  Having said that I have found that a couple of things seem to be generally true for every Nikon NEF I have processed in Aperture 2. I specifically say Aperture 2 because it is way different (better) than Aperture 1 and 1.5. To match Capture NX or NX2 NEF files generally need:
[download#6]
.
JPG rendered by NX2
JPG rendered by Aperture2 with the settings described above.
JPG rendered by Aperture2 with default settings.
Here is the bottom line - I would never want to pooh-pooh those out there that love the way NX2 processes their NEF RAW file but I feel that you can get similar results and sometimes better results with Aperture. Not quite as convenient and you do need to play around with recipes when you get a new Nikon body but if you keep a project file filled with "prototype" images with the baseline settings that you like the pain can be minimized without resorting to a really convoluted and inefficient work-flow. Heck I want Apple to do a better job. I want the camera profiles that Lightroom2 now has but I am not willing to give up all of the things that I love about Aperture2.
Let me know your thoughts and if you have a simpler or more accurate approach feel free to share it. Based on the number of emails that I get from Nikon shooters about this subject I am confident that any thoughts or opinions will be appreciated by everyone.
Happy Holidays
RB


| Library: | Arithmetic |
| Introduced: | 2.0 Beta 11 |
| Appearance: |
This component subtracts values coming in via the west inputs (the upper minus the lower) and outputs the difference on the east output. The component is designed so that it can be cascaded with other subtractors to provide subtract more bits than is possible with a single subtractor: The borrow-in input provides a one-bit value to be borrowed out of the difference (if the borrow-in input is specified), and a borrow-out output indicates whether the component needs to borrow an upper-order bit to complete the subtraction without underflow (assuming unsigned subtraction).
Internally, the subtractor simply performs a bitwise NOT on the subtrahend, and add this to the minuend along with the NOT of the borrow-in input. (The minuend is the first operand (upper input) to the subtraction, and the subtrahend is the second (lower input). I happen to like the antiquated terms.)
If either of the operands contains some floating bits or some error bits, then the component will perform a partial subtraction. That is, it will compute as many low-order bits as possible. But above the floating or error bit, the result will have floating or error bits.
When the component is selected or being added,
Alt-0 through Alt-9 alter its Data Bits
attribute.
None.
None.


What is Living documentation
Serenity BDD is more than a library that generates test reports. That is, while you can use Serenity BDD to produce great test reports just fine, the real goal of Serenity BDD is to produce living documentation for your product.
But what do we mean by "living documentation"? Living Documentation is a concept that comes from the world of Behaviour Driven Development. It is closely related to the idea of Executable Specifications. Living documentation is, as the name suggests, both documentation, and living.
-
It is documentation, because it describes how an application works, and what business rules it applies, in a way that normal users can understand. Well written living documentation can be used by new team members to understand what a product does, and how it works. It can be handed over to a maintenance team when the application goes into production, or it can be used as evidence for auditors to show that the application respects the relevant rules and regulations.
-
It is living, because it is generated by the automated test suite, and is therefore by definition it is always up-to-date.
In a Serenity BDD report, you can find the Living Documentation in the Requirements
tab.
Living Documentation and Test Reporting
Living Documentation should not be confused with conventional test reporting. There are a number of important differences, and understanding these differences makes it easier to write good quality living documentation.
Timing
Conventional test reports are designed and generated fairly late in the development process, typically once features have been delivered and the automated tests written. Testers will often start preparatory work on test cases once the specifications or user stories are finalised, but test reports are still an activity that happens later rather than earlier in the development process.
For a team practicing BDD, on the other hand, the work on Living Documentation starts much earlier. Teams practicing BDD will work together with product owners to define acceptance criteria for the stories to be developed, and these acceptance criteria will form the basis for the automated acceptance tests and for the living documentation that is generated with each build.
Authors
Test Reports are the responsibility of QA; testers are usually the ones who design the report structure (if any design is done) and generate the test reports.
Living Documentation, on the other hand, is written collaboratively by many different actors: BAs, developers, testers and product owners all play key roles in the BDD requirements discovery process, and help, together, to express the business needs in a form that can be executed as automated acceptance tests.
Audience and Language
Testers are also the primary consumers of test reports. In many projects, other team members will only ever see test report summaries or overviews.
Living Documentation is for the whole team. It describes what the application should do before a feature is implemented (in the form of pending scenarios), and demonstrates that the implemented feature behaves as expected (in the form of passing scenarios). For this reason, living documentation scenarios need to be written in business terms, in a way that is easily understandable by non-testers.
Purpose and scope
Produced by testers and for testers, a test report naturally has a very strong testing focus. The emphasis is primarily on knowing whether a test passes or fails, and, at a higher level, knowing what proportion of tests pass or fail.
Living Documentation is more like a very detailed illustrated user manual. The focus is about describing what the application does, in business terms.
For example, a scenario in a test report might be interested in checking whether all of the countries appear in a country drop-down list on a user registration page. A scenario appearing in a living documentation report would be more interested in describing the user registration process as a whole, and demonstrating how it works for different types of users, and what business constraints or limitations apply to the choice of countries.
These differences can be summed up in the following table:
| Test Reports | Living Documentation |
|---|---|
Produced after development is done |
Written before development starts |
Written by testers |
Written collaboratively by the whole team |
Written mostly for testers |
For the whole team and beyond |
Reports on passing and failing tests |
Describes worked examples of functionality |
Living Documentation and other types of tests
Living Documentation is designed to work together with lower-level unit and integration testing to provide a high degree of confidence in the quality of the application. Living documentation will generally focus on key examples of positive and negative paths through the application, and leave the more exhaustive testing to the unit test layers.
In highly regulated environments, on the other hand, living documentation will often be more exhaustive and detailed, as it may be used for audits or regulatory reporting.
Organising requirements for living documentation
In Serenity BDD, living documentation is organised in a requirements hierarchy. This hierarchy is usually implemented as a directory tree (for JBehave and Cucumber) or as a package structure (for JUnit).
Common Requirements Structures
The exact organisation varies from project to project, but some common structures include:
-
Capabilities > Features
-
Capabilities > Features > Stories
-
Goals > Capabilities > Features
-
Epics > Stories
-
Themes > Epics > Stories
A two-level requirements hierarchy works well for most projects. A small project (for example, a micro-service) might need only a short list of features. Only very large or complex projects would typically need three or more levels.
Goals, Capabilities and Features
The aim of any software project is to help our stakeholders achieve their goals by providing them with capabilities. In BDD, a Capability is something that allows users to do something that they couldn’t do previously, or to do something that they could do previously, but do it more efficiently. A capability is technology-agnostic: it does not commit to a particular solution or implementation. An example of a capability might be the ability to pay online with a credit card.
A Feature is a concrete solution or implementation that delivers a capability. Some possible features that deliver the capability we mentioned earlier might be to pay via PayPal, via Stripe or to pay by integrating with a merchant banking platform.
Themes and Epics
In Scrum, an Epic is simply a big user story, one that can’t be delivered in a sprint. A Theme is just another way to group related User Stories, though many teams use Themes as groups of related epics. (Another way to implement the original idea of themes in Serenity BDD is to use tags).
User Stories
User Stories are commonly used in Agile as a way to organise work, but they are not always very useful when it comes to Living Documentation. This is because they reflect how a feature was sliced That’s why Cucumber prefers to group scenarios in Feature Files (which describe a feature). JBehave still uses the older convention of "Story Files", which were meant to contain the acceptance criteria of a given story).
Configuring your requirements structure in Serenity BDD
You can configure the way Serenity names the different levels in your own requirements structure using the serenity.requirements.types
property. For example, if you want to describe your requirements in terms of themes, epics and stories, you would add the following to your Serenity configuration file:
serenity.requirements.types=theme,epic,story
If you don’t configure this parameter, Serenity will decide on a sensible default hierarchy. This hierarchy depends on whether you are using JUnit, Cucumber or JBehave, and on the depth of your requirements hierarchy:
| Test Framework | Default Hierarchy |
|---|---|
JUnit |
capability > feature > story |
Cucumber |
theme > capability > feature |
JBehave |
capability > feature > story |
Requirements configuration applies to the container levels, not to the feature or story files themselves. If you are using Cucumber, feature files will always be represented as features. If you are using JBehave, story files will always be represented as stories.
Requirements Hierarchies for JUnit Tests
Many teams write automated acceptance tests with Serenity BDD using JUnit. The Screenplay Pattern in particular makes it easy to write highly maintainable tests using a business-readable DSL that produces excellent living documentation.
JUnit acceptance tests should be organised in a package structure that reflects your requirements hierarchy. Note that this means that they may not reflect the package structure in your application, as is usually done for unit and integration tests.
A simple two-level hierarchy is illustrated here:
com └── acme └── myapps └── specs ├── multiple_todo_lists ├── sharing_lists └── simple_todo_lists ├── AddingNewItems.java ├── DeletingItems.java ├── FilteringItemsByStatus.java └── MarkingItemsAsComplete.java
You need to tell Serenity where to find the requirements hierarchy in your package structure, using the serenity.test.root
property. For the example shown above, the root package is com.acme.myapp.specs
:
serenity.test.root=com.acme.myapp.specs
In this case, the Serenity living documentation will treat the JUnit test cases ("Adding New Items", "Deleting Items" etc.) as Stories, and the packages directly underneath the com.acme.myapp.specs
package ("Multiple Todo Lists", "Sharing Lists" etc.) as Features.
Requirements Hierarchies for Cucumber
When you use Cucumber, Serenity expects your feature files to be stored in the src/test/resources/features
directory. Your requirements hierarchy goes directly underneath this directory:
src └── test └── resources └── features ├── multiple_todo_lists ├── sharing_lists └── simple_todo_lists ├── adding_new_items.feature ├── deleting_items.feature ├── filtering_items_by_status.feature └── marking_items_as_complete.feature
When Cucumber is used with the default configuration, the feature files always represent Features, and the directories containing the features represent Capabilities. A Feature is typically bigger than a user story, and can contain the acceptance criteria (scenarios) from several user stories.
Requirements Hierarchies for JBehave
When you use JBehave, Serenity expects your Story files to be stored in the src/test/resources/stories
directory. Your requirements hierarchy goes directly underneath this directory:
src └── test └── resources └── stories ├── multiple_todo_lists ├── sharing_lists └── simple_todo_lists ├── adding_new_items.story ├── deleting_items.feature ├── filtering_items_by_status.story └── marking_items_as_complete.story
By default the Story files represent stories, and the directories above them are rendered as Features.
Adding more details
You can add a special markdown file called overview.md
at any level in the requirements hierarchy. This file will be rendered on the corresponding page in the Requirements report.
An overview.md
file placed in the root requirements directory (src/test/resources/features
or src/test/resources/stories
) will be rendered on the Requirements home page in the report. Overview files can also be called narrative.md
or narrative.txt
(a convention used in older versions of Serenity).
Markdown (https://daringfireball.net/projects/markdown/) is a convenient lightweight format that you can use to make your living documentation more readable. An example of a simple Markdown overview file is shown here:
## A fantastic Todo application.
This application lets you do **great things**, like:
* Add new todo items
* Mark your items as complete
* Share your todo lists with your friends
If you place this overview.md
file in the requirements root directory, the generated report will include this text on the main Requirements page:
Report assets
You can also include images in the overview.md
files. By default, Serenity will copy any files in the src/test/resources/assets
directory into the target/site/serenity/assets
directory when it generates the reports.
You can place any images you want to include in your living documentation here, and then refer to them using the Markdown image syntax, like this:
The application architecture is as shown below:
![Application architecture ](assets/architecture.png)
This image would then appear in your reports, as illustrated here:
If you need to override the location of the assets
directory, you can do so using the report.assets.directory
property, as shown here:
report.assets.directory=src/test/resources/my-special-resources
Note that the target directory in the target/site/serenity
directory will always be called assets
.


--- subject: following --- TAKE $20 OFF Your $120* purchase at POPJULIA as a special thanks. Simply CLICK HERE where that discount code will automatically be applied to your shopping cart. NEW IN> CLOTHES > SHOES > SALE > If you no longer wish to receive our fashion news ,please Unsubscribe If you have any questions or queries,Please contact us at<EMAIL_ADDRESS>Your $120* purchase at POPJULIA as a special thanks.
Simply CLICK HERE where that discount code will automatically be applied to your shopping cart.


3 Domain Specific Languages
Domain Specific Languages allow developers to tailor their application to a particular domain. There are many language features that, when used in combination, can aid developers to write Domain Specific Languages. In this chapter we will focus on how macros and module attributes can be used together to create domain specific modules that are focused on solving one particular problem. As an example, we will write a very simple module to define and run tests.
The goal is to build a module named TestCase
that allows us to write the following:
defmodule MyTest do
use TestCase
test "arithmetic operations" do
4 = 2 + 2
end
test "list operations" do
[1, 2, 3] = [1, 2] ++ [3]
end
end
MyTest.run
In the example above, by using TestCase
, we can write tests using the test
macro, which defines a function named run
to automatically run all tests for us. Our prototype will simply rely on the match operator (=
) as a mechanism to do assertions.
3.1 The test
macro
Let's start by creating a module that simply defines and imports the test
macro when used:
defmodule TestCase do
# Callback invoked by `use`.
#
# For now it simply returns a quoted expression that
# imports the module itself into the user code.
@doc false
defmacro __using__(_opts) do
quote do
import TestCase
end
end
@doc """
Defines a test case with the given description.
## Examples
test "arithmetic operations" do
4 = 2 + 2
end
"""
defmacro test(description, do: block) do
function_name = String.to_atom("test " <> description)
quote do
def unquote(function_name)(), do: unquote(block)
end
end
end
Assuming we defined TestCase
in a file named tests.exs
, we can open it up by running iex tests.exs
and define our first tests:
iex> defmodule MyTest do
...> use TestCase
...>
...> test "hello" do
...> "hello" = "world"
...> end
...> end
For now we don't have a mechanism to run tests, but we know that a function named "test hello" was defined behind the scenes. When we invoke it, it should fail:
iex> MyTest."test hello"()
** (MatchError) no match of right hand side value: "world"
3.2 Storing information with attributes
In order to finish our TestCase
implementation, we need to be able to access all defined test cases. One way of doing this is by retrieving the tests at runtime via __MODULE__.__info__(:functions)
, which returns a list of all functions in a given module. However, considering that we may want to store more information about each test besides the test name, a more flexible approach is required.
When discussing module attributes in earlier chapters, we mentioned how they can be used as temporary storage. That's exactly the property we will apply in this section.
In the __using__/1
implementation, we will initialize a module attribute named @tests
to an empty list, then store the name of each defined test in this attribute so the tests can be invoked from the run
function.
Here is the updated code for the TestCase
module:
defmodule TestCase do
@doc false
defmacro __using__(_opts) do
quote do
import TestCase
# Initialize @tests to an empty list
@tests []
# Invoke TestCase.__before_compile__/1 before the module is compiled
@before_compile TestCase
end
end
@doc """
Defines a test case with the given description.
## Examples
test "arithmetic operations" do
4 = 2 + 2
end
"""
defmacro test(description, do: block) do
function_name = String.to_atom("test " <> description)
quote do
# Prepend the newly defined test to the list of tests
@tests [unquote(function_name)|@tests]
def unquote(function_name)(), do: unquote(block)
end
end
# This will be invoked right before the target module is compiled
# giving us the perfect opportunity to inject the `run/0` function
@doc false
defmacro __before_compile__(env) do
quote do
def run do
Enum.each @tests, fn name ->
IO.puts "Running #{name}"
apply(__MODULE__, name, [])
end
end
end
end
end
By starting a new IEx session, we can now define our tests and run them:
iex> defmodule MyTest do
...> use TestCase
...>
...> test "hello" do
...> "hello" = "world"
...> end
...> end
iex> MyTest.run
Running test hello
** (MatchError) no match of right hand side value: "world"
Although we have overlooked some details, this is the main idea behind creating domain specific modules in Elixir. Macros enable us to return quoted expressions that are executed in the caller, which we can then use to transform code and store relevant information in the target module via module attributes. Finally, callbacks such as @before_compile
allow us to inject code into the module when its definition is complete.
Besides @before_compile
, there are other useful module attributes like @on_definition
and @after_compile
, which you can read more about in the docs for the Module
module. You can also find useful information about macros and the compilation environment in the documentation for the Macro
module and Macro.Env
.


SweetFreeStuff.com
///////////////////////////////////////////
Win a Aveda Invati Sample Set
Posted: 25 Oct 2013 11:00 AM PDT
http://feedproxy.google.com/&;r/SweetFreeStuff/&;3/g-rXhjwuIaA/?utm_source=feedburner&utm_medium=email
Enter to win 1 of 10,000 Aveda Invati Sample Sets containing 10ml sizes of
shampoo, conditioner and revitalizer. Twenty of the 10,000 winners will
then be selected to receive a full size Invati System Set.
The post Win a Aveda Invati Sample Set appeared first on SweetFreeStuff.com.
///////////////////////////////////////////
Free Crystal Stud Earrings
Posted: 25 Oct 2013 04:24 AM PDT
http://feedproxy.google.com/&;r/SweetFreeStuff/&;3/LL1RUS8L5xk/?utm_source=feedburner&utm_medium=email
For new members.
The post Free Crystal Stud Earrings appeared first on SweetFreeStuff.com.
///////////////////////////////////////////
Free Sample of Obis One Black Garlic
Posted: 25 Oct 2013 03:33 AM PDT
http://feedproxy.google.com/&;r/SweetFreeStuff/&;3/UO94h91oxvA/?utm_source=feedburner&utm_medium=email
Sign up for their mailing list on the left side of the page for a Free
Sample of Obis One Black Garlic.
The post Free Sample of Obis One Black Garlic appeared first on
SweetFreeStuff.com.
///////////////////////////////////////////
Free Disney Cruise Line Vacation Planning DVD
Posted: 25 Oct 2013 01:07 AM PDT
http://feedproxy.google.com/&;r/SweetFreeStuff/&;3/AdsWs3AMaSY/?utm_source=feedburner&utm_medium=email
Receive your Free Disney Cruise Line Vacation Planning DVD, Online DVD
and/or e-Brochure.
The post Free Disney Cruise Line Vacation Planning DVD appeared first on
SweetFreeStuff.com.
///////////////////////////////////////////
Free Sample of Katy Perry Killer Queen Fragrance
Posted: 24 Oct 2013 11:00 PM PDT
http://feedproxy.google.com/&;r/SweetFreeStuff/&;3/z7BkKagVDuI/?utm_source=feedburner&utm_medium=email
Like their Facebook page and complete the form. Free Katy Perry Killer
Queen Fragrance Sample
The post Free Sample of Katy Perry Killer Queen Fragrance appeared first on
SweetFreeStuff.com.
///////////////////////////////////////////
Earn Cash and Prizes for Scanning Purchases - NCP
Posted: 24 Oct 2013 12:01 AM PDT
http://feedproxy.google.com/&;r/SweetFreeStuff/&;3/VeF6Kh3Dua8/?utm_source=feedburner&utm_medium=email
Earn Free Cash and Prizes from National Consumer Panel Click Here to Sign
up! As a panel member, the National Consumer Panel will provide you with a
hand-held scanner. Every time you or members of your household shop, youll
use the scanner to scan the barcodes on all of your purchases. Then, once a
[]
The post Earn Cash and Prizes for Scanning Purchases NCP appeared first on
SweetFreeStuff.com.
///////////////////////////////////////////
Yogi Well Wishes Free Sample
Posted: 23 Oct 2013 11:00 PM PDT
http://feedproxy.google.com/&;r/SweetFreeStuff/&;3/qHFICTlikxE/?utm_source=feedburner&utm_medium=email
Brighten someones day with a Yogi Well-Wish. Choose a complimentary pair of
Yogi teas to share with a friend and well send them with a personalized
message from you. Free Yogi Tea Samples
The post Yogi Well Wishes Free Sample appeared first on SweetFreeStuff.com.
///////////////////////////////////////////
Free Bandana from Marlboro
Posted: 23 Oct 2013 10:01 PM PDT
http://feedproxy.google.com/&;r/SweetFreeStuff/&;3/vXN2YCZcyL4/?utm_source=feedburner&utm_medium=email
Login or register. Check your offers to see if if there are any bandanas
left. They are giving out 2,000 a day at noon until October 31st. If you
dont get one today, you can try again tomorrow. Free Bandana
The post Free Bandana from Marlboro appeared first on SweetFreeStuff.com.
///////////////////////////////////////////
Free Twinings Tea Samples
Posted: 23 Oct 2013 10:00 PM PDT
http://feedproxy.google.com/&;r/SweetFreeStuff/&;3/16507jrhdVg/?utm_source=feedburner&utm_medium=email
Scroll to the bottom of the page and select which samples you would like to
try.
The post Free Twinings Tea Samples appeared first on SweetFreeStuff.com.


| DOSE: |
160 mg |
oral |
DiPT |
(capsule) |
Last week I decided to try some Dipt I had acquired. Being my first time with the substance, I didn't know how to eyeball a dosage. I proceeded to split my DiPT into two capsules. Both looked like small level AMT dosages (40-60mg).
At around 5pm I ate one of the capsules. At 6:30 I still wasn't feeling any real effects (no sound distortions), so I ate the second pill. At 7:30 the trip started to set in pretty strong. Voices started to sound deeper and metallic. Every voice sounded the same. I felt extremely high and had a very hard time comprehending anything. Lights began to come from all around. An iridescent 'smoke' (kinda hard to describe) began to surround me.
By 8pm I had lost almost all touch with reality. My body was completely numb. I had hit the peak, which lasted till about 10pm. It felt like a 2 hour DMT rush. Thoughts flew through my head. Sounds were plentiful but I couldnt distinguish sounds from within my house from those outside, or those within my head. I couldnt move, aside from twitching around in my bed. I was pretty scared.
My girlfriend came over at midnight. I was still tripping hard (alot of visuals, sounds were still distorted as they were when my trip began). I could cope at this point. At about 3am most of the trip had subsided. To this day I still get very spacy whenever I smoke some pot. It seems like this substance could have great potential in the proper dosage.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


SDK'S
C# SDK
Alexandria
Alexandria.NET library for SophiaTX blockchain
Table of Contents
Install-DotNetApi
-
As a prerequisite for the nuget package to work, please have openssl installed on your machine (download openssl and install on Windows environment using https://slproweb.com/products/Win32OpenSSL.html) (“brew install openssl” on Mac environment)
-
Get the latest nuget package from nuget.org (https://www.nuget.org)
-
Please select the package depending on your platform requirements 64 or 32 (x86) bit.
-
Add the nuget package into the project (using Nuget Package Manager)
-
Rebuild the project and use the below mentioned functions to get connected with SophiaTX Blockchain
Create Connection-DotNetApi
protected readonly SophiaClient _client = new SophiaClient(IpAddress, DemonPort, WalletPort);
Library Functions-DotNetApi
Details-DotNetApi
Get Feed History
_client.Transaction.GetFeedHistory(CurrencySymbol);
Get details about the Blockchain
_client.Transaction.About();
Get a list of functions and How-To available on the sophia blockchain
_client.Transaction.Help();
Get recent transaction and block information on the blockchain
_client.Transaction.Info();
Get block infromation using blockId
_client.Transaction.GetBlock(blockNumber);
Get operations from a block
_client.Transaction.GetOpsInBlock(blockNumber, onlyVirtual);
Get Transaction details
var trx=_client.Transaction.GetTransaction(transactionId);
Keys-DotNetApi
Generate Private Key and Public Key pair
_client.Key.GeneratePrivateKey(new byte[51], new byte[53]);
Get public key using private key
_client.Key.GetPublicKey(privateKey, new byte[53]);
Cryptography-DotNetApi
Encrypt Memo with private key and receiver’s public key for sending secure data across the blockchain
_client.Key.EncryptMemo(memo, PrivateKey, PublicKey2, new byte[1024]);
Decrypt the received using private key and sender’s public key
_client.Key.DecryptMemo(encryptedMemo, PrivateKey2, PublicKey, new byte[1024]);
Send JSON data to list of recepients
var test = "{\"new_book_name\":\"test9999\"}";
var data = new SenderData
{
AppId = 2,
PrivateKey = PrivateKey,
Recipients = new List<string> {accountName1, acocuntName2},
Sender = accountName,
JsonDoc = test
};
_client.Data.SendJson(data);
Send plain text to list of recepients
var data = new SenderData
{
AppId = 2,
PrivateKey = PrivateKey,
Recipients = new List<string> {accountName1, acocuntName2},
Sender = accountName,
BinaryDoc = memo
};
_client.Data.SendBinary(data);
Send JSON data to list of recipients asynchronously
var test = "{\"new_book_name\":\"test9999\"}";
var data = new SenderData
{
AppId = 2,
PrivateKey = PrivateKey,
Recipients = new List<string> {accountName1, acocuntName2},
Sender = accountName,
JsonDoc = test
};
_client.Data.SendJsonAsync(data);
Send plain text to list of recipients asynchronously
var data = new SenderData
{
AppId = 2,
PrivateKey = PrivateKey,
Recipients = new List<string> {accountName1, acocuntName2},
Sender = accountName,
BinaryDoc = memo
};
_client.Data.SendBinaryAsync(data);
List recieved documents, sorted depending on the search type, start(ISOTimeStamp)
_client.Data.Receive(AppID, accountName, SearchType, start, numberOfEntries);
Accounts-DotNetApi
Create account using private key. Same public key can be used for all three keys required to create accoun.
Seed, can be any unique value string (have atleast 3 digits and no special characters ($, £, #, etc.)) for genrating new account name.
Creator, is an account with enough balance to pay for account creation.
_client.Account.CreateAccount(seed, jsonData, ownerKey, activeKey, memoKey, creator, creatorPrivateKey);
Get account details
_client.Account.GetAccount(accountName);
Delete account
_client.Account.DeleteAccount(accountName, PrivateKey);
Update account keys and JSON details
_client.Account.UpdateAccount(accountName, jsonData, ownerKey, activeKey, memoKey, privateKey);
Get account history
_client.Account.GetAccountHistory(accountName, from, limit);
Get account name from seed (used to create account)
_client.Account.GetAccountNameFromSeed(accountName);
Get account vesting balance
_client.Account.GetVestingBalance(accountName);
Get account balance
_client.Account.GetAccountBalance(accountName);
Check if account still exists
_client.Account.AccountExists(accountName);
Get account authority key
_client.Account.GetActiveAuthority(accountName);
Get account memo key
_client.Account.GetMemoKey(accountName);
Get account owner key
_client.Account.GetOwnerAuthority(accountName);
Create simple multi-signature authority
var pubkeys = new List<string> {publicKey1, publicKey2};
_client.Account.CreateSimpleMultisigAuthority(pubkeys, requiredSignatures);
Create simple managing authority
_client.Account.CreateSimpleManagedAuthority(managingAccountName);
Create simple multi-signature managing authority
var pubkeys = new List<string> {publicKey1, publicKey2};
_client.Account.CreateSimpleMultiManagedAuthority(pubkeys, requiredSignatures);
Transactions-DotNetApi
Transfer amount (argument in the format “250000.00 SPHTX”) from one to other account
_client.Asset.Transfer(accountName, beneficiaryAccountName, amount, memo, privateKey);
Withdraw amount (argument in the format “250000.00 SPHTX”) vesting account balance
_client.Asset.WithdrawVesting(acocuntName, ammount, PrivateKey);
Transfer amount to vesting account
_client.Asset.TransferToVesting(accountName, beneficiaryAccountName, amount, privateKey);
Witnesses-DotNetApi
Get Active Witnesses
_client.Witness.GetActiveWitnesses();
Get List of all witnesses
_client.Witness.ListWitnesses(witnessName, numberOfEntries);
Get details of a witness
_client.Witness.GetWitness(witnessName);
Become a witness, price feed example can be as
var feed1 = new List<PrizeFeedQuoteMessage>
{
new PrizeFeedQuoteMessage
{
Currency = "USD",
PrizeFeedQuote = new PrizeFeedQuote {Base = "1 USD", Quote = "0.152063 SPHTX"}
}
};
var feed2= new List<PrizeFeedQuoteMessage>
{
new PrizeFeedQuoteMessage
{
Currency = "EUR",
PrizeFeedQuote = new PrizeFeedQuote {Base = "1 EUR", Quote = "0.154988 SPHTX"}
}
};
var pricefeed=new List<List<PrizeFeedQuoteMessage>>{feed1,feed2};
_client.Witness.UpdateWitness(accountName, url, blockSigningKey, accountCreationFee, minimumBlockSize, pricefeed, privateKey);
Votes-DotNetApi
Set voting proxy
_client.Account.SetVotingProxy(accountName, proxyAccountName, PrivateKey);
Vote for a witness
_client.Witness.VoteForWitness(accountName, witnessName, voteType, privateKey);
Applications-DotNetApi
Create application (the price parameter that specifies billing for the app (1 or 0))
_client.Application.CreateApplication(accountName, applicationName, URL, jsonData, priceParam, PrivateKey);
Update application
_client.Application.UpdateApplication(accountName, applicationName, URL, jsonData, priceParam, PrivateKey);
Delete application
_client.Application.DeleteApplication(accountName, applicationName, PrivateKey);
Buy Application
_client.Application.BuyApplication(accountName, appId, PrivateKey);
Cancel Application purchase
_client.Application.CancelApplicationBuying(sellerAccountName, buyerAccountName, appId, PrivateKey);
Get a list of all bought application and sorting is done depending on search type (bySeller or byBuyer)
_client.Application.GetApplicationBuyings(accountName, SearchType, numberOfEntries);
Get details of list of applications
var names = new List<string>{applicationName1, applicationName2};
_client.Application.GetApplications(names);
Daemon Methods-DotNetApi
Call methods from different Api.
var args = new argumentObject(){};
_client.Transaction.CallPlugin(ApiName,MethodName,args);
Javascript SDK
Alexandria.js
Alexandria.js API library for SophiaTX Blockchain
Table of Contents
- Install
- Help
- Details
- Keys
- Cryptography
- Accounts
- Transaction
- Witness
- Voting
- Data Transmission
- Daemon Methods
Install-JsApi
git clone https://github.com/SophiaTX/Alexandria.js.git
npm install
npm run build
<script src="../dist/alexandria.min.js"></script>
or, use the new updated sophiatx-alexandria-api, npm module to run the project
npm install sophiatx-alexandria-api --save
let sophia=require('sophiatx-alexandria-api');
Connect to http services
sophia.api.setOptions({url: httpConnectionUrl });
Help-JsApi
Get the current version and information about the blockchain
sophia.api.about(function(err, response){
console.log(err, response);
});
Get the recent updates on the blockchain.
sophia.api.info(function(err, response){
console.log(err, response);
});
Get help to work with the blockchain, this returns all the method and necessary details about the blockchain its functionalities.
sophia.api.help(function(err, response){
console.log(err, response);
});
Details-JsApi
Get details about the block using block_id
sophia.api.getBlock(blockNumber,function(err, response){
console.log(err, response);
});
Get details of operations inside a block
sophia.api.getOpsInBlock(blockNumber,true,function(err, response){
console.log(err, response);
});
Check if the account still exists
sophia.api.accountExist(accountName,function(err, response){
console.log(err, response);
});
Get transaction history of an account from (-1 means most recent entry) and limit (number of data to be displayed)
sophia.api.getAccountHistory(accountName,from,limit,function(err, response){
console.log(err, response);
});
Get Account History filtered using its type (transfer, transfer_to_vesting, witness_update, account_create, account_delete,account_update, withdraw_vesting, vote, witness_update, transfer_to_vesting, account_witness_vote, account_witness_proxy, custom_json, custom_binary, etc.)
sophia.api.getAccountHistoryByType(accountName,type,from,limit,function(err, response){
console.log(err, response);
});
Get ActiveKey related to the account
sophia.api.getActiveAuthority(accountName,function(err, response){
console.log(err, response);
});
Get MemoKey related to the account
sophia.api.getMemoKey(accountName,function(err, response){
console.log(err, response);
});
Get OwnerKey related to the account
sophia.api.getOwnerAuthority(accountName,function(err, response){
console.log(err, response);
});
Get account balance of an account
sophia.api.getAccountBalance(accountName,function(err, response){
console.log(err, response);
});
Get account name using the seed(Any data string including uppercase,lowercase and numbers) used to create the account.
sophia.api.getAccountNameFromSeed(accountName,function(err, response){
console.log(err, response);
});
Get vesting balance of the account
sophia.api.getVestingBalance(accountName,function(err, response){
console.log(err, response);
});
Get feed history of the currency using its symbol
sophia.api.getFeedHistory(symbol,function(err, response){
console.log(err, response);
});
Keys-JsApi
Generates separate public key for each of the roles
console.log(sophia.auth.generateKeys(name,password));
Validates account name whether it can be set or not
console.log(sophia.utils.validateAccountName(accountName));
Generates public key and private key pair
console.log(sophia.auth.getPrivateKeys(name,password));
Checks the format of Public key and decides if it is valid with prefix
console.log(sophia.auth.isPubkey(publicKey,prefix));
Checks the format of Private key and decides if it is valid
console.log(sophia.auth.isWif(privateKey));
Returns public key on supplied Private key
console.log(sophia.auth.wifToPublic(privateKey));
Matches public key with private key returns boolean value
console.log(sophia.auth.wifIsValid(privateKey,publicKey));
Corrects the caps and spaces in distorted passPhrase (brainKey)
console.log(sophia.auth.normalizeBrainKey(passphrase));
Cryptography-JsApi
Use privateKey of sender’s account and publicKey of receiver’s account to encrypt the message
console.log(sophia.auth.encrypt(privateKey,publickey,Message));
Use publicKey of sender’s account and privateKey of receiver’s account to decrypt the message
console.log(sophia.auth.decrypt(privateKey,publicKey,EncryptedMessage));
Accounts-JsApi
Create account using seed(Any data string including uppercase,lowercase and numbers), creator as Witness’s name, Witness’s PrivateKey and user’s PublicKey as ActiveKey
sophia.api.createAccount(creatorName,seed,creatorPrivateKey,json_meta, owner, active, memo_key,function(err,response){
console.log(err,response);
});
Delete account using user’s PrivateKey
sophia.api.deleteAccount(accountName,privateKey,function(err,response){
console.log(err,response);
});
Update ActiveKey, OwnerKey, MemoKey and JsonMetadata of the account using user’s PrivateKey
sophia.api.updateAccount(accountName,jsonMeta,owner,active, memoKey,privateKey,function(err,response){
console.log(err,response);
});
Get account details
sophia.api.getAccount(accountName, function(err, response){
console.log(err, response);
});
Sponsor an account, isSponsored is a boolean value to enable and disable the sponsorship
sophia.api.sponsorAccountFees(sponsor,sponsored,isSponsored,privateKey,function(err, response){
console.log(err, response);
});
Transaction-JsApi
Transfer an amount (in the form of “amount (space) currencySymbol, 10.000 SPHTX”) to other account with a memo (receipt/details) attached to the transfer using Sender’s Priavtekey.
sophia.api.transfer(from, to, amount, memo,privateKey,function(err,response){
console.log(err,response);
});
Get transaction id using transaction object as an argument.
console.log(sophia.api.getTransactionId(transaction));
Transfer amount (in the form of “amount currencySymbol, 10.000 SPHTX”) to Vesting.
sophia.api.transferToVesting(from, to, amount,privateKey,function(err,response){
console.log(err,response);
});
Withdraw amount (in the form of “amount currencySymbol, 10.000 SPHTX”) from Vesting in fractions.
sophia.api.withdrawVesting(from,vestingShares,privateKey,function(err,response){
console.log(err,response);
});
Get transaction details using transaction id
sophia.api.getTransaction(transactionId,function(err, response){
console.log(err, response);
});
Witness-JsApi
Get list of Witnesses or miners
sophia.api.listWitnesses(startFromWitnessName,count,function(err, response){
console.log(err, response);
});
Get list of Witnesses by votes in descending order
sophia.api.listWitnessesByVote(startFromWitnessName,count,function(err, response){
console.log(err, response);
});
Get details about a Witness
sophia.api.getWitness(witnessName,function(err, response){
console.log(err, response);
});
Update witness is the function to update an existing account as a witness contender it needs prize feed update as an argument,
prizeFeed example ([["USD",{"base":"1 USD","quote":"0.187331 SPHTX"}]]
) can be used for testing,
blockSigningKey (publicKey format) is used to sign all the blocks. It also needs a description url, where the willing user can put detail about herself.
To become a witness the user must have at least 250,000 SPHTX tokens in her vesting account.
sophia.api.updateWitness(accountName, descriptionUrl, blockSigningKey, accountCreationFee, maximumBlockSizeLimit, prizeFeed, privateKey,function(err,response){
console.log(err,response);
});
Voting-JsApi
Set a proxy account for doing votes on behalf of first account.
sophia.api.setVotingProxy(accountToModify, proxy,privateKey,function(err,response){
console.log(err,response);
});
Vote for a witness using witness name and voter’s PrivateKey
sophia.api.voteForWitness(accountToVoteWith, accountToVoteFor, approve=true,privateKey,function(err,response){
console.log(err,response);
});
Data Transmission-JsApi
Get the list of received documents, it can be searched by by_sender, by_recipient,by_sender_datetime,by_recipient_datetime.
sophia.api.getReceivedDocuments(appId, accountName, searchType, start, count, function(err,response){
console.log(err,response);
});
Send binary data to the list of recipients (Secured/Encoded data could be transmitted using this function).
sophia.api.makeCustomBinaryOperation(appId, from, to, data, privateKey, function(err,response){
console.log(err,response);
});
Send JSON data to the list of recipients.
sophia.api.makeCustomJSONOperation(appId, from, to, data, privateKey, function(err,response){
console.log(err,response);
});
Daemon Methods-JsApi
Run other endpoint methods
sophia.api.callPlugin(pluginName,methodName,arguments,function(err, response){
console.log(err, response);
});


By Lars Lindahl. © 1999 Lars Lindahl.
Starring Tom Hanks, David Morse, Michael Duncan, Doug Hutchinson, James Cromwell, Bonnie Hunt, Patricia Clarkson, Barry Pepper, Michael Jeter, Sam Rockwell, Graham Greene, Jeffrey DeMunn, Dabbs Greer, Eve Brent, Harry Dean Stanton and Gary Sinise.
Directed by Frank Darabont
Written by Frank Darabont
Grade: ***1/2 (out of four)
It is simply amazing how "The Green Mile" developed in its three hour running time.  However, as the plot begins to progress, the film turns into pure perfection with outstanding performances and wonderful direction. Frank Darabont, who masterfully followed a prisoner's story in "The Shawshank Redemption", this time follows the perspective of a prison guard, Paul Edgecomb (Tom Hanks). Through Edgecomb's experiences on a cell block known as the green mile where death row prisoners wait and repent, the audience sees good and evil on both sides of the law. From an evil prison guard to an evil prisoner, "The Green Mile" is successful in creating sympathy for kind-hearted hard working guards and hard thinking prisoners. The plot follows Edgecomb and four other guards as they meet a variety of prisoners and after having strong relationships with each eventually are forced to execute them.
The performances by veterans and new comers to back up these original characters are superb. The ensemble acting in the film is perfect. Hanks, David Morse and Barry Pepper as guards are wonderful and are fitting for their roles. They are the characters we most relate to because of their calm less extreme roles. They are given the positions to make rational decisions at difficult times and they are the ones who fulfill the demands of the audience. The more unique characters perfectly create friction on the green mile and make the story interesting and exciting. Some particularly note worthy roles of the unique characters include Doug Hutchinson, Sam Rockwell, and Michael Duncan. Hutchinson, playing Percy Wetmore, a cowardly guard who hides his true feelings by tormenting others gives the greatest performance of the movie. Every time he appears on the screen, the attitude of others is very uncomfortable and the creepy expressions he is able to create are effectively terrifying. It would come as no surprise if Hutchinson was nominated for an Academy Award as best supporting actor, not only because he did a wonderful job as Wetmore, but also because he stole every scene he was in away from veteran Oscar winner Tom Hanks. Rockwell, an independent film veteran, plays his role as Wild Bill Wharton to perfection. As a prisoner who taunts and harasses the guards at all hours, he really gets under your skin and irritates you for having to watch him torture others. This irritation he creates makes his performance so believable. The last noteworthy performance belongs to Duncan, as the enormous convicted killer John Coffey who happens to hold the power of curing the ill. Duncan does a wonderful job playing a frightened child-like behemoth, very similar to Lennie Small in Of Mice and Men. His desire for love and the extinction of hate evokes the most compassion because it is very obvious that he is suffering for no just cause.
However, it takes over an hour for Duncan to be introduced completely in the film. The film opens with a ridiculous present day setting which contains a scene that jabs at "The Jerry Springer Show." The scene, containing one old man complaining about how all guests on the show are inbred and rednecks. Not only is this observation entirely pointless and out of place, but it is also hackneyed beyond all belief. As the film flashes back to 1935, Graham Greene is quickly executed without any introduction. His death seems very rushed and without any knowledge of who he is, the scene is neither sad nor convincing. Greene is not even given a final word, like some of the other characters, and we don't even see him walk the infamous green mile. However, as the film begins to specifically introduce more characters, such as Coffey and Eduard Delacroix (Michael Jeter) as well as the five prison guards, the film becomes more interesting. The speed in "The Green Mile" is perfect. If time was a matter of concern and the film was edited to the two hour mark, it would have been unsatisfactory because we would not be able to know the characters as they are or as they treat others. The three hour running is perfect for plot development and by the end of the film, a great amount of love or hate is attached to each character. "The Green Mile" is so good following the rough beginning, that when the pivotal moment at the very end finally comes, it is almost impossible not to feel some sort of sadness for every person in this scene. Fighting back tears was a difficult task that I barely succeeded in doing. If you survive the first third of "The Green Mile" sit back and enjoy the remainder for some priceless entertainment.
Grade: ***1/2 (out of four)
© 1999 Lars Lindahl
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


>>
<<
Usr
Pri
JfC
LJ
Phr
Dic
Voc
!:
Help
Primer
Table adverb
The dyad v/ computes a table for the verb v (a function table).
a =. i. 5
a +/ a NB. addition table
0 1 2 3 4
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8
a */ a NB. times table
0 0 0 0 0
0 1 2 3 4
0 2 4 6 8
0 3 6 9 12
0 4 8 12 16
0 1 +/ 0 1 NB. + table on booleans
0 1
1 2
0 1 +./ 0 1 NB. or
0 1
1 1
0 1 +:/ 0 1 NB. not-or
1 0
0 0
0 1 */ 0 1 NB. times
0 0
0 1
0 1 *./ 0 1 NB. and
0 0
0 1
0 1 *:/ 0 1 NB. not-and
1 1
1 0
The derived verb v/ has a left rank that is the left rank of v and a right rank of _ ; it applies v between each cell of the left argument and the entire right argument.
additiontable =. +/
The verb additiontable is defined as the result of the / adverb applied to + as an argument. The definition is the same as the definition for sumover that you used in the previous section. The name additiontable makes sense when the dyad is used, and sumover makes sense when the monad is used. Nothing prevents using either name in a misleading way.
a additiontable a
0 1 2 3 4
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8
The left rank of + is 0, so the rank of the derived verb is 0 and its cell arguments are atoms. The right rank of the derived verb is _ and its cell arguments are the entire right argument. Visually the above works as follows:
0 (first atom from left) + entire right gives 0 1 2 3 4
1 (next atom from left) + entire right gives 1 2 3 4 5
2 (next atom from left) + entire right gives 2 3 4 5 6
3 (next atom from left) + entire right gives 3 4 5 6 7
4 (next atom from left) + entire right gives 4 5 6 7 9
The following is an interesting use of table together with the plotting from an earlier section. The plot facility plots each row in a table argument as a separate series of data.
load 'plot'
plot 1 2 o. / 0.2 * i.60
'surface' plot 1 2 o. / 0.2 * i.60
The 1 from the left argument used as the left argument of o. gives sine values in the first row. The 2 from the left argument for o. gives cosine values in the second row.
In the examples above the left rank of the original verb is always 0 and so the cells of the left argument of the derived verb are simply the atoms of the left argument. Let's look at an example where the left rank of the original verb is not 0.
f =. ,"1
The verb f is append with a left and right rank of 1.
p=. 2 2 $'abcd'
p
ab
cd
q=.3 3$'ABCD'
q
ABC
DAB
CDA
p f/ q
abABC
abDAB
abCDA
cdABC
cdDAB
cdCDA
Visually:
ab (1st list from left) , entire right gives abABC
abDAB
abCDA
cd (next list) , entire right gives cdABC
cdDAB
cdCDA
>>
<<
Usr
Pri
JfC
LJ
Phr
Dic
Voc
!:
Help
Primer


An executor is responsible for driving a future to completion. It is typically handed an instance of a type that implements Future
– which might be the root of a sub-graph of futures – and is expected to drive the entire graph of futures till all of them have returned Poll::Ready
from their poll
functions.
Create a new library project like so:
cargo new --lib executor
We'll use Rust channels to co-ordinate work. Rust channels are an abstraction that allow 2 threads to safely pass messages between them. A channel has a sender half and a receiving half. Both the halves are connected to each other so that if one is destroyed then the other stops functioning – in other words, calls to send/receive messages will fail.
Channels can be bounded or unbounded. Bounded channels can be used to model backpressure. The channel in the standard library is a multiple-producer-single-consumer implementation. You can clone the sender half as many times as you like but you can have only one receiver.
Here's an example from the standard library documentation:
use std::thread;
use std::sync::mpsc::channel;
// Create a simple streaming channel
let (tx, rx) = channel();
thread::spawn(move|| {
tx.send(10).unwrap();
});
assert_eq!(rx.recv().unwrap(), 10);
We'll define a Task
type that represents a future that needs to run. The task will include a SyncSender
(the sender half of a bounded channel) that can be used to re-schedule the future in case it is not complete yet.
pub struct Task {
future: Mutex<Option<BoxFuture<'static, ()>>>,
task_sender: SyncSender<Arc<Task>>,
}
BoxFuture
is a type we will use from the futures crate. A BoxFuture
is a type alias for a Pin<Box<dyn Future<T>>>
.
In order for the executor to poll a future it'll need to provide the future with a Context
. A Context
can be constructed from a Waker
via the Context::from_waker
function.
Implementing a waker by hand requires careful construction of a table of function pointers using unsafe code. The futures crate however provides a helper trait called ArcWake and a helper function called waker_ref which can be used to create a waker using only safe Rust. waker_ref
provides a waker given a reference to any type T
that implements ArcWake
.
ArcWake
has been defined like so:
pub trait ArcWake: Send + Sync {
fn wake_by_ref(arc_self: &Arc<Self>);
fn wake(self: Arc<Self>) { ... }
}
In other words, if you have some type T
that's wrapped in an Arc
then waker_ref
is able to provider a Waker
implementation in terms of the ArcWake
implementation.
In the case of our Task
struct we can simply clone the task and send it down the channel via the task_sender
field.
impl ArcWake for Task {
fn wake_by_ref(arc_self: &Arc<Self>) {
arc_self
.task_sender
.send(arc_self.clone())
.expect("too many tasks");
}
}
An executor will simply have a Receiver
(the receive half of a bounded channel) that it uses as the source of tasks to be run. Its basically a loop that keeps running as long as the receiver is connected to at least one sender. When a task shows up on the channel, it attempts to poll the future in the task and if it returns Poll::Pending
then it puts the future back into the task in order to poll again when the future wakes the executor up later on. If the future returns Poll::Ready
then the executor simply drops the future.
pub struct Executor {
ready_queue: Receiver<Arc<Task>>,
}
impl Executor {
pub fn run(&self) {
while let Ok(task) = self.ready_queue.recv() {
let mut future_slot = task.future.lock().unwrap();
if let Some(mut future) = future_slot.take() {
let waker = waker_ref(&task);
let mut context = Context::from_waker(&waker);
if let Poll::Pending = future.as_mut().poll(&mut context) {
*future_slot = Some(future);
}
}
}
}
}
The spawner is responsible for queueing new tasks with the executor. The spawner will have the sender half of the channel.
#[derive(Clone)]
pub struct Spawner {
task_sender: SyncSender<Arc<Task>>,
}
The spawner will have a generic member function called spawn
which takes as input some type T
that implements Future<Output = ()>
. The spawn
function must save the future into a Task
and send the task down the task_sender
channel.
impl Spawner {
pub fn spawn(&self, f: impl Future<Output = ()> + 'static + Send) {
let f = Box::pin(f);
let task = Arc::new(Task {
future: Mutex::new(Some(f)),
task_sender: self.task_sender.clone(),
});
self.task_sender.send(task).expect("too many tasks");
}
}
Add the Delay
timer implementation from the lab where you hand coded a future into the executor project. Add it in a separate file called delay.rs
:
use std::future::Future;
use std::pin::Pin;
use std::sync::{
mpsc::{channel, Sender},
Arc, Mutex,
};
use std::task::{Context, Poll, Waker};
use std::thread;
use std::time::Duration;
#[derive(Clone)]
pub struct Delay {
state: Arc<Mutex<State>>,
}
#[derive(Clone)]
struct State {
complete: bool,
waker: Option<Waker>,
tx: Option<Sender<()>>,
}
pub fn delay_for(duration: Duration) -> Delay {
let (tx, rx) = channel();
let delay = Delay {
state: Arc::new(Mutex::new(State {
complete: false,
waker: None,
tx: Some(tx),
})),
};
thread::spawn({
let delay = delay.clone();
move || {
// wait to be notified that we can start
let _ = rx.recv().unwrap();
thread::sleep(duration);
delay.state.lock().unwrap().complete = true;
if let Some(waker) = delay.state.lock().unwrap().waker.take() {
waker.wake();
}
}
});
delay
}
impl Future for Delay {
type Output = ();
fn poll(mut self: Pin<&mut Self>, cx: &mut Context) -> Poll<Self::Output> {
if self.state.lock().unwrap().complete {
Poll::Ready(())
} else {
self.state.lock().unwrap().waker = Some(cx.waker().clone());
if let Some(tx) = self.state.lock().unwrap().tx.take() {
// start the timer
tx.send(()).unwrap();
}
Poll::Pending
}
}
}
Add a helper function called new_runtime
with the following signature so that it is easy to instantiate an executor and a spawner together:
pub fn new_runtime() -> (Executor, Spawner) {
todo!()
}
With all this in place, add the following test to your library project and try to get it to pass!
#[cfg(test)]
mod tests {
use super::*;
use std::time::{Duration, Instant};
use delay::delay_for;
#[test]
fn executor_works() {
let (executor, spawner) = new_runtime();
spawner.spawn(async move {
delay_for(Duration::from_secs(1)).await;
});
drop(spawner);
let start = Instant::now();
executor.run();
assert!(start.elapsed() >= Duration::from_secs(1));
}
}


Button Styles
Hover over the buttons and click on them to get their "Look & Feel"
default size buttons
basic


Demos
Basic flowchart
%% Example diagram
graph LR
A[Square Rect] -- Link text --> B((Circle))
A --> C(Round Rect)
B --> D{Rhombus}
C --> D
graph LR
A[Square Rect] -- Link text --> B((Circle))
A --> C(Round Rect)
B --> D{Rhombus}
C --> D
Larger flowchart with some styling
%% Code for flowchart below
graph TB
sq[Square shape] --> ci((Circle shape))
subgraph A subgraph
od>Odd shape]-- Two line
edge comment --> ro
di{Diamond with
 line break} -.-> ro(Rounded
square
shape)
di==>ro2(Rounded square shape)
end
%% Notice that no text in shape are added here instead that is appended further down
e --> od3>Really long text with linebreak
in an Odd shape]
%% Comments after double percent signs
e((Inner / circle
and some odd
special characters)) --> f(,.?!+-*ز)
cyr[Cyrillic]-->cyr2((Circle shape Начало));
classDef green fill:#9f6,stroke:#333,stroke-width:2px;
classDef orange fill:#f96,stroke:#333,stroke-width:4px;
class sq,e green
class di orange
graph TB
sq[Square shape] --> ci((Circle shape))
subgraph A subgraph
od>Odd shape]-- Two line
edge comment --> ro
di{Diamond with
 line break} -.-> ro(Rounded
square
shape)
di==>ro2(Rounded square shape)
end
%% Notice that no text in shape are added here instead that is appended further down
e --> od3>Really long text with linebreak
in an Odd shape] %% Comments after double percent signs e((Inner / circle
and some odd
special characters)) --> f(,.?!+-*ز) cyr[Cyrillic]-->cyr2((Circle shape Начало)); classDef green fill:#9f6,stroke:#333,stroke-width:2px; classDef orange fill:#f96,stroke:#333,stroke-width:4px; class sq,e green class di orange
in an Odd shape] %% Comments after double percent signs e((Inner / circle
and some odd
special characters)) --> f(,.?!+-*ز) cyr[Cyrillic]-->cyr2((Circle shape Начало)); classDef green fill:#9f6,stroke:#333,stroke-width:2px; classDef orange fill:#f96,stroke:#333,stroke-width:4px; class sq,e green class di orange
Basic sequence diagram
%% Sequence diagram code
sequenceDiagram
Alice ->> Bob: Hello Bob, how are you?
Bob-->>John: How about you John?
Bob--x Alice: I am good thanks!
Bob-x John: I am good thanks!
Note right of John: Bob thinks a long
long time, so long
that the text does
not fit on a row.
Bob-->Alice: Checking with John...
Alice->John: Yes... John, how are you?
sequenceDiagram
Alice->> Bob: Hello Bob, how are you?
Bob-->> John: How about you John?
Bob--x Alice: I am good thanks!
Bob-x John: I am good thanks!
Note right of John: Bob thinks a long
long time, so long
that the text does
not fit on a row. Bob-->Alice: Checking with John... Alice->John: Yes... John, how are you?
long time, so long
that the text does
not fit on a row. Bob-->Alice: Checking with John... Alice->John: Yes... John, how are you?
Loops, alt and opt
%% Sequence diagram code
sequenceDiagram
loop Daily query
Alice->>Bob: Hello Bob, how are you?
alt is sick
Bob->>Alice: Not so good :(
else is well
Bob->>Alice: Feeling fresh like a daisy
end
opt Extra response
Bob->>Alice: Thanks for asking
end
end
sequenceDiagram
loop Daily query
Alice->>Bob: Hello Bob, how are you?
alt is sick
Bob->>Alice: Not so good :(
else is well
Bob->>Alice: Feeling fresh like a daisy
end
opt Extra response
Bob->>Alice: Thanks for asking
end
end
Message to self in loop
%% Sequence diagram code
sequenceDiagram
participant Alice
participant Bob
Alice->>John: Hello John, how are you?
loop Healthcheck
John->>John: Fight against hypochondria
end
Note right of John: Rational thoughts
prevail...
John-->>Alice: Great!
John->>Bob: How about you?
Bob-->>John: Jolly good!
sequenceDiagram
participant Alice
participant Bob
Alice->>John: Hello John, how are you?
loop Healthcheck
John->>John: Fight against hypochondria
end
Note right of John: Rational thoughts
prevail... John-->>Alice: Great! John->>Bob: How about you? Bob-->>John: Jolly good!
prevail... John-->>Alice: Great! John->>Bob: How about you? Bob-->>John: Jolly good!


Welcome to Emotions recognition’s documentation!¶
Hello¶
module with implementation of ADT, which are used in project
- class classes.Emotion(emotion: str, percentage: float)¶
Class for Emotion representation.
- __emotions: str
name of emotion
- __percentage: float
percentage of emotion
- __life_average: float
average percentage of emotion in life
- __get_life_average()
parse life average emotion percentage by name
- emotion()
get private attribute __emotions
- percentage()
get private attribute __percentage
- life_average()
get private attribute __life_average
- __str__()
returns string representation of the emotion ADT class
- property emotions¶
get private attribute __emotions
- property life_average¶
get private attribute __life_average
- property percentage¶
get private attribute __percentage
- class classes.Image(link: str)¶
Class for Image representation.
- __link: str
link of the image
- __all_attributes: azure.cognitiveservices.vision.face.models._models_py3.FaceAttributes
all attributes of the image
- __emotions: list(Emotion)
list of emotions on the photo, each emotion is a member of Emotion class
- __picture: Picture
Picture object of the photo
- __rectangle: azure.cognitiveservices.vision.face.models._models_py3.FaceRectangle
Rectangle object of the photo
- __parse_image_info()
parse info of Instagram page
- all_attributes()
get privat attribute __all_attributes
- emotions()
get private attribute __emotions
- picture()
get private attribute __picture
- rectangle()
get private attribute __rectangle
- property all_attributes¶
get private attribute __all_attributes
- property emotions¶
get private attribute __emotions
- property picture¶
get private attribute __picture
- property rectangle¶
get private attribute __rectangle
- class classes.InstagramPage(username: str)¶
Class for InstagramPage representation.
- __username: str
username of the page
- __photos: list(Picture)
list of photos of the page
- __happiest_photo: Picture
the happiest photo of the page
- __average_emotions: list(Emotion)
list of average emotions of the profile
- __parce_page_info()
parse info of Instagram page
- photos()
get private attribute __photos
- happiest_photo()
get private attribute __happiest_photo
- average_emotions()
get private attribute __average_emotions
- relative_fakeness()
return the relative percentage of fake profile emotion compared to the average human emotions
- write_to_file()
write to the file statistics of a particular Instagram profile
- visualize()
display profile statistics in graphs and diagrams
- zip_result()
create zip archive with analysed data
- property average_emotions¶
get private attribute __average_emotions
- property happiest_photo¶
get private attribute __happiest_photo
- property photos¶
get private attribute __photos
- relative_fakeness() → float¶
return the relative percentage of fake profile emotion compared to the average human emotions
- visualize()¶
display profile statistics in graphs and diagrams
- write_to_file()¶
writing to the file statistics of a particular Instagram profile
- zip_result()¶
create zip archive with analysed data


|
gtsam
4.1.0
gtsam
|
Files | |
| file | BatchFixedLagSmoother.cpp |
| An LM-based fixed-lag smoother. | |
| file | BatchFixedLagSmoother.h [code] |
| An LM-based fixed-lag smoother. | |
| file | ConcurrentBatchFilter.cpp |
| A Levenberg-Marquardt Batch Filter that implements the Concurrent Filtering and Smoothing interface. | |
| file | ConcurrentBatchFilter.h [code] |
| A Levenberg-Marquardt Batch Filter that implements the Concurrent Filtering and Smoothing interface. | |
| file | ConcurrentBatchSmoother.cpp |
| A Levenberg-Marquardt Batch Smoother that implements the Concurrent Filtering and Smoothing interface. | |
| file | ConcurrentBatchSmoother.h [code] |
| A Levenberg-Marquardt Batch Smoother that implements the Concurrent Filtering and Smoothing interface. | |
| file | ConcurrentFilteringAndSmoothing.cpp |
| Base classes for the 'filter' and 'smoother' portion of the Concurrent Filtering and Smoothing architecture, as well as an external synchronization function. | |
| file | ConcurrentFilteringAndSmoothing.h [code] |
| Base classes for the 'filter' and 'smoother' portion of the Concurrent Filtering and Smoothing architecture, as well as an external synchronization function. | |
| file | ConcurrentIncrementalFilter.cpp |
| An iSAM2-based Filter that implements the Concurrent Filtering and Smoothing interface. | |
| file | ConcurrentIncrementalSmoother.cpp |
| An iSAM2-based Smoother that implements the Concurrent Filtering and Smoothing interface. | |
| file | ConcurrentIncrementalSmoother.h [code] |
| An iSAM2-based Smoother that implements the Concurrent Filtering and Smoothing interface. | |
| file | FixedLagSmoother.cpp |
| The base class for different fixed-lag smoother implementations. | |
| file | FixedLagSmoother.h [code] |
| Base class for a fixed-lag smoother. | |
| file | IncrementalFixedLagSmoother.cpp |
| An iSAM2-based fixed-lag smoother. | |
| file | IncrementalFixedLagSmoother.h [code] |
| An iSAM2-based fixed-lag smoother. | |
| file | LinearizedFactor.cpp |
| A dummy factor that allows a linear factor to act as a nonlinear factor. | |
| file | LinearizedFactor.h [code] |
| A dummy factor that allows a linear factor to act as a nonlinear factor. | |
| file | NonlinearClusterTree.h [code] |


Frozen II Box Office: The Disney Sequel Puts The Competition On Ice
-
Written By
The weather outside is getting colder, but things are heating up at the box office! Get it? GET IT?! Fine, let’s just say that Frozen II dominated the weekend frame, as expected, and set new records for Walt Disney as the highly-anticipated animated sequel crushed the competition (including Tom Hanks in a Mister Rogers movie) and grabbed that coveted Number One slot on the charts.
We have been waiting six years for the Frozen sequel to hit theaters, and fans showed up in droves to find out what happens with Anna (Kristen Bell) and Elsa (Idina Menzel) on the next steps of their adventures together. What’s crazy is that this isn’t even the Thanksgiving weekend, when families really pack the multiplexes, so we expect Frozen II to perform even better next weekend.
But let’s not get too far ahead of ourselves. Here are this weekend’s box office numbers, courtesy of the-numbers.com.
The other contenders this weekend did OK, and actually could celebrate a few small victories, if it wasn’t for the fact that they have to stand next to that $127M number posted by Frozen II. In comparison, you look a little lame.
But James Mangold’s Ford v Ferrari continues to build on some serious word of mouth, and likely will parlay that theatrical success into Oscar buzz, which could keep it profitable for weeks to come.
The same sort of buzz wasn’t there for A Beautiful Day in the Neighborhood, which opened in third place and didn’t make that many waves due to its Disney competition. Maybe there was something to be said for that Jeopardy moment when the contestants couldn’t recognize Tom Hanks as Fred Rogers. Did the marketing for this movie not find its audience?
Elsewhere on the chart, a few major movies started to slip away. Charlie’s Angels and The Good Liar are fading, fast, while Midway continues to post strong numbers. Joker is a behemoth, crossing $325 million domestically. But Doctor Sleep dropped out of the Top 10, which is a stunning loss for that title. Seriously, folks, you will watch that movie on DVD later and wonder why you didn’t support it in the theater. This is why we can’t have nice things.
Next weekend, all bets are off. It’s Thanksgiving weekend, when the movie theaters thrive, and audiences pack the houses to see movies they need to catch up on. Could Knives Out cut into Frozen II then? See that I did there? C’MON PEOPLE! Work with me here!
Subscribe to our Newsletter
Sign up below to receive our weekly email with the best content about movies, news and television from the team at CinemaBlend


1 reference to HandleJobStateChangedEvent
System.Management.Automation (1)
engine\remoting\commands\WaitJob.cs (1)
216
this.
HandleJobStateChangedEvent
(job, new JobStateEventArgs(job.JobStateInfo));


---
layout: game-page
title: Empyrean
year: 2021
semester: Fall
description: "Ethereal massively multiplayer online first person shooter, deathmatch mode.
WASD - Movement
Shift - Run
V - Gun Pickup/Drop
Space - Jetpack
F - Fire
R - Reload
Here is the source code."
tags: Windows Mac Web Multiplayer
# tag options: "Windows", "Mac", "Linux",
# "Singleplayer", "Multiplayer",
# "Controller-Compatible", "VR",
# "Game-Jam"
project_members: {
Amy Lin: "Team Lead",
Adrian Jenkins: "Programming",
Andres Mason: "Programming",
Daniel Gunawan: "Programming",
Emily Xie: "Programming",
Gerald Kim: "Programming",
Mona Lin: "Programming",
Will Huang: "Programming",
Andy Kim: "Artist",
Hanke Chen: "Artist",
Jean Cho: "Artist",
Leah Minsky: "Artist",
Sarah Wang: "Artist",
Brandan Chen: "Game Design",
Steve Lu: "Game Design",
Basil Collis: "Sound, Music"
}
stage_game_path: empyrean/
# builds: {
# Web: WEBGL_RELEASE/index.html
# }
thumbnail: ss4.png
top-img: ss6.png
screenshots: [
ss1.png,
ss2.png,
ss3.png,
ss4.png,
ss5.png,
ss6.png,
ss7.png
]
# Optional
awards: [
]
# OST-embed instructions: Go to the soundtrack page and click Share -> Embed, and then copy the “src” from the code text and put it in your game info as “OST-embed”
OST-embed: "https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/playlists/1388790166&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true&visual=true"
top-img-fit: fill
# top-img-fit options:
# "cover" - Cover the entire top area with the image, without squashing/stretching
# "fill" - Fit the FULL image into the top area, squashing/stretching as necessary
---


Human Aspects of Privacy in Relation to Personalization
20 Jan 2018The concept of privacy is inherently intertwined with human attitudes and behaviours, as most computer systems are primarily designed for human-use. Especially in the case of Recommender Systems, which feed on information provided by individuals, their efficacy critically depends on whether or not information is externalized, and if it is, how much of this information contributes positively to their performance and accuracy.
In my seminar on Privacy and Big Data taken at RWTH, I discussed the impact of several factors on users’ information disclosure behaviours and privacy-related attitudes, and how users of recommender systems can be nudged into making better privacy decisions for themselves. Apart from that, I also addressed the problem of privacy adaptation, i.e. effectively tailoring Recommender Systems by gaining a deeper understanding of people’s cognitive decision-making process.
The seminar was taken under Prof. Dr. Stefan Decker at the chair of Databases and Information Systems. The full seminar report can be found here. The presentation for my delivered talk can be accessed here.


[1]
inexpensive and WD does n't have a fix for it apparently.
[2]
inexpensive and WD does n't have a fix for it as you to install.


--- layout: post date: 2011-06-15 time: "09:00:00" authors: ["Greg Wilson"] title: "New Episode: MATLAB Structs and Cell Arrays" tags: ["Content"] ---
The title says it all: thanks to the tireless Tommy Guy, we have a new episode on MATLAB structs and cell arrays.


The Global Summit brings together the community of experts, academics, and activists who comprise the Creative Commons affiliate network in a different country every two years. This year, we hope to expand our invitation list including organizations and invidivuals who want to work with us on shared projects that advance the cause of the Commons, free culture and open knowledge. So if you're active and engaged in the worlds of open content and knowledge - free software advocates, Wikipedians. Open Knowledge, galleries, libraries, museums, archives, governments and foundations, lawyers, and activists - we hope you'll consider joining us this year to build a stronger, more vibrant commons together.
Please contact us per email for any further questions about Student StartUp Lab Summit 2015!
<EMAIL_ADDRESS>The logo of CC Global Summit 2015 was decided through the logo competition from 8 June to 7 July.
The logo of CC Global Summit 2015 was decided through the logo competition from 8 June to 7 July. After online public voting and Selection Committee's judging process, the logo from Naresh Agrawal won the prize. After consultation with Mr. Agrawal we optimized the prize-winning-logo for this year's summit as following:
Take a look at the last two CC Global Summits which took place in Buenos Aires and in Warsaw.


For marketing
For Feature rollout
For UX testing
For QA engineers
See for yourself what SegmentR is capable of at the working live demo web app!


I've noticed on a few occasions that a slave JVM freezes when it's using stdout/stderr for communicating with the master. The characteristics of this problem is:
- Only on Windows
- Slave uses its stdout/stderr for communication. This includes launching a slave via command line and via SSH.
- You cannot attach JConsole to the hanging process
- Process Explorer fails to show you the thread list of the hanging process
We are continuing to work on the problem, but in the mean time, I discovered that adding a debug option to JVM "fixes" the problem. That is, start JVM like this:
java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=29999 -jar slave.jar


--- layout: post title: Documentation coordinator post_id: 114 categories: - announcements date: 2007-11-30 07:58:00.000000000 -07:00 author: Jamis permalink: 2007/11/30/documentation-coordinator.html ---
I’m very pleased to announce that Tyler Bird has been selected to coordinate the documentation for Capistrano. I appreciate (very much!) all of you that volunteered for this.
Tyler has got his work cut out for him, here, but he’s eager to tackle the job, and I look forward to seeing what comes out of it. I’ll post more details as I get them; I just wanted to let everyone know that a coordinator has been selected, at last.


Which skills are essential for a data scientist?
Advanced computing & programming
Machine learning & prediction
Open source tools & concepts
Big data
Maths & statistics
Data interpretation & visulisation
Business intelligence & domain expertise
Data collection & analysis


Bio, projects, demos and so on.
I received my BS degree in Computer Science with honors from Chu Kechen colleage of Zhenjiang University in 2004 and moved onto Hong Kong University of Science and Technology for my PhD degree. During my PhD study, I worked in VisGraph Labs under the advisement of Dr. Philip Fu and Dr. Pedro Sander. I defended my thesis in 2010 and then went to National Unveristy of Singapore to fill a Postdoc position. I came to AMD Shanghai in 2011 and become a researcher.
Download my resume here.
Check out my photography side here.
Emai: blifelee81[at]msn.com
Modelo
Modelo is cloud-based BIM platform which serves the best collaboration tool for architects. I designed and implemented its 3D rendering engine and cloud file translation server from scratch. Check out http://www.modelo.io for more information.Bamboo
Bamboo is an eBook rendering engine based on Paper3D and HTML5. It is written in C++ and cross-platform. With the command-line tool, users can easily compile a few HTML pages into a eBook archive which can be rendered by Bamboo reader. Check out Demo video.Paper3D
An open-source cross-platform (Android, iOS and Windows) rendering engine, best for creating the live wallpaper and casual TV games. Based on OpenGL ES 2.0 and C++, it provides a very easy-to-use interface that allows users to quickly develop an application from scratch. View project at GitHub and its GitPage.Lens Flare Bundle
Lens flare happens because of the interesting optics properties of the glasses when they interact the incoming lights. I implemented 10+ common lens flare effects in C++. Each of them is drawn with 2D lines, circles and filling. They can be combined together to form more interesting and fancy effects. More are here and GitHub project.Grass rendering and simulation with LOD
Dongsoo Han and Hongwei LiSimualte and Render Millions of Grass Blades
Zengzhi Fan, Hongwei Li, Karl Hillesland and Bin ShenModern OpenGL Programming.
Hongwei Li[Slides]
Anisotropic Blue Noise Sampling.
Hongwei Li, Li-Yi Wei, Pedro V. Sander and Chi-Wing Fu.Fast Capacity Constrained Voronoi Tessellation.
Hongwei Li, Diego Nehab, Li-Yi Wei, Pedro V. Sander and Chi-Wing Fu3D Polyomino Puzzle
Kui-Yip Lo, Chi-Wing Fu and Hongwei LiAnisotropic Poisson Disk Sampling
Hongwei Li, Li-Yi Wei, Pedro V. Sander and Chi-Wing Fu.Visualizing Multiwavelength Astrophysical Data
Hongwei Li, Chi-Wing Fu and Andrew J. HansonDual Poisson-Disk Tiling: An Efficient Method for Distributing Features on Arbitrary Surfaces.
Hongwei Li, Kui-Yip Lo, Chi-Wing Fu, and Mang-Kang LenungVisualizing Large- Scale Uncertainty in Astrophysical Data.
Hongwei Li, Chi-Wing Fu, Yinggang Li, and Andrew J. Hanson.Interactive Reaction-Diffusion on Surface Tiles.
Kui-Yip Lo, Hongwei Li, Chi-Wing Fu, and Tien-Tsin Wong.Optimization, Optimization, Optimization: A practical discussion on optimizing our code at function level
Hongwei LiTexture Synthesis and Rendering on Manifold Surface
Hongwei LiPoisson Disk Sampling: Modern Techniques
Hongwei Li


Live a healthy and happy life as a geek with our 5 week transformation program!
Get started!Want to feel energized and happy as can be? Start your geek transformation today! Develop cool geeky habits, get in shape and clear your mind!
Tell me more!Tailored for the geek lifestyle, written by geeks for geeks.
Improves both body and mind!
Change your life and have fun during the process.
Start seeing positive results already during the first week!
Ready to build the new you with us? That's great! Give us a call or send us an email and we will get back to you as soon as possible!
123-456-6789


<EMAIL_ADDRESS>Hello! My name is Caitlin Sanders. I am currently a sophomore at Syracuse University in pursuit of a BS in Computer Science. I am in the Renée Crown University Honors Program as an Engineering and Computer Science Leadership Scholar.
Right now, I am looking for a summer of 2020 internship in order to further develop my programming skills and advance my career in Computer Science. Download my resume from here. You can reach me here.
Collaborated with a team of 5 to develop an Android Studio application in Java for domestic violence support disguised as a food delivery finder that executed a Google Maps API. Enables victims of domestic violence to covertly summon help, alert trusted contacts, and find resources.
Features include: A fully capable delivery food finder and hidden pages with options to call 911, request transportation, search for nearby help centers, incognito web browse, record abuse incidences, or quickly click a button to return to a random food delivery search.
A senior’s go to Android Studio made application for tricks and tips on health & tech created at WiCHack 2018
Twitter Bot that tweets compliments gathered from user's friends once a day for the year.
In a project created for CIS 400 (Social Media and Data Mining), I analyze the 5 most-popular reciprocal friends of a user and then their distance-1, distance-2 , etc friends in order to create a Social Network of 100 nodes.
I then analyzed the resulting social network using the Networx package.
Designed, developed, tested, and deployed a web-based application to be used across Lockheed Martin Rotary and Mission Systems which provides metrics for all Agile implementation program
Contributed to web application development using the Django Framework in an automated DevOps pipeline
Motion lead on a team of 6 that designed and developed a "Remote Threat Identifier" that navigated autonomously, classified detected
objects, and received second place as part of an Intern Design Competition
Participated in a 10-week, invite-only, virtual program in which I built a software project in Java with a small group of peers and with the guidance of a Google engineer.


Use the InfluxDB inch tool to simulate streaming data to InfluxDB and measure your performance (for example, the impact of cardinality on write throughput). To do this, complete the following tasks:
Install InfluxDB inch
To install
inch
, run the following command in your terminal:$ go get github.com/influxdata/inch/cmd/inch
Verify
inch
is successfully installed in yourGOPATH/bin
(default on Unix$HOME/go/bin
).
Use InfluxDB inch
- Log into the InfluxDB instance you want to test (for InfluxDB Enterprise, log into the data node(s) to test).
Run
inch
, specifyingoptions
(metrics) to test (see Options table below). For example, your syntax may look like this:inch -v -c 8 -b 10000 -t 2,5000,1 -p 100000 -consistency any
This example starts generating a workload with:
- 8 concurrent (
-c
) write streams - 10000 points per batch (
-b
) - tag cardinality (
-t
) of 10000 unique series (2x5000x1) - 10000 points (
-p
) per series - any write
-consistency
Note: By default,
inch
writes generated test results to a database namedstress
. To change the name of the inch database, include the-db string
option, for example,inch -db test
.- 8 concurrent (
To view the last 50
inch
results, run the following query against the inch database:> select * from stress limit 50
Options
inch
options listed in alphabetical order.
| Option | Description | Example |
|---|---|---|
-b int |
batch size (default 5000; recommend between 5000-10000 points) | -b 10000 |
-c int |
number of streams writing concurrently (default 1) | -c 8 |
-consistency string |
write consistency (default “any”); values supported by the Influxdb API include “all”, “quorum”, or “one”. | -consistency any |
-db string |
name of the database to write to (default “stress”) | -db stress |
-delay duration |
delay between writes (in seconds s , minutes m , or hours h ) |
-delay 1s |
-dry |
dry run (maximum write performance perf possible on the specified database) |
-dry |
-f int |
total unique field key-value pairs per point (default 1) | -f 1 |
-host string |
host (default http |
-host http://localhost:8086 |
-m int |
the number of measurements (default 1) | -m 1 |
-max-errors int |
the number of InfluxDB errors that can occur before terminating the inch command |
-max-errors 5 |
-p int |
points per series (default 100) | -p 100 |
-report-host string |
host to send metrics to | report-host http://localhost:8086 |
-report-tags string |
comma-separated k=v (key-value?) tags to report alongside metrics | -report-tags cpu=cpu1 |
-shard-duration string |
shard duration (default 7d) | -shard-duration 7d |
-t [string] ** |
comma-separated integers that represent tags. | -t [100,20,4] |
-target-latency duration |
if specified, attempt to adapt write delay to meet target. | |
-time duration |
time span to spread writes over. | -time 1h |
-v |
verbose; prints out details as you’re running the test. | -v |
** -t [string]
each integer represents a tag key and the number of tag values to generate for the key (default [10,10,10]). Multiply each integer to calculate the tag cardinality. For example, -t [100,20,4]
has a tag cardinality of 8000 unique series.


Please contact the project administrators of this project at the project summary page.
Sources are in the Mercurial repository.
This is the cl-string-match project ("clstringmatch")
Common Lisp provides a SEARCH function to lookup given keys in a string, but its implementation can be subotimal: it can be beaten in some cases by even the simpliest brute-force algorithm. This project is aimed at implementing robust substring search (subsequence search) algorithms for Common Lisp.
Along with subsequence search (matching) algorithms this package provides implementations of the following data structures and utility algorithms:
Check also the API reference.
At the moment Cl-String-Match is not supported by Quicklisp. Installation is manual.
Cl-String-Match exports functions in cl-string-match
package (nicknamed sm
).
Shortcuts look for given pattern pat
in text txt
. They are usually much slower
but are easier to use:
string-contains-brute pat txt
Brute-forcestring-contains-bm pat txt
Boyer-Moorestring-contains-rk pat txt
Rabin-Karpstring-contains-kmp pat txt
Knuth-Morris-Prattstring-contains-ac pat txt
Aho-CorasickA more robust approach is to use pre-calculated index data
that is processed by a pair of initialize
and search
functions:
initialize-bm pat
and search-bm bm txt
initialize-rk pat
and search-rk rk txt
initialize-kmp pat
and search-kmp kmp txt
initialize-ac pat
and search-ac ac txt
. Here initialize-ac
can accept a list of patterns that are compiled into a trie.Following example looks for a given
substring pat
in a given line of
text txt
using Rabin-Karp algorithm
implementation:
(let ((idx (initialize-rk pat))) (search-rk idx txt))
This project is still a work in progress. Any contributions are welcome!
You can join it here on SourceForge or on BitBucket where we have a mirror.