Preparation time
30 mins to 1 hour
Cooking time
over 2 hours
Serves
Serves 4
For the spicy red cabbage, place the red cabbage in a large bowl and sprinkle with the sea salt. Mix well to coat in the salt, then set aside for 4 hours. Rinse under cold water to wash the salt off, then set aside until needed.
Preheat the oven to 220C/425F/gas 7.
For the duckling breast, heat an ovenproof frying pan until hot and add the duck fat. When the fat has melted, add the duckling breasts skin-side down and fry for 4-5 minutes, or until the skin is crisp and golden-brown. Drain off the fat, turn the duckling breast over and roast in the oven for 7-8 minutes, or until golden-brown all over but still slightly pink in the middle. Set aside to rest.
For the duck 'straws', mix together the confit duck meat, duck fat, green peppercorns and salt in a bowl.
Lay the spring roll wrappers on a chopping board and cut each in half lengthways. Mix the flour in a bowl with the water to make a thick paste. Brush down the long side of one end of the sheet with the flour paste.
Spoon the duck mixture along the length of the wrapper and roll up, crimping the ends together to seal. Repeat with the remaining spring roll wrappers and duck mixture.
Half-fill a deep, heavy-based pan with vegetable oil and heat until a cube of bread dropped in sizzles and turns golden-brown in 30 seconds (CAUTION: hot oil can be dangerous. Do not leave unattended). Deep fry the duck 'straws' for 1-2 minutes, or until golden-brown and crisp. Remove with a slotted spoon and drain on kitchen paper. Set aside.
For the spicy red cabbage, heat the sesame oil in a large frying pan and add the drained shredded cabbage. Fry for 2 minutes, or until softened slightly but not coloured.
Push the cabbage to one side of the pan and add the icing sugar to the other side. Once the sugar has melted and begins to caramelise, add the sherry, white wine vinegar, ginger and chilli and mix in the cabbage. Fry for a further 2-3 minutes, or until the cabbage is tender. Set aside.
For the baby turnips, place all of the baby turnip ingredients into a pan and bring to the boil. Cook for 5-6 minutes, or until the turnips are tender but slightly crunchy. Drain and set aside.
For the duck sauce, melt the butter in a pan until foaming, then add the shallots and mushrooms and fry for 2-3 minutes, or until softened. Add the mead and cook until the volume of the liquid has reduced by two-thirds, then add the chicken stock and cook until the volume of the liquid has reduced by half.
Strain the sauce through a fine sieve, place back into the pan and whisk in the butter over a medium heat. Keep warm.
For the mead syrup, place the mead into a small saucepan and simmer gently over a medium heat until the liquid has reduced to about 50ml/2fl oz and is thick and syrupy.
To serve, divide the spicy red cabbage among 4 serving plates. Carve the duckling breasts in half lengthways and arrange a piece on top of each portion of cabbage. Lay two duck 'straws' against the duck and cabbage, spoon the baby turnips alongside and drizzle the duck sauce over the duck and around the plate. Finish by drizzling the mead syrup over the duck.


---
layout: page
title: research
order: 4
---
- Nanoporous Materials Genome
We collect, curate, and disseminate structures of nanoporous materials called metal-organic frameworks ("MOFs") reported in the literature. For more information, visit the link below.
- Carbon Capture and Utilization
We use a multi-scale approach to find suitable technology to capture CO2 from coal-fired power plants. The group also collaborates with experimentalists
to investigate chemical transformation of CO2 into useful chemicals, such as cyclic carbonate.
$$$:
11/2016 - 10/2019, National Research Foundation of Korea (2016R1D1A1B039934484)


DDD 101 tips
Here are my tips for getting started with DDD; they were written as a response to a question in the BE-DDD newsgroup:
IMO taking a look at the domains from a different POV also helps; f.e. now you only looked from a data-oriented POV; here are some possibilities:
- Find the use cases that define the behavior of your system
- Use personas and documents
- Try context mapping; you will probably have f.e. at least some distinct BC’s IMO: one for registering hours and one for billing, another might be contact management. Not all BC’s will benefit from a full DDD stack, some might benefit from using a CRUD-like approach (f.e. contact management might benefit from it). I prefer to have lots of very small BC’s, others prefer bigger ones… Advantages & disadvantages of this approach are listed in the DDD book; read up on them and understand them.
- To add to the last one: avoid shared kernels in the beginning…
- Try to read up on value objects; a lot of initial DDD’ers tend to get this wrong
- Speak and reason about your app in as much different ways as possible: try to look at it from different POV, it does not matter if this is ERD/UML/flowchart/ui-prototype/chat with someone who does not know IT at all but does know invoicing (if you don’t have another person, at least try to “rubber duck”); particularly notice the language…
- Be very picky about naming; if you group some responsibilities and do not have a name to match these perfectly, prefer to name them “Mumbo Jumbo”, “Chuck Norris” or whatever non-relevant domain that might suit you (even porn-star-names might work ;) ). Decoupling the name from the implementation helps you to properly group responsibilities. If you do not do that, you usually end up putting behavior somewhere just because the name matches, not because the behavior actually belongs there… This provides me one of my biggest gains in context mapping and domain modelling: when a model does not “feel right”, I replace the names with something bogus and map use cases/events/data/whatever to these bogus names. Afterwards I try to find a better name. If you name things in front, you restrict yourself to whatever might fit in there…
- From the BC POV: try to determine how the system will work; which BC’s depend on each other; if a BC crashes, will the system still work/be usable or not. This is not only about up- and downstream but allows you to get a really solid understanding of how your system should function, where responsibilities should be etc…. Investing a lot of time in this before will save you lots of time afterwards. It’s all about finding a simple solution, not an easy one, and as with all good things, that doesn’t come cheap.
- Try to avoid a phase where you are “building an infrastructure”, especially using buses etc, but focus on the way the system is composed. While message buses might seem like the silver bullet regarding decoupling dependencies etc, they are just moving coupling to another part of the system. I’d even say (but I’m really extreme on that part) that, unless you require a distributed system, you should avoid buses at all cost. (And yes, I am aware that about 5 year ago I was suggesting exactly the opposite.) If you figure out proper dependencies/responsibilities, a simple call to another DLL might work just as well.
- Always be learning; IMO DDD is about finding a model that currently matches your understanding of the domain; your system should be something living, especially in the beginning.
Most of all, have fun, and allow yourself to fail (fail early & often is my motto), but learn from it.


Smile is a fast and comprehensive machine learning engine.
Smile now seems to be the go-to general-purpose machine learning library for those working in the Java and Scala worlds — a JVM Scikit-learn, if you will. I would actually find it hard to believe that you are working in that ecosystem and are unaware of the project.
Smile gives you a broad range of algorithms out of the box, ranging from simple functions like classification and regression to sophisticated offerings like natural language processing. And all you need is Java, or any JVM language.
LinkedIn used Smile to train its workforce on machine learning for its AI Academy. Smile was chosen because it's a Java library with a friendly open source license and supports a wide range of common algorithms. Using Smile with Tablesaw in Jupyter notebooks meant that students had an interactive environment with immediate feedback to make learning fast and intuitive.
Smile will amaze you with fast and extensive applications, efficient memory usage and a large set of machine learning algorithms for Classification, Regression, Nearest Neighbor Search, Feature Selection, etc.
We use Smile at moKredit to leverage its impressive capability in various machine learning tasks: feature engineering, modeling, visualization, benchmark test, etc. It is really an ideal tool for Java or Scala engineers and very friendly to be integrated into Java-based platform. Also, Smile has unparalleled thorough documentation as an open source project. Thanks Smile and strongly recommend it to every engineer who is interested in machine learning.
To say that I am satisfied with SMILE would be an understatement. It's truly one of the hidden gems in the Java framework ecosystem today.
SMILE is a great Java library for a wide range of AI tasks. Building bespoke methods atop SMILE run considerably faster than implementations in other languages more associated with data science. Another big plus is excellent JavaDocs. For linear algebra and unconstrained optimization, SMILE’s BFGS implementation proved extremely robust.
With advanced data structures and algorithms, Smile delivers the state-of-art performance.
Compared to this third-party benchmark, Smile outperforms R, Python, Spark, H2O, xgboost significantly. Smile is a couple of times faster than the closest competitor. The memory usage is also very efficient. If we can train advanced machine learning models on a PC, why buy a cluster?
Write applications quickly in Java, Scala, or any JVM languages. Data scientists and developers can speak the same language now!
Smile provides hundreds advanced algorithms with clean interface. Scala API also offers high-level operators that make it easy to build machine learning apps. And you can use it interactively from the shell, embedded in Scala.
val data = read.arff("iris.arff", 4)
val (x, y) = data.unzipInt
val rf = randomForest(x, y)
println(s"OOB error = ${rf.error}")
rf.predict(x(0))
The most complete machine learning engine. Smile covers every aspect of machine learning.
Classification, regression, clustering, association rule mining, feature selection, manifold learning, multidimensional scaling, genetic algorithm, missing value imputation, efficient nearest neighbor search, etc. See the sidebar for a list of available algorithms.
Understanding human language, and the intent behind our words.
Tokenizers, stemming, phrase detection, part-of-speech tagging, keyword extraction, named entity recognition, sentiment analysis, relevance ranking, taxomony.
Hidden gems in Smile.
Special functions, linear algebra including LU decomposition, Cholesk decomposition, QR decomposition, eigen value decomposition, singular value decomposition, band matrix, and sparse matrix, hypothesis tests including t-test, F-test, chi-square test, correlation test (Pearson, Spearman, and Kendall), and Kolmogorov-Smirnov test, a variety of distributions and random number generators, interpolation, sorting, wavelet, plot, etc.


