Table of contents:
| Overview | Important | Features | Change Sources | Auto-Generated password | Forget password-bruteforcing method | Hide PopUp | Change Game/MainScreen | About Logging in | Java Interface | Clean-up | Building the project | Install Java | TroubleShooting | LICENSE | Thanks to |About the event
Video Overview
This is an over-engineered log in form with more features than you ever need.
Support Mac, windows and linux.
Gif using in the project is open source as well!
NOTE: After 30th of August, This will not be updated as the project is due.
Therefore, until August 30, the program might receive several updates even though I already submitted it
(because I thought I might be busy for school but apparently not).
To demonstrate the theme over-engineering, the program changes color frequently and has many unused/unnecessary features (just like this wiki).
You cannot change language in this Wiki page. So your language in your program might be different.
If you cannot download anything from the webview of this website from the program, go to
this address: https://github.com/frychicken/PhEntry/releases on your browser and download.
Also, feedback/bug report function will launch your built-in mail app.
The terms and conditions is here just to over-engineer the program,
but it is important to understand
that the program will generate about 10-11 txt files in its current directory to store data.
The login here is just for fun to browse r/programmerhumor reddit;
please don't use your actual reddit username and password.
The password will NOT be sent to the server, it is stored locally.
That is it! you can ignore the rest of the terms and conditions.
Privacy Policy is here just for fun,
but you need to understand that the program will NOT sent anything to the server.
As such, I do NOT collect any information.
That is it, you can ignore the rest of the Privacy Policy.
Keep in mind that Darkmode is NOT applied everywhere.
In addition, Spanish-language is not 100% translated (because there are some words that are better left as it);
Spanish translation is very basic (I and my friend, because of school starts, don't have time to translate all of it, but you are welcome to contribute).
But you get the point of this over-engineered program.
There is only ONE trusted source, which is my github source.
Be careful when adding sources.
Changing source allows modified version to be checked and downloaded without hash mis-matched error.
The source you add might push update or fix bugs faster than the original.
Default sources:
check newest version: https://raw.githubusercontent.com/frychicken/PhEntry/master/currentVersion.txt
Check hash of TheGame.class: https://raw.githubusercontent.com/frychicken/PhEntry/master/Sources/TheGame.txt
Check hash of MainScreen.class: https://raw.githubusercontent.com/frychicken/PhEntry/master/Sources/MainScreen.txt
To download Updater.jar: https://raw.githubusercontent.com/frychicken/PhEntry/master/updater/Updater.jar
If you don't know how to create a secure password, auto-Generated password is here.
You can answer the question in the menu to generate password according to that. It is not required
You can lie, write whatever you want in order to answer the question.
To use this, you need a list of possible passwords that you might use for your login.
Write all possible passwords and store it in a txt file.
(Each password is in a separate line)
Then select the txt files for the program to start checking.
Uses SHA265 algorithm
public static String getHash(String pssd) {
MessageDigest md = null;
try {
md = MessageDigest.getInstance("SHA-256");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
wl.writeLog(e.toString());
}
byte[] digest = md.digest(pssd.getBytes(StandardCharsets.UTF_8));
return DatatypeConverter.printHexBinary(digest).toLowerCase();
}
Note: bruteforcing in some cases are illegal to perform.
Since this program demonstrates over-engineering theme, I added this with no malicious intend.
Hide all will disable method call for EssentialFunctions.popUp(str, str).
Otherwise, method call EssentialFunctions.PopUp(str,str) will be called depends on var bool.
You won't be able to hide start-up popUp because they are important.
Hide recommeded popUp: hide what we think we should hide
Hide "Not show password" recommendation popUp: Hide annoying popUp when you did not choose "Not show password"
("Showing password may potentially get your password stolen\ncheck the option if you don't want to take a risk!")
Hide not recommended popUp: Basically an inverse version of "Hide recommeded popUp."
protected static void popUp(String todis, String title) {
if (!HidePopUpOPtion.hideAllP) {
JOptionPane.showMessageDialog((Component) null, todis,
title, JOptionPane.INFORMATION_MESSAGE);
}
}
OWO, You can change the game!
Requirements:
You need to know Java
Download GameChanger.jar
Create theGame.java and start coding your game!
theGame's template
import javax.swing.Timer;
import javax.swing.UIManager;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
public class TheGame extends EssentialFunctions {
....
public static Timer timer;
private ActionListener animation;
...
public TheGame() {
animation = new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
frame.repaint();
}
};
timer = new Timer(50, animation);
}
...
public void reset() {
//reset the game when user click play again
}
...
public void paint(Graphics g){
...
//to use dark-mode / night mode
g.setColor(UIManager.getColor( "Panel.background" ));
...
}
}
Dependencies: EssentialFunctions.java, WriteLogF.java, MainScreen.java, HidePopUpOPtion.java
EssentialFunctions.java Contains needed functions for the program
WriteLogF.java is to write log by calling writeLog(str) if you extends EssentialFunctions
MainScreen.java is the mainscreen of the program where there is a gif playing
HidePopUpOPtion.java is the hide popUp section in the program
Then, just follow the instructions in the GameChanger.jar
Remember to place all of the files above to the same directory (same as the GameChanger.jar)
Next steps are essentially knowing java commands: Javac and jar uf, leave as it if you don't understand.
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import javax.swing.JPanel;
public class MainScreen extends Component{
private static final long serialVersionUID = 1L;
public void paint(Graphics g) {
drawDabg(g);
// can draw more here!
}
// Basically this draws the gif you see in the home screen
private void drawDabg(Graphics g) {
Image icon = Toolkit.getDefaultToolkit().getImage(getClass().getResource("Nice1.gif"));
g.drawImage(icon, 200, 100, this);
}
}
You don't need any dependency if you want to change mainScreen
Yep, I know this is unnecessary.
You can only create 1 account only, if you create another, you need to detele your pre-existing one.
When you log in, you will see the window saying welcome, [yourname] and reddit.
This is the webview version of the website which can be accessed here.
You are NOT actually logged in to reddit but, rather, just get to view it.
Your login and password are not stored on the server;
it is just a simple javascript to show yor username you created on the server.
You can check the source code at index.html
In advanced user mode.
This does not have any effects on Mac, only on windows.
if (Boolean.parseBoolean(EssentialFunctions.getFistLine("/javaInter.txt"))) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException
| UnsupportedLookAndFeelException e1) {
e1.printStackTrace();
wl.writeLog(e1.toString());
}
}
This allows you to use your current system's theme or default java theme.
Use this by clicking the button once to toggle on/off.
In advanced user mode.
The program will re-generated files if restart.
Files that the program will delete: nightmode.txt, usercre.txt, log.txt, lang.txt, keepL.txt, highscore.txt, TheGame.txt, MainScreen.txt, updateSource.txt, UpdaterSource.txt, javaInter.txt
Be cautious if you have any important files that have the same name as the program.
Use java jdk 8u221. jdk 12 does not work!
run Build.bat (windows)/ Build.sh (linux, macos)
This program is built on Mac OS (it is not a big deal but just to let you know).
get jdk 1.8.0_u221(you may need to ceate an account)
For linux
For linux user, I would not recommend openjdk but, rather, the link above. Because openjfx (Java FX) is not packaged in openjdk.
If you have openjdk installed, remove it: sudo apt-get remove openjdk*
Extract the file $ tar xvzf jdk-8u221-linux-x64.tar.gz
Place the file to where you want.$ vi ~/.bashrc
and add export JAVA_HOME=path/you/want/jdk1.8.0_221
and export PATH=$JAVA_HOME/bin:$PATH
Then, do source ~/.bashrc
To exit vi: press ESC and Shift + z + z to save and close.
For windows, macos
Just do what they say in the installation process.
Exception in thread "main" java.lang.NoClassDefFoundError: javafx/application/Platform
Reason
You you version of java that does not have javafx.
If this appears on version 1.8 on linux, check to see if you use openjdk.
If you do, download openjfx because openjfx is not packaged in openjdk.sudo apt-get install openjfx
Another way of solving this: get java on oracle (link above)
Extract the file: $ tar xvzf jdk-8u221-linux-x64.tar.gz
And run the LogInForm.jar:
$ path/to/java/just/extracted/bin/java -jar /path/to/jarFile/LogInForm.jar
Or you can remove openjdk and set JAVA_HOME.
My good friend, Benjamin Barros, for translating to Spanish. This could not be done without you <3
@frichickens for testing beta builds.


