This chapter contains two tables. Here is one.
It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktopd. It was popularised in the 1960s with the release of Letraset sh publishing software like Aldus PageMaker including versions of Lorem Ipsum.
It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It wasd. It was popularised in the 1960s with the release of Letraset shd. It was popularised in the 1960s with the release of Letraset sh popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheetsd. It was popularised in the 1960s with the release of Letraset shd. It was popularised in the 1960s with the release of Letraset shd. It was popularised in the 1960s with the release of Letraset sh containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheetsd. It was popularised in the 1960s with the release of Letraset sh containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheetsd. It was popularised in the 1960s with the release of Letraset shd. It was popularised in the 1960s with the release of Letraset sh containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheetsd. It was popularised in the 1960s with the release of Letraset sh containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
| Column 1 | Column 2 | Column 3 | Column 4 |
| Hello | this | is | a |
| table | with | three | rows |
Lorem28 It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, " dolor sit amet..", comes from a line in section 1.10.32.
It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheetsd. It was popularised in the 1960s with the release of Letraset shd. It was popularised in the 1960s with the release of Letraset sh containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheetsd. It was popularised in the 1960s with the release of Letraset shd. It was popularised in the 1960s with the release of Letraset shd. It was popularised in the 1960s with the release of Letraset sh containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
Lorem29 All the Lorem Ipsum generators on the Internet tend to repeat predefined chunks as necessary, making this the first true generator on the Internet. It uses a dictionary of over 200 Latin words, combined with a handful of model sentence structures, to generate Lorem Ipsum which looks reasonable. The generated Lorem Ipsum is therefore always free from repetition, injected humour, or non-characteristic words etc.
It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheetsd. It was popularised in the 1960s with the release of Letraset shd. It was popularised in the 1960s with the release of Letraset sh containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheetsd. It was popularised in the 1960s with the release of Letraset shd. It was popularised in the 1960s with the release of Letraset shd. It was popularised in the 1960s with the release of Letraset sh containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
And here comes some text, before the next table:
|
lkj |
lkj |
kj l |
lkj |
|
hgf |
hgf |
gf h |
hgf |
|
hgf |
lkj |
izu |
hg |
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.
Here is the following chapter, which also contains a table.
| A1 | A2 |
| B1 | B2 |
It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheetsonic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, an containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheetsonic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, an containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktoponic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, an publishing software like Aldus PageMaker including versions of Lorem Ipsum.
It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheetsonic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, an containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheetsonic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, an containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktoponic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, an publishing software like Aldus PageMaker including versions of Lorem Ipsum.
It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheetsonic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, an containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktoponic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, an publishing software like Aldus PageMaker including versions of Lorem Ipsum.
It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheetsonic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, an containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktoponic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, anonic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, an publishing software like Aldus PageMaker including versions of Lorem Ipsum.
It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktoponic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, an publishing software like Aldus PageMaker including versions of Lorem Ipsum.
It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheetsonic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, anonic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, an containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.


Landing Page
Special Projects
This story is part of a series of specially designed stories that represents some of the best journalism The Post has to offer. Check out the rest of the special projects here.
Illustration by Megan Knapp
FULL STRENGTH
City Council's Summer
Campus Improvements
Coffee Conundrum
New Honors Program
Top Tweets
Back to school fashion
Convenience Delivered
Follow these eateries
Take it from Us
Game day bars
An uphill battle
First Day Playlist
Summer news recap
Qdoba opened in May
Candidates coming to town
Introducing Gigi Secuban
Back on the ice
Eye on the prize
From the Editor's Desk
Fresh on campus
Soft sounds
Vision for learning
Artfully inspired
Dining Hall Updates
Centered on discussion
Mark your calendars
Mischief managed
A useful waste
Many OU classrooms utilize TopHat.
Being cliche
Here's a heads up
Final bond issue approved
Summer police blotter
While you were away...
Board of Trustees’ meeting
One earbud in
Back to athens
Landing Page
This story is part of a series of specially designed stories that represents some of the best journalism The Post has to offer. Check out the rest of the special projects here.


Thank you for getting involved in Medium Zoom!
This module is meant to reproduce the zoom from Medium. We want to provide a great UX (User Experience) with a lightweight vanilla JavaScript solution. Thus, this package must remain focused on this core principle, yet be extended with a composable API.
▸ cypress The end-to-end tests written for Cypress
▸ examples The Medium Zoom featured examples available on CodeSandbox
▸ src The source code of the module
▸ __tests__ The tests for the module API
▸ stories The stories for the Medium Zoom Storybook
▸ website The Medium Zoom website source code
This project follows the conventional changelog guidelines. All commit messages should be formatted using the following scheme:
type(scope): description
Reporting a bug or requesting a feature is always welcome. Feel free to open an issue with the according template which helps you create an effective report.
After discussing in an issue about the need to change the code, you will need to follow these steps:
yarn
docs/what-you-change
yarn run format
fix/issue-number
yarn run test
)yarn run format
and fix problems if anyfeat/name-of-the-feature
yarn run test
)yarn run format
and fix problems if anyWe will then review your pull request!
Unit and integration tests with Jest ensure that the API works as documented.
yarn run test
yarn run test --watch
yarn run test --coverage
End-to-end tests with Cypress take screenshots of the stories to ensure that the zoom looks as expected.
yarn run test:cypress:open
yarn run test:cypress:run
We rely on release-it to release new versions of this package.
The release flow goes through these steps:
package.json
based on the commitsnext
branchnpm run release:next
(do not use yarn
for releasing)master
branchnpm run release
(do not use yarn
for releasing)Thank you for contributing!


Getting Started
Nemo
A Data Processing System for Flexible Employment With Different Deployment Characteristics.
Online Documentation
Details about Nemo and its development can be found in:
- Our website: https://nemo.apache.org/
- Our project wiki: https://cwiki.apache.org/confluence/display/NEMO/
- Our Dev mailing list for contributing<EMAIL_ADDRESS>(subscribe)
Please refer to the Contribution guideline to contribute to our project.
Nemo prerequisites and setup
Simple installation
Run $ ./bin/install_nemo.sh
on the Nemo home directory. This script includes the actions described below.
Prerequisites
- Java 8 or later (tested on Java 8 and Java 11)
- Maven
- YARN settings
- Download Hadoop 2.7.2 at https://archive.apache.org/dist/hadoop/common/hadoop-2.7.2/
- Set the shell profile as following:
export HADOOP_HOME=/path/to/hadoop-2.7.2 export YARN_HOME=$HADOOP_HOME export PATH=$PATH:$HADOOP_HOME/bin
- Protobuf 2.5.0
-
On Ubuntu 14.04 LTS and its point releases:
$ sudo apt-get install protobuf-compiler
-
On Ubuntu 16.04 LTS and its point releases:
$ sudo add-apt-repository ppa:snuspl/protobuf-250 $ sudo apt update $ sudo apt install protobuf-compiler=2.5.0-9xenial1
-
On macOS:
$ wget https://github.com/google/protobuf/releases/download/v2.5.0/protobuf-2.5.0.tar.bz2 $ tar xvf protobuf-2.5.0.tar.bz2 $ pushd protobuf-2.5.0 $ ./configure CC=clang CXX=clang++ CXXFLAGS='-std=c++11 -stdlib=libc++ -O3 -g' LDFLAGS='-stdlib=libc++' LIBS="-lc++ -lc++abi" $ make -j 4 $ sudo make install $ popd
-
Or build from source:
- Downloadable at https://github.com/google/protobuf/releases/tag/v2.5.0
- Extract the downloaded tarball
$ ./configure
$ make
$ make check
$ sudo make install
-
To check for a successful installation of version 2.5.0, run
$ protoc --version
-
Installing Nemo
- Run all tests and install:
$ mvn clean install -T 2C
- Run only unit tests and install:
$ mvn clean install -DskipITs -T 2C
Running Beam applications
Apache Nemo is an official runner of Apache Beam, and it can be executed from Beam, using NemoRunner, as well as directly from the Nemo project. The details of using NemoRunner from Beam is shown on the NemoRunner page of the Apache Beam website. Below describes how Beam applications can be run directly on Nemo.
Configurable options
-job_id
: ID of the Beam job-user_main
: Canonical name of the Beam application-user_args
: Arguments that the Beam application accepts-optimization_policy
: Canonical name of the optimization policy to apply to a job DAG in Nemo Compiler-deploy_mode
:yarn
is supported(default value islocal
)
Examples
## WordCount example from the Beam website (Count words from a document)
$ ./bin/run_beam.sh \
-job_id beam_wordcount \
-optimization_policy org.apache.nemo.compiler.optimizer.policy.DefaultPolicy \
-user_main org.apache.nemo.examples.beam.BeamWordCount \
-user_args "--runner=NemoRunner --inputFile=`pwd`/examples/resources/inputs/test_input_wordcount --output=`pwd`/outputs/wordcount"
$ less `pwd`/outputs/wordcount*
## MapReduce WordCount example (Count words from the Wikipedia dataset)
$ ./bin/run_beam.sh \
-job_id mr_default \
-executor_json `pwd`/examples/resources/executors/beam_test_executor_resources.json \
-optimization_policy org.apache.nemo.compiler.optimizer.policy.DefaultPolicy \
-user_main org.apache.nemo.examples.beam.WordCount \
-user_args "`pwd`/examples/resources/inputs/test_input_wordcount `pwd`/outputs/wordcount"
$ less `pwd`/outputs/wordcount*
## YARN cluster example
$ ./bin/run_beam.sh \
-deploy_mode yarn \
-job_id mr_transient \
-executor_json `pwd`/examples/resources/executors/beam_test_executor_resources.json \
-user_main org.apache.nemo.examples.beam.WordCount \
-optimization_policy org.apache.nemo.compiler.optimizer.policy.TransientResourcePolicy \
-user_args "hdfs://v-m:9000/test_input_wordcount hdfs://v-m:9000/test_output_wordcount"
## NEXMark streaming Q0 (query0) example
$ ./bin/run_nexmark.sh \
-job_id nexmark-Q0 \
-executor_json `pwd`/examples/resources/executors/beam_test_executor_resources.json \
-user_main org.apache.beam.sdk.nexmark.Main \
-optimization_policy org.apache.nemo.compiler.optimizer.policy.StreamingPolicy \
-scheduler_impl_class_name org.apache.nemo.runtime.master.scheduler.StreamingScheduler \
-user_args "--runner=NemoRunner --streaming=true --query=0 --numEventGenerators=1 --manageResources=false --monitorJobs=false"
Resource Configuration
-executor_json
command line option can be used to provide a path to the JSON file that describes resource configuration for executors. Its default value is config/default.json
, which initializes one of each Transient
, Reserved
, and Compute
executor, each of which has one core and 1024MB memory.
Configurable options
num
(optional): Number of containers. Default value is 1type
: Three container types are supported:Transient
: Containers that store eviction-prone resources. When batch jobs use idle resources inTransient
containers, they can be arbitrarily evicted when latency-critical jobs attempt to use the resources.Reserved
: Containers that store eviction-free resources.Reserved
containers are used to reliably store intermediate data which have high eviction cost.Compute
: Containers that are mainly used for computation.
memory_mb
: Memory size in MBcapacity
: Number ofTask
s that can be run in an executor. Set this value to be the same as the number of CPU cores of the container.
Examples
[
{
"num": 12,
"type": "Transient",
"memory_mb": 1024,
"capacity": 4
},
{
"type": "Reserved",
"memory_mb": 1024,
"capacity": 2
}
]
This example configuration specifies
- 12 transient containers with 4 cores and 1024MB memory each
- 1 reserved container with 2 cores and 1024MB memory
Monitoring your job using Web UI
Please refer to the instructions at web-ui/README.md
to run the frontend.
Visualizing metric on run-time
While Nemo driver is alive, it can post runtime metrics through websocket. At your frontend, add websocket endpoint
ws://<DRIVER>:10101/api/websocket
where <DRIVER>
is the hostname that Nemo driver runs.
OR, you can directly run the WebUI on the driver using bin/run_webserver.sh
,
where it looks for the websocket on its local machine,
which, by default, provides the address at
http://<DRIVER>:3333
Post-job analysis
On job completion, the Nemo driver creates metric.json
at the directory specified by -dag_dir
option. At your frontend, add the JSON file to do post-job analysis.
Other JSON files are for legacy Web UI, hosted here. It uses Graphviz to visualize IR DAGs and execution plans.
Examples
$ ./bin/run_beam.sh \
-job_id als \
-executor_json `pwd`/examples/resources/executors/beam_test_executor_resources.json \
-user_main org.apache.nemo.examples.beam.AlternatingLeastSquare \
-optimization_policy org.apache.nemo.compiler.optimizer.policy.TransientResourcePolicy \
-dag_dir "./dag/als" \
-user_args "`pwd`/examples/resources/inputs/test_input_als 10 3"
Options for writing metric results to databases.
-db_enabled
: Whether or not to turn on the DB (true
orfalse
).-db_address
: Address of the DB. (ex. PostgreSQL DB starts withjdbc:postgresql://...
)-db_id
: ID of the DB from the given address.-db_password
: Credentials for the DB from the given address.
Speeding up builds
- To exclude Spark related packages: mvn clean install -T 2C -DskipTests -pl \!compiler/frontend/spark,\!examples/spark
- To exclude Beam related packages: mvn clean install -T 2C -DskipTests -pl \!compiler/frontend/beam,\!examples/beam
- To exclude NEXMark related packages: mvn clean install -T 2C -DskipTests -pl \!examples/nexmark
- Previous
- Next