Hugo base is created for mobile device first, and fast for larger screen too.
This theme designed to be a focus view for Your readers.
Blue color will help readers to change their minds to be better.


Grace Millane died last December on her 22nd birthday after meeting a man through the dating app Tinder and going back to his hotel apartment in central Auckland. The man later stuffed her body into a suitcase and buried her in a shallow grave.
Prosecutors say the man strangled Millane to death. Defense lawyers argue the pair was engaged in consensual erotic choking that went too far.
After a three-week trial, the judge on Friday summed up the case and turned it over to the jury.
The name of the 27-year-old charged with murdering Millane is being kept secret for now by court order.
Sign up for Daily Newsletters
Copyright © 2019 The Washington Times, LLC.
Please read our comment policy before commenting.


Sweet Free Stuff
///////////////////////////////////////////
Free Plenti Greek Yogurt at Kroger
Posted: 16 Sep 2015 10:05 AM PDT
http://feedproxy.google.com/&edburner&utm_medium=email
Click on the Dairy category and load the coupon to your Kroger card.
Expires 10/14. Free Plenti Greek Yogurt at Kroger
The post Free Plenti Greek Yogurt at Kroger appeared first on
SweetFreeStuff.com.
///////////////////////////////////////////
Free Subscription to Digital Photo Pro
Posted: 16 Sep 2015 06:29 AM PDT
http://feedproxy.google.com/&edburner&utm_medium=email
Free Subscription to Digital Photo Pro
The post Free Subscription to Digital Photo Pro appeared first on
SweetFreeStuff.com.
///////////////////////////////////////////
Free Subscription to Salt Water Sportsman
Posted: 16 Sep 2015 02:22 AM PDT
http://feedproxy.google.com/&edburner&utm_medium=email
The post Free Subscription to Salt Water Sportsman appeared first on
SweetFreeStuff.com.
///////////////////////////////////////////
Free Frankie Rose Foundation Sample
Posted: 16 Sep 2015 12:15 AM PDT
http://feedproxy.google.com/&edburner&utm_medium=email
Scroll to the bottom of the page and fill out the form. Free Frankie Rose
Foundation Sample
The post Free Frankie Rose Foundation Sample appeared first on
SweetFreeStuff.com.
///////////////////////////////////////////
Free Rachael Ray Nutrish for Cats Sample
Posted: 15 Sep 2015 11:00 PM PDT
http://feedproxy.google.com/&edburner&utm_medium=email
*Sample is available again! Select the free sample offer and complete the
form. Free Rachael Ray Nutrish for Cats Sample
The post Free Rachael Ray Nutrish for Cats Sample appeared first on
SweetFreeStuff.com.
CommentsThere are feral cats in my neighborhood that will appreciate … by
Jari Holland BuckTo find the form just scroll down below the dog food
offers. by Melissa WardHey! Your not getting the sample because its not
offering it at … by ChelseyFinally caught some samples can’t
wait ????been trying , … by DebraIt just worked 4 me good luck by
missyPlus 18 more…


{% extends "base.html" %} {% block body %}
That's why we created lowr, our price monitoring tool: to ensure that you wont miss out on a deal.


The form below will help you build a valid maker.json file. Fill out all of the required fields (marked by a star) and any others. Next, you can click the buttons at the bottom of the page to render and then download the output to your computer.


/welcome.css"> /lib/font-awesome.css"> /apple-touch-icon.png"> /favicon.ico" />
Pencil Code is a collaborative programming site for drawing art, playing music, and creating games. It is also a place to experiment with mathematical functions, geometry, graphing, webpages, simulations, and algorithms. Programs are open for all to see and copy.
Watch a video overview or watch a video tutorial.
The main language is Coffeescript. Professional software engineers use Coffeescript to build complex websites, but Coffeescript code can also be very simple.
Pencil Code can also be used to explore and learn Javascript, HTML, and CSS: when you are ready, just find the "gear" button to adjust languages.
Programs preload the pencilcode library to use turtle graphics functions. Pencil Code is all open source. Hang out on the Pencil Code discussion forum or check out the quick reference or the online guide to find out more. There is also an illustrated Pencil Code book with more than 100 small projects.
Anybody can save programs and web pages, but read the Terms of Service and the Privacy Policy first. Two rules:
Be Nice. Do not mess up other peoples' work. Do not post content that detracts from education on the site. This a learning space that is not locked down (for example, passwords are optional). So feel free to explore, create, and link, but also please be considerate.
Be Careful. Do not depend on Pencil Code to keep your data safe. Data posted here is public, and data is not secured from loss. Do not post private or personally identifiable information. Passwords on Pencil Code do not prevent malicious interference.
The Pencil Code Foundation is devoted to advancing computer science education by making programming as simple and as universal as using a pencil. Contribute to the development of Pencil Code at dev.pencilcode.net or github. —<EMAIL_ADDRESS>Learn professional programming languages using an editor that lets you work in either blocks or text. Create art, music, games, and stories. Or invent a program that will change the world.
Get some ideas for art, music, or games. Or to code anything, start on a blank page.
Pencil Code supports CoffeeScript, Javascript, CSS, and HTML.
Everything posted on Pencil Code is public and free to view, share, and copy.


bishop
17-Jul-18 11:31 PM
I would think that window should be the highest bonus but I cannot recall
then again, I had to wait like 9 days to get my coins and even then, they didn't total to what they should have when I was quoted on their site. Made the mistake of using their shitty web service
frankly, I'm just glad I got back the majority as the whole thing just fell apart.
OOT experience was on point though


01. Let's Write Smart Contracts
# Welcome to an Introduction to Solidity
In this lesson, we will guide you through the basics of Solidity, the language used to develop smart contracts in the Ethereum platform. By the end, you'll get to tie all the topics together to create your very own token.
We've broken out the lesson by commonly used Solidity concepts such as data types, mappings, structs, and more; so feel free to skip to topics if you are already familiar with them or jump directly to topics you'd like more review on.
Let's get started!
C4L3-01 Lesson Intro
# Lesson Objectives
In this lesson, you will:
- Create contracts that use fundamental Solidity concepts and deploy them in Remix
- Send ethers from one account to another account using Global Variables
- Use Infura and Truffle to create own ERC-20 tokens that you can send to friends
# Lesson Mini Project
At the end of this lesson, you will use the ERC-20 interface to create your own tokens and then send 10 tokens to Udacity's Ethereum Address!
# Resources
Solidity Documentation
Remember the full Solidity documentation is always a useful resource.
Solidity documentation is always useful resource.
Use the drop down in the left-panel to change the version, language, download the docs and much more:
Github Source Code Link
Throughout this lesson, we'll be work on code examples that can be found here:


Display a map highlighting a region or area
This example displays an extruded polygon and circle located in the central Paris and displayed on a moveable map. Hold Alt+Left mouse button to tilt and rotate the map.
A polygon is created using the H.map.Polygon
class,
passing in an H.geo.LineString
holding the vertices of the polygon. The circle is created with the