pizza
Source: /
Main entry point for tests.
Most scripts will start with a call to module:pizza.open.
Examples
var b = pizza.open("loadtestgo.com");
var b = pizza.open();
b.open("loadtestgo.com");
Properties
Properties
botId Number
The bot index starting at 0 and increasing by one for every bot launched for the duration of the test. Normally you don't need this, instead the userId can be used.
ip String
The public ip of the machine (bot) running the test. This IP will be the one used by the bot to connect to your website.
Example
// Log the ip to the console
console.log(pizza.getIp());
loadTestId Number
The id of the load test that is running
location String
The location the test is running from. Our tests run primarily on Google Compute Engine, so this is normally the Google Compute region the script is running in.
pages Array of module:Page
Any pages that were loaded during the test (including the current page or pages added with {@link module:Browser#newPage).
Example
// Log the pages loaded so far to the console
var r = pizza.result;
for (var i = 0; i < r.length; ++i) {
console.log(r[i].url);
}
result
The test results that will be uploaded when the test ends.
Example
// Log the name of the test to the console
console.log(pizza.result.testName);
- Returns
sequenceId Number
The number of samples ran on this user id so far, starts at 0 and increments by 1 for every sample that is processed by the current user.
Unique only to the current pizza.botId + pizza.workerId.
- See also
- module:pizza.workerId
- module:pizza.userId
userId Number
The user id that the script is running under, it's unique across the load test and starts at 0. The value of the user id will never exceed the max number of users used during a load test.
version String
The version of the bot running the test (this is mostly for diagnostic purposes).
workerId Number
The worker id that the script is running under, it's unique per browser on the bot and starts at 0. Normally you don't need this, instead the userId can be used.
Methods
browser() → module:Browser
Returns the current browser if one is open
Example
// Get the currently open browser
var b = pizza.browser();
- Returns
-
The current browser if open, null otherwise
getRequestByFullUrl(pageIndexOrPartialUrl[, partialUrl]) → module:HttpRequest
Gets the first request matching the given partial url
Parameters
| Name | Type | Optional | Description |
|---|---|---|---|
|
pageIndexOrPartialUrl |
(String or Number) |
|
the zero based page index (ordered by when they started loading), or the partial url to match the request against. |
|
partialUrl |
String |
Yes |
the partial url to match against if a page index is specified |
- Returns
getRequestByFullUrl(pageIndexOrFullUrl[, fullUrl]) → module:HttpRequest
Gets the first request matching the given full url
Parameters
| Name | Type | Optional | Description |
|---|---|---|---|
|
pageIndexOrFullUrl |
(String or Number) |
|
the zero based page index (ordered by when they started loading), or the full url to match the request against. |
|
fullUrl |
String |
Yes |
the full url to match against if a page index is specified |
- Returns
nextSeqId(Named)
Generate a new sequential id unique to this load test and unique per passed in named sequence.
Sequences start at zero and are incremented by 1 every time this function is called across the load test.
Parameter
| Name | Type | Optional | Description |
|---|---|---|---|
|
Named |
String |
|
sequence to return a value from. |
open() → module:Browser
Open the browser.
Takes an optional URL or browser settings parameter. See the examples below.
Examples
// Open browser at "http://www.mysite.com"
var b = pizza.open("www.mysite.com");
// You may want to setup the browser before navigating
var b = pizza.open();
...
// Navigate to "http://www.mysite.com"
b.open("mysite.com");
// Open the browser and ignore bad certificates (e.g. unsigned certs)
var b = pizza.open({ignoreCertErrors: true});
b.open("https://my-unsigned-test-server.com");
// Pass a command line arg to Chrome when launching the Chrome executable.
// List of switches: https://src.chromium.org/svn/trunk/src/chrome/common/chrome_switches.cc
var b = pizza.open({args: ["--force-device-scale-factor=1"]});
b.open("google.com");
// Open the browser and enable QUIC (http://en.wikipedia.org/wiki/QUIC)
var b = pizza.open({enableQuic: true, forceQuic: "my-site-that-supports-quic.com:443"});
b.open("https://my-site-that-supports-quic.com");
// Go to a 404 page but don't throw an error
b.ignoreHttpErrors();
b.open("mysite.com/404");
- See also
- module:Browser#ignoreHttpErrors
- Returns
-
the newly opened browser
openCSV(filename) → module:CSV
Open a CSV file for read access.
This is useful to parameterise your tests.
Parameter
| Name | Type | Optional | Description |
|---|---|---|---|
|
filename |
String |
|
the CSV filename to open. |
- Returns
-
The CSV data
saveFile(filename, data)
Save a file to the script results.
When ran with the script runner, these files will be saved along side the script results and attached to the JUnit tests result.
Example
b.open("www.google.com");
// Get response body of the main HTML request
var d = b.getResponseBody(pizza.getRequestByUrl("www.google.com")));
pizza.saveFile(d);
Parameters
| Name | Type | Optional | Description |
|---|---|---|---|
|
filename |
String |
|
the filename to save. |
|
data |
(String or module:Data) |
|
the file contents to save. |
sleep(milliseconds)
Sleep for the given amount of milliseconds.
It's almost always better to wait on an element being visible or some change to the DOM to happen, than having a hard wait. Often sleeps require a significant amount of tweaking and have to be changed several times in response to failures that happen after you have written the script.
Example
// Sleep for one second
pizza.sleep(1000);
Parameter
| Name | Type | Optional | Description |
|---|---|---|---|
|
milliseconds |
Number |
|
time to wait |
- See also
- module:pizza.waitFor
- module:Browser#waitVisible
- module:Browser#waitText
- module:Browser#waitForHttpRequests
waitFor(func[, waitIterationMilliseconds])
Wait for the given function to return true
Examples
// Wait for window.myVar to be set
pizza.waitFor(function() {
return b.execute("window.myVar ? true : false");
});
// Wait for window.myVar to be set, with 1 second between retries
pizza.waitFor(function() {
return b.execute("window.myVar ? true : false");
}, 1000);
Parameters
| Name | Type | Optional | Description |
|---|---|---|---|
|
func |
function() |
|
the function to check |
|
waitIterationMilliseconds |
Number |
Yes |
the milliseconds to wait before calling func again |


Abel Sanchez and John R. Williams
Create the HTML page below. Here is the jellybeans image.
Create an HTML page. Position eight circles as fallows.
See starter code in next slide
The code below produces a green circle.


As the new owner of a Geothermal heating/cooling installation located in the US (Massachusetts), I am hoping to leverage the OEM project to monitor my whole house usage, along with my heatpump compressor and other circuits if possible. This is of interest to me as I want to get a good handle on what my heating and cooling costs are and I also want to monitor the effect of improvements to my building's envelope. Monitoring the heatpump should allow me to assess those improvements. In addition, I'd like to monitor a few circuits in an effort to better understand certain loads (ie hotwater heater - and the effect of a Desuperheater) and how I may be able to further optimize them.
I've read up on the posts by Dan Woodie, and in general the difference the US power system present for the OEM project. I have in hand an emontx V3, but I'm concerned about it's utility in the US.
1) I have 200A service. In Dan's system, he uses two Magnelab SCT-075-000 CTs in combination with changing the burden resistors to get the output compatible with the emontx. As the owner of a V3 emontx (preassembled), am I in trouble using that approach? From the docs it looks like the burden resistors are 22R 0.25W. My electrical engineering competency is limited, so I'm not sure how to interpret this...
I've also seen a system in AZ described here in this post which uses a much more affordable 200A CT sensor:
http://www.desert-home.com/p/test-html-code.html . In this solution, two SCH-019 CT sensors where used in series. I've also seen a few examples that weren't too detailed showing SCH-019s used much like Dan did, acompanied by different burden resistors. Once again, is it possible to do this on an emontx V3? From the looks of it, the SCH-019 comes in either a 33mA output or a 0.33V. From what I've read, the current output is the preferred way for the emontx to receive this data?
2) The emontx V3 has 4 inputs, so if I can get around the burden resistor problem, I hope to use a couple of normal CT sensors to monitor two additional circuits. Am I thinking about this correctly?
3) I plan to to use an AC to AC adapter for more accurate measurements. I have found plenty of US 9VAC adapters. Most output between 300-1000 mA. Is there a reason to choose a specific output?
Any help is greatly appreciated...
Re: Emontx V3 to monitor house and Geothermal in the US
My personal preference in your situation would be to start with an emonTx V2, rather than the V3, as the V2 comes in kit form and uses wire-ended components that can be changed very easily especially if that is done on assembly. If that's not an option, then you are most probably (given that I haven't done the sums) faced with changing the burden resistors, and that could be very tricky.
Starting then with the c.t., it is inherently a current source. Like any other source, it has a maximum power output that must be observed. The emonTx needs a little over 1 V rms for maximum resolution, therefore if you are using a c.t. that is rated to give (say) 33 mA out at 0.33 V for 200 A primary current, you can use it at 11 mA and 1 V out by having a higher burden resistance (3 times the original value) but the maximum primary current is now limited to only 66.6 A. (This is why I recommended very recently in another thread using a 600 A ct. derated to 200 A.)
Ideally then, you need to choose a c.t. that will give you 1 V into the existing burden resistor at your desired maximum current. If you can use a lower resistance burden, then it's easy to put another resistor externally in parallel with the fitted burden to achieve the correct value. Whether you can buy a c.t. that fits this requirement I don't know.
If you want to add one more current input (using the one presently committed to the DS18B20, 5 inputs are already used - 1 voltage and 4 current), then you need to replicate the input circuitry and connect to ADC 5 which is conveniently brought out to a connector, but you'll need to remove a resistor used to power the temperature sensor.
The current drawn by the emonTx V3 from the AC adapter is fairly small, so the VA rating is unlikely to present a problem. For best accuracy, you want the one with the least phase error and the most faithful reproduction of the mains waveform.
Re: Emontx V3 to monitor house and Geothermal in the US
The emonTx V3 has the option for using thru-hole burden resistor in place of the smt components. Removing the smt burden resistors should not be too difficult.
Re: Emontx V3 to monitor house and Geothermal in the US
Glyn, that is good news. I'm assuming removing the resistor is as simple as this video?
http://www.youtube.com/watch?v=6XyrNjNXSo8 - any tips would be appreciated....
I am guessing the holes adjacent to the smt resistors would be where the through holes would go? Finally, 22r would mean 22Ohms correct?
I need to sit down and figure out what kind of resistor would work best with a 600A CT derated to 200A as Robert suggests....
Re: Emontx V3 to monitor house and Geothermal in the US
Simple: You take the secondary current at 200 A (or whatever maximum current want to measure) and use Ohm's law with a voltage of 1.1 V. That will give you a few percent in hand. R = V / I. Then choose the nearest preferred value resistor below, unless the nearest preferred value above is very close. The power rating of the resistor shouldn't be a problem, but if you want to calculate it, P = V2/R = I2R = VI, where I is the secondary current and V = 1.1 V.


Tezos Commons Foundation, also known as TCF, is a grassroots organized community assembled to help drive and facilitate the creation and execution of community engagement activities exclusively promoting the Tezos protocol.
The mission of Tezos Commons Foundation is to foster the growth of the global Tezos ecosystem through the identification, funding and execution of projects that drive community growth, awareness and success.
TCF was created by the organizers of the community petition, read The Story and Voice of the Tezos Community, to ensure a strong Tezos community voice and impartial governance, management and support of ideas and projects.
TCF is a peer organization to the Tezos Foundation. TCF represents the voice of the Tezos ecosystem and works with all Tezos organizations - core developers, Tezos Foundation, and independent teams - to evolve the ecosystem.
Though the TCF is an autonomous entity separate from the Tezos Foundation, it may seek to secure funding from Tezos Foundation in order to complete community engagement projects that the larger Tezos Community favors.
The TCF will routinely take feedback and ideas from the Tezos Community and formally propose projects on their behalf. If approved, the TCF would then work with vendors to complete projects with the financial support of the Tezos Foundation.
The TCF board was elected by 70+ Tezos community members who had been active participants in the Riot channels. Elections were held in March, 2018 from a pool of community leaders who were nominated.
The voting members were active participants in the Tezos Riot channels and were known to the Tezos community as sincere supporters of Tezos. There was a need to quickly form TCF, so a balanced approach was taken to ensure timeliness while still considering the views of the wider community. In future, the community governance model will work toward including the entire community (including future XTZ holders after launch).
TCF has been endowed with a generous donation from Diego Pons, former board member of the Tezos Foundation. We are grateful to Diego for his unselfish and continuous support of Tezos.
TCF anticipates significant donations from organizations and individuals in the Tezos ecosystem. TCF will also explore other possibilities for creating an ongoing stream of funds for projects.
TCF will begin by funding:
COMMUNITY ENGAGEMENT:
TCF will consider funding meetups, hackathons, events and other local community activities that drive excitement for the Tezos protocol.
DEVELOPMENT PROJECTS:
TCF will consider proposals for community projects & efforts such as development initiatives and communication platforms that enhance and enable greater collaboration and reach of the Tezos Community and Tezos protocol.
MARKETING INITIATIVES:
TCF will consider any proposals that drive marketing, communications & PR efforts such as sponsored and organic articles, industry interviews & posts, public speaking engagements and social media plans that raise awareness and brand equity for the Tezos brand.
GOVERNANCE INITIATIVES:
TCF will lead in the development of Tezos governance protocols and methodologies that serve the community's best interests.
All TCF positions are currently unpaid, however, compensation structure will be decided by the elected board.
Current TCF board members are seated for a term of six months following the Mainnet launch of Tezos. Over this period of time the board will work with the broader Tezos community to develop a process for campaigning and elections to best represent the ecosystem.
There are a number of opportunities for community members to get involved in TCF. Four committees have been identified and will soon solicit interest from the broader community to help.
Community Marketing committee - working on marketing, events, social and web opportunities. Contact Jonas Lamis (@jonas on Riot, @bitcom on Riot)
Development Grants committee - working on process for receiving and evaluating grant requests (@StephenAndrews on Riot, @tokyo_Crypto on Riot)
Research and Education committee - developing relationships with thought leaders and producing original content (@Neapen on Riot, @Laprunminta on Riot)
Governance committee - researching and developing processes for internal government of TCF and the broader Tezos ecosystem (@Laprunminta on Riot, @forsetiT on Riot)
Before soliciting funding requests from the community the interim board will collaborate with a development grants committee to decide on criteria and restrictions in foundation’s selection process. We expect a grant submission process to be announced in Q2 2018.
Keep up to date with the latest Tezos related news and events by following us below - or send us an email with any of you queries.
Thanks for being part of a great community


Ammonium Zinc Sulfate
Formula: (NH4)2Zn(SO4)2·6H2O
Extremely shiny, extremely transparent: one of the best candidates for crystal growing.
Details ...
All the stuff I put online, in one place finally
Formula: (NH4)2Zn(SO4)2·6H2O
Extremely shiny, extremely transparent: one of the best candidates for crystal growing.
Formula: (NH4)2[CuCl4]
Blue crystals, obtained when ammonium chloride NH4Cl is crystallized together with copper(II) chloride CuCl2.
Formula: (NH4)2[Cu(SO3NH2)2Cl2]
An unusual coordination complex of copper, producing dark blue crystals.
Similar compounds: + Potassium bis(sulfamato) chlorocuprate, K2[Cu(SO3NH2)2Cl2]. + Potassium bis(sulfamato) bromocuprate, K2[Cu(SO3NH2)2Br2].
Formula: NH4H2PO4 This compound, also known by its abbreviated name ADP, together with its chemical sibling, potassium dihydrogen phosphate(KH2PO4, abbreviated names is KDP) are one of the standard compounds in crystal growing kits. It is safe and produces large elongated crystals easily.


Now you need to add some input elements. If you have already created one you can add it right now. Otherwise you have to go create one and come back to the form once you are done.
For documentation on how to use the form, visit the project home page
Good luck!


