This document describes how to deploy the Kafka version of TiDB-Binlog. If you need to deploy the local version of TiDB-Binlog, see the TiDB-Binlog user guide for the local version.
TiDB-Binlog is a tool for enterprise users to collect binlog files for TiDB and provide real-time backup and synchronization.
TiDB-Binlog supports the following scenarios:
The TiDB-Binlog architecture is as follows:
The TiDB-Binlog cluster mainly consists of three components:
Pump is a daemon that runs on the background of each TiDB host. Its main function is to record the binlog files generated by TiDB in real time and write to the file in the disk sequentially.
Drainer collects binlog files from each Pump node, converts them into specified database-compatible SQL statements in the commit order of the transactions in TiDB, and synchronizes to the target database or writes to the file sequentially.
The Kafka cluster stores the binlog data written by Pump and provides the binlog data to Drainer for reading.
Note: In the local version of TiDB-Binlog, the binlog is stored in files, while in the latest version, the binlog is stored using Kafka.
# Download the tool package.
wget http://download.pingcap.org/tidb-binlog-latest-linux-amd64.tar.gz
wget http://download.pingcap.org/tidb-binlog-latest-linux-amd64.sha256
# Check the file integrity. If the result is OK, the file is correct.
sha256sum -c tidb-binlog-latest-linux-amd64.sha256
# Extract the package.
tar -xzf tidb-binlog-latest-linux-amd64.tar.gz
cd tidb-binlog-latest-linux-amd64
You need to deploy a Pump for each TiDB server in the TiDB cluster. Currently, the TiDB server only supports the binlog in UNIX socket.
When you deploy a Pump manually, to start the service, follow the order of Pump -> TiDB; to stop the service, follow the order of TiDB -> Pump.
We set the startup parameter binlog-socket
as the specified unix socket file path of the corresponding parameter socket
in Pump. The final deployment architecture is as follows:
Drainer does not support renaming DDL on the table of the ignored schemas (schemas in the filter list).
To start Drainer in the existing TiDB cluster, usually you need to do a full backup, get the savepoint, import the full backup, and start Drainer and synchronize from the savepoint.
To guarantee the integrity of data, perform the following operations 10 minutes after Pump is started:
position
for the initial start of Drainer.The savepoint metadata started by the Kafka version of Drainer is stored in the checkpoint
table of the downstream database tidb_binlog
by default. If no valid data exists in the checkpoint
table, configure initial-commit-ts
to make Drainer work from a specified position when it is started:
bin/drainer --config=conf/drainer.toml --initial-commit-ts=${position}
The drainer outputs pb
and you need to set the following parameters in the configuration file:
[syncer]
db-type = "pb"
disable-dispatch = true
[syncer.to]
dir = "/path/pb-dir"
The drainer outputs kafka
and you need to set the following parameters in the configuration file:
[syncer]
db-type = "kafka"
# when db-type is kafka, you can uncomment this to config the down stream kafka, or it will be the same kafka addrs where drainer pulls binlog from.
# [syncer.to]
# kafka-addrs = "<IP_ADDRESS>:9092"
# kafka-version = "<IP_ADDRESS>"
The data which outputs to kafka follows the binlog format sorted by ts and defined by protobuf. See driver to access the data and sync to the down stream.
Deploy Kafka and ZooKeeper cluster before deploying TiDB-Binlog. Make sure that Kafka is 0.9 version or later.
| Name | Number | Memory size | CPU | Hard disk |
|---|---|---|---|---|
| Kafka | 3+ | 16G | 8+ | 2+ 1TB |
| ZooKeeper | 3+ | 8G | 4+ | 2+ 300G |
auto.create.topics.enable = true
: if no topic exists, Kafka automatically creates a topic on the broker.broker.id
: a required parameter to identify the Kafka cluster. Keep the parameter value unique. For example, broker.id = 1
.fs.file-max = 1000000
: Kafka uses a lot of files and network sockets. It is recommended to change the parameter value to 1000000. Change the value using vi /etc/sysctl.conf
.tidb-ansible/inventory.ini
file, set enable_binlog = True
, and configure the zookeeper_addrs
variable as the ZooKeeper address of the Kafka cluster. In this way, Pump is deployed while you deploy the TiDB cluster.Configuration example:
# binlog trigger
enable_binlog = True
# ZooKeeper address of the Kafka cluster. Example:
# zookeeper_addrs = "<IP_ADDRESS>:2181,<IP_ADDRESS>:2181,<IP_ADDRESS>:2181"
# You can also append an optional chroot string to the URLs to specify the root directory for all Kafka znodes. Example:
# zookeeper_addrs = "<IP_ADDRESS>:2181,<IP_ADDRESS>:2181,<IP_ADDRESS>:2181/kafka/123"
zookeeper_addrs = "<IP_ADDRESS>:2181,<IP_ADDRESS>:2181,<IP_ADDRESS>:2181"
A usage example:
Assume that we have three PDs, three ZooKeepers, and one TiDB. The information of each node is as follows:
TiDB="<IP_ADDRESS>"
PD1="<IP_ADDRESS>"
PD2="<IP_ADDRESS>"
PD3="<IP_ADDRESS>"
ZK1="<IP_ADDRESS>"
ZK2="<IP_ADDRESS>"
ZK3="<IP_ADDRESS>"
Deploy Drainer/Pump on the machine with the IP address “<IP_ADDRESS>”.
The IP address of the corresponding PD cluster is “<IP_ADDRESS>,<IP_ADDRESS>,<IP_ADDRESS>”.
The ZooKeeper IP address of the corresponding Kafka cluster is “<IP_ADDRESS>,<IP_ADDRESS>,<IP_ADDRESS>”.
This example describes how to use Pump/Drainer.
Description of Pump command line options
Usage of Pump:
-L string
log level: debug, info, warn, error, fatal (default "info")
-V
to print Pump version info
-addr string
the RPC address that Pump provides service (-addr= "<IP_ADDRESS>:8250")
-advertise-addr string
the RPC address that Pump provides external service (-advertise-addr="<IP_ADDRESS>:8250")
-config string
to configure the file path of Pump; if you specifies the configuration file, Pump reads the configuration first; if the corresponding configuration also exists in the command line argument, Pump uses the command line configuration to cover that in the configuration file
-data-dir string
the path of storing Pump data
-enable-tolerant
after enabling tolerant, Pump wouldn't return error if it fails to write binlog (default true)
-zookeeper-addrs string (-zookeeper_addrs="<IP_ADDRESS>:2181,<IP_ADDRESS>:2181,<IP_ADDRESS>:2181")
the ZooKeeper address; this option gets the Kafka address from ZooKeeper, and you need to keep it the same with the configuration in Kafka
-gc int
the maximum days that the binlog is retained (default 7), and 0 means retaining the binlog permanently
-heartbeat-interval int
the interval between heartbeats that Pump sends to PD (unit: second)
-log-file string
the path of the log file
-log-rotate string
the log file rotating frequency (hour/day)
-metrics-addr string
the Prometheus pushgateway address; leaving it empty disables Prometheus push
-metrics-interval int
the frequency of reporting monitoring information (default 15, unit: second)
-pd-urls string
the node address of the PD cluster (-pd-urls="http://<IP_ADDRESS>:2379,http://<IP_ADDRESS>:2379,http://<IP_ADDRESS>:2379")
-socket string
the monitoring address of the unix socket service (default "unix:///tmp/pump.sock")
Pump configuration file
# Pump configuration.
# the RPC address that Pump provides service (default "<IP_ADDRESS>:8250")
addr = "<IP_ADDRESS>:8250"
# the RPC address that Pump provides external service (default "<IP_ADDRESS>:8250")
advertise-addr = ""
# an integer value to control expiry date of the binlog data, indicates how long (in days) the binlog data is stored.
# (default value is 0, means binlog data would never be removed)
gc = 7
# the path of storing Pump data
data-dir = "data.pump"
# the ZooKeeper address; You can set the option to get the Kafka address from ZooKeeper; if the namespace is configured in Kafka, you need to keep the same configuration here
zookeeper-addrs = "<IP_ADDRESS>:2181,<IP_ADDRESS>:2181,<IP_ADDRESS>:2181"
# example of the ZooKeeper address that configures the namespace
zookeeper-addrs = "<IP_ADDRESS>:2181,<IP_ADDRESS>:2181,<IP_ADDRESS>:2181/kafka/123"
# the interval between heartbeats that Pump sends to PD (unit: second)
heartbeat-interval = 3
# the node address of the PD cluster
pd-urls = "http://<IP_ADDRESS>:2379,http://<IP_ADDRESS>:2379,http://<IP_ADDRESS>:2379"
# the monitoring address of the unix socket service (default "unix:///tmp/pump.sock")
socket = "unix:///tmp/pump.sock"
Startup example
./bin/pump -config pump.toml
Description of Drainer command line arguments
Usage of Drainer:
-L string
log level: debug, info, warn, error, fatal (default "info")
-V
to print Pump version info
-addr string
the address that Drainer provides service (default "<IP_ADDRESS>:8249")
-c int
to synchronize the downstream concurrency number, and a bigger value means better throughput performance (default 1)
-config string
to configure the file path of Drainer; if you specifies the configuration file, Drainer reads the configuration first; if the corresponding configuration also exists in the command line argument, Pump uses the command line configuration to cover that in the configuration file
-data-dir string
the path of storing Drainer data (default "data.drainer")
-zookeeper-addrs string (-zookeeper-addrs="<IP_ADDRESS>:2181,<IP_ADDRESS>:2181,<IP_ADDRESS>:2181")
the ZooKeeper address; you can set this option to get the Kafka address from ZooKeeper, and you need to keep it the same with the configuration in Kafka
-dest-db-type string
the downstream service type of Drainer (default "mysql")
-detect-interval int
the interval of detecting Pump's status from PD (default 10, unit: second)
-disable-dispatch
whether to disable dispatching sqls in a single binlog; if you set the value to true, it is restored into a single transaction to synchronize in the order of each binlog (If the downstream service type is "mysql", set the value to false)
-ignore-schemas string
the DB filtering list (default "INFORMATION_SCHEMA,PERFORMANCE_SCHEMA,mysql,test"); does not support the rename DDL operation on the table of ignore schemas
-initial-commit-ts (default 0)
If Drainer does not provide related breakpoint information, you can use this option to configure the related breakpoint information
-log-file string
the path of the log file
-log-rotate string
the log file rotating frequency (hour/day)
-metrics-addr string
the Prometheus pushgateway address; leaving it empty disables Prometheus push
-metrics-interval int
the frequency of reporting monitoring information (default 15, unit: second)
-pd-urls string
the node address of the PD cluster (-pd-urls="http://<IP_ADDRESS>:2379,http://<IP_ADDRESS>:2379,http://<IP_ADDRESS>:2379")
-txn-batch int
the number of SQL statements in a single transaction that is output to the downstream database (default 1)
Drainer configuration file
# Drainer configuration
# the address that Drainer provides service ("<IP_ADDRESS>:8249")
addr = "<IP_ADDRESS>:8249"
# the interval of detecting Pump's status from PD (default 10, unit: second)
detect-interval = 10
# the path of storing Drainer data (default "data.drainer")
data-dir = "data.drainer"
# the ZooKeeper address; you can use this option to get the Kafka address from ZooKeeper; if the namespace is configured in Kafka, you need to keep the same configuration here
zookeeper-addrs = "<IP_ADDRESS>:2181,<IP_ADDRESS>:2181,<IP_ADDRESS>:2181"
# example of the ZooKeeper address that configures the namespace
zookeeper-addrs = "<IP_ADDRESS>:2181,<IP_ADDRESS>:2181,<IP_ADDRESS>:2181/kafka/123"
# the node address of the PD cluster
pd-urls = "http://<IP_ADDRESS>:2379,http://<IP_ADDRESS>:2379,http://<IP_ADDRESS>:2379"
# the path of the log file
log-file = "drainer.log"
# Syncer configuration.
[syncer]
# the DB filtering list (default "INFORMATION_SCHEMA,PERFORMANCE_SCHEMA,mysql,test")
# does not support the rename DDL operation on the table of ignore schemas
ignore-schemas = "INFORMATION_SCHEMA,PERFORMANCE_SCHEMA,mysql"
# the number of SQL statements in a single transaction that is output to the downstream database (default 1)
txn-batch = 1
# to synchronize the downstream concurrency number, and a bigger value means better throughput performance (default 1)
worker-count = 1
# whether to disable dispatching sqls in a single binlog;
# if you set the value to true, it is restored into a single transaction to synchronize in the order of each binlog (If the downstream service type is "mysql", set the value to false)
disable-dispatch = false
# the downstream service type of Drainer (default "mysql")
# valid values: "mysql", "pb"
db-type = "mysql"
# replicate-do-db priority over replicate-do-table if have same db name
# and we support regex expression,
# the regex expression starts with '~'
# replicate-do-db = ["~^b.*","s1"]
# [[syncer.replicate-do-table]]
# db-name ="test"
# tbl-name = "log"
# [[syncer.replicate-do-table]]
# db-name ="test"
# tbl-name = "~^a.*"
# server parameters of the downstream database when the db-type is set to "mysql"
[syncer.to]
host = "<IP_ADDRESS>"
user = "root"
password = ""
port = 3306
# the directory of the binlog file when the db-type is set to "pb"
# [syncer.to]
# dir = "data.drainer"
Startup example
./bin/drainer -config drainer.toml
PbReader parses the pb file generated by Drainer and translates it into SQL statements.
CentOS 7+
# Download PbReader package
wget http://download.pingcap.org/pb_reader-latest-linux-amd64.tar.gz
wget http://download.pingcap.org/pb_reader-latest-linux-amd64.sha256
# Check the file integrity. If the result is OK, the file is correct.
sha256sum -c pb_reader-latest-linux-amd64.sha256
# Extract the package.
tar -xzf pb_reader-latest-linux-amd64.tar.gz
cd pb_reader-latest-linux-amd64
The PbReader usage example
./bin/pbReader -binlog-file=${path}/binlog-0000000000000000
This section introduces how to monitor TiDB-Binlog’s status and performance, and display the metrics using Prometheus and Grafana.
Use the Pump service deployed using Ansible. Set metrics in startup parameters.
When you start Drainer, set the two parameters of --metrics-addr
and --metrics-interval
. Set --metrics-addr
as the address of Push Gateway. Set --metrics-interval
as the frequency of push (default 15 seconds).
Login the Grafana Web interface.
The default address is: http://localhost:3000
The default account name: admin
The password for the default account: admin
Click the Grafana logo to open the sidebar menu.
Click “Data Sources” in the sidebar.
Click “Add data source”.
Specify the data source information:
Click “Add” to save the new data source.
Click the Grafana logo to open the sidebar menu.
On the sidebar menu, click “Dashboards” -> “Import” to open the “Import Dashboard” window.
Click “Upload .json File” to upload a JSON file (Download TiDB Grafana Config).
Click “Save & Open”. A Prometheus dashboard is created.