Generates boxplot summarizing results generated during svp.analysis. Additionally, Kruskal-Wallis rank sum test is performed (using group.by variable for data stratification) and p-values are shown for each comparison group.
svpPlot( object, which.data = "uncalibrated", group.by = NULL, which.parameter = NULL, which.phantom = NULL, var2plot = "cv", which.assay = NULL, outliers = TRUE, jitter.width = 0.1, color.option = "cividis", color.begin = 0, color.end = 1, point.size = 2, point.alpha = 1, box.alpha = 0.5, txt.size = NULL, xlab.direction = NULL, xlab.hjust = NULL, xlab.vjust = NULL, show.p = T, color.option.v2 = NULL, color.begin.v2 = NULL, color.end.v2 = NULL, ylim = NULL )
| object | Calibration Object. |
|---|---|
| which.data | Character specifying which dataset to plot svp analysis for. One of:
|
| group.by | Vector of features to stratify analysis by. If specified, rms-statistic is not overlaid on boxplot. |
| which.parameter | Character specifying which parameters to plot. If unspecified, all parameters are plotted. |
| which.phantom | Character specifying which phantoms to plot. If unspecified, all available phantoms are plotted. |
| var2plot | Character specifying which precision error metric to plot. One of:
|
| which.assay | Character specifying which assay to plot. |
| outliers | Logical specifying whether to omit outliers from analysis |
| jitter.width | Numerical specifying width of jitter in boxplot. Default is 0.1. |
| color.option | Character indicating which color map option to use (from viridis palette). One of:
|
| color.begin | Hue in [0,1] at which the viridis color map begins. Default is 0. |
| color.end | Hue in [0,1] at which the viridis color map ends. Default is 1. |
| point.size | Numeric specifying size of scatter plot points. Default is 2. |
| point.alpha | Numeric [0,1] specifying degree of transparency for points. Default is 1. |
| box.alpha | Numeric [0,1] specifying degree of transparency for box plots. Default is 0.5. |
| txt.size | Numeric specifying size of text |
| xlab.direction | Numeric specifying direciton (i.e., angle) of x axis labels |
| xlab.hjust | Horizontal justification of x axis labels; 0 is left-justified, 0.5 is centered, and 1 is right-justified. |
| xlab.vjust | Vertical justification of x axis labels; |
| show.p | Logical specifying if p-values for Kruskal-Wallis rank sum test are shown. Default is true. |
| color.option.v2 | Same as color.option, provides additional flexibility to specify color pallete for second grouping variable if length(group.by) == 2. If unspecified, set to color.option. |
| color.begin.v2 | Same as color.begin, provides additional flexibility to specify hue for second grouping variable if length(group.by) == 2. If unspecified, set to color.begin |
| color.end.v2 | Same as color.end, provides additional flexibility to specify hue for second grouping variable if length(group.by) == 2. If unspecified, set to color.end |
| ylim | Y axis limits. If unspecified, then set automatically. |
ggplot object


ABOUT
Everything you'll ever need to know about this website, in 1 place!
Where will my information be shared?
We will NEVER share your information with anyone - you will be the only person who will ever know what you filled out in the forms!
What is the purpose of this website?
To simplify the college search process for high schoolers by finding 20 schools that match their preferences using our formula in under 60 seconds
Do I have to pay to access exclusive features?
Nope! Everything we’ve ever developed on this website is free to use for everyone!


Animate Run!
Velocity Effect
Velocity Effect
Velocity Effect
Velocity Effect
Velocity Effect
Velocity Effect
Velocity Effect
Velocity Effect
Velocity Effect


| PWG LA Meeting |
1394 Printing: December 1&2
IPP: December 3
Finisher MIB: December 4
Job MIB: December 5
| Meeting
Location: Crown Plaza Hotel Los Angeles Airport 5985 W. Century Blvd Los Angeles, CA 90045 Phone:<PHONE_NUMBER> |
The hotel rate is $79 per night
( Plus $6 for parking).
Ask for the Xerox rate at this hotels.
Deadline for reservations is November 7, 1997
All attendees are responsible for making their own hotel
reservations.
There will be a meeting charge in the range of $30 - $40; participants are responsible for their own lunch.


A model history file holds the models trained by mcfly. A model history is created with either mcfly function find_best_architecture or train_models_on_samples. The location of the model history file can be speficied in either of these functions using the outputpath argument.
A model history file is a json file that contains all information needed to visualize the training results.


My name is Yuwei Chen. I am currently a senior studying statistics and economics at University of California, Davis. I am enthusiastic at data science, and I enjoy looking into data and finding interesting information that I am not aware of beforehand. To develop skills in data science, I have taken STA 106: ANOVA Analysis, STA 108: Regression Analysis, STA 141: Statistical Computing, ECS 10: Intro to Programming. These courses are helpful on improving my programming techniques and building theoretical foundation.
On this website, I posted a few of my previous projects on different data science topics. They are about statistical programming and linear regression. Hope you can find them helpful.
In this project, I used data to build a multi-regression model and estimate the factors that associated with in various cities in the United States. First, I was interested in observing which variables are most useful in explaining trends in the death rate in a city to construct the best linear regression model given our data set. I am also concerned with analyzing the statistical relationships of both pollution and schooling with death rate.
Our data shows that variables involving demographics, characteristics of the cities, characteristics of households, climate related statistics, and data on three air pollutants have some degree of statistical significance in the variability of average death rates in a city. Certain variables such as years of schooling, monthly temperatures of January and July have a negative covariance with death rate while other variables including certain pollutants have a positive covariance with death rate.
This project is to
practice web scraping techniques using R. My target was to extract posts on StackOverflow.com
that are about R and R packages. By looking at tags in webpage sources, I was
able to extract information related to interested information. I was interested
in these questions:
1. What is the distribution of the number of questions each person answered?
2. What are the most common tags?
3. How many questions are about ggplot?
4. How many questions involve XML, HTML or Web Scraping?
5. What are the names of the R functions referenced in the titles of the posts?
6. What are the names of the R functions referenced in the accepted answers and comments of the posts?
In this project, we are interested in the host listings information in Washington, DC. from Airbnb. This is an interesting project to us as we are all considering traveling to Washington, DC in the summer. This would be helpful for us to make decision on accommodation. Meanwhile, the result is also useful for hosts who are looking for improvement on their listing performance. We generate maps to study some characteristics of Airbnb listings in DC. Also, we did research on factors that are associated with the popularity of a property listed in Airbnb.


Attention: The demo is a barebones implementation and is designed for xterm2 evaluation purposes only. Exposing the demo to the public as is would introduce security risks for the host.


import {CdkStepperModule} from '@angular/cdk/stepper';
CdkStep
Selector: cdk-step
Exported as: cdkStep| Name | Description |
|---|---|
@Input('aria-label')
|
Aria label for the tab. |
@Input('aria-labelledby')
|
Reference to the element that the tab is labelled by.
Will be cleared if |
@Input()
|
Whether step is marked as completed. |
@Input()
|
Whether the user can return to this step once it has been marked as completed. |
@Input()
|
Error message to display when there's an error. |
@Input()
|
Whether step has an error. |
@Input()
|
Plain text label of the step. |
@Input()
|
Whether the completion of step is optional. |
@Input()
|
State of the step. |
@Input()
|
The top level abstract control of the step. |
@Output('interacted')
|
Emits when the user has attempted to move away from the step. |
|
Template for step content. |
|
Whether user has attempted to move away from the step. |
|
Template for step label if it exists. |
| reset | |
|---|---|
|
Resets the step to its initial state. Note that this includes resetting form data. |
| select | |
|---|---|
|
Selects this step component. |
CdkStepper
Selector: [cdkStepper]
Exported as: cdkStepper| Name | Description |
|---|---|
@Input()
|
Whether the validity of previous steps should be checked or not. |
@Input()
|
Orientation of the stepper. |
@Input()
|
The step that is selected. |
@Input()
|
The index of the selected step. |
@Output()
|
Output to support two-way binding on |
@Output()
|
Event emitted when the selected step has changed. |
|
Steps that belong to the current stepper, excluding ones from nested steppers. |
| next | |
|---|---|
|
Selects and focuses the next step in list. |
| previous | |
|---|---|
|
Selects and focuses the previous step in list. |
| reset | |
|---|---|
|
Resets the stepper to its initial state. Note that this includes clearing form data. |
CdkStepLabel
Selector: [cdkStepLabel]
CdkStepperNext
Button that moves to the next step in a stepper workflow.
Selector: button[cdkStepperNext]
| Name | Description |
|---|---|
@Input()
|
Type of the next button. Defaults to "submit" if not specified. |
CdkStepperPrevious
Button that moves to the previous step in a stepper workflow.
Selector: button[cdkStepperPrevious]
| Name | Description |
|---|---|
@Input()
|
Type of the previous button. Defaults to "button" if not specified. |
CdkStepHeader
Selector: [cdkStepHeader]
| focus | |
|---|---|
|
Focuses the step header. |
StepperSelectionEvent
Change event emitted on selection changes.
| Name | Description |
|---|---|
|
Index of the step previously selected. |
|
The step instance previously selected. |
|
Index of the step now selected. |
|
The step instance now selected. |
StepperOptions
Configurable options for stepper.
| Name | Description |
|---|---|
|
Whether the stepper should display the default indicator type or not. Default behavior is assumed to be true. |
|
Whether the stepper should display an error state or not. Default behavior is assumed to be false. |
StepContentPositionState
Position state of the content of each step in stepper that is used for transitioning the content into correct position upon step selection change.
type StepContentPositionState = 'previous' | 'current' | 'next';
StepperOrientation
Possible orientation of a stepper.
type StepperOrientation = 'horizontal' | 'vertical';
StepState
The state of each step.
type StepState = 'number' | 'edit' | 'done' | 'error' | string;
STEP_STATE
Enum to represent the different states of the steps.
const STEP_STATE: { NUMBER: string; EDIT: string; DONE: string; ERROR: string; };
STEPPER_GLOBAL_OPTIONS
InjectionToken that can be used to specify the global stepper options.
const STEPPER_GLOBAL_OPTIONS: InjectionToken<StepperOptions>;