How the Internet Works Report
To learn more about "Domain Names and ICANN", click on the link below or "Topic 1" at the top
Learn MoreTo learn more about "IP Addresses, Packets, and Routing", click on the link below or "Topic 2" at the top
Learn MoreTo learn more about "DNS", click on the link below or "Topic 3" at the top
Learn MoreTo learn more about "HTTP and HTTPS", click on the link below or "Topic 4" at the top
Learn MoreTo learn more about "W3C, HTML, and CSS", click on the link below or "Topic 5" at the top
Learn More


Hello ! Your favorite food is , your favorite music is , your favorite color has the hex code of and you were born on !


Stories from Around the World
by FCIT
“The Lad Who Went to the North Wind”
by Traditional
Additional Information
- Year Published: 0
- Language: English
- Country of Origin: Norway
- Source: George Webbe Dasent, ed., Popular Tales from the Norse
-
Readability:
- Flesch–Kincaid Level: 3.3
- Word Count: 1,256
- Genre: Fairy Tale/Folk Tale
- ✎ Cite This
Downloads
Once on a time there was an old widow who had one son and, as she was poorly and weak, her son had to go up into the safe to fetch meal for cooking; but when he got outside the safe, and was just going down the steps, there came the North Wind, puffing and blowing, caught up the meal, and so away with it through the air. Then the lad went back into the safe for more; but when he came out again on the steps, if the North Wind didn’t come again and carry off the meal with a puff; and more than that, he did so the third time. At this the lad got very angry; and as he thought it hard that the North Wind should behave so, he thought he’d just look him up, and ask him to give up his meal.
So off he went, but the way was long, and he walked and walked; but at last he came to the North Wind’s house.
“Good day!” said the lad, and “thank you for coming to see us yesterday.”
“GOOD DAY!” answered the North Wind, for his voice was loud and gruff, “AND THANKS FOR COMING TO SEE ME. WHAT DO YOU WANT?”
“Oh!” answered the lad, “I only wished to ask you to be so good as to let me have back that meal you took from me on the safe steps, for we haven’t much to live on; and if you’re to go on snapping up the morsel we have there’ll be nothing for it but to starve.”
“I haven’t got your meal,” said the North Wind; “but if you are in such need, I’ll give you a cloth which will get you everything you want, if you only say, ‘Cloth, spread yourself, and serve up all kinds of good dishes!’”
With this the lad was well content. But, as the way was so long he couldn’t get home in one day, he turned into an inn on the way; and when they were going to sit down to supper, he laid the cloth on a table which stood in the corner and said:
“Cloth spread yourself, and serve up all kinds of good dishes.”
He had scarce said so before the cloth did as it was bid; and all who stood by thought it a fine thing, but most of all the landlady. So, when all were fast asleep, at dead of night, she took the lad’s cloth, and put another in its stead, just like the one he had got from the North Wind, but which couldn’t so much as serve up a bit of dry bread.
So, when the lad woke, he took his cloth and went off with it, and that day he got home to his mother.
“Now,” said he, “I’ve been to the North Wind’s house, and a good fellow he is, for he gave me this cloth, and when I only say to it, ‘Cloth, spread yourself, and serve up all kinds of good dishes,’ I get any sort of food I please.”
“All very true, I dare say,” said his mother; “but seeing is believing, and I shan’t believe it till I see it.”
So the lad made haste, drew out a table, laid the cloth on it, and said:
“Cloth, spread yourself, and serve all up kinds of good dishes.”
But never a bit of dry bread did the cloth serve up.
“Well,” said the lad, “there’s no help for it but to go to the North Wind again;” and away he went.
So he came to where the North Wind lived late in the afternoon.
“Good evening!” said the lad.
“Good evening,” said the North Wind.
“I want my rights for that meal of ours which you took,” said the lad; “for as for that cloth I got, it isn’t worth a penny.”
“I’ve got no meal,” said the North Wind; “but yonder you have a ram which coins nothing but golden ducats as soon as you say to it:
“‘Ram, ram! Make money!’”
So the lad thought this a fine thing but as it was too far to get home that day, he turned in for the night to the same inn where he had slept before.
Before he called for anything, he tried the truth of what the North Wind had said of the ram, and found it all right; but when the landlord saw that, he thought it was a famous ram, and, when the lad had fallen asleep, he took another which couldn’t coin gold ducats, and changed the two.
Next morning off went the lad; and when he got home to his mother he said:
“After all, the North Wind is a jolly fellow; for now he has given me a ram which can coin golden ducats if I only say, ‘Ram, ram! Make money!’”
“All very true, I dare say,” said his mother; “but I shan’t believe any such stuff until I see the ducats made.”
“Ram, ram! Make money!” said the lad; but if the ram made anything it wasn’t money.
So the lad went back again to the North Wind and blew him up, and said the ram was worth nothing, and he must have his rights for the meal.
“Well,” said the North Wind; “I’ve nothing else to give you but that old stick in the corner yonder; but it’s a stick of that kind that if you say:
“‘Stick, stick! Lay on!’ It lays on till you say:
“‘Stick, stick! Now stop!’”
So, as the way was long, the lad turned in this night too to the landlord; but as he could pretty well guess how things stood as to the cloth and the ram, he lay down at once on the bench and began to snore, as if he were asleep.
Now the landlord, who easily saw that the stick must be worth something, hunted up one which was like it, and when he heard the lad snore, was going to change the two, but just as the landlord was about to take it the lad bawled out:
“Stick, stick! Lay on!”
So the stick began to beat the landlord, till he jumped over chairs, and tables, and benches, and yelled and roared:
“Oh my! Oh my! Bid the stick be still, else it will beat me to death, and you shall have back both your cloth and your ram.”
When the lad thought the landlord had got enough, he said:
“Stick, stick! Now stop!”
Then he took the cloth and put it into his pocket, and went home with his stick in his hand, leading the ram by a cord round its horns; and so he got his rights for the meal he had lost.


To use gradient for Rectangle Shape, you need to do following:
1. Place rectangle shape on desired location, click on it to be selected
2. Set property "Use Gradinet" to be true, like shown on the next picture.
3. To change colors that are used for gradient, select property "Gradient Definition", like shown on the next picture, when you press button next to it, it will open property window.
4. In the property window you can chouse what color gradient should use, and start, end and direction of the gradient. When finished press OK button.
This is how it will look like after we set all of the desired parameters.


ORG_3000004 - has geolocation representation
Label
has geolocation representation
Editor preferred label
has latlong
Alternate name
has geolocation
Sub property of
Definition
Specifies the geolocation string for a geolocation
Definition source
Michael Conlon https://orcid.org/0000-0002-1304-8447
Example
29.6651224,-82.3396949
Editor’s note
Regex pattern restriction to +/-lat;+/-long
Term editor
Michael Conlon https://orcid.org/0000-0002-1304-8447