| Student ID | {{studentUser?.studentId}} |
| Course | {{studentUser?.course}} |
| Batch | {{studentUser?.batch}} |
| {{studentUser?.email}} | |
| Current Semester | {{studentUser?.currentSemester}} |
Please confirm to delete {{studentUser?.firstname}} {{studentUser?.lastname}}'s profile.
Select the semester for which marks needs to be updated


Many functionalities of Neoan3 make use of third party or external tools. When part of the framework, they use the namespace Neoan3\Apps. However, the way autoloading works enables you to use nearly any composer package and use it within the framework. Apps are stand-alone solutions that do not require neoan3 nor does neoan3 require them. However, creating a new project will ship with the following packages:
neoan3-template (default template engine)
neoan3-db (default mysql wrapper)
neoan3-stateless (JWT-implementation)
neoan3-ops (default string & encryption handler)
neoan3-session (session handler)
Find apps on GitHubRegardless of what source you use, you only have to add what you need. There are two main governing principles to creating a Neoan3 App:
1. It is good practice to have the naming convention be neoan3-{{appName}}, albeit not required
2. Build agnostic from the framework. This is to make it possible to use in other frameworks.


Well done, you're on a roll!
Just like on your to-do list, you want to avoid not knowing or remembering what the components of your list stand for. That is why you should give names to them:
my_list <- list(name1 = your_comp1,
name2 = your_comp2)
This creates a list with components that are named name1
, name2
, and so on. If you want to name your lists after you've created them, you can use the names()
function as you did with vectors. The following commands are fully equivalent to the assignment above:
my_list <- list(your_comp1, your_comp2)
names(my_list) <- c("name1", "name2")
my_vector
the name vec
, for my_matrix
the name mat
and for my_df
the name df
. my_list
so you can inspect the output.
# Vector with numerics from 1 up to 10
my_vector <- 1:10
# Matrix with numerics from 1 up to 9
my_matrix <- matrix(1:9, ncol = 3)
# First 10 elements of the built-in data frame mtcars
my_df <- mtcars[1:10,]
# Adapt list() call to give the components names
my_list <- list(my_vector, my_matrix, my_df)
# Print out my_list
# Vector with numerics from 1 up to 10
my_vector <- 1:10
# Matrix with numerics from 1 up to 9
my_matrix <- matrix(1:9, ncol = 3)
# First 10 elements of the built-in data frame mtcars
my_df <- mtcars[1:10,]
# Adapt list() call to give the components names
my_list <- list(vec = my_vector, mat = my_matrix, df = my_df)
# Print out my_list
my_list
msg = "Do not remove or change the definiton of the variables `my_vector`, `my_matrix` or `my_df`!"
test_object("my_vector", undefined_msg = msg, incorrect_msg = msg)
test_object("my_matrix", undefined_msg = msg, incorrect_msg = msg)
test_object("my_df", undefined_msg = msg, incorrect_msg = msg)
test_object("my_list",
incorrect_msg = "It looks like `my_list` does not contain the correct elements.")
test_object("my_list", eq_condition = "equal",
incorrect_msg = "It looks like `my_list` does not contain the correct naming for the components. Make sure you use the names `vec`, `mat` and `df`, respectively. Check out the hint if you're struggling.");
test_output_contains("my_list", incorrect_msg = "Don't forget to print `my_list` to the console! Simply add `my_list` on a new line in the editor.")
success_msg("Great! Not only do you know how to construct lists now, you can also name them; a skill that will prove most useful in practice. Continue to the next exercise.")
The first method of assigning names to your list components is the easiest. It starts like this:
my_list <- list(vec = my_vector)
Add the other two components in a similar fashion.


Privacy Policy
What information do you collect?
Information collected may include server and HTTP logs, data transmitted by the Actions on Google API and other APIs used with this service, and usage information.
This also includes information communicated, either directly or via the permissions API.
At this time we do not collect any persistent identifiers, at least not purposefully.
How do you use the information?
Any information collected may be used to provide certains services to users, to recognize them the next time they use your Action, or to send promotional emails if the user opts-in to such a service.
What information do you share?
Whatever you are communicating is likely shared with Google and its ad affiliates. Any information captured is not currently shared directly via the app.


News Headline Classifier
Create new label:
Or select from existing labels (if any):
Filters
Filter terms:
Limit to year:
none (all years)
2020
2019
2018
2017
2016
2015
2014
2013
2012
2011
Focus on model uncertainty (if available)
Save Predictions
Save predictions from current model (if model available)
Show Examples
Show examples of relevant headlines by year (if model available)
Headlines by year


2.3.2. Create a Search Function¶
This section describes the search function based on an example application.
- Description of the function to be created
- Enter the search condition in the “Project Name(プロジェクト名)” field of the side menu and click the “Search(検索)” button.
- The search results by project name are displayed.
- Clear the project name and click on the “Start this year(今年開始)” link in the “Search by period(期間からさがす)” column.
- Projects with a project start date of this year are displayed.
<IP_ADDRESS>. Perform a search¶
The basic implementation method of the search function is described in the following order:
- Create a form
Create a form that accepts the search condition.
- ProjectSearchForm.java
public class ProjectSearchForm extends SearchFormBase implements Serializable { // Partial excerpt /** Project name */ @Domain("projectName") private String projectName; /** Project start date (FROM) */ @Domain("date") private String projectStartDateBegin; // Getter and setter are omitted
- Key points of this implementation
- All properties that accept input values should be declared as string type. For more information, see how to set validation rules.
- Create a JSP for the search condition input
Creates a JSP for the search condition input.
- /src/main/webapp/WEB-INF/view/common/sidemenu.jsp
<n:form method="GET" action="list">  Project name
 <n:text id="projectName" name="searchForm.projectName" size="25" maxlength="64" cssClass="form-control" errorCss="input-error form-control" placeholder="Project name"/> <n:error errorCss="message-error" name="searchForm.projectName" />