filmcritic.com presents a review from staff member James Brundage. You can find the review with full credits at http://filmcritic.com/misc/emporium.nsf/2a460f93626cd4678625624c007f2b46/c97ebb11df0b98398825694f005571d7?OpenDocument
HIGHLANDER: ENDGAME A film review by James Brundage Copyright 2000 filmcritic.com filmcritic.com
He is Duncan MacLeod of the clan MacLeod. He's been pimpin' it since he was born in the village of Glennfillan in 15somethingsomething, and he continues to pimp it in modern day. He is immortal and he cannot die.
Much to our chagrin.
Well, I am typing this review up at about 4:20 in the morning, after having endured the director's cuts of each previous Highlander, watched a few more episodes of the series, and successfully ransacked my living space to find my keys. And, having done all of this, I offer to you this critic's opinion of Highlander: Endgame.
There was a joke on Mad About You a while back that referred to what the title of Die Hard 4 would be… Die Already. Going into Highlander: Endgame, anyone who has endured the three prior films and is still left standing comes in with the same kind of attitude. Have the gathering already and be done with it… just don't have us hear either Duncan or Connor MacLeod introduce themselves one more time… we're sick of hearing it.
This time around, we get a spin off of both the series and the franchise itself… which means we get to meet Connor, Duncan, Duncan's immortal wife, that 5,000 year old Egyptian not played by Sean Connery (who was great in the original Highlander) who sometimes guest stars on the show, the watchers… just about everyone is here, and more heads are being lost than in France circa 1780.
Viewed as a stand-alone film, Highlander: Endgame posses all of the elements of a straight-to-video action movie.
Regardless, due to the fact that I have some responsibility to inform you and thus empower you to make the decision to not waste $8 to see Endgame, I should tell you about the plot. The watchers, who basically work part-time to keep count of the battle between immortals (I suppose it pays better than, say, the Army Reserve) run a place called The Sanctuary, which a psychotic immortal (there's one in every Highlander) called Kell (Bruce Payne) and his band of immortal cronies raid and destroy… despite the fact that it is on Holy Ground and killing immortals on Holy Ground is one of those Highlander no-nos. Once again, it is up to the Highlander(s) to stop the psycho, and this brings in a kitschy Sean Connery/Christopher Lambert like relationship between Connor (Lambert) and Duncan (Adrian Paul) and an even more kitschy relationship between Faith (one of those aforementioned no-names) and Duncan, who were once married until Duncan stabbed her in the stomach to make sure they could be together forever. (Wasn't that the defense of some murderer a ways back?)
The action sequences are decent, but the effects end up so god-awful towards the end (such as a terrible face-morph from Duncan's face to Connor's and back again) that all you can do is cringe.
What is really pitiful is that, when all is said and done, Highlander: Endgame isn't really the end. There are still more heads to chop off, and at least two immortals remain on the face of the planet. Which does explain (and I say this was about as much rancor as a man anticipating a root canal) why one of the four former titles -- Highlander: World Without End -- was changed.

The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


OnWords is a social media annotations platform that allow you to make and share annotations in real time. Onwords' UI is layered on top of the website you are visiting so theres no need to leave the website you want to annotate on. Just download the Chrome Extension and start browsing.
Venshur organizes your instagram pictures by hashtag and displays them by geolocation. You can find friends that have taken Instagram pictures on the same trip or new friends for your next trip
LLDJ media player allows you to play both Sound Clound and Youtube media, and allows people you invite to add to the playlist.
FLapp allows food truck owners to share their location with their fans, and allows consumers to see what Food Trucks are visiting their area.