@(exercises: List[Exercise], medicalCondition: List[MedicalConditions]) @import helper._ @main("Success") {
@exercise.description
@if(exercise.equipment != "None") {Equipment Required: @exercise.equipment
} @if(exercise.injuries != "") {Avoid for the following injuries: @exercise.injuries
}


The Networklore Tools newsletter
What I have to offer
Latest news about SYDI
Tips about networking
News about other tools from Networklore
Email:


--- title: "Valid and invalid states" status: draft text: Add a border around select boxes to indicate whether user input is valid or invalid. # Example content label: What option? invalid: Please select and option valid: Successfully validated ---


The DEFAULTROWHEIGHT record specifies the height of all undefined rows on the sheet. The miyRw field contains the row height in units of 1/20th of a point. This record does not affect the row height of any rows that are explicitly defined.
Record Data
|
Offset |
Field Name |
Size |
Contents |
|
4 |
grbit |
2 |
Option flags (see the following table) |
|
6 |
miyRw |
2 |
Default row height |
The grbit field contains the following option flags:
|
Offset |
Bits |
Mask |
Flag Name |
Contents |
|
0 |
0 |
01h |
fUnsynced |
=1 if all undefined rows have incompatible font height and row height |
|
|
1 |
02h |
fDyZero |
=1 if all undefined rows have 0 (zero) height |
|
|
2 |
04h |
fExAsc |
=1 if all undefined rows have an extra space above |
|
|
3 |
08h |
fExDsc |
=1 if all undefined rows have an extra space below |
|
|
7–4 |
F0h |
(Unused) |
|
|
1 |
7–0 |
FFh |
(Unused) |
|


Timestamp API Docs
User Stories :
-
API endpoint is
GET https://apis-v1-jolav.glitch.me/time/:date_string
-
A date string is valid if can be successfully parsed by
new Date(date_string)
.
Note that the unix timestamp needs to be an
integer (not a string) specifying
milliseconds.
You must use date strings compliant with ISO-8601 (e.g.
"2016-11-20"
) because this will ensure an UTC timestamp.
-
If the date string is
empty the service uses the current timestamp.
-
If the date string is
valid the api returns a JSON having the structure where "utc" is RFC1123
{"unix":<PHONE_NUMBER>000 ,"utc": "Sun, 20 Nov 2016 18:31:29 GMT"}
-
If the date string is
invalid the api returns a JSON having the structure
{"unix": 0, "utc" : "Invalid Date" }
.
Example Usage:
Example Output:
{
"unix":<PHONE_NUMBER>000,
"utc": "Tue, 04 Jul 2017 12:21:57 +0200"
}


I develope applications that allow motivated individuals and organizations to leverage technology. At the core of my developement strategy is to focus on creating game-changing solutions for game-changers.
Location: Berkeley, CA
Age: 29 years old
Alma mater: Northern Arizona University
Quirk: I compete in a trading card game, Magic the Gathering
Love: My mother and my wife, in no particular order


{% extends "base.html" %} {% comment %} Copyright (c) 2011 Stanford University Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.  IN NO EVENT SHALL AUTHORS BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. This is the template for the report page. {% endcomment %} {% block head %} {% endblock %} {% block title %}Report {{ report.id}}{% endblock %} {% block content %}


Schematic representation of experimental workflow. Fresh frozen tissue samples from CV-PTC (n = 6), FV-PTC (n = 6) and benign (n = 6) were lysed and reduced, alkylated and trypsin and lys-C digested. Digested protein samples were then analyzed by LC–MS/MS.


Preparation time
less than 30 mins
Cooking time
over 2 hours
Serves
Serves 4
This recipe for meltingly tender pork is a great alternative to a Sunday roast. You can even make the tabbouleh and apple sauce in advance and serve them at room temperature.
For the pork shoulder, preheat the oven to 150C/300F/Gas 2.
Boil a kettle and pour the boiling water over the pork skin, discarding the water. Pat the pork shoulder dry using kitchen paper and place in a deep-sided roasting tray.
Roast in the oven for four hours, or until very tender and golden-brown. Remove the pork from the oven and set aside to rest for 30 minutes.
For the roasted vegetable tabbouleh, preheat the oven to 200C/400F/Gas 6.
Mix the courgettes, aubergine, peppers and onions with the olive oil and place onto a roasting tray. Roast in the oven for 20-30 minutes, or until tender and slightly charred.
Remove the vegetable from the oven and chop roughly.
Drain the bulgur wheat well and place into a large bowl. Add the remaining ingredients, the chopped roasted vegetables and mix until well combined. Season to taste with salt and freshly ground black pepper.
For the apple BBQ sauce, heat the olive oil in a saucepan and fry the onion and garlic for 1-2 minutes, or until just softened. Add the apple pieces and chilli and fry for a further minute. Stir in the sugar, teriyaki sauce vinegar and tomato ketchup. Cover and cook for 3-4 minutes, or until the apples are softened.
To serve, shred the pork meat with two forks and pile onto one side of a large serving plate. Spoon the tabbouleh alongside and serve the apple sauce in a bowl.


Serial commands
There are two formats for the keyword. Those starting with '$' are comma separated values, followed by a checksum. Commands starting with a character other than '$' have arguments grouped by braces into keywords and values. The former may be used with instruments; the latter is the format used for interprocessor communication.
DRIVE
GameBots serial command format allows replacement by the USARSim simulator. Since USARsim is no longer available, the Gamebots format has been modified:
1. D {s ComandedSpeed} {a ComandedSteerAngle}
Where:
{s ComandedSpeed} ComandedSpeed is an intege giving the speed for the rear wheel in centimeters per second.
The value is the speed, in centimeters / second.
{a ComandedSteerAngle} ComandedSteerAngle is an integer that specifies the steer angle
of Elcano’s front wheels. The value is the absolute steer angle, in degrees.
Example: D {s 259} {a -3}
SENSOR
A similar format will be used for sensed information from C6.
2. S {s ActualSpeed}
ActualSpeed gives the speed for the rear wheel.
The value is the speed, in centimeters per second.
Other sensors are:
3. S {a Deg}
Steering angle of the front wheels, in degrees times.
0 degrees is straight ahead, small positive numbers are degrees to the right.
Negative numbers (mod 360) are degrees to the left.
4. S {p EPosMeters,NPosMeters} {b Deg}
// Best estimate of vehicle position, fused from all sensors.
The East and North positions are relative to the origin.
Bearing tells which way the vehicle is pointing.
OTHER
5. G {n Num} {p EPosMeters,NPosMeters} {b Deg}
5a. G {n Num} {p EPosMeters,NPosMeters} {b Deg} {r Probability}
6. X {n Num} {p EPosMeters,NPosMeters} {b Deg} {s SegSpeed}
Goal gives the positions of the cones, which may be updated from visual information. The next goal is always {Num 1} If a bearing is present, it is the desired direction of approach to the goal.
The localization processor passes messages 4, SENSOR and 5, GOAL to the vision processor. The vision processor then computes the expected position of the cone in the image. After processing the image, it will compute an updated cone position, including the probability that a cone is present in the image. It passes message 5a back to the vision processor.
Segment 1 is the next desired position from the present position. These are followed by Segments 2, 3, 4, 5. Farther segments would not be transmitted. The speed on a segment is the recommended speed, taking account of conditions and turning radius.
GPS
NMEA Output sentences $GPxxx. These include $GPRMC, $GPVTG. $GPGGA, $GPGSA and $GPGSV. See http://www.adafruit.com/datasheets/GlobalTop-FGPMMOPA6H-Datasheet-V0A.pdf
Communication to the GPS receiver uses NMEA PMTK packets such as $PMTK220, $PMTK314 and $PMTK605. See http://www.adafruit.com/datasheets/PMTK_A08.pdf
Maps
Format is similar to NMEA output. '*xx' means the character '*' followed by a checksum.
$MAPLS,N*xx
Requests processor N to list the names of all maps.
$MAPTX,N,count,num,name*xx
Processor N transmits the name of map num of count. Count is the number of maps on the processor.
$MAPSL,N,name*xx
Request processor N to send contents of map 'name'.
$MAPLN,N,count,num,data*xx
Processor N sends line num of count for the requested map. 'Data' consists of
node,latitude,longitude,PositionEast,PositionNorth,Link1,Link2,Link3,Link4,Dist1,Dist2,Dist3,Dist4
Where
node is the name or number of the point.
latitude and longitude are in decimal degrees.
Positions are in meters
Links are other nodes that are directly linked to this node. If there are more than four, use two different names for the present node, but separate them by zero distance. If there are fewer than four, that field is blank.
Dist are distances in meters along the road to a node.
Example data:
8,47.760342,-122.189784,71.903,154.917,2,7,15,,268.441,142.961,269.358,
15,47.757929,-122.189467,95.599,-113.397,8,16,18,,269.358,26.369,182.216,
13,47.621921,-122.348628,170.313,69.008,14,,,,18.578,,,,
The maps themselves are internal to C4 and its SD card. They do not have to be transmitted. C4 needs to have additional information about the route. From this information, it will produce the next portion of the drive path, which will be transmitted to C3.
The map for the SD card must contain information about the links between nodes. Each link will have the following information:
$LNKLST,startNode,endNode,numberOfSegments,segmentIndex1,...,segmentIndexN
$LNKSEG,index,nextIndex,PositionEast,PositionNorth,bearing,width,speed


Demo Install
To get the application up and running quickly, a demo mode is available for Linux. Demo mode functions just like a production instance but is not secure for production use. Demo mode removes TLS encryption and authentication. Run the install script on Ubuntu 16.04 or 18.04 with at least 2GB RAM and 8 GB free disk space. Install can take 20 minutes or longer depending on your internet connection. The install script downloads all needed Docker containers and clones the Git repo. Production and demo use the code. To configure for production, please take a few extra steps to secure DB4SCI. See: Install
Install dbi4sci demo on a Ubuntu host as root.
curl http://db4sci.org/install_demo.sh | bash


happy couple
Drashti Patel
She is gujju and majored in computer science, that's the best combination I could ask for. She is extremely hard working and goal oriented. She doesn’t quit when things get hard, and just pushes through. This trait is extremely admirable and I love her for it. Though she has sweet tooth but she is the biggest fan of spicy food.
Brijesh Patel
He is adventurous, willing to take risks, and constantly teaches me new things about life. He is the biggest fan of Harry Potter that I know of. I’m never bored for a second and feel more comfortable than with anyone else. He appreciates me for me. I can always be myself around him.
Pre Wedding Teaser
Pre Wedding
Wedding Events
Sangeet
Friday, August 6th, 2021 6:30 PM Deewan Banquet 3872, 560 Stelton Rd, Piscataway, NJ 08854Attire : Indian Traditional
Baraat
Saturday, August 7, 2021 9:30 AM Brooklake Country Club 139 Brooklake Rd, Florham Park, NJ 07932Attire : Indian Traditional
Wedding Ceremony
Saturday, August 7, 2021 10:30 AM Brooklake Country Club 139 Brooklake Rd, Florham Park, NJ 07932Attire : Indian Traditional
Reception
Saturday, August 7, 2021 6:30 PM - 11:30 PM Brooklake Country Club 139 Brooklake Rd, Florham Park, NJ 07932Attire : Western


Download Becks Vier Logo
Pics. The current status of the logo is obsolete, which means the logo is not in use by the company anymore. Download beck's interbrew 2004 logo now.
Vector + high quality images. Create your logo design online for your business or project. Designevo's free logo maker helps you create unique logos in seconds.
As of 2010 win campbell is the chief executive officer.
Download beck's interbrew 2004 logo now. Get high quality logotypes for free. From wikimedia commons, the free media repository. Customize a logo for your company easily with our free online logo maker.


Jemima Goldsmith pins Joaquin Phoenix as Oscar winner for 'Joker'
by Entertainment DeskJemima Goldsmith is in awe of Joaquin Phoenix’s performance in and as Joker. Jemima said she would be surprised if the actor didn’t win an Oscar for his prowess in the film.
She, on Friday, took to Twitter and wrote, How can Joaquin Phoenix not get the Oscar for that mesmerising performance in Joker?”
And Twitter agrees.
Some argued that Oscar doesn’t really mean much.
But then again, is Jemima’s any tweet really complete without this question?
Earlier the film release, speculation that Phoenix might well be a contender to take the Best Actor award at the 2020 Oscars were rife.
 He becomes the titular criminal who commits atrocities in Gotham City.


 Artificial intelligence was founded as an academic discipline in 1956, and in the years since has experienced several waves of optimism, followed by the loss of funding which was then swiftly followed by new approaches, success and renewed funding. For most of AI's history, research has been divided into subcategories that often fail to communicate with each other. These subcategories are based on technical considerations, such as particular goals like robotics, the use of particular tools like logic or artificial neural networks, or deep philosophical differences.
The field was founded on the claim that human intelligence can be so precisely described that a machine can be made to simulate it. This raises philosophical arguments about the nature of the mind and the ethics of creating artificial beings endowed with human-like intelligence which are issues that have been explored by myth, fiction and philosophy since antiquity. Some people also consider AI to be a danger to humanity if it progresses unabated. Others believe that AI, unlike previous technological revolutions, will create a risk of mass unemployment.
A typical AI perceives its environment and takes actions that maximize its chance of successfully achieving its goals. An AI's intended goal function can be simple or complex . Goals can be explicitly defined, or can be induced. If the AI is programmed for "reinforcement learning", goals can be implicitly induced by rewarding some types of behavior and punishing others. Alternatively, an evolutionary system can create goals by using a "fitness function" to mutate and replicate high-scoring AI systems; this is similar to how animals evolved to innately desire certain goals such as finding food, or how dogs can be bred via artificial selection to possess desired traits. Some AI systems, such as nearest-neighbor, instead reason by analogy; these systems are not generally given goals, except to the degree that goals are somehow implicit in their training data. Such systems can still be benchmarked if the non-goal system is framed as a system whose "goal" is to successfully accomplish its narrow classification task.


Currently working in the field of Data Science for the last 13 years. Avid speaker and presenter at industry workshops and a strong contributor to the Data Science community. Seeking opportunities to grow in the international arena in order to grow my knowledge, professional experience and to move into leading technology research.
Work providing Data Science and Data Analytics solutions:
Work providing I.T. solutions:
Instructor of the Pentaho Suite. Development of cubes, dashboards, ETL process.
Mainly using the Pentaho suite and software created by the BI community:
(2014-2):
(2015-1):
Researcher in Business Intelligence, Data Warehouse and Web development.


| 665 | (A) | and kramede þam witħ caryons the kirnełłs vndir |
| 668 | (C) | And crammede it with kareyne . þe corneres vnder |
| 660 | (D) | Crammyd with careyne þe corners vndur |
| 642 | (E) | & crammyd with careyne . þe corners vnder . |
| (Ex) | ---- no text ---- | |
| 682 | (L) | Crammen hit myd karayn þe kirnels vnder |
| 622 | (P) | Crommyd it with caryenn þe kyrnels vnder |
| 651 | (U) | Fillen hem witħ caren / the corners alle vnder |
| (V) | ---- no text ---- |


Daniel Craig
Business Analyst
National Oilwell Varco 06.2018 - Present Los Angeles, United StatesPopular Q&A
National Oilwell Varco
The app was intuitive, modern, and sleek. It performed well in beta tests and received enthusiastic user feedback. A collaborative partner, WillowTree complied with the timeline and delivered value. Their UI design and development skills were particularly strong.
National Oilwell Varco
The app was intuitive, modern, and sleek. It performed well in beta tests and received enthusiastic user feedback. A collaborative partner, WillowTree complied with the timeline and delivered value. Their UI design and development skills were particularly strong.
National Oilwell Varco
The app was intuitive, modern, and sleek. It performed well in beta tests and received enthusiastic user feedback. A collaborative partner, WillowTree complied with the timeline and delivered value. Their UI design and development skills were particularly strong.
National Oilwell Varco
The app was intuitive, modern, and sleek. It performed well in beta tests and received enthusiastic user feedback. A collaborative partner, WillowTree complied with the timeline and delivered value. Their UI design and development skills were particularly strong.
National Oilwell Varco
The app was intuitive, modern, and sleek. It performed well in beta tests and received enthusiastic user feedback. A collaborative partner, WillowTree complied with the timeline and delivered value. Their UI design and development skills were particularly strong.
National Oilwell Varco
The app was intuitive, modern, and sleek. It performed well in beta tests and received enthusiastic user feedback. A collaborative partner, WillowTree complied with the timeline and delivered value. Their UI design and development skills were particularly strong.
National Oilwell Varco
The app was intuitive, modern, and sleek. It performed well in beta tests and received enthusiastic user feedback. A collaborative partner, WillowTree complied with the timeline and delivered value. Their UI design and development skills were particularly strong.
National Oilwell Varco
“A pump is a machine used to move liquid through a piping system and to raise the pressure of the liquid...”
National Oilwell Varco
The app was intuitive, modern, and sleek. It performed well in beta tests and received enthusiastic user feedback. A collaborative partner, WillowTree complied with the timeline and delivered value. Their UI design and development skills were particularly strong.
National Oilwell Varco
“A pump is a machine used to move liquid through a piping system and to raise the pressure of the liquid...”
National Oilwell Varco
The app was intuitive, modern, and sleek. It performed well in beta tests and received enthusiastic user feedback. A collaborative partner, WillowTree complied with the timeline and delivered value. Their UI design and development skills were particularly strong.
National Oilwell Varco
“A pump is a machine used to move liquid through a piping system and to raise the pressure of the liquid...”
National Oilwell Varco
“A pump is a machine used to move liquid through a piping system and to raise the pressure of the liquid...”
National Oilwell Varco
“A pump is a machine used to move liquid through a piping system and to raise the pressure of the liquid...”
National Oilwell Varco
“A pump is a machine used to move liquid through a piping system and to raise the pressure of the liquid...”
National Oilwell Varco
“A pump is a machine used to move liquid through a piping system and to raise the pressure of the liquid...”
National Oilwell Varco
“A pump is a machine used to move liquid through a piping system and to raise the pressure of the liquid...”
National Oilwell Varco
“A pump is a machine used to move liquid through a piping system and to raise the pressure of the liquid...”
National Oilwell Varco
“A pump is a machine used to move liquid through a piping system and to raise the pressure of the liquid...”
National Oilwell Varco
“A pump is a machine used to move liquid through a piping system and to raise the pressure of the liquid...”


The Provost has has not approved your personnel action request. This request will not move forward in the process.
Please consult with the Provost for more information.


|
src/app/api-routes.ts
|
class |
APIRoutes |
100 %
(1/1)
|
|
src/app/app.component.ts
|
component |
AppComponent |
83 %
(5/6)
|
|
src/app/common/helper.ts
|
class |
Helper |
100 %
(2/2)
|
|
src/app/common/page-title/page-title.component.ts
|
component |
PageTitleComponent |
25 %
(1/4)
|
|
src/app/components/alert/alert.component.ts
|
component |
AlertComponent |
33 %
(1/3)
|
|
src/app/components/dashboard/dashboard.component.ts
|
component |
DashboardComponent |
83 %
(5/6)
|
|
src/app/components/login/login.component.ts
|
component |
LoginComponent |
71 %
(5/7)
|
|
src/app/components/notification-detail/notification-detail.component.ts
|
component |
NotificationDetailComponent |
88 %
(8/9)
|
|
src/app/components/notification-generator/notification-generator.component.ts
|
component |
NotificationGeneratorComponent |
90 %
(9/10)
|
|
src/app/components/notification/notification.component.ts
|
component |
NotificationComponent |
87 %
(7/8)
|
|
src/app/components/register/register.component.ts
|
component |
RegisterComponent |
85 %
(6/7)
|
|
src/app/models/Alert.ts
|
class |
Alert |
33 %
(1/3)
|
|
src/app/models/User.ts
|
class |
User |
20 %
(1/5)
|
|
src/app/models/UserNotification.ts
|
class |
UserNotification |
11 %
(1/9)
|
|
src/app/services/alert.service.ts
|
injectable |
AlertService |
83 %
(5/6)
|
|
src/app/services/auth-guard.service.ts
|
guard |
AuthGuardService |
0 %
(0/5)
|
|
src/app/services/notification.service.ts
|
injectable |
NotificationService |
11 %
(1/9)
|
|
src/app/services/notification.service.ts
|
variable |
httpOptions |
0 %
(0/1)
|
|
src/app/services/notification.service.ts
|
variable |
INFO_TIMEOUT |
0 %
(0/1)
|
|
src/app/services/user.service.ts
|
injectable |
UserService |
0 %
(0/9)
|
|
src/app/services/user.service.ts
|
variable |
httpOptions |
0 %
(0/1)
|
|
src/environments/environment.prod.ts
|
variable |
environment |
0 %
(0/1)
|
|
src/environments/environment.ts
|
variable |
environment |
0 %
(0/1)
|


{% extends 'base.html'%} {% from 'pitch_display_macro.html' import display_pitches%} {% block content%} {% block styles %} {{super()}} {% endblock %}
Welcome to My Blogs Website.
A site where you can view different people's Blogs and also get a chance to create your own Blog.


The Future Of Gaming Is Here Komodore64 is a Dutch video game company creating the next level entertainment experience for everyone. We are developing and re...
Check out the Komodo community on Discord - hang out with 7,784 other members and enjoy free voice and text chat.
BigSlim06-Jun-19 06:59 PM
Hmm it said expired the first try then the second try it said “resolving issues” and worked
Good ole discord for ya
gcharang06-Jun-19 07:00 PM
haha
are you sticking around to see whats happening here?
Azzie00106-Jun-19 07:27 PM
So mine funds were moved to that team adress after all...when can i expect mine coins?
gcharang06-Jun-19 07:28 PM
@Azzie001 did you submit the claim?
Azzie00106-Jun-19 07:28 PM
yes, just now
I mean i would of used ledger if i could claim revards...is it possible to do it now with ledger?
PTYX06-Jun-19 07:30 PM
Yea you can claim with ledger
Azzie00106-Jun-19 07:31 PM
nice in wich wallet?
PTYX06-Jun-19 07:31 PM
Magnum and the atomic labs tool
Azzie00106-Jun-19 07:31 PM
ok, thx
Anyone knows how long we have to wait for funds after submiting ticket?
Gordon Komodo06-Jun-19 07:32 PM
the plan is by June 15(edited)
2
Azzie00106-Jun-19 07:37 PM
hm so no selling...
hm
interesting
I guess price will drop when we all get funds back
I mean who gives the right to team to take all the funds
coyote06-Jun-19 07:43 PM
No offense Azzie but you are being a fool. The team saw a vulnerability and instead of letting a hacker steal your funds decided to secure them in a safe address
1
pinkcookie06-Jun-19 07:43 PM
@Azzie001 no one gave the team rights to take funds. It was an executive decision to save funds of investors rather than letting hacker take it all.
1
Azzie00106-Jun-19 07:44 PM
I get that official word is they acted in our best interest
jl777c06-Jun-19 07:44 PM
if the house is burning, do the firefighters wait for permission to rescue the people inside?
2
1
1
2
Azzie00106-Jun-19 07:44 PM
but its like i break into your house because someone else could do it
coyote06-Jun-19 07:45 PM
Lol ok so you rather have lost your funds for good. Understood
PTYX06-Jun-19 07:46 PM
If the team didn't act, there would be no funds to talk about.
Azzie00106-Jun-19 07:46 PM
not rly...i get why they did it...and am glade they saved mine our funds
but it still pisses me off
1
Alexfrog06-Jun-19 07:47 PM
Azzie, a hacker had started stealing coins. Literally 8M more KMD couldve been stolen by the hacker if they didnt act.
Literally a ton of people here wouldve been ruined
jl777c06-Jun-19 07:47 PM
after analyzing the blockchain, we see that the hacker had indeed started stealing coins an hour before we started sweeping
Alexfrog06-Jun-19 07:47 PM
Every person now submitting a claim and waiting a week to get coins back would instead have had all their coins stolen
pinkcookie06-Jun-19 07:47 PM
You can’t be pissed at them utilizing a known vulnerability to save your money with the intent to return your funds. If the hacker would have taken them all you would not even have that option
2
Azzie00106-Jun-19 07:48 PM
but how did they managed to found aout how he did it in so short time and they didnt know about it before...its all so shady. It makes me nervous about team and project
Yesterday, the npm, Inc. security team, in collaboration with Komodo, helped protect over $13 million USD in cryptocurrency assets as we found and responded to a malware threat targeting the users of...
Azzie00106-Jun-19 07:48 PM
Also i still didint get funds back...will they lock the price of komodo on the 5th?
jl777c06-Jun-19 07:48 PM
we indeed did not know it until earlier in the day when we were notified of it
you need to ask mr market to freeze prices(edited)
2
coyote06-Jun-19 07:49 PM
Lol
Welcome to crypto azzie, this must be your first rodeo
Azzie00106-Jun-19 07:49 PM
see...i bet u price will drop hard when ppl gte funds back...i know am selling mine bag asap
pinkcookie06-Jun-19 07:50 PM
Sell them to me plz
Azzie00106-Jun-19 07:50 PM
nah i seen mine share of disaster...but this is first time team takes mine coins so hacker wouldnt
Alexfrog06-Jun-19 07:50 PM
please do, and go to verge or tron. you deserve a coin whose dev team has no technical skills, and whose response to a hack like this would be to try to hide that it happened
jl777c06-Jun-19 07:50 PM
we actually took the coins from the hacker as he had the privkeys
Azzie00106-Jun-19 07:50 PM
u can buy on other places u dont need mine bag
Vertigo06-Jun-19 07:51 PM
Lol you guys hacked the hacker?
Azzie00106-Jun-19 07:51 PM
nah am starting to think that all alts are shitcoins...shoiuld go 100% into BTC
1
jl777c06-Jun-19 07:51 PM
you should have let us known you didnt want us to save your coins, we would have left it for the hacker
6
coyote06-Jun-19 07:51 PM
Haha
Actually you should just donate his coins to someone who wants them
pinkcookie06-Jun-19 07:52 PM
There you go @Azzie001@coyote idea is best
2
1
Azzie00106-Jun-19 07:52 PM
So u are telling me mine coins are not mine? ok
well, nice talking to u guys
jl777c06-Jun-19 07:52 PM
once your privkey was known by hacker, it wasnt exclusively yours
Vertigo06-Jun-19 07:53 PM
Ernn James I got 3000 Komodo stolen but I forgot my address you can just send it to my new one.
jl777c06-Jun-19 07:53 PM
sent
Azzie00106-Jun-19 07:54 PM
yes i noticed that...spent mine last few hours filing forms and worying where did mine money go...and its not pocket money....i worked hard for it
Vertigo06-Jun-19 07:54 PM
Gordon Komodo06-Jun-19 07:54 PM
@Azzie001 even bitcoin could have gotten hacked with the similar exploit on electrum , so are you calling bitcoin a shitcoin too?(edited)
Azzie00106-Jun-19 07:54 PM
I am just saying this is shitshow
and it doesnt make ppl feel good about anything related to KMD
pinkcookie06-Jun-19 07:55 PM
how so
Vertigo06-Jun-19 07:55 PM
I think is funny as hell that you got the coins from the hacker using the same exploit
2
polycryptoblog06-Jun-19 07:56 PM
@Azzie001 I’m sure you have heard the phrase not your keys not your coins , KMD had to make a quick decision to save peoples funds which they worked hard for, or else they would be gone for good. As they say when Life hands you lemons ....


title = "Search" url = "/search" layout = "master" is_hidden = 0 robot_index = "index" robot_follow = "follow" child_of = "mey_no_parent" hide_crumb = 0 remove_crumb_trail = 0 crumb_disabled = 0 [viewBag] localeUrl[id] = "/search-results" [searchResults] resultsPerPage = 10 showProviderBadge = 1 noResultsMessage = "Your search returned no results." visitPageMessage = "Visit page" ==


Counting is pretty easy, right? There’s not all that much to it. With a few considerations we can cover most of the scenarios that users will encounter while using Tplyr. Denominators, on the other hand, get a lot more complicated. Why? Because there are a lot of ways to do it. What values do we exclude from the denominator? What variables establish denominator grouping? Does the denominator use a different filter than the values being counted? If you’ve programmed enough of these tables, you know that it’s all very situational.
Given the complexity, we’ve spent a lot of time trying to make this easy for you, the user. In doing this it became very clear that denominators needed their own vignette. Additionally, a few other things go hand in hand with denominators.
Make sure you have a good understand of count and shift layers before you review this content. If you’ve done your due diligence, then - here we go.
What do you do when your target dataset doesn’t have the information necessary to create your denominator? For example - when you create an adverse event table, the adverse event dataset likely only contains records for subjects who experienced an adverse event. But subjects who did not have an adverse event are still part of the study population and must be considered in the denominator.
For this reason, Tplyr allows lets you set a separate population dataset - but there are a couple things you need to do to trigger Tplyr to use the population data as your denominator.
Consider these two examples.
tplyr_table(adae, TRTA) %>% add_layer( group_count(AEDECOD) %>% set_distinct_by(USUBJID) %>% set_format_strings(f_str('xx (xx.x%)', distinct_n, distinct_pct)) ) %>% build() %>% head() %>% kable()
| row_label1 | var1_Placebo | var1_Xanomeline High Dose | var1_Xanomeline Low Dose | ord_layer_index | ord_layer_1 |
|---|---|---|---|---|---|
| ACTINIC KERATOSIS | 0 ( 0.0%) | 1 ( 2.4%) | 0 ( 0.0%) | 1 | 1 |
| ALOPECIA | 1 ( 4.8%) | 0 ( 0.0%) | 0 ( 0.0%) | 1 | 2 |
| BLISTER | 0 ( 0.0%) | 1 ( 2.4%) | 5 (11.9%) | 1 | 3 |
| COLD SWEAT | 1 ( 4.8%) | 0 ( 0.0%) | 0 ( 0.0%) | 1 | 4 |
| DERMATITIS ATOPIC | 1 ( 4.8%) | 0 ( 0.0%) | 0 ( 0.0%) | 1 | 5 |
| DERMATITIS CONTACT | 0 ( 0.0%) | 0 ( 0.0%) | 1 ( 2.4%) | 1 | 6 |
tplyr_table(adae, TRTA) %>% set_pop_data(adsl) %>% set_pop_treat_var(TRT01A) %>% add_layer( group_count(AEDECOD) %>% set_distinct_by(USUBJID) %>% set_format_strings(f_str('xx (xx.x%)', distinct_n, distinct_pct)) ) %>% build() %>% head() %>% kable()
| row_label1 | var1_Placebo | var1_Xanomeline High Dose | var1_Xanomeline Low Dose | ord_layer_index | ord_layer_1 |
|---|---|---|---|---|---|
| ACTINIC KERATOSIS | 0 ( 0.0%) | 1 ( 1.2%) | 0 ( 0.0%) | 1 | 1 |
| ALOPECIA | 1 ( 1.2%) | 0 ( 0.0%) | 0 ( 0.0%) | 1 | 2 |
| BLISTER | 0 ( 0.0%) | 1 ( 1.2%) | 5 ( 6.0%) | 1 | 3 |
| COLD SWEAT | 1 ( 1.2%) | 0 ( 0.0%) | 0 ( 0.0%) | 1 | 4 |
| DERMATITIS ATOPIC | 1 ( 1.2%) | 0 ( 0.0%) | 0 ( 0.0%) | 1 | 5 |
| DERMATITIS CONTACT | 0 ( 0.0%) | 0 ( 0.0%) | 1 ( 1.2%) | 1 | 6 |
There are three things done above that use the population data:
set_pop_where()
and the population treatment variable must be specified using set_pop_treat_var()
set_distinct_by()
must be used. Why? Because when you need to use a separate population dataset, the target dataset is likely more than one record per subject. So set_distinct_by()
in this scenario would be used to get distinct counts per subject. In this example, we’re looking at the number of unique subjects who experienced a specific adverse event.distinct_pct
. It is also worth noting that the default count layer formats use distinct values.Note that if you need more control over the values used in the denominator from the population data, you can set a separate filter on the population data used set_pop_where()
.
Fortunately, denominators are much simpler when they’re kept within a single dataset. Just kidding! Let’s get weird.
When you’re looking within a single dataset, there are a couple factors that you need to consider for a denominator. The first is which grouping variables create those denominators. Let’s look at this from two perspectives - count layers and shift layers.
Most of the complexity of denominators comes from nuanced situations. A solid 80% of the time, defaults will work. For example, in a frequency table, you will typically want data within a column to sum to 100%. For example:
adsl <- adsl %>% mutate(DCSREAS = ifelse(DCSREAS == '', 'Completed', DCSREAS)) tplyr_table(adsl, TRT01P) %>% add_layer( group_count(DCSREAS) ) %>% build() %>% kable()
| row_label1 | var1_Placebo | var1_Xanomeline High Dose | var1_Xanomeline Low Dose | ord_layer_index | ord_layer_1 |
|---|---|---|---|---|---|
| Adverse Event | 8 ( 9.3%) | 40 ( 47.6%) | 44 ( 52.4%) | 1 | 1 |
| Completed | 58 ( 67.4%) | 27 ( 32.1%) | 25 ( 29.8%) | 1 | 2 |
| Death | 2 ( 2.3%) | 0 ( 0.0%) | 1 ( 1.2%) | 1 | 3 |
| I/E Not Met | 1 ( 1.2%) | 2 ( 2.4%) | 0 ( 0.0%) | 1 | 4 |
| Lack of Efficacy | 3 ( 3.5%) | 1 ( 1.2%) | 0 ( 0.0%) | 1 | 5 |
| Lost to Follow-up | 1 ( 1.2%) | 0 ( 0.0%) | 1 ( 1.2%) | 1 | 6 |
| Physician Decision | 1 ( 1.2%) | 2 ( 2.4%) | 0 ( 0.0%) | 1 | 7 |
| Protocol Violation | 1 ( 1.2%) | 1 ( 1.2%) | 1 ( 1.2%) | 1 | 8 |
| Sponsor Decision | 2 ( 2.3%) | 3 ( 3.6%) | 2 ( 2.4%) | 1 | 9 |
| Withdrew Consent | 9 ( 10.5%) | 8 ( 9.5%) | 10 ( 11.9%) | 1 | 10 |
By default, when not using the population data strategy shown above, a count layer assumes that you want columns to sum to 100%. But that’s not always the case. Perhaps you’d like to break this summary down by sex presented row-wise.
tplyr_table(adsl, TRT01P) %>% add_layer( group_count(DCSREAS, by=SEX) ) %>% build() %>% kable()
| row_label1 | row_label2 | var1_Placebo | var1_Xanomeline High Dose | var1_Xanomeline Low Dose | ord_layer_index | ord_layer_1 | ord_layer_2 |
|---|---|---|---|---|---|---|---|
| F | Adverse Event | 6 ( 7.0%) | 20 ( 23.8%) | 26 ( 31.0%) | 1 | 1 | 1 |
| F | Completed | 34 ( 39.5%) | 13 ( 15.5%) | 17 ( 20.2%) | 1 | 1 | 2 |
| F | Death | 1 ( 1.2%) | 0 ( 0.0%) | 1 ( 1.2%) | 1 | 1 | 3 |
| F | I/E Not Met | 0 ( 0.0%) | 0 ( 0.0%) | 0 ( 0.0%) | 1 | 1 | 4 |
| F | Lack of Efficacy | 2 ( 2.3%) | 1 ( 1.2%) | 0 ( 0.0%) | 1 | 1 | 5 |
| F | Lost to Follow-up | 1 ( 1.2%) | 0 ( 0.0%) | 1 ( 1.2%) | 1 | 1 | 6 |
| F | Physician Decision | 1 ( 1.2%) | 1 ( 1.2%) | 0 ( 0.0%) | 1 | 1 | 7 |
| F | Protocol Violation | 1 ( 1.2%) | 1 ( 1.2%) | 0 ( 0.0%) | 1 | 1 | 8 |
| F | Sponsor Decision | 1 ( 1.2%) | 0 ( 0.0%) | 0 ( 0.0%) | 1 | 1 | 9 |
| F | Withdrew Consent | 6 ( 7.0%) | 4 ( 4.8%) | 5 ( 6.0%) | 1 | 1 | 10 |
| M | Adverse Event | 2 ( 2.3%) | 20 ( 23.8%) | 18 ( 21.4%) | 1 | 2 | 1 |
| M | Completed | 24 ( 27.9%) | 14 ( 16.7%) | 8 ( 9.5%) | 1 | 2 | 2 |
| M | Death | 1 ( 1.2%) | 0 ( 0.0%) | 0 ( 0.0%) | 1 | 2 | 3 |
| M | I/E Not Met | 1 ( 1.2%) | 2 ( 2.4%) | 0 ( 0.0%) | 1 | 2 | 4 |
| M | Lack of Efficacy | 1 ( 1.2%) | 0 ( 0.0%) | 0 ( 0.0%) | 1 | 2 | 5 |
| M | Lost to Follow-up | 0 ( 0.0%) | 0 ( 0.0%) | 0 ( 0.0%) | 1 | 2 | 6 |
| M | Physician Decision | 0 ( 0.0%) | 1 ( 1.2%) | 0 ( 0.0%) | 1 | 2 | 7 |
| M | Protocol Violation | 0 ( 0.0%) | 0 ( 0.0%) | 1 ( 1.2%) | 1 | 2 | 8 |
| M | Sponsor Decision | 1 ( 1.2%) | 3 ( 3.6%) | 2 ( 2.4%) | 1 | 2 | 9 |
| M | Withdrew Consent | 3 ( 3.5%) | 4 ( 4.8%) | 5 ( 6.0%) | 1 | 2 | 10 |
Ok - so, now this is a little bit off. By breaking sex down as a row group, the denominators are still the total treatment group. Does that make sense? 34 female Placebo group subjects completed, but that calculated 39.5% also includes male subjects in the denominator. Let’s fix this using set_denoms_by()
.
tplyr_table(adsl, TRT01P) %>% add_layer( group_count(DCSREAS, by=SEX) %>% set_denoms_by(SEX, TRT01P) ) %>% build() %>% kable()
| row_label1 | row_label2 | var1_Placebo | var1_Xanomeline High Dose | var1_Xanomeline Low Dose | ord_layer_index | ord_layer_1 | ord_layer_2 |
|---|---|---|---|---|---|---|---|
| F | Adverse Event | 6 ( 11.3%) | 20 ( 50.0%) | 26 ( 52.0%) | 1 | 1 | 1 |
| F | Completed | 34 ( 64.2%) | 13 ( 32.5%) | 17 ( 34.0%) | 1 | 1 | 2 |
| F | Death | 1 ( 1.9%) | 0 ( 0.0%) | 1 ( 2.0%) | 1 | 1 | 3 |
| F | I/E Not Met | 0 ( 0.0%) | 0 ( 0.0%) | 0 ( 0.0%) | 1 | 1 | 4 |
| F | Lack of Efficacy | 2 ( 3.8%) | 1 ( 2.5%) | 0 ( 0.0%) | 1 | 1 | 5 |
| F | Lost to Follow-up | 1 ( 1.9%) | 0 ( 0.0%) | 1 ( 2.0%) | 1 | 1 | 6 |
| F | Physician Decision | 1 ( 1.9%) | 1 ( 2.5%) | 0 ( 0.0%) | 1 | 1 | 7 |
| F | Protocol Violation | 1 ( 1.9%) | 1 ( 2.5%) | 0 ( 0.0%) | 1 | 1 | 8 |
| F | Sponsor Decision | 1 ( 1.9%) | 0 ( 0.0%) | 0 ( 0.0%) | 1 | 1 | 9 |
| F | Withdrew Consent | 6 ( 11.3%) | 4 ( 10.0%) | 5 ( 10.0%) | 1 | 1 | 10 |
| M | Adverse Event | 2 ( 6.1%) | 20 ( 45.5%) | 18 ( 52.9%) | 1 | 2 | 1 |
| M | Completed | 24 ( 72.7%) | 14 ( 31.8%) | 8 ( 23.5%) | 1 | 2 | 2 |
| M | Death | 1 ( 3.0%) | 0 ( 0.0%) | 0 ( 0.0%) | 1 | 2 | 3 |
| M | I/E Not Met | 1 ( 3.0%) | 2 ( 4.5%) | 0 ( 0.0%) | 1 | 2 | 4 |
| M | Lack of Efficacy | 1 ( 3.0%) | 0 ( 0.0%) | 0 ( 0.0%) | 1 | 2 | 5 |
| M | Lost to Follow-up | 0 ( 0.0%) | 0 ( 0.0%) | 0 ( 0.0%) | 1 | 2 | 6 |
| M | Physician Decision | 0 ( 0.0%) | 1 ( 2.3%) | 0 ( 0.0%) | 1 | 2 | 7 |
| M | Protocol Violation | 0 ( 0.0%) | 0 ( 0.0%) | 1 ( 2.9%) | 1 | 2 | 8 |
| M | Sponsor Decision | 1 ( 3.0%) | 3 ( 6.8%) | 2 ( 5.9%) | 1 | 2 | 9 |
| M | Withdrew Consent | 3 ( 9.1%) | 4 ( 9.1%) | 5 ( 14.7%) | 1 | 2 | 10 |
Ok - much better. set_denoms_by()
now changed the denominator grouping for us, so the denominator used for those 34 female Placebo subjects are now the total number of female Placebo subjects. Makes sense, right? set_denoms_by()
allows you to specify:
cols
variables specified at the table levelby
variables specified at the layer levelDepending on your presentation, what you require may change - but the flexibility is there to choose what you need.
A major part of the shift API is the control of the denominators used in the calculation of the percentages. In shift tables, most percentages are relative to the “box” that is formed from the “from” and “to” groups of the shift for each treatment group. Just like the count layers, the set_denoms_by()
functions any variable name from the treatment variable, cols
argument, by
variables. The difference with shift layers is that now you can also include your target variables used for the row or column.
tplyr_table(adlb, TRTA, where=PARAMCD == "CK") %>% add_layer( group_shift(vars(row = BNRIND, column = ANRIND), by = vars(PARAM, AVISIT)) %>% set_format_strings(f_str("xx (xxx.x%)", n, pct)) %>% # This is the default, the 3x3 box formed by the target variables set_denoms_by(TRTA, PARAM, AVISIT) ) %>% build() %>% kable()
| row_label1 | row_label2 | row_label3 | var1_Placebo_H | var1_Placebo_N | var1_Xanomeline High Dose_H | var1_Xanomeline High Dose_N | var1_Xanomeline Low Dose_H | var1_Xanomeline Low Dose_N | ord_layer_index | ord_layer_1 | ord_layer_2 | ord_layer_3 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Creatine Kinase (U/L) | Week 12 | H | 0 ( 0.0%) | 0 ( 0.0%) | 1 ( 12.5%) | 0 ( 0.0%) | 0 ( 0.0%) | 0 ( 0.0%) | 1 | 35 | 12 | 1 |
| Creatine Kinase (U/L) | Week 12 | N | 1 ( 8.3%) | 11 ( 91.7%) | 1 ( 12.5%) | 6 ( 75.0%) | 1 ( 14.3%) | 6 ( 85.7%) | 1 | 35 | 12 | 3 |
| Creatine Kinase (U/L) | Week 24 | H | 0 ( 0.0%) | 0 ( 0.0%) | 0 ( 0.0%) | 0 ( 0.0%) | 0 ( 0.0%) | 0 ( 0.0%) | 1 | 35 | 24 | 1 |
| Creatine Kinase (U/L) | Week 24 | N | 2 ( 16.7%) | 10 ( 83.3%) | 0 ( 0.0%) | 2 (100.0%) | 0 ( 0.0%) | 2 (100.0%) | 1 | 35 | 24 | 3 |
| Creatine Kinase (U/L) | Week 8 | H | 0 ( 0.0%) | 0 ( 0.0%) | 0 ( 0.0%) | 0 ( 0.0%) | 0 ( 0.0%) | 0 ( 0.0%) | 1 | 35 | 8 | 1 |
| Creatine Kinase (U/L) | Week 8 | N | 1 ( 14.3%) | 6 ( 85.7%) | 1 ( 10.0%) | 9 ( 90.0%) | 0 ( 0.0%) | 6 (100.0%) | 1 | 35 | 8 | 3 |
In the example above, the denominators were based on the by and treatment variables, TRTA
, PARAM
and VISIT
. This creates a 3 X 3 box, where the denominator is the total of all record within the FROM and TO shift variables, within each parameter, visit, and treatment. This is the default, and this is how ‘Tplyr’ will create the denominators if set_denoms_by()
isn’t specified.
In the next example, the percentage denominators are calculated row-wise, each row percentage sums to 100%.
tplyr_table(adlb, TRTA, where=PARAMCD == "CK") %>% add_layer( group_shift(vars(row = BNRIND, column = ANRIND), by = vars(PARAM, AVISIT)) %>% set_format_strings(f_str("xx (xxx.x%)", n, pct)) %>% set_denoms_by(TRTA, PARAM, AVISIT, BNRIND) # Each row made by TRTA, BNRIND ) %>% build() %>% arrange(ord_layer_1, ord_layer_2, ord_layer_3) %>% head() %>% kable()
| row_label1 | row_label2 | row_label3 | var1_Placebo_H | var1_Placebo_N | var1_Xanomeline High Dose_H | var1_Xanomeline High Dose_N | var1_Xanomeline Low Dose_H | var1_Xanomeline Low Dose_N | ord_layer_index | ord_layer_1 | ord_layer_2 | ord_layer_3 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Creatine Kinase (U/L) | Week 8 | H | 0 ( 0.0%) | 0 ( 0.0%) | 0 ( 0.0%) | 0 ( 0.0%) | 0 ( 0.0%) | 0 ( 0.0%) | 1 | 35 | 8 | 1 |
| Creatine Kinase (U/L) | Week 8 | N | 1 ( 14.3%) | 6 ( 85.7%) | 1 ( 10.0%) | 9 ( 90.0%) | 0 ( 0.0%) | 6 (100.0%) | 1 | 35 | 8 | 3 |
| Creatine Kinase (U/L) | Week 12 | H | 0 ( 0.0%) | 0 ( 0.0%) | 1 (100.0%) | 0 ( 0.0%) | 0 ( 0.0%) | 0 ( 0.0%) | 1 | 35 | 12 | 1 |
| Creatine Kinase (U/L) | Week 12 | N | 1 ( 8.3%) | 11 ( 91.7%) | 1 ( 14.3%) | 6 ( 85.7%) | 1 ( 14.3%) | 6 ( 85.7%) | 1 | 35 | 12 | 3 |
| Creatine Kinase (U/L) | Week 24 | H | 0 ( 0.0%) | 0 ( 0.0%) | 0 ( 0.0%) | 0 ( 0.0%) | 0 ( 0.0%) | 0 ( 0.0%) | 1 | 35 | 24 | 1 |
| Creatine Kinase (U/L) | Week 24 | N | 2 ( 16.7%) | 10 ( 83.3%) | 0 ( 0.0%) | 2 (100.0%) | 0 ( 0.0%) | 2 (100.0%) | 1 | 35 | 24 | 3 |
While not practical, in this last example the denominators are changed to be based on the entire column instead of the 3 x 3 box. By passing the column variables, TRTA
and ANRIND
the layer will use those denominators when determining the percentages.
tplyr_table(adlb, TRTA, where = PARAMCD == "CK") %>% add_layer( group_shift(vars(row = BNRIND, column = ANRIND), by = vars(PARAM, AVISIT)) %>% set_format_strings(f_str("xx (xx.xx%)", n, pct)) %>% set_denoms_by(TRTA, ANRIND) # Use the column total as the denominator ) %>% build() %>% arrange(ord_layer_1, ord_layer_2, ord_layer_3) %>% head() %>% kable()
| row_label1 | row_label2 | row_label3 | var1_Placebo_H | var1_Placebo_N | var1_Xanomeline High Dose_H | var1_Xanomeline High Dose_N | var1_Xanomeline Low Dose_H | var1_Xanomeline Low Dose_N | ord_layer_index | ord_layer_1 | ord_layer_2 | ord_layer_3 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Creatine Kinase (U/L) | Week 8 | H | 0 ( 0.00%) | 0 ( 0.00%) | 0 ( 0.00%) | 0 ( 0.00%) | 0 ( 0.00%) | 0 ( 0.00%) | 1 | 35 | 8 | 1 |
| Creatine Kinase (U/L) | Week 8 | N | 1 (25.00%) | 6 (22.22%) | 1 (33.33%) | 9 (52.94%) | 0 ( 0.00%) | 6 (42.86%) | 1 | 35 | 8 | 3 |
| Creatine Kinase (U/L) | Week 12 | H | 0 ( 0.00%) | 0 ( 0.00%) | 1 (33.33%) | 0 ( 0.00%) | 0 ( 0.00%) | 0 ( 0.00%) | 1 | 35 | 12 | 1 |
| Creatine Kinase (U/L) | Week 12 | N | 1 (25.00%) | 11 (40.74%) | 1 (33.33%) | 6 (35.29%) | 1 (100.00%) | 6 (42.86%) | 1 | 35 | 12 | 3 |
| Creatine Kinase (U/L) | Week 24 | H | 0 ( 0.00%) | 0 ( 0.00%) | 0 ( 0.00%) | 0 ( 0.00%) | 0 ( 0.00%) | 0 ( 0.00%) | 1 | 35 | 24 | 1 |
| Creatine Kinase (U/L) | Week 24 | N | 2 (50.00%) | 10 (37.04%) | 0 ( 0.00%) | 2 (11.76%) | 0 ( 0.00%) | 2 (14.29%) | 1 | 35 | 24 | 3 |
Our hope is that this gives you the flexibility you need to structure your denominator however required.
There are some circumstances that you’ll encounter where the filter used for a denominator needs to be different than the filter used to count. Disposition tables are an example of this, and we’ll use that example to paint this picture.
‘Tplyr’ offers you the ability to specifically control the filter used within the denominator. This is provided through the function set_denom_where()
. The default for set_denom_where()
is the layer level where
parameter, if one was supplied. set_denom_where()
allows you to replace this layer level filter with a custom filter of your choosing. This is done on top of any filtering specified in the tplyr_table()
where parameter - which means that the set_denom_where()
filter is applied in addition to any table level filtering.
Yeah we know - there are a lot of different places that filtering can happen…
So let’s take the example shown below. The first layer has no layer level filtering applied, so the table level where
is the only filter applied. The second layer has a layer level filter applied, so the denominators will be based on that layer level filter. Notice how in this case, the percentages in the second layer add up to 100%. This is because the denominator only includes values used in that layer.
The third layer has a layer level filter applied, but additionally uses set_denom_where()
. The set_denom_where()
in this example is actually removing the layer level filter for the denominators. This is because in R, when you filter using TRUE
, the filter returns all records. So by using TRUE
in set_denom_where()
, the layer level filter is effectively removed. This causes the denominator to include all values available from the table and not just those selected for that layer - so for this layer, the percentages will not add up to 100%. This is important - this allows the percentages from Layer 3 to sum to the total percentage of “DISCONTINUED” from Layer 1.
adsl2 <- adsl %>% mutate(DISCONTEXT = if_else(DISCONFL == 'Y', 'DISCONTINUED', 'COMPLETED')) t <- tplyr_table(adsl2, TRT01P, where = SAFFL == 'Y') %>% add_layer( group_count(DISCONTEXT) ) %>% add_layer( group_count(DCSREAS, where = DISCONFL == 'Y') ) %>% add_layer( group_count(DCSREAS, where = DISCONFL == 'Y') %>% set_denom_where(TRUE) ) %>% build() %>% arrange(ord_layer_index, ord_layer_1) t %>% kable()
| row_label1 | var1_Placebo | var1_Xanomeline High Dose | var1_Xanomeline Low Dose | ord_layer_index | ord_layer_1 |
|---|---|---|---|---|---|
| COMPLETED | 58 ( 67.4%) | 27 ( 32.1%) | 25 ( 29.8%) | 1 | 1 |
| DISCONTINUED | 28 ( 32.6%) | 57 ( 67.9%) | 59 ( 70.2%) | 1 | 2 |
| Adverse Event | 8 ( 28.6%) | 40 ( 70.2%) | 44 ( 74.6%) | 2 | 1 |
| Death | 2 ( 7.1%) | 0 ( 0.0%) | 1 ( 1.7%) | 2 | 3 |
| I/E Not Met | 1 ( 3.6%) | 2 ( 3.5%) | 0 ( 0.0%) | 2 | 4 |
| Lack of Efficacy | 3 ( 10.7%) | 1 ( 1.8%) | 0 ( 0.0%) | 2 | 5 |
| Lost to Follow-up | 1 ( 3.6%) | 0 ( 0.0%) | 1 ( 1.7%) | 2 | 6 |
| Physician Decision | 1 ( 3.6%) | 2 ( 3.5%) | 0 ( 0.0%) | 2 | 7 |
| Protocol Violation | 1 ( 3.6%) | 1 ( 1.8%) | 1 ( 1.7%) | 2 | 8 |
| Sponsor Decision | 2 ( 7.1%) | 3 ( 5.3%) | 2 ( 3.4%) | 2 | 9 |
| Withdrew Consent | 9 ( 32.1%) | 8 ( 14.0%) | 10 ( 16.9%) | 2 | 10 |
| Adverse Event | 8 ( 9.3%) | 40 ( 47.6%) | 44 ( 52.4%) | 3 | 1 |
| Death | 2 ( 2.3%) | 0 ( 0.0%) | 1 ( 1.2%) | 3 | 3 |
| I/E Not Met | 1 ( 1.2%) | 2 ( 2.4%) | 0 ( 0.0%) | 3 | 4 |
| Lack of Efficacy | 3 ( 3.5%) | 1 ( 1.2%) | 0 ( 0.0%) | 3 | 5 |
| Lost to Follow-up | 1 ( 1.2%) | 0 ( 0.0%) | 1 ( 1.2%) | 3 | 6 |
| Physician Decision | 1 ( 1.2%) | 2 ( 2.4%) | 0 ( 0.0%) | 3 | 7 |
| Protocol Violation | 1 ( 1.2%) | 1 ( 1.2%) | 1 ( 1.2%) | 3 | 8 |
| Sponsor Decision | 2 ( 2.3%) | 3 ( 3.6%) | 2 ( 2.4%) | 3 | 9 |
| Withdrew Consent | 9 ( 10.5%) | 8 ( 9.5%) | 10 ( 11.9%) | 3 | 10 |
Missing counts are a tricky area for frequency tables, and they play directly in with denominators as well. These values raise a number of questions. For example, do you want to format the missing counts the same way as the event counts? Do you want to present missing counts with percentages? Do missing counts belong in the denominator?
The set_missing_count()
function can take a new f_str()
object to set the display of missing values. If not specified, the associated count layer’s format will be used. Using the ...
parameter, you are able to specify the row label desired for missing values and values that you determine to be considered ‘missing’. For example, you may have NA values in the target variable, and then values like “Not Collected” that you also wish to consider “missing”. set_missing_count()
allows you to group those together. Actually - you’re able to establish as many different “missing” groups as you want - even though that scenario is fairly unlikely.
In the example below 50 random values are removed and NA is specified as the missing string. This leads us to another parameter - denom_ignore
. By default, if you specify missing values they will still be considered within the denominator, but when you have missing counts, you may wish to exclude them from the totals being summarized. By setting denom_ignore
to TRUE, your denominators will ignore any groups of missing values that you’ve specified.
adae2 <- adae adae2[sample(nrow(adae2), 50), "AESEV"] <- NA t <- tplyr_table(adae2, TRTA) %>% add_layer( group_count(AESEV) %>% set_format_strings(f_str("xxx (xx.xx%)", n, pct)) %>% set_missing_count(f_str("xxx", n), sort_value=Inf, denom_ignore=TRUE, Missing = NA) ) %>% build() %>% arrange(ord_layer_1) t %>% kable()
| row_label1 | var1_Placebo | var1_Xanomeline High Dose | var1_Xanomeline Low Dose | ord_layer_index | ord_layer_1 |
|---|---|---|---|---|---|
| MILD | 24 (61.54%) | 73 (78.49%) | 46 (48.94%) | 1 | 1 |
| MODERATE | 15 (38.46%) | 19 (20.43%) | 46 (48.94%) | 1 | 2 |
| SEVERE | 0 ( 0.00%) | 1 ( 1.08%) | 2 ( 2.13%) | 1 | 3 |
| Missing | 8 | 18 | 24 | 1 | Inf |
We did one more other thing worth explaining in the example above - gave the missing count its own sort value. If you leave this field null, it will simply be the maximum value in the order layer plus 1, to put the Missing counts at the bottom during an ascending sort. But tables can be sorted a lot of different ways, as you’ll see in the sort vignette. So instead of trying to come up with novel ways for you to control where the missing row goes - we decided to just let you specify your own value.
In addition to missing counts, some summaries require the addition of a ‘Total’ row. ‘Tplyr’ has the helper function add_total_row()
to ease this process for you. Like most other things within ‘Tplyr’ - particularly in this vignette - this too has a significant bit of nuance to it.
Much of this functionality is similar to set_missing_count()
. You’re able to specify a different format for the total, but if not specified, the associated count layer’s format will be used. You’re able to set your own sort value to specify where you want the total row to sit.
More nuance comes in two places:
add_total_row()
will count missing values, but you can exclude those values using the count_missings
parameter. ‘Tplyr’ will warn you when set_count_missing()
has denom_ignore
set to TRUE
, add_total_row()
has count_missings
set to TRUE
and the format contains a percentage. Why? Because if the denominator is ignoring missing values but you’re still counting them in your total, the percentage shown can exceed 100%.add_total_row()
will throw a warning when a by
variable is used, because it becomes ambiguous what total should be calculated. You can rectify this by using set_denoms_by()
, which allows the user to control exactly which groups are used to form the denominator. This way the totals presented by add_total_row()
will align with denominators specified in set_denom_by()
and generate total rows that match the grouping of your denominator values.In the example below, we summarize age groups by sex. The denominators are determined by treatment group and sex, and since we are not excluding any values from the denominator, the total row ends up matching the denominator that was used. The ‘Missing’ row tells us the number of missing values, but because count_missings
is set to TRUE
, the missing counts are included in the total row. This probably isn’t how you would choose to display things, but here we’re trying to show the flexibility built into ‘Tplyr’.
adsl2 <- adsl adsl2[sample(nrow(adsl2), 50), "AGEGR1"] <- NA tplyr_table(adsl2, TRT01P) %>% add_layer( group_count(AGEGR1, by=SEX) %>% set_denoms_by(TRT01P, SEX) %>% # This gives me a Total row each group add_total_row(f_str("xxx", n), count_missings=TRUE, sort_value=-Inf) %>% set_total_row_label("All Age Groups") %>% set_missing_count(f_str("xx (xx.x%)", n, pct), Missing = NA, sort_value=Inf) ) %>% build() %>% arrange(ord_layer_1, ord_layer_2) %>% kable()
| row_label1 | row_label2 | var1_Placebo | var1_Xanomeline High Dose | var1_Xanomeline Low Dose | ord_layer_index | ord_layer_1 | ord_layer_2 |
|---|---|---|---|---|---|---|---|
| F | All Age Groups | 53 | 40 | 50 | 1 | 1 | -Inf |
| F | <65 | 6 ( 11.3%) | 5 ( 12.5%) | 5 ( 10.0%) | 1 | 1 | 1 |
| F | >80 | 17 ( 32.1%) | 7 ( 17.5%) | 14 ( 28.0%) | 1 | 1 | 2 |
| F | 65-80 | 16 ( 30.2%) | 22 ( 55.0%) | 22 ( 44.0%) | 1 | 1 | 3 |
| F | Missing | 14 (26.4%) | 6 (15.0%) | 9 (18.0%) | 1 | 1 | Inf |
| M | All Age Groups | 33 | 44 | 34 | 1 | 2 | -Inf |
| M | <65 | 4 ( 12.1%) | 5 ( 11.4%) | 3 ( 8.8%) | 1 | 2 | 1 |
| M | >80 | 5 ( 15.2%) | 9 ( 20.5%) | 9 ( 26.5%) | 1 | 2 | 2 |
| M | 65-80 | 17 ( 51.5%) | 21 ( 47.7%) | 17 ( 50.0%) | 1 | 2 | 3 |
| M | Missing | 7 (21.2%) | 9 (20.5%) | 5 (14.7%) | 1 | 2 | Inf |
The default text for the Total row is “Total”, but we provide set_total_row_label()
to allow you to customize the text used in your display.
Let’s look at a more practical version of the table above. If you display missings, you probably want to exclude them from the total. Here we do that using set_missing_count()
. So more commonly, you’ll see this:
tplyr_table(adsl2, TRT01P) %>% add_layer( group_count(AGEGR1, by=SEX) %>% set_denoms_by(TRT01P, SEX) %>% # This gives me a Total row each group add_total_row(f_str("xxx", n), count_missings=FALSE, sort_value=-Inf) %>% set_total_row_label("All Age Groups") %>% set_missing_count(f_str("xxx", n), Missing = NA, sort_value=Inf, denom_ignore=TRUE) ) %>% build() %>% arrange(ord_layer_1, ord_layer_2) %>% kable()
| row_label1 | row_label2 | var1_Placebo | var1_Xanomeline High Dose | var1_Xanomeline Low Dose | ord_layer_index | ord_layer_1 | ord_layer_2 |
|---|---|---|---|---|---|---|---|
| F | All Age Groups | 39 | 34 | 41 | 1 | 1 | -Inf |
| F | <65 | 6 ( 15.4%) | 5 ( 14.7%) | 5 ( 12.2%) | 1 | 1 | 1 |
| F | >80 | 17 ( 43.6%) | 7 ( 20.6%) | 14 ( 34.1%) | 1 | 1 | 2 |
| F | 65-80 | 16 ( 41.0%) | 22 ( 64.7%) | 22 ( 53.7%) | 1 | 1 | 3 |
| F | Missing | 14 | 6 | 9 | 1 | 1 | Inf |
| M | All Age Groups | 26 | 35 | 29 | 1 | 2 | -Inf |
| M | <65 | 4 ( 15.4%) | 5 ( 14.3%) | 3 ( 10.3%) | 1 | 2 | 1 |
| M | >80 | 5 ( 19.2%) | 9 ( 25.7%) | 9 ( 31.0%) | 1 | 2 | 2 |
| M | 65-80 | 17 ( 65.4%) | 21 ( 60.0%) | 17 ( 58.6%) | 1 | 2 | 3 |
| M | Missing | 7 | 9 | 5 | 1 | 2 | Inf |
Now the table is more intuitive. We used set_missing_count()
to update our denominators, so missing have been excluded. Now, the total row intuitively matches the denominators used within each group, and we can see how many missing records were excluded.
And that’s it for denominators! Happy counting!


|
TFWidgets
Widgets for modern X-Plane 11 windows
|
Simple widgets for modern XP11 windows, i.e. without using XP's old-style widgets.
You only need to include 4 files into your own projects:
All definitions are encapsulated in the namespace TFW
.
All files include lots of comments in Doxygen style as documentation. The generated Doxygen documentation is available in Documentation/html/index.html
.
The Example
folder includes an example X-Plane plugin (based on the Hello World plugin), which demonstrates how to use TFWidgets.
The plugin just opens a windows with lots of example widgets. It doesn't look nice any longer...but it has lots of widgets ;-)
A docker environment to build all 3 platforms is included.
TFWidgets/Example/docker
make
The docker environment will be downloaded and installed, which takes several minutes, but is needed only once. Thereafter the actual build takes place.
Resulting binaries are in TFWidgets/Example/build-[lin/mac/win]
TFWidgets.xcodeproj
. There might be paths you way want to check...especially the path the resulting plugin is copied to after build (Targets > Build Phases > Copy Files).TFWidgets.sln
. Also here you might need to check directories. There is a copy command to my X-Plane installation in the Post Build Event.


I finally got around to trying voacanga seeds that ive had for almost a year. Reading what few reports there are on the internet, I didnt really expect much. I ground 4 grams of seeds, about 60 or so seeds, and swallowed them with water. 45 minutes later, after no real indication of any effects, i swallowed 4 more grams. An hour later I felt mildly stimulated, although being 12:30 in the morning, I felt tired too. I slept fine with no strange dreams or alteration of sleep patterns discernable.
The next day I felt tired, and in a good mood. I was reminded somewhat of rauwolfia serpentina's effects as far as a feeling of underlying sedation that carried throughout the day. A day trip into the mountains was the plan, and at around 2 pm I took a vicoden 10 mg for what seemed to be an ache between my shoulder blades. By 6 pm this ache had manifested itself throughout my stomach and chest area.  I was very tired and weak. On returning home I experienced a very painful episode of what I can only describe as muscle contractions in my chest/back/stomach areas. During this particular time I felt somewhat feverish, with strange thoughts running through my head. Laying down and accepting these symptoms was all I could do although a trip to the hospital was in the back of my head. The symptoms somewhat subsided in intensity as the night wore on.
I am writing this the morning after the morning after consumption.  The symptoms mostly being strange soreness in the back/chest upper stomache area. Perhaps I should have done an extraction on the seeds. My opinion of these seeds as possible entheogen is doubtful. My opinion of these seeds as possible enjoyable somatic inebrient doubtful. Given the low amount of information I have been able to find on the applications that these seeds have as inebrient/medicine, besides their use as an intermediate in the production of other compounds, my conclusion is to stay the hell away from them. I am still interested in hearing other reports on the consumption of these seeds, more out of morbid curiosity now. I would not recomend the steps I took or didnt take.
Taking a vicoden could have interacted with the central nervous system depressant effects these seeds have been purported to cause. Grinding the seeds and eating them without food could cause stomache distress alone. With all the sources for these seeds out there I wonder how many others have imbibed? Hats off to anyone that has found a use for these seeds.
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.