 <input type="submit" id="search" class="btn btn-primary" value="Search" />
 </n:form>
- Key points of this implementation
- When sending a request by GET, specify GET in the method attribute of form tag. In the case of GET, custom tags cannot be used for buttons and links, so the buttons and links must be created in HTML. For more information, see Using GET request.
- Create a search condition bean
Creates a bean that sets the search conditions and hands over to Universal DAO. Bean property should be of the type that is compatible with the definition (type) of the corresponding condition column.
- ProjectSearchDto.java
public class ProjectSearchDto implements Serializable { // Partial excerpt /** Project name */ private String projectName; /** Project start date (FROM) */ private java.sql.Date projectStartDateBegin; // Getter and setter are omitted
- Key points of this implementation
- Use BeanUtil to transfer values from the form to search condition Bean. Since BeanUtil transfers items with the same property name, it is necessary to match the property names of the items used as search conditions in the form and search condition Bean.
- When values are transferred using BeanUtil the property can be transferred with a type conversion for properties that are compatible. For more information, see type conversion rules.
- Bean property is defined by Java type that matches the corresponding column type.
- Create a SQL for search
Create a SQL for searching.
- Project.sql
SEARCH_PROJECT = SELECT PROJECT_ID, PROJECT_NAME, PROJECT_TYPE, PROJECT_CLASS, PROJECT_START_DATE, PROJECT_END_DATE, VERSION FROM PROJECT WHERE USER_ID = :userId AND $if(clientId) {CLIENT_ID = :clientId} AND $if(projectName) {PROJECT_NAME LIKE :%projectName%} AND $if(projectType) {PROJECT_TYPE = :projectType} AND $if(projectClass) {PROJECT_CLASS IN (:projectClass[])} AND $if(projectStartDateBegin) {PROJECT_START_DATE >= :projectStartDateBegin} AND $if(projectStartDateEnd) {PROJECT_START_DATE <= :projectStartDateEnd} AND $if(projectEndDateBegin) {PROJECT_END_DATE >= :projectEndDateBegin} AND $if(projectEndDateEnd) {PROJECT_END_DATE <= :projectEndDateEnd} $sort(sortId){ (idAsc PROJECT_ID) (idDesc PROJECT_ID DESC) (nameAsc PROJECT_NAME, PROJECT_ID) (nameDesc PROJECT_NAME DESC, PROJECT_ID DESC) (startDateAsc PROJECT_START_DATE, PROJECT_ID) (startDateDesc PROJECT_START_DATE DESC, PROJECT_ID DESC) (endDateAsc PROJECT_END_DATE, PROJECT_ID) (endDateDesc PROJECT_END_DATE DESC, PROJECT_ID DESC) }
- Key points of this implementation
- To prevent SQL injection, SQL is written in an external file. For more information, see Manage SQL in files.
- Bind the value to SQL using the bean property name. For more information, see Execute SQL with Bean object as input.
- To include only the items specified on the search screen in the conditions, build a SQL statement using the $if syntax.
- To make the sort key selectable from the screen, use the $sort syntax to construct an SQL statement.
- Implementation of a business action
Implement a search process for a business action.
- Create a business action method
Create a method to search based on the search conditions given on the screen.
- ProjectAction.java
@InjectForm(form = ProjectSearchForm.class, prefix = "searchForm", name = "searchForm") @OnError(type = ApplicationException.class, path = "/WEB-INF/view/project/index.jsp") public HttpResponse list(HttpRequest request, ExecutionContext context) { ProjectSearchForm searchForm = context.getRequestScopedVar("searchForm"); ProjectSearchDto searchCondition = BeanUtil.createAndCopy(ProjectSearchDto.class, searchForm); List<Project> searchList = searchProject(searchCondition, context); context.setRequestScopedVar("searchResult", searchList); return new HttpResponse("/WEB-INF/view/project/index.jsp"); }
- Key points of this implementation
- The search condition is validated by adding InjectForm as the search condition is not guaranteed to be safe with input values from outside.
- Form validated by InjectForm can be acquired from the request scope.
- Copies the form value to the search condition bean using BeanUtil.
- Create a private method to perform a search
This method searches the database by specifying the SQL mentioned above.
- ProjectAction.java
private List<Project> searchProject(ProjectSearchDto searchCondition, ExecutionContext context) { LoginUserPrincipal userContext = SessionUtil.get(context, "userContext"); searchCondition.setUserId(userContext.getUserId()); return UniversalDao .page(searchCondition.getPageNumber()) .per(20L) .findAllBySqlFile(Project.class, "SEARCH_PROJECT", searchCondition); }
- Key points of this implementation
- To execute the preceding SQL statement, specify SQLID (or “SEARCH_PROJECT” in the case of the preceding SQL) as the second argument of UniversalDao#findAllBySqlFile.
- Search for paging can be performed using the UniversalDao#per method and UniversalDao#page. For more information, see narrow the search for paging.
- Create a search result display part
Implements the process to display the search results registered in the request scope on the screen in JSP.
- /src/main/webapp/WEB-INF/view/project/index.jsp
 <app:listSearchResult>   <jsp:attribute name="headerRowFragment">
 Project ID	 Project name	 Project type	 Project start date	 Project end date
 </jsp:attribute> <jsp:attribute name="bodyRowFragment">
    <n:a href="show/${row.projectId}"> <n:write name="row.projectId"/> </n:a> 	   <n:write name="row.projectName" /> 	   <n:write name="row.projectStartDate" valueFormat="dateTime{yyyy/MM/dd}"/>
 </jsp:attribute> </app:listSearchResult>
- Key points of this implementation
To include a parameter in the URL of the GET request, such as a link to the detail screen, create using <c:url> tag of JSTL or EL expression.
Since the routing is configured as follows in the Example application, a URL with a project ID at the end is associated with “ProjectAction#show”. For more information, see library README documentation (external site) .
- routes.xml
<routes> <match path="/action/:controller/:action/:projectId"> <requirements> <requirement name="projectId" value="\d+$" /> </requirements> </match>  </routes>
The write tag is used to output the value. To output the value in a format such as “date” or “amount”, specify the format with the valueFormat attribute. For more information, see Output of values after formatting.
For information on how to use <app:listSearchResult>, see Display a List of Search Results.
This completes the description of the search function.


|
DAA Assignment 1
0.0
Implementation of various convex hull algorithms
|
Go to the source code of this file.
Classes | |
| class | Graphix |
| Class for handling graphics using OpenGL. More... | |
Macros | |
| #define | BG_COLOR 1.0, 1.0, 1.0 |
| #define | BG_ALPHA 1.0 |
| #define | DRAW_COLOR 1.0, 0.0, 0.0 |
| #define | DRAW_COLOR2 0.0, 0.0, 0.0 |
| #define | WIN_BREADTH 540 |
| #define | WIN_HEIGHT 540 |
| #define | WIN_POSITION_X 0 |
| #define | WIN_POSITION_Y 0 |
| #define | WIN_DIM_NEG_X -7 |
| #define | WIN_DIM_POS_X 7 |
| #define | WIN_DIM_NEG_Y -7 |
| #define | WIN_DIM_POS_Y 7 |
| #define | WIN_NAME "Graphix" |
| #define | POINT_SIZE 8.0 |
| #define | ANIMATION_SPEED 2000000 |
| #define | GRAPHIX |
| #define ANIMATION_SPEED 2000000 |
| #define BG_ALPHA 1.0 |
| #define BG_COLOR 1.0, 1.0, 1.0 |
| #define DRAW_COLOR 1.0, 0.0, 0.0 |
| #define DRAW_COLOR2 0.0, 0.0, 0.0 |
| #define GRAPHIX |
| #define POINT_SIZE 8.0 |
| #define WIN_BREADTH 540 |
| #define WIN_DIM_NEG_X -7 |
| #define WIN_DIM_NEG_Y -7 |
| #define WIN_DIM_POS_X 7 |
| #define WIN_DIM_POS_Y 7 |
| #define WIN_HEIGHT 540 |
| #define WIN_NAME "Graphix" |
| #define WIN_POSITION_X 0 |
| #define WIN_POSITION_Y 0 |


Forbes 500 : Exploration Dashboard
On this dashboard we are trying to find out the most profitable sectors and top/bottom 10 companies across each.
Sector is a parameter for the top 10 and bottom 10 companies charts. Click on any of the sectors to select it and trigger the update of top and bottom 10 companies in that sector.
Legends are not added on these charts yet, make use of the tooltips to get more Information. Each color represents an individual sector.
Selected sector is highlighted with a thick stroke around it.
Can you figure out the company with the best and the worst profit across all sectors?


Check out the documentation for more information about the modules of OGaml.
If you want to contribute or just see the sources of OGaml, check out our Github repository . This very website is also available on Github.


Ryobi Kiso judicial managers ask to push creditors' meeting deadline into 2020
by Annabeth LeowTHE judicial managers of ailing construction firm Ryobi Kiso Holdings, which was first placed under interim judicial management in March, are asking for more time to carry out their work.
Goh Thien Phong and Chan Kheng Tek, from PricewaterhouseCoopers Advisory Services, told the bourse on Friday that they have filed for an extension to the deadline for sending creditors a statement of proposals and summoning a creditors’ meeting, under their management of Ryobi Kiso Holdings and a subsidiary.
The judicial managers have asked for until May 13, 2020 to hold the meeting, and are also seeking an extension of the judicial management period, to June 13, 2020.
The Singapore High Court had earlier ordered in May 2019 that the judicial managers comply with their statutory obligations by Nov 13. Their latest request for extensions will be heard on Nov 15.
The judicial managers added that, if they are given the extensions, they will also ask for permission to make interim distributions to unsecured Ryobi Kiso creditors on the court’s terms.
Stay updated with
BT newsletters
Terms & conditions Sign up


Prime motors is a Nairobi based Car Dealer Company, dealers of both ex-Japan and ex-Uk cars of high standard and offer very competative prices. we accept: Cash, hire purchase, trade-in and bank financing. visit our showroom today @ prime motors building-Westlands along waiyaki way to see our cars. we are open all week-days from 8:00 am - 5:00pm.


--- layout: post title: background-attachment:fixed 问题 date: 2012-08-28 18:08:51.000000000 +01:00 type: post published: true status: publish categories: - Web前端 tags: [] meta: views: '328' author: login: ig2net email<EMAIL_ADDRESS>display_name: "农夫一号" first_name: '' last_name: '' ---
今天发现background-attachment:fixed原来不是这么简单：
见:http://reference.sitepoint.com/css/background-attachment
The value fixed stops the background-image from scrolling with its containing block. Note that although the fixed background-image may be applied to elements throughout the document, its background-position is always placed in relation to the viewport. This means the background-image is only visible when its background-position coincides with the content, padding, or border area of the element to which it is applied. Thus, a fixed background-image doesn’t move with elements that have a scrollbar—see overflow—because it’s placed in relation to the viewport.
我真是晕，fixed的情况下，不管background-attachment:fixed设置到哪个元素，其background-position是依据body来定位的。
使用background-attachment:scroll则是相对本元素定位。
测试FF,IE8,Chrome都是这样。
可依据这个例子来看:

i