<Name here> (Male)
Level
Gear
Race
Total
1
Class
Switch player
Roll dice
The result of your roll was:
3


Entry
List
Entry
Create Entry
#
Start date
Name
Total number of FPP students.
Total number of MPP students.
Total number of FPP-OPT students.
Total number of MPP-OPT students.
Total number of US-Residence students.


Customer
None
{{customer.name}}
Image Upload
Select Image
Select a file or drag here
Please select an image
Select a file
0
%
Code
Submit


This is a sample textarea
This is a sample checkbox
This is a sample radio box
Select an option...
1


Recall: 86 tons of chicken fried rice; may have plastic bits
OAKLAND, Miss. (AP) - A Mississippi company is recalling more than 86 tons of chicken fried rice because it may contain bits of plastic.
Ajinomoto Foods North America Inc. of Oakland, Mississippi, reported the problem after customers complained, according to recall notice Friday from the U.S. Department of Agriculture’s Food Safety and Inspection Service.
The agency said it hasn’t had any confirmed reports of injury or illness, and the health risk is considered low.
The 54-ounce (1.5 kilogram) packages were shipped to retailers in Florida, Georgia, Illinois, Maryland, Michigan, New Jersey and Texas.
They’re labeled “Ajinomoto Yakitori Chicken With Japanese-Style Fried Rice.” The date codes are 3559007, 3559008, 3559015, 3559190 and 3559191 and the best by dates are 1/7/2020, 1/8/2020, 1/15/2020, 7/9/2020 and 7/10/2020.
Each package holds six 9-ounce (255-gram) microwavable bags of mixed rice, vegetables and chicken.
Authorities say anyone with one of those packages should throw it out or return it to the seller.
Sign up for Daily Newsletters
Copyright © 2019 The Washington Times, LLC.
Please read our comment policy before commenting.


Toggle navigation
Home Power Usage
Devices
Total
Graph
Your lights are off.

Your heater is off.

Current Usage
waiting for server


Client side filtering using streams
I have been coaching people in using RxJS for a while now. During this time, I’ve noticed that the hardest part for people to learn is not the API, concept or operators but the paradigm switch. Thinking reactively is not something that comes easily and you really have to get your hands dirty to get there.
Below I will show a piece of code that is used to do some basic client side filtering. It’s a snippet of code from somebody that I was coaching which perfecly shows how someone just starting with RxJS often handles this situation. Later on, we will update this to show how you would implement this with the reactive paradigm.
Example case
The example application we will be using is really easy. We have service which fetches a number of Star Wars characters from the swapi.com API. We will show these in a list and provide a select element to filter the fetched characters based on the gender. The screen looks like this:
You can find the live example here.
Client side filtering without streams
First we are going to look at an example where we implement the client side filtering without streams. Of course, we are going to use a stream to fetch the data from the backend, but afterwards, the implementation will be imperative.
// keep a local list of all the characters
characters: Array<StarWarsCharacter>;
// keep a list of all the filtered characters
filteredCharacters: Array<StarWarsCharacter>;
constructor(private starWarsService: StarWarsService) {}
// at startup time, we fetch the characters and save them
// to our local copy. We keep a local copy of the entire
// array since we will need it later on when the filter changes
ngOnInit() {
this.starWarsService.getCharacters()
.subscribe((fetchedCharacters) => {
this.characters = fetchedCharacters;
this.filteredCharacters = fetchedCharacters;
})
}
// when the filter value changes, we filter the local list of
// characters and save the result to the
// filteredCharacters array. Here we reuse the entire array
// to create a new one.
filterChanged(value: string)
if (value === "All") {
this.filteredCharacters = this.characters;
} else {
this.filteredCharacters =
this.characters.pipe(
filter(
(character: StarWarsCharacter) => {
character.gender.toLowerCase() === value.toLowerCase()
}
),
);
}
}
At startup time, we fetch the characters and save them in two local arrays, characters
and filteredCharacters
. When the filter actually changes, we use the local copy of the characters to filter out all the correct ones and create a new array. We then assign this new array to the filteredCharacters
reference.
The component’s html looks like this:

Client side filtering without streams example

<app-gender-filter (filterChange)="filterChanged($event)">
</app-gender-filter>

<app-character-list [characters]="filteredCharacters">
</app-character-list>

While this all works perfectly, it’s not the best solution possible with the reactive paradigm in mind. We have to hold a local copy of the characters array, which kind of bugs me.
It’s also not really flexible. Here, we are fetching the characters via a backend call. This will thus only hold one result. But what if it’s an observable we get from Firebase? In that case the characters array can change as well. To be able to update the view properly when the characters change, we would also have to keep a local copy of the filter to update the filteredCharacters
array reference accordingly.
And what if you would have a multitude of filters… This would result in a multitude of local variables to keep track of.
Using streams we can make this much more flexible!
Client side filtering with streams
Let’s first of all try to think what should happen by thinking in streams of data. We will then try to reason about how we can use these streams, combine them and create a result.
If you think about it, we have two inputs that might change our view. On the one hand, we have our list of characters, which should be displayed. And on the other hand we have the dropdown which might filter this list.
Let’s look at the marble diagrams of what these streams might look like:
The resulting stream we want is one that holds an array with the filtered characters. If you think about the two input streams we just created, this resulting stream is actually a combination of both of the input streams. If we have characters, we want to combine these with the filter and display them onto the screen. If the filter changes, we want to re-execute this logic. If we would have new characters (think about a stream from Firebase), we would also want to re-execute this logic.
It turns out that RxJS provides us with a perfect operator to do something like this: combineLatest
. This operator merges streams by executing a projector function on the latest values of these streams.
The resulting stream looks like this:
Note: You can notice here that the result stream only holds a value when both of the streams have emitted a single value. This is a precondition of the combineLatest
operator. It will only emit an event onto the newly created stream if all source observables have emitted at least one element. If we think about our example, this means that the gender filter should already have a value to start with.
Let’s take a look at the code!
export class ClientSideFilterComponent implements OnInit {
filter$: BehaviorSubject<string>;
characters$: Observable<StarWarsCharacter[]>;
filteredCharacters$: Observable<StarWarsCharacter[]>;
constructor(private starWarsService: StarWarsService) {
}
ngOnInit() {
// We create a stream ourselves to map an event form the child
// component to a stream of 'filter values'.
// We use a BehaviorSubject because this will have an initial
// value. This is important because the combineLatest operator
// we will use below only works if every stream has emitted
// at least one value.
this.filter$ = new BehaviorSubject("All");
// we keep the stream containing our characters
this.characters$ = this.starWarsService.getCharacters();
// we create a new stream based on the two input
// streams we defined
this.filteredCharacters$ = this.createFilterCharacters(
this.filter$,
this.characters$
);
}
public createFilterCharacters(
filter$: Observable<string>,
characters$: Observable<StarWarsCharacter[]>) {
// We combine both of the input streams using the combineLatest
// operator. Every time one of the two streams we are combining
// here changes value, the project function is re-executed and
// the result stream will get a new value. In our case this is
// a new array with all the filtered characters.
return combineLatest(
characters$,
filter$, (characters: StarWarsCharacter[], filter: string) => {
// this is the project function where we imperatively
// implement the filtering logic
if (filter === "All") return characters;
return characters.filter(
(character: StarWarsCharacter) =>
character.gender.toLowerCase()
=== filter.toLowerCase()
);
});
}
filterChanged(value: string) {
// Everytime we have new value, we pass it to the filter$
this.filter$.next(value);
})
}
We can use the new stream we created to bind in the view using the async pipe from Angular like this:

Client side filtering with streams example

<app-gender-filter (filterChange)="filterChanged($event)">
</app-gender-filter>

<app-character-list [characters]="filteredCharacters$ | async">
</app-character-list>

If we look at the code we have now, it’s much more flexible. We do not have to write any extra code if the characters$
would have any new values. We do not need to hold any local copies (this is done implicitely by the combineLatest
operator). If we would want to add new filters, it’s just a matter of adding another stream to the combineLatest$
operator.
We also don’t have to manually unsubscribe from the filteredCharacters$, the async pipe handles this for us.
Conclusion
By thinking in input streams and output streams, we were able to map the inputs we had to a result. We bound the stream in the view layer. Using streams up until the html of our component, we eliminated the need for local copies of data and made our code more robust and open to changes. If we now want to add another filter on top of the list, it’s a piece of cake!
You can find the code on Github .


Sparks revolves around two things - events and data types. Through these two things, all others derive. Presentation is done directly through these
They are also the format that Sparks' presentation objects can use to display data.
The list of data types provided are:


Comments
-
Greg Hurrell
So you say, "otherwise it did not run properly". Do you mean to say that it does run properly after recompiling?
-
anonymous
I mean, that Command-T compiled for Vim 7.2 does not run in Vim 7.3 (problem with loading C-extension), so it should be recompiled. I think, this is because Vim 7.3 uses Ruby 1.9.1.
-- Dmitry Maksimov
-
Greg Hurrell
Ok, thanks for clarifying that. What you describe is actually expected behavior; Command-T must always be compiled and linked against the same version of Ruby that Vim itself is linked against.
I try to cover this in the documentation, particularly the "TROUBLE-SHOOTING" section, although I am going to update it now that 7.3 is officially out, and at least on Windows, it is now linked against Ruby 1.9.1.
-
Greg Hurrell
Ok, I've updated the docs in this commit.
-
Greg Hurrell
Status changed:
- From: new
- To: closed
-
anonymous
Wincent, I reported bug not about command-t compilation issues with Vim 7.3. Sorry, if I was unclear. The bug is about Vim 7.3 crash on pressing Esc button after calling :CommandT.
-
Greg Hurrell
Sounds like you've miscompiled Command-T.
What was the output when you ran
ruby exconf.rb
andmake
?What is the output of
vim --version
?What is the output of
ruby --version
?What version of Vim are you running? Is this a binary download from www.vim.org is it a build that you've compiled yourself from source?
-
anonymous
ruby --version
ruby 1.9.1p430 (2010-08-16 revision 28998) [i386-mingw32]
vim --version
VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Aug 15 2010 15:06:59) MS-Windows 32-bit console version Compiled by Bram@KIBAALE Big version without GUI. Features included (+) or not (-): +arabic +autocmd -balloon_eval -browse ++builtin_terms +byte_offset +cindent +clientserver +clipboard +cmdline_compl +cmdline_hist +cmdline_info +comments +conceal +cryptv +cscope +cursorbind +cursorshape +dialog_con +diff +digraphs -dnd -ebcdic +emacs_tags +eval +ex_extra +extra_search +farsi +file_in_path +find_in_path +float +folding -footer +gettext/dyn -hangul_input +iconv/dyn +insert_expand +jumplist +keymap +langmap +libcall +linebreak +lispindent +listcmds +localmap -lua +menu +mksession +modify_fname +mouse -mouseshape +multi_byte +multi_lang -mzscheme -netbeans_intg -osfiletype +path_extra -perl +persistent_undo -postscript +printer -profile -python -python3 +quickfix +reltime +rightleft -ruby +scrollbind +signs +smartindent -sniff +startuptime +statusline -sun_workshop +syntax +tag_binary +tag_old_static -tag_any_white -tcl -tgetent -termresponse +textobjects +title -toolbar +user_commands +vertsplit +virtualedit +visual +visualextra +viminfo +vreplace +wildignore +wildmenu +windows +writebackup -xfontset -xim -xterm_save -xpm_w32 system vimrc file: "$VIM\vimrc" user vimrc file: "$HOME\_vimrc" 2nd user vimrc file: "$VIM\_vimrc" user exrc file: "$HOME\_exrc" 2nd user exrc file: "$VIM\_exrc" Compilation: cl -c /W3 /nologo -I. -Iproto -DHAVE_PATHDEF -DWIN32 -DFEAT_CSCOPE -DWINVER=0x0400 -D_WIN32_WINNT= 0x0400 /Fo.\ObjC/ /Ox /GL -DNDEBUG /Zl /MT -DDYNAMIC_ICONV -DDYNAMIC_GETTEXT -DFEAT_BIG /Fd.\ObjC/ /Zi Linking: link /RELEASE /nologo /subsystem:console /LTCG:STATUS oldnames.lib kernel32.lib advapi32.lib shell32.lib gdi32. lib comdlg32.lib ole32.lib uuid.lib /machine:i386 /nodefaultlib libcmt.lib user32.lib /PDB:vim.pdb -debug
ruby extconf.rb
checking for ruby.h... yes creating Makefile
make
gcc -I. -Id:/bin/ruby191/include/ruby-1.9.1/i386-mingw32 -I/d/bin/ruby191/include/ruby-1.9.1/ruby/backward -I/d/bin/ruby 191/include/ruby-1.9.1 -I. -DHAVE_RUBY_H -O2 -g -Wall -Wno-parentheses -std=c99 -Wall -Wextra -Wno-unused-parameter -o ext.o -c ext.c gcc -I. -Id:/bin/ruby191/include/ruby-1.9.1/i386-mingw32 -I/d/bin/ruby191/include/ruby-1.9.1/ruby/backward -I/d/bin/ruby 191/include/ruby-1.9.1 -I. -DHAVE_RUBY_H -O2 -g -Wall -Wno-parentheses -std=c99 -Wall -Wextra -Wno-unused-parameter -o match.o -c match.c gcc -I. -Id:/bin/ruby191/include/ruby-1.9.1/i386-mingw32 -I/d/bin/ruby191/include/ruby-1.9.1/ruby/backward -I/d/bin/ruby 191/include/ruby-1.9.1 -I. -DHAVE_RUBY_H -O2 -g -Wall -Wno-parentheses -std=c99 -Wall -Wextra -Wno-unused-parameter -o matcher.o -c matcher.c gcc -shared -s -o ext.so ext.o match.o matcher.o -L. -Ld:/bin/ruby191/lib -L. -Wl,--enable-auto-image-base,--enable-aut o-import -lmsvcrt-ruby191 -lshell32 -lws2_32
-
Greg Hurrell
According the the output you pasted in from
vim --version
, your Vim wasn't compiled with Ruby support (note the-ruby
in the output, and the lack of Ruby-related flags in the compilation and linking output. -
Alva
I suffered the same problem too.
I am using win7, Chinese Simple Pro Edition. the following is about my environment:
--> ruby 1.9.1p429 (2010-07-02 revision 28523) [i386-mingw32] VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Aug 15 2010 15:14:24) +arabic +autocmd +balloon_eval +browse ++builtin_terms +byte_offset +cindent +clientserver +clipboard +cmdline_compl +cmdline_hist +cmdline_info +comments +conceal +cryptv +cscope +cursorbind +cursorshape +dialog_con_gui +diff +digraphs -dnd -ebcdic +emacs_tags +eval +ex_extra +extra_search +farsi +file_in_path +find_in_path +float +folding -footer +gettext/dyn -hangul_input +iconv/dyn +insert_expand +jumplist +keymap +langmap +libcall +linebreak +lispindent +listcmds +localmap -lua +menu +mksession +modify_fname +mouse +mouseshape +multi_byte_ime/dyn +multi_lang -mzscheme +netbeans_intg +ole -osfiletype +path_extra +perl/dyn +persistent_undo -postscript +printer -profile +python/dyn +python3/dyn +quickfix +reltime +rightleft +ruby/dyn +scrollbind +signs +smartindent -sniff +startuptime +statusline -sun_workshop +syntax +tag_binary +tag_old_static -tag_any_white +tcl/dyn -tgetent -termresponse +textobjects +title +toolbar +user_commands +vertsplit +virtualedit +visual +visualextra +viminfo +vreplace +wildignore +wildmenu +windows +writebackup -xfontset -xim -xterm_save +xpm_w32 Compiled : cl -c /W3 /nologo -I. -Iproto -DHAVE_PATHDEF -DWIN32 -DFEAT_CSCOPE -DFEAT_NETBEANS_INTG -DFEAT_XPM_W32 -DWINVER=0x0400 -D_WIN32_WINNT=0x0400 /Fo.\ObjGOLYHTR/ /Ox /GL -DNDEBUG /Zl /MT -DFEAT_OLE -DFEAT_MBYTE_IME -DDYNAMIC_IME -DFEAT_GUI_W32 -DDYNAMIC_ICONV -DDYNAMIC_GETTEXT -DFEAT_TCL -DDYNAMIC_TCL -DDYNAMIC_TCL_DLL=\"tcl83.dll\" -DDYNAMIC_TCL_VER=\"8.3\" -DFEAT_PYTHON -DDYNAMIC_PYTHON -DDYNAMIC_PYTHON_DLL=\"python27.dll\" -DFEAT_PYTHON3 -DDYNAMIC_PYTHON3 -DDYNAMIC_PYTHON3_DLL=\"python31.dll\" -DFEAT_PERL -DDYNAMIC_PERL -DDYNAMIC_PERL_DLL=\"perl512.dll\" -DFEAT_RUBY -DDYNAMIC_RUBY -DDYNAMIC_RUBY_VER=191 -DDYNAMIC_RUBY_DLL=\"msvcrt-ruby191.dll\" -DFEAT_BIG /Fd.\ObjGOLYHTR/ /Zi Linking: link /RELEASE /nologo /subsystem:windows /LTCG:STATUS oldnames.lib kernel32.lib advapi32.lib shell32.lib gdi32.lib comdlg32.lib ole32.lib uuid.lib /machine:i386 /nodefaultlib gdi32.lib version.lib winspool.lib comctl32.lib advapi32.lib shell32.lib /machine:i386 /nodefaultlib libcmt.lib oleaut32.lib user32.lib /nodefaultlib:python27.lib /nodefaultlib:python31.lib e:\tcl\lib\tclstub83.lib WSock32.lib e:\xpm\lib\libXpm.lib /PDB:gvim.pdb -debug
make:
gcc -I. -IC:/Ruby19/include/ruby-1.9.1/i386-mingw32 -I/C/Ruby19/include/ruby-1.9 .1/ruby/backward -I/C/Ruby19/include/ruby-1.9.1 -I. -DHAVE_RUBY_H -O2 -g -Wal l -Wno-parentheses -std=c99 -Wall -Wextra -Wno-unused-parameter -o ext.o -c ex t.c gcc -I. -IC:/Ruby19/include/ruby-1.9.1/i386-mingw32 -I/C/Ruby19/include/ruby-1.9 .1/ruby/backward -I/C/Ruby19/include/ruby-1.9.1 -I. -DHAVE_RUBY_H -O2 -g -Wal l -Wno-parentheses -std=c99 -Wall -Wextra -Wno-unused-parameter -o match.o -c match.c gcc -I. -IC:/Ruby19/include/ruby-1.9.1/i386-mingw32 -I/C/Ruby19/include/ruby-1.9 .1/ruby/backward -I/C/Ruby19/include/ruby-1.9.1 -I. -DHAVE_RUBY_H -O2 -g -Wal l -Wno-parentheses -std=c99 -Wall -Wextra -Wno-unused-parameter -o matcher.o - c matcher.c gcc -shared -s -o ext.so ext.o match.o matcher.o -L. -LC:/Ruby19/lib -L. -Wl,-- enable-auto-image-base,--enable-auto-import -lmsvcrt-ruby191 -lshell32 -lws2_ 32
-
Greg Hurrell
I'm on a Mac here so I don't know too much about the nuances of compiling this on Windows.
At least at a glance things look ok (ie. Vim seems to want
msvcrt-ruby191.dll
and Command-T was linked againstmsvcrt-ruby191
during themake
, so they seem to match).I see you're using MinGW. Never used it myself, but did you use it to compile your own Ruby? Did you compile your own Vim? You could try doing that, although it may be opening a can of worms.
-
Alva
thanks for your reply.
I download vim 7.3 from official site
ant MinGw is shipped with ruby dev-kit
I have googled this problem for the whole afternoon, I noticed that someone encounter problem with c extensions on ruby 1.9.1. here is the test module.
// Demonstrating what's presumed to be a Ruby 1.9 bug // Where test.rb contains: // require 'rubygems' // The error raised is that Mutex can't find the method 'synchronize' [/tags/include #include] <ruby.h> static char ** s_argv; static int s_argc = 1; int main() { s_argv = (char **) calloc(2, sizeof(char *)); s_argv[0] = "Embedded Ruby"; s_argv[1] = NULL; ruby_sysinit(&s_argc, &s_argv); { RUBY_INIT_STACK; ruby_init(); ruby_script("BrowserPlus Embedded Ruby"); ruby_init_loadpath(); rb_require("test.rb"); } }
-
Greg Hurrell
As an alternative then you could try using the Vim 7.3 build from the Cream project, which links against 1.8.7, not 1.9.
http://sourceforge.net/projects/cream/files/Vim
This is just normal Vim without any of the Cream stuff added.
-
Alva
for a project I want to use Python 2.7 and official Vim7.3 support this python version, but the cream version doesn't.
command-t is one of my favorite vim plugins, I just want it became better, so I reported this issue. if you have time, please try to fix this, it would be good, if it get fixed before vim7.3 get popular. best regards.
-
Greg Hurrell
Yes, I'd like to fix it. But from what you're suggesting, it looks to be a bug in Ruby 1.9. It might be possible to work around it inside Vim itself, or perhaps in Command-T, but I'm not sure about it.
If you're forced to use Ruby 1.8 but also need Python 2.7, then I guess compiling your own Vim might be the only option, and I imagine that might be difficult on Windows.
-
Alva
I did a little research into command-t last night. I don't think the problem is ruby's fault now. I tested the phrase of crash and read command-t source code The C extension is only used for quick match, am I right? but the matcher works! the result lines can be selected. the highlight line can be moved
I think the problem is on closing the matcher/prompt window, I am not familiar with VIM script nor Ruby so I cann't do more about this. If you have time, you can take some time to test this issue. thanks.
-
Greg Hurrell
So, what actually happens when you try to open the selection? Is anything printed?
It may be related to ticket #1617, "$curbuf.number always returns 0 (zero) instead of actual buffer number on some platforms/Vim versions", so take a look at that one. Does
:ruby puts $curbuf.number
ouput 0 for you? -
Alva
$curbuf.number is not zero for me.
BTW, vim7.3's with ruby 191 is really buggy, not only just with command-t, when you open a ruby file, some errors like prompt, sometimes when vim crashs when you use aotocomplete of ruby. Have you notice that? or just I am using windows platform?
BTW, I compiled vim7.3.3 with Python 2.7 and Ruby 187 on windows, it was not so hard as imagine, vim works well now! And I noticed command-t ruby extension cann't be compiled with MS VS compiler, because MS VS doesn't support c99, and command-t doesn't always declare variable at begining lines of a function.
-
Greg Hurrell
Have you notice that?
No I haven't noticed it as I am not using Ruby 1.9, nor in Vim nor anywhere. (In fact, I only have it installed under RVM so that I can test different versions of my software against it.) I've always been a bit puzzled by people's desire to start using 1.9 everywhere and as soon as possible; for me Vim is a tool for getting jobs done, and Ruby too, so there's no reason why I would ever use anything other than the system Ruby (which for me right now means 1.8.7).
-
Alva
I totally agree with you. But in open source ecosystem, many things (software) are linked together just like food chain.
For me, I am not using Ruby, instead, I use python everywhere ruby may be used, but I like command-t, so I have to install ruby :), I even thought about to learn the spirits of your code and rewrite command-t in Python!. Just because I want to use Python 2.7 and utilize some new features, vim 7.3 involved and then ruby 19, the food chain has been established. After the struggling, I think I will just stay on Ruby 1.8.7 as Long as possible, as my present requirement is just make command-t work, and it works well in Ruby 1.8.7.
-
anonymous
I had the same problems with gvim 7.3 and Ruby 1.9.1 as mentioned above. After investigating this a little bit, I realized it has something to do with the Ruby binding itself. For example, VIM crashed after accessing a global variable in Ruby plugin code.
However, I found a solution in installing "Vim without Cream" from the Cream website, together with Ruby 1.8.7. This combo works like a charm with command-t and other Ruby plugins, like LustyJuggler for example.
-
anonymous
This issue was recently patched in vim - [http://ftp.vim.org/vim/patches/7.3/7.3.088].
I have uploaded a patched gvim binary [https://github.com/downloads/codito/vim-config/gvim.win<IP_ADDRESS>.zip|here]. It has vim 7.3 + Ruby 1.9.2. Works great for me on Windows 7 :)
-
anonymous
Above drop of gvim.exe doesn't work. Here's another patched drop which works - http://wyw.dcweb.cn/vim/gvim73.zip
-
anonymous
Created
,
edited
Above drop of gvim.exe doesn't work. Here's another patched drop which works - http://wyw.dcweb.cn/vim/gvim73.zip
It works smoothly on XP with vim version 7.3.138
cheers
-
anonymous
I couldn't download the file from dcweb.cn for some reason. But I grabbed the one from https://github.com/downloads/codito/vim-config/gvim.win<IP_ADDRESS>.zip and it worked for me once I put libstdc++-6.dll and libgcc_s_sjlj-1.dll from the RubyDevKit in to the vim73 directory.
You guys should put a link to this issue on the front page. I put up without Command-T on Windows for a whole year :) But the fix is actually pretty simple.
Add a comment
Comments are now closed for this issue.


Purple Martians
Technical Code Descriptions
Netgame - Client Control Change
Client's controls have changed
Server receives control change
Client's controls have changed
Every frame, the client's controls are compared with their previous state.
If they have changed:
- an entry is put in the client's local game moves array (in case the change needs to be played back later)
- a 'cdat' packet with the control change and frame number is sent to the server
- the change is applied to the client's local game state
void mwPlayer::proc_player_input(void)
{
...
if (loc[p].comp_move != comp_move_from_players_current_controls(p)) // player's controls have changed
{
mGameMoves.add_game_move(mLoop.frame_num, 5, p, loc[p].comp_move);
if (cm == 4) // in client mode, send cdat packet, and apply move directly to controls
{
mNetgame.Packet("cdat");
mNetgame.PacketPut1ByteInt(p);
mNetgame.PacketPut4ByteInt(mLoop.frame_num);
mNetgame.PacketPut1ByteInt(loc[p].comp_move);
mNetgame.ClientSend(mNetgame.packetbuffer, mNetgame.packetsize);
set_controls_from_comp_move(p, loc[p].comp_move);
Server receives control change
When the server receives a 'cdat' packet from a client, the server compares the frame number of the client's control change to the frame number of the last saved state on the server.
If it is earlier, the cdat arrived too late to be applied and is discarded.
Otherwise the client's control change is added to the server's game moves array.
void mwNetgame::server_proc_cdat_packet(double timestamp)
{
char msg[1024];
int p = PacketGet1ByteInt();
int cdat_frame_num = PacketGet4ByteInt();
int cm = PacketGet1ByteInt();
mPlayer.loc[p].client_cdat_packets_tx++;
// calculate game_move_sync
mPlayer.loc[p].server_game_move_sync = cdat_frame_num - mLoop.frame_num;
// calculate game_move_dsync
mPlayer.loc[p].game_move_dsync = ( (double) mPlayer.loc[p].server_game_move_sync * 0.025) + mTimeStamp.timestamp_frame_start - timestamp;
mTally_game_move_dsync_avg_last_sec[p].add_data(mPlayer.loc[p].game_move_dsync); // add to average tally
// check to see if earlier than the last stdf state
if (cdat_frame_num < srv_client_state_frame_num[0][1])
{
mPlayer.loc[p].late_cdats++;
mTally_late_cdats_last_sec[p].add_data(1); // add to tally
sprintf(msg, "rx cdat p:%d fn:[%d] sync:[%d] late - droppped\n", p, cdat_frame_num, mPlayer.loc[p].server_game_move_sync);
}
else
{
mGameMoves.add_game_move(cdat_frame_num, 5, p, cm); // add to game_move array
sprintf(msg, "rx cdat p:%d fn:[%d] sync:[%d] gmep:[%d] - entered\n", p, cdat_frame_num, mPlayer.loc[p].server_game_move_sync, mGameMoves.entry_pos);
}
if (mLog.LOG_NET_cdat) mLog.add_log_entry2(35, p, msg);
}


Just some text..
Just some text..1
Just some text..2
Just some text..3
Just some text..4
Just some text..5
Just some text..6


TERMS OF SERVICE
This is a test page that I have set up so that I can adjust the terms of service
and see how the script reacts to it. CHANGE!


WITNESS LIST Appropriations-S/C on General Government Committee (Subcommittee on General Government) February 6, 2001-7:00A Budget For: Bailey, Ken (Self) Brey, Carol (Self) Bryan, J.P. (Self) Campbell, Helen (Self) Homer, Andrew (Texas Public Employees Association) Muniz, Joseph (Self) Rich, Marvin (Self) On: Barton, Bill (Employees Retirement System) Batiste, John (Texas Commission on the Arts) Beckett, Sheila (Employees Retirement System) Bloom, Ed (Texas Incentive and Productivity Commission) Bow, Jonathan (SORM) Bremer, Dan (General Services Commission) Cargile, Stuart (State Office of Risk Management) Chiveaux, Tony (Texas Commission on the Arts) Colley, Terry (Texas Historical Commission) Crawford, Rick (State Preservation Board) Davenport, John (General Services Commission) Dillon, Ann (General Services Commission) Grave, Stan (Texas Historical Commission) Hill, Cynthia (General Services Commission) Josselet, Ron (State Office of Risk Management) Kelly, Brian (General Services Commission) Oaks, Lawerence (Texas Historical Commission) Park, Catherine (Texas State Library and Archives Commission) Pickett, Sandra (Texas State Library and Archives Commission) Robinson, Steve (Texas Productivity and Incentive Commission) Rudd, Peggy (Texas State Library and Archives Commission) Sandefer, Morris (Fire Fighters' Pension Commission) Sanders, Sid (General Services Commission) Schlimper, Paul (General Services Commission) Shull, Gene (General Services Commission) Sinclair, Dorothy (General Services Commission) Valdez, Sal (General Services Commission) Registering, but not testifying: For: McGinnis, Larry (Department of Public Safety Officers Association) Melina Rabb, Ted (Texas State Employees Union)


About
Business Informatics engineer with 5 years of experience as a software developer. I consider myself a solution designer, problem solver, highly motivated and hardworking individual, who loves math, science, and knowledge. I have been working on a variety of technologies along the software development life cycle, planning, analysis, design, implementation, testing, deployment, and maintenance.
Software Developer.
You can find below some basic information about me.
- Birthday: May 31st, 1994
- City: Cartago, Costa Rica
- Degree: Bachelor
- Age: 29
I am expecting and excited for new challenges that can come because any new challenge, comes with new opportunities to do my best and increase my knowledge.
Skills
Here are some of my technical skills and soft skills:
Technical
PlatformsB2+ level based on CEFR
CompTIA Linux+
Git GitHub Bitbucket Jira Vim VS Code Cypress Entity Framework JWT JSON GraphQL RestFul WS ESLint Jenkins SPA AWS Azure Apollo Python Pandas
Soft
- Strong organizational and prioritization skills along with keen attention to detail.
- Good interpersonal and organizational skills, with an ability to work both independently and collaboratively.
- Fast learning, responsibility, attention to detail, critical thinking, self-taught, teamwork, logical reasoning, and discipline.
Resume
Here is my 5 years experience as a software developer. I have been working on a variety of technologies along the software development life cycle, planning, analysis, design, implementation, testing, deployment, and maintenance.
Education
Degree in Project Management
2022 - Present
Universidad Estatal a Distancia, Cartago, CR
Bachelor's Degree in Business Informatics
2014 - 2022
Universidad de Costa Rica, Cartago, CR
Senior Technician in Service Center
2013 - 2014
CENFOTEC University, San José, CR
Websites and Video Games Development Course
2013
CENFOTEC University, San José, CR
Languages
English
Advanced
Graduated from CENFOTEC University, San José, CR
German
Beginner
Spanish
Native
Professional Experience
Pathology Cards
2023
Professional services for a physician
- Application of cards with information about pathology diseases, one side the image and name, and the other side the description.
-
NextJS ReactJS TypeScript CSS Cloudinary
PEP 2.0 Budget Execution Platform
2020
Costa Rica's National Laboratory of Materials and Structural Models (LANAMME - UCR)
- Solution that facilitates and conduct the tasks related to the budget planning and execution of the institution, including the payroll and project formulation sections with their budgets.
-
C# .NET SQL Server
Criminal Profiling System
2018 - 2019
Costa Rica's Judicial Investigation Organism (OIJ)
- System to save the profiles of the criminals that are processed, so the OIJ can keep track of each of them and easily look for their information.
-
Visual Basic ASP.NET SQL Server
DearGift
2017
Students of Business Administration at ExpoInnova University of Costa Rica 2017
- Application to find a perfect gift for a special person based on given preferences, with scheduling and budget adjustment.
-
Apache Cordova PHP MySQL
EDP Digital Personal Files
2021 - 2022
Costa Rica's National Laboratory of Materials and Structural Models (LANAMME - UCR)
- System that aims to digitize the records that are currently in physical format, which belong to the staff of the Lanamme institution.
-
C# ASP.NET
CMEC 2.0 Assets Control
2019
Costa Rica's National Laboratory of Materials and Structural Models (LANAMME - UCR)
- System for control and maintenance for the assets of the information technology unit, whose purpose is to keep under revision the status of each technological asset by giving corrective and preventive maintenance.
-
C# .NET SQL Server
Parking System
2018
Costa Rica's Judicial Investigation Organism (OIJ)
- The purpose is to have better control of internal and external vehicles to assign the available spaces correctly.
-
Visual Basic ASP.NET SQL Server
Contact Me
Feel free to contact me, just leave your name, your email address where I can contact you back, and your message.
I will contact you as soon as I can.
Location:
Cartago, CR


Congo Ebola 22 Nov 2019, 23:56 by Jerome Delay (AP Photo/Jerome Delay, File)Jerome Delay As featured on


How to use the Feathers ScrollBar
component
The ScrollBar
component selects a numeric value in a specific range by dragging a thumb along a track, or by triggering one of its step buttons at the beginning or end of the track. A scroll bar may be displayed in either a horizontal or a vertical direction. This component is designed to be used with components that support scrolling, like ScrollContainer
and List
.
The Basics
You can use the ScrollBar
with a class like ScrollContainer
or List
by instantiating it in the horizontalScrollBarFactory
or the verticalScrollBarFactory
.
list.horizontalScrollBarFactory = function():IScrollBar
{
return new ScrollBar();
}
The container will automatically handle setting properties like direction
, minimum
, maximum
, and step
, and it will automatically listen for Event.CHANGE
to know when the value
property changes.
Skinning a ScrollBar
The skins for a ScrollBar
control are divided into several parts, including the thumb, the track(s), and the increment and decrement buttons. For full details about what skin and style properties are available, see the ScrollBar
API reference.
Track(s) and Layout
The scroll bar's track is made from either one or two buttons, depending on the value of the trackLayoutMode
property. The default value of this property is TrackLayoutMode.SINGLE
, which creates a single track that fills the entire width and height of the scroll bar.
If we'd like to have separate buttons for both sides of the track (one for the minimum side and another for the maximum side), we can set trackLayoutMode
to TrackLayoutMode.SPLIT
. In this mode, the width or height of each track (depending on the direction of the scroll bar) is adjusted as the thumb moves to ensure that the two tracks always meet at the center of the thumb.
TrackLayoutMode.SINGLE
is often best for cases where the track's appearance is mostly static. When you want down or hover states for the track, TrackLayoutMode.SPLIT
works better because the state will only change on one side of the thumb, making it more visually clear to the user what is happening.
When the value of trackLayoutMode
is TrackLayoutMode.SINGLE
, the scroll bar will have a minimum track, but it will not have a maximum track. The minimum track will fill the entire region that is scrollable.
Skinning the Thumb
This section only explains how to access the thumb sub-component. Please read How to use the Feathers Button
component for full details about the skinning properties that are available on Button
components.
With a Theme
If you're creating a theme, you can target the ScrollBar.DEFAULT_CHILD_STYLE_NAME_THUMB
style name.
getStyleProviderForClass( Button )
.setFunctionForStyleName( ScrollBar.DEFAULT_CHILD_STYLE_NAME_THUMB, setScrollBarThumbStyles );
The styling function might look like this:
private function setScrollBarThumbStyles( thumb:Button ):void
{
var skin:ImageSkin = new ImageSkin( texture );
skin.scale9Grid = new Rectangle( 2, 3, 1, 6 );
thumb.defaultSkin = skin;
}
You can override the default style name to use a different one in your theme, if you prefer:
scrollBar.customThumbStyleName = "custom-thumb";
You can set the function for the customThumbStyleName
like this:
getStyleProviderForClass( Button )
.setFunctionForStyleName( "custom-thumb", setScrollBarCustomThumbStyles );
Without a Theme
If you are not using a theme, you can use thumbFactory
to provide skins for the scroll bar's thumb:
scrollBar.thumbFactory = function():Button
{
var thumb:Button = new Button();
//skin the thumb here, if not using a theme
var skin:ImageSkin = new ImageSkin( texture );
skin.scale9Grid = new Rectangle( 2, 3, 1, 6 );
thumb.defaultSkin = skin;
return thumb;
}
Skinning the Minimum Track
This section only explains how to access the minimum track sub-component. Please read How to use the Feathers Button
component for full details about the skinning properties that are available on Button
components.
With a Theme
If you're creating a theme, you can target the ScrollBar.DEFAULT_CHILD_STYLE_NAME_MINIMUM_TRACK
style name.
getStyleProviderForClass( Button )
.setFunctionForStyleName( ScrollBar.DEFAULT_CHILD_STYLE_NAME_MINIMUM_TRACK, setScrollBarMinimumTrackStyles );
The styling function might look like this:
private function setScrollBarMinimumTrackStyles( track:Button ):void
{
var skin:ImageSkin = new ImageSkin( texture );
skin.scale9Grid = new Rectangle( 2, 3, 1, 6 );
track.defaultSkin = skin;
}
You can override the default style name to use a different one in your theme, if you prefer:
scrollBar.customMinimumTrackStyleName = "custom-minimum-track";
You can set the function for the customMinimumTrackStyleName
like this:
getStyleProviderForClass( Button )
.setFunctionForStyleName( "custom-minimum-track", setScrollBarCustomMinimumTrackStyles );
Without a Theme
If you are not using a theme, you can use minimumTrackFactory
to provide skins for the scroll bar's minimum track:
scrollBar.minimumTrackFactory = function():Button
{
var track:Button = new Button();
//skin the minimum track here, if not using a theme
var skin:ImageSkin = new ImageSkin( texture );
skin.scale9Grid = new Rectangle( 2, 3, 1, 6 );
track.defaultSkin = skin;
return track;
}
Skinning the Maximum Track
This section only explains how to access the maximum track sub-component. Please read How to use the Feathers Button
component for full details about the skinning properties that are available on Button
components.
The scroll bar's maximum track may be skinned similarly to the minimum track. The style name to use with themes is ScrollBar.DEFAULT_CHILD_STYLE_NAME_MAXIMUM_TRACK
or you can customize the style name with customMaximumTrackStyleName
. If you aren't using a theme, then you can use maximumTrackFactory
.
Skinning the Decrement Button
This section only explains how to access the decrement button sub-component. Please read How to use the Feathers Button component for full details about the skinning properties that are available on Button
components.
With a Theme
If you're creating a theme, you can target the ScrollBar.DEFAULT_CHILD_STYLE_NAME_DECREMENT_BUTTON
style name.
getStyleProviderForClass( Button )
.setFunctionForStyleName( ScrollBar.DEFAULT_CHILD_STYLE_NAME_DECREMENT_BUTTON, setScrollBarDecrementButtonStyles );
The styling function might look like this:
private function setScrollBarDecrementButtonStyles( button:Button ):void
{
var skin:ImageSkin = new ImageSkin( texture );
skin.scale9Grid = new Rectangle( 2, 3, 1, 6 );
button.defaultSkin = skin;
}
You can override the default style name to use a different one in your theme, if you prefer:
scrollBar.customDecrementButtonStyleName = "custom-decrement-button";
You can set the function for the customDecrementButtonStyleName
like this:
getStyleProviderForClass( Button )
.setFunctionForStyleName( "custom-decrement-button", setScrollBarCustomDecrementButtonStyles );
Without a Theme
If you are not using a theme, you can use decrementButtonFactory
to provide skins for the scroll bar's decrement button:
scrollBar.decrementButtonFactory = function():Button
{
var button:Button = new Button();
//skin the decrement button here, if not using a theme
var skin:ImageSkin = new ImageSkin( texture );
skin.scale9Grid = new Rectangle( 2, 3, 1, 6 );
button.defaultSkin = skin;
return button;
}
Skinning the Increment Button
This section only explains how to access the increment button sub-component. Please read How to use the Feathers Button
component for full details about the skinning properties that are available on Button
components.
The scroll bar's increment button may be skinned similarly to the decrement button. The style name to use with themes is ScrollBar.DEFAULT_CHILD_STYLE_NAME_INCREMENT_BUTTON
or you can customize the style name with customIncrementButtonStyleName
. If you aren't using a theme, then you can use incrementButtonFactory
.


| Table 1 |
Summary of the main hydrogeological and chemical status of t ... |
| Table 2 |
Annual median temperature and rainfall variations for the 20 ... |
| Table 3 |
Summary of available resources, as R/ P, according to publis ... |
| Table 4 |
Aquifer, land use, and hydrological characteristics of the s ... |
| Table 5 |
Annual average values per crop type in the studied region |
| Table 6 |
Crop surfaces in hectare |
| Table 7 |
Crop surfaces in % |
| Table 8 |
Estimation of the percentage of nitrogen excess |


Grid Construction and Differential Operators¶
- File Location: sparse_grid/tutorials/tutorial1.m
- Expected Reading Time: XXXX mins.
The Sparse Grid Toolbox is designed to allow practitioners use sparse grid approximations without requiring an understanding of the underlying mathematical/implementation theory. People who want to get the intuitions for sparse grids should read section 3 of [Ahn, 2018].
Function Approximation¶
As an example of function approximation, we will approximate \(f(x,y) = \sin(x) + \cos(y)\) on \([0,1]^2\) with sparse grids. To start, we need to add the folder to the toolbox in path, and initialize a sparse_grid
object by
>> addpath('/path/to/folder/sparse_grid/src');
>> grid = sparse_grid;
To build a sparse grid of level 5 in 2 dimensions, we call init_grid
>> grid.init_grid(2, 5);
For a memory device the argument is in alphabetical order, i.e., init_grid(dimension, level)
. Through this function call, the class takes care of everything under the hood. At this point, the grid is ready for use (but differential operators are not set yet).
First, let’s make a plot of the \(f(x,y)\). The position of the grid points are saved in x_i
as a cell-array with the index corresponding to the coordinate direction. Hence, we can evaluate the function at the corresponding grid points via
>> f_val = sin(grid.x_i{1}) + cos(grid.x_i{2});
and visualize
>> scatter3(grid.x_i{1}, grid.x_i{2}, f_val, '.');
We can see that the grid points are spaced following the classical sparse grid.
Differential Operators¶
Compared to other implementation of the sparse grids, this implementation automates the construction of the finite difference operators, and explicitly builds a sparse matrix. [2] Building differential/difference operators is costly, so only the requested difference operators are computed. This is done by filling in
d_midpoint_input
d_forward_input
d_backward_input
dd_center_input
To have the flexibility of defining different boundary conditions, and different difference operators, different xxx_input
need to be set with functions that define the difference operators for the 1-dimensional case. There are already (1-dimensional) difference operators defined with the toolbox
so one would most likely just need to feed in the pre-defined functions. For example, if we only want the differential operators for the first-dimension, we can set
grid.d_forward_input{1} = @df_dx_forward;
grid.d_backward_input{1} = @df_dx_backward;
grid.d_midpoint_input{1} = @df_dx_center;
grid.dd_center_input{1} = @d2f_dx2_reflecting;
and then call reset_diff_ops
,
grid.reset_diff_ops();
which checks the inputs and populated the difference operators at
Hence, we can evaluate the forward finite difference operator by using d_forward
, and compare to the true value of \(cos(x)\) by
>> forward_derivatives = grid.d_forward{1}*f_val;
>> scatter3(grid.x_i{1}, grid.x_i{2}, forward_derivatives, '.');
>> hold on;
>> scatter3(grid.x_i{1}, grid.x_i{2}, cos(grid.x_i{1});
Similarly, one can compute the backward difference operator
>> backward_derivatives = grid.d_backward{1}*f_val;
>> scatter3(grid.x_i{1}, grid.x_i{2}, backward_derivatives, '.');
>> hold on;
>> scatter3(grid.x_i{1}, grid.x_i{2}, cos(grid.x_i{1});
As we can see from the forward and backward difference operators, the solution is only first-order accurate (hence, we see a difference from the true derivative), but the monotoncity requirement of the discretization scheme for solving HJB equations frequently require the directional differences. However, even with the directional derivatives, the scheme itself is accurate for solving HJB equations. [1] Of course, if we are only interested in compute the differential operator in itself and not as a part of solving for the HJB equations, we should use the central difference scheme, which is second-order accurate
>> df_center = grid.d_midpoint{1}*f_val;
>> scatter3(grid.x_i{1}, grid.x_i{2}, df_center, '.');
>> hold on;
>> scatter3(grid.x_i{1}, grid.x_i{2}, cos(grid.x_i{1}));
Finally, the second-order difference operator can be computed using dd_center
.
>> ddf = grid.dd_center{1}*f_val;
>> scatter3(grid.x_i{1}, grid.x_i{2}, ddf, '.');
>> hold on;
>> scatter3(grid.x_i{1}, grid.x_i{2}, -sin(grid.x_i{1}));
However, the boundaries are in a different scale than the internal values. This is because of the reflecting boundary condition. d2f_dx2_reflecting()
automatically adjusts the boundary condition for the reflecting boundary. We can set the boundary values to 0 for visualization by using boundaries
>> ddf(grid.boundaries{1,1}) = 0; % upper boundary
>> ddf(grid.boundaries{1,2}) = 0; % lower boundary
>> scatter3(grid.x_i{1}, grid.x_i{2}, ddf, '.');
>> hold on;
>> scatter3(grid.x_i{1}, grid.x_i{2}, -sin(grid.x_i{1}));
Lastly, if the computation is only for the second differential operator without reflecting boundary, we can call d2f_dx2
instead
>> grid.dd_center_input{1} = @d2f_dx2;
>> grid.reset_diff_ops();
>> scatter3(grid.x_i{1}, grid.x_i{2}, ddf, '.');
>> hold on;
>> scatter3(grid.x_i{1}, grid.x_i{2}, -sin(grid.x_i{1}));
We see that this results in better approximation at the boundaries. Also, this highlights, the flexibility of setting difference operators through xxx_input
, one can change different boundary conditions by just changing the function. One can also define any custom difference operator for 1-dimension, and it will be computed for the sparse grid.
Footnotes
| [1] | What matters for the overall accuracy in solving the HJB equation is not necessarily the local accuracy of the differential operators. Things depend on the monotone scheme that’s written, and finite difference scheme is only an intuitive way of constructing a monotone scheme. |
| [2] | [Ahn, 2018] to see when this is a good idea and when it is not. |


Your token has been revoked and is no longer valid. Be sure to update any clients or service connections which currently use this token.


---
layout: post
status: publish
published: true
title: Open Source and Self-Interest
author:
display_name: Tomas Restrepo
login: tomasr
email<EMAIL_ADDRESS>url: http://winterdom.com/
author_login: tomasr
author_email<EMAIL_ADDRESS>author_url: http://winterdom.com/
wordpress_id: 816
wordpress_url: http://winterdom.com/2006/03/opensourceandselfinterest
date: '2006-03-23 04:08:15 +0000'
date_gmt: '2006-03-23 04:08:15 +0000'
categories:
- Development
tags: []
comments: []
---
Scott Hanselman posts a set of intriguing questions on the nature of open source on his latest "Is Open Source a Crap Idea?" post. One of the things he mentions from this article is that most people contribute to Open Source software out of self-interest, and I think I would agree with it.
I know at least that all of my participation in Open Source projects (not that there have been many) were motivated by self-interest:
- When I contributed to NAnt and NAntContrib, I did it because I liked NAnt, but needed a few things to improve in order to use it for the project I was working on at the time. Pretty much all tasks and core changes I submitted were motivated by a specific problem or difficulty we were encountering when automating our build.
- When I contributed to Felix Kazsa's FKSEC library, I did it because I was already familiar with some of the security APIs, but there were some that I really wanted to learn in more depth, and this was an excellent opportunity for that. Besides, I really was getting tired of writing almost the same code all the time I needed to fool around with access tokens.
Really, there's nothing wrong with this (it's not supposed to be a
charity, after all). In fact, I believe this is probably one of the
core ideas in Open Source development, and a good thing altogether, as
it helps ensure you get useful things put into the product, things
someone actually needed.
On the other hand, this also means that, inherently, Open Source developers will tend to work on what they want (which is what makes it fun for them), and not on what regular users of the product need/want. If you want an Open Source project to go someplace, chances are you might need to jump in sooner or later and do the work yourself if no one else is interested (or you can't convince someone that they are interested in it as well), which really doesn't work for a lot of people.


We chose to create a predictor of the stock price of wheat because of the ever-pervasive fluctuation in food prices. Wheat is among one of the most fundamental agricultural commodities in the United States, so understanding and ultimately predicting the price of this commodity will allow us to understand an essential part of our economic ecosystem. Our team has diverse backgrounds in engineering and science, so we wanted to choose a topic that has profound global implications. One of the grand challenges identified by the leaders of the U.N. and world bank is the shortage of food in our ever growing population. We thought it would be interesting for us to be able to build predictive forecasting of the stock price of this key commodity.
Before creating a predictive model for wheat price, we chose to perform exploratory data analysis (EDA) on some of the data features that we had collected. In general, EDA is a means of summarizing the main characteristics of datasets, often with visual methods. Click on each of the EDA modules below to view EDA for each feature.
asfnadgkjadhgahg asj g;kblah
asfbadlgkjahghqag,ladhg,jlkadh
We wrote a predictive model!!!!!!!!!!!!
We wrote a predictive model!!!!!!!!!!!!
Please contact me if you have any comments or inquiries!


CrossFade → Tone
Tone.Crossfade provides equal power fading between two inputs. More on crossfading technique here#Crossfading).
code
var crossFade = new Tone.CrossFade(0.5);
//connect effect A to crossfade from
//effect output 0 to crossfade input 0
effectA.connect(crossFade, 0, 0);
//connect effect B to crossfade from
//effect output 0 to crossfade input 1
effectB.connect(crossFade, 0, 1);
crossFade.fade.value = 0;
// ^ only effectA is output
crossFade.fade.value = 1;
// ^ only effectB is output
crossFade.fade.value = 0.5;
// ^ the two signals are mixed equally.
members
.fade
~
{NormalRange}
The mix between the two inputs. A fade value of 0
will output 100% input[0]
and
a value of 1 will output 100% input[1]
.
methods


Click on Africa Page
to see a map of Africa.
|
|
|
|
|
My neopet Bob100556s page:Here
You can click here to see the cheetah page.
My neopet Wocky1508206s page:Here
Down below, if you click on wk111 on the site you will get back to here.
Cats and Kittens (Power Point)
My special number 10 (Power Point)


Finding a Dr. for you.
Search doctors by name
Search doctors by symptom
Search doctors around Portland
Search doctors near Portland:


genes expression Arabidopsis Plant MIR miRNA miR, miRNAs mature miR embryogenic induction somatic regulation plant (%) analysis early gene transcripts Cell development transcription control advanced RNA regulatory accumulation embryogenesis stress auxin candidate culture expressed indicated level using {border-style Zhang involved differentially px;} response targets #ffffff;} SE, analyzed factors majority microRNA target (Figure data family induction, stage ./s--- MIR, microRNAs ./tpc.. Liu function induction. number observed present results significantly stages transition ARF Click LINK Lin MIRNA Physiol. SE. additional file. followed functional induced levels numerous processing vitro (GO:), ARF, Biol. differential mechanism profiles responses role small support vs. Arabidopsis. Chen Gaj RT-qPCR S). Table Thus, Wang Zhao annotated associated developmental encoding growth identified key modulated molecules pri-miRNA primary thaliana transcript ./pp.. Science TCP biogenesis displayed down-regulation embryo factor including modulation post-transcriptional pri-miRNAs processes relevant reported significant similar (), AGO Dev. Life MIRa Mol. SPL Yang cell cells different down-regulated families miRNAs, patterns performed plants. production px; related root study up-regulation {font-family (Table ./j.-X...x Bartel Bielewicz COTYLEDON Development NF-YA RESPONSE Sci. TFs Technologies) according controlled differentiation extensive font-size highly members postulated products profiling repression seed tissue up-regulated (GO:; .). ./science. ARGONAUTE Arabidopsis, BMC Figure Genes LEAFY MIRs PCR Res. Wójcikowska acid binding biological clustering contribute controls double; explants functions genes, identification increased involvement isolated miR- microRNAs. pathway pathways platform potential protein reactions regulate regulated regulators signaling specific targeting various zygotic (GO:) ./dev. ./fpls.. ./gad. ./pnas.  Accordingly, Chua Dimocarpus Front. Genet. Genomics Han Kit Lai Lai, Larix Lett. Liang MicroRNA MicroRNAs NAC RNAs Regulation Rep. SE-modulated Tang Vaucheret abscisic action active addition, appears article assumed assumption, bold cells. conducted contribution courier; culture. decreased development. diverse documented em; embryos homeostasis interaction isolation lateral leaf leaves light longan manufacturer's miR) miR), miR-mediated molecular monitor operate pattern play possible process pt;} qPCR regulates regulator relation represented responses. rice roots selected stem-loop stresses subjected suggests synthesis targeted terms trans-acting transcribed transcriptional used valuable vegetative °C,


Apple slates Germany over payment law
by Yanitsa BoyadzhievaApple warned of a security risk to Apple Pay in Germany, after the nation agreed legislation which will require providers of mobile financial services to open access to rivals, Reuters reported.
An update to money-laundering protections was agreed this week and is likely to come into force early in 2020, the news agency stated. It will require services including Apple Pay to offer competitors access to their mobile money infrastructure “for a reasonable fee”.
Apple was reportedly surprised by the speed with which the legistlation was approved, telling Reuters the move could pose a risk to its data protection and security systems.
The news outlet noted the legislation was passed despite opposition from Chancellor Angela Merkel’s office.
Apple relies heavily on its digital wallet service and in October recorded a milestone of 3 billion transactions in its fiscal fourth quarter.
The company recently claimed Apple Pay was growing four-times faster than rival electronic payment service PayPal.


Malcolm is an upcoming programmer, he is always open to learn new things and when it's something he is passionate about he doesn't let anything stop him from improving. Dedicated to become the best he stops at nothing from letting him improve himself! Destined to create the best video games in the world, Malcolm will learn it all!
| Mega Man | Viewtiful Joe | Final Fantasy VIII |
|---|---|---|
| Mega Man teaches no matter how many times you fail you get up and try again! | Viewtiful Joe shows that sometimes no matter how serious the situation may be you have to be able to have fun and joke about it. | Final Fantasy let's us know that grand adventures are everywhere and the power of friendship and teamwork can over come all. |


--- layout: default title: Computers, Equipment, Help ---
Windows and Mac desktop computers are available at Parnassus and Mission Bay.
Available to UCSF students, faculty, and staff at the Parnassus Library.
Multimedia equipment, workstations, and support for the purposes of developing instructional content.
Edit and Develop Multimedia
Borrow Equipment
Reserve one of the Library's computer classrooms at Parnassus or Mission Bay.


This field is required.
This field is required to be at least 2 characters.
This field should be a number.
This field cannot be longer than 100 characters.


pumpR Workout Report
Magnus Nissel
2017-02-07
1 About pumpR
I am creating pumpR as a way to get more practical experience with R Markdown and the bookdown package. I’ve also been meaning to take a closer look at my collected workout logs for a while. The project is only a few days old and will hopefully develop into something bigger in due time.
1.1 Using and developing pumpR
If you would like to use pumpR to visualize your own workout data or as a starting point to develop your own R-based workout reports, check out the GitHub repository for pumpR 1. I also welcome you to join me in developing pumpR. The code for pumpR is released under the Apache License 2.0
The name is derived from the german slang term for bodybuilder (Pumper) 2, which is related to the term “pump” describing the temporary increase in muscle size right after high-volume workouts.
Remember: You will never be as big as your pump.
1.2 Features
The following features are (at least partially) implemented
- Import of Fitocracy CSV files (only weight & rep based activities)
- Import of FitNotes CSV files
- Rename exercises via CSV table
- Parse exercises for implement used (barbell, dumbbell etc.) and movement type (push, pull, etc.)
- List all workouts
- Some stastistics (e.g. number of workouts per year, total volume for each of the big four barbell lifts, etc.)
1.3 Planned features
- Normalize exercise names (develop and implement a semantic scheme for exercise naming)
- Parse for past and current personal records
- Annotate body parts (plus primary and secondary muscles involved) for each exercise
- More and more detailed tables and plots
I have decided to include my personal workout logs in this repository to give you some sample data to play with↩
I just have to link the silly Rummelsnuff song here: https://www.youtube.com/watch?v=TKBDk6V8s2A↩


gf functionality request
-
anonymous
Hi,
I find myself editing files within files ( includes and what have you ) gf is a really good command but if it was coupled with Command-T or if Command-T was extended to provide similar functionality it would be awesome.
For example it would be great if gf copied the filename and extension text and asked command-t to try and open the best match in the current hierarchy.
If this functionality already exists please tell me how to set it up.
Thanks for the work on command-t I use it 1 million times a day.
Regards, Sam
-
anonymous
Created
,
edited
Any feedback on this idea, or another way to make it possible? Would find it very useful for jumping around to templates and includes and such.
-
Greg Hurrell
I personally am not so interested in this idea, but I'd be happy to look at patches from somebody who is.
Personally, the feature I most want to implement is buffer navigation (ticket #1608).
Reply
This topic is now closed.


Rendering a triangle
The most prominent example for OpenGL is probably that of rendering a colored triangle. This tutorial shows how this is done using Pascal3D. Though nothing keeps you from using OpenGL directly Pascal3D provides a powerful API that greatly simplifies rendering. Many basic OpenGL tutorials use the so called immediate mode because it is very simple to use. This has however been deprecated in OpenGL 3.x in favor of buffer objects because of it's poor performance and for compatibility reasons. While being more efficient it is a harder to understand for a beginner. The P3DPlot library (in p3d.core) aims for simplicity while at the same time using buffer objects.
A short introduction to graphic functions of Pascal3D
Rendering a red triangle is described through the following command.
geom_polygon([ vec3( -1,-1, 0 ), vec3( 1, -1, 0 ), vec3( 0, 1, 0 )], settings([ attrib( P3DAttribColor, vec4( 1, 0, 0, 1 )) // Red ])
The name of the function determines what type of geometry we want to draw (geom_points, geom_lines, geom_polygon). The first parameter is an array of coordinates and determines where we want to draw. The lower left corner is at -1,-1,0 and the upper right is at 1, 1. The coordinates have three dimensions but for now we can ignore the last coordinate. We use the vec3 constructor for a three dimensional vector defined in p3d.math which syntax is similar to that of GLSL.
P3DPlot distinguishes between two types of commands, layers and settings. The former represents a drawing operation while the latter determines how it is performed.
With the second parameter is of type setting. We can pass our attributes and uniforms there. It is possible to pass more than one setting which is why we need to enclose them in a settings block. This will turn an array of settings into a list class that can be used for rendering. With attrib we say we want to pass an attribute. The location parameter is set to the color attribute and the color is passed as a four dimensional vector (the components correspond to the channels Red, Green, Blue, Alpha). So vec4( 1, 0, 0, 1 )
is red with an alpha value of 1. This results in the whole triangle becoming red.
It is also possible to define one color for each vertex.
attrib( P3DAttribColor, [ vec4( 1, 0, 0, 1 ), vec4( 0, 1, 0, 1 ), vec4( 0, 0, 1, 1 )])
Hint
If we pass nil the color attribute will remain undefined. This sometimes makes sense but when using geom_points/geom_lines/geom_polygon you should always define a color because otherwise the color of the triangle will depend on what the attribute was previously set to or even on the OpenGL implementation. E.g. the triangle will by default be black on Intel and white on NVidia hardware.
For efficiency the polygon is not rendered directly. A call to the geometry functions will create a list of function calls that can be executed later. We therefore store the this list in a variable so this list has to be generated only once. Similar to the settings it is possible to store more than one function call in the list. We might want to clear the color buffer before rendering our triangle with command_clear first. We therefore have to pass a list of the function calls to the layers function to make a plot list that can be rendered later. The complete function call will then be:
TriangleList:= layers([ command_clear([ cfColor, cfDepth ], vec4( 0.5, 0.5, 0.5, 1 )), // Clear the background and depth buffer with grey geom_polygon([ vec3( -1,-1, 0 ), vec3( 1, -1, 0 ), vec3( 0, 1, 0 )], // draws a triangle from the passed coordinates settings([ attrib( P3DAttribColor, [ vec4( 1, 0, 0, 1 ), vec4( 0, 1, 0, 1 ), vec4( 0, 0, 1, 1 )]) // sets the color attribute for each vertex ]) ) ]);
And for rendering we call the Execute method.
TriangleList.Execute;
Preparing the app for the rendering
We start with the project from the last tutorial. To store our render calls we add a field FTriangleList of type TP3DPlotListLayer. Since we it is not freed automatically we override the Finalize method. The render method is called from the application's main loop. This is where we execute our triangle list. To generate the list we make a SetupTriangle method that is called from initialize.
TMyApplication = class ( TP3DApplication ) private FTriangleList: TP3DPlotListLayer; public procedure Initialize; override; // Override the initialize procedure to // allow custom initializations procedure Finalize; override; procedure Render; override; procedure SetupTriangle; end;
Hint
Since P3DPlot relies on shader nodes we need to define where our shaders are located. This is in the pascal3d/shaders/ directory. For your own projects you may want to copy these files to your project directory.
procedure TMyApplication.Initialize; begin inherited Initialize; TP3DWindow.Create( Windows ); // Create the main window. Note that this is freed // automatically when the application terminates MainWindow.Title:= 'Rendering a triangle'; // Set the title P3DShaderNodeLib.LoadLibraryPath( '../../../shaders/' ); SetupTriangle; end; procedure TMyApplication.Finalize; begin FreeAndNil( FTriangleList ); // Free the triangle list inherited Finalize; end;
The Render method that is executed on each frame is very simple. We just execute our triangle list.
procedure TMyApplication.Render; begin inherited Render; FTriangleList.Execute; end;


To contribute your Custom Control Library to UI5lab using the standard tools, you will need the following
| Tool | Where to get |
|---|---|
| npm | Node.js |
| GruntJS | gruntjs |
| grunt-openui5 | package: npmjs / source code: github |
Openui5 can be extended with Custom Controls quite easily. There are plenty of tutorials and introductions
But if you want to use the build tools provided by UI5, you will have to build a Control Library by adding some more files or Themes. Again, there are some tutorials and introductions
Each Custom Control Library has its own index.json. This is a small file with descriptions about the Custom Control Library.
{
"the.library.namespace": {
"icon": "a SAP-Icon e.g. sap-icon://database",
"name": "the Library name",
"description": "a short description",
"source" : "a link to the source code on github",
"documentation": "a link to the documentation",
"demo": "a link to the demontration webpage",
"license": "the license you chose for your Custom Control Library e.g. Apache 2.0",
"version": 1.0,
"content": {
"Your First Custom Control": {
"id": "Custom Control ID",
"name": "Custom Control name",
"type": "control",
"version": 1.0,
"description": "a short description",
"samples": [
{
"id": "ID of first sample",
"name": "sample name 1",
"description": "a short sample description"
},
{
"id": "ID of second sample",
"name": "sample name 2",
"description": "a short sample description"
}
]
}
}
}
}
"content" is a substructure describing 1 or more Custom Controls included in the Library.
Good examples are the index.json of published UI5lab Libraries like UI5Lab-library-simple or openui5-qrcode
Once you are ready to publish your Custom Control Library, simply fork https://github.com/UI5Lab/UI5Lab and edit the package.json and combineProjects.js file. After that, create a Pull Request. And when this Pull Request is merged into the repository, a Travis job will automagically generate an updated version of UI5lab where your Library is now listed among all the other.
If you have questions or ideas, join our Slack Channel #UI5Lab.