It looks to me as if kamSend() is sending a request for data to your heat meter, and kamReceive() is checking to see if anything has come in, and if it has, it decodes it.
So you need to split that into two. The 'send' part needs to be done whenever you want to get the data - say on a timer - and the 'receive' part needs to be done every time around the main loop (because it will drop through is there's no data). When you have got the data, you can copy the data into the transmit structure and send it to emonCMS.
The code you want is going to be very much like the way the nanodeRF asks for and receives the time from the server, so you can look at that code to see how that is handled.
Re: Merging 2 sketches...
you are almost right...but its kamReadReg that triggers things and also that one that prints the data...
serial out in arduino ide looks like this:
Energy: 102,47
Current Power: 0
Temperature t1: 35,32
Temperature t2: 30,86
Temperature diff: 4,46
Flow: 0
Volumen 1: 1208,96
Volumen 2: 0
also its from kamReadReg that the calls to send and receive is done....
Re: Merging 2 sketches...
i skipped the heat meter part so now it will only print to serial
one error thou and i cant figure whats wrong, my fault of course but cant figure it
sketch so far attach
error:
sketch_sep06a.ino: In function 'void loop()':
sketch_sep06a:174: error: 'send_rf_data' was not declared in this scope
sketch_sep06a:175: error: 'emontx_sleep' was not declared in this scope
Re: Merging 2 sketches...
ahh, forgot to save emontx_lib.ino in same folder
so now just left to figure how to get the data from the heat meter send to emoncms
Re: Merging 2 sketches...
moved read of DS chip etc up in same section as read of meter, in the end it makes more sense to read the meter every say 10 sec and at same time collect temp from DS chip and get numbers from the pulse input
still i cant get my head arround how to put the numbers from the meter in to the correct variables...
and also i need to take LED stuff out of this line: digitalWrite(PIN_LED, digitalRead(PIN_KAMSER_RX));
new sketch attached
Re: Merging 2 sketches...
Why can't you get the numbers from the meter in to the correct variables? What you need to find out is where the numbers come from, and where you want them to go to.
I think they come out of line 200 or thereabouts. You need to analyse that bit of code and work out what it's doing. The function on that line rval = kamDecode(kreg,recvmsg); takes two values in and returns one value. It's obviously called several times with different inputs, so how can you use that knowledge to put the returned value (because that's obviously the number you require) into the right place each time? (Hint 1: Where does the literal string "Temperature t1" come from, and what controls which string is printed? Hint 2: look at using a "Switch" statement).
Re: Merging 2 sketches...
first of all the sketch that gets the data and just prints them to serial is not my work... its the work of the guy who figured the optical ir head...
these strings are some i made up so that the data from the meter can be send in same fashion like temp and data from the blinker on the electricity meter....
int Energy;
int CurrentPower;
int Temperaturet1;
int Temperaturet2;
int Temperaturediff;
int Flow;
int Volumen1;
int Volumen2;
the names are the same as thou the heater meter uses but without spaces.... i just thought i would need this anyway
but the same ones with spaces does not come from the meter itself, .....
word const kregnums[] = { 0x003C,0x0050,0x0056,0x0057,0x0059,0x004a,0x0044 };
char* kregstrings[] = { "Energy","Current Power","Temperature t1","Temperature t2","Temperature diff", "Flow", "Volumen 1" };
what is done is that you ask the meter for register data in form of some hex values.... the first one 0x003C is Energy.
so from what i understand is that you build up a string of these hex values and send them off and the meter will return them...
when it returns the data i guess the first vavlue is simply paired with the first string...
but to make it short your suggestion is above my skills... so i kind of hoped not to be direct spoon feed but so strong pointers that i could guess my way through it...
but well i will get it one way or the other and then i will order the hardware
might be that the guy that made the ir interface will help me out
Re: Merging 2 sketches...
but yes looking at your suggestion twice...
logical i must put in the numbers in the strings as they are decoded and printed to serial...
hmm... will thinker a bit on that
Re: Merging 2 sketches...
ahh... just a thought
// print out received value to terminal (debug)
Serial.print(kregstrings[kreg]);
Serial.print(": ");
Serial.print(rval);
Serial.print(" ");
Serial.println();
return rval;
}
before return rval line, put in the vavlue of rval in the first string variable of thse:
int Energy;
int CurrentPower;
int Temperaturet1;
int Temperaturet2;
int Temperaturediff;
int Flow;
int Volumen1;
int Volumen2;
are my logic far off?
Re: Merging 2 sketches...
Bo, I'm trying to teach you how to find your way through the software!
OK, you're getting close.
What does kreg do? What is the link between kreg and the string it prints at the terminal to tell you what the quantity is?
What is rval - is it always the same variable coming back from the meter, or is it the variable that's being decoded at this instant?
Re: Merging 2 sketches...
kreg is the registers in the meter...
yes rval is the register value that is beeing decoded.... in the start of the sketch its told how many registers you ask for
#define NUMREGS 7 // Number of registers above
and it will also reply in the order you ask for them
word const kregnums[] = { 0x003C,0x0050,0x0056,0x0057,0x0059,0x004a,0x0044 };
you pair that with the names to make it a bit meaingfull
char* kregstrings[] = { "Energy","Current Power","Temperature t1","Temperature t2","Temperature diff", "Flow", "Volumen 1" };
now i'm guessing the sketch, but you ask for the data and loops the amount of registers that have been asked for
// poll the Kamstrup registers for data
for (int kreg = 0; kreg < NUMREGS; kreg++) {
kamReadReg(kreg);
so it will jump back and forth to this part 7 times
// kamReadReg - read a Kamstrup register
float kamReadReg(unsigned short kreg) {
byte recvmsg[30]; // buffer of bytes to hold the received data
float rval; // this will hold the final value
// prepare message to send and send it
byte sendmsg[] = { 0x3f, 0x10, 0x01, (kregnums[kreg] >> 8), (kregnums[kreg] & 0xff) };
kamSend(sendmsg, 5);
// listen if we get an answer
unsigned short rxnum = kamReceive(recvmsg);
// check if number of received bytes > 0
if(rxnum != 0){
// decode the received message
rval = kamDecode(kreg,recvmsg);
// print out received value to terminal (debug)
Serial.print(kregstrings[kreg]);
Serial.print(": ");
Serial.print(rval);
Serial.print(" ");
Serial.println();
return rval;
}
total nuts or does it get warmer?
and sorry for this teaching, but i'm a real idiot at writing code... have tried to learn it but have always ended hacking bits together....
Re: Merging 2 sketches...
You are a little bit closer, but you are missing the point I am trying to get to. Almost everything you need to look at is in those debug print statements, so concentrate your attention there. What does Serial.print(kregstrings[kreg]); print when kreg=0, 1, 2, ... ? What does that tell you about what rval represents?
Writing code is not difficult - I agree there are a few keywords and constructs to remember (but in C there are a lot fewer than most languages), the main part is just a matter of following the variables through in a logical manner. When you've got the solution, I'll tell you exactly how I solved it.
Re: Merging 2 sketches...
all i can figure so far is that rval gets updated on each pass of the 7 times i jumps back and forth to get the data....
not sure i ever get the point of it but will keep looking at it
Re: Merging 2 sketches...
You wrote "serial out in arduino ide looks like this:
Energy: 102,47
Current Power: 0
Temperature t1: 35,32
Temperature t2: 30,86
Temperature diff: 4,46
Flow: 0
Volumen 1: 1208,96
Volumen 2: 0 "
Here is the question I asked myself when I started to look at your problem: How does this get printed? Which print statement prints which part of each line, and what is the value of each variable for each line that is printed?
Because the values you want are in there - the answer must also be in there.
Re: Merging 2 sketches...
of course the answer is in there and i know approx how it works...
you send of one string to the meter where you ask for data on one or more registers...
it will then send back the data... you first decode the first part and then print it... you then go back and decode the next bit and then back and print that...
hmm a wild guess here... since we know that order the data comes.... could we get away with another section like this one:
for (int kreg = 0; kreg < NUMREGS; kreg++) {
kamReadReg(kreg);
and place it here where the empty lines are:
// print out received value to terminal (debug)
Serial.print(kregstrings[kreg]);
Serial.print(": ");
Serial.print(rval);
Serial.print(" ");
Serial.println();
return rval;
we know that first time we enter the loop rval will hold the energy figure... next time we run the loop it will have current power... and so on... when we run that loop for the 7th time it should print the Volume number...
but just guessing here...
Re: Merging 2 sketches...
"but just guessing here..." Indeed you are. And you have not answered the question that pointed you towards the answer. There is no need to read anything again - you already have all the information that you need.
"you send of one string to the meter where you ask for data on one or more registers..." - True, but not relevant.
"it will then send back the data... you first decode the first part and then print it..." Let us stop there. When you print it, what do you know about the values in the print statement at that point? I am trying to get you to work out - from knowing what is printed at the terminal and knowing the code that does the printing, plus knowing how the words are defined up in line 29, what is the actual value in each of the variables in that code.
Re: Merging 2 sketches...
that is what is over my head.... i just know that first time it goes through the decode thing its energy etc etc...
but time to study the inside of my eyelids.... need to reasonable fresh and awake tomorrow
but will poke my mind some more in the afternoon... not any gurantee that i ever get it
Re: Merging 2 sketches...
OK, here's how to do it:
Laying it out so that you can see and compare:
That tells me that "kregstrings[kreg]" is "Energy". Look at line 29 where this is defined:
char* kregstrings[] = { "Energy","Current Power","Temperature t1","Temperature t2","Temperature diff", "Flow", "Volumen 1" };
"Energy" is element 0 in the array, therefore to print "Energy", the value of kreg was zero. Therefore this time around the loop, when kreg is zero, rval holds the value for Energy. When kreg holds the value 3, what does rval represent? - Temperature t2. (Can you see why?)
Therefore, what you need is a piece of program that allocates the value in rval to the appropriate variable in the emontx structure according to the value of kreg.
This is what I think you need, after:
// decode the received message
rval = kamDecode(kreg,recvmsg);
switch (kreg) {
case 0 : emontx.Energy = rval;
break;
case 1 : emontx.CurrentPower = rval;
break;
case 2 : emontx.Temperaturet1 = rval;
break;
case 3 : emontx.Temperaturet2 = rval;
break;
case 4 : emontx.Temperaturediff = rval;
break;
case 5 : emontx.Flow = rval;
break;
case 6 : emontx.Volumen1 = rval;
break;
case 7 : emontx.Volumen2 = rval;
break;
}
// print out received value to terminal (debug)
If you have not met "switch" - read up about it! Depending on kreg, it branches to one of the cases and executes what it finds there, 'break' makes it break out and not do the cases below. So it goes on and prints the debugging statements.
Beware - if you have the 8th value (Volumen2), you MUST add that to the definition of kregstrings, else your program will most likely crash when it tries to print the string that does not exist.
Re: Merging 2 sketches...
dooh yes...
i see some light at the end of the tunnel...
kreg is the counter... so yes..... i feel a bit like a fool now...
i did remove volumen2 from the sketch as it will always be 0, it meant to count cold water if a pulse device is attached to the meter... in my case not...
http://openenergymonitor.org/emon/sites/default/files/sketch_sep06a_1.ino
will have a look at your post again tomorrow when less knackered...
Re: Merging 2 sketches...
have been looking at i cant belive that it was right under my nose the whole time...
had i just seen what kreg did i would have been so much closer...
of course this will increment by one at each pass and you just have to put rval in the variables at the right time
*giving myself an good slap in the face*
going to order the emontx v2, should be plenty enough for the role
Re: Merging 2 sketches...
looked through the code some times... made empty lines the same and moved comments to the right...
could it be worthy as an "official" example when its been tested on hardware? glyn says they ship a huge box today or tomorrow
Re: Merging 2 sketches...
starting to clean up and adjust the sketch so i can start log tonight (with a dash of luck)
what does this line do?
#include <avr/wdt.h>
i know it loads a lib but what is its function?
Re: Merging 2 sketches...
watch dog timer of course----
my guess it makes sure that the unit does not get stuck... so if there is to long time between the watchdog is reset it will reboot?
if (UNO) wdt_enable(WDTO_8S);
does that set the interval to 8 sec? so if i transmit say every 5 mins i have to adjust here ?
Re: Merging 2 sketches...
So i tried to clean it up as best i could
Sketch attached....
But are there room for improvement?
Re: Merging 2 sketches...
Almost success
serial output from from arduino IDE:
0 W
0 Pulses
Hot water cylinder is 2612 Degrees C
Total energy consumed on district hot water: 102 Gj
Current energy consumption on district hot water: 0 Kw
Incomming temp on district hot water: 35 Degrees C
Outgoing temp on district hot water: 34 Degrees C
Difference in temp on district hot water: 1 Degrees C
Curreî€€€ÿ€€€ÿÿÿÿÿz¹ ‘¥ÍÑÉ¥ Ñ ë‹ÿ water: 0 Ltr./h
Total volumen: 1213 M3
2nd line from buttom... i cant quite figure why these bogus signs show up...
when it prints to serial it pauses right there and then prints the rest on the next go....
Re: Merging 2 sketches...
Sending an RF message shortly after using Serial.print() can mess up the display.
If you comment out the send_rf_data() line or equivalent, this symptom may go away ...
Re: Merging 2 sketches...
oki, will try it after dinner is over
Re: Merging 2 sketches...
the lenght of bogus chars are now down to 3
i commencted out the send rf line... think i will need a delay also
Re: Merging 2 sketches...
delay sorted it... 100ms was enough
sketch with RF commented out attached
is there anything i can do to improve it and make it so it could become a example on git ?
Re: Merging 2 sketches...
You asked....
You don't use the array char* units[65], so that can all go.
It might be clearer if you called your temperatures "TemperatureT1" etc - but that's a personal preference.
"Kamstrup Stuff Start" should be "end" in line 108.
You probably need to warn that 57600 Baud needs to be set in the IDE - we normally use 9600.
We spell the word "Incoming".
Are you happy with sending the temperatures in degrees? Would it be better to multiply rval by 10 when assigning to TemperatureT1 etc, and send tenths of a degree, to give better precision?
Re: Merging 2 sketches...
oki...
yep i had a few thoughts after i got to bed...
but array char is deff one of them.... i guess it has just stayed as a place holder for what the kamstrup protocol has to offer, but its not all meters that have all those numbers... electricity meters from kamstrup have some of them but not all, and the heat meters have others etc etc...
so off it goes....
also correcting temperatures....
as for BAUD... is there much difference in the speed i use versus 9600 ? i could go down to 9600 if it does not matter
Incoming will be corrected too...
hehehe... funny you should mentioned if i'm happy.... last thing i noted before going to sleep was that is sends the temp in whole numbers and not with decimals or at least as a 4 digit number i can process in emoncms... same goes for the temp probe in the hot water cylinder... but that is my own fault
time for breakfast as i edit
Re: Merging 2 sketches...
btw... should i not multiply rval by 100 to get 4 digits numbers just like when doing a ds18b20 ?
Re: Merging 2 sketches...
so i had a small play with it..
baud is still unchanged but can change it if the speed does not matter
new sketch attached
Re: Merging 2 sketches...
now that i got data in to emoncms there is one clear thing
total vol on the meter is a 4 digit number with 2 decimals... but on emoncms it becomes a negative number...
i assume the order of the inputs in emoncms is the same as transmit order
i opted to multiply rval with 100, but maybe it should really only be 10?
Re: Merging 2 sketches...
now multiplying by 10 and the number is now positive but 1 decimal missing...
what can i do to get the last one?
Re: Merging 2 sketches...
total vol on the meter is a 4 digit number with 2 decimals... but on emoncms it becomes a negative number...
So biggest possible number is 9999,99?
Try to split the value into two parts (e.g. integer part and decimal part) and send as two values. Recombine on Emoncms side.
Re: Merging 2 sketches...
yep that is the biggest number....
just need to find an example on how to split it and copy the idea in to my sketch
Re: Merging 2 sketches...
Something like this:
Not very 'clean' but should work.
Re: Merging 2 sketches...
If you put a long integer in your Payload structure, it is still transmitted as byte values. Inside emoncms, those bytes are interpreted two at a time as 2-byte integers. If you have a long integer, it takes up 4 bytes, the same space as two short integers, therefore inside emoncms the maths you need is [first value] + 65536 x [second value]. But beware the sign bit on [first value], which you need to ignore, so test for a negative first and add 65536 if so.
Re: Merging 2 sketches...
If you are using emonhub you are no longer tied to using just signed ints. you can use several data types and emonhub will decode them if you set the "datacodes" string for the node in the [nodes] section of emonhub.conf
So you could use a signed long instead of a signed int then you can multiply your float value by 100 in the sketch and multiply by 0.01 in the input processing of emoncms. ( a future version of emonhub will do scaling also but for now use emoncms )
Assuming for the moment you only need to change the one value you could change your existing payload to
and that values "case" line in the sketch to
In emonhub.conf [nodes] section
This will tell emonhub to decode all node 5's packets as 9 ints and a long rather than the default all ints.
It sound more complex than it is, basically you are just setting the payload structure in your sketch before tx over rf then telling emonhun what that structure is so that it can defode the rf packet (payload)
Until fairly recently all sketches only used ints and all rfm2pi software decoded packets assuming they consisted only of ints so emonhub defaults to ints for compatability but you can use many data types now see
http://openenergymonitor.org/emon/node/5289 for more info
Paul
EDIT - Sorry Robert, took me a while to write and you've posted in the meantime
Re: Merging 2 sketches...
Oh, this is very nice to know!
Then it would be even easier (faster) to send the float value and use the f parameter in datacodes ?
Re: Merging 2 sketches...
i didn't suggest that as I have not yet tested floats and whilst researching how to do these data conversions I was put off using floats altogether by the way they work in 0.125's rather than 0.1's it just seems horrendous to me so I like the scaling option. but please by all means give it a try I would love to know if its worth keeping the float option in emonhub.
Paul
Re: Merging 2 sketches...
i use the low write version of emoncms.... but i have edited emonhub.conf so i guess its emonhub still....
will test it either tomorrow or during the week...
Re: Merging 2 sketches...
but please by all means give it a try .....
I have created a kWh counter with 0.001kWh resolution and send the value as float, decoded with f option and it works!!!
Resolution in Emoncms is 0.01 (value shown in Inputs!) but the value is decoded correctly.
Crosschecked with a constant float value of 876.5432 which is also decoded correctly.
So, please keep the float option :-))
Re: Merging 2 sketches...
Fantastic, thanks for trying that Jörg. I guess floats are staying then :-)
In which case boelle, you should be able to just change the payload to define a float data type
and add the datatypes for node 5 to emonhub.conf
Re: Merging 2 sketches...
So i dont need to alter the case stuff? ie
case 6 : emontx.Volumen1 = (long)(rval*100+0.5);
?
i wondered why add 0.5 ?
Re: Merging 2 sketches...
i wondered why add 0.5 ?
(long)1.943 = 1
(long)(1.943+0.5) = (long)2.443 = 2
Conversion from float to Integer truncates. You get the nearest integer by adding 0.5 before conversion.
You can do a similar thing in integer divisions:
instead of:
val = val/980;
you get a 'better' (= nearer) result by doing:
val = (val+980/2)/980;
Re: Merging 2 sketches...
so let's say rval is 15.34 there is no way i can get that exact number to emoncms?
i just chekced up on the sketch and rval is a float... so could i get by changing all variables that i send to emoncms to floats also?
ie:
int power; // power
int pulse; // pulses
int temp; // temperature of hotwater cylinder
//********************************************Kamstrup Stuff Start********************************************
float Energy;
float CurrentPower;
float TemperatureT1;
float TemperatureT2;
float TemperatureDiff;
float Flow;
float Volumen1;
i also discovered that temp is a float further down:
float temp=(sensors.getTempCByIndex(0));
should i correct the first temp to float also? just to keep it the same
Re: Merging 2 sketches...
also i saw these 2 lines:
digitalWrite(PIN_LED, digitalRead(PIN_KAMSER_RX));
delay(1000);
that adds 1 sec of delay... could i get rid of it without much trouble? i pull data at 5 sec interval allready and this delay would really make it 6 right?
Re: Merging 2 sketches...
so let's say rval is 15.34 there is no way i can get that exact number to emoncms?
there are different ways to transfer this value 'exactly' to Emoncms:
- multiply by 100: 15.34*100 = 1534.0, convert to integer long with (long)(1534.0+0.5) and transfer as integer long
- transfer as float (with the f option on the input decoder as described above)
You may change every value to float but float calculations in general need much more processing time (and double the space) compared to 16 bit integers. And if the range of possible values is small, this is simply overkill.
(and the 'accuracy' of a float variable is exactly the same as that of a long, because both use 4 bytes and can have 2^32 possible different values)
Re: Merging 2 sketches...
i pull data at 5 sec interval allready and this delay would really make it 6 right?
Yes, if you do it like this (taken from your sketch):
The 'real' poll interval will be at least POLLINTERVAL + (100*NUMREGS) + 1000 ms. I would not do it this way but rather like this:
}
This gives an exact polling intervall of POLLINTERVAL ms (as long as the code within the if clause takes less than POLLINTERVAL ms processing time). I think you can see the difference.
Re: Merging 2 sketches...
Re: Merging 2 sketches...
or are the 2 temps different ones?
Re: Merging 2 sketches...
Which 2?
Are you talking about the member 'temp' in the payload struct emontx? This is for sure a completely different variable than the float temp declared further down in the sketch.
But, in your sketch you first read the temperature value from the sensor into the float variable temp and then immediately 'copy' it into the struct member emontx.temp, which is an int:
This gives the same result as if you directly read into emontx.temp:
emontx.temp=(sensors.getTempCByIndex(0));
Now it is your decision if you change the type of emontx.temp from int to float. But if you do, you have to inform the decoder in emonhub that you are sending a float (f option).
Re: Merging 2 sketches...
Depending on the range you need, if you could also use
in place of those 2 lines, then you would get a range of -327.68 to 327.67 by just multiplying by 0.01 in emoncms and only use 2bytes rather than 4.
Paul
Re: Merging 2 sketches...
yep...
it was those 2.. i was just unsure about it.... dont want to screw things up more than need be :-D
Re: Merging 2 sketches...
i tend to like the float option... thou it might be overkill.... but it makes life simple :-D at cost ot space
Re: Merging 2 sketches...
so i'm trying to float option and the feed values are right... ie my hot water temp is 38.94
total energy is 102.67 but in the input list its shown as 103... the temp above is shown as 38.9
another is the incoming temp, feed value is 34.56 but is shown as 34.6
the dashboard seems odd... one of the temp dials for district heating is 2 decimals and the others are not
temp gauge on the hot water cylinder is also only single decimal...
are there some rounding off going on? or can i decide how many decimals to use?
Re: Merging 2 sketches...
also my kwh is now negative... i i have set up an input processor that takes watt and turns then to kwh...
Re: Merging 2 sketches...
deleted the kwh feed and processor and created them again... so far it seems ok
Re: Merging 2 sketches...
also my kwh is now negative...
If this happens after a reboot, this could be due to a bug in the pre-configured image. I had this a couple of times now. Paul (pb66) and I tried to find the reason for it and it seems that it is due to missing real time information in the first seconds after reboot and before time information is fetched via ntp.
Re: Merging 2 sketches...
attached are pics of the temp list... and a pic of the feed value for one of them... why is it 1 decimal on the list but when you look at feed value is not?
Re: Merging 2 sketches...
This is just how someone (Trystan) decided to present the values.
If you use the values on your dashboards, you can decide how many decimals you want (possibly not for all widgets but for example for the 'feedvalue' widget).
Re: Merging 2 sketches...
you can decide how many decimals you want
how do decide that? i want it to be 2 decimals for most of it...
Re: Merging 2 sketches...
in fact i would like the 2 decimals on both input list, feed list and on dashboard
Re: Merging 2 sketches...
But input list and feed list are for 'internal' use only.
On the dashboard the 'feedvalue' widget has a parameter for the number of decimals. Similar settings can be done for a number of other visualizations.
Re: Merging 2 sketches...
well the dial vis does not have it... but sometimes it shows 2 deciamls and some times it does not
and the same comes with the value in the feed and input list... some are 2 decimals and some are 1....
*sigh*
Re: Merging 2 sketches...
http://energymonitor-dk.dns4e.net/emoncms/boelle/heat
look and the temp in and out and diff... there are not settings for decimals and yet they differ...
try and compare that with my pic of the feed list... strange right?
Re: Merging 2 sketches...
well the dial vis does not have it... but sometimes it shows 2 deciamls and some times it does not
Yes, thats right. The dials have no settings for decimals. This is why I wrote that only some of the widgets have these settings.
look and the temp in and out and diff... there are not settings for decimals and yet they differ...
In the black center of the dials you only have very limited space tp print the number. It would not be possible to print a 4 digit number with 6 decimals. So the code decides how many decimals to print. If the value is below 10, it prints two decimals, between 10 and 100 it prints 1 decimal and above 100 no decimals. But you can easily modify the code to change that.
If you want to understand these things better, look into the code.
try and compare that with my pic of the feed list... strange right?
No, not really. It has been decided to print it this way (and you are free to change it). Similar reasons as with the dial widget. Smaller numbers are printed with more decimals than bigger numbers.
Re: Merging 2 sketches...
ok... and what file should i start to look at to change it for the dials and the cylinder symbol?
Re: Merging 2 sketches...
for example:
/var/www/emoncms/Modules/dashboard/Views/js/widgets/dial/dial_render.js
starting from line 274 there is this code:
which is responsible for the formatting of the printout.
/var/www/emoncms/Modules/dashboard/Views/js/widgets/dial/cylinder_render.js
starting from line 118:
Re: Merging 2 sketches...
and i guess the number in the () says how many digits total? or is it decimal?
Re: Merging 2 sketches...
Google tells me:
The toFixed() method converts a number into a string, keeping a specified number of decimals.
Re: Merging 2 sketches...
i set it to 3 in all of them and no change... so i must be doing it wrong
Re: Merging 2 sketches...
try to clear the browser cache .....
Re: Merging 2 sketches...
thanks...that did it
and i guess i have to look for the same to change the cylinder?
Re: Merging 2 sketches...
see above!
Re: Merging 2 sketches...
doh yes...
Re: Merging 2 sketches...
oh well....
now the feeds are not saved to graphs does not work...
even tried to delete the feed and create them again...
Re: Merging 2 sketches...
changed everything back
deleted the feeds and recreated them...
still it does not save to disk anymore... ie feed size stays 0 kb
Re: Merging 2 sketches...
i wondered why add 0.5 ?
Conversion from float to Integer truncates. You get the nearest integer by adding 0.5 before conversion.
But in general you'll get it a lot faster if you use the lrint() family of functions rather than force a floating point addition into the mix. When done in software (like on the AVR), a truncate-and-convert-to-int costs about the same as a round-and-convert-to-int, so if you want the rounded version you can save yourself a floating point addition by just asking for it.
In some pre-SSE3 FPU architectures (not an issue for the AVR) a truncate can be extremely expensive because it involves reconfiguring the FPU global rounding mode (with associated pipeline flushes) into truncate mode. In those architectures you really want to avoid a truncate unless of course that's what you're really after. The SSE3 introduced a truncate instruction which removed that quirk. But even then, you can still avoid a floating point addition by calling for rounding when you want rounding.
A quick test on the AVR reveals:
Volumen1 = lrintf(rval*100.0);
is way faster than
Volumen1 = (long)(rval*100.0+0.5);
Re: Merging 2 sketches...
Volumen1 = lrintf(rval*100.0);
is way faster than
Volumen1 = (long)(rval*100.0+0.5);
Good to know (although I try to avoid floats at all). In which library are these functions buried?
EDIT: Ok, found it. lrint is included in math.h
Re: Merging 2 sketches...
Good to know (although I try to avoid floats at all)
Me too, even on my i7 with the mother of all FPUs, and absolutely on a little AVR. I just did some scope timing of the above 2 statements on a 16MHz AVR and it's roughly 23.6 usecs Vs 15 usecs.
In which library are these functions buried?
Should be in the standard math lib since about C99 I think.
Re: Merging 2 sketches...
this is not the problem right now....
now it will not save the feeds and hence graphs does not work,...
Re: Merging 2 sketches...
and then now it does...
all i did last night was to cold boot... ie power off external hard drive and the pi and this morning i booted and refreshed the feed list and now i grows
Re: Merging 2 sketches...
and now they are 0 again and not growing...
once they all worked i wanted to start fresh data vise so removed all feeds and created them again...
Re: Merging 2 sketches...
what could cause this strange behaveour ?
when i create the power to kwh feed the value of it starts to climb... but the feed size does not...
like something prevents that the feed is saved...
Re: Merging 2 sketches...
also just noted that even thou i send data at approx 5 sec interval the input list can say up to 11 sec between updates...
Re: Merging 2 sketches...
and the issue is the same whatever i choose local ip or wan ip
Re: Merging 2 sketches...
discussion on the not saving issue continues here: http://openenergymonitor.org/emon/node/5811


Week 1 updates
This is my first of many updates that I plan to write on weekly basis. The updates will cover what I have accomplished in a week. The focus is mainly on work and my open source contributions. This will alaso include any lessons I pick up on weekly basis.
What weekly updates should be about
- should be about open source and my work ( I am currently working fulltime on an open source project tyk)
- should be brief and concise (These are not blog posts, they are like a notebook to keep tabs of whet I have been up to)
- should be about programming
- should end with what I plan or wish to work on the following week
Work
It has been three months since I started working on tyk, so this is a recap of the work I have done in the past three months.
- major features
- PR #2384 I added opentracing support.
- PR #2426 I added tcp proxy support . This was a collaboration effort with my team member Leonid Bugaev he had already done most of the initial work, I did the final touches.
- minor features
- bug fixes
Personal
This week, I took some time to revisit old ideas/projects that I used to work on, one thing that suprised me is how much zig
code I have written. Most of my zig projects were private on gilab, I have decided to open some so that I can slowly rotate on them. Zig is moving fast, hopeful I will be able to catchup in the coming weeks.
- Projects I made public
- hoodie this is ambitious language server for zig. I was waiting for coroutine asymc/await to land. Now that async/await has landed I will be hacking on it in the upcoming weeks.
- hiro a modern qrcode service. This is my ideas for a startup, its progressing slowly because I am learning react for its frontend. The backend is pretty much done by now.
- Projects I worked on
Conclusion
For the last three months I have been busy, I took a week off this week. I feel refreshed and ready to go back to work next week. I will have to be careful with my spare time so next week I will use all my free time to work on hoodie
. I think dedicating one week for each personal project will be enough to see progress in them.
For tyk, areas i will pay more attention to might be
- ensure all long running routines accept
context.Context
and know when to terminate - try to address at least 5 bugs
- research on how to make our open tracing offering robust ( for future release)
- research stream processing for tcp services (take inspiration from haproxy)
- group globals into logical structs/interfaces (handy when we are moving to doing gateway benchmarks)
- think how to properly benchmark the tyk gateway
This is all for today, happy hacking (To me.)


