Hi,
just got around to building my emonTx and connecting to it the weatherproof temp sensor bought from the online store here.
emonTX seems fine, I am talking to it over USB for the moment.
However I cannot read a valid temperature from the DS18B20.
It is correctly detected by the DallasTemperature library, and has a plausible looking address of 28:B8:0D:A2:04:00:00:64
The Dallas code decides this is a valid device address.
however the temperature read back from the device is a contant and strange 85C.
Dumping out the scratchpad using the Dallas API just gives a constand set of bytes
Any clue about what might be wrong?
Is is plausible that the device is just bad?
I don't have another one to try ...
Thanks
Liam
Re: emonTX + DS18B20: invalid temperature read?
Hmm
OK I see from the DS18B20 datasheet that 0x50 0x05 in the first two bytes of the device scratchpad (a.k.a the temperature reading of 85C) is the scratchpad power up state.
Curious.
But it would suggest that I am at least talking to the device.
The code just looks like this:
sensors.setWaitForConversion(true);
sensors.setCheckForConversion(true);
sensors.requestTemperaturesByAddress(tempSensorAddr);
if( sensors.isConversionAvailable(tempSensorAddr))
{
Serial.println("Temperature conversion is available");
} else {
Serial.println("No temp conversionavailabe");
}
/* Dump out the scratchpad : debug */
sensors.readScratchPad(tempSensorAddr, scpad);
Serial.println("Scratchpad...");
for(i=0; i<9; i++)
{
Serial.print(scpad[i], HEX);
Serial.print(" ");
}
Serial.println("");
temp=sensors.getTempC(tempSensorAddr);
Serial.print(temp, DEC);
Re: emonTX + DS18B20: invalid temperature read?
And one followup question if I could
The store-provided outdoor-ready temp sensor kit has 3 wires + a braid.
Should the braid connected be connected to ground too?
Re: emonTX + DS18B20: invalid temperature read?
What does the example sketch EmonTx_temperature_power give you? - after plugging in the address of your sensor, of course.
Check whether the screen braid is connected anywhere else! If not, then earthing it is probably a good idea.
[Edit]
After adding some declarations and minor details like setup( ) and loop( ) to your "sketch" to allow it to compile, it does seem to be giving me the correct temperature readings.
So I suggest you check your definitions for the variables and your connections to the sensor. http://openenergymonitor.org/emon/buildingblocks/DS18B20-temperature-sen...
Re: emonTX + DS18B20: invalid temperature read?
Thanks
A colleague also suggests that he has seen exactly the same behaviour, caused by incorrect wiring on his part.
So I need to check that i have soldered the board together properly. The temp sensor is definitely connected properly to the 3.5mm jack, at least it is according to the picture on this page:
http://openenergymonitor.org/emon/buildingblocks/DS18B20-temperature-sen...
And I also have other generic Arduino boards, I might be able to connect the temp probe to one of them as a second check.
Re: emonTX + DS18B20: invalid temperature read?
Experiments with another arduino board showed that the temperature sensor works fine.
I spent a *long* time trying to figure out what I did wrong with the emonTx, but to no avail. I can't find anything wrong with the connections, but it just does not want to play ball with the temperature sensor.
I don't really have any debugging kit here either, beyond a simple multimeter.
Oh well, I guess I broke it :-)
I will build another one. Carefully.
Re: emonTX + DS18B20: invalid temperature read?
Liam,
I'm about to start on the same journey, so if you do ever do find out what went wrong it would be good to hear about it.
Simon
Re: emonTX + DS18B20: invalid temperature read?
liam,
Before you do that:
There are only 3 connections to the jack socket - 5 V, GND and the Input to Pin 6 on the processor (DIO 4). Can you check continuity with your meter on those - a faulty socket is not unheard of. I presume you have R9 (4k7) fitted and you get 5 V on the ring, 0 V on the sleeve and something in between on the tip with the sensor connected or 5 V without.
You can prove the digital input by writing a "one-liner" sketch to read DIO4, it should read HIGH with nothing connected and LOW if you short tip to sleeve.
Re: emonTX + DS18B20: invalid temperature read?
Hi
apologies for not monitoring the forum. Some vacation time intervened.
I built another emonTx there this evening (very, very carefully) and connected to it one of the weather proof temp sensors from this site. In various experiments I <ahem> sort of broke the first one ;-)
Somewhat to my annoyance, this didn't work properly either: a sketch would find the Dallas chip, no problem. But the temperature read from sensor was always incorrect (+127C)
After a spot of googling and some experiments, though, I discovered how to fix it.
Instead of the 4.7K pullup resistor which is part of the standard kit, I used a 2.2K pullup.
well, OK, not exactly 2.2K, but I had another 4.7K on the bench so I wired that in parallel. So 2.35K to you.
Now it works just fine. This at the moment is running from USB power, but ultimately will be outside running off battery+solar power.
So why, we wonder, does it not work with the standard 4.7K value, which is even recommended by the DS1820 datasheet.
Any idea? Should I be concerned about it?
Next I will have to see if the RF module works and try running it from battery power
Liam
Re: emonTX + DS18B20: invalid temperature read?
So why, we wonder, does it not work with the standard 4.7K value, which is even recommended by the DS1820 datasheet. Any idea? Should I be concerned about it?
Indeed we do wonder. I assume the supply is correct at 5 V and relatively clean? I'll flag it to Glyn & Trystan.
Re: emonTX + DS18B20: invalid temperature read?
Hi Robert
seems fine, all measured voltages on the board seems correct (but I can't do a very fine measurement at home, just a multimeter)
I am only powering it over USB/FTDI interface from a laptop, but it's only running the arduino + a single temperature probe, nothing else, and I have never noticed problems before powering arduino toys over USB from that laptop ...
Re: emonTX + DS18B20: invalid temperature read?
It usually works fine with a 4.7k resistor, so that sounds strange, did you say that you had two sensors and both dont work?
Re: emonTX + DS18B20: invalid temperature read?
Hi, First post but may have something to add regarding 85C reading.
Having only recently changed from a Combi boiler to a regular boiler and Hot Water tank plus Robin's excellent circuit, I was interested in knowing how much hot water was available. I do fully appreciate there are issues with measuring the temperature of the external pipework. I chose 4 approx equally spaced levels. With pointers from this site I was able to concoct a sketch that read 4 DS18B20 sensors and display the results on a 20x4 LCD HD44780 display.
All was working well until I moved the 1 sensor from one place to another, from then on, when first powered up, it sometimes reads as 127C and sometimes 85C. Two or three resets of the Arduino usually cure it. The other three sensors, on the same circuit, continue to work correctly. My circuit uses a 4.7K pullup resistor. I have so far put this false reading down to my poor soldering onto the first sensor, that showed up once I moved it.
John
Re: emonTX + DS18B20: invalid temperature read?
Hi
so far I've only tried one sensor: a weatherproof assembly one which I built from this site.
I have a couple more though on hand (just bare DS1820s, not the weatherproof assemblies), and I am going to build some temperature-only nodes with bare Arduinos, so I can also test the weatherproof sensor I have on one of those Arduino boards, when I get them built, using 4.7K pullups on those Arduino boards.
I will also double check the soldering on the one I assembled, but I doubt that's the problem.
Re: emonTX + DS18B20: invalid temperature read?
You are using an emonTx, aren't you? Do you have an "iffy" socket or plug? Problem sockets are not unknown, it's also not unknown to have a bad contact between the tag for the tip connection and the rivet in the plug. It would pay to check those carefully before you look for anything more complicated.
Re: emonTX + DS18B20: invalid temperature read?
Yes, emonTx for the moment.
I'll try your suggestions ...
Re: emonTX + DS18B20: invalid temperature read?
I have been experimenting some more with this (this == an emonTx board with a DS1820 weatherproof sensor, kits all purchased in the store here)
For the moment I am concentrating on temperature reading only, current sensing will come later.
My results are a bit surprising (at least to me)
* temperature reading only works if the pullup resistor is 2.2K and not 4.7K. 4.7K just doesn't work ever (invalid value of +127C read)
* it works correctly (RF12B transmission to base station, + correct temp read) if powered by USB/FTDI, or it will work if powered with a battery pack of 4 AA rechargeables (yes, 4) connected as recommended on the site between PWR and GND.
* it will not work with 3 x rechargeable AAs, even freshly charged and delivering about 4.2V.
With 3 x AAs, the RF12B works fine, and the board runs fine, but the temperature reading is invalid (+127C, always).
I have played around with the dallas library, tried very conservative temp conversion timings, etc. No avail. <4 AA cells, no workee at all. 4 AA cells (or USB power) works fine.
I only have one of those weatherproof sensors, which is a pity, because I wonder if it's a bit of a dud. Why else would it not work properly with 4.2V supply?
I will persevere with my 4xAA solution. On the plus side, this should run for ages.
On the minus side, I am going to have to adjust my solar charger circuit a bit.
Re: emonTX + DS18B20: invalid temperature read?
I haven't forgotten you. I'll try to check one on reduced voltage tomorrow.
Re: emonTX + DS18B20: invalid temperature read?
I'm not sure that you'll like this.
I fed my emonTx from my lab power supply. It stopped transmitting below 4.8 V, so inconclusive.
So instead I lifted the red wire (power to the DS18B20) off the plug and fed that alone from my variable supply. It was accurate down to 2.4 V (at room temp) and "worked" but gave wrong readings some way below that.
I wonder whether the impedance of your battery is to blame, and you need a fatter capacitor across the supply to hold it up whilst the DS18B20 is drawing current? From the data sheet: "when the DS18B20 is performing temperature conversions or copying data from the scratchpad memory to EEPROM, the operating current can be as high as 1.5mA." It seems unlikely that 1.5 mA would cause trouble but in the absence of anything else to blame it's worth checking.
And all this with the standard 4k7 on-board pull-up.
Re: emonTX + DS18B20: invalid temperature read?
Hmm interesting
Thanks for experimenting and following up.
I had gone ahead and built my 4x rechargeable AA powered external temp + current emonTx board.
This is running away there now, happily outputting a valid temperature + power reading. I need to make one firmware update to it to fix a stupid bug I have in my power reading code, but apart from that it's working OK. Of course I don't know yet if my rather amateur-hour solar powered trickle charger will keep the rechargeables topped up, especially in winter. In Ireland. But hey, that's what experiments are for.
The next phase of my project is to build some more temperature only nodes and although those won't be using the weatherproof DS18B20s (just plain vanilla DS18B20s) I can try to reproduce the issue and then experiment with the larger capacitor as you suggest.
Highly entertaining though, the whole thing.


As programmers, it really frustrates us when we cannot 100 percent make sure the functions or algorithms we have written can produce the results we expected. Although we have passed many test cases, we are still not confident enough to say these functions can work and output correct values in all cases. It is impossible for us to have a test case system like Leecode wherever and whenever. It is not realistic. So we need to figure out a way to test our algorithm ourselves. Fortunately, there is indeed one.
As a fact, this method is based on comparing an existing solution to verify a new one. It sounds simple, right? What are we waiting for? Let us implement it step by step.
- Identify a function or algorithm you would like to test. For this example, it is a selection sort function we wrote.
public static void selectionSort(int[] arr) {
if (arr == null || arr.length < 2) {
return;
}
for (int i = 0; i < arr.length - 1; i++) {
int minIndex = i;
for (int j = i + 1; j < arr.length; j++) {
minIndex = arr[j] < arr[minIndex] ? j : minIndex;
}
swap(arr, i, minIndex);
}
}
- In order to compare, we need to implement a simple function, which also can sort the array using an existed and verified solutiion. In this case we using a Java API.
public static void comparator(int[] arr) {
Arrays.sort(arr);
}
- Implement a random sample generator.
public static int[] generateRandomArray(int maxSize, int maxValue) {
int[] arr = new int[(int) (Math.random() * maxSize) + 1];
arr[0] = (int) (Math.random() * maxValue) - (int) (Math.random() * maxValue);
for (int i = 1; i < arr.length; i++) {
do {
arr[i] = (int) (Math.random() * maxValue) - (int) (Math.random() * maxValue);
} while (arr[i] == arr[i - 1]);
}
return arr;
}
- Write a function to compare output.
public static boolean isEqual(int[] arr1, int[] arr2) {
if ((arr1 == null && arr2 != null) || (arr1 != null && arr2 == null)) {
return false;
}
if (arr1 == null && arr2 == null) {
return true;
}
if (arr1.length != arr2.length) {
return false;
}
for (int i = 0; i < arr1.length; i++) {
if (arr1[i] != arr2[i]) {
return false;
}
}
return true;
}
- Using various size of sample to test the function we wrote and compare to the existed solution.
public static void main(String[] args) {
int testTime = 500000;
int maxSize = 100;
int maxValue = 100;
boolean succeed = true;
for (int i = 0; i < testTime; i++) {
int[] arr1 = generateRandomArray(maxSize, maxValue);
int[] arr2 = copyArray(arr1);
selectionSort(arr1);
comparator(arr2);
if (!isEqual(arr1, arr2)) {
succeed = false;
printArray(arr1);
printArray(arr2);
break;
}
}
System.out.println(succeed ? "Nice!" : "Fucking fucked!");
int[] arr = generateRandomArray(maxSize, maxValue);
printArray(arr);
selectionSort(arr);
printArray(arr);
}
We can randomly set the test time and sample size to do loads of tests to make sure the function works and outputs correctly. If it can produce expected results after millions of tests. We can be sure of the correctness of this function. But if there is one time they are not equal, in other words, selectionSort
produces outputs that are not equal, comparator
. We have to say the new solution cannot be accepted; we should debug and test more to find the problem. As long as we use this sharp comparator more and more, we will have more confidence to write down more reliable algorithms.


Services
Together with my partners, I advise and consult companies on their digital transformation towards “Smarter Work”, providing a rigorous scientific perspective. We focus employees at all hierarchical levels who use innovative technologies in their daily work. We examine the effects of integrating novel technologies into existing individual practices and group processes. Shaping “Smarter Work” together, we strive for effective collaboration, sustainable performance, and a lasting well-being of employees.
Feel free to contact me for more information.
Surveys
I help companies implement rigorous survey designs across the globe for robust inferences about new ways of working.
Interviews
I make a deep-dive with companies to examine employees’ underlying motivations, perceptions, and beliefs regarding novel technologies.
Digital Traces
I extract, collect, and analyze the application logs from the cloud or on-premise to mine, model, and modernize company processes.
Workshops & Coaching
I teach companies about scientific and analytical methods or novel advances in technology, empowering them for their digital transformation.
IT Implementation
I advise on how to introduce novel information technology, focusing change management of new work, tasks, and job roles.
Approach
Larger engagements follow a three-step model and are jointly conducted with partners such as the ERCIS competence center Smarter Work. We develop scenarios for the “New Normal” and accompany companies in mastering the challenges of the changing world of work. The focus is not only on the introduction of new technologies but also on the associated cultural change and the social and organizational implications.
We identify options for action that are individually adapted for each company. To develop these options, we rely on current scientific findings. We combine a broad repertoire of methods (e.g., surveys, interviews, physiological measurements, digital traces) with established and innovative theories. This is made possible by an interdisciplinary group of partners with a focus on economics, computer science, psychology and sociology as well as practitioners from the IT industry.
Feel free to contact me for more information or check out previous projects.
1. Understand the Problem.
The first step includes coaching, speaking engagements, and workshops for a comprehensive assessment of the current state.
2. Develop a Solution.
The second step includes developing interventions or studies such as survey- or interview-based designs.
3. Implement and Evaluate.
The third step includes scientific measurements and analyses to accompany and evaluate interventions and projects.


--- layout: default title: What do you want to make? description: Collection of articles, tutorials, and resources written for the (STMB). author: jpliew cover_image: banner.jpg lang: en ---
{{ post.subtitle | replace: site.stmb_key , site.stmb}}
{{ post.description | strip_html | strip_newlines | truncate: 400 | replace: site.stmb_key , site.stmb}}


In this document we will present the internal data models to be used and the external data sources managed by the Web application which we will implement.
Data visualization refers to the techniques used to communicate information from data through visual representation. Its main purpose is to distill large data sets into visual graphics to allow an easy understanding of the complex relationships within the data. It is often used in a way interchangeable with terms such as informational graphics, statistical graphics and information visualization.
It is one of the steps in the data science process developed by Joe Blitzstein, who is a framework to address the tasks of data science. After the data is collected, processed and modeled, relationships must be visualized so that a conclusion can be drawn.
For this reason, planning the models used in the Web application is an important process for the user to benefit from the best information when accessing the web page.
The context of use is the real conditions in which a given software product is used or will be used in a normal daily work situation.
COVID-19 data for all site is an evolving software product that provides the latest data for the entire population of the planet about the latest statistics on the global spread of the virus. Users who access this community have access to the latest information about coronavirus, such as:
The sites about coronavirus are the most used sites in the last year. How virus can affect anyone, the site is accessed mainly by a majority of the globe with access at the Internet.
The Web application developed by us has two types of users, those who manage the page and the public one who can access information about coronavirus.
Administrators are the ones who can add new coronavirus cases, tips against the virus and the latest virus information to the application. To add a new coronavirus case, the administrator must add the following information: the day the case was reported, the person's gender, age, location, and other relevant data. To add new virus advice or information, the administrator must add a title, description, and certain tags to make them easier to be found.
Here you can see the model for adding a new case of coronavirus.
A person who visits the web page can view statistics about the evolution of the virus or predictions for the next days of the virus over a certain period of time, over a certain age range, location, gender or different tags. Below you can see a model of an evolution.
A user can also look for some tips for preventing the virus based on a title or certain tags.
External data is data that is not collected by us. This data would be obtained from a source outside of our project. For a start we thought of using the Apify API which gives us information about coronavirus from a selected country.
Our application conforms with the linked data principles because we use RDF and for a specific URI the application will create a query that provides useful information about what the user was looking for. We use URI as names for things, and users will use HTTP URIs to search for some informations.
We gather most of our data from the OurWorldInData source. We have implemented parses which can automatically take in the necessary data inside our Coda19.Reader project.
Our system is comprised of the following graphs:
This graph covers all the possible locations in our system, identified by a continent and a country. The ID of the graph is represented by the country code.
In this graph we store all the cases on a day basis, per location. This graph uses two links, one for Location, and one for Date. We decided to create a sparql prefix for date as well, for easier querying. The id is automatically generated on insertion inside our project.
For our Symptoms, Tips and Spread graphs, we wont go in detail, as they are simple. The only offer a collection of strings which users can read when they open our websites. Inside our API, we pick one at random from each graph.
In order to have a good experience using SparQL across 4 APIs, we've decided the best course of action would be to implement a mechanism which would allow us to send queries and commands in the easiest way.
With this reason in mind we built the SparqlQueryBuilder and the SparqlUpdateBuilder. They allow us to create through code all the queries in commands in a simple and explicit way, hiding all the SparQL behind the scenes. Ofcourse, a level of SparQL knowledge is still needed to understand the concepts of subject, predicate and literal.
A query using the QueryBuilder looks something like this:
The query builder also offers
For our update builder, it looks something like this:
It offers the following
For communication with the SPARQL Endpoint provided by GraphDB, se use the SesameHttpProtocolConnector provided by the DotNetRdf C# NuGet package.
From the beginning of the implementation of this project we planned to develop a series of functionalities that would offer users a perspective on the data related to COVID-19. These functionalities would be:
For the most part, we followed the plan and implemented all the functionalities, only we made small compromises. In some parts we did not respect the initial design and on the home page we gave up some graphics.
First APIs implemented are those needed for showing the data on the Home tab. Here the user can analyze some charts regarding the evolution of the virus in a period of time globally or specific for some countries.
The Prediction API will the take care of orchestrating and feeding data to the internal API. it will also handle client requests and data parsing from and to the internal API.
The Support set of APIs returns data about spread, symptoms and protections to the user.


2019-03-10
A ‘career plan’ is really monumental thing. It’s like defining how you want to spend 40% of your time in the next year. It affects all areas of one’s life: who your friends are, what ideas you’re exposed to and what you think about day-to-day. When viewed like this it seems like a hopelessly huge decision to try and define statically. However I think it’s worth doing.
As part of my studying of the ‘80,000 Hours’ career guide, I was introduced to the idea of the ‘Planning Paradox’. The idea that a plan will nearly always change before it’s implemented, due to a changing environment. The world of work is always changing, so it seems very applicable to this situation. However the guide suggests that, despite this paradox, plans are still worth making. They can be a great exercise in clarifying what exactly it is you’re aiming for. To have a target without the pretense that it will never change.
Why make this public? Honesty is something that I highly value, to be transparent in intentions. So how much more transparent can you get with your career intentions than posting the your plan online publicly? I hope that it will serve as a useful reference for employers, co-workers and friends to know what I’m aiming for. May it spawn conflicts of interest? Maybe. But I value the transparency and freedom of information more than any hindrance it may cause me.
I start by defining my current career options using a predefined structure called the ‘A/B/Z’. Secondly I include a change log to provide commentary as to how the options have changed over time.
The A/B/Z is a set of three plans for how you can aim to develop your career. It was created by Reid Hoffman in his book ‘The Startup of You’, and suggested to me in the 80,000 Hours section on career planning. Three plans are defined:
This is a great structure since it can remind of secondary options in case my current pursued career gets set back somehow. Say a risk I took while executing Plan A failed and I found it hard to get jobs in Plan B, I would always have a fallback option. Reminding myself of this makes taking risks a little easier to stomach and helps get around some common decision making problems (like not switching to a better option). Provided are each of my choices for the plans and my justification.
Software Developer. Through college and university this has been the natural ending point of my education. Designing and developing software, whether it is systems or application software. I currently hold all of the necessary skills for this career and also have received enough feedback to make me feel confident that I’m fairly good. It provides many opportunities for creative problem solving and flow-inducing work. There are many external benefits such as great work environments, generous salaries and I feel like I fit into the culture of software teams well. The major negative right now which may cause me to revise this plan is the lack of positive social impact caused by the building of software. This often makes my work feel meaningless, not something particularly worth living for.
Technical Writer. This is the synthesis of two strong interests of mine: technology and information codification. The latter might be an odd phrase to you, so consider it as ‘appreciating the creative communication of ideas’. This is something which I consider as very powerful when done well. Knowledge sharing is extremely underrated within business and can be carried out poorly, leading to communication issues and potential organisational dysfunction. In this career I would like to be dedicated to dealing with these issues head on. Improving the internal education of a technology company’s own product and ensuring that the most important information is reaching the right people at the right times.
I received feedback from classmates at university that I had a great way of explaining complex topics. Also, I have received complements for small amounts of technical documentation written as a software developer. These provide me with confidence that I would be well suited to this position of communication through writing. A last tenuous suggestion that I may fit in this field well is the large amount of personal time I dedicate to reading2.
Barge Maintenance. I can rely on being able to go and work with my Dad on restoring his barge and making some money helping with tours. This is not ideal since it would likely involve me to move to the barge from wherever I am living. However I feel it is a safe guarantee of room and board, not to mention the numerous benefits of being in the centre of London.
To help keep track of how my career plan has evolved to its current state, I will document the changes here and justifications for these.
This is the initial version of the plan. Stating Software Developer, Technical Writer and Barge maintenance as my A/B/Z. The purpose of this was to write out my current career expectations before going ahead and researching a load of alternatives that could provide more socially impactful positions.
Greater than 6 months, less than 18 months.↩
See my reading list on Goodreads.com.↩


Deploy to Heroku
Deploy Time!!!
Go to heroku.com
Click on your app
Then click on settings
You should see something that looks like this
Click on the button that says Reveal Config Vars
Make sure you have the following environment variables set. Note - they may not be set in this same order. Anything not in this list, you should set.
DATABASE_URL: heroku-sets-this-for=you
MIX_ENV: prod **you need to set this one**
POOL_SIZE: 18
SECRET_KEY_BASE:
Now in the empty row at the bottom of the page
in the first empty field create a new variable called
‘NEW_DATABASE_URL’
Then take a look at the value in your DATABASE_URL variable, by clicking on the pencil icon next to it. It should look something like
postgres://xxxxxxxxxxxxxxx@xxxxxxxxx.amazonaws.com:5432/xxxxxxx
Copy the portion after the @ sign through amazon.com and paste it as the value for the NEW_DATABASE_URL.
So it will be something like abedsd.amazonaws.com.
Then in the next blank field under the var settings type in USERNAME
on the right. Then take another look at your database url.
For example this database url look like so
postgres://abscdefg:123456@12-245-123-12.compute-1.amazonaws.com:5432/d51oep5q7b7bbi
It has the following format
postgres://username:password@12-245-123-12.compute-1.amazonaws.com:5432/databse
Copy the username portion of the url and paste is at the left value in your config variables.
Then Click Add.
It should look like this
Do the same for password. Create a Variable called PASSWORD
. and then copy the password from the correct portion of the database url
postgres://username:password@12-245-123-12compute-1.amazonaws.com:5432/databse
Do the same again for database. Create a Variable called DATABASE
and copy the value from the end of the DATABASE URL. Here is an example -
postgres://username:password@12-245-123-12compute-1.amazonaws.com:5432/database
Your config should look something like this
You should have the following variables now defined
DATABASE_URL:
DATABASE:
MIX_ENV:
PASSWORD:
POOL_SIZE:
SECRET_KEY_BASE:
USER_NAME:
NEW_DATABSE_URL:
Then Open up your config/prod.exs
file. It should look like this.
 Copy each of the lines below into your terminal one at a time. Do not do this all at once.
git add config/prod.exs
git add Procfile.txt
git add lib/test_app_web/channels/user_socket.ex
git commit -m "Use production config from Heroku ENV variables and deploy environment"
And now DEPLOY!!
Type this into your terminal:
git push heroku master
You will see a bunch of stuff and at the end you will see
remote:
remote: Verifying deploy.... done.
To https://git.heroku.com/stormy-stream-65433.git
ae7601a..e5c410b master -> master
Annas-MacBook-Pro-3:test_app anheroku logs -a stormy-stream-65433
If you do not see the ‘Verifying deploy…done’, ask a TA for help.
next type the following into your terminal
npm install brunch
then type
node_modules/brunch/bin/brunch build --production
Finally type
heroku run "mix ecto.migrate"
YAY all done!
Type
heroku open
to see your app.
Next step:
Go on to Why program? Why elixir?.
Or:
Go back to Deploy a Phoenix App.


| repo |
pr |
age |
owner |
title |
last_comment |
by |
age_comment |
num_comments |
no_comment_from_puppet |
last_comment_mentions_puppet |
| device_manager |
71 |
187 |
bFekete |
Adding apply as a parameter to run_puppet_device task |
@bFekete
Making a quick change to point this PR towards the newly defined default main branch as part of our work to remove inappropriate terminology. Apologies if this is inconvenient in any way. |
david22swan |
11 |
2 |
false |
false |
| provision |
108 |
166 |
jmangt |
Provides support for Terraform |
@jmangt
Making a quick change to point this PR towards the newly defined default main branch as part of our work to remove inappropriate terminology. Apologies if this is inconvenient in any way. |
david22swan |
11 |
1 |
false |
false |
| provision |
112 |
137 |
reenberg |
[Docker provisioner] Improved handling of OS distribution/version and support of podman |
None at all.
I hit a bug in podman last time I looked at this. But hopefully I will get
time to come around and finish this soon.
If not just to have the docker relevant changes approved, as I believe I
made some relevant fixes to all the distribution specific logic (I haven't
pushed it yet) including the rubocop fixes.
On Thu, 6 Aug 2020, 13:12 david22swan, wrote:
> @reenberg
> Making a quick change to point this PR towards the newly defined default
> main branch as part of our work to remove inappropriate terminology.
> Apologies if this is inconvenient in any way.
>
> —
> You are receiving this because you were mentioned.
> Reply to this email directly, view it on GitHub
> ,
> or unsubscribe
>
> .
>
|
reenberg |
10 |
5 |
false |
false |
| provision |
94 |
201 |
dylanratcliffe puppet |
Strip slashes from directories |
@dylanratcliffe
Making a quick change to point this PR towards the newly defined default main branch as part of our work to remove inappropriate terminology. Apologies if this is inconvenient in any way. |
david22swan |
11 |
2 |
false |
true |
| puppetlabs-accounts |
327 |
7 |
sanfrancrisko iac puppet |
pdksync - (DO-NOT-MERGE) PDKSync: Puppet 7 test config |
0 comments |
|
0 |
0 |
true |
false |
| puppetlabs-accounts |
320 |
12 |
pmcmaw iac puppet |
(IAC-975) - Removal of inappropriate terminology in module |
No previous comment other than codecov-io |
|
10 |
1 |
true |
false |
| puppetlabs-acl |
204 |
7 |
sanfrancrisko iac puppet |
pdksync - (DO-NOT-MERGE) PDKSync: Puppet 7 test config |
No previous comment other than codecov-io |
|
7 |
1 |
true |
false |
| puppetlabs-apache |
2059 |
7 |
sanfrancrisko iac puppet |
pdksync - (DO-NOT-MERGE) PDKSync: Puppet 7 test config |
0 comments |
|
0 |
0 |
true |
false |
| puppetlabs-apt |
945 |
7 |
sanfrancrisko iac puppet |
pdksync - (DO-NOT-MERGE) PDKSync: Puppet 7 test config |
0 comments |
|
0 |
0 |
true |
false |
| puppetlabs-chocolatey |
222 |
7 |
sanfrancrisko iac puppet |
pdksync - (DO-NOT-MERGE) PDKSync: Puppet 7 test config |
No previous comment other than codecov-io |
|
7 |
1 |
true |
false |
| puppetlabs-concat |
658 |
7 |
sanfrancrisko iac puppet |
pdksync - (DO-NOT-MERGE) PDKSync: Puppet 7 test config |
No previous comment other than codecov-io |
|
7 |
1 |
true |
false |
| puppetlabs-concat |
652 |
47 |
michaeltlombardi iac puppet |
(IAC-814) Release prep for v6.3.0 |
No previous comment other than codecov-io |
|
47 |
1 |
true |
false |
| puppetlabs-docker |
649 |
7 |
sanfrancrisko iac puppet |
pdksync - (DO-NOT-MERGE) PDKSync: Puppet 7 test config |
0 comments |
|
0 |
0 |
true |
false |
| puppetlabs-docker |
635 |
32 |
koubas |
Add prepare_service_only param to ::run resource |
@koubas
Making a quick change to point this PR towards the newly defined default main branch as part of our work to remove inappropriate terminology. Apologies if this is inconvenient in any way. |
david22swan |
13 |
4 |
false |
false |
| puppetlabs-docker |
551 |
275 |
mgrzybowski |
Workaround for hangs of the docker_client in the facts genereation |
Given the dependency on `facter >= 3`, this will not work on Puppet `5` - we'll need to hold off on this merge until we can bump the dependency of the module to `Puppet >= 6` |
sanfrancrisko |
10 |
10 |
false |
false |
| puppetlabs-exec |
133 |
7 |
sanfrancrisko iac puppet |
pdksync - (DO-NOT-MERGE) PDKSync: Puppet 7 test config |
0 comments |
|
0 |
0 |
true |
false |
| puppetlabs-facter_task |
131 |
7 |
sanfrancrisko iac puppet |
pdksync - (DO-NOT-MERGE) PDKSync: Puppet 7 test config |
0 comments |
|
0 |
0 |
true |
false |
| puppetlabs-facter_task |
125 |
53 |
DavidS iac puppet |
(MODULES-10602) workaround for "765: unexpected token at ''" error |
Failures on travis due to the stderr suppression.
Failures on appveyor probably because of the localhost execution and can't be reproduced with a local vagrant box and talking via WinRM. |
DavidS |
53 |
1 |
false |
false |
| puppetlabs-firewall |
926 |
61 |
david22swan iac puppet |
pdksync - (IAC-890) - Implement CentOS 8 travis tests |
On hold, connected to https://tickets.puppetlabs.com/browse/IAC-894 |
david22swan |
2 |
1 |
false |
false |
| puppetlabs-firewall |
891 |
199 |
mattock |
MODULES-10522: Add support for the --condition parameter |
@david22swan no problem. I hope to find some time to finish this in the near future. |
mattock |
9 |
6 |
false |
true |
| puppetlabs-firewall |
940 |
5 |
sanfrancrisko iac puppet |
pdksync - (DO-NOT-MERGE) PDKSync: Puppet 7 test config |
0 comments |
|
0 |
0 |
true |
false |
| puppetlabs-haproxy |
441 |
7 |
sanfrancrisko iac puppet |
pdksync - (DO-NOT-MERGE) PDKSync: Puppet 7 test config |
0 comments |
|
0 |
0 |
true |
false |
| puppetlabs-haproxy |
434 |
65 |
daylicron |
frontend options: order default_backend after specific backends to be able to use them |
Hi @MajorFlamingo - let me know if you need any help with the steps @daianamezdrea outlined in https://github.com/puppetlabs/puppetlabs-haproxy/pull/434#issuecomment-668453915 |
sanfrancrisko |
5 |
5 |
false |
true |
| puppetlabs-haproxy |
442 |
5 |
pkaroluk |
Fix incorrect options order in HAproxy 2.2.x |
Thanks for describing the issue and for the fix @pkaroluk!
The change looks good. One thought: from what you highlighted, we may want enforce [`sort_options_alphabetic`](https://github.com/puppetlabs/puppetlabs-haproxy/blob/097ae8707aea4bb71ea1eb3e7d97e60df96a2e23/templates/fragments/_options.erb#L4) to be `false` in `haproxy::backend` if [`options` and `http_check`](https://github.com/puppetlabs/puppetlabs-haproxy/blob/097ae8707aea4bb71ea1eb3e7d97e60df96a2e23/templates/fragments/_options.erb#L27-L28) are defined? It sounds like there may be issues if we sorted alphabetically?
|
sanfrancrisko |
3 |
1 |
false |
false |
| puppetlabs-helm |
126 |
7 |
sanfrancrisko iac puppet |
pdksync - (DO-NOT-MERGE) PDKSync: Puppet 7 test config |
0 comments |
|
0 |
0 |
true |
false |
| puppetlabs-ibm_installation_manager |
159 |
7 |
sanfrancrisko iac puppet |
pdksync - (DO-NOT-MERGE) PDKSync: Puppet 7 test config |
0 comments |
|
0 |
0 |
true |
false |
| puppetlabs-iis |
289 |
7 |
sanfrancrisko iac puppet |
pdksync - (DO-NOT-MERGE) PDKSync: Puppet 7 test config |
0 comments |
|
0 |
0 |
true |
false |
| puppetlabs-inifile |
410 |
7 |
sanfrancrisko iac puppet |
pdksync - (DO-NOT-MERGE) PDKSync: Puppet 7 test config |
No previous comment other than codecov-io |
|
7 |
1 |
true |
false |
| puppetlabs-java |
438 |
7 |
sanfrancrisko iac puppet |
pdksync - (DO-NOT-MERGE) PDKSync: Puppet 7 test config |
0 comments |
|
0 |
0 |
true |
false |
| puppetlabs-java_ks |
330 |
7 |
sanfrancrisko iac puppet |
pdksync - (DO-NOT-MERGE) PDKSync: Puppet 7 test config |
No previous comment other than codecov-io |
|
7 |
1 |
true |
false |
| puppetlabs-kubernetes |
431 |
7 |
sanfrancrisko iac puppet |
pdksync - (DO-NOT-MERGE) PDKSync: Puppet 7 test config |
0 comments |
|
0 |
0 |
true |
false |
| puppetlabs-kubernetes |
420 |
65 |
scoopex |
Component installation |
Thanks @scoopex - we're hoping to get our own testing wrapped up today and the PR merged later. There's been a few environmental issues frustrating that process, at the moment.
Yeah, I noticed there was a lot of churn around the parameters. I was trying to resolve the conflicts myself, but, given the size of the PR, I thought it would be safer if you were to resolve them. Normally, if we have the cycles, we're happy to do that sort of stuff ourselves and not call on the original contributor.
If any change to the parameters is resulting in these sorts of changes then I'll raise a ticket to see if we can fix up the branch to a state that doesn't mean a load of churn on each PR.
P.S. Enjoy your holiday! 😄 |
sanfrancrisko |
3 |
12 |
false |
false |
| puppetlabs-motd |
325 |
7 |
sanfrancrisko iac puppet |
pdksync - (DO-NOT-MERGE) PDKSync: Puppet 7 test config |
0 comments |
|
0 |
0 |
true |
false |
| puppetlabs-motd |
319 |
25 |
sanfrancrisko iac puppet |
(DO-NOT-MERGE) Draft for .travis.yml w/ Ruby 2.7 |
0 comments |
|
0 |
0 |
true |
false |
| puppetlabs-mysql |
1322 |
3 |
carabasdaniel iac puppet |
[MODULES-10773] Fix for rh-mysql80 |
0 comments |
|
0 |
0 |
true |
false |
| puppetlabs-mysql |
1319 |
7 |
sanfrancrisko iac puppet |
pdksync - (DO-NOT-MERGE) PDKSync: Puppet 7 test config |
0 comments |
|
0 |
0 |
true |
false |
| puppetlabs-ntp |
582 |
7 |
sanfrancrisko iac puppet |
pdksync - (DO-NOT-MERGE) PDKSync: Puppet 7 test config |
0 comments |
|
0 |
0 |
true |
false |
| puppetlabs-ntp |
564 |
154 |
DavidS iac puppet |
(WIP, IAC-615) test avoiding parallelism |
0 comments |
|
0 |
0 |
true |
false |
| puppetlabs-package |
211 |
7 |
sanfrancrisko iac puppet |
pdksync - (DO-NOT-MERGE) PDKSync: Puppet 7 test config |
0 comments |
|
0 |
0 |
true |
false |
| puppetlabs-package |
192 |
126 |
adrianiurca iac puppet |
(IAC-677) improve acceptance test platform coverage |
@adrianiurca
Making a quick change to point this PR towards the newly defined default main branch as part of our work to remove inappropriate terminology. Apologies if this is inconvenient in any way. |
david22swan |
11 |
1 |
false |
true |
| puppetlabs-panos |
119 |
150 |
david22swan iac puppet |
(WIP) (MODULES-10385) - Allow vsys to be set |
No previous comment other than codecov-io |
|
146 |
1 |
true |
false |
| puppetlabs-postgresql |
1185 |
7 |
sanfrancrisko iac puppet |
pdksync - (DO-NOT-MERGE) PDKSync: Puppet 7 test config |
0 comments |
|
0 |
0 |
true |
false |
| puppetlabs-postgresql |
1187 |
7 |
ekohl vox |
Allow removal of config_entries via main class |
I may circulate your query around the IAC Team @ekohl :
> I'd like some verification on whether undef values really couldn't be passed in for some other use case, but I can't imagine any.
But, in principle, it seems OK to me.
It does appear as though the test you added is failing. From what I can see, in [this loop](https://github.com/puppetlabs/puppetlabs-postgresql/pull/1187/files#diff-6fa83dd25c6a65d4afde2eb252c8b945R185-R189), we're receiving:
```
$entry = fsync
$value = 'off'
```
...four times. I'm not seeing any of the additional params being evaluated. |
sanfrancrisko |
3 |
3 |
false |
false |
| puppetlabs-postgresql |
1132 |
216 |
Bouke |
Don't update password encrypted with SCRAM-SHA-256 if not changed |
> Hi @Bouke, yes, I understand your concerns. After a short discussion with the team, we decided that we are going to update our tests and I'll open a ticket for the new changes. Also, when the things are ready, could you please rebase your PR and add your tests? Thank you, cheers !
Raised [IAC-1063](https://tickets.puppetlabs.com/browse/IAC-1063) |
sanfrancrisko |
3 |
9 |
false |
false |
| puppetlabs-powershell |
314 |
7 |
sanfrancrisko iac puppet |
pdksync - (DO-NOT-MERGE) PDKSync: Puppet 7 test config |
0 comments |
|
0 |
0 |
true |
false |
| puppetlabs-puppet_conf |
117 |
7 |
sanfrancrisko iac puppet |
pdksync - (DO-NOT-MERGE) PDKSync: Puppet 7 test config |
0 comments |
|
0 |
0 |
true |
false |
| puppetlabs-reboot |
256 |
7 |
sanfrancrisko iac puppet |
pdksync - (DO-NOT-MERGE) PDKSync: Puppet 7 test config |
0 comments |
|
0 |
0 |
true |
false |
| puppetlabs-registry |
220 |
7 |
sanfrancrisko iac puppet |
pdksync - (DO-NOT-MERGE) PDKSync: Puppet 7 test config |
0 comments |
|
0 |
0 |
true |
false |
| puppetlabs-rook |
91 |
7 |
sanfrancrisko iac puppet |
pdksync - (DO-NOT-MERGE) PDKSync: Puppet 7 test config |
0 comments |
|
0 |
0 |
true |
false |
| puppetlabs-satellite_pe_tools |
135 |
7 |
sanfrancrisko iac puppet |
pdksync - (DO-NOT-MERGE) PDKSync: Puppet 7 test config |
0 comments |
|
0 |
0 |
true |
false |
| puppetlabs-scheduled_task |
157 |
7 |
sanfrancrisko iac puppet |
pdksync - (DO-NOT-MERGE) PDKSync: Puppet 7 test config |
No previous comment other than codecov-io |
|
7 |
1 |
true |
false |
| puppetlabs-scheduled_task |
123 |
178 |
fxbe |
replace puppet[:compatibility] with function call compatibility since… |
@fxbe
Making a quick change to point this PR towards the newly defined default main branch as part of our work to remove inappropriate terminology. Apologies if this is inconvenient in any way. |
david22swan |
10 |
3 |
false |
false |
| puppetlabs-service |
157 |
7 |
sanfrancrisko iac puppet |
pdksync - (DO-NOT-MERGE) PDKSync: Puppet 7 test config |
0 comments |
|
0 |
0 |
true |
false |
| puppetlabs-sqlserver |
358 |
7 |
sanfrancrisko iac puppet |
pdksync - (DO-NOT-MERGE) PDKSync: Puppet 7 test config |
0 comments |
|
0 |
0 |
true |
false |
| puppetlabs-stdlib |
1120 |
7 |
sanfrancrisko iac puppet |
pdksync - (DO-NOT-MERGE) PDKSync: Puppet 7 test config |
0 comments |
|
0 |
0 |
true |
false |
| puppetlabs-stdlib |
1079 |
223 |
binford2k puppet vox |
Puppet 4 functions |
@DavidS you're on vacation so don't answer this til you get back, but can this PR be closed in favor of forward movement in IAC-114? |
michaeltlombardi |
47 |
3 |
false |
true |
| puppetlabs-stdlib |
1087 |
187 |
justinstoller puppet |
(wip) use json, not pson, steal Bens work to make pup4 |
Hi @justinstoller,
Depending on how much the behaviour changes, it might be a barrier to switching over. I'm not familiar enough with the pson/json differences to be able to make a judgement call on that. I would guess that most users of those functions are actually looking for JSON, not pson semantics, so it might be really not a big deal in this case.
With the changes in #1079 we're moving all non-deprecated functions to `stdlib::` prefix. I haven't worked through all the issues there yet, but see the commit message on https://github.com/DavidS/puppetlabs-stdlib/commit/25a2af2e4fe437a769cdcf1f276489d7ebf36659 for a up-to-date snapshot of where the project is at.
cc @binford2k |
DavidS |
178 |
2 |
false |
true |
| puppetlabs-tagmail |
179 |
7 |
sanfrancrisko iac puppet |
pdksync - (DO-NOT-MERGE) PDKSync: Puppet 7 test config |
0 comments |
|
0 |
0 |
true |
false |
| puppetlabs-tomcat |
408 |
7 |
sanfrancrisko iac puppet |
pdksync - (DO-NOT-MERGE) PDKSync: Puppet 7 test config |
0 comments |
|
0 |
0 |
true |
false |
| puppetlabs-translate |
92 |
7 |
sanfrancrisko iac puppet |
pdksync - (DO-NOT-MERGE) PDKSync: Puppet 7 test config |
0 comments |
|
0 |
0 |
true |
false |
| puppetlabs-vcsrepo |
462 |
61 |
david22swan iac puppet |
pdksync - (IAC-890) - Implement CentOS 8 travis tests |
On hold, connected to https://tickets.puppetlabs.com/browse/IAC-907 |
david22swan |
2 |
1 |
false |
false |
| puppetlabs-vcsrepo |
469 |
7 |
sanfrancrisko iac puppet |
pdksync - (DO-NOT-MERGE) PDKSync: Puppet 7 test config |
0 comments |
|
0 |
0 |
true |
false |
| puppetlabs-vsphere |
190 |
7 |
sanfrancrisko iac puppet |
pdksync - (DO-NOT-MERGE) PDKSync: Puppet 7 test config |
0 comments |
|
0 |
0 |
true |
false |
| puppetlabs-vsphere |
191 |
4 |
sanfrancrisko iac puppet |
Switch TravisCI dist to 'trusty' |
0 comments |
|
0 |
0 |
true |
false |
| puppetlabs-websphere_application_server |
208 |
7 |
sanfrancrisko iac puppet |
pdksync - (DO-NOT-MERGE) PDKSync: Puppet 7 test config |
0 comments |
|
0 |
0 |
true |
false |
| puppetlabs-websphere_application_server |
191 |
205 |
vkorehov |
relaxing validation for repository |
@vkorehov
Just making a quick update to re-target your pr towards the newly default main branch. Apologies if this is an inconvenience in any way. |
david22swan |
10 |
5 |
false |
false |
| puppetlabs-wsus_client |
137 |
7 |
sanfrancrisko iac puppet |
pdksync - (DO-NOT-MERGE) PDKSync: Puppet 7 test config |
0 comments |
|
0 |
0 |
true |
false |


Columna1
Compressed and uncompressed copies of jQuery files are available. The uncompressed
file is best used during development or debugging; the compressed file saves bandwidth
and improves performance in production. You can also download a sourcemap file for use
when debugging with a compressed file. The map file is not required for users to run jQuery,
it just improves the developer's debugger experience. As of jQuery 1.11.0/2.1.0 the
//# sourceMappingURL comment is not included in the compressed file.
To locally download these files, right-click the link and select "Save as..." from the menu.
Columna2 Texto Secundario
Compressed and uncompressed copies of jQuery files are available. The uncompressed
file is best used during development or debugging; the compressed file saves bandwidth
and improves performance in production. You can also download a sourcemap file for use
when debugging with a compressed file. The map file is not required for users to run jQuery,
it just improves the developer's debugger experience. As of jQuery 1.11.0/2.1.0 the
//# sourceMappingURL comment is not included in the compressed file.
To locally download these files, right-click the link and select "Save as..." from the menu.
Columna3
Compressed and uncompressed copies of jQuery files are available. The uncompressed
file is best used during development or debugging; the compressed file saves bandwidth
and improves performance in production. You can also download a sourcemap file for use
when debugging with a compressed file. The map file is not required for users to run jQuery,
it just improves the developer's debugger experience. As of jQuery 1.11.0/2.1.0 the
//# sourceMappingURL comment is not included in the compressed file.
To locally download these files, right-click the link and select "Save as..." from the menu.


SOFABoot provides a class isolation framework SOFAArk, giving Spring Boot a class isolation ability to resolve class or package conflicts in the development. For detailed information, please refer to:SOFAArk
To use this feature in SOFABoot projects, we need only two steps: configure the sofa-ark-maven-plugin
plugins for packaging and add sofa-ark-springboot-starter
dependencies of the class isolation framework.
Configure Maven packaging plugins
The Maven
plugins - sofa-ark-maven-plugin
are available on the Central Repository. Through simple configurations, a SpringBoot project can be wrapped into an executable Ark package in the standard format. The coordinate of sofa-ark-maven-plugin
is:
<plugin>
<groupId>com.alipay.sofa</groupId>
<artifactId>sofa-ark-maven-plugin</artifactId>
</plugin>
The configuration template is described as follows:
<build>
<plugins>
<plugin>
<groupId>com.alipay.sofa</groupId>
<artifactId>sofa-ark-maven-plugin</artifactId>
<executions>
<execution>
<id>default-cli</id>
<!--goal executed to generate executable-ark-jar -->
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<!--specify destination where executable-ark-jar will be saved, default saved to ${project.build.directory}-->
<outputDirectory>./target</outputDirectory>
<!--default none-->
<arkClassifier>executable-ark</arkClassifier>
<!-- all class exported by ark plugin would be resolved by ark biz in default, if
configure denyImportClasses, then it would prefer to load them by ark biz itself -->
<denyImportClasses>
<class>com.alipay.sofa.SampleClass1</class>
<class>com.alipay.sofa.SampleClass2</class>
</denyImportClasses>
<!-- Corresponding to denyImportClasses, denyImportPackages is package-level -->
<denyImportPackages>
<package>com.alipay.sofa</package>
<package>org.springframework</package>
</denyImportPackages>
<!-- denyImportResources can prevent resource exported by ark plugin with accurate
name to be resolved -->
<denyImportResources>
<resource>META-INF/spring/test1.xml</resource>
<resource>META-INF/spring/test2.xml</resource>
</denyImportResources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
Description of plugin configuration:
outputDirectory
: Executemvn package
and then specify a directory to store the Ark package. The default directory is ${project. Build. Directory}.arkClassifier
: Executemvn docleoy
, and then specify the coordinates of Maven repositories to locate the Ark package by setting theclassfaulter
value (the default is empty). We recommend that you configure this to give a different name from the ordinary Fat jar;denyImportClasses
: By default, the application will first load the classes that the Art plugin exports. It can be configured to deny such export.denyImportPackages
: Corresponding to the abovedenyImportClasses
, it can be configured to deny import at the package level;denyImportResources
: By default, the application will first load the resources that the Art plugin exports. It can be configured to deny such export.
Add dependencies for the class isolation framework
To use SOFABoot class isolation capabilities when running test cases in the development process, we need to add the following dependencies into the SOFABoot project:
<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>sofa-ark-springboot-starter</artifactId>
</dependency>
In accordance with SpringBoot’s dependency-as-a-service principle, after adding those dependencies, the SOFABoot class isolation container will be started before the application runs.
SOFABoot’s class isolation framework will automatically check whether Ark plugins (or jars that need to be isolated; for detailed information, please refer to SOFAArk) has been loaded into the application, and isolated from loading; for example, to avoid dependency conflicts between the official SOFARPC components provided by SOFABoot and the application, SOFABoot provides an Ark plugin version of SOFARPC. If you want to isolate SOFARPC, you only need to add the following components:
<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>rpc-sofa-boot-starter</artifactId>
<classifier>ark-plugin</classifier>
</dependency>
By doing so, SOFABoot’s class isolation container will automatically isolate SOFARPC and other application dependencies at run time to avoid potential package conflicts. Developers, of course, can also develop their own Ark plugin packages (refer to SOFAArk for details).
Running
Running in IDE
Simply run the main
function. If successful, the following startup log will appear:
2018-04-07 10:51:59,646 INFO main - Begin to start ArkServiceContainer
2018-04-07 10:52:00,550 INFO main - Init Service: com.alipay.sofa.ark.container.service.plugin.PluginDeployServiceImpl
2018-04-07 10:52:00,551 INFO main - Init Service: com.alipay.sofa.ark.container.service.classloader.ClassloaderServiceImpl
2018-04-07 10:52:00,557 INFO main - Finish to start ArkServiceContainer
2018-04-07 10:52:00,571 INFO main - Start to process pipeline stage: com.alipay.sofa.ark.container.pipeline.HandleArchiveStage
2018-04-07 10:52:00,624 INFO main - Finish to process pipeline stage: com.alipay.sofa.ark.container.pipeline.HandleArchiveStage
2018-04-07 10:52:00,624 INFO main - Start to process pipeline stage: com.alipay.sofa.ark.container.pipeline.DeployPluginStage
2018-04-07 10:52:00,626 INFO main - Start to deploy plugin: sample-ark-plugin
starting in sample ark plugin activator
2018-04-07 10:52:00,645 INFO main - Service: com.alipay.sofa.ark.sample.facade.SamplePluginService publish by: PluginServiceProvider{pluginName='sample-ark-plugin', priority=1000} succeed
2018-04-07 10:52:00,647 INFO main - Finish to deploy plugin: sample-ark-plugin
2018-04-07 10:52:00,647 INFO main - Finish to process pipeline stage: com.alipay.sofa.ark.container.pipeline.DeployPluginStage
2018-04-07 10:52:00,647 INFO main - Start to process pipeline stage: com.alipay.sofa.ark.container.pipeline.DeployBizStage
2018-04-07 10:52:00,650 INFO main - Begin to start biz: Startup In IDE
Packaging to run
Select mvn clean install
to package the project into a fat jar with class isolation features. The packaged file format is like this:
.
├── classes
│ └── com
│ └── alipay
│ └── sofa
│ └── boot
│ └── examples
│ └── demo
│ └── isolation
│ └── SofaBootClassIsolationDemoApplication.class
├── generated-sources
│ └── annotations
├── maven-archiver
│ └── pom.properties
├── maven-status
│ └── maven-compiler-plugin
│ ├── compile
│ │ └── default-compile
│ │ ├── createdFiles.lst
│ │ └── inputFiles.lst
│ └── testCompile
│ └── default-testCompile
│ └── inputFiles.lst
├── sofaboot-sample-with-isolation-2.4.0-ark-biz.jar
├── sofaboot-sample-with-isolation-2.4.0-executable-ark.jar
└── sofaboot-sample-with-isolation-2.4.0.jar
Here, sofabot-sample-with-isolation-2.4.0-executable-ark
is a Fat Jar with the class isolation capability, so we can simply start it up with the java -jar
command. Execute java -jar sofaboot-sample-with-isolation-2.4.0-executable-ark
on the server or console, and a successful startup log will appear like this:
2018-04-07 10:57:48.033 INFO 8488 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
2018-04-07 10:57:48.042 INFO 8488 --- [ main] .i.SofaBootClassIsolationDemoApplication : Started SofaBootClassIsolationDemoApplication in 7.432 seconds (JVM running for 8.99)
Ark container started in 8797 ms.
Testing
To run the test cases with SOFABoot’s class isolation ability, you need to add an extra dependency—SOFABoot’s official test-sofa-boot-starter
—and write integration testing and unit testing code using SofaBootRunner
and SofaJUnit4Runner
, which is also a coding style for test cases recommended by SOFABoot.
With the two modules, the system can automatically check whether the application has used the class isolation capability. Developers can achieve this by simply adding or deleting the SOFABoot class isolation dependencies
<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>sofa-ark-springboot-starter</artifactId>
</dependency>
to complete the integration and separation of the SOFABoot class isolation. See the following for details:
SofaBootRunner
Sample code for integration testing:
@RunWith(SofaBootRunner.class)
@SpringBootTest(classes = SofaBootClassIsolationDemoApplication.class)
public class IntegrationTestCase {
@Autowired
private SampleService sampleService;
@Test
public void test() {
Assert.assertTrue("service".equals(sampleService.service()));
}
}
The SofaBootRunner
will check whether the application has introduced dependencies;
<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>sofa-ark-springboot-starter</artifactId>
</dependency>
In accordance with Spring Boot’s dependency-as-a-service principle, if the sofa-Ark-springboot-starter
dependency is detected, then the SofaBootRunner
will enable SOFABoot’s class isolation capability, otherwise, it will be the same as the native SpringRunner
.
SofaJUnit4Runner
Sample code for unit testing:
@RunWith(SofaJUnit4Runner.class)
public class UnitTestCase {
@Test
public void test() {
Assert.assertTrue(true);
}
}
Likewise, SofaJUnit4Runner
will check whether the dependency is introduced. If so, the SofaJUnit4Runner
will enable the capability as well, or will be same as the native JUnit4
.
Customized Runner
When writing test cases, sometimes we need to specify a special Runner. For a unified coding style, you can use SofaBootRunner
and SofaJUnit4Runner
with the annotation @DelegateToRunner
. Here is some sample code:
@RunWith(SofaJUnit4Runner.class)
@DelegateToRunner(BlockJUnit4ClassRunner.class)
public class UnitTestCaseWithoutArk {
@Test
public void test() {
Assert.assertFalse(true);
}
}
It is identical to the following:
@RunWith(BlockJUnit4ClassRunner.class)
public class UnitTestCaseWithoutArk {
@Test
public void test() {
Assert.assertFalse(true);
}
}


Dear Colleague,
This year the VL/HCC community is continuing the tradition of honoring research papers whose appearance in this conference had important influences on VL/HCC research or commerce (see http://conferences.computer.org/VLHCC/). Because having an important influence can only be determined over time, the papers being nominated must be from the past decades. In previous years, starting in 2008, we had two award categories each year, one for paper from 10 years ago (+/- 1 year) and one for papers from 20 years ago (+/- 1 year). Since the 10-years category of 2008 and later would now start to coincide with the 20-years category, the VL/HCC Steering Committee decided to drop the 20-years category and to continue just the 10-years category.
This year, papers are eligible that are fully refereed papers and that appeared at:
Lists of eligible papers are available at PDF and XLS format.
We have added numbers of citations according to Google Scholar and Scopus. Please note that the numbers differ as Google Scholar also counts other papers derived from the VL/HCC papers, e.g., extended Journal versions.
We need your help in nominating papers from these conferences that have had a truly important, long-term impact on VL/HCC research or commerce. As the long-term visionary group, we think you're more likely than anyone to know of well qualified papers. Please nominate some!
This is an important award to our community. It's a way to help us attain recognition for our field and for the most important works that have appeared in our conference. We hope it will also be motivational and inspiring for younger researchers.
To nominate a paper, just send an email containing answers to the following questions to<EMAIL_ADDRESS>The questions/criteria are:
However, if there have been multiple communities where the work has been published, the research needs to be strongly situated in the VL/HCC community by virtue of many papers on the topic having been published at VL/HCC. Of course, the nominated paper must satisfy all the other above criteria as well.
Note: Concrete evidence of impact would be very helpful (e.g., Google Scholar citation counts, Scopus citation counts, etc.).
The deadline for nominations is Wednesday, July 17, 2018
The VL/HCC community has begun a tradition in 2008. Each year, a voting group consisting of all members of the current steering committee, current program committee, and program chairs of the VL/HCC conferences of the years being considered, review the papers from the VL/HCCs held one decade ago and two decades ago, to select the papers from these decades that have had the most influence on VL/HCC research or commerce.
The voting group considers technical papers presented at VL/HCC approximately one decade ago and approximately two decades ago. All community members are invited to nominate papers from these years and, once a shortlist of nominated papers is produced, the voting group members who do not have conflicts with the nominees review and vote for the most influential paper from each decade.
Following this process, the voting group voted to award the Most Influential Paper Awards to the following papers:
Metacognitive Theories Of Visual Programming: What Do We Think We Are Doing? , Alan F. Blackwell
VL 1996
- - - -
Mica: A Web-Search Tool For Finding API Components And Examples , Jeffrey Stylos, Brad A. Myers
VL/HCC 2006
DiaGen: a generator for diagram editors providing direct manipulation and execution of diagrams , Mark Minas, Gerhard Viehstaedt
VL 1995
- - - -
Easing program comprehension by sharing navigation data , R. DeLine, M. Czerwinski, G. Robertson
VL/HCC 2005
- - - -
Benchmarking for graph transformation , G. Varro, A. Schürr, D. Varro
VL/HCC 2005
Empirically Evaluating the Use of Animations to Teach Algorithms , Andrea W. Lawrence, Albert M. Badre, and John T. Stasko
1994 IEEE International Symposium on Visual Languages
- - - -
Gender: An Important Factor in End-User Programming Environments? , Laura Beckwith and Margaret Burnett
2004 IEEE Symposium on Visual Languages and Human Centric Computing
Constraint Multiset Grammars , Kim Marriott
1995 IEEE International Symposium on Visual Languages
- - - -
Formalising Visual Languages , Paolo Bottoni, Maria Francesca Costabile, Stefano Levialdi and Piero Mussio
1995 IEEE International Symposium on Visual Languages
- - - -
Estimating the Numbers of End Users and End User Programmers , Christopher Scaffidi, Mary Shaw, and Brad Myers
2005 IEEE Symposium on Visual Languages and Human Centric Computing
Agentsheets: applying grid-based spatial reasoning to human-computer interaction , Alex Repenning, and Wayne Citrin
1993 IEEE International Symposium on Visual Languages
- - - -
Six Learning Barriers in End-User Programming System , Andrew J. Ko, Brad A. Myers, and Htet Htet Aung
2004 IEEE Symposium on Visual Languages and Human Centric Computing
Understanding and characterizing software visualization systems , John Stasko and Charles Patterson
1992 IEEE Workshop on Visual Languages
- - - -
The immune system as a reactive system: modeling T cell activation with statecharts , Na'aman Kam, Irun R. Cohen, David Harel
2001 IEEE International Conferences on Human-Centric Computing
- - - -
Using HCI techniques to design a more usable programming system , John F. Pane, Brad A. Myers, and Leah B. Miller
2002 IEEE International Conferences on Human-Centric Computing
A Declarative Approach to Event-Handling in Visual Programming Languages , Margaret Burnett and Allen Ambler
1992 IEEE Workshop on Visual Languages
- - - -
First Steps In Programming: A Rationale for Attention Investment Models , Alan Blackwell
2002 IEEE International Symposium on Human-Centric Computing
The specification of visual language syntax , Eric J. Golin, Steven P. Reiss
1989 IEEE Workshop on Visual Languages
- - - -
Extending UML for Modeling of Multimedia Applications , Stefan Sauer, Gregor Engels
1999 IEEE International Symposium on Visual Languages
Prograph: A Step towards Liberating Programming from Textual Conditioning , Philip T. Cox, F. Rick Giles, Tom Pietrzykowski
1989 IEEE Workshop on Visual Languages
- - - -
Formalizing Spider Diagrams , Joseph Gil, John Howse, Stuart Kent
1999 IEEE International Symposium on Visual Languages
HI-VISUAL: A Language Supporting Visual Interaction in Programming , N. Monden, Y. Yoshino, M. Hirakawa, M. Tanaka, and T. Ichikawa
1984 Workshop on Visual Languages
- - - -
Diagram Editing with Hypergraph Parser Support , Mark Minas
1997 IEEE International Symposium on Visual Languages


Graduating in 2019
i am 21. i have job. dat picture fake. im 40 pounds heavier. swipe right
i study cs at uva. my hobby is eating tacos.
Joining the recommendations team for Apple Media Products.
Worked on recommendation systems for Apple Media Products.
Built a Python Flask application for the new postmaster site, a reference for customers to resolve issues with email processing. The site can be used by Rackspace resellers to use their own branding. Built in authentication using JSON web tokens, google analytics, and a ticketing system for complaint tracking. The app will allow users to self-resolve problems and stay informed.
Coded applications for improving business processes using Appian’s enterprise BPM software. Built reports using Appian’s Self Assembling Interface Layer (SAIL) and MySQL to meet the needs of the application. Developed a Java plugin to extend the Appian functionality.