 zheli

你会发现背景图没看到。


Needs Latex equations, code, figs
In physics, conservation laws state that no energy can be created or destroyed
but simply changed into one form or another, converted yet conserved. A Russian
mathematician from the 19th century named Aleksandr Lyapunov applied this
fundamental principle to develop a major pillar of nonlinear control theory.
The philosophy is that when observing the total energy of a system continually
dissipating it will settle to an equilibrium if the system is lower bounded.
 Intuitively, we know the friction will reduce the kinetic and potential
energy until they both settle to a resting value, and the pendulum will sit at
the bottom of its arc. In this case, the pendulum system is lower bounded by the
lowest total energy it can physically obtain due to gravity.
Lyapunov formalized this intuitive physical understanding into Lyapunov’s Direct
Method, which contains two major concepts in Lyapnouv Stability and Lyapunov
Functions.
Lyapunov Functions are essentially scalar energy functions taking the form V(x)
where it is positive definite and its derivative is negative semi-definite. They
are often derived from the physical attributes of the system and serve only as a
“candidate” until proven sufficient. More on that to come. Example of nonlinear
MSD candidate Lyapunov function.
Lyapunov Stability is present if the Lyapunov Function V(x) satisfies the
criteria:
While this mathematical jargon is a confusing, it is not actually the most
general solution. Lyapunov’s original work is a narrow approach and some
extension is required for more thorough generality. Using invariant set theorems
we can best frame the object of Lyapunov’s work and then use the two
interchangeably.
BR is supposed to represent an arbitrarily large dimensional
volume that exists within a space of the same or greater dimension . Multiple
and geometrically different volumes can exist within space of . If the union of
these volumes comprehensively coverages all of , then is described as “global”.
Otherwise, it and the other volumes are described as “local”.
Now imagine a point moving within our volume . If for all possible trajectories
of that point for all of time t, it stays within that volume. Additionally,
let’s imagine that the velocity of the point is slowing down for all of time t.
Intuition would tell us that it will eventually (asymptotically) come to rest at
some location within . This is essentially the notion of stability, as
formalized by Lyapunov, framed from the perspective of invariant sets.
V(x) actually represents the “energy” of the system in question. When this
system’s energy is lower-bounded, meaning it has some volume that contains it,
we can consider the rate of change of energy. If this rate of change of energy, Vdot(x)
is strictly negative for all time t then the will clearly approach its
lower-bound. In the case where Vdot(x)=0, the system will enter a limit cycle as
described in a previous post.
Analytically, the power of this extension of Lyapunov’s formalism for stability
is evident. In order to find the stability of a system, candidate Lyapunov
functions can be proposed until they fit the stability criteria previously
described. Of course there is a drawback to the method, which is the fact that
it is a sufficiency theorem. Stability can only be proved by a candidate
upholding the stability criteria, while failure to do so is inconclusive.


sales
Better than last week (75%)
subscriptions
Worse than last week (46%)
traffic
Better than last week (31%)
{{person.firstname}} {{person.lastname}}
SSN: {{person.ssn}}
ID: {{person.id}}
Security Question: {{person.question}}?
Answer: {{person.answer}}
Address: {{person.address}}
Plan: {{person.plan}}
Provider: {{person.provider}}
Active Date: {{person.startDate}}
Deductibles
Individual: {{person.deductibles.individual | currency}}
Family: {{person.deductibles.individual | currency}}
Urgent Care: {{person.deductibles.individual | currency}}
HospitalER: {{person.deductibles.individual | currency}}
Generic: {{person.deductibles.generic | currency}}


Hello I’m Jenny Wilson
I’m a web designer
I’m Jenny Wilson, a 24y/o developer freshly graduated from the Interactive Design department of Gobelins. Alongside my studies, I had the chance to work at Amazon, IKEA, Les Poupées Russes and Sparkk.


War on Weather
问题描述 :
After an unprovoked hurricane attack on the south shore, Glorious Warrior has declared war on weather. The first salvo in this campaign will be a coordinated pre-emptive attack on as many tropical depressions as possible. GW reckons that the attack will neutralize the tropical depressions before they become storms, and dissuade others from forming.
GW has at his disposal k space-to-earth killer satellites at various locations in space. m tropical depressions are known to exist at various locations on the earth’s surface. Each satellite can attack any number of targets on the earth provided there is line of sight between the satellite and each target. How many different targets can be hit?
GW has at his disposal k space-to-earth killer satellites at various locations in space. m tropical depressions are known to exist at various locations on the earth’s surface. Each satellite can attack any number of targets on the earth provided there is line of sight between the satellite and each target. How many different targets can be hit?
输入:
The input consists of several test cases. Each case begins with a line containing integers 0 < k, m <= 100 as defined above. k lines follow, each giving x,y,z - the location in space of a satellite at the scheduled time of attack. m lines then follow, each giving x,y,z - the location of a target tropical depression. Assume the earth is a sphere centred at (0,0,0) with circumference 40,000 km. All targets will be on the surface of the earth (within 10-9 km) and all satellites will be at least 50 km above the surface. A line containing 0 0 follows the last test case.
输出:
For each test case, output a line giving the total number of targets that can be hit. If a particular target falls within 10-8 km of the boundary between being within line-of-sight and not, it may be counted either way. (That is, you need not consider rounding error so long as it does not exceed 10-8 km.)
样例输入:
3 2 -10.82404031 -1594.10929753 -6239.77925152<PHONE_NUMBER>8 -5291.64700245 4116.92402298 3006.49210582 2844.61925179 5274.03201053 2151.03635167 2255.29684503 5551.13972186 -1000.08700886 -4770.25497971 4095.48127333 3 4 0 0 6466.197723676 0 6466.197723676 0 6466.197723676 0 0 6366.197723676 0 0 6365.197723676<PHONE_NUMBER>88 0 0 0 6366.197723676 0 -6366.197723676 0 0 0
样例输出:
2 3
解题代码:
/* @author: */ import java.util.Scanner; import java.util.Arrays; public class Main{ static double lfabs(double x) { return x>0?x:-x; } public static void main(String args[]){ Scanner sc=new Scanner(System.in); double sat[][]=new double[100][3]; double xa,xb,ya,yb,za,zb,s,s1,s2,s3,angle,r=20000/3.14159265; int k,m,i,j,flag=0,num; while(sc.hasNext()) { k=sc.nextInt(); m=sc.nextInt(); if(k==0&&m==0) break; num=0; for(i=0;i< k;i++){ sat[i][0]=sc.nextDouble(); sat[i][1]=sc.nextDouble(); sat[i][2]=sc.nextDouble(); } for(i=0;i< m;i++) { flag=0; xb=sc.nextDouble(); yb=sc.nextDouble(); zb=sc.nextDouble(); for(j=0;j< k;j++) { xa=sat[j][0];ya=sat[j][1];za=sat[j][2]; s1=Math.sqrt(xa*xa+ya*ya+za*za); s2=Math.sqrt((xb-xa)*(xb-xa)+(yb-ya)*(yb-ya)+(zb-za)*(zb-za)); if(s2<=Math.sqrt(s1*s1-r*r)){flag=1;break;} } if(flag!=0)num++; } System.out.printf("%d\n",num); } } }
(adsbygoogle = window.adsbygoogle || []).push({});
为什么暴力求解方法循环到sqrt(n) 就可以了呢
afsasfasfasf
我又来学习了
第二个方法挺不错。NewHead代表新的头节点，通过递归找到最后一个节点之后，就把这个节点赋给NewHead，然后一直返回返回，中途这个值是没有变化的，一边返回一边把相应的指针方向颠倒，最后结束时返回新的头节点到主函数。
程序只能输出一个子序列
为什么暴力求解方法循环到sqrt(n) 就可以了呢
原来如此 了解了
感觉第二种方法其实也不是很好，不过的确要比第一种方法要好一点。
正确
http://www.realoj.com/problem/7如果楼主不介意，以可以在这个oj上做下，按照你的代码是错的。。。直接复制粘贴你的也是错。。不懂错在哪。
等待后面的实现，多谢
map[nodes .index][nodes .index] == 0 就是判断不相邻的。这个是可以证明的。
看见的晚了，只能提交一次唉


College pals team up for new hair and beauty salon
Two former apprentices have opened a new hair and beauty salon in Willenhall.
by Jordan ReynoldsJessica Burns and Danielle Maullin have just opened Willenhall’s newest salon, The Ivy.
The partnership is the result of the hairdresser and beauty therapist becoming friends while training at the same salon and at Walsall College.
For Jessica, the new business is up and running just three months after she completed her apprenticeship.
“Danielle and I used to talk all the time about going into business together – we just never imagined it would happen so soon,” said 21-year-old Jessica. “Our aim is to build a solid client base and then develop the business around the demand for particular services.
“I’m really excited to be in this position.”
The opportunity to be a salon owner happened when Jessica was looking at renting chair space in local salons and realised that renting premises with someone would cost her almost as much. Danielle, who had been working from home for the last 18 months didn’t hesitate to get involved in the business venture.
Ambitions
The 22-year-old said: “The apprenticeship gave us the grounding to be successful professionals and now it’s down to us to see what we can achieve. People prefer to get their hair and beauty treatments from the same place. This is why we think our one stop shop approach is going to attract a lot of interest.”
Laura Ratcliffe, apprenticeship manager at Walsall College added: “It’s fantastic to see Jessica and Danielle fulfilling their professional ambitions so early in their careers and showing just what apprentices can achieve.
"During their training, they understood the importance of maintaining high service standards and showing excellent client care. They’re sure to continue putting these skills to excellent use.”
The Ivy is open Tuesdays to Saturday from 9am.


Susy3 Configuration
Susy3 has 4 core settings, in a single settings map. You’ll notice a few differences from Susy2:
Columns no longer accept a single number, like 12
,
but use a syntax more similar to the new
CSS grid-template-columns –
a list of relative sizes for each column on the grid.
Unitless numbers in Susy act very similar to fr
units in CSS,
and the susy-repeat()
function (similar to the css repeat()
)
helps quickly establish equal-width columns.
susy-repeat(12)
will create 12 fluid, equal-width columnssusy-repeat(6, 120px)
will create 6 equal120px
-wide columns120px susy-repeat(4) 120px
will create 6 columns, the first and last are120px
, while the middle 4 are equal fractions of the remainder. Susy will outputcalc()
values in order to achieve this.
Gutters haven’t changed –
a single fraction or explicit width –
but the calc()
output feature
means you can now use any combination of units and fractions
to create static-gutters on a fluid grid, etc.
Spread existed in the Susy2 API as a span option, and was otherwise handled behind the scenes. Now we’re giving you full control over all spread issues. You can find a more detailed explanation of spread on the blog.
You can access your global settings at any time
with the susy-settings()
function,
or grab a single setting from the global scope
with susy-get('columns')
, susy-get('gutters')
etc.
Related
Article: Understanding Spread in Susy3 [external]
@function susy-settings()
@function susy-get()
$susy (Map)
$susy: () !default;
The grid is defined in a single map variable,
with four initial properties:
columns
, gutters
, spread
and container-spread
.
Anything you put in the root $susy
variable map
will be treated as a global project default.
You can create similar configuration maps
under different variable names,
to override the defaults as-needed.
Since 3.0.0-beta.1
:
columns
setting no longer accepts numbers
(e.g. 12
) for symmetrical fluid grids,
or the initial 12 x 120px
syntax for
symmetrical fixed-unit grids.
Use susy-repeat(12)
or susy-repeat(12, 120px)
instead.
Map Properties
columns: (list)
Columns are described by a list of numbers,
representing the relative width of each column.
The syntax is a simplified version of CSS native
grid-template-columns
,
expecting a list of grid-column widths.
Unitless numbers create fractional fluid columns
(similar to the CSS-native fr
unit),
while length values (united numbers)
are used to define static columns.
You can mix-and match units and fractions,
to create a mixed grid.
Susy will generate calc()
values when necessary,
to make all your units work together.
Use the susy-repeat($count, $value)
function
to more easily repetative columns,
similar to the CSS-native repeat()
.
susy-repeat(8)
: an 8-column, symmetrical, fluid grid.
Identical to(1 1 1 1 1 1 1 1)
.susy-repeat(6, 8em)
: a 6-column, symmetrical, em-based grid.
Identical to(8em 8em 8em 8em 8em 8em)
.(300px susy-repeat(4) 300px)
: a 6-column, asymmetrical, mixed fluid/static grid usingcalc()
output.
Identical to(300px 1 1 1 1 300px)
.
NOTE that 12
is no longer a valid 12-column grid definition,
and you must list all the columns individually
(or by using the susy-repeat()
function).
gutters: (number)
Gutters are defined as a single width,
or fluid ratio, similar to the native-CSS
grid-column-gap
syntax.
Similar to columns,
gutters can use any valid CSS length unit,
or unitless numbers to define a relative fraction.
0.5
: a fluid gutter, half the size of a single-fraction column.1em
: a static gutter,1em
wide.
Mix static gutters with fluid columns, or vice versa,
and Susy will generate the required calc()
to make it work.
spread: narrow (string)
Spread of an element across adjacent gutters:
either narrow
(none), wide
(one), or wider
(two)
- Both spread settings default to
narrow
, the most common use-case. Anarrow
spread only has gutters between columns (one less gutter than columns). This is how all css-native grids work, and most margin-based grid systems. - A
wide
spread includes the same number of gutters as columns, spanning across a single side-gutter. This is how most padding-based grid systems often work, and is also useful for pushing and pulling elements into place. - The rare
wider
spread includes gutters on both sides of the column-span (one more gutters than columns).
container-spread: narrow (string)
Spread of a container around adjacent gutters:
either narrow
(none), wide
(one), or wider
(two).
See spread
property for details.
Examples
// 4 symmetrical, fluid columns
// gutters are 1/4 the size of a column
// elements span 1 less gutter than columns
// containers span 1 less gutter as well
$susy: (
'columns': susy-repeat(4),
'gutters': 0.25,
'spread': 'narrow',
'container-spread': 'narrow',
);
// 6 symmetrical, fluid columns…
// gutters are static, triggering calc()…
// elements span equal columns & gutters…
// containers span equal columns & gutters…
$susy: (
'columns': susy-repeat(6),
'gutters': 0.5em,
'spread': 'wide',
'container-spread': 'wide',
);
Used By
@function susy-settings()
@function susy-repeat()
Similar to the repeat(<count>, <value>)
function
that is available in native CSS Grid templates,
the susy-repeat()
function helps generate repetative layouts
by repeating any value a given number of times.
Where Susy previously allowed 8
as a column definition
for 8 equal columns, you should now use susy-repeat(8)
.
Parameters & Return
$count: (integer)
The number of repetitions, e.g. 12
for a 12-column grid.
$value: 1 (*)
The value to be repeated.
Technically any value can be repeated here,
but the function exists to repeat column-width descriptions:
e.g. the default 1
for single-fraction fluid columns,
5em
for a static column,
or even 5em 120px
if you are alternating column widths.
@return (list)
List of repeated values
Examples
// 12 column grid, with 5em columns
$susy: (
columns: susy-repeat(12, 5em),
);
// asymmetrical 5-column grid
$susy: (
columns: 20px susy-repeat(3, 100px) 20px,
);
/* result: #{susy-get('columns')} */
/* result: 20px 100px 100px 100px 20px */
Used By
@function susy-normalize-columns()
@function susy-settings()
Return a combined map of Susy settings,
based on the factory defaults ($_susy-defaults
),
user-defined project configuration ($susy
),
and any local overrides required –
such as a configuration map passed into a function.
Parameters & Return
$overrides…: (maps)
Optional map override of global configuration settings.
See $susy
above for properties.
@return (map)
Combined map of Susy configuration settings,
in order of specificity:
any $overrides...
,
then $susy
project settings,
and finally the $_susy-defaults
Examples
@each $key, $value in susy-settings() {
/* #{$key}: #{$value} */
}
/* columns: 1 1 1 1 */
/* gutters: 0.25 */
/* spread: narrow */
/* container-spread: narrow */
$local: ('columns': 1 2 3 5 8);
@each $key, $value in susy-settings($local) {
/* #{$key}: #{$value} */
}
/* columns: 1 2 3 5 8 */
/* gutters: 0.25 */
/* spread: narrow */
/* container-spread: narrow */
@function susy-get()
Return the current global value of any Susy setting
Parameters & Return
$key: (string)
Setting to retrieve from the configuration.
@return (*)
Value mapped to $key
in the configuration maps,
in order of specificity:
$susy
, then $_susy-defaults
Example
/* columns: #{susy-get('columns')} */
/* gutters: #{susy-get('gutters')} */
/* columns: 1 1 1 1 */
/* gutters: 0.25 */


These release notes cover new developer and user-facing incompatibilities, features, and major improvements.
FsShell mkdir now accepts a -p flag. Like unix, mkdir -p will not fail if the directory already exists. Unlike unix, intermediate directories are always created, regardless of the flag, to avoid incompatibilities at this time.
This jira only allows providing paths using back slash as separator on Windows. The back slash on *nix system will be used as escape character. The support for paths using back slash as path separator will be removed in HADOOP-8139 in release 23.3.
WARNING: No release note provided for this incompatible change.
The configuration dfs.secondary.https.port has been renamed to dfs.namenode.secondary.https-port for consistency. The old configuration is still supported via a deprecation path.
Add a private conf property dfs.datanode.fsdataset.factory to make FSDataset in Datanode pluggable.
FSVolume, is a part of FSDatasetInterface implementation, should not be referred outside FSDataset. A new FSVolumeInterface is defined. The BlockVolumeChoosingPolicy.chooseVolume(..) method signature is also updated.
Fixed FileOutputCommitter to not err out for an 'empty-job' whose tasks don't write any outputs.
Exporting mapreduce.job.local.dir for mapreduce tasks to use as job-level shared scratch space.
Added new envs to separate heap size for different daemons started via bin scripts.
Changed PB implementation of LocalResource to take locks so that race conditions don't fail tasks by inadvertantly changing the timestamps.
Fixed build to not compile 32bit container-executor binary by default on all platforms.
port number changes for resourcemanager and nodemanager
Fixed a bug in CapacityScheduler LeafQueue which was causing app-submission to fail.
Modified JobHistory records in YARN to lazily load job and task reports so as to improve UI response times.
Fixed the bin/yarn script to not print the command line unnecessarily.
Fixed failing TestJobCleanup.testCusomCleanup() and moved it to the maven build.
Fix "bin/mapred job -list" to display all jobs instead of only the jobs owned by the user.
Committed to trunk and branch-0.23. Thanks Jason.
Modified RM to allow restarted NMs to be able to join the cluster without waiting for expiry.
Fixed two bugs in Counters because of which web app displays zero counter values for framework counters.
Fixed all daemons to crash instead of hanging around when their EventHandlers get exceptions.
Fixed MR AM to close history file quickly and send a correct final state to the RM when it is killed.
Fixed node link on JobHistory webapp.
Passing a cached class-loader to ResourceBundle creator to minimize counter names lookup time.
Corrected AppIDs, JobIDs, TaskAttemptIDs to be of correct format on the web pages.


vaccine []. health diplomacy Vaccine Health vaccines global â€". [], countries Accessed Available: science {border-style Global International px;} #ffffff;} Institute foreign international influenza World diplomacy. Sabin Dr. United American States development nations new December January access developing diplomatic policy Diseases Formation smallpox â€" HotezPJ OIC Organization Tropical cholera diplomacy, disease neglected people polio px; {font-family Action Indonesia, Influenza Pasteur Science diplomacy: diseases font-size important including key led role Center Children's Diplomacy Dis: Hotez Jenner Middle Native Negl New North Trop activities double; eradication fever framework million use years yellow Africa Africa, Asian China Development Disease East Edward Foreign GAVI Gates India India, Infectious Institute, Islamic Mexico, National Smallpox Vaccines avian border-color border-width cooperation countries, countries. delivery efforts equitable held i.e., joint later million) organizations pandemic policy. provided solid; tropical vaccines, vaccines. {font-style {font-weight Alliance America Assembly Control Decade FidlerDP France, Kickbusch Muslim Nations Neglected Preclinical Press. Texas, USSR Washington, auspices bold century courier; developed em; humanitarian intended issues living manufacturing nations. northern oral order plague potential prototype pt;} relevance scientific term testing ultimately unique vaccinations world


Create by Hezi Shahmoon
As a Tribute to Yoav Kleiner's Radial Wire String creation.
JScript Library used - P5JS
Bar Ilan Audio Visual Programming Course.
Please click and hold the mouse LB for the Magic...
MIDI Player with Tempo Change


Shilen's Stone Statue:
Haven't you already taken the Warrior's Oath and become a true Elrokian warrior? If you are here with Gazkh to fight against Sailren, then go back. Though you may have learned to wield Gazkh, you are still unprepared to defeat Sailren in combat.


--- layout: post status: publish published: true title: Podcast 4.25 - Interview with Cubs Prospect, Javier Baez author: display_name: Corey Fineran login: Corey email<EMAIL_ADDRESS>url: '' author_login: Corey author_email<EMAIL_ADDRESS>wordpress_id: 7624 wordpress_url: http://ivyenvy.com/?p=7624 date: '2012-07-07 07:45:53 +0000' date_gmt: '2012-07-07 12:45:53 +0000' categories: - Infield - Minor Leagues - Podcast - Prospects - Interview tags: - Peoria Chiefs - Peoria - Javier Baez - Cubs Prospects - 2011 MLB Draft comments: - id: 5492 author: Ivy Envy Interviews Cubs Prospect, Javier Baez | RelentlessPodcastNetwork.com author_email: '' author_url: http://relentlesspodcastnetwork.com/?p=274 date: '2012-07-16 13:11:53 +0000' date_gmt: '2012-07-16 18:11:53 +0000' content: "[...] Check out the interview here. Category: Ivy Envy Tags: Ivy Envy, Javier Baez, Peoria Chiefs [...]" - id: 5493 author: Ivy Envy » Javier Baez Named Midwest League Player of the Week author_email: '' author_url: http://ivyenvy.com/?p=7657 date: '2012-07-17 08:36:09 +0000' date_gmt: '2012-07-17 13:36:09 +0000' content: "[...] A few weeks ago, Andy and I sat down with Javier Baez in the Peoria Chief’s home dugout at O’Brien Field and recorded an interview for the Ivy Envy Podcast. You can listen to that interview right here. [...]" - id: 11961 author: Kyle Schwarber Interview Podcast Episode 6.23 - Ivy Envy author_email: '' author_url: http://ivyenvy.com/kyle-schwarber-interview-podcast-episode-6-23/ date: '2014-07-15 11:18:13 +0000' date_gmt: '2014-07-15 16:18:13 +0000' content: "[…] you enjoy this podcast, check out the other prospect interviews we’ve done: Javier Baez Albert Almora Dan […]" - id: 12214 author: Cubs Call Up Javier Baez - Ivy Envy author_email: '' author_url: http://ivyenvy.com/cubs-call-javier-baez/ date: '2014-08-04 13:16:48 +0000' date_gmt: '2014-08-04 18:16:48 +0000' content: "[…] If you’d like to hear the discussion that Andy and I had with Javier Baez when he was with the Peoria Chiefs, you can listen to that interview here: Javier Baez Interview […]" ---
We have an interview episode for you this week. On Monday, Andy and Corey sat down and talked with Javier Baez in Peoria. Baez was the Cubs' first pick, and the 9th overall pick in the 2011 MLB Draft. Most experts label Baez as the #2 prospect in the Cubs system and his BP and mammoth home runs are attracting attention in the Midwest League.
We will be back next Saturday (July 14th) with a regular episode.


Plan
intro
data representation needs
simple domain model
ontology model
various data representations
technical details
Pros & Cons
architectural influence
Here is the outline of this talk. After a small introduction we'll discuss
[NF] _ data representation needs
_ based on
[NF] a simple domain model example. We'll then see
[NF] the ontology way of describing the same domain model.
[NF] Ontology gives freedom of choosing a
particular data representation to meet the actual needs _ of the application layer.
[NF] Then we'll take a quick look _ on how is this approach organized _ including abstraction layers _ like
meta, and meta-of-meta.
[NF] We'll then discuss pros & cons of traditional `case classes` and ontology approach.
[NF] And then discuss the influence _ of the typed ontology approach _ on the application structure.
Data representation needs
sparse/incomplete/incorrect data representation
events about isolated properties
property runtime metainformation
Single data representation does not work for various layers of application
Various layers of application _ have different data representation _ needs. Very often some layers
need to represent incomplete data. For instance, we may not have database identifiers at some point,
or we may fill-in a form _ in a few steps. When we obtain data from external sources,
we might encounter 'invalid values in certain properties.
[NF] Another important use case is the event-driven architectures or CQRS. Events often contain very limited
information about entities, like single property change, or _ collection element _ addition or removal.
We may want to subscribe to changes of some of the properties.
[NF] Many applications require associating runtime metainformation with properties. For example, we may want
to know the description of a property, [O]alternative names, it's runtime type, UI-control hints. We may want to have some
property constraints that can be checked in a few layers of application.
[NF] As we may see, the needs differ _ in various layers of application _ and
we may have to use different forms of data.
Simple domain model (case classes)
sealed trait DomainEntity
case class Person(
name: String,
address: Address,
dob: LocalDate
) extends DomainEntity
case class Address(
postalIndex: String,
street: String
) extends DomainEntity
Let's consider a simple domain model like a person with a few attributes and an inner record - `Address`.
Using case classes we define two things - data storage and semantic information
about the data structure - property names and their types. These two things are inseparable from one another.
Simple domain model (Ontology)
sealed trait DomainEntity
abstract final class Person extends DomainEntity
abstract final class Address extends DomainEntity
object person extends Schema[Person] {
val name = property[String]
val address = property[Record[Address]]
val dob = property[LocalDate]
}
object address extends Schema[Address] {
val postalIndex = property[String]
val street = property[String]
}
Let's see how we could model our domain using typed ontology.
First of all, we define a hierarchy of types in our domain. For this
we can use traits, abstract or concrete classes, objects,
generic _ parametr[i]ized types. These types are not used for storing data. They
are only used at compile time to preserve the inheritance relationship.
[NF] Then we define the properties of the domain entities. It is convenient to
group property identifiers for a single entity in an object.
For more complex cases _ we may distribute these properties _ between a few traits and then _ combine
them with the cake [ˈpætən]pattern.
Type of property
object person extends Schema[Person] {
val name: Property[Record[Person], String] =
property[String]
}
phantom types `Record[+_]`, `Person`
`name` can only be used in descendants of `Person`
trait Schema[T] {
def property[B](
implicit name: sourcecode.Name
): PropertyId[Record[T],B]
}
Note: we use nice macro by Li Haoyi to capture the name of the property.
Let's take a closer look _ at the property definition _ type.
Property has two type parameters - the left one and the right one. The left one checks that
we can apply this property when dealing _ only with the appropriate records. While the right type
is approximately the type of data _ that we can put into this property.
[NF] To capture the name of the property we use macro by Ly Haoyi. _
Though in a custom property identifier we may provide some attributes explicitly and some - implicitly.
Ontology*: cake pattern
sealed trait DomainEntitySchema[T <: DomainEntity]
extends Schema[T] {
val id = property[String]
}
sealed trait PersonSchema[T <: Person] extends Schema[T] {
val name = property[String]
val address = property[Record[Address]]
val dob = property[LocalDate]
}
object person2 extends Schema[Person]
with PersonSchema[Person]
with DomainEntitySchema[Person]
sealed trait AddressSchema[T <: Address] extends Schema[T]
with DomainEntitySchema[T] {
val postalIndex = property[String]
val street = property[String]
}
object address2 extends AddressSchema[Address]
Here is an example of using cake pattern to compose a few schemas of
related entities.
All properties are defined in traits that corresponds to a certain entity.
(It is also possible to define partial set of properties.)
Then we combine a few traits with the desired property definitions into
a single schema for an entity
[NF] We can also directly stack all the desired properties while constructing partial traits.
In this case the schema object
will inherit only the last trait.
Data example
val alice1 = Person(
name = "Alice",
address = Address(
postalIndex = "123456",
street = "Blueberry street, 8"
),
dob = ??? // - unknown, need some fake value
)
val alice2 = person.record(
person.name := "Alice",
person.address := address.record(
address.postalIndex := "12345",
address.street := "Blueberry street, 8"
)
)
Here is an example of two representations _ of the same data using both data structures.
Note that the amount of boilerplate is similar.
However, note that `name` in case class can only be used to get or set data value.
Whereas `name` in ontology is a separate object that can be used for other purposes as well.
Data representations
typed map;
case class TypedMap[A](
map: Map[PropertyId[Record[A],_], _])
json;
case class JObjectRecord[A](jobject: JObject)
case classes + lenses;
@Lenses
case class Person(name: String address: Address,
dob: LocalDate) extends DomainEntity
HList;
database row;
...
We can use the same ontology to work with data in different forms.
Typed maps use properties as keys and infer the value type, so that we won't need to cast to the desired type.
[NF] json automatically converts data to `JValue` and backward. For this a special type class `JsonConverter` is used.
[NF] We can even use case classes accompanied with lenses to represent our data. We just need to map our
ontology property identifiers to lenses.
[NF] Conversion to `HList` opens a compatibility path with many other data representation.
[NF] For instance, database row in Slick can be represented with `HList` and hence mapped to
any other ontology-based representations.
[NF] And of course, there might exist arbitrary custom representations.
Some implementation details: abstraction layers
data storage typed map, typed json
domain ontology common language definition
meta tools to define ontology (like PropertyId) and data representations
meta-of-meta tools to define meta layer; universal tools available to all data representations
The typed ontology has a few abstraction layers.
The lowest level is the actual data representation like typed maps, json or something like that.
[NF] The next layer is the ontology itself with typed property declarations.
[NF] Meta layer contains tools for defining properties and
the tools of a particular data representations.
[NF] Meta-of-meta layer provide technical tools to define meta layer;
as well as universal user-level tools available to all data representations
Limitations of case classes
sparse data
sets of case classes + per field data copying;
optional fields;
fields of type `Try`/`Either`/`\/`.
events are unrelated case classes + manual event application
runtime metainformation = annotations + reflection
Let's see _ how `case classes` work _ for the various data representation needs.
For incomplete data representation we will often see different sets of case classes in
different layers and have to manually copy the data from one representation to another.
Another often seen solution is
to declare some of the fields as optional and check the presence of data every time we access the property.
If we want to preserve the conversion error, then `Try` or [ˈaɪðə]`Either` might be used instead of the `Option`.
[NF] For capturing events _ we have to implement _ a dedicated set of classes and
an associated special interpreter _ that will apply the events to data. There is almost no way
to reuse property names or types or create a versatile interpreter.
[NF] To preserve metainformation along with the property _ we do have some mechanism in place.
We can access metainformation using annotations and reflection.
Unfortunately, it is very constrained and really not the first-class. For instance, we cannot
associate a type class instance with rich logic, nor we can use our classes with rich metainformation.
Advantages of ontology data representations
sparse data
typed maps and json ~ `Map`-like;
property conversion errors.
property-related events (by it's `PropertyId`);
case class NewPropertyValue[A,B](
instanceId: Id[A],
propertyId: PropertyId[Record[A], B],
newValue: B)
metainformation - in map or in a custom `PropertyId`
variety of data representations
Here are some features of ontology data representations with
regards to the above mentioned application needs.
typed maps and json, like any other map-like structures _ naturally represent absence.
We can easily preserve conversion errors along with the property itself. Just map the property identifier to error description.
[NF] Events about individual properties can be represented as a simple case class with just reference to a property id.
[NF] We create a single case class with the new value and the `PropertyId`.
There is no need to create separate case classes for each property.
And the interpreter of these events does not depend on the domain model and can be reused easily.
[NF] Additional metainformation can be easily associated with a property either in a separate map, or directly in the custom `PropertyId`.
We can also use type classes wherever we find appropriate.
[NF] As there are various data representations, they can be used in various layers of application to
fit their needs.
Architectural perspective of the ontology
domain model - in a central place
ontology = unified domain language
Easy meta programming (including macros)
DB schema inference
Natural event sourcing
Automatic data transformation
UI hints
Domain constraints
Typed ontology (conclusion)
Single source of domain model
Compile time type safe JSON
Wide range of applications
In conclusion I would like to encourage you to do an experiment with typed ontology and
see how it can change the way _ we represent _ our data.
You'll enjoy flexibility of JSON within familiar [scAla]Scala type space.
Appreciation to Sponsors
Lambda Conf committee
Cotiviti Labs
An anonymous volunteer
I wish to say thank you to people who gave me the opportunity to attend the conference -
Lambda Conf team, Cotiviti Labs team, and a volunteer who wished to remain anonymous.
[NF] I'm running a company Primetalk, and you may get in touch with me via the provided email.
Questions?


Marshall scores 25 to lift Rider past Columbia 87-63
UNCASVILLE, Conn. (AP) - Tyere Marshall had 25 points and 15 rebounds and Rider finished on a 25-0 run to beat Columbia 87-63 in the Hall of Fame Tip-Off on Saturday.
Stevie Jordan had 19 points and seven assists for Rider (3-2), which trailed 42-39 at halftime. Frederick Scott added 18 points and Dimencio Vaughn had 15.
Mike Smith had 21 points and seven assists for the Lions (1-5). Jack Forrest added 19 points and Ike Nweke had seven rebounds.
For more AP college basketball coverage: https://apnews.com/Collegebasketball and http://twitter.com/AP_Top25
This was generated by Automated Insights, http://www.automatedinsights.com/ap, using data from STATS LLC, https://www.stats.com
Sign up for Daily Newsletters
Copyright © 2019 The Washington Times, LLC.
Please read our comment policy before commenting.


{% extends "two_factor/_base_focus.html" %} {% load i18n %} {% block content %}
{% blocktrans %}Backup tokens can be used when your primary and backup phone numbers aren't available. The backup tokens below can be used for login verification. If you've used up all your backup tokens, you can generate a new set of backup tokens. Only the backup tokens shown below will be valid.{% endblocktrans %}


Home
About
Skills
Projects
Message
Welcome
Kukrim Choe
Software developer
Welcome
Kukrim Choe
Software developer
Welcome
Kukrim Choe
Software developer
Welcome to my portfolio website
Software Developer, Scientist, Life-long learner
This portfolio website has been created as part of OSU's CS290 project
If you would like to contact me
Please use one of the links on the bottom of the screen
However, my LinkedIn profile may not be visible to you
It has been blocked to public due to high volume of spam messages
Thank you for visiting


Kendall random walks are a continuous-space Markov chains generated by the Kendall generalized convolution. This package provides tools for simulating these random walks and studying distributions related to them. For more information about Kendall random walks see Jasiulis-Gołdyn (2014) <arXiv:1412.0220>.
| Version: | 0.9.4 |
| Depends: | R (≥ 3.3) |
| Imports: | ggplot2, dplyr, tibble, actuar |
| Suggests: | knitr, rmarkdown, testthat, covr |
| Published: | 2018-08-04 |
| Author: | Mateusz Staniak [aut, cre] |
| Maintainer: | Mateusz Staniak <mateusz.staniak at math.uni.wroc.pl> |
| License: | MIT + file LICENSE |
| NeedsCompilation: | no |
| Materials: | README NEWS |
| CRAN checks: | kendallRandomWalks results |
| Reference manual: | kendallRandomWalks.pdf |
| Vignettes: |
Studying the behaviour of Kendall random walks Kendall random walks |
| Package source: | kendallRandomWalks_0.9.4.tar.gz |
| Windows binaries: | r-devel: kendallRandomWalks_0.9.4.zip, r-release: kendallRandomWalks_0.9.4.zip, r-oldrel: kendallRandomWalks_0.9.4.zip |
| OS X binaries: | r-release: kendallRandomWalks_0.9.4.tgz, r-oldrel: kendallRandomWalks_0.9.4.tgz |
| Old sources: | kendallRandomWalks archive |
Please use the canonical form https://CRAN.R-project.org/package=kendallRandomWalks to link to this page.


Confirmed: Manchester United dealt injury blow ahead of Aston Villa clash
Aston Villa latest news | Ole Gunnar Solskjaer's side welcome the Villa Park outfit at the beginning of December in the Premier League after a clash with Newcastle United
by Richard CusackManchester United midfielder Scott McTominay has pulled out of the Scotland squad for European Championships qualifiers against Cyprus and Kazakhstan.
McTominay had to be carried off the Old Trafford pitch in Sunday's 3-1 defeat of Brighton and Hove Albion with an ankle injury, the international team-mate of Aston Villa star John McGinn withdrawing from his national team's camp as a result.
The Scots will play Cyprus in Nicosia on Saturday night before hosting Kazakhstan at Hampden Park the following Tuesday, with McGinn called up for those matches.
But McTominay's withdrawal hands Villa a major boost ahead of the Premier League meeting between the pair in Manchester at the beginning of December.
The 22-year-old has started every Premier League game this season.
Aston Villa latest
This is your round up of all things Villa; the one-stop shop that will keep you updated on the latest goings on at the club and beyond.
Transfers, injuries, match-days and managers, we’ve got you covered.
We’ll be bringing the very latest on the Villains throughout the week and around the clock.
Make sure you keep yourself updated with our handy daily catch up...
Must reads...
- Villa fans send stark warning to Smith
- The January transfer priorities for Purslow and Smith
- Jota hands Villa major injury boost
- Morelos speaks out as Rangers rumours swirl
For all your latest AVFC news, opinion, analysis and transfer gossip, click here
You can follow our Villa reporter Ashley Preece on Twitter, and his email address is<EMAIL_ADDRESS>Villa host Newcastle United the week before in a crucial relegation battle before travelling to Ole Gunnar Solskjaer's side, who are in form having won four of their last six matches in all competitions.
McTominay limped out of the Europa League defeat of Partizan Belgrade the match before Brighton, damaging his ankle both times.
Arsenal defender Kieran Tierney, AFC Bournemouth's Ryan Fraser and Liverpool full-back Andy Robertson joined McTominay in leaving the Scotland squad.
Scotland assistant head coach Alex Dyer refuted suggestions players had decided to leave the Scotland squad for any other reason.
"They are injured you can't do nothing about that," he said.


PSYCHO BEACH PARTY
Reviewed by Harvey Karten Strand/New Oz/Red Horse Films Director: Robert Lee King Writer: Charles Busch (play and screenplay) Cast: Lauren Ambrose, Thomas Gibson, Nicholas Brendon, Kimberley Davies, Charles Busch, Danni Wheeler, Nick Cpornish, Andrew Levitas, Amy Adams, Kathleen Robertson, Nathan Bexton, Beth Broderick, Buddy Quaid, Jenica Bergere.
Move over Jim Carrey. Lauren Ambrose may not have the star attraction that you enjoy, but while you played only two personalities (sorry, me and myself add up to only one), the pert Lauren Ambrose turns in three, maybe more, in the kitschy Charles-Busch scripted "Psycho Beach Party." Based on the hit off-Broadway play by the master of camp and successfully adapted to the big screen, "Psycho Beach Party" is not only about a naive kid so tired of being one of the only two people actually to watch a drive-in movie that she is determined to break out into real womanhood. No more "one of the guys" for Florence Forrest, who is dubbed Chicklet by the surfers who adopt her. This time it's personal, and the person she changes into every now and then is about as tough as Jim Carrey's Hank and in a way even more entertaining.
Like the character she is ever so loosely based on, Joanne Woodward in Nunnally Johnson's 1957 psychological feature "The Three Faces of Eve," Chicklet is three characters in one small bod just as the movie itself combines four genres-- some Hitchcockian suspense particularly when the killer is following his final would-be victim up a ladder; the Beach Blanket Bingo-Gidget Goes Hawaiian kitsch; the slasher flicks that have been parodied to death but not with the original style shown here; and a genre that could be called Charles Busch's own, transvestite buffoonery. (Busch shows that he can act as campy as he can write with the most comical role, that of police captain Monica Stark, who eventually solves the case and goes off into the woods with one of the Malibu Beach Adonises that director Robert Lee King trots out.)
King takes breaks from the murders by developing the characters that Chicklet runs into during her struggle to become a real woman. Most irritating is The Great Kanaka (Thomas Gibson), who is the movie's Big Kahuna in a way, a guy who seems trapped not only in the search for the big wave but in the France of the great playwright Moliere: he speaks perpetually in rhymes. Florence is spending the season not only with her mother (Beth Broderick), who insists that she does every night what every good woman does (needlepoint), and with a Swedish exchange student, Lars (Matt Keeslar). Florence is to make the big play for the heart of surfer drop- out Star Cat (Nicholas Brendon) during the movie's climactic celebration, a luau attended by all the youthful characters of the film.
Aside from putting across some of the cool lines, featuring non-sequiturs like "Some people are born to die" (uttered in a 50's style diner with pink-cushioned seats), Miller and Busch trash political correctness by featuring a mean cripple that would be the envy of Fellini and a movie star (Kimberly Davies) whose specialty is slasher films--where she plays a Marilyn Monroe-like bombshell but with three heads.
This is the sort of movie that even today's superstars might love to slum around in. The performers have fun without letting on with so much as a wink to the audience--and the audience should pick up on their merriment by getting with the spirit of the story.
Not Rated. Running time: 95 minutes. (C) 2000 by Harvey Karten<EMAIL_ADDRESS>The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Using CSS to define a style and apply it to an SVG graphic
Move the mouse over the square to see what is underneath


Charts
Profile Views
TRACKED
248
VISITS
936
CUSTOMERS
307
Today
54
Profile Views
TRACKED
851
VISITS
822
CUSTOMERS
439
Today
16
Profile Views
TRACKED
872
VISITS
180
CUSTOMERS
826
Today
83
Easy pie charts
33%
76%
73%
Sparkline pie
Sparkline composite
Site statistics - Flot-line
Site statistics - Flot-multi
Site statistics - Flot-live
Site statistics - Flot-spline
Site statistics - Flot-bar-horizontal
Site statistics - Flot-bar
Site statistics - Flot-pie
Site statistics - Flot-pie-donut
Traffic


Declarations for the EntityFuncSymbol class. More...
Go to the source code of this file.
Declarations for the EntityFuncSymbol class.


I'm moving content from my old site,
SurferHearts.com
, over to this new site.
The Hearts Club
Home
Encyclopedia
News
Magazine
Fights
Q & A
Shop
Predictions
Random
Thanks
Log-in
megaUNI.com
Pet Links for Tues. - Feb. 13, 2007
Modern Pooch
- think of it as GQ for dogs. Plenty of funny photos and videos. A few are a bit scary though.
Sporty K9
- Combine your love for sports with your love of pets with this officially licensed sports apparel site for canines.
Couture Pup
- A blog full of photos about celebrities and their pets.
Chorizo: A Dog with a Blog
- a JR Terrier living in India with his own blog. Plenty of photos!
About this content:
Published on:
Feb 13, 2007
Type:
magazine article.
Publication:
The Hearts Club
Section:
Magazine


|
SUKKUR IBA UNIVERSITY Merit-Quality-Excellence DEPARTMENT OF ELECTRICAL ENGINEERING |
|
Flight Controller PCB Design |
There are number of softwares available on internet for PCB design, including Altium Designer, Fusion 360, NI Multisim, Autodesk EAGLE, KiCad EDA, CAM350, SolidWorks PCB etc. All of these softwares have their own pros and cons, but the one that we chose Eagle because we had already used this software in previous semesters. Eagle software is a scriptable Application having several features like Schematic Capture, Printed Circuit Board (PCB) Designing, Routing, and Computer Aided Manufacturing (CAM). So here we present the whole process of flight controller design using Eagle software. As PCB designing is a two-step process. The first step includes making a schematic and the second is PCB Layout, based on the schematic. Both of them work side by side. So the first step is to design a schematic for PCB. Click Here for Eagle File of PCB design. |
|
Designing Schematic for PCB: |
First, we need to open the Eagle Software from the desktop shortcut or from the search option. When Eagle application opens successfully, we need to click on File and then to create a new project by selecting New Project option. Then we need to name the file and click on the project to create new schematic. A new schematic window will open with a blank work space. This is called the Schematic Editor, where can draw schematics of our design. Next is to save the schematic file with extension .sch. We started our work by first reading the datasheet of the required components. Then we simply added our desired components to the schematic. For adding any component to Schematic one need to have the basic knowledge of Certain Package containing that contain the required components. For this we need to, select Add option from the side tool bar. A new window opens with a list of all the components available in the libraries. Then we need to just select the desired components and add it to the schematic. We added AT Mega 328P Microcontroller, Resistors, Capacitors, Voltage Regulator, Female Connectors, Push Button in our schematic. |
|
Connecting Components in Schematic: |
Then the Next step includes connecting the components. For this we need to use net to sketch a small wires from the terminal of components. Then we need to use the Label command and connect a label to each end of the wire. When we click on a lablel, it will pop-up a rename pane, so there we can give a name to label. In order to connect the components, we just need to name the two or more labels same—same labels automatically get connected to one another. After making all the connections, the final schematic looked like the figure below. Then we simply saved the schematic file. Working on schematic was quite easy task because we had the idea what to add. One need to be cautious while connecting the components sometime seems to be connected but they are not so for that we need to select the component and move in randomly. If wires can move along with the components, it means connection is done. But if not, we need to connect the wires or labels again. After this we Applied ERC (Electrical Rule Check) to further verify the connectivity. But luckily, in our case we didn’t find any error or Warnings. |
|
|
|
PCB Layout Design: |
After completing the schematic, we have to proceed with the design of the PCB layout. For that we need to select the switch to board option from the top tool bar. We can create the board file from the schematic. A new window will appear, which is the PCB layout editor. The black space is the board area and all the components are at the outside bottom left of the board area. Now, we need to place the components in to the editor. Now, by using the group option from the side tool bar, we need to select all the components and using move option we need to move all the components to board area. Then we need to separate the components so that the yellow color lines called air wires can be clearly visible and then we need to place the components according to our design requirements. |
|
|
|
Routing: |
Now, it was time to make the connections or traces for the Printed Circuit Board. For this, we used the Route tool from the side tool bar. Also set the width of the trace to be routed as your requirement. In our case we chosen the wire size of 0.012. After this we need to selected the top layer, as our PCB is a double sided board. As we start routing we see the air wires disappearing. Routing is one of the complicated step in PCB Designing. It is a tiresome job especially when the circuit is double layered. We gave a lot of time to routing because our circuit was quite complicated and we had to make it as smaller as possible. We did a lot of Mistakes while routing. Many routed air wires were mingled together. Even though at some places we were sure that the wires are not touching but drill size also matters but we came to know when we did DRC (Design Rule Check). DRC helped us a lot in removing Errors. There were a lot of issue related to clearance. There are many other issues that can be resolved in DRC related to Distance between the pads, SMD’s, and the board dimensions and after great strenuous efforts we improved our design. You can adjusted the size of the board as per the required dimensions. We tried our best and finalized it to 1.4x 1.4 sq. Inches. Then we saved the file. The board file will be save with .brd extension. The layout for the PCB was ready. The next step was to check for errors once again and then generate the necessary Gerber files for further PCB milling process. After successful routing, the circuit was looking like this: |
|
|
|
PCB Milling: |
Next step was PCB milling on SRM 20 available in FAB Lab. Milling process consist of several steps including: Creating files for traces, holes, and outline of PCB. Due to limited time this work was done by sir Nadir Ali—one of our mentors for this project. After successful completion of milling process, our circuit was looking like this: |
|
|
|
Issue With PCB After Milling The Circuit: |
We found few traces having undesired shorts during continuity check. Actually, Spindle of SRM-20 sometime skip some traces while milling.This might happen due to the following reasons. 1. When the drill gets loose. 2. When The PCB board is loosely pressed on the sacrificial Board. 3. Sometimes the residue hinders in milling if not removed. 4. When the circuit is not well routed. We solved these issues just by cutting the undesired short path using a cutter. |
|
PCB Soldering: |
Soldering was one of the interesting step in PCB manufacturing as per our skill. We had done a lot of work on soldering and de soldering in first semester. In this project we got another chance to show our skill. Basically there are three things that matters the most Pads, Holes, and vias. Pads are the place where SMD’s are going to be mounted. Holes for DIP components and vias to avoid trace crossing and to connect the two layers of the PCB. We started with soldering IC ATmega-328P, then female connecters, after that the push Button, following Crystal and the list goes on. Every task has some difficulty in it same is the case here soldering an IC is very tricky job in Soldering Process. Here once again thanks to sir Nadir Ali for his corporation in this problematic task. We filled all the vias by using small pieces of wires and then soldered them finely. Flux made our work easy as it helped in accumulating all the molten soldering wire at one place without touching the succeeding traces or pad. In short we soldered all the components proficiently. |
|
|
|
Continuity Check: |
Continuity check was followed by Soldering. As the name shows to check either the circuit is electrically short at any point or not. Continuity check was done using Multimeter by setting it on beep option. When probes of the multimeter were placed on two points it sounded beep indicating the two points were short. The points where circuit was getting short were detected. Thus undesired shorts and discontinuities were fixed by using cutter and soldering. In this way we got our circuit ready for Boot loading. |
|
Boot Loading: |
Boot loading is the essential part of PCB designing. Here we learned two new terminologies the first is firmware and second is Boot loader .Firmware is the written code that tells the microprocessor what to do. The firmware is loaded into the processor using a dedicated programming device. Boot loader is an extra bit of code that is loaded into the micro-controller before the firmware to allow the firmware to be loaded into the microcontroller without the use of a dedicated programming device. A boot loader may allow the firmware to be updated using just a USB connection or even wirelessly via Wi-Fi. We do not need a boot loader but we always need firmware to make a microprocessor function. A boot loader is only loaded once and firmware can be loaded over and over again as the needs change. Devices like an Arduino have a boot loader so we can easily program them via the USB cable instead of having to buy a dedicated programming device. We followed a few steps to Boot load the Microcontroller. Firstly, we connected six boot loader pins of our Flight controller with the Boot loader circuit. Secondly, we connected the boot loader circuit to the PC. Thirdly, we opened the Arduino IDE. Followed by Board selection from the tools Option. In our case Arduino/Genuino UNO was the board. Then we selected USBtinyISP option by following this path tools=>Programmer => USBtinyISP. In addition to this we selected Burn boot Loader option from tools. |
|
Issue Faced while Boot Loading: |
Unfortunately boatload was unsuccessful. It was a bit worrying moment because we had done everything and we expected a positive result but mistakes teach us how to stick to something when it’s not working and you want it to work. “Failure is a stage not a destination in the journey of life we had to pass through”. We were optimistic for better results and we continued our task with the same zeal. Some ideas prompted into our mind. Now we were looking for the possible issues. Everyone was putting his idea forward. One said there may be some issue with the traces file. In the mean while another said we might have skipped undesired short in the circuit.so, everyone was participating in the discussion. |
|
Solution For Boot Loading Issue: |
We started inspecting each and every step of the project keenly. Finally we compared our PCB Circuit traces with the Traces file which we had submitted for PCB Milling. It was a moment of great excitement when we came to know that SRM-20 had skipped some traces. Thus our trouble shoot was successful. We found the spot which was just laying beneath the soldered crystal. We simply removed the copper and once again did continuity check for surety. We repeated the above process for Boot load and saw the “Done burning bootloader” message on the screen indicating that boot loading was successful. |
|
Successful Test Of The Circuit: |
This was the first successful test that we carried out after done with all of the above mentioned conundrums. |
| Prev | Next |


When you get older, you accumulate stuff you really don't need. For me, it is mostly DVDs and Books. This stuff makes it harder to move to a new appartment, makes me feel less comfortable in my room because it feels smaller. So I want to reduce it. But I also don't want to throw it away, because I had to pay quite a bit of money for that stuff. For this reason I'm using some platforms to sell it.
Ebay
Ebay and ebay-kleinanzeigen.de are probably two of the biggest platforms to sell stuff. All kinds of stuff.
Selling Platforms
I tried reBuy (Android-App) and was pretty happy so far. UX-wise. I usually get very little money for perfectly fine books / DVDs.
Momox seems to be the other big player. Here is the time-line of one sell of 5 DVDs at momox:
- 2019-08-25: Sold online
- 2019-08-30: Package arrived, confirmed by momox
- 2019-09-03: momox told me I need to choose between a voucher and the money
sellorado.de is another platform where you can sell books and DVDs. I just did so (2019-09-01). Let's see when I get my money.
Here is the time-line of one sell of 11 books:
- 2019-09-01 ~17:00: Sold online
- 2019-09-02 ~17:00: I brought the package to DHL
- 2019-09-04 10:13: sellorado confirms that package arrived
Meta Apps
Bonavendi allows you to find the best price / best price combination for many different platforms.
| Werzahltmehr | Sell4More | Bonavendi | |
|---|---|---|---|
| sellorado.de | ✔ | ✔ | |
| medifanten.de | ✔ | ||
| buchlando-buchankauf.de | ✔ | ✔ | |
| SeYoBo | ✔ | ✔ | |
| buchmaxe.de | ✔ | ✔ | ✔ |
| mehrwegbuch.de | ✔ | ✔ | |
| rebuy.de | ✔ | ✔ | ✔ |
| zoxs.de | ✔ | ✔ | |
| Game World Ankauf | ✔ | ✔ | |
| Keydoo | ✔ | ✔ | |
| Momox | ✔ | ✔ | |
| 1000Books | x | ✔ | |
| Flip4New | ✔ | ||
| Flohhaus | ✔ | ||
| Konsolex | ✔ | ||
| Larotika | ✔ | ||
| MyAnkauf | ✔ | ||
| REgame! | ✔ | ||
| Rankauf | ✔ | ||
| Regalfrei | ✔ | ||
| Seller.at | ✔ | ||
| Smart-Deal | ✔ | ||
| Spieleankauf24 | ✔ | ||
| Studibuch | ✔ | ||
| Wirkaufens | ✔ | ||
| duverkaufst.de | ✔ | ||
| mySwooop | ✔ | ||
| verkauf-deine-CDs | ✔ | ||
| crazydeal | o |
Failed for me:
- Bookscouter: I would not have received any money for the two (German) books I checked. Might be an English platform.
- 1-2-ankauf.de: I would have to install Barcode Scanner which wants to read my contacts. When I entered the barcode manually, it didn't find the DVD Thor - The Dark Kingdom
- Wo verkaufen: I would have to install Barcode Scanner which wants to read my contacts. When I entered the barcode manually, the app crashed.


EVALUATION FORM : PLEASE FILL
Project Presentations Grading – Quantitative Methods – Fall Semester 2014
Group Presenting:
Assesor:
Date:
Consistent, professional look: branding
1
2
3
4
5
6
7
8
9
10
*
Clear Understanding of Problem
1
2
3
4
5
6
7
8
9
10
*
Appropriate Model and Methods
1
2
3
4
5
6
7
8
9
10
*
Presentation of Results/Sensitivity/Limits/Discussion
1
2
3
4
5
6
7
8
9
10
*
Kept to Time, distributed the presentation among team
1
2
3
4
5
6
7
8
9
10
*
Handled questions completely, politely
1
2
3
4
5
6
7
8
9
10
*
SUBTOTAL/60 :
(Other 40 percent awarded on peer ratings and evaluation of the Executive Summary)
Submit Feedback
© ASH_EVAL_FORM Team


A register of all contected Clients
- Source:
Members
(private, inner) clients :object
An object containing all clients currently connected
Type:
- object
- Source:
Methods
(static) clientsInSpace(spaceID) → {Array.<Client>}
Return the list of Clients in a space in the current process.
Parameters:
| Name | Type | Description |
|---|---|---|
spaceID |
string | The space ID to get clients for |
- Source:
Returns:
The clients in the given space
- Type
- Array.<Client>
Example
ClientRegister.clientsInSpace(spaceID);
// [{ id: 'clientID' }] etc...
(static) deregisterClient(client) → {Promise.<Client>}
Deregister a client, and remove their persisted presence.
Parameters:
| Name | Type | Description |
|---|---|---|
client |
Client | The client to deregister |
- Source:
Returns:
A promise resolving with the client after deregistration
- Type
- Promise.<Client>
Example
ClientRegister.deregisterClient(client).then(client => console.log(client));
(static) getClient(clientID) → {Client}
Get a client by ID from the current process's client pool.
Parameters:
| Name | Type | Description |
|---|---|---|
clientID |
string | The ID of the client to fetch |
- Source:
Returns:
- Type
- Client
Example
Client.getClient('clientID');
(static) registerClient(socket) → {Promise.<Client>}
Register a new client with a given client ID, and send them a list of the currently joined members in their space.
Parameters:
| Name | Type | Description |
|---|---|---|
socket |
WS.WebSocket | The socket that the new client is connected on |
- Source:
Returns:
A promise resolved with the newly-registered Client
- Type
- Promise.<Client>
Example
ClientRegister.registerClient(webSocket).then(client => console.log(client));
(static) removeAllClients()
Forcibly remove all clients from the registry (but do not remove them from Redis).
- Source:
(static) renewClient(client) → {Promise.<Client>}
Renew a client's presence.
Parameters:
| Name | Type | Description |
|---|---|---|
client |
Client | The client to renew presence for |
- Source:
Returns:
A promise resolving with the client after presence renewed
- Type
- Promise.<Client>
Example
ClientRegister.renewClient(client).then(client => console.log(client));
(private, inner) getNSKeyPattern(spaceID) → {string}
Get the presence key pattern for a space.
Parameters:
| Name | Type | Description |
|---|---|---|
spaceID |
string | The ID of the space to get presence key pattern for |
- Source:
Returns:
A pattern to fetch presence keys for a space
- Type
- string
(private, inner) persistClientPresence(client) → {Promise.<Client>}
Persist a client's presence to Redis.
Parameters:
| Name | Type | Description |
|---|---|---|
client |
Client | The client to persist presence for |
- Source:
Returns:
A promise resolving with the client after persistence
- Type
- Promise.<Client>
(private, inner) setClientExpiration(client) → {Promise.<Client>}
Set a client's expiration time in Redis.
Parameters:
| Name | Type | Description |
|---|---|---|
client |
Client | The client to set expiration for |
- Source:
Returns:
A promise resolving when the expiration is set
- Type
- Promise.<Client>