|
HPE Content Manager SDK 9.2
|
This class defines a page contained within an ApiFormDefinition More...
Public Member Functions | |
| PageItemDefinition | GetItem (uint idx) |
| Gets the item at the specified index on this page More... | |
| PageItemDefinition | AddTabItem () |
| adds a new tab positioning item into the items array More... | |
| PageItemDefinition | AddLineItem () |
| adds a new horizontal line into the items array More... | |
| PageItemDefinition | AddPropertyItem (PropertyIds prop) |
| adds a new child list editing page in the the array of pages on this form. More... | |
| PageItemDefinition | AddFieldDefinitionItem (FieldDefinition field) |
| adds a new child list editing page in the the array of pages on this form. More... | |
| void | DeleteItem (uint idx) |
| Removes the page item at the specified index. More... | |
| void | DeleteAllItems () |
| Removes all the items on this page More... | |
| Public Member Functions inherited from HP.HPTRIM.SDK.TrimSDKObject | |
| TrimSDKObject () | |
Properties | |
| uint | ItemCount [get] |
| Gets the number of items currently on this page More... | |
| DataEntryPageType | PageType [get] |
| Gets the type of this data entry page More... | |
| BaseObjectTypes | ChildTypeOfPage [get] |
| Gets the child object type of this page - only applicable for pages of type 'ChildList' More... | |
| PropertyValue | ChildPageFilter [get] |
| Gets the filter used to restrict which items appear in the child list page - only applicable for pages of type 'ChildList' More... | |
| EditNotesStyle | NotesStyle [get] |
| Gets the notes editing style to use if this page is the standard notes editing page More... | |
| string | Caption [get, set] |
| Gets or sets the caption to be used as the title of this page More... | |
| string | DefaultCaption [get] |
| Gets or internal default caption for this page More... | |
| bool | ItemCaptionsAboveControl [get, set] |
| Gets or sets a boolean value indicating if captions for items should be displayed above the item control More... | |
| bool | HighlightMandatoryItems [get, set] |
| Gets or sets a boolean value indicating if items that are mandatory (i.e. cannot be blank or zero), an indicator should appear next to the item to alert the user to this state. More... | |
| bool | IsMandatory [get, set] |
| Gets or sets a boolean value indicating if it is mandatory to enter some data into this page. May used to indicate that an entry must be added for a child list page, but can also apply to some of the standard pages. More... | |
| Properties inherited from HP.HPTRIM.SDK.TrimSDKObject | |
| string | ErrorMessage [get] |
| All TRIM SDK objects have an ErrorMessage property which can be used to examine any error that may have occurred in the most recent method call. More... | |
| TrimException | Error [get] |
| All TRIM SDK objects have an Error property which can be used to examine any error that may have occurred in the most recent method call. More... | |
This class defines a page contained within an ApiFormDefinition
| PageItemDefinition HP.HPTRIM.SDK.PageDefinition.AddFieldDefinitionItem | ( | FieldDefinition | field | ) |
adds a new child list editing page in the the array of pages on this form.
| PageItemDefinition HP.HPTRIM.SDK.PageDefinition.AddLineItem | ( | ) |
adds a new horizontal line into the items array
| PageItemDefinition HP.HPTRIM.SDK.PageDefinition.AddPropertyItem | ( | PropertyIds | prop | ) |
adds a new child list editing page in the the array of pages on this form.
| PageItemDefinition HP.HPTRIM.SDK.PageDefinition.AddTabItem | ( | ) |
adds a new tab positioning item into the items array
| void HP.HPTRIM.SDK.PageDefinition.DeleteAllItems | ( | ) |
Removes all the items on this page
| void HP.HPTRIM.SDK.PageDefinition.DeleteItem | ( | uint | idx | ) |
Removes the page item at the specified index.
| PageItemDefinition HP.HPTRIM.SDK.PageDefinition.GetItem | ( | uint | idx | ) |
Gets the item at the specified index on this page
|
getset |
Gets or sets the caption to be used as the title of this page
|
get |
Gets the filter used to restrict which items appear in the child list page - only applicable for pages of type 'ChildList'
|
get |
Gets the child object type of this page - only applicable for pages of type 'ChildList'
|
get |
Gets or internal default caption for this page
|
getset |
Gets or sets a boolean value indicating if items that are mandatory (i.e. cannot be blank or zero), an indicator should appear next to the item to alert the user to this state.
|
getset |
Gets or sets a boolean value indicating if it is mandatory to enter some data into this page. May used to indicate that an entry must be added for a child list page, but can also apply to some of the standard pages.
|
getset |
Gets or sets a boolean value indicating if captions for items should be displayed above the item control
|
get |
Gets the number of items currently on this page
|
get |
Gets the notes editing style to use if this page is the standard notes editing page
|
get |
Gets the type of this data entry page


So you think you want a stacked series chart? Trust me, you don't. uPlot does not provide this functionality in the core, both out of principle and because it requires inter-series data aggregation. However, if you really need to mislead people with shitty charts, you can still technically get it done.
The two charts below show exactly the same data (did you notice?)
In summary, JUST DON'T.


| Amount | User | Listing | Approval URL | Completed? |
|---|---|---|---|---|
| ${paymentRequest.amount | rounded} LTC - (${paymentRequest.amount | toCurrency:currentExchangeRate | usdFormat} USD) | ${paymentRequest.user.name} | ${paymentRequest.listing.title} | ${paymentRequest.approval_url} |