This tutorial provides a quick introduction to using CarbonData. To follow along with this guide, first download a packaged release of CarbonData from the CarbonData website.Alternatively it can be created following Building CarbonData steps.
CarbonData supports Spark versions upto 2.2.1.Please download Spark package from Spark website
Create a sample.csv file using the following commands. The CSV file is required for loading data into CarbonData
cd carbondata
cat > sample.csv << EOF
id,name,city,age
1,david,shenzhen,31
2,eason,shenzhen,27
3,jarry,wuhan,35
EOF
CarbonData can be integrated with Spark,Presto and Hive execution engines. The below documentation guides on Installing and Configuring with these execution engines.
Installing and Configuring CarbonData to run locally with Spark Shell
Installing and Configuring CarbonData on Standalone Spark Cluster
Installing and Configuring CarbonData on Spark on YARN Cluster
Installing and Configuring CarbonData Thrift Server for Query Execution
Installing and Configuring CarbonData on Presto
Installing and Configuring CarbonData on Hive
CarbonData supports read and write with HDFS
CarbonData supports read and write with S3
CarbonData supports read and write with Alluxio
Apache Spark Shell provides a simple way to learn the API, as well as a powerful tool to analyze data interactively. Please visit Apache Spark Documentation for more details on Spark shell.
Start Spark shell by running the following command in the Spark directory:
./bin/spark-shell --jars <carbondata assembly jar path>
NOTE: Path where packaged release of CarbonData was downloaded or assembly jar will be available after building CarbonData and can be copied from ./assembly/target/scala-2.1x/carbondata_xxx.jar
In this shell, SparkSession is readily available as spark
and Spark context is readily available as sc
.
In order to create a CarbonSession we will have to configure it explicitly in the following manner :
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.CarbonSession._
val carbon = SparkSession.builder().config(sc.getConf).getOrCreateCarbonSession("<carbon_store_path>")
NOTE
../carbon.metastore
, user can provide own metastore location to CarbonSession like
SparkSession.builder().config(sc.getConf).getOrCreateCarbonSession("<carbon_store_path>", "<local metastore path>")
.<carbon_store_path>
, like /carbon/data/store
, hdfs://localhost:9000/carbon/data/store
or s3a://carbon/data/store
.carbon.sql(
s"""
| CREATE TABLE IF NOT EXISTS test_table(
| id string,
| name string,
| city string,
| age Int)
| STORED AS carbondata
""".stripMargin)
carbon.sql("LOAD DATA INPATH '/path/to/sample.csv' INTO TABLE test_table")
NOTE: Please provide the real file path of sample.csv
for the above script.
If you get "tablestatus.lock" issue, please refer to FAQ
carbon.sql("SELECT * FROM test_table").show()
carbon.sql(
s"""
| SELECT city, avg(age), sum(age)
| FROM test_table
| GROUP BY city
""".stripMargin).show()
Build the CarbonData project and get the assembly jar from ./assembly/target/scala-2.1x/carbondata_xxx.jar
.
Copy ./assembly/target/scala-2.1x/carbondata_xxx.jar
to $SPARK_HOME/carbonlib
folder.
NOTE: Create the carbonlib folder if it does not exist inside $SPARK_HOME
path.
Add the carbonlib folder path in the Spark classpath. (Edit $SPARK_HOME/conf/spark-env.sh
file and modify the value of SPARK_CLASSPATH
by appending $SPARK_HOME/carbonlib/*
to the existing value)
Copy the ./conf/carbon.properties.template
file from CarbonData repository to $SPARK_HOME/conf/
folder and rename the file to carbon.properties
.
Repeat Step 2 to Step 5 in all the nodes of the cluster.
In Spark node[master], configure the properties mentioned in the following table in $SPARK_HOME/conf/spark-defaults.conf
file.
| Property | Value | Description |
|---|---|---|
| spark.driver.extraJavaOptions | -Dcarbon.properties.filepath = $SPARK_HOME/conf/carbon.properties |
A string of extra JVM options to pass to the driver. For instance, GC settings or other logging. |
| spark.executor.extraJavaOptions | -Dcarbon.properties.filepath = $SPARK_HOME/conf/carbon.properties |
A string of extra JVM options to pass to executors. For instance, GC settings or other logging. NOTE: You can enter multiple values separated by space. |
$SPARK_HOME/conf/carbon.properties
file:| Property | Required | Description | Example | Remark |
|---|---|---|---|---|
| carbon.storelocation | NO | Location where data CarbonData will create the store and write the data in its own format. If not specified then it takes spark.sql.warehouse.dir path. | hdfs://HOSTNAME:PORT/Opt/CarbonStore | Propose to set HDFS directory |
./bin/spark-shell \
--master spark://HOSTNAME:PORT \
--total-executor-cores 2 \
--executor-memory 2G
NOTE: Make sure you have permissions for CarbonData JARs and files through which driver and executor will start.
This section provides the procedure to install CarbonData on "Spark on YARN" cluster.
The following steps are only for Driver Nodes. (Driver nodes are the one which starts the spark context.)
Build the CarbonData project and get the assembly jar from ./assembly/target/scala-2.1x/carbondata_xxx.jar
and copy to $SPARK_HOME/carbonlib
folder.
NOTE: Create the carbonlib folder if it does not exists inside $SPARK_HOME
path.
Copy the ./conf/carbon.properties.template
file from CarbonData repository to $SPARK_HOME/conf/
folder and rename the file to carbon.properties
.
Create tar.gz
file of carbonlib folder and move it inside the carbonlib folder.
cd $SPARK_HOME
tar -zcvf carbondata.tar.gz carbonlib/
mv carbondata.tar.gz carbonlib/
$SPARK_HOME/conf/spark-defaults.conf
file.| Property | Description | Value |
|---|---|---|
| spark.master | Set this value to run the Spark in yarn cluster mode. | Set yarn-client to run the Spark in yarn cluster mode. |
| spark.yarn.dist.files | Comma-separated list of files to be placed in the working directory of each executor. | $SPARK_HOME/conf/carbon.properties |
| spark.yarn.dist.archives | Comma-separated list of archives to be extracted into the working directory of each executor. | $SPARK_HOME/carbonlib/carbondata.tar.gz |
| spark.executor.extraJavaOptions | A string of extra JVM options to pass to executors. For instance NOTE: You can enter multiple values separated by space. | -Dcarbon.properties.filepath = carbon.properties |
| spark.executor.extraClassPath | Extra classpath entries to prepend to the classpath of executors. NOTE: If SPARK_CLASSPATH is defined in spark-env.sh, then comment it and append the values in below parameter spark.driver.extraClassPath | carbondata.tar.gz/carbonlib/* |
| spark.driver.extraClassPath | Extra classpath entries to prepend to the classpath of the driver. NOTE: If SPARK_CLASSPATH is defined in spark-env.sh, then comment it and append the value in below parameter spark.driver.extraClassPath. | $SPARK_HOME/carbonlib/* |
| spark.driver.extraJavaOptions | A string of extra JVM options to pass to the driver. For instance, GC settings or other logging. | -Dcarbon.properties.filepath = $SPARK_HOME/conf/carbon.properties |
$SPARK_HOME/conf/carbon.properties
:| Property | Required | Description | Example | Default Value |
|---|---|---|---|---|
| carbon.storelocation | NO | Location where CarbonData will create the store and write the data in its own format. If not specified then it takes spark.sql.warehouse.dir path. | hdfs://HOSTNAME:PORT/Opt/CarbonStore | Propose to set HDFS directory |
./bin/spark-shell \
--master yarn-client \
--driver-memory 1G \
--executor-memory 2G \
--executor-cores 2
NOTE: Make sure you have permissions for CarbonData JARs and files through which driver and executor will start.
a. cd $SPARK_HOME
b. Run the following command to start the CarbonData thrift server.
./bin/spark-submit \
--class org.apache.carbondata.spark.thriftserver.CarbonThriftServer \
$SPARK_HOME/carbonlib/$CARBON_ASSEMBLY_JAR <carbon_store_path>
| Parameter | Description | Example |
|---|---|---|
| CARBON_ASSEMBLY_JAR | CarbonData assembly jar name present in the $SPARK_HOME/carbonlib/ folder. |
carbondata_2.xx-x.x.x-SNAPSHOT-shade-hadoop2.7.2.jar |
| carbon_store_path | This is a parameter to the CarbonThriftServer class. This a HDFS path where CarbonData files will be kept. Strongly Recommended to put same as carbon.storelocation parameter of carbon.properties. If not specified then it takes spark.sql.warehouse.dir path. | hdfs://<host_name>:port/user/hive/warehouse/carbon.store |
NOTE: From Spark 1.6, by default the Thrift server runs in multi-session mode. Which means each JDBC/ODBC connection owns a copy of their own SQL configuration and temporary function registry. Cached tables are still shared though. If you prefer to run the Thrift server in single-session mode and share all SQL configuration and temporary function registry, please set option spark.sql.hive.thriftServer.singleSession
to true
. You may either add this option to spark-defaults.conf
, or pass it to spark-submit.sh
via --conf
:
./bin/spark-submit \
--conf spark.sql.hive.thriftServer.singleSession=true \
--class org.apache.carbondata.spark.thriftserver.CarbonThriftServer \
$SPARK_HOME/carbonlib/$CARBON_ASSEMBLY_JAR <carbon_store_path>
But in single-session mode, if one user changes the database from one connection, the database of the other connections will be changed too.
Examples
./bin/spark-submit \
--class org.apache.carbondata.spark.thriftserver.CarbonThriftServer \
$SPARK_HOME/carbonlib/carbondata_2.xx-x.x.x-SNAPSHOT-shade-hadoop2.7.2.jar \
hdfs://<host_name>:port/user/hive/warehouse/carbon.store
./bin/spark-submit \
--class org.apache.carbondata.spark.thriftserver.CarbonThriftServer \
--num-executors 3 \
--driver-memory 20G \
--executor-memory 250G \
--executor-cores 32 \
$SPARK_HOME/carbonlib/carbondata_2.xx-x.x.x-SNAPSHOT-shade-hadoop2.7.2.jar \
hdfs://<host_name>:port/user/hive/warehouse/carbon.store
cd $SPARK_HOME
./sbin/start-thriftserver.sh
./bin/beeline -u jdbc:hive2://<thriftserver_host>:port
Example
./bin/beeline -u jdbc:hive2://<IP_ADDRESS>:10000
NOTE: CarbonData tables cannot be created nor loaded from Presto. User need to create CarbonData Table and load data into it either with Spark or SDK or C++ SDK. Once the table is created,it can be queried from Presto.
Download the 0.210 version of Presto using:
wget https://repo1.maven.org/maven2/com/facebook/presto/presto-server/0.210/presto-server-0.210.tar.gz
Extract Presto tar file: tar zxvf presto-server-0.210.tar.gz
.
Download the Presto CLI for the coordinator and name it presto.
wget https://repo1.maven.org/maven2/com/facebook/presto/presto-cli/0.210/presto-cli-0.210-executable.jar
mv presto-cli-0.210-executable.jar presto
chmod +x presto
etc
folder in presto-server-0.210 directory.config.properties
, jvm.config
, log.properties
, and node.properties
files.sudo apt-get install uuid
uuid
node.environment=production
node.id=<generated uuid>
node.data-dir=/home/ubuntu/data
-server
-Xmx16G
-XX:+UseG1GC
-XX:G1HeapRegionSize=32M
-XX:+UseGCOverheadLimit
-XX:+ExplicitGCInvokesConcurrent
-XX:+HeapDumpOnOutOfMemoryError
-XX:OnOutOfMemoryError=kill -9 %p
com.facebook.presto=INFO
The default minimum level is INFO
. There are four levels: DEBUG
, INFO
, WARN
and ERROR
.
coordinator=true
node-scheduler.include-coordinator=false
http-server.http.port=8086
query.max-memory=5GB
query.max-total-memory-per-node=5GB
query.max-memory-per-node=3GB
memory.heap-headroom-per-node=1GB
discovery-server.enabled=true
discovery.uri=http://localhost:8086
task.max-worker-threads=4
optimizer.dictionary-aggregation=true
optimizer.optimize-hash-generation = false
The options node-scheduler.include-coordinator=false
and coordinator=true
indicate that the node is the coordinator and tells the coordinator not to do any of the computation work itself and to use the workers.
Note: It is recommended to set query.max-memory-per-node
to half of the JVM config max memory, though the workload is highly concurrent, lower value for query.max-memory-per-node
is to be used.
Also relation between below two configuration-properties should be like:
If, query.max-memory-per-node=30GB
Then, query.max-memory=<30GB * number of nodes>
.
coordinator=false
http-server.http.port=8086
query.max-memory=5GB
query.max-memory-per-node=2GB
discovery.uri=<coordinator_ip>:8086
Note: jvm.config
and node.properties
files are same for all the nodes (worker + coordinator). All the nodes should have different node.id
.(generated by uuid command).
catalog
in etc directory of presto on all the nodes of the cluster including the coordinator.carbondata.properties
in the catalog
folder and set the required properties on all the nodes.carbondata
in plugin directory of presto.carbondata
jars to plugin/carbondata
directory on all nodes../presto-server-0.210/bin/launcher start
To run it as a background process.
./presto-server-0.210/bin/launcher run
To run it in foreground.
./presto
To connect to carbondata catalog use the following command:
./presto --server <coordinator_ip>:8086 --catalog carbondata --schema <schema_name>
Execute the following command to ensure the workers are connected.
select * from system.runtime.nodes;
Now you can use the Presto CLI on the coordinator to query data sources in the catalog using the Presto workers.
List the schemas(databases) available
show schemas;
Selected the schema where CarbonData table resides
use carbonschema;
List the available tables
show tables;
Query from the available tables
select * from carbon_table;
Note : Create Tables and data loads should be done before executing queries as we can not create carbon table from this interface.


{% if GITHUB_REPO and article.issueid %} Want to leave a comment? Visit this post's issue page on GitHub (you'll need a GitHub account.)


@if($photos)
ID
Call Name
Position
Photo
Photo By
@foreach($photos as $photo)
{{$photo->id}}
{{$photo->callName}}
{{$photo->img_pos}}
{{$photo->pics}}
{{$photo->img_by}}
@endforeach
ID
Call Name
Position
Photo
Photo By
@endif


Hawaii planning department flooded with rental applications
KAILUA-KONA, Hawaii (AP) - Officials say the Hawaii County Planning Department has received a significantly higher number of applications for short-term vacation rentals following updates to the rental ordinance.
West Hawaii Today reported Sunday that the department which typically processes about 800 applications annually is working to process almost 4,000 filings.
The county law that went into effect in April prohibits short-term vacation rentals outside of resort zones after the Sept. 30 deadline.
Short-term vacation rentals are defined as properties with less than five bedrooms where the owner does not live that are rented for less than 30 days.
An official says fewer than 300 applications have been closed, with only 66 denied and a small number withdrawn by applicants.
The department says 1,150 of the applications seek exemptions for nonconforming zoning.
Information from: West Hawaii Today, http://www.westhawaiitoday.com
Sign up for Daily Newsletters
Copyright © 2019 The Washington Times, LLC.
Please read our comment policy before commenting.


Our founders, Ari, Jake, and Owen, were discussing their experiences applying to college and realized they were speaking completely different languages. Since they came from disparate parts of the country with different levels of privilege, each was on his own particular playing field for the transition to college. They founded In Your Shoes to level that playing field and provide affordable insight into how to succeed during the next phase of your life.
As the COVID-19 pandemic touches everyone’s lives, the transition to college is becoming a whole lot harder. On top of uncertainties about making friends and getting involved on campus, high school students are worried about potentially taking classes online and missing the classic college experience. In Your Shoes is here to help during these trying times and into the future.
You will walk out of your advising session feeling better-prepared to make the transition to college than when you walked in.


|
s2n-doxygen-full
|
Go to the source code of this file.
Macros | |
| #define | CONF_NUMBER 1 |
| #define | CONF_UPPER 2 |
| #define | CONF_LOWER 4 |
| #define | CONF_UNDER 256 |
| #define | CONF_PUNCTUATION 512 |
| #define | CONF_WS 16 |
| #define | CONF_ESC 32 |
| #define | CONF_QUOTE 64 |
| #define | CONF_DQUOTE 1024 |
| #define | CONF_COMMENT 128 |
| #define | CONF_FCOMMENT 2048 |
| #define | CONF_EOF 8 |
| #define | CONF_HIGHBIT 4096 |
| #define | CONF_ALPHA (CONF_UPPER|CONF_LOWER) |
| #define | CONF_ALPHA_NUMERIC (CONF_ALPHA|CONF_NUMBER|CONF_UNDER) |
| #define | CONF_ALPHA_NUMERIC_PUNCT |
| #define | KEYTYPES(c) ((unsigned short *)((c)->meth_data)) |
| #define | IS_COMMENT(c, a) (KEYTYPES(c)[(a)&0xff]&CONF_COMMENT) |
| #define | IS_FCOMMENT(c, a) (KEYTYPES(c)[(a)&0xff]&CONF_FCOMMENT) |
| #define | IS_EOF(c, a) (KEYTYPES(c)[(a)&0xff]&CONF_EOF) |
| #define | IS_ESC(c, a) (KEYTYPES(c)[(a)&0xff]&CONF_ESC) |
| #define | IS_NUMBER(c, a) (KEYTYPES(c)[(a)&0xff]&CONF_NUMBER) |
| #define | IS_WS(c, a) (KEYTYPES(c)[(a)&0xff]&CONF_WS) |
| #define | IS_ALPHA_NUMERIC(c, a) (KEYTYPES(c)[(a)&0xff]&CONF_ALPHA_NUMERIC) |
| #define | IS_ALPHA_NUMERIC_PUNCT(c, a) (KEYTYPES(c)[(a)&0xff]&CONF_ALPHA_NUMERIC_PUNCT) |
| #define | IS_QUOTE(c, a) (KEYTYPES(c)[(a)&0xff]&CONF_QUOTE) |
| #define | IS_DQUOTE(c, a) (KEYTYPES(c)[(a)&0xff]&CONF_DQUOTE) |
| #define | IS_HIGHBIT(c, a) (KEYTYPES(c)[(a)&0xff]&CONF_HIGHBIT) |
| #define CONF_NUMBER 1 |
Definition at line 64 of file conf_def.h.
| #define CONF_UPPER 2 |
Definition at line 65 of file conf_def.h.
| #define CONF_LOWER 4 |
Definition at line 66 of file conf_def.h.
| #define CONF_UNDER 256 |
Definition at line 67 of file conf_def.h.
| #define CONF_PUNCTUATION 512 |
Definition at line 68 of file conf_def.h.
| #define CONF_WS 16 |
Definition at line 69 of file conf_def.h.
| #define CONF_ESC 32 |
Definition at line 70 of file conf_def.h.
| #define CONF_QUOTE 64 |
Definition at line 71 of file conf_def.h.
| #define CONF_DQUOTE 1024 |
Definition at line 72 of file conf_def.h.
| #define CONF_COMMENT 128 |
Definition at line 73 of file conf_def.h.
| #define CONF_FCOMMENT 2048 |
Definition at line 74 of file conf_def.h.
| #define CONF_EOF 8 |
Definition at line 75 of file conf_def.h.
| #define CONF_HIGHBIT 4096 |
Definition at line 76 of file conf_def.h.
| #define CONF_ALPHA (CONF_UPPER|CONF_LOWER) |
Definition at line 77 of file conf_def.h.
| #define CONF_ALPHA_NUMERIC (CONF_ALPHA|CONF_NUMBER|CONF_UNDER) |
Definition at line 78 of file conf_def.h.
| #define CONF_ALPHA_NUMERIC_PUNCT |
Definition at line 79 of file conf_def.h.
Definition at line 82 of file conf_def.h.
Definition at line 84 of file conf_def.h.
Definition at line 85 of file conf_def.h.
Definition at line 88 of file conf_def.h.
Definition at line 90 of file conf_def.h.
Definition at line 91 of file conf_def.h.
Definition at line 93 of file conf_def.h.
Definition at line 94 of file conf_def.h.


Find Avril Lavigne videos, streaming songs download, pictures, news and much more Check it out now! Avril Lavigne - What The Hell song · Avril Lavigne Apr 8, 2013. [Vietsub] What The Hell. - Avril Lavigne. facebook. com/pages/L%E1%BB%9Di-d %E1%BB%8Bch-b%C3%A0i-h%C3%A1t- Stats Download
Jan 1, 2011 RCA Avril Lavigne is back with her first. single, 'What the Hell,' off her and fans can download the MP3 for. free on her Facebook fan page
You say that I'm messing with your head (yeah, yeah, yeah, yeah) / All 'cause I was making out with your friend (yeah, yeah, yeah, yeah) / Love hurts whether it's
"What the Hell" is a song by Canadian singer-songwriter Avril Lavigne, taken as the as a free download for 48 hours from. Lavigne's official Facebook page
A documentary about wounded veterans that Roger championed gets a screening at the Rehabilitation Institute of Chicago and screenings in New York and Los Angeles…
Fans of Avril Lavigne. shared a link March 23 · Avril.  And don't forget, the full album called
Mar 13, 2013 Listen to Avril Lavigne vs Katy Perry, A-ha, The Ting Tings, Offspring (Robin. Skouteris) by Mixes and Mashups #2: facebook page + downloads
Preview and download top songs and albums by Avril Lavigne on the iTunes Store. I Have iTunes Free Download.  Become a fan of the iTunes and App Store pages. on Facebook for exclusive offers,


First off I must say I was very pleased to have come across OEM in my searches for energy monitors, it's certainly the most versatile option I've seen, thank you to all who've been involved in the development.
I've recently installed solar panels and an inverter and now want an energy monitor to keep tabs ont he power usage and generation without having to manually go check my utility meter every day and compare it to the logs from the inverter.
This will hopefully be a relatively easy question, being my first question on the forums...
I don't have any OEM kit yet, still deciding what I need and will be posting a longer question later...
I'll probably get an emonBase but see that it looks like it has the simple wire antenna that will stick out a Pi case the unit would go into. I'm sure it will work just fine but I'm curious about replacing the wire antenna with the 433Mhz SMA antenna available in the shop, which states that it includes a PCB connector.
So, my question(s), is it possible and easy enough to replace the wire antenna with the SMA antenna and are there any instructions, preferably with diagrams/pictures, available to do so?
Re: emonBase with 433Mhz SMA Antenna
The emonTx and the emonPi have tracks at the board edge to accommodate the external antenna's "pcb connector" so although it is most probably possible it's not quite as easily done.
The range on the rfm69pi's is pretty good with the wire alone, I have one near the centre of my "network" which the wire doesn't even need to be protruding the Pi's case it is just looped (lightly coiled inside the case, the short wire isn't even quite long enough to do 1 full lap of the inside). I also have another at the far outskirts of the network and I have added a 2nd wire as a ground dipole and that has improved the range to comfortably read the nodes it originally struggled with, again both these wires are loosely looped rather than fully extended, so you may not need the external antenna, if you can comfortably receive your nodes without the antenna, adding it may just pull in more noise.
By all means if you need greater range try adding the external ant, but if you are considering adding the antenna because you dislike the idea or the appearance of the wire, I would say try tucking it in first as no (visible) wire or antenna is even easier on the eye.
Paul
Re: emonBase with 433Mhz SMA Antenna
Hi Paul,
Thank you for the reply, I think I'll go with your suggestion. It was partially about the looks but mainly about the range but I've found other posts mentioning range and I think I should be fine. The only potential extra range interference may be the server cabinet I'll probably be placing the emonBase in but if it proves to be an issue I'll just place it on top of the cabinet and just run slightly longer LAN and USB power cables so no real biggy...
Rhys


Organising economic activity will replace the corporate-centred model putting Crowd1 members in the central position of the cash flow. For you, this new movement in the crowd economy will increase freedom and flexibility. Earning money, meaning, and freedom without the constraint of the 9-to-5 schedule. Ride on a global wave of change with Crowd1.
The development of technology seen in the last five years, and the globalisation it nurtures, has changed everything. The accumulation of wealth: money, purpose, and freedom are changing ownership. Entrepreneurship is today the highest-leveraged career path for the active and ambitious. Crowd1 will give all people access to take part of this new era. The crowd revolution changes economic growth and the future of work. Crowd1 makes this global trend available for everyone to build everything from a small to astronomical cash flow, together.
Crowd marketing is proven to work when you combine network marketing and the power of recommendation. Enjoy success together with millions. The industry is expected to engage more than a hundred million people. The first phase has taken +50 years to grow organically. This next phase will create the same growth, digitally, in only 2-5 years. Everything is perfectly set up and ready to use.


Rust for 2018, Student Edition
At the request of the Rust team, the community was tasked with writing blog posts talking about the future and history of rust as it would pertain to improving the language in 2018. I thought I'd take the opportunity to finally begin writing, since it seems like blogging is all the rage nowadays.
In reading everyone else's posts, I've noticed that it seems that the majority of people are already well established in the world of software. In contrast, I'm a sophomore in college that stumbled upon Rust and fell in love with it, and I wanted to share my thoughts and (brief) experience with that as the focus.
Getting into Rust as a Student
One of the larger hurdles that I faced getting into Rust is that becoming productive in the language involves reading a whole book, and then some. While this is not a bad thing, it means that up front adoption particularly from students who are relatively new (like myself), is a significant time commitment, when oftentimes we're just looking to hack away to build something pretty simple.
One of the powerful draws of languages like Python and Javascript, is that there are so dang many tutorials to do stuff that is probably obvious to anyone with moderate domain experience. Medium is rife with articles like setting up a web server in python, or implementing a blockchain in 200 lines of javascript, that make it incredibly convenient for students to get up and running with something that is approximately what they wanted to do in the first place.
Even if they feel kind of silly, I'd like to encourage anyone building hobby web servers/gui applications/cli's/etc to document their endeavor, and write a small tutorial to get started on working on a project in that domain. Who knows, you may just inspire someone to try Rust :)
My Personal (Rust Related) Goals
I would love to improve accessibility for Rust for students, and in part I'd like to do that by writing some of the aforementioned guides and tutorials to help other newcomers get productive with Rust, quickly.
Second, I'd really like to focus more on writing small, open source crates to improve my capacity with Rust, and fill the gap of many of the conveniences that more mature languages may have. This could be API wrappers, boilerplates, and other things that help build the case for Rust as a language for almost any purpose, from hacking prototypes to full production systems.
Finally, a word of thank you
I've drifted around the communities of a couple programming languages (go, javascript / react, and python), and none of them have even come close to the level of energy, positivity, and inclusivity that exists in the Rust community, particularly as someone getting started. Hell, on my first day working with Rust, I wandered onto the IRC channel and was personally welcomed to Rust by Steve Klabnik (if you're reading this, hi <3). It has been such an inspiration to see so many people from the community who work seemingly tirelessly to move Rust forward in so many directions at once, and it is so incredibly impressive and I aspire to reach that caliber someday. So, thank you to all the rust community for your positivity, warmness, and inspiration for me to continually improve and create :)


Negative source−drain regime: ( a) I DS − V DS on a log-log plot for a pentacene thin film based OFET. Here, linear and saturation regions are clearly distinguishable. ( b) Arrhenius temperature dependence of charge carrier mobility measured at different V G . Inset shows the variation of activation energy with the V G . Different symbols represent different values of the applied V G .


I am Sergio Guzmán Mayorga
Today: Colombian PT SW Developer at Truora Inc
Work Experience
This is my formal work experience, with the companies I've been an employee of. Just follow the timeline.
Differential Calculus Undergraduate Assistant
Universidad de Los Andes June 2016-December 2017
- Give classes to students in order to solve problems and issues related to the subject.
- Workshop and exams grading.
Cupitaller Undegraduate Assistant
Universidad de Los Andes June-December 2017
- Solve questions from students during appoints, related to basic programming concepts in Java.
UnaCloud Undergraduate Research Assistant
Universidad de Los Andes January-June 2018
- Creation of a REST API for exposing UnaCloud functionalities
- Connection library to the created REST API using Java
UnaCloud Undergraduate Research Assistant
Universidad de Los Andes June-December 2018
- Analysis and fix of the concurrence in deployments of multiple virtual machines (in VirtualBox) on one computer, through VBox command line directly.
Software Development Intern
Takeda/Baxalta Colombia S.A.S. January-July 2019
- Development of websites using Vue JS and React JS
- Automation of responsive email campaigns with MJML and IBM Watsom Campaign Automation
- Import of mobile global apps to the context of Colombia, Perú and Ecuador
Part Time Software Developer
Truora July 2019-Today
- Golang Backend Programming
- Data retrieval of background checks of persons, companies and vehicles, from national and international data bases


WITNESS LIST State Affairs Committee March 17, 2003-2:30P HB 15 For: Adams, Cathie (Texas Eagle Forum) Barstow, Jan (Self) Bruce, Grace (Self) Bruce, Lelton (Self) Collett, Laura (Self) Flower, Dr. Linda (Texas Physicians Resource Council (a division of Free Market Foundation)) Hannesschlager, Mike (Texas Christian Coalition) Hotze, Margaret (The Life Advocates) Muralt, David (Citizens for Excellence in Education) Murphy, Michelle (Self) Mustelier, Miriam (Self) Myers, Myra (Self and Silent No More, Operation Outcry) Rasberry, Lynn (Self) Stevens, Wanda (Self) Townsend, Eileen (Self) Trotter, Clayton (Self) White, Molly (Self) Wynn, Cynthia (Self) Against: DeHaan, Melissa (Self and The Lilith Fund) Hansen, Vicki (Self) Hixon, Jennifer (Self and Voices for Choice) Marrero, Elizabeth (Self and National Association of Social Workers) McLaughlin, Kae (Texas Abortion and Reproductive Rights Action League) Ramsey, Lesley (Texas Campaign for Women's Health) Riddering, Hannah (Self and Texas National Organization for Women) Rigby, Jim (Self) Romberg, Peggy (Women's Health and Family Planning Association of Texas) On: Bays, Richard (Texas Department of Health) Garcia, Sarah (American Cancer Society) Registering, but not testifying: For: Approx. 240 persons (witness forms on file in committee office) Against: Approx. 60 persons (witness forms on file in committee office) On: 1 person (witness form on file in committee office) HB 38 For: Alvarez, Jose Julio (Self) Barrow, Sherri (Self and Family) Barstow, Jan (Self and Texas Coalition of Women and Children) Brady, Sharon (Texas Coalition for Traditional Marriage) Bruce, Grace (Self) Bruce, Lelton (Self) Collett, Teresa (Self) Dance, Daren (Self) Davis, Jeff (Self) Dukes, Rev. David (Self and Rescue The Family and Christ in America Ministries) Elieson, Kurt (Self and Family) Galloway, Carolyn (Texas Eagle Forum) Huntsman, R. Kirk (Self) Irving, Alison (Self) Irving, Amy (Self) Irving, Jolene (Self) Irving, LeeAnne (Self) Irving, Sarah (Self) Johnson, Dr. Allen (Self) Lara, Jr., Mario Antonio (Self) Magby, Bonita (Self) Magby, Douglas (Self) Monse, Mark (Self) Muralt, David (Citizens for Excellence in Education) Nuttall, Linda (Self and Family) Panetti, Dan (National Coalition for the Protection of Children and Families) Pereyra, Daniel (Self) Perez, Araminda (Self) Reedy-Danoy, Athena (Self and Family) Scales, Scott (Self) Shackelford, Kelly (Self and Free Market Foundation and the Liberty Legal Institute) Simonsen, Eric (Self) Sorensen, David (Self) Storm, Eric (Self) Sunien, Daniel (Self) Talbot, Linda (Self) Townsend, Eileen (Self) Turpin, Gary (Self) Villarreal, Donna (Self) Against: Apperson, III, Robert Martin (Self) Barclay, Blake (Self) Beckett, Nancy (Self) Bridwell, Laurie (Self and Christ Quest Ministry) Bruce, Stacy (Self) Canales, Timoteo (Self) Carpenter, Jonathan (Self) Cunliff, Colin (Self) Cunningham, Debbie (Self) Ellis, Randall (Lesbian Gay Rights Lobby of Texas) Frederiksen, Kristin (Self and LGRL - Lesbian and Gay Rights Lobby) Groom, Deb (Self) Hall, Rev. Sid (Self and Trinity United Methodist Church) Hartwell, Cody (Self) Higginbotham, Lora (Self) Huddleston, Elizabeth (Self and Texas Civil Rights Project) Johnson, Beck (Self) Jordan, Shane (Self) Kriese, Eric (Self) Kriese, Tracy (Self) Manzo, Orlando (Self) Milliken, Michael (Self and Texas Stonewall Democratic Caucus) Neeley, Michael (Self) Planck, Corri (Family Pride Coalition) Raye, Susan (Self) Rice, Stephen (Self) Riddering, Hannah (Self and Texas National Organization for Women) Rigby, Jim (Self) Riley, Kevin (Self) Rundin, John (Self and ACLU of Texas) Rutman, Kristofer (Self) Sampson, Misty (Self) Shaw, Brian (Self) Simmons, Bruce (Self) Varrichio, Gina (LGRL) Westbrook, Thomas (Self) Wetzel, Stephen (Self) Williams, Amanda (Self) Registering, but not testifying: For: Approx. 790 persons (witness forms on file in committee office) Against: Approx. 220 persons (witness forms on file in committee office) HB 246 For: Barstow, Jan (Self) Collett, Teresa (Self) Gerstenschlager, MerryLynn (Self and Texas Eagle Forum) Nuckols, Dr. Beverly (Self and Texas Physicians Resource Council) Against: Hull, Mike (Self and TX Alliance for Patient Access, TX Medical Association, TX Hospital Assn, TX OB GYN's, TX ER Docs) McLaughlin, Kae (Texas Abortion and Reproductive Rights Action League) Riddering, Hannah (Self and Texas National Organization for Women) Romberg, Peggy (Women's Health and Family Planning Association of Texas) Registering, but not testifying: For: Approx. 290 persons (witness forms on file in committee office) Against: Approx. 70 persons (witness forms on file in committee office) HB 1075 On: Reynolds, Carl (Texas Department of Criminal Justice) Registering, but not testifying: On: Mauzy, Renee (Department of Information Resources)


I am currently a BTech student pursuing Computer science and Engineering in NIT Warangal.
I am a Full Stack Web Developer.
I also Learn C++
All my social media handles are also provided in the footer. You can also contact me there.
© 2021 Sriman Pravardhan.


| Total net profit | -107.22 | Gross profit | 1.15 | Gross loss | -108.37 |
| Profit factor | 0.01 | Expected payoff | -1.58 | ||
| Absolute drawdown | -107.22 | Maximal drawdown (%) | 106.64 (-18386.21%) | ||
| Total trades | 68 | Profit trades (% of total) | 2 (2.94%) | Loss trades (% of total) | 66 (97.06%) |
| Long positions (won %) | 63 (3.17%) | Short positions (won %) | 5 (0.0%) | ||
| Largest | profit trade | 0.9 | loss trade | -3.24 | |
| Average | profit trade | 0.57 | loss trade | -1.64 | |
| Minimum | profit trade | 0.25 | loss trade | -0.25 | |
| Maximum | take profit in pips | 908.6 | stop loss in pips | -704.7 | |
| Average | take profit in pips | -37.1 | stop loss in pips | -364.2 | |
| Minimum | take profit in pips | -266.7 | stop loss in pips | -278.1 | |
| Maximum | Reward-Risk | 2.7 | Duration in minutes | 205 | |
| Average | Reward-Risk | 0.2 | Duration in minutes | 10.0 | |
| Minimum | Reward-Risk | 0.0 | Duration in minutes | 0 | |
| Maximum | consecutive wins (profit in money) | 1.0 (0.9) | consecutive losses (loss in money) | 41.0 (-64.0) | |
| Average | consecutive wins | 1.0 | consecutive losses | 21.0 |
| Total net profit | -97.9 | Gross profit | 1.15 | Gross loss | -99.05 |
| Profit factor | 0.01 | Expected payoff | -1.55 | ||
| Absolute drawdown | -97.9 | Maximal drawdown (%) | 97.32 (-16779.31%) | ||
| Total trades | 63 | Profit trades (% of total) | 2 (3.17%) | Loss trades (% of total) | 61 (96.83%) |
| Largest | profit trade | 0.9 | loss trade | -3.24 | |
| Average | profit trade | 0.57 | loss trade | -1.62 | |
| Minimum | profit trade | 0.25 | loss trade | -0.25 | |
| Maximum | take profit in pips | 908.6 | stop loss in pips | -704.7 | |
| Average | take profit in pips | -63.3 | stop loss in pips | -364.2 | |
| Minimum | take profit in pips | -266.7 | stop loss in pips | -278.1 | |
| Maximum | Reward-Risk | 2.7 | Duration in minutes | 205.0 | |
| Average | Reward-Risk | 0.2 | Duration in minutes | 9.5 | |
| Minimum | Reward-Risk | 0.0 | Duration in minutes | 0.0 | |
| Maximum | consecutive wins (profit in money) | 1.0 (0.9) | consecutive losses (loss in money) | 37.0 (-55.76) | |
| Average | consecutive wins | 1.0 | consecutive losses | 19.0 |
| Total net profit | -9.32 | Gross profit | 0.0 | Gross loss | -9.32 |
| Profit factor | 0.0 | Expected payoff | -1.86 | ||
| Absolute drawdown | -9.32 | Maximal drawdown (%) | 7.83 (-525.5%) | ||
| Total trades | 5 | Profit trades (% of total) | 0 (0.0%) | Loss trades (% of total) | 5 (100.0%) |
| Largest | profit trade | 0.0 | loss trade | -2.69 | |
| Average | profit trade | 0.0 | loss trade | -1.86 | |
| Minimum | profit trade | 0.0 | loss trade | -1.08 | |
| Maximum | take profit in pips | 769.6 | stop loss in pips | -507.5 | |
| Average | take profit in pips | 293.6 | stop loss in pips | -363.9 | |
| Minimum | take profit in pips | -209.0 | stop loss in pips | -288.4 | |
| Maximum | Reward-Risk | 1.6 | Duration in minutes | 84.0 | |
| Average | Reward-Risk | 0.8 | Duration in minutes | 16.8 | |
| Minimum | Reward-Risk | Duration in minutes | 0.0 | ||
| Maximum | consecutive wins (profit in money) | 0.0 (0.0) | consecutive losses (loss in money) | 5.0 (-9.32) | |
| Average | consecutive wins | 0.0 | consecutive losses | 5.0 |


Are you sure you want to sent this Requirement to Review with the Admi?
Are you sure you want to assign this Requirement to the Head Department?
Are you sure you want to assign this Requirement to the Reviewer?


Pizzas
Lahma Bi Ajeen
Margherita
Calzone
Stromboli
-
Burgers
Pepperoni Burger
Verde Burger
Classic Burger
Hickory Burger
-
Hot Dogs
French Poodle
Triple Dog
Fruity Dog
-
Desserts
(Black Forest)
Apple Dessert
-
Cold Beverages
Strawberry Shake
Chocolate Shake
-
Sandwiches
(Mint With Cheese)
(Fresh Tomatoes)
-
Ice Creams
Butter Scotch
Sweet Dreams
Honey Moon
First Night
-


Show Unread in Gmail: Here's a cool Gmail tip that I recently found handy. If you would like it to show only the unread emails in a particular folder/label, all you need to do is search for "label:yourlabel label:unread".
Pittsburgh Trivia: If you're in town, check out some of the cool
Pittsburgh Steps---the ones on the southside slopes likely come with a great view of the hills, the river(s), and of course, downtown Pittsburgh for free. Walking the long ones up will always be more rewarding :) Plus there are the usual suspects of taking the Incline up Mt. Washington, Fallingwater, Strip District on a Saturday, North Side Museums, etc.
Thought for Food: (Restaurant choices in Bangalore, with bias towards the veggies).
Brahmin's Coffee Bar (for the idli+vada), Veena Stores (softest idlis, good vada, sweet pongal), Ganesh Darshan (dosa+coffee).
Coffee! Last but not least, do check out my wife Divya's Indian coffee venture
Madrush Coffee if you want fresh Indian coffees shipped across the USA; if you live in India, she's got you covered as well with
Beachville Coffee Roasters. And if you host at Airbnb, check out
Pricelabs, an exciting startup of my undergraduate friend Anurag!
And some credits: I used
Bootstrap to design this webpage. For my publications, I used the
bibtex-js tool which takes in a bibtex and outputs a html page using javascript -- for the specific implementation and template, I used
Manuela Veloso's style, many thanks for that!


jwolpert
2016-12-20 12:39
has joined #jwnotes
jwolpert
2016-12-20 12:39
@jwolpert set the channel purpose: Private Note Taking — Meetings, etc.
jwolpert
2016-12-20 12:41
@jwolpert archived the channel (w/ 1 member)


Maslow Reimagined
We are living through the Time of the Great Distancing. While the COVID-19 pandemic is causing untold suffering around the world, our need to stay socially distant has pulld rank on our need to stay socially connected. People need support like never before, yet have limited access to the resources available in "normal" times.
Maslow Reimagined
We are living through the Time of the Great Distancing. While the COVID-19 pandemic is causing untold suffering around the world, our need to stay socially distant has pulld rank on our need to stay socially connected. People need support like never before, yet have limited access to the resources available in "normal" times.
Maslow Reimagined
We are living through the Time of the Great Distancing. While the COVID-19 pandemic is causing untold suffering around the world, our need to stay socially distant has pulld rank on our need to stay socially connected. People need support like never before, yet have limited access to the resources available in "normal" times.
read more
read more
read more


Upload a file of any type, with multiple file selection, drag&drop support, progress bars, validation.
Supports chunked and resumable file uploads (not now).
Add files...
Demo Notes (Copy & paste)
The maximum file size for uploads in this demo is 999 KB (default file size is unlimited).
Only image files (JPG, GIF, PNG) are allowed in this demo (by default there is no file type restriction).
Uploaded files will be deleted automatically after 5 minutes or less (demo files are stored in memory).
You can drag & drop files from your desktop on this webpage (see Browser support).


Home
About the film
Play trailer
Contact
MARATHON
A film by Sebastian Vidal Bustamante
Do you want to help?


On pattern matching in Ltac
Consider the following development:
Require Import Arith.
Require Import Compare_dec.
Definition max (n p:nat) : nat :=
if le_lt_dec n p then p else n.
Lemma le_max_eq : forall n p, n <= p -> p = max n p.
intros n p; unfold max; case (le_lt_dec n p);simpl.
trivial.
intros; apply le_antisym;auto with arith.
Qed.
Ltac max_le_rw H :=
match goal with H : ?a <= ?b |- ?G => elim (le_max_eq a b H) end.
Lemma L1: forall n p, n <= p -> max n p + max n p = 2 * p.
intros n p H; max_le_rw H.
simpl;auto.
Qed.
(* seems OK,
but ... *)
Lemma L2 : forall n p, n <= p -> 2 <= 3 -> max n p + max n p = 2 * p.
intros n p H H0.
max_le_rw H.
(*
n : nat
p : nat
H : n <= p
H0 : 2 <= 3
============================
max n p + max n p = 2 * p
*)
What does this example show about pattern matching in Ltac?
Define a tactic similar to max_le_rw (using elim), which works fine on L2.
Hint: You may use "type of" in your tactic.
Solution
Look at this file
Going home
Pierre Castéran


Mozambican mother missing since October
There is still no trace of the Mozambican mother who was apparently kidnapped in broad daylight in the city.
by Landé WillemseMpumalanga police spokesman, Brig Leonard Hlathi, confirmed that 53-year-old Guitabali Samgi was last seen on October 15.
“It is alleged that on October 15 at about 14:30 the victim left her residential place, Elawini Lifestyle Estate in Mbombela, and went to Crossing Shopping Centre. She was supposed to fetch her child from school later, but did not. Her husband became worried after he failed to get hold of her.”
A case of a missing person was registered at Nelspruit Police Station.
ALSO READ: Mbombela mother abducted in broad daylight
“Her car was found at Cairn, on the outskirts of Mbombela, with the driver’s window smashed. Her belongings were found inside the car,” Hlathi said.
He added that the case has now been handed over to the Hawks.
A family member told Lowvelder that they were frantic with worry and “just praying every day”.


Before you play around with the model we should cover some necessary knowledge in order to fully understand what’s going on.
- Data Size: The number of unique images that the model will be trained on.
- Activation Function: You can pick between the previously covered Sigmoid and ReLu functions.
- Regularisation (Drop Out): As mentioned before, this is a method for reducing overfitting, the probability that each neuron has to be turned off can be altered.
- Epoch: A measure of the number of times a set of training images is used to update the weights.
- Batch Size: The number of images that the model will use for training during each Epoch.
Finally, once all the parameters have been set, and the model has been trained, we need to be able to interpret the results.
There are four metrics presented in the results:
- Loss (cost): As we mentioned before, it is the summation of the errors in the output with respect to the correctly labeled training example. N.B this is something we want to reduce.
- Val_loss: It is the summation of the errors in the output with respect to the correctly labeled validation training example. N.B this is something we want to reduce.
- Acc: This is simply the percentage of results that produced the correct output for the training data. N.B this is something we want to increase, but not have at 100% as this is an indication of overfitting.
- Val_acc: This is the same as Acc except for the validation training data.
There are two main things to look out for:
- Overfitting: Where the model’s accuracy is too high, indicating that the model won’t generalise well.
- Underfitting: Where the model’s loss is high and it’s accuracy is low, indicating that the model has simply not learned any features of the data.


Olympic Sports and Medals
Olympic Sports and Medals, 1896-2014.
Number of medals in Russia from 1896-2014.
Number of medals in Russia from 1896-2014.
From the pie chart below we can see that sportsmens from Russia get more golden medals, than silver and bronze medals from 1896 to 2014. They earn 94 golden medals,90silver and 79 bronze medals.
Comparison of male athletes and female athletes./h1>
Comparison of male athletes and female athletes.
On the chart below we clearly see that man sportsmens had more medals , than female sportsmens. Because sportsmens had 157 medals and female sportsmens had 106 medals. But the numbers of medals grew from 1995 to 2002. After the quantity of awards was stable for a few years from 2002 to 2007.
Comparison of different kind of sports
Comparison of different kind of sports
Here we can see that the Skating is the most popular kind of sport with great amount of medals. Skating sportsmens earn 79 medals,skiing specialist got 60 medals, Biathlon and Ice Hockey had 57 and 46 awards,Bobsleigh won 15 medals and Luge sportsmens had 6 medals.


Google says it is extending the ability for most of its 1,500 Canadian employees to work from home until at least next July.A company spokesperson says it announced the extension of its global voluntary work-from-home option to give employees the ability to plan ahead.
Google says it is extending the ability for most of its 1,500 Canadian employees to work from home until at least next July. A company spokesperson says it announced the extension of its global voluntary work-from-home option to give employees the ability to plan ahead. The option is available to roles that don't require employees to be in the office. The tech company has about 1,500 employees, including engineers, sales leaders and artificial intelligence researchers at offices in Waterloo, Ont., Toronto and Montreal and is building new offices in these cities to accommodate up to 5,000 employees by 2022. An Angus Reid Institute study has suggested that about one-third of Canadians working remotely expect to resume working from the office while about 20 per cent say they will remain primarily at home. Facebook, Shopify Inc. and Open Text Corp. have said that its employees will soon have the option to permanently work remotely.
The top executives at four of the world’s largest and most powerful technology companies are testifying Wednesday before Congress in the culmination of a year-long antitrust inquiry.
The top executives at four of the world’s largest and most powerful technology companies are testifying Wednesday before Congress in the culmination of a year-long antitrust inquiry. The House Judiciary Committee’s antitrust arm will grill Amazon’s Jeff Bezos, Apple’s Tim Cook, Facebook’s Mark Zuckerberg, and Google’s Sundar Pichai on the power their companies wield in the tech sector. “Our founders would not bow before a king nor should we bow before the emperors of a digital economy,” said Rep. David Cicilline, chair of the antitrust subcommittee, in opening remarks. The executives are testifying remotely due to the ongoing coronavirus threat, creating a different dynamic than the blockbuster hearings of the past, like Zuckerberg’s testimony on election interference in 2018. Cicilline reminded the CEOs that they are not allowed to take input from their teams during testimony, but it isn’t clear how or if the committee is enforcing that rule. Early questioning focused on Facebook’s acquisition of Instagram, Apple’s treatment of third-party app developers, and Google’s dominance in search. More than an hour into the hearing, lawmakers still hadn’t posed any questions to Bezos, even though it is the Amazon chief’s first time testifying before Congress. After nearly two hours, the first question for Bezos came from Rep. Pramila Jayapal, a Democrat from Washington who represents Amazon’s hometown, Seattle. “The issue that we’re concerned with here his very simple,” she said. “You have access to data that far exceeds the sellers on your platform with whom you compete … you have access to the entirety of sellers’ pricing and inventory — information past, present, and future — and you dictate the participation of third-party sellers on your platform, so you can set the rules of the game for your competitors but not follow those rules yourself. Do you think that’s fair to the mom and pop businesses who can sell on your platform?” Underlying Jayapal’s line of questioning is a Wall Street Journal investigation from April that found Amazon uses detailed data on third-party sellers in its marketplace to inform the development of in-house products. Bezos said Amazon has a policy prohibiting such use of seller data but, “I can’t guarantee you that that policy has never been violated.” Jayapal was following up on testimony that Amazon attorney Nate Sutton gave one year ago before the same committee claiming the company does not use individual seller data to inform its private-label product strategy. Jayapal also grilled Zuckerberg on its acquisition strategy, accusing Facebook of threatening to copy Instagram and Snapchat while in discussions about buying them. “You’ve used Facebook’s power to threaten smaller competitors and ensure that you always get your way,” she said. “These tactics increase your dominance … Facebook’s model makes it impossible for new companies to flourish successfully.” Zuckerberg said he did not remember threatening competitors and defended the practice of developing features that consumers were demanding at the time. Rep. Mary Gay Scanlon raised a controversial price war between Amazon and Diapers.com that ultimately ended in Amazon acquiring the competitor’s parent company and then shutting it down. Scanlon claimed Amazon lowered prices on diapers to drive the competitor out of business and then raised them when the competitive threat was eliminated. “I don’t remember that at all,” Bezos said. “What I remember is that we matched competitor prices.”


- select() - Method in class board.Cell
-
set the border of this Cell to red as it is selected
- setCheckmate() - Method in class piece.King
-
set King's property to checked
- setColor(int) - Method in class piece.Piece
-
set this piece's color
- setId(String) - Method in class piece.Piece
-
set this piece's identification
- setMove() - Method in class piece.Piece
-
set this piece to moved
- setMoved() - Method in class piece.King
-
set King's property to moved
- setPath(String) - Method in class piece.Piece
-
set this piece's PNG path
- setPiece(Piece) - Method in class board.Cell
-
set the correspong piece to p, and using p's path to integrate the picture.
- setPos() - Method in class board.Cell
-
set the border of this Cell to blue as it is a possible move
- setPromo() - Method in class piece.Pawn
-
make Pawn be able to promote
- setX(int) - Method in class piece.Piece
-
set this piece's x-coordinate.
- setY(int) - Method in class piece.Piece
-
set this piece's y-coordinate.
- start() - Method in class board.countDownTimer
-
This function starts the timer.
- stop() - Method in class board.countDownTimer
-
This function stops the timer.


Differential Equation Calculator
Graph any Ordinary Differential Equation
About
{% if error %}
{{error}}
{% endif %}
Differential equation in terms of
y
and
t
, with only the highest derivative of y on the left side
Enter initial values in the order of decreasing derivative order (...
y''(0)
,
y'(0)
,
y(0)
)
Integration Precision
Graph precision and t-range
Graph
{% if dataset %}
{% if original %}
{{original}}
{{t_min}} < t < {{t_max}}
{% endif %}
{% endif %}


{% extends "base.html" %} {% block title %}
Session Time: {{ wearabledata.time }} | Note: {{ wearabledata.note }}
There are no wearable annotations in the database.


At Hair Flair we are passionate about meeting the unique needs of our clients and creating a style that highlights their natural beauty. We create a perfect style by lisening to our clients desires, whether they are a business professional or someone who wants to sport the trendiest styles.
we pride ourselves in keeping up with our education and therefore, we always bring a fresh perspective to our work. Our atmosphere is confortable and professional...a taste of Vienna and Austria.


Klopp to discuss Olympics with Salah
by Sports DeskLiverpool manager Jurgen Klopp revealed he would speak to star Mohamed Salah about his plans to potentially play at next year's Olympics.
Egypt's Under-23s booked their place in Japan, winning the Africa U-23 Cup of Nations at home on Friday.
Quarter-finalists at London 2012, Egypt may want Salah as part of their squad, and Klopp said he would need to talk to his forward with the tournament to be held from July 22 to August 8 next year.
"I know this from an hour ago. I have no idea [what will happen]," Klopp said, via the Liverpool Echo.
"There are some problems I know in the future, this I know from an hour ago that Egypt have qualified for the Olympics.
"I have to speak to Mo. I don't know if I do it today, or whenever. Who said they want him? Do they have a manager who said it?"
Salah has scored six goals and provided three assists in 11 Premier League games this season despite struggling with an ankle injury since a win over Leicester City in early October.
Klopp is unsure if the 27-year-old will be available when the league leaders visit Crystal Palace on Saturday.
"It is from the Leicester game. It was getting better and better and then… it is good but it was after the [City] game again, another tackle, it flared up again," he said.
"It is not serious but in the short period we have to let it settle it is always tight for the game. We will see.
"He trained completely yesterday, a full session, but we have to see how he reacted."


"In every walk with nature, one receives far more than he seeks." - John Muir
Hiking is a wonderful way to connect with nature, destress, maintain a healthy lifestyle, and spend time with family and friends. This activity is possible in almost every location you visit. With just a little searching, you can embark on your next hike of choice!


The DataWinners Quick Start Solution is designed for first-time users and sophisticated data collection projects that require additional support.
DataWinners experts provide on-site support to get everything ready:
- Coach staff members to create digital Questionnaires
- Mentor System Administrators on data collection management
- Train headquarters personnel to train field staff on data submission using mobile technology
- Show managers how to use the powerful data analysis tools
By the end of the Quick Start Solution, your staff will confidently collect data using mobile technology!
Pricing
Our Quick Start Solution typically takes 2-3 weeks and costs less than $25,000. For a general overview, see this sample budget.
For more information, please contact us at<EMAIL_ADDRESS>or use our contact form.
Customized Reports & Visualizations
Check out how we can meet your specific data collection needs.
See Customized Reports & Visualizations


All transmissions must be secured.
Sometimes, the answer is not where you think it is, but yet not so far away...


{% extends "layout.html" %} {% block content %}
In this page, you can change the color scheme, font color to emphasis, background color of the project.


On-loan Arsenal star slams manager Unai Emery for poor tactics that stalled his progress at the club
by HarigovindIn a recent interview, Arsenal’s Henrikh Mkhitaryan slammed manager Unai Emery, while also claiming that his tactics at the Emirates were one of the main reasons why his progress stalled at the club.
Mkhitaryan, who is currently on loan at Serie A side AS Roma, also said that he had to leave Arsenal in search of regular first-team football after he was not guaranteed of a starting position, at the start of the ongoing 2019-20 season.
“He paid more attention to tactics, so my role changed,” he was quoted as saying, by FourFourTwo.
The 30-year-old further added: “I was starting as a winger, but had to build play with the defensive midfielder. It’s why I couldn’t contribute as many goals or assists.”
“I like to play more freely and move wherever there’s space, but you have to do the job that the manager asks.”
“I couldn’t accept that I had to sit on the bench for some matches. I know my qualities and what I can do.”
“I’m 30-years-old now and I like to play football, not just sit on the bench and waste my time.”
“Emery and [head of football] Raul Sanllehi assured me I was important for Arsenal, but I signed for Roma because they believed in me more,” Mkhitaryan concluded.
The Armenia international has made seven appearances for Roma so far, and has recorded one goal and assist each till date.


https://images.duckduckgo.com/iu/?u=http%3A%2F%2Fimages.budgettravel.com%2FPH2008100202555.jpg&f=1
WOOT! I’m thrilled! It’s been 9 days so far that we’ve had that space open to everyone and we’ve reached 1,000 unique people that have come through! That’s bigger than some of the towns I’ve lived in. So, I’m officially dubbing this place “Minnow Town” and as it’s original founder I don’t think folks will mind if say I’m Mayor!
It’s a massive team effort between the witnesses that run it @ausbitbank, @teamsteem, @someguy123, @thecryptodrive, @theprophet0, @canadian-coconut (honorary title), the witnesses that visit @neoxian and @acidyo, the delegaters that have helped grow a @minnowsupport community account (shout out to @benjojo (90k SP) and @neoxian (20K SP), and about 1,000 minnows who are constantly in there talking, chatting, posting, upvoting, resteeming, following and making friends.
The chat is now ongoing 24/7. There’s almost always a Witness in there, Steemit’s biggest author hang’s out in there. We have minnows, dolphins, and whales (Oh my!). Whale curators search through some of those posts looking for gems. I toss out bounties and resteems to exceptionally written articles. The result has been staggering. Folks that could barely catch a dollar before are now able to earn hundreds of dollars on a post, and it’s as community of people supporting each other that has made that happen!
This has been an exceptionally rewarding experience as I think of this as my Witness Dissertation Project. As a Witness I promise to promote Peace, Abundance, and Liberty, growth hack Steemit, and help minnows grow. To see this social channel break 1,000 people so quickly has been amazing!
We continue to fund drive for the main account. So far in addition to the delegation we’ve been able to accumulate over 1,000 SP that now sits in that account paying out post rewards rewards to people that are in there. The account is giving out approximately $220 in post rewards to users each day, the vast majority of whom are minnows, through more than 1,400 user decided votes.
We have an outgoing message with all of those votes too. You might see it, which explains what the Minnow Support Project is and how others can join us and why they should. It’s also a fund raising mechanism because people can upvote the comment and donate a little wealth to the @minnowsupport project account.
We have dedicated groups to languages, countries, and even businesses now. If you have a small community of people we can find them a home in a larger community, which helps all of us network, grow personally, and grow Steemit as a whole.
The bottom line is that this Discord Community is a lifeline and a wonderful community for Minnows and the atmosphere in there is helpful, kind, supportive, and energized. I highly encourage you to stop writing the 5 hour posts that no one reads and don’t offer rewards and instead learn about how to grow and get support from this wonderful community. It can be a little overwhelming for new users, so just sit there for a few minutes, say hello, or ask the Greeters (who have their names in orange) for a little help on what to do. You’re wallet, your follower count, and your number of friends in the world will thank you for joining this initiative.
If you’re not in the PALnet Discord Channel then you’re doing Steemit wrong. Period. https://discord.gg/HYj4yvw
If you’ve benefitted from the Minnow Support Project, the Discord Channel Community Bots, or the Community that takes hours to manage each week consider upvoting the Witnesses that created and run the channel, keep it completely open and free to the public, and support your work day in and day out.
https://steemitimages.com/0x0/https://steemitimages.com/0x0/https://steemitimages.com/0x0/https://media.giphy.com/media/3og0INKh2raZUVkEpy/giphy.gif
This page is synchronized from the post: ‘I’’m Mayor of Minnow Town: PALnet Discord Channel Reaches 1,000 People!’


Fitness
Diet
tips & tricks
did you know
Near Me
Quiz
Contact Us
Gynaecologists
Gyms
Blood Banks
Pediatricians
Hospitals


Interpolates the amplitudes and frequencies of partials from among four different sources in turn.
When there are only two inputs, the Interpolation knob interpolates between the two of them.
When there are more than two inputs, the Interpolation knob starts by interpolating between the first two: but when it reaches 1.0, it begins interpolating between the second and third. When it reaches 0.0 it begins interpolating between the third and fourth, and so on.
Morph's interpolation is computed as follows. We take the first partial from both active sources, and produce a partial which is a weighted average of the two both in terms of frequency and amplitude. Then we do this for the second partial, and so on.
Morph doesn't just pair up the #1 partials and then the #2 partials, etc. It can also map the partials to each other in complex ways.
- Input A ... D
- The four input partials sources
- Trig A ... D
- Triggers fired when Morph begins using the partials source in question. This can be used to inform another module that a new sound is beginning.
- Interpolation
- The current interpolation weight value.
- Variance.
- The randomness in mapping when the Type is Random.
- Seed
- Random number seed used when the Type is Random. This seed guarantees that the randomness is deterministic: it's the same order every time a note is played. If you set the Seed to Free, then it will be completely nondeterministic.
- Type
- Morph can pair up partials in complex ways rather than just line #1 up with #1 and #2 up with #2 etc.
- Normal
- Partial #1 is paired with #1, #2 is paired with #2, and so on.
- Random
- The ordering of the partials is shuffled randomly in one source relative to the other.
- 2-Pair
- Reversed groups of 2. Partial #1 is paired with #2, #2 with #1, #3 with #4, #4 with #3, and so on.
- 4-Pair
- Reversed groups of 4. Partial #1 is paired with #4, #2 with #3, #3 with #2, #4 with #1, and so on.
- 8-Pair
- Reversed groups of 8
- Increasing
- The first pair is a 2-pair. The next pair is a 4-pair. The next pair is an 8-pair. The next pair is a 16-pair. And so on.
- Fundamental
- The fundamental is included in the pairing mapping. If not the fundamentals are mapped to one another.
- Frequency
- Interpolate the partial frequencies
- Amplitude
- Interpolate the partial amplitudes
- Free
- When a Note On occurs, Morph does not reset to the first two inputs used, but instead starts right where it had left off.
- Random
- Instead of iterating sequentially through the sources, Morph will select its new source at random each time. The random seed is determined by Seed.


Etaples is a working fishing port at the mouth of the river Canche.
Position 50° 32'40"N, 01° 32'30"E (safe water mark)
The estuary dries a long way out and the buoyed channel constantly shifts. In even moderate south westerly winds the seas break heavily well out to sea. Aim for the safe water mark and the current channel markers should be seen.
Shelter is good except in strong north westerlies.
Beware of the strong current in the river. The marina is down stream of the low bridge.
Last updated June 2016.


dgw - basegui - combobox - drawcanvas - hyperhelp - sbuttonbar - seditor - sfilebrowser - sfinddialog - sqlview - statusbar - tablelist - tlistbox - tvmixins - txmixins
dgw::sbuttonbar - snit widget for buttonbar with nice buttons having rounded corners, based on old gbutton code from Steve Landers.
package require dgw::sbuttonbar
namespace import ::dgw::sbuttonbar
sbuttonbar pathName options
pathName cget option
pathName configure option value
pathName insert item options
pathName itemcget item option
pathName itemconfigure item option value
pathName iteminvoke item
dgw::sbuttonbar - is a snit widget derived from a Steve Landers old gbutton code used in the old Tk Wikit application. It displays a nice button with rounded corners, more pleasant than the standard Tk button. The button can be configures as usually using the -command or the -state option. The -text option is however currently not available as the text per default currently is the given text at button creation time.
dgw::sbuttonbar pathName ?options?
Creates and configures the dgw::sbuttonbar widget using the Tk window id pathName and the given options.
-activefill color
the fill color for the buttons if they are hovered
-bg color
the color used as background color for the buttonbar
-disabledfill color
the fill color for the buttons if they are disabled
-fill color
the fill color for the buttons
-font fontname
the font used for the sbuttonbar text
-padx integer
the x-padding between the buttons
-pady integer
the y-padding for all buttons in the buttonbar .
Each dgw::sbuttonbar widget supports the following widget commands.
pathName cget option
Returns the given dgw::sbuttonbar configuration value for the option.
pathName configure option value ?option value?
Configures the dgw::sbuttonbar widget with the given options.
pathName insert text *?option value ...?
Insert the given text as an item into the buttonbar and configures it with the given option. See -itemconfigure for a list of available item options.
pathName itemcget text option
Returns the given configuration value for the item labeled with text. See -itemconfigure for a list of available item options.
pathName itemconfigure text option value ?option value ...?
Returns the given configuration value for the item labeled with text. Currently the following item options should be used:
pathName iteminvoke text
Invokes the command configure with option -command for the item labeled with text. Please note, that iteminvoke works all well for disabled buttons.
proc Cmd {state} {
global b0
tk_messageBox -type ok -message "Cmd"
if {$state == 0} {
$b0 itemconfigure Forward -state normal
$b0 itemconfigure Back -state disabled
} else {
$b0 itemconfigure Forward -state disabled
$b0 itemconfigure Back -state normal
}
}
pack [frame .f -bg #fff] -side top -fill x -expand no
pack [dgw::sbuttonbar .f.t -bg #fff] -side top ;# -fill x -expand no
set b0 .f.t
$b0 insert Back -command [list Cmd 0]
$b0 insert Forward -command [list Cmd 1] -state disabled
$b0 insert Home
$b0 insert End -command [list puts End]
$b0 itemconfigure End -state disabled
Installation is easy you can install and use the dgw::sbuttonbar package if you have a working install of:
For installation you copy the complete dgw folder into a path of your auto_path list of Tcl or you append the auto_path list with the parent dir of the dgw directory. Alternatively you can install the package as a Tcl module by creating a file dgw/sbuttonbar-0.6.tm in your Tcl module path. The latter in many cases can be achieved by using the --install option of sbuttonbar.tcl. Try "tclsh sbuttonbar.tcl --install" for this purpose.
Example code for this package can be executed by running this file using the following command line:
$ wish sbuttonbar.tcl --demo
The example code used for this demo can be seen in the terminal by using the following command line:
$ wish sbuttonbar.tcl --code
The script contains embedded the documentation in Markdown format. To extract the documentation you should use the following command line:
$ tclsh sbuttonbar.tcl --markdown
This will extract the embedded manual pages in standard Markdown format. You can as well use this markdown output directly to create html pages for the documentation by using the --html flag.
$ tclsh sbuttonbar.tcl --html
This will directly create a HTML page sbuttonbar.html
which contains the formatted documentation.
Github-Markdown can be extracted by using the --man switch:
$ tclsh sbuttonbar.tcl --man
The output of this command can be used to feed a markdown processor for conversion into a man page, html or pdf document. If you have pandoc installed for instance, you could execute the following commands:
# man page
tclsh sbuttonbar.tcl --man | pandoc -s -f markdown -t man - > sbuttonbar.n
# html
tclsh sbuttonbar.tcl --man > sbuttonbar.md
pandoc -i sbuttonbar.md -s -o sbuttonbar.html
# pdf
pandoc -i sbuttonbar.md -s -o sbuttonbar.tex
pdflatex sbuttonbar.tex
The sbuttonbar widget was written by Detlef Groth, Schwielowsee, Germany.
dgw::sbuttonbar widget dgw::sbuttonbar, version 0.6.
Copyright (c)
This library is free software; you can use, modify, and redistribute it for any purpose, provided that existing copyright notices are retained in all copies and that this notice is included verbatim in any distributions.
This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


Integration testing in Go using Docker
Note: this post was originally written for the Go Advent 2015 series, but I discovered that a post with almost exactly the same subject (and even similar code!) already planned :) That’s amazing.
Golang is often used for writing microservices and various backends. Often these type of software do some computation, read/write data on external storage and expose it’s API via http handlers. All this functionality is remarkably easy to implement in Go and, especially if you’re creating 12factor-compatible app, Go is your friend here.
This functionality is also easy to test using built-in Go testing tooling. But here’s the catch - unit testing or small tests doesn’t guarantee that your service is working correctly. Even if you simply want to test your HTTP response codes, you have to inject dependencies first and connect your code to the external resources or storage. At this point you’ll probably realize you need to write a proper integration test, which include not only your code but all dependent resources as well.
But, how to do this without inventing your own scripts and harness code for mocking and starting services? How to make it as easy to use as a normal ‘go test’ workflow? How to deal with setting up migrations and schemas for you databases? Finally, how to make it cross-platform, so you can easily run those tests on your Macbook as well as in your CI node?
Let me show one of the possible solutions I use for a number of services for quite a long time. It leverages the power of Docker isolation and comfort of go test tooling, and thus very easy to use and, with little efforts, gives you truly cross-platform integration testing.
As an example I’ll take simple go-based webservice, which is often may be sufficient for REST-backends:
- REST-service based on gin framework
- data storage - external MySQL database
- goose tool for migrations
Docker
So, yes, we will use Docker to handle all external dependencies (MySQL database in our case), and that’s exactly the case where Docker shines. Nowadays internet is full of articles and talks telling that Docker is not a ‘silver bullet’, and putting a lot of criticism on many docker use cases. Of course, they’re absolutely right and many of their points are valid, but in this particular case it’s exactly the case where you should use Docker. It gives us everything we need - repeatability, isolation, speed, and portability.
Let’s start by creating Dockerfile for our dependency service - MySQL database. Normally you would use official mysql docker image, but we have to wind up migrations with goose, so we’d better off creating our custom MySQL debian image:
FROM debian
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update
RUN apt-get install -y mysql-server
RUN sed -i -e«s/^bind-address\s*=\s*<IP_ADDRESS>/bind-address = <IP_ADDRESS>/» /etc/mysql/my.cnf
RUN apt-get install -y golang git ca-certificates gcc
ENV GOPATH /root
RUN go get bitbucket.org/liamstask/goose/cmd/goose
ADD. /db
RUN \
service mysql start && \
sleep 10 && \
while true; do mysql -e «SELECT 1» &> /dev/null; [ $? -eq 0 ] && break; echo -n "."; sleep 1; done && \
mysql -e «GRANT ALL ON *.* to 'root'@'%'; FLUSH PRIVILEGES;» && \
mysql -e «CREATE DATABASE mydb DEFAULT COLLATE utf8_general_ci;» && \
/root/bin/goose -env=production up && \
service mysql stop
EXPOSE 3306
CMD [«mysqld_safe»]
Then we build our image with docker build -t mydb_test .
command and run it with docker run -p 3306:3306 mydb_test
. The resulting container will have a fresh actual database instance with the latest migrations applied. Once the image is built it takes less than a second to start this container.
The actual name of container and database is not important here, so we use mydb
and mydb_test
- simply a convention.
 Remember, we want our test to be portable and issued with go test
command only. Let’s start our service_test.go:
// +build integration
package main
import (
"testing"
)
We place build tag integration
here to make sure this test will run only when explicitly asked with --tags=integration
flag. Yes, the test itself is fast, but still requires an external tool (Docker), so we’d better separate integration tests and unit tests.
By the way, we could protect in with testing.Short flag, but the behavior is opposite in this case - long tests run by default.
if testing.Short() {
t.Skip("skipping test in short mode.")
}
Running Docker container
Before running our tests, we need to start our dependencies. There are a few packages to work with Docker Remote API for Go, I will use the one from fsouza, which I successfully using for quite a long time. Install it with:
go get -u github.com/fsouza/go-dockerclient
To start the container, we have to write following code:
client, err := docker.NewClientFromEnv()
if err != nil {
t.Fatalf("Cannot connect to Docker daemon: %s", err)
}
c, err := client.CreateContainer(createOptions("mydb_test"))
if err != nil {
t.Fatalf("Cannot create Docker container: %s", err)
}
defer func() {
if err := client.RemoveContainer(docker.RemoveContainerOptions{
ID: c.ID,
Force: true,
}); err != nil {
t.Fatalf("cannot remove container: %s", err)
}
}()
err = client.StartContainer(c.ID, &docker.HostConfig{})
if err != nil {
t.Fatalf("Cannot start Docker container: %s", err)
}
createOptions() is a helper function returning struct with container creating options. We pass our docker container name to that function.
func сreateOptions(dbname string) docker.CreateContainerOptions {
ports := make(map[docker.Port]struct{})
ports["3306"] = struct{}{}
opts := docker.CreateContainerOptions{
Config: &docker.Config{
Image: dbname,
ExposedPorts: ports,
},
}
return opts
}
After that we need to write code which will wait for DB to start, extract IP address for connection, form DSN for database/sql driver and open the actual connection:
// wait for container to wake up
if err := waitStarted(client, c.ID, 5*time.Second); err != nil {
t.Fatalf("Couldn't reach MySQL server for testing, aborting.")
}
c, err = client.InspectContainer(c.ID)
if err != nil {
t.Fatalf("Couldn't inspect container: %s", err)
}
// determine IP address for MySQL
ip = strings.TrimSpace(c.NetworkSettings.IPAddress)
// wait MySQL to wake up
if err := waitReachable(ip+":3306", 5*time.Second); err != nil {
t.Fatalf("Couldn't reach MySQL server for testing, aborting.")
}
Here we wait for two actions to happen: first is to get network inside container up, so we can obtain it’s IP address, and second, is MySQL service being actually started. Waiting functions are a bit tricky, so here they are:
// waitReachable waits for hostport to became reachable for the maxWait time.
func waitReachable(hostport string, maxWait time.Duration) error {
done := time.Now().Add(maxWait)
for time.Now().Before(done) {
c, err := net.Dial("tcp", hostport)
if err == nil {
c.Close()
return nil
}
time.Sleep(100 * time.Millisecond)
}
return fmt.Errorf("cannot connect %v for %v", hostport, maxWait)
}
// waitStarted waits for a container to start for the maxWait time.
func waitStarted(client *docker.Client, id string, maxWait time.Duration) error {
done := time.Now().Add(maxWait)
for time.Now().Before(done) {
c, err := client.InspectContainer(id)
if err != nil {
break
}
if c.State.Running {
return nil
}
time.Sleep(100 * time.Millisecond)
}
return fmt.Errorf("cannot start container %s for %v", id, maxWait)
}
Basically, it’s enough to work with our container, but here is another issue comes in - if you run MacOS X or Windows, you use Docker via the proxy virtual machine with tiny linux, docker-machine
(or its predecessor, boot2docker
). It means you should use docker-machine’s IP address and not real container IP, which is not exposed outside of the docker-host linux VM.
Tuning for portability
Again, let’s just write code to accomplish that, as it’s quite trivial:
// DockerMachineIP returns IP of docker-machine or boot2docker VM instance.
//
// If docker-machine or boot2docker is running and has IP, it will be used to
// connect to dockerized services (MySQL, etc).
//
// Basically, it adds support for MacOS X and Windows.
func DockerMachineIP() string {
// Docker-machine is a modern solution for docker in MacOS X.
// Try to detect it, with fallback to boot2docker
var dockerMachine bool
machine := os.Getenv("DOCKER_MACHINE_NAME")
if machine != "" {
dockerMachine = true
}
var buf bytes.Buffer
var cmd *exec.Cmd
if dockerMachine {
cmd = exec.Command("docker-machine", "ip", machine)
} else {
cmd = exec.Command("boot2docker", "ip")
}
cmd.Stdout = &buf
if err := cmd.Run(); err != nil {
// ignore error, as it's perfectly OK on Linux
return ""
}
return buf.String()
}
For working with docker-machine we will also need to pass port forwarding configuration in CreateContainerOptions.
At this point, the amount of supporting code becomes quite notable, and it’s better to move all docker related code into separate a subpackage, perhaps in internal/ directory. Let’s name it internal/dockertest
. The source of this package can be found here.
Running from tests
Now, all we need is to import our internal/dockertest
subpackage and start MySQL with a single line:
// start db in docker container
dsn, deferFn, err := dockertest.StartMysql()
if err != nil {
t.Fatalf("cannot start mysql in container for testing: %s", err)
}
defer deferFn()
Pass dsn
to sql.Open() or your own service init function, and your code will connect to the database inside the container.
Note, that StartMysql() returns also a defer function, which will properly stop and remove container. Our test code knows nothing about underlying mechanisms. It just works as if it was a normal MySQL resource.
Testing http endpoints
Next step is to test http-endpoints. We may want to test response codes, proper error messages, expected headers or data format and so on. And, following our desire to not depend on any external testing scripts, we want to run all the tests within the Go code. And Go allows us to do so using net/http/httptest package.
Honestly, httptest
was one of the most surprising things in Go, when I first saw it. net/http design was quite unusual and elegant for me, but httptest looked like a killer feature for testing http services. It leverages the power of interfaces in Go, and particularly, the http.ResponseWriter interface to achieve in-memory round-trip of http requests. We don’t need to ask OS to open ports, deal with permissions and busy ports - it’s all in memory.
And as soon as gin framework implements http.Handler interface, which looks like this:
type Handler interface {
ServeHTTP(ResponseWriter, *Request)
}
we can use it transparently with httptest. I will also use amazing GoConvey testing framework, which implements behaviour-driven testing for Go, and fully compatible with the default go test
workflow.
func NewServer(db *sql.DB) *gin.Engine {
r := gin.Default()
r.Use(cors.Middleware(cors.Options{}))
// more middlewares ...
// Health check
r.GET("/ping", ping)
// CRUD resources
usersRes := &UsersResource{db: db}
// Define routes
api := r.Group("/api")
{
v1 := api.Group("/v1")
{
rest.CRUD(v1, "/users", usersRes)
}
}
return r
}
...
r := NewServer(db)
Convey("Users endpoints should respond correctly", t, func() {
Convey("User should return empty list", func() {
// it's safe to ignore error here, because we're manually entering URL
req, _ := http.NewRequest("GET", "http://localhost/api/v1/users", nil)
w := httptest.NewRecorder()
r.ServeHTTP(w, req)
So(w.Code, ShouldEqual, http.StatusOK)
body := strings.TrimSpace(w.Body.String())
So(body, ShouldEqual, "[]")
})
})
GoConvey has also an astonishing web UI, I guarantee you will start writing more tests just to see that nice blinking “PASS” message! :)
And now, after you get the idea, we can add more tests for testing basic CRUD functionality for our simple service:
Convey("Create should return ID of a newly created user", func() {
user := &User{Name: "Test user"}
data, err := json.Marshal(user)
So(err, ShouldBeNil)
buf := bytes.NewBuffer(data)
req, err := http.NewRequest("POST", "http://localhost/api/v1/users", buf)
So(err, ShouldBeNil)
w := httptest.NewRecorder()
r.ServeHTTP(w, req)
So(w.Code, ShouldEqual, http.StatusOK)
body := strings.TrimSpace(w.Body.String())
So(body, ShouldEqual, "1")
})
Convey("List should return one user with name 'Test user'", func() {
req, _ := http.NewRequest("GET", "http://localhost/api/v1/users", nil)
w := httptest.NewRecorder()
r.ServeHTTP(w, req)
So(w.Code, ShouldEqual, http.StatusOK)
body := w.Body.Bytes()
var users []*User
err := json.Unmarshal(body, &users)
So(err, ShouldBeNil)
user := &User{
ID: 1,
Name: "Test user",
}
So(len(users), ShouldEqual, 1)
So(users[0], ShouldResemble, user)
})
Conclusion
As you may see, Go not only make testing a lot easiers but also make use of BDD and TDD methodologies very easy to follow and opens new possibilities for cross-platform integration- and acceptance- testing.
This example provided here is simplified on purpose, but it’s based on the real production code which is being tested in this way for more than 1.5 years and survived a number of refactorings and migrations’ updates. On my Macbook Air, the whole test, from start to end (compile code, run docker container in docker-machine and test ~35 http requests, shut down the container) it takes about 3 seconds. On native Linux system it’s obviously a lot faster.
One may ask why not publish this code as a separate library, and make the whole task (and article) even shorter. But the point here is that for every different service there may be a different set of service connections, different usage patterns and so on. And what is really important is that with Go it’s so easy to write this harness code for your needs, that you don’t have an excuse not to do this. Whether you need many similar containers in parallel (probably, you’ll need to randomize exposed ports), or you have to interconnect some services before starting them - you just write in Go, hiding all the complexity from the actual testing code.
And always write tests! There is not excuse not to write them anymore.
UPD: After writing the article, discovered the package dockertest by Aeneas Rekkas (@_aeneasr), which does almost exactly the same as a code in this article, and looks pretty solid.


Club Championship 2019 Event 3
| Hard 20 |
23 March 19 |
|
20 |
miles |
| Name |
Position |
Road bike |
Actual Time |
Avg. mph |
| |
|
|
|
|
| Timothy Smith |
1 |
|
00:49:58 |
24.02 |
| James
Lowe |
2 |
|
00:51:49 |
23.16 |
| Matt
Plews |
3 |
|
00:52:35 |
22.82 |
| Hans van
Nierop |
4 |
1 |
00:54:50 |
21.88 |
| Julian
Freeman |
5 |
2 |
00:56:00 |
21.43 |
| Austin
Smith |
6 |
|
00:56:52 |
21.10 |
| Jonathan
Durnin |
7 |
|
00:57:10 |
20.99 |
| Julian
Middleton |
8 |
|
00:57:20 |
20.93 |
| Adrian
Killworth |
9 |
|
00:58:38 |
20.47 |
| Nik
Kershaw |
10 |
|
00:58:41 |
20.45 |
| Linda
Hubbard |
11 |
|
00:59:01 |
20.33 |
| Ian
Waterfield |
12 |
|
00:59:56 |
20.02 |
| Mark
Smee |
13 |
|
01:01:45 |
19.43 |
| Jill
Postlethwaite |
14 |
3 |
01:02:29 |
19.21 |
| Alistair
Watson |
15 |
4 |
01:02:46 |
19.12 |
| Claire
Waterfield |
16 |
|
01:03:28 |
18.91 |
| Andy
Smith |
17 |
5 |
01:04:45 |
18.53 |
| David
Reay |
18 |
|
01:06:19 |
18.09 |
| Stewart
Holland |
19 |
6 |
01:07:36 |
17.75 |
| Jennifer
Clegg |
20 |
|
01:07:55 |
17.67 |
| Steven
Coulam |
21 |
|
01:08:26 |
17.54 |
| Tom
Evans |
22 |
|
01:11:47 |
16.72 |
| Ben
Brant |
23 |
7 |
01:14:44 |
16.06 |
| Simon
Ward |
|
|
DNS |
|
|
|
|
|
|


Congratulations Player 1, you win!
Congratulations Player 2, you win!
Congratulations neither of you win!
Start Over


COM6222 Human Centred Systems Design
| Summary |
This module is concerned with the analysis, design,
implementation and evaluation of interactive computing
systems for human use; and with the study of major
phenomena surrounding them. It will consider the interplay
between human users, developers and computers; as such it
has a multidisciplinary content with its basis in
psychology, human computer interaction and human factors as well as in software
engineering and database design.
|
| Session |
Autumn 2017/18 |
| Credits |
20 |
| Assessment |
100% coursework. Group work and individual work.
|
| Lecturer(s) |
Dr Heidi Christensen, Dr Maria-Cruz Villa-Uriol & Dr Anthony Simons |
| Resources |
|
| Aims |
This unit aims to:
- Provide the psychological foundations of
human-centred design, including abstraction, ergonomics
and developer-customer communication.
- Develop group-working skills in applying software
analysis and design methods to create software systems
for target customer groups.
- Develop technical software development skills,
including heterogeneous systems with graphical or
web-based interfaces and databases.
- Develop analytical skills for measuring the
usability and ergonomics of software systems.
|
| Objectives |
By the end of the unit, a student will be able to:
- Understand and demonstrate the ability to apply
principles from human-computer interaction and
ergonomics to software development.
- Understand and demonstrate the ability to manage
customer-developer interaction during the requirements
capture stage.
- Understand and demonstrate the ability to apply the
principles of user interface design, software
architecture design and database design.
- Work co-operatively in a developer team to deliver a
software system that meets the requirements of a target
customer group.
- Evaluate software systems quantitatively and
qualitatively for their ease of use by target customer
groups.
|
| Content |
- People and Technology
- Human-Computer Interaction
- Designing Interaction
- HCI and Software Engineering
- Software Engineering Lifecycles
- Control Flow Modelling
- Information Modelling
- Behavioural Specification
- Database Design
- Query Processing
- Architectural Design
- Design Patterns
- Detailed Design
- Verification and Testing
- Usability and Experimental Design
- Qualitative Methods
- Quantitative Methods
- Statistical Tests of Significance
|
| Teaching Method |
Lectures, mini-labs, practicals and independent study. |
| Feedback |
Dr Maria-Cruz Villa-Uriol, Dr Heidi Christensen - feedback during practical sessions; feedback on marked assessments (two sets of questions)
Dr Anthony Simons - feedback during practical mini-labs; formative UML exercises with solutions released weekly in MOLE; feedback on marked group project, with a cover-sheet showing goals met; class email describing main issues.
|
| Recommended Reading |
Human Computer Interaction
- J. Preece, Y. Rogers, H. Sharp, D. Benyon, S. Holland, T. Carey, Human Computer Interaction, Addison-Wesley.
- D. Benyon, P. Turner, S. Turner, Designing Interactive Systems, People, Activities, Context, Technology, Addison-Wesley.
- C. D. Wickens, J. G. Hollands, S. Banbury, R. Parasuraman, Engineering Psychology and Human Performance, 4th edition, Pearson.
- J. Lazar, J.H. Feng, and H. Hochheiser (2010) Research Methods in Human Computer Interaction, John Wiley and Son Ltd
UML
- M Fowler, UML Distilled: A Brief Guide to the Standard
Object Modelling Language, 3rd Edition, Addison-Wesley,
2003.
- S Bennett, S McRobb R Farmer, Object-Oriented Systems
Analysis and Design using UML, 3rd Edition, McGraw-Hill,
2006.
Software Eng
- R S Pressman, Software Engineering: A Practioner's
Approach, 5th Edition, McGraw-Hill, 2009
- Sommerville, Software Engineering, 8th Edition,
Addison-Wesley, 2006.
- K Beck, Extreme Programming Explained, 2nd Edition,
Addison-Wesley, 2005.
Databases
- T Connolly and C Begg, 'Database Systems; A Practical
Approach to Design, Implementation and Management'; 5th
Ed. Addison Wesley, 2009.
- C J Date, 'An Introduction to Database Systems'; 8th
Ed. Addison Wesley, 2004.
|
|


Command Reference
There is a help page for every command. These can be accessed by clicking the appropriate command name in the left-hand frame. Many commands have their own example too.
If you spot any mistakes in the documentation then please post a quick description of the error on the Bug Reports forum at www.blitzbasic.co.nz. This will allow the authors of the documentation to correct the error in time for the next release of the docs.
Docs Version: 1.62


Here, we believe that interior design is more than great functionality and beautiful aesthetics. We aim to make your home interiors a reflection of your personality. Your home should be something that you and your family take pride in and love to spend time in.
Our efficient, customized home interior designs incorporate your needs in every nook of your home, so your space meets your every requirement. Our dedicated home interior designers work with you tirelessly to tie your style with their design expertise, creating the perfect interior design plan. They will also ensure that the plan is executed using the materials of the highest standards. In addition to great interior design ideas, you can expect our unwavering support and service for years to come because all our products come with a 5 year warranty.
Think we are the right fit for your journey to your new home? Get a free estimate or a book a free consultation with our interior design team for beautiful home interiors. We offer interior design ideas for living room, bedroom and kitchen. We specialize in complete modular kitchens, stunning wardrobe designs, timeless TV unit designs, and space-saving furniture among other.
What’s more, we guarantee beautiful interiors delivered in 45 days or we pay you rent.
We have dedicated specialised team for for exclusive residential Interiors who carter designs & services in sync with each home owners exclusive needs.
We are selective in choosing our clients to ensure the harmony in the design transition in to reality, With right passion and synchronized expectations.
Current thinking is moving away from grand aesthetics to capture and translate the ethos of an organization into the workspace through sustainable design.
Intelligent & thoughtfully designed MEP facilities and Building management system are integral parts of any successful Office infrastructure .