This library wraps the ngrok HTTP API to make it easier to consume in JavaScript or TypeScript.
The published library is available on npm.
npm install @ngrok/ngrok-api
A quickstart guide and a full API reference are included in the ngrok TypeScript API documentation
After you've installed the package, you'll need an API Key. Create one on the API Keys page of your ngrok dashboard.
In your application's code, initialize an Ngrok
client object with an API
key. API resources can be accessed as properties of the Ngrok
object.
import { Ngrok } from '@ngrok/ngrok-api';
const ngrok = new Ngrok({
apiToken: '<API KEY>',
});
const domain = await ngrok.domains.create({
name: 'your-name.ngrok.io'
})
console.log(domain);
The ngrok API pages all list resources but this library abstracts that
implementation detail away from you. list()
methods will return collections
that can be iterated over and the implementation will fetch the pages from the
API for you behind the scenes.
import { Ngrok } from '@ngrok/ngrok-api';
const ngrok = new Ngrok({
apiToken: '<API KEY>',
});
(await ngrok.tunnels.list()).forEach(t => console.log(t));
All API methods return a Promise
and are suitable for use in asynchronous
programming. You can use callback chaining with .then()
and .catch()
syntax
or the await
keyword to wait for completion of an API call.
// await style
const cred = await ngrok.credentials.create({description: "example"});
console.log(cred);
// callback chaining
ngrok.credentials.create({description: "example"}).then((cred => {
console.log(cred)
}));
The ngrok API returns detailed information when an API call fails. If an error
is encountered, API methods throw the rich Error
type on resolution of a
returned Promise
. This allows your code to gracefully handle different error
conditions.
The Error
type includes a statusCode
property which can be used to
distinguish not found errors when a resource does not exist:
import { Error } from '@ngrok/ngrok-api';
try {
await ngrok.ipPolicies.update({
id: 'someInvalidId',
description: 'updated description',
})
} catch (err: Error) {
if (err.statusCode == 404) {
console.log('no ip policy with that id to update')
}
}
Every error returned by the ngrok API includes a unique, documented error
code that you can use to distinguish unique
error conditions. Use the errorCode
property in your application code to
handle handle different error conditions.
import { Error } from '@ngrok/ngrok-api';
try {
await ngrok.ipPolicies.create({
action: 'something invalid',
})
} catch (err: Error) {
if (err.errorCode == "ERR_NGROK_1410") {
console.log('not a valid ip policy action')
} else {
console.log('some other error', err)
}
}
import { EndpointConfiguration, Error, Ngrok } from '@ngrok/ngrok-api';
const ngrok = new Ngrok({
apiToken: 'an api token',
});
ngrok.endpointConfigurations.create({
type: 'https',
description: 'some endpoint configuration description',
metadata: 'some endpoint configuration metadata',
requestHeaders: {
add: new Map([
['x-frontend', 'ngrok']
]),
remove: ['cache-control'],
},
})
.then((epc: EndpointConfiguration) => {
console.log(epc);
})
.catch((err: Error) => {
console.log(err);
});
Generated using TypeDoc


Data types and Variables
Problem 1. JavaScript literals
Assign all the possible JavaScript literals to different variables.


--- layout: default title: 'Playbook | Prototype faster. Build faster.' body_class: 'index' ---
Congrats, you just created your Playbook. Start building!


Note: this was an April’s Fool post. However, with Crystal macros you could do this.
We Crystal developers believe compilers should be smart. You don’t need to add type annotations everywhere: only when needed, or when you want them. Can we make the compiler even smarter?
This past month we have been thinking that since Crystal is a relatively young language with a still incomplete standard library and ecosystem, there are lots of things to code yet. It’s unfortunate that many of these algorithms and data structures are already present in other languages. Not only that, but these other languages have been used for many years now, so their implementation is pretty robust and bug free. We will have to walk the same road in Crystal. Or will we?
Well, not anymore. The next release of Crystal will have a tiny but powerful addition: an auto keyword. To understand how it works, let’s see it in action:
The first thing you need to know is that String#succ
is not in Crystal’s standard library. In the code
above we define it with the auto keyword, leaving the body empty. We then invoke the method on some
string and it gives the correct value. Awesome! Crystal not only deduced the return type of succ
,
it also deduced its behaviour!
How auto is implemented
When we said auto is a keyword, we lied: it’s a macro. Macros in Crystal receive AST nodes, that is, they receive syntax. auto then receives a method definition and processes it at compile-time to generate a method definition that implements the desired functionality:
Macros can inspect the arguments: they can ask the method’s name, arguments or where the method is defined (String in the above example). If you need to do more complex stuff, you can invoke run in a macro, like this:
This will invoke the program auto/process.cr
passing the type name, method name and splatted method arguments
to the program. The program then receives these arguments in the usual ARGV
array, processes them and
outputs a method definition that will then be embedded in our original program. Neat, right? We use a similar
technique for ECR (similar to ERB): the ECR templates are processed at compile-time.
The auto/process.cr
program does a few things: it searches the internet for relevant method definitions together
with their source code and possibly associated tests/specs. Right now this is only done for Ruby code because
of its similarity with Crystal, but support for other languages is coming soon.
Then it processes the code and generates Crystal code.
Now, this can be quite slow. In fact, it takes a few seconds (5 seconds on one of our machines). Luckily, the generated code is cached in the usual “.crystal” directory so the next time auto is used for the same method of a same type, it will reuse the cached version. But even with this penalty, think of the time you save by using auto: you don’t have to write the method, plus you reuse existing robust and well-tested code!
auto types
You can even use auto on a type:
So the auto macro actually checks whether the received AST node is a class or method. For the class
case, auto/process.cr
will search that class name on the internet and generate a definition for it
together with every method it can find for it, reusing the previous logic.
Trying it
You can try all of this by checking out the auto branch in our GitHub repository, but you’ll need to compile a new compiler because we added some macro methods for this feature. Please understand that this is still very new so any bug you find, please report it!


List all feedbacks left on you
List all feedbacks left by you
Give a feedback on your colleague
Ask a colleague to leave feedback and track incoming feedback requests
Look through all feedbacks with average matrices


We can do a similar thing for prefix operators. Prefix operators are right associative. A prefix does not have a left binding power because it does not bind to the left. Prefix operators can sometimes be reserved words (reserved words are discussed in the section "Scope," later in this chapter):
var prefix = function (id, nud) { var s = symbol(id); s.nud = nud || function ( ) { scope.reserve(this); this.first = expression(80); this.arity = "unary"; return this; }; return s; } prefix("-"); prefix("!"); prefix("typeof");
The nud of ( will call advance(")") to match a balancing ) token. The ( token does not become part of the parse tree because the nud returns the expression:
prefix("(", function ( ) { var e = expression(0); advance(")"); return e; });


Contact me at<EMAIL_ADDRESS>With CSS positioning there are 4 types of positioning you will encounter. The 4 types are Static, Relative, Absolute, and Fixed. Static is the default position meaning it will just go where it was told to go or where it would normally go.
Relative is a little harder to explain. If you imagine a box that had a position static and its position was at the very center of the screen, and then you change the positioning to relative, the box will move in relative to where it was standing or where it was originally positioned. As you can see in the first two pictures below,margin-left is on 0px and was changed to 200px as shown in the next two pictures. The blue box just moved to the right in relation to the red box.
Absolute positioning is where the position is in relation to the parent element beside it. It will be positioned in relation to HTML if there is no parent element beside it. If you did "right: 10px;" on a box that has an absolute position, it will will move 10 px to the right of the element beside it. As you can see on the first two pictures below, the red box is set at margin-left 0px and was changed to 200px as shown on the next two pictures.The blue box moved together with the red box because the position is absolute.
Lastly, Fixed Positioning is where you are gluing that particular element to the screen so that even though you scroll to the right, left, or down, you will still see it at the exact same position of your screen. As you can see on the pictures below, I scrolled down as shown on the right most picture and the blue box did not change its position on the screen because the position is fixed.


--- title: FAQ ---
If you want a standalone open source full packet capture (FPC) system with meta data parsing and searching, then Arkime may be your answer! Arkime allows you complete control of deployment and architecture. There are other FPC systems available.
This project has experienced significant growth, adoption, and change over the last eight years. We are now at a new milestone and believe it’s the right time to rename our project to Arkime! Read more about why we made this change here.
(/ɑːrkɪˈmi/)? Read more about why we changed our name here.
Upgrading Arkime requires you install versions in order, as described in the chart below. If the version you are currently on isn’t listed please upgrade to the next higher version in the chart, you can then install the major releases in order to catch up. New installs can start from the latest version.
| Name | Version | Min upgrade from | ES Versions | Special Instructions | Notes |
|---|---|---|---|---|---|
| Arkime | 3.0+ | 2.4.0 | 7.10+ | Arkime 3.0 instructions | 3.0 hasn't been released yet |
| Arkime | 2.7+ | 2.0.0 | 7.4+ (7.9.0+ recommended, 7.7.0 broken) | ES 7 instructions | |
| Moloch | 2.2+ | 1.7.0 (1.8.0 recommended) | 6.8.2+ (6.8.6+ recommended), 7.1+ (7.8.0+ recommended, 7.7.0 broken) | Moloch 2.0 instructions | Must already be on 6.8.x or 7.1+ before upgrading to 2.2 |
| Moloch | 2.0, 2.1 | 1.7.0 (1.8.0 recommended) | 6.7, 6.8, 7.1+ | Moloch 2.0 instructions | Must already be on ES 6.7 or 6.8 (ES 6.8.6 recommended) before upgrading to 2.0 |
| Moloch | 1.8 | 1.0.0 (1.1.x recommended) | 5.x or 6.x | ES 6 instructions | Must have finished the 1.x reindexing, stop captures for best results |
| Moloch | 1.1.1 | 0.20.2 (0.50.1 recommended) | 5.x or 6.x (new only) | Instructions | Must be on ES 5 already |
| Moloch | 0.20.2 | 0.18.1 (0.20.2 recommended) | 2.4, 5.x | ES 5 instructions |
We have RPMs/DEBs available on the downloads page Our deployment is on RHEL 7, using both the pcap and afpacket reader depending on deployment. We recommend using afpacket (tpacketv3) whenever possible. A large amount of development is done on macOS 10.15 using MacPorts or Homebrew, however, it has never been tested in a production setting. :) Arkime is not supported on 32 bit machines.
The following OSes should work out of the box for compiling yourself:
Here is the common check list:
curl http://localhost:9200/_cat/health
on the machine running Elasticsearch.
An Unauthorized response probably means you need user:pass in all ES urls, or you are using the wrong one.
/data/moloch/db/db.pl http://elasticsearch.hostname:9200 info
http://arkime-viewer.hostname:8005
from your browser
/data/moloch/logs/viewer.log
and that viewer is running with pgrep -lf viewer
/data/moloch/logs/capture.log
and that capture is running with pgrep -lf capture
http://arkime-viewer.hostname:8005/stats?statsTab=1
in your browser.
bpf=
in /data/moloch/etc/config.ini
, if that fixes the issue read
BPF FAQ answer
/data/moloch/etc/config.ini
to shorten the timeouts
curl http://elasticsearch.hostname:9200/_refresh
moloch-capture
after adding a
--debug
option may print out useful information what is
wrong if you are having packet capture issues.
You can add multiple --debug
options to get even more information.
Capture will print out the config settings it is using, verify they
are what you expect.
Usually this setting is changed in /etc/systemd/system/molochcapture.service
and run systemctl daemon-reload
.
--debug
option may print out useful information what is wrong
if you are having issues viewing packets that were captured.
Usually this setting is changed in /etc/systemd/system/molochviewer.service
and run systemctl daemon-reload
.
/data/moloch/etc/config.ini
and readable by the
viewer process
grep moloch_packet_log /data/moloch/logs/capture.log | tail
Verify the packets number is greater than 0, if not, then no packets were processed.
Verify the first pstats number is greater than 0, if not, Arkime didn't know how to decode any packets.
db.pl
script with either the init
or
wipe
commands. The only difference between the two
commands is that wipe
leaves the
added users so they don’t need to be re-added.
/data/moloch/db/db.pl http://ESHOST:9200 wipe
/bin/rm -f /data/moloch/raw/*
It is possible to get self signed certificates to work in the following scenarios:
Usually the easiest way is to add the self signed cert to the OS's list
of valid certificates or chains. Googling is the best way to figure out
how to do this. Viewer also supports a caTrustFile
option.
The core Arkime team does not support or recommend self signed certs.  Wildcard certs are now cheap and you can even go with free Lets Encrypt certs. There may be folks on the Arkime slack workspace willing to help out.
Both capture and viewer can run with --insecure
to turn off
cert checking. You will need to add this option to the startup command for
both capture and viewer.
For example change in the /etc/systemd/system/arkimecapture.conf
file, the ExecStart
line from ... capture -c ...
to ... capture --insecure -c ...
.
Moloch 1.0 has some large changes and updates that will require all session data to be reindexed. The reindexing is done in the background AFTER upgrading so there is little downtime. Large changes in 1.0 include:
ip
type
If you have any special parsers, tagger, plugins or wise source you may have to change configurations.
To upgrade:
/data/moloch/bin/moloch_update_geo.sh
on all capture
nodes which will download the new mmdb style maxmind files
db.pl http://ESHOST:9200 upgrade
once
Once 1.1.1 is working, its time to reindex the old session data:
/data/moloch/viewer
directory, run
/data/moloch/viewer/reindex2.js --slices X
curl -XDELETE 'http://localhost:9200/sessions-*'
Upgrading to Moloch 2.0 is a multistep process that requires an outage. An outage is required because all the captures must be stopped before upgrading the database so there are no schema issues or corruption. Most of the administrative indices will have new version numbers after this upgrade, so that elasticsearch knows they were created with 6.7 or 6.8. This is very important when upgrading to ES 7.x later.
./db.pl http://ESHOST:9200 backup pre20
to backup all administrative indices.
./db.pl http://ESHOST:9200 upgrade
Upgrading to Arkime 3.0 is a multistep process that requires an outage. An outage is required because all the captures must be stopped before upgrading the database so there are no schema issues or corruption. Do not restart the capture processes until the db.pl upgrade has finished! All of the administrative indices will have new version numbers after this upgrade, so that elasticsearch knows they were created with 7. This is very important when upgrading to ES 8.x later.
./db.pl http://ESHOST:9200 backup pre30
to backup all administrative indices. ./db.pl http://ESHOST:9200 upgrade [other options]
, don't forget to include any other options you usually use like --replicas or --ilmThe answer, of course, is "it depends". Factors include:
Some important things to remember when designing your cluster:
We have some estimators that may help.
The good news is that it is easy to add new nodes in the future, so feel free to start with less nodes.
As a temporary fix to capacity problems, you can reduce the number of days of meta data that are stored.
You can use the Arkime ES Indices tab to delete the oldest sessions2
index.
The SPI data in Elasticsearch and the PCAP data are not deleted at the same time.
The PCAP data is deleted as the disk fills up on the capture machines, more info.
PCAP deletion happens automatically and nothing needs to be done.
The SPI data is either deleted by using ILM or when the ./db.pl expire
command is run, usually from cron during off peak.
Unless you use ILM, the SPI data deletion does NOT happen automatically and a cron job MUST be set up.
A sample cron setup might look like this to only keep 90 days and expire at midnight:
0 0 * * * /data/moloch/db/db.pl http://localhost:9200 expire daily 90
So deleting a PCAP file will NOT delete the SPI data, and deleting the SPI data will not delete the PCAP data from disk.
The UI does have commands to delete and scrub individual sessions, but
the user must have the Remove Data
ability on the users tab.
This feature is used for things you don’t want operators to see, such as bad images,
and not a general solution to freeing disk space.
This error almost always means that your Elasticsearch cluster can not keep up with the amount of sessions that the capture nodes are trying to send it. You may only see the error message on your busiest capture nodes since capture tries to buffer the requests.
Some things to check:
--replicas 1
with your daily
./db.pl expire
run after turning off replicate in the sessions template using
./db.pl upgrade
without the
--replicas
option
./db.pl upgrade
again
If these don’t help, you need to add more nodes or reduce the number of sessions being monitored. You can reduce the number of sessions with packet-drop-ips or bpf filters or rules files for example.
If queries are too slow the easiest fix is to add additional
Elasticsearch nodes. Elasticsearch doesn’t do well if Java hits an
OutOfMemory condition. If you ever have one, you should immediately
delete the oldest
sessions2-*
index, update the
daily.sh
script to delete more often, and restart the Elasticsearch cluster.
Then you should order more machines. :)
curl -XPUT 'localhost:9200/sessions*/_settings' -d '{
"index.routing.allocation.total_shards_per_node": 2
}'
curl -XPUT localhost:9200/_cluster/settings -d '{"transient":{
"indices.recovery.concurrent_streams":6,
"indices.recovery.max_bytes_per_sec":"50mb"}
}'
Turning on replication will consume twice the disk space on the nodes and increase the network bandwidth between nodes, so make sure you actually need replication.
To change future days
db/db.pl <http://ESHOST:9200> upgrade --replicas 1
To change past days, but not the current day
db/db.pl <http://ESHOST:9200> expire <type> <num> --replicas 1
We recommend the second solution since it allows current traffic to be written to ES once, and during off peak the previous days traffic will be replicated.
In general if upgrading between minor or build versions of Elasticsearch you can do a rolling upgrade with no issues. Follow Elastic's instructions for best results. Make sure you select the matching version of that document for your version of ES from the pull down on the right hand side.
Upgrading between Major versions of Elasticsearch usually require an upgrade of Arkime. So please see the instructions in this FAQ for
db.pl http://ESHOST:9200 info
or mouse over the in Arkime.
indices.breaker.total.limit
you should unset it.curl http://localhost:9200/_cat/health
ES 6.x is supported by Moloch 1.x for NEW clusters and >= 1.5 for UPGRADING clusters.
NOTE - If upgrading, you must FIRST upgrade to Moloch 1.0 or 1.1 (1.1.1 recommended) before upgrading to > 1.5. Also all reindex operations needs to be finished.
We do NOT provide ES 6 startup scripts or configuration, so if upgrading please make sure you get startup scripts working on test machines before shutting down your current cluster.
Upgrading to ES 6 will REQUIRE two downtimes
First outage: If you are NOT using Moloch DB version 51 (or later) you
must follow these steps while still using ES 5.x. To find what DB version
you are using, either run
db.pl http://ESHOST:9200 info
or mouse over the in Moloch.
./db.pl http://ESHOST:9200 upgrade
Second outage: Upgrade to ES 6
/data/foo/<clustername>
curl http://localhost:9200/_cat/health
ES 5.x is supported by Moloch 0.17.1 for NEW clusters and 0.18.1 for UPGRADING clusters.
ES 5.0.x, 5.1.x and 5.3.0 are NOT supported because of ES bugs/issues. We currently use 5.6.7.
WARNING - If you have sessions-*
indices
created with ES 1.x, you can NOT upgrade. Those indices will need to be
deleted.
We do NOT provide ES 5 startup scripts, so if upgrading please make sure you get startup scripts working on test machines before shutting down your current cluster.
Upgrading to ES 5 may REQUIRE 2 downtime periods of about 5-15 minutes each.
First outage: If you are NOT using Moloch DB version 34 (or later) you
must follow these steps while still using ES 2.4. To find what DB version
you are using, either run db.pl http://ESHOST:9200 info
or mouse over the in Moloch.
curl http://localhost:9200/_cat/health
./db.pl http://ESHOST:9200 upgrade
Second outage: Upgrade to ES 5
curl http://localhost:9200/_cat/health
This error usually happens when the capture process is trying to update the stats data and falls behind.
Arkime will continue to function while this error happens with the stats or dstats index, however it does usually mean your elasticsearch cluster is overloaded.
You should look at increasing your elasticsearch capacity by adding more nodes, cpu and/or more memory.
If increasing elasticsearch capacity isn't an option, then reduce the traffic that Arkime processes.
If the N vs M version numbers are very different from each other, that usually means you are running two nodes with the same node name at the same time, that is not supported.
Here are some of our recommended Elasticsearch settings. Many of these
can be updated on the fly, but it is still best to put them in your
elasticsearch.yml
file. We strongly recommend using the same
elasticsearch.yml
file on all hosts, things that need to be
different per host can be set with variables.
You will probably want to change the watermark settings so you can use
more of your disk space.  The most common sign of a problem
with these settings is an error that has
FORBIDDEN/12/index read-only / allow delete
in it. You can
use
./db.pl http://ESHOST:9200 unflood-stage _all
to clear the error, once you adjust the settings and/or delete some
data.
Elasticsearch Docs
cluster.routing.allocation.disk.watermark.low: 97%
cluster.routing.allocation.disk.watermark.high: 98%
cluster.routing.allocation.disk.watermark.flood_stage: 99%
or if you want more control use values instead of percentages:
cluster.routing.allocation.disk.watermark.low: 300gb
cluster.routing.allocation.disk.watermark.high: 200gb
cluster.routing.allocation.disk.watermark.flood_stage: 100gb
If you have a lot of shards that you want to be able to search against at once Elasticsearch Docs
action.search.shard_count.limit: 100000
No longer need to set since ES 7.9.
If you hit a lot of bulk failures this can help, but Elastic doesn’t
recommend raising too much. In older versions of Elasticsearch it is
named thread_pool.bulk.queue_size
so check the docs for
your version.
Elasticsearch Docs
thread_pool.write.queue_size: 10000
On by default in most versions, allows for HTTP compression. Elasticsearch Docs
http.compression: true
To speed up recovery times and startup times there are a few controls to play with. Make sure you test them in your environment, and slowly increase them, because they can break things badly. Elasticsearch Allocation Docs and Elasticsearch Recovery Docs
cluster.routing.allocation.cluster_concurrent_rebalance: 10
cluster.routing.allocation.node_concurrent_recoveries: 5
cluster.routing.allocation.node_initial_primaries_recoveries: 5
indices.recovery.max_bytes_per_sec: "400mb"
By default elasticsearch has logging set to debug level in log4j2.properties. For busy clusters change this to info level to lower CPU and disk usage.
logger.action.level = info
Since Moloch 2.2 you can easily use ILM to handle moving indices from hot to warm, force merge, and delete actions.
We recommend only using ILM with newer versions (7.2+) of Elasticsearch, since older versions did have some issues.
Once ILM is enabled you no longer have to use the db.pl expire
cron job, but should occasionally run db.pl optimize-admin
.
ILM is only included in the free "basic" Elasticsearch license, so it is not part of the Elasticsearch OSS distribution, so you may need to upgrade. Arkime does NOT currently support the auto rollover feature of ILM for performance reasons when searching.
These instructions assume you are using db.pl or Arkime UI to setup ILM and will use a special molochtype
attribute name.
You can also do this with Kibana to create the ILM config, and not use the molochtype
attribute name, however then you will need to do everything on your own.
There are five important steps to have ILM work correctly with Arkime.
node.attr.molochtype: warm
or node.attr.molochtype: hot
db.pl ilm
command.db.pl ilm
can perform this action.db.pl upgrade ... --ilm
and add the --ilm
to the command. Also add --hotwarm
if using a hot/warm design.db.pl expire
cron job with db.pl optimize-admin
So for example to create new policies that keeps 30 weeks of history, 90 days of SPI data, with 1 replica, and optimizes all indices older than 25 hours you would run:
./db.pl http://localhost:9200 ilm 25h 90d --history 30 --replicas 1
You would then need to run upgrade with all the arguments you usually used plus --ilm:
./db.pl http://localhost:9200 upgrade --replicas 1 --shards 5 --ilm
The goal of Arkime is to use commodity hardware. If you start thinking about using SSDs or expensive NICs, research if it would just be cheaper to buy one more box. This gains more retention and can bring the cost of each machine down.
Some things to remember when selecting a machine:
moloch-capture
links, since 8Gbps is close to the max.
moloch-capture
process.
When selecting Arkime capture boxes, standard "Big Data" boxes might be the best bet. ($10k-$25k each) Look for:
We are big fans of using Network Packet Brokers ($6k+). They allow
multiple taps/mirrors to be aggregated and load balanced across multiple
moloch-capture
machines. Read more below.
We are big fans of using Network Packet Brokers. If there is one piece of advice we can give medium or large Arkime deployments — use a NPB. See MolochON 2017 NPB Preso
Main Advantages:
Features to look for
Just like with Arkime with commodity hardware, you don’t necessarily have to pay a lot of money for a good NPB. Some switch vendors have switches that can operate in switch mode or npb mode, so you might already have gear laying around you can use.
Sample vendors
arkime-capture
handle?
On basic commodity hardware, it is easy to get 3Gbps or more, depending on the number of CPUs available to Arkime and what else the machine is doing. Many times the limiting factor can be the speed of the disks and RAID system. See Architecture and Multiple Host for more information. Arkime allows multiple threads to be used to process the packets.
To test the local RAID device use:
dd bs=256k count=50000 if=/dev/zero of=/THE_ARKIME_PCAP_DIR/test oflag=direct
To test a NAS leave off the oflag=direct and make sure you test with at least 3x the amount of memory so cache isn't a factor use:
dd bs=256k count=150000 if=/dev/zero of=/THE_ARKIME_PCAP_DIR/test
This is the MAX disk performance. Run several times if desired and take the average. If you don’t want to drop any packets, you shouldn’t average more then ~80% of the MAX disk performance. If using RAID and don’t want drop packets during a future rebuild, ~60% is a better value. Remember that most network numbers will be in bits while the disk performance will be in bytes, so you’ll need to adjust the values before comparing.
When you get an error about the capture length not matching the packet length, it is NOT an issue with Arkime. The issue is with the network card settings.
By default modern network cards offload work that the CPUs would need to do. They will defragment packets or reassemble tcp sessions and pass the results to the host. However this is NOT what we want for packet captures, we want what is actually on the network. So you will need to configure the network card to turn off all the features that hide the real packets from Arkime.
The sample config files
(/data/moloch/bin/arkime_config_interfaces.sh
) turn off many
common features but there are still some possible problems:
ethtool -k INTERFACE | grep on
— Anything that is
still on, turn off and see if that fixes the problem
ethtool -K INTERFACE tx off sg off gro off gso off lro off tso off
There are two work arounds:
readTruncatedPackets=true
in the config file, this is
the only solution for saved .pcap files
snapLen=65536
in the config file, this is not recommended
There are several different types of packet drops and reasons for packet drops:
Please make sure you are using a recent version of Arkime. Constant improvements are made and it is hard for us to support older versions.
The most common cause of packet drops with Arkime is leaving the reader default of libpcap instead of switching to tpacketv3, pfring or one of the other high performance packet readers. We strongly recommend tpacketv3. See plugin settings for more information.
Make sure the network card is configured correctly by increasing the ring buf to max size and turning off most of the card’s features. The features are not useful anyway, since we want to capture what is on the network instead of what the local OS sees. Example configuration:
# Set ring buf size, see max with ethool -g eth0
ethtool -G eth0 rx 4096 tx 4096
# Turn off feature, see available features with ethtool -k eth0
ethtool -K eth0 rx off tx off gs off tso off gso off
If Arkime was installed from the deb/rpm and the Configure script was
used, this should already be done in
/data/moloch/bin/moloch_config_interfaces.sh
The packetThreads config option controls the number of threads processing
the packets, not the number of threads reading the packets off the network card.
You only need to change the value if you are getting the Packet Q is overflowing
error.
The packetThreads option is limited to 24 threads, but usually you only need a few.
Configuring too many packetThreads is actually worse for performance, please start with a lower number and slowly increase.
You can also change the size of the packet queue by increasing the maxPacketsInQueue setting.
To increase the number of threads the reader uses please see the documentation for the reader you are using on the settings page.
In general errors about the Disk Q being exceeded are NOT a problem with Arkime, but usually an issue with either the hardware or the packet rate exceeding what the hardware can save to disk. You will usually need to either fix/upgrade the hardware or reduce the amount of traffic being saved to disk.
dd bs=256k count=50000 if=/dev/zero of=/THE_ARKIME_PCAP_DIR/test oflag=direct
This is the MAX disk performance. Run several times if desired and take
the average. If you don’t want to drop any packets, you shouldn’t average
more then ~80% of the MAX disk performance. If using RAID and don’t want
drop packets during a future rebuild, ~60% is a better value. Remember
that most network numbers will be in bits while the disk performance will
be in bytes, so you’ll need to adjust the values before comparing.
xfs
make sure you use mount options defaults,inode64,noatime
If using EMC for disks:
To check your disk IO run iostat -xm 5
and look at the
following:
avgqu-sz
should be near or less then 1, otherwise linux is
queueing instead of doing
moloch-capture
down.
Other things to do/check:
arcconf SETCACHE 1 LOGICALDRIVE 1 WBB
hpssacli ctrl slot=0 modify dwc=enable
MegaCli64 -LDSetProp -ForcedWB -Immediate -Lall -aAll ; MegaCli64 -LDSetProp Cached -L0 -a0 -NoLog
moloch-capture
isn’t
handling lots of interrupts (cat /proc/interrupts
).
moloch-capture
.
curl http://arkime-wise.hostname:8081/views
on the moloch-capture
host that is dropping packets.
See settings
Think of the moloch-capture
binary much like you would
tcpdump
. moloch-capture
can listen to live
network interface(s), or read from historic packet capture files.
Currently Arkime works best with PCAP files, not pcapng.
${moloch_dir}/bin/moloch-capture -c [config_file] -r [pcap_file]
For an entire directory, use -R [pcap directory]
See
${moloch_dir}/bin/moloch-capture --help
for more info.
The --monitor
to monitor non NFS directories, --skip
to skip already loaded pcap files, and -R
to process directories are common options.
If Arkime is failing to load a PCAP file check the following things:
--debug
which might warn of not
understanding the link type or GRE tunnel type. (Please open issues for
unknown link or GRE types)
It is also possible to enable UI in Arkime to upload pcap.
This is less efficient then just using moloch-capture
directly, since it uploads the file and then rules moloch-capture
for you.
Just uncomment the uploadCommand
in the config.ini file.
The easy way is using the interface setting in your config.ini. It supports a semicolon ';' separated list of interfaces to listen on for live traffic. If you want to set a tag or another field per interface, use the interfaceOps.
The hard way, you can also have multiple moloch-capture
processes,.
/data/moloch/etc/config.ini
, and create a section for
each of the Arkime nodes. Assuming the defaults are correct in the
[default]
section, the only thing that
MUST be set is the interface item. It is also common
to have each Arkime node talk to a different Elasticsearch node if
running a cluster of Elasticsearch nodes.
[arkime-m01a]
interface=eth2
[arkime-m01b]
interface=eth5
hostname
+ domainname
on the machine
doesn’t return a FQDN, you’ll also need to set a viewUrl, or easier
use the --host
option.
TDIR=/data/moloch
cd ${TDIR}/bin
/bin/rm -f ${TDIR}/capturea.log.old
/bin/mv ${TDIR}/logs/capturea.log ${TDIR}/logs/capturea.log.old
${TDIR}/bin/moloch-capture -n arkime-m01a -c ${TDIR}/etc/config.ini > ${TDIR}/logs/capturea.log 2>&1
and
TDIR=/data/moloch
cd ${TDIR}/bin
/bin/rm -f ${TDIR}/captureb.log.old
/bin/mv ${TDIR}/logs/captureb.log ${TDIR}/logs/captureb.log.old
${TDIR}/bin/moloch-capture -n arkime-m01b -c ${TDIR}/etc/config.ini > ${TDIR}/logs/captureb.log 2>&1
* Add both scripts to inittab
or upstart
You only need to run one viewer on the machine. Unless
it is started with the -n
option, it will still use the
hostname as the node name, so any special settings need to be set there
(although default is usually good enough).
Please file an issue on github with the stack trace.
sysctl
to change until the next reboot. Setting it to
0 will change it back to the default.
sysctl -w fs.suid_dumpable=2
moloch-capture
is running in.
moloch-capture
and get it to crash.
gdb
(you may need to install the gdb package first)
gdb /data/moloch/bin/moloch-capture corefilename
bt
command
If it is easy to reproduce, sometimes it’s easier to just run
gdb
as root:
gdb moloch-capture
as root.
gdb
with
run ALL_THE_ARGS_USED_FOR_ARKIME-CAPTURE_GO_HERE
.
bt
command.
g_log
b g_log
Usually moloch-capture
is started as root so that it can
open the interfaces and then it immediately drops privileges to
dropUser
and dropGroup
, which are by default
nobody:daemon
. This means that all parent directories need
to be either owned or at least executable by nobody:daemon
and that the pcapDir itself must be writeable.
Listed in order from highest to lowest benefit to Arkime
bpf=
filter will stop Arkime from seeing the
traffic.
packet-drop-ips
section will stop
Arkime from adding packets to the PacketQ
Arkime capture supports many options for controlling which packets are captured, processed, and saved to disk.
bpf=
in the config file. This filter can be implemented in
the kernel, the network card, libpcap or network drivers. It is a
single filter and it controls what Arkime capture "sees" or doesn’t
"see". Any packet that is dropped because of the bpf filter is usually
not counted in ANY Arkime stats, but some implementation do expose
stats.
packet-drop-ips
config section to see if
the IPs involved are marked to be discarded. If there are only a few
IPs to drop then bpf=
should be used, otherwise this is
much more efficient then a huge bpf.
_dropByDst
or _dropBySrc
timeout,
if it matches they will be discarded.
packetThreads
or
maxPacketsInQueue
if too
many packets are being dropped here.
dontSaveBPFs
, and if one matches it will
save off the max number of packets to save for the session. This will
override the maxPackets
config setting.
minPacketsSaveBPFs
and save off a min number of packets that must be received.
PCAP deletion is actually handled by the viewer process, so make sure the viewer process is running on all capture boxes. The viewer process checks on startup and then every minute to see how much space is available, and if it is below freeSpaceG, then it will start deleting the oldest file. The viewer process will log every time a file is deleted, so you can figure out when a file is deleted if you need to. If the viewer complains about not finding the PCAP data, make sure you check the viewer.log.
Note: freeSpaceG can also be a percentage,
with freeSpaceG=5%
for the default.
The viewer process will always leave at least 10 PCAP files on the disk,
so make sure there is room for at least maxFileSizeG * 10
capture files on disk, or by default 120G.
If still having pcap delete issues:
maxFileSizeG * 10
space available.
db.pl sync-files
command.
locked
set,
viewer won’t deleted locked files
There are several common reasons dontSaveBPFs might not work for you.
--debug
to capture when starting and looking at the outputdontSaveBPFs=tcp port 443:10
use something like dontSaveBPFs=tcp port 443 or (vlan and tcp port 443):10
.
Basically FILTER or (vlan and FILTER)
. Information from here.
tcpdump -i INTERFACE tcp port 443
for example.If still having issues, you might just try out a Arkime Rules file. Arkime converts dontSaveBPFs into a rule for you behind the scenes.
Arkime buffers writes to disk, which is great for high bandwidth
networks, but bad for low bandwidth networks. How much data is buffered
is controlled with pcapWriteSize
, which defaults to 262144
bytes. An important thing to remember is the buffer is per thread, so set
packetThreads
to 1 on low bandwidth networks.
A portion of the pcap that is buffered will be written after 10 seconds of no writes.
However it will still buffer the last pagesize bytes, usually 4096 bytes.
An error that looks like
ERROR - processSessionIdDisk - SESSIONID in file FILENAME couldn't read packet at FILEPOS packet # 0 of 2
usually means that either the pcap is still being buffered and you need to wait for it to be written to disk or
that previously capture or the host crashed/restarted before the pcap could be written to disk.
You can also end up with many zero byte pcap files if the disk is full, see PCAP Deletion.
In small environments with low amounts of traffic this is possible. With Openvswitch you can create mirror port from a physical or virtual adapter and send the data to another virtual NIC as the listening interface. In KVM, one issue is that it isn’t possible to increase the buffer size past 256 on the adapter using the Virtio network adapter (mentioned in another part of the FAQ). Without Arkime capture will continuously crash. To solve this in KVM, use the E1000 adapter, and configure the buffer size accordingly. Set up the SPAN port on Openvswitch to send traffic to it: https://www.rivy.org/2013/03/configure-a-mirror-port-on-open-vswitch/.
MaxMind recently changed how you download their free database files. You now need to signup for an account and setup the geoipupdate program. If using a version of Moloch before 2.2, you will need to edit your config.ini file and update the geolite paths.
Instructions:
yum install geoipupdate
or apt-get install geoipupdate
geoipupdate
as root and see if it works/usr/share/GeoIP/GeoLite2-Country.mmdb
and geoLite2ASN is now /usr/share/GeoIP/GeoLite2-ASN.mmdb
Arkime logs a lot of information for debugging purposes.
Much of this information is for bug reports, but can also be used to figure out what is going on.
You may need to use --debug
to enable these msgs.
Jan 01 01:01:01 http.c:369 moloch_http_curlm_check_multi_info(): 8000/30 ASYNC 200 http://eshost:9200/_bulk 250342/5439 14ms 12345ms
| Jan 01 01:01:01 | Date |
| http.c:369 | File Name:Line Number |
| moloch_http_curlm_check_multi_info | Function Name |
| 8000/30 | 8000 queued requests to server 30 connections to server |
| ASYNC | Asynchronous request, SYNC for Synchronous request |
| 200 | HTTP status code |
| http://eshost:9200/_bulk | Requested URL |
| 250032/5439 | 250342 bytes uploaded (CURLINFO_SIZE_UPLOAD) 5439 bytes downloaded (CURLINFO_SIZE_DOWNLOAD) |
| 14ms | 14ms to connect to server (CURLINFO_CONNECT_TIME) |
| 12345ms | 12345ms total request time (CURLINFO_TOTAL_TIME) |
Jan 01 01:01:01 packet.c:1185 moloch_packet_log(): packets:<PHONE_NUMBER> current sessions: 41771/45251 oldest: 0 - recv:<PHONE_NUMBER> drop: 123 (0.00) queue: 1 disk: 2 packet: 3 close: 4 ns: 5 frags: 0/1988 pstats:<PHONE_NUMBER>/1/2/3/4/5
| Jan 01 01:01:01 | Date |
| packet.c:1185 | File Name:Line Number |
| moloch_packet_log | Function Name |
| packets:<PHONE_NUMBER> |<PHONE_NUMBER> packets are going to be processed by the packet queues. These packets have made it past corrupt checks, packet-drop-ips checks, and are ones we most likely understand. |
| current session: 41771/45251 | 41771 monitored sessions of the current session type (usually tcp) 45251 monitored sessions total |
| oldest: 0 | In the current session type queue, the oldest session should be idled out in 0 seconds |
| recv:<PHONE_NUMBER> |<PHONE_NUMBER> packets have been received by the interface since process start, as reported by the reader's stats api |
| drop: 123 | 123 packets have been dropped by the interface, as reported by the reader's stats api |
| (0.00) | 0.00% packets have been dropped by the interface, as reported by the reader's stats api |
| queue: 1 | 1 bulk request is waiting to be sent to the ES servers, each bulk request may hold multiple sessions |
| disk: 2 | 2 disk buffers writes are outstanding, each buffer will hold multiple packets |
| packet: 3 | 3 packets are waiting to be processed in all the packet queues |
| close: 4 | 4 tcp sessions have been marked for closing (RST/FIN), waiting on last few packets |
| ns: 5 | 5 sessions are ready to be saved but there is a plugin that is doing async work, such as wise |
| frags: 0/1988 | always 0 1988 current ip frags waiting to be matched |
| pstats:<PHONE_NUMBER>/1/2/3/4/5 |<PHONE_NUMBER> packets successfully sent to a packet queue 1 packet dropped because of packet-drop-ips config 2 packets dropped because the packet queues were overloaded 3 packets dropped because they were corrupt 4 packets dropped because how to process was unknown to us 5 packets dropped because of ipport rules |
Click on the owl and read the Search Bar section. The Fields section is also useful for discovering fields you can use in a search expression.
The most common cause of this problem is that the timestamps between the Arkime machines are different. Make sure ntp is running everywhere, or that the time stamps are in sync.
Recent versions of Chrome, Firefox, and Safari should all work fairly equally. Below are the minimum versions required. We aren’t kidding.
| Arkime Version | Chrome | Firefox | Opera | Safari | Edge | IE |
|---|---|---|---|---|---|---|
| Prior to 3.0 | 53 | 54 | 40 | 10 | 14 | Not Supported |
| 3.0 and beyond | 80 | 74 | 67 | 13.1 | 80 | Not Supported |
Development and testing is done mostly with Chrome on a Mac, so it gets the most attention.
This seems to be caused when proxying requests from one viewer node to
another and the machines don’t use FQDNs for their hostnames and the
short hostnames are not resolvable by DNS. You can check if your
machine uses FQDNs by running the hostname
command. There
are several options to resolve the error:
--host
option on capture
config.ini
and add a viewUrl
for each
node. This part of the config file must be the same on all machines
(we recommend you just use the same config file everywhere). Example:
[node1_eth0]
interface=eth0
viewUrl=http://node1.fqdn
[node1_eth1]
interface=eth1
viewUrl=http://node1.fqdn
[node2]
interface=eth1
viewUrl=http://node2.fqdn
Apache, and other web servers, can be used to provide authentication or other services for Arkime when setup as a reverse proxy. When a reverse proxy is used for authentication it must be inline, and authentication in Arkime will not be used, however Arkime will still do the authorization. Arkime will use a username that the reverse proxy passes to Arkime as a HTTP header for settings and authorization. See the architecture page for diagrams. While operators will use the proxy to reach the Arkime viewer, the viewer processes still need direct access to each other.
ARKIME_USER
is the header that is being
set from a variable, if your auth method already sets a header use
that.
AuthType your_auth_method
Require valid-user
RequestHeader set ARKIME_USER %{your_auth_method_concept_of_username_variable_probably_REMOTE_USER}e
SSLProxyEngine On
#ProxyRequests On # You probably don't want this line
ProxyPass /arkime/ https://localhost:8005/ retry=0
ProxyPassReverse /arkime/ https://localhost:8005/
config.ini
userNameHeader
to the lower case version of the header Apache is setting. NOTE - the
userNameHeader setting is only needed on viewers that apache talks to, don't set on all of them.
webBasePath
to the ProxyPath location used above.
All other sections should NOT have a webBasePath
.
viewHost=localhost
, so externals can’t just set the userNameHeader
and access Arkime with no auth:
[arkime-proxy]
userNameHeader=arkime_user
webBasePath = /arkime/
viewPort = 8005
viewHost = localhost
arkime-proxy
viewer, so for this example you would need to add -n arkime-proxy
to your systemd file (/etc/systemd/system/molochviewer.service by default) on the ExecStart line after viewer.js so viewer uses that section
addUser.js
script.
userNameHeader
is the
lower case version of the header Apache is using.
viewer.js
with a --debug
and see if the
header is being sent.
It is possible to search multiple Arkime clusters by setting up a
special multiple Arkime viewer and a special MultiES process. MultiES
is similar to Elasticsearch tribe nodes, except it was created before
tribe nodes and can deal with multiple indexes having the same name.
Prior to Moloch 1.5, one big limitation currently is that all the
Moloch clusters have to use the same rotateIndex
setting.
Since Moloch 1.5 if using different rotateIndex
settings,
use the queryAllIndices=true
setting in the
molochviewer
section. Currently one big limitation is that
all Arkime clusters must use the same PasswordSecret.
To use MultiES, create another config.ini
file or
section in a shared config file. Both multies.js
and the
special "all" viewer can use the same node name.
# viewer/multies node name (-n allnode)
[allnode]
# The host and port multies is running on, set with multiESHost:multiESPort usually just run on the same host
elasticsearch=<IP_ADDRESS>:8200
# This is a special multiple arkime cluster viewer
multiES=true
# Port the multies.js program is listening on, elasticsearch= must match
multiESPort = 8200
# Host the multies.js program is listening on, elasticsearch= must match
multiESHost = localhost
# Semicolon list of elasticsearch instances, one per arkime cluster. The first one listed will be used for settings
multiESNodes = es-cluster1.example.com:9200;es-cluster2.example.com:9200
# Uncomment if using different rotateIndex settings
#queryAllIndices=true
Now you need to start up both the multies.js
program and
viewer.js
with the same config file AND -n allnode
.
All other viewer settings, including webBasePath
can still be used.
By default, the users table comes from the first cluster listed in
multiESNodes
. This can be overridden by setting
usersElasticsearch
and optionally usersPrefix
in the multi viewer config file.
Create a file, for example CAcerts.pem, containing one or more trusted certificates in PEM format.
Then, you need start MutilES adding NODE_EXTRA_CA_CERTS environment variable specifying the path to file you just created, for example:
NODE_EXTRA_CA_CERTS=./CAcerts.pem /data/moloch/bin/node multies.js -c /data/moloch/etc/config.ini -n allnode
An admin can change anyone’s password on the Users tab by clicking the Settings link in the Actions column next to the user.
A password can also be changed by using the addUser
script, which will replace the entire account if the same userid is
used. All preferences and views will be cleared, so creating a
secondary admin account may be a better option if you need to change
an admin users password. After creating a secondary admin account,
change the users password and then delete the secondary admin account.
node addUser -c <configfilepath> <user id> <user friendly name> <password> [--admin]
Viewers have the ability to proxy traffic for each other. The ability relies on Arkime node names that are mapped to hostnames. Common problems are when systems don’t use FQDNs or certs don’t match.
First the SPI records are created on the moloch-capture
side.
moloch-capture
gets a nodename, either by the
-n
command line option or everything in front of the
first period of the hostname.
moloch-capture
writes a stats record every few
seconds that has the mapping from the nodename to the FDQN.
It is possible to override the FDQN with the --host
option to capture.
When pcap is retrieved from a viewer it uses the nodename associated with the SPI record to find which capture host to connect to.
arkime-viewer
process gets a nodename, either by
the -n
command line option or everything in front of the
first period of the hostname.
arkime-viewer
nodename it can be processed locally, STOP HERE. This is the common
case with one arkime node.
stats[nodename].hostname
is the same as the
arkime-viewer
’s hostname (exact match) then it can be
processed locally, STOP HERE.
Remember this is written by capture above, either the FQDN or --host
.
This is the common case with multiple capture processes per capture node.
viewUrl
set in the [nodename]
section, use that.
[default]
section, use that.
stats[nodename].hostname:[nodename section - viewPort setting]
stats[nodename].hostname:[default section - viewPort setting]
stats[nodename].hostname:8005
First, look at viewer.log
on both the viewer machine and
the remote machine and see if there are any obvious errors. The most
common problems are:
config.ini
on all nodes can make
things a pain to debug and sometimes not even work. It is best to
use the same config with different sections for each node name
[nodename]
hostname
command AND the viewer machine can’t resolve
just the hostname. To fix this, do ONE of the following:
--host
option to moloch-capture
and restart capture
hostname "fullname"
as root and edit
/etc/sysconfig/network
)
viewUrl
in each node section of the
config.ini
. If you don’t have a node section for
each host, you’ll need to create one.
/etc/resolv.conf
and add
search foo.example.com
, where
foo.example.com
is the subdomain of the hosts.
Basically, you want it so "telnet shortname 8005" works on the
viewer machine to the remote machine.
dropUser
user or dropGroup
group can read the pcap files.
Check the directories in the path too.
viewUrl
for each node.
-n
option
viewUrl
for that old node name that points to the new host.
Arkime uses Node.js for the viewer component, and requires many
packages to work fully. These packages must be compiled with and run
using the same version of Node.js. An error like … was compiled
against a different Node.js version using NODE_MODULE_VERSION 48. This
version of Node.js requires NODE_MODULE_VERSION 57.
means that
the version of Node.js used to install the packages and run the
packages are different.
This shouldn’t happen when using the prebuilt Arkime releases. If it
does, then double check that /data/moloch/bin/node
is
being used to run viewer.
If you built Arkime yourself, this usually happens if you have a different version of node in your path. You will need to rebuild Arkime and either:
/data/moloch/bin
is in your path before the OS
version of node
--install
option to easybutton which will add to
the path for you
Parliament is designed to run behind a reverse proxy such as Apache.
Basically, you just need to tell Apache to send all root requests and any
/parliament
requests to the Parliament server.
ProxyPassMatch ^/$ http://localhost:8008/parliament retry=0
ProxyPass /parliament/ http://localhost:8008/parliament/ retry=0
Here is the common check list:
curl http://localhost:8081/fields
You should see a list of fields that wise knows about.
wise.so
to the plugins=
line.wise.js
to the viewerPlugins=
line.wiseURL
has been set, or the older wiseHost
and wisePort
curl http://WISEHOST:8081/fields
moloch-capture
after adding a
--debug
option may print out useful information what is
wrong. Look to make sure that wise is being called with the correct URL.
Verify that the plugins, wiseHost and wiseURL setting is what you actually think it is.
Want to add or edit this FAQ? Found an issue in this site? This site's code is open source. Please contribute!


Review flight
ID
{{flight.id}}
Name
{{flight.name}}
Available seats
{{flight.numberOfSeats}}
Price
{{flight.price | currency:'EUR':true}}
ID
{{flight.id}}
Name
{{flight.name}}
Available seats
{{flight.numberOfSeats}}
Price
{{flight.price | currency:'EUR':true}}


Are you looking for something illustrated for yourself? For friends? Then you've come to the right place! Below is an explanation of prices, various types of pieces I can make for you, and things that I'm good and not good at. If you need any clarification on things, never hesitate to email! I'm always available ♡
I accept commission requests through email at<EMAIL_ADDRESS>or you could fill out this google form here. Please do know that I have the right to refuse a commission if it makes me uncomfortable, or if I feel like it breaks moral judgment. Serious inquires only please, I'm a working artist trying to pay the bills, thank you! ♡
If you want more examples of my artwork and styles, you can email me and I show you more examples! All payments will be paid upfront via PayPal, if you can not pay the full amount then your commission will not be worked on! ♡


Basic Statistics#
This file contains basic descriptive functions. Included are the mean, median, mode, moving average, standard deviation, and the variance. When calling a function on data, there are checks for functions already defined for that data type.
The mean
function returns the arithmetic mean (the sum of all the members
of a list, divided by the number of members). Further revisions may include
the geometric and harmonic mean. The median
function returns the number
separating the higher half of a sample from the lower half. The mode
returns the most common occurring member of a sample, plus the number of times
it occurs. If entries occur equally common, the smallest of a list of the most
common entries is returned. The moving_average
is a finite impulse
response filter, creating a series of averages using a user-defined number of
subsets of the full data set. The std
and the variance
return a
measurement of how far data points tend to be from the arithmetic mean.
Functions are available in the namespace stats
, i.e. you can use them by
typing stats.mean
, stats.median
, etc.
REMARK: If all the data you are working with are floating point
numbers, you may find stats.TimeSeries
helpful, since it is
extremely fast and offers many of the same descriptive statistics as
in the module.
AUTHOR:
Andrew Hou (11/06/2009)
- sage.stats.basic_stats.mean(v)#
Return the mean of the elements of \(v\).
We define the mean of the empty list to be the (symbolic) NaN, following the convention of MATLAB, Scipy, and R.
This function is deprecated. Use
numpy.mean
ornumpy.nanmean
instead.INPUT:
\(v\) – a list of numbers
OUTPUT:
a number
EXAMPLES:
sage: mean([pi, e]) doctest:warning... DeprecationWarning: sage.stats.basic_stats.mean is deprecated; use numpy.mean or numpy.nanmean instead See https://github.com/sagemath/sage/issues/29662 for details. 1/2*pi + 1/2*e sage: mean([]) NaN sage: mean([I, sqrt(2), 3/5]) 1/3*sqrt(2) + 1/3*I + 1/5 sage: mean([RIF(1.0103,1.0103), RIF(2)]) 1.5051500000000000? sage: mean(range(4)) 3/2 sage: v = stats.TimeSeries([1..100]) sage: mean(v) 50.5
- sage.stats.basic_stats.median(v)#
Return the median (middle value) of the elements of \(v\)
If \(v\) is empty, we define the median to be NaN, which is consistent with NumPy (note that R returns NULL). If \(v\) is comprised of strings, TypeError occurs. For elements other than numbers, the median is a result of
sorted()
.This function is deprecated. Use
numpy.median
ornumpy.nanmedian
instead.INPUT:
\(v\) – a list
OUTPUT:
median element of \(v\)
EXAMPLES:
sage: median([1,2,3,4,5]) doctest:warning... DeprecationWarning: sage.stats.basic_stats.median is deprecated; use numpy.median or numpy.nanmedian instead See https://github.com/sagemath/sage/issues/29662 for details. 3 sage: median([e, pi]) 1/2*pi + 1/2*e sage: median(['sage', 'linux', 'python']) 'python' sage: median([]) NaN sage: class MyClass: ....: def median(self): ....: return 1 sage: stats.median(MyClass()) 1
- sage.stats.basic_stats.mode(v)#
Return the mode of \(v\).
The mode is the list of the most frequently occurring elements in \(v\). If \(n\) is the most times that any element occurs in \(v\), then the mode is the list of elements of \(v\) that occur \(n\) times. The list is sorted if possible.
This function is deprecated. Use
scipy.stats.mode
orstatistics.mode
instead.Note
The elements of \(v\) must be hashable.
INPUT:
\(v\) – a list
OUTPUT:
a list (sorted if possible)
EXAMPLES:
sage: v = [1,2,4,1,6,2,6,7,1] sage: mode(v) doctest:warning... DeprecationWarning: sage.stats.basic_stats.mode is deprecated; use scipy.stats.mode or statistics.mode instead See https://github.com/sagemath/sage/issues/29662 for details. [1] sage: v.count(1) 3 sage: mode([]) [] sage: mode([1,2,3,4,5]) [1, 2, 3, 4, 5] sage: mode([3,1,2,1,2,3]) [1, 2, 3] sage: mode([0, 2, 7, 7, 13, 20, 2, 13]) [2, 7, 13] sage: mode(['sage', 'four', 'I', 'three', 'sage', 'pi']) ['sage'] sage: class MyClass: ....: def mode(self): ....: return [1] sage: stats.mode(MyClass()) [1]
- sage.stats.basic_stats.moving_average(v, n)#
Return the moving average of a list \(v\).
The moving average of a list is often used to smooth out noisy data.
If \(v\) is empty, we define the entries of the moving average to be NaN.
This method is deprecated. Use
pandas.Series.rolling
instead.INPUT:
\(v\) – a list
\(n\) – the number of values used in computing each average.
OUTPUT:
a list of length
len(v)-n+1
, since we do not fabric any values
EXAMPLES:
sage: moving_average([1..10], 1) doctest:warning... DeprecationWarning: sage.stats.basic_stats.moving_average is deprecated; use pandas.Series.rolling instead See https://github.com/sagemath/sage/issues/29662 for details. [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] sage: moving_average([1..10], 4) [5/2, 7/2, 9/2, 11/2, 13/2, 15/2, 17/2] sage: moving_average([], 1) [] sage: moving_average([pi, e, I, sqrt(2), 3/5], 2) [1/2*pi + 1/2*e, 1/2*e + 1/2*I, 1/2*sqrt(2) + 1/2*I, 1/2*sqrt(2) + 3/10]
We check if the input is a time series, and if so use the optimized
simple_moving_average
method, but with (slightly different) meaning as defined above (the point is that thesimple_moving_average
on time series returns \(n\) values:sage: a = stats.TimeSeries([1..10]) sage: stats.moving_average(a, 3) [2.0000, 3.0000, 4.0000, 5.0000, 6.0000, 7.0000, 8.0000, 9.0000] sage: stats.moving_average(list(a), 3) [2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0]
- sage.stats.basic_stats.std(v, bias=False)#
Return the standard deviation of the elements of \(v\).
We define the standard deviation of the empty list to be NaN, following the convention of MATLAB, Scipy, and R.
This function is deprecated. Use
numpy.std
ornumpy.nanstd
instead.INPUT:
\(v\) – a list of numbers
bias
– bool (default: False); if False, divide bylen(v) - 1 instead of len(v) to give a less biased estimator (sample) for the standard deviation.
OUTPUT:
a number
EXAMPLES:
sage: std([1..6], bias=True) doctest:warning... DeprecationWarning: sage.stats.basic_stats.std is deprecated; use numpy.std or numpy.nanstd instead See https://github.com/sagemath/sage/issues/29662 for details. doctest:warning... DeprecationWarning: sage.stats.basic_stats.variance is deprecated; use numpy.var or numpy.nanvar instead See https://github.com/sagemath/sage/issues/29662 for details. doctest:warning... DeprecationWarning: sage.stats.basic_stats.mean is deprecated; use numpy.mean or numpy.nanmean instead See https://github.com/sagemath/sage/issues/29662 for details. 1/2*sqrt(35/3) sage: std([1..6], bias=False) sqrt(7/2) sage: std([e, pi]) sqrt(1/2)*abs(pi - e) sage: std([]) NaN sage: std([I, sqrt(2), 3/5]) 1/15*sqrt(1/2)*sqrt((10*sqrt(2) - 5*I - 3)^2 + (5*sqrt(2) - 10*I + 3)^2 + (5*sqrt(2) + 5*I - 6)^2) sage: std([RIF(1.0103, 1.0103), RIF(2)]) 0.6998235813403261? sage: import numpy sage: x = numpy.array([1,2,3,4,5]) sage: std(x, bias=False) 1.5811388300841898 sage: x = stats.TimeSeries([1..100]) sage: std(x) 29.011491975882016
- sage.stats.basic_stats.variance(v, bias=False)#
Return the variance of the elements of \(v\).
We define the variance of the empty list to be NaN, following the convention of MATLAB, Scipy, and R.
This function is deprecated. Use
numpy.var
ornumpy.nanvar
instead.INPUT:
\(v\) – a list of numbers
bias
– bool (default: False); if False, divide bylen(v) - 1 instead of len(v) to give a less biased estimator (sample) for the standard deviation.
OUTPUT:
a number
EXAMPLES:
sage: variance([1..6]) doctest:warning... DeprecationWarning: sage.stats.basic_stats.variance is deprecated; use numpy.var or numpy.nanvar instead See https://github.com/sagemath/sage/issues/29662 for details. 7/2 sage: variance([1..6], bias=True) 35/12 sage: variance([e, pi]) 1/2*(pi - e)^2 sage: variance([]) NaN sage: variance([I, sqrt(2), 3/5]) 1/450*(10*sqrt(2) - 5*I - 3)^2 + 1/450*(5*sqrt(2) - 10*I + 3)^2 + 1/450*(5*sqrt(2) + 5*I - 6)^2 sage: variance([RIF(1.0103, 1.0103), RIF(2)]) 0.4897530450000000? sage: import numpy sage: x = numpy.array([1,2,3,4,5]) sage: variance(x, bias=False) 2.5 sage: x = stats.TimeSeries([1..100]) sage: variance(x)<PHONE_NUMBER>666666 sage: variance(x, bias=True) 833.25 sage: class MyClass: ....: def variance(self, bias = False): ....: return 1 sage: stats.variance(MyClass()) 1 sage: class SillyPythonList: ....: def __init__(self): ....: self.__list = [2, 4] ....: def __len__(self): ....: return len(self.__list) ....: def __iter__(self): ....: return self.__list.__iter__() ....: def mean(self): ....: return 3 sage: R = SillyPythonList() sage: variance(R) 2 sage: variance(R, bias=True) 1


Many people want to start a doggie daycare business. It’s a great way to make some extra income, and you get to be your own boss. Your employees are people are you get to hire, and your clients, dogs, are pretty fun to deal with. However, running a doggie daycare isn’t all fun and games. There are some important issues that you should take into consideration before you start your doggie daycare. Here are three questions to ask yourself before starting a dog boarding business.
Am I Start a Doggie Daycare for the Money or for my Love of Animals?
A lot of people start businesses because they want to make money. However, if making money is your only concern, there are much better businesses to start that a doggie daycare. Lot and lots of work will go into your business, and it will take time away from your social life and family. If you don’t have a love for animals, the money won’t help. You need to love what you do with your time. They call it work for a reason. Some days will be great and others will not be so great. However, each day is a new challenge. If you get up every morning and are grateful for being able to care for animals while their parents are away, you’re in the right mindset. If you wake up every day thinking about the profit, go become a stock broker!
How Long can I Run this Business Before I Need to Make a Profit?
A lot of people have fantasies of starting a business but don’t think about the profit side of the business and when they will hit their breakeven point. Yes, running a doggie daycare can be a profitable business, but you’re going to need to be able to make a profit to pay your employees, insurance, bonding, etc. Therefore, it’s a good idea to start thinking about how long your business can run before it will need to turn a profit. It’s always wise to give yourself a year of time to get up and running. That might seem like a long time, but getting clients and building word-of-mouth advertising takes time. Don’t let your business die because you didn’t have enough reserve funds to keep it alive.
Is This Business Going to be my Only Source of Income or Will it be a Side Business?
 For most people, it’s smart to keep their day job during the planning and building stages of the business. It will take time to find a facility, sigh all the paperwork, get it built out etc. These are things you can do on the weekends while you’re still working your corporate gig. Once you are finally ready to start the business, maybe you should think about transitioning to a part-time role at your company. If you have employees, they will want to know that you’re in it for the long haul. Don’t leave them hanging.
Good luck opening your doggie daycare, and if you’re looking for a great way to manage your business, check out DoggieDashboard.


Kemba Walker Stretchered Off Court After Frightening Injury (VIDEO)
by Howard CosmellA scary scene unfolded in Denver tonight during the Celtics-Nuggets game as Boston’s star point guard Kemba Walker was stretchered off the court with what appeared to be a neck injury.
Walker appeared to be reaching for a lose ball when he stumbled forward and went head first into a teammate’s body. He immediately dropped to the floor and was attended to by medics for several minutes before being stretchered off.
Here’s a look at how it happened.
This is not what anyone wants to see happen on the court, no matter what team you’re cheering for. Walker received a standing ovation as he left the building.
We’ll have more updates as we get them. In the meantime, we’ll be praying for him.


The Guardian, 2004
Here is an author's story that is bigger than his novel and, since Shantaram is an Australasian bestseller and weighs in at more than 900 pages, this is some feat. Roberts comes clean about the thinly disguised autobiography - but what an autobiography. Our author/narrator escaped from an antipodean jail, into which he'd been cast for drug offences and violent robbery, and made his way to Bombay. Over the next 10 years he established a medical clinic, worked in Bollywood, was a forger and smuggler for the Bombay mafia and fought with guerrillas in Afghanistan before being recaptured (not forgetting his spiritual regeneration along the way). Shantaram is a curious mixture of adventure story and travelogue, with too much cod-philosophy: more successful is the vivid and compassionate panorama of the places and people he encounters. Perhaps the most impressive fact is that Roberts wrote the book three times - the first two drafts were destroyed by his jailers.


Loading
Personalism...
View Courses
Home
Courses
Contact
Hi, i'm
{{ firstName + " " + lastName }}!
{ {{title}} }
{{x.text}}
{{email}}
Phone: {{number}}
BottleCap Technologies Website
Contact
Address
{{address}}
Phone
{{number}}
Mail
{{email}}
Privacy Policy
Terms & Conditions
Refund / Return / Cancellation Policy


--- layout: pattern title: "Media Block" summary: "Baselayer's take on the classic media object is an image to the left, with descriptive content to the right (it is also possible to reverse this ordering). The content area on the right can actually contain any type of content. Baselayer provides extensions to scope application of media element to specific media query ranges" ---
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Consequatur, doloremque, odit veniam corporis nemo error ullam inventore est similique neque hic ipsa omnis non itaque laboriosam repellat rerum at dolorum?
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Consequatur, doloremque, odit veniam corporis nemo error ullam inventore est similique neque hic ipsa omnis non itaque laboriosam repellat rerum at dolorum?


1 tbsp olive oil
1 yellow onion peeled and finely sliced
400 grams cubed pumpkin around 4 cups | peeled and cut in to cubes
3/4 cup red lentils 135 grams | washed and drained
1 litre/ 1 quart vegetable stock 4 cups
1 inch fresh ginger finely grated
Heat the olive oil in a heavy-bottomed saucepan or soup pot over medium heat. Add the onion and cook for three minutes or until soft.
Add the chopped pumpkin, lentils and stock to the pot and stir before adding the finely grated ginger.
Cook at a simmer for around 15 minutes or until the pumpkin and lentils are soft.
Season with sea salt if required.
Carefully blend the soup in a blender or with a stick blender until smooth to serve.
Calories 200kcal
Calories: 200kcal | Carbohydrates: 33g | Protein: 10g | Fat: 4g | Saturated Fat: 1g | Sodium: 944mg | Potassium: 702mg | Fiber: 11g | Sugar: 7g | Vitamin A: 9027IU | Vitamin C: 13mg | Calcium: 46mg | Iron: 3mg


COMING SOON!
Bookmark is coming soon! Join our newsletter to be the first to know about our reading guides for kids ages 5-12. Our goal is to get your children excited about reading and give them the tools to read well. Sign up to receive:
- Harry Potter School Guide for books 4 – 7.
- Reading tips, book reviews, and other bookish freebies.


Refresh or change tabs if UI does not load.
Calendarlist name is required.
Calendarlist trainer is required.
Calendarlist start is required.
Calendarlist end is required.


Where We Are
Located in the heart of New York City at:
328 East 77th Street, Ground Floor, Suite 1A, New York, NY 10021
Tel.<PHONE_NUMBER>
And we are also located in Sunny Greenwich, Connecticut at:
65 Halsey Drive, Old Greenwich, CT 06870
Tel.<PHONE_NUMBER>
-----------------------
How to Get Here
If you get off Interstate 95 in Connecticut at Ext 5 (both from the North of the South) you come to a light at the MacDonalds. Take a right on to Route 1 and go for 1 mile. At a stop light turn Left onto Havemeyer Lane. Go three streets and turn left onto Halsey. Follow Halsey down through a stop sign until to see 65 Halsey Drive on the Right.
get directions
-----------------------
Get the Map
Old Greenwich is just 30 minutes from mid-town New York City by car or train and is ideally situated for shoots that pull on New York talent and/or need a country look. The close proximity between our New York and Old Greenwich locations is ideal for projects that need a larger location footprint.
get directions
-----------------------
Email Our Webmaster
Please contact our webmaster and our staff if you have any questions.
<EMAIL_ADDRESS>-----------------------
|


Triangle Tracker
Please enter the side lengths of your triangle below!
Enter the first side length:
Enter the second side length:
Enter the third side length:
Submit


APOCALYPSE NOW REDUX Rated R, 196 minutes Directed by Francis Ford Coppola WHEN, WHERE: Now playing at the Grand Illusion
As America reels under the agony of terrorism and Washington rattles its saber at Afghanistan, and CNN unfurls the banner of `AMERICA'S NEW WAR' across our television screens, it's as good a time as any to remember another war in an inaccessible land halfway around the world. After 22 years, Francis Ford Coppola has finally completed his Vietnam epic, `Apocalypse Now'. When he introduced it at Cannes in 1979, the director described it as `a work in progress,' and complained of critics carping at a picture that wasn't even finished, though it was coming out in theaters. He was 100% over budget (a then-scandalous $31 million), more than a year over schedule, battered in mind, body, and spirit from massive production disasters of God's making and his own, and under intense pressure to deliver a movie that would not tax the attention span of its audience. Sounding a little unhinged by the strain, he declared at a press conference `This picture isn't about Vietnam. It is Vietnam.'
Now, working with his original editor Walter Murch from the original dailies, he has remixed and re-edited, and restored some 49 minutes from the cutting room floor. He calls this revisited version `Apocalypse Now Redux'. Now that it's finally ready for the critics, how is it? It's extraordinary. Coppola, who's now in the wine business, has learned a little something about letting things age and ripen. At 2 ˝ hours the original release was hardly rushed, but the restored footage expands and enlightens the director's Dantesque vision of a world gone mad with war.
The story, briefly, is a Vietnam adaptation of the Joseph Conrad novella Heart of Darkness. Marlow becomes Captain Willard (Martin Sheen), a Special Forces assassin who is given a mission to go up river, locate a rogue American colonel named Kurtz (Marlon Brando), and `terminate him with extreme prejudice.' As he studies Kurtz's brilliant résumé, and as he draws closer to his quarry, Willard comes to understand and even admire the man, and becomes increasingly aware that the darkness is not just in the mad Kurtz, but in the system, in the war, and in himself.
The war in `Apocalypse' is a war without a real enemy presence. It is not filled with pitched battles against enemy troops. The primary thrust is the American Willard on a mission to destroy the American Kurtz, with a few almost incidental skirmishes en route, most of them involving civilians. It is, in effect, a war with ourselves.
The biggest chunk of restored footage is a scene at a French plantation, where Willard puts in to bury a slain crewman (Larry Fishburne), and stays for dinner and a bit of romance amid the ruined elegance of a lost colonial world unmoored from reality. Cut originally because it was thought to distract from the upriver momentum of Willard's quest, it now opens a ghostly window onto the experience of the French in Vietnam, a cause already lost but not yet learned from. `You Americans,' says the French planter (Christian Marquand), `you are fighting for the biggest nothing in history.'
Another resurrected scene has Willard bargaining fuel for sexual favors for his men from a stranded USO troupe of Playboy bunnies. This scene doesn't work as well as it should, and smacks of pandering, but it has a point to make about exploitation. The rest of the additions serve to deepen the sense of place and character.
The intervening years have given `Redux' a deeper resonance. Many of the lines of dialogue and narration vibrate like lost chords. Those young actors have grown older, but in the movie they're like soldiers thawed from memory on the battlefield. Martin Sheen was a down-the-ladder choice for the role of Willard. Coppola had wanted Pacino, Caan, Nicholson, even Clint Eastwood. He'd hired Harvey Keitel, then fired him, and settled at last on Sheen. Looking at it now it is apparent, as it was not to me then, that Sheen mustered a heroically intense performance that is both wild-eyed and understated, nearly killing himself with a heart attack in the process. That he survived and is now, in our hearts and television sets, the President of the United States, gives that youthful military assassin an extra dimension.
Robert Duvall's celebrated Col. Kilgore is as vivid as ever, swaggering through smoke and bullets, destroying a village to make a beach safe for surfing, and relishing `the smell of napalm in the morning.' But added moments showing Kilgore compassionately helping wounded Vietnamese children, only to drop them without a thought when the surf comes up, give a new insight to his character, and ours. Duvall has said in interviews he feels the added footage shows that Kilgore is more than just a madman, but Coppola seems to me to be making a different point – that we Americans enjoy our moment of compassion, but we're easily distracted.
Brando, who demanded and got the obscene sum of one million dollars (a figure now tinny with irony, like Dr. Evil's world ransom) for playing Kurtz, shocked the filmmakers and the public in '79 with his corpulence. Coppola swathed him in heavy shadows to conceal it, but with today's huge Brando for a point of reference, the man looks trim. Anyway, why shouldn't Kurtz have been fat? He was living deep in the jungle, without a military regimen, deified by Montagnard tribesmen who catered to his every whim. Like Brando's in Tahiti, Kurtz's situation is conducive to weight gain. Brando is said to have toyed with his young director, improvising dialogue, playing mind games, and behaving arrogantly. Whatever hell he put Coppola through, it works – Brando's megalomania infuses Kurtz with a freakish truth that a disciplined, scripted performance might not have accomplished.
They don't make movies like this any more. One has only to compare this summer's big war movie, `Pearl Harbor', to see what accountancy and digital gimcrackery have wrought on the genre. Of course, they didn't make movies like this back then, either – or perhaps only then, in that brief blaze of youthful talent fueled with funds that seemed limitless, that produced `The Deer Hunter' and `Apocalypse Now' and a few other works of impassioned, lunatic genius. `The way we made it was very much like the way the Americans were in Vietnam,' Coppola said then. `We were in the jungle, we had access to too much money and too much equipment, and little by little we went insane.'
And now, we're back at war again. As Kurtz observes, `the horror.'
========== X-RAMR-ID: 29509 X-Language: en X-RT-ReviewID: 250599 X-RT-TitleID: 1109883 X-RT-SourceID: 896 X-RT-AuthorID: 2779
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


| Created: | 8/19/2020 1:14:49 PM |
| Modified: | 8/19/2020 1:14:49 PM |
| Project: | |
| Advanced: |
| Attribute |
|
Public bigint draw_id |
|
Details:
|
|
Public bigint sb_id |
|
Details:
|
|
Public bigint sb_amount_cents |
|
Details:
|
|
Public bigint sb_bucket_id |
|
Details:
|
|
Public varchar(255) sb_bucket_header1 |
|
Details:
|
|
Public varchar(255) sb_bucket_header2 |
|
Details:
|
|
Public varchar(255) sb_bucket_header3 |
|
Details:
|
|
Public varchar(255) sb_bucket_header4 |
|
Details:
|
|
Public integer sb_bucket_rank |
|
Details:
|
|
Public bigint sb_bucket_fdr_appropriation_reference_id |
|
Details:
|
|
Public varchar(255) sb_bucket_fdr_appropriation_reference_code |
|
Details:
|
|
Public boolean sb_bucket_is_federal |
|
Details:
|
|
Public varchar(255) sb_bucket_key |
|
Details:
|
|
Public timestamp with time zone(0) sb_created_at |
|
Details:
|
|
Public bigint sb_created_by_user_id |
|
Details:
|
|
Public varchar(255) sb_created_by_user_sub |
|
Details:
|
|
Public varchar(255) sb_created_by_user_first_name |
|
Details:
|
|
Public varchar(255) sb_created_by_user_last_name |
|
Details:
|
|
Public varchar(255) sb_created_by_user_email |
|
Details:
|
|
Public timestamp with time zone(0) sb_updated_at |
|
Details:
|
|
Public bigint sb_updated_by_user_id |
|
Details:
|
|
Public varchar(255) sb_updated_by_user_sub |
|
Details:
|
|
Public varchar(255) sb_updated_by_user_first_name |
|
Details:
|
|
Public varchar(255) sb_updated_by_user_last_name |
|
Details:
|
|
Public varchar(255) sb_updated_by_user_email |
|
Details:
|
|
Public bigserial ods_id |
|
Details:
|
|
Public jsonb ods_meta |
|
Details:
|
|
Public varchar(255) ods_created_by |
|
Details:
|
|
Public timestamp with time zone(0) ods_created_at |
|
Details:
|
| Operation | ||
|
Public sco_balances_pkey( ods_id: bigserial, |
||
|
Details:
<<PK>>
|
| Tag | Value |
| Owner | public |
|
Details:
|
| Property | Value |
| isFinalSpecialization: | 0 |


The keynote is at a VR conference so we need a VR demo showing our Nose Prototypes. Having our 3D UWP app from 5.1.2a we can easily turn this into a VR-enabled app.
This walkthrough assumes that you have:
Supporting Mixed Reality in Unity is just a simple toggle on the Build Settings in Unity.
Select Virtual Reality Supported. Windows Holographic should appear automatically.
Export the project again, replacing the folder you exported to in 5.1.2a.
Note: Connecting a new VR headset requires the latest Windows 10 build. Windows will automatically detect the headset and launch the Mixed Reality portal. Follow the configuration steps here to set it up correctly.


@robwiztv tweeted 6 hrs ago
m u s t a r d
@robwiztv tweeted 1 week ago
p e a c e a n d l o v e
@robwiztv tweeted 10 months ago
i m a g e t w e e t
@robwiztv
I have 13 years of fps experience.
taste oss
@moomasterq
If this website were finished we'd have a blog post here with information about anything.
There'd be another paragraph here if I had more information to write but I don't because this is filler text. Don't bother reading this but I know I put this warning too late so I'm glad you read it.
@moomasterq
This is my first post. I don't like paragraphs so there is only 1. There'd be a lot of information here if it were a proper post. Maybe some links. I'm not sure how I'll make the editor work though.


"Tagit is a simple, smart countertop timer that reminds busy, young professionals to consume their food before it spoils."
Imagine, you are a graduate who has just landed your first job and moved out from your parents.
You spare no effort to work and barely have the respite to cook for yourself. You either prepare your food for the entire week in advance, or buy takeouts from your nearby restaurants.
Few days passed, you open your fridge when you're off form work. You found the gross and grotesque combobulation of spoilage that you'd better immediately toss it in the trash can. You feel bad for the food you wasted, and the money and time that was wasted buying the food.
As an millennial, 30% of your fridge is likely to spoil and waste, and so do other millennials, because they forget what they have and ultimately they're not tracking the food that they have.
Our users need a physical product which is not just helping, but also encouraging them to organize their fridge without adding too much hassle. In return, their food will be less likely to spoil. They hate fiddling with an app to log information manually. Everything physical interaction with the product should be easy, quick and natural, that compels the user that it worths their time.
Team Foodbyte is the champion of the MIT Entrepreneurship and Maker Skills Integrator Jan 2018, a 2-Week hardware startup bootcamp, where every team went through a startup building process. Each team set out to come up with a problem, plan and build a hardware business to solve the problem. Foodbyte fleshed out a full on, low cost food tracking solution that helps millennials to resolve food spoilage problem, and ultimately alleviate household food waste.
While all expertise like computer science, electronic engineering, mechanical engineering, business administration and creative design aggregate in the same team, an incredible synergy was built and turned out team Foodbyte prevailed.


{{- $data := getJSON $.Site.Params.api -}} {{- $ctas := index $data "ctas" -}} {{- if $.Site.Params.stream -}}
I send out a short email each weekday with code snippets, tools, techniques, and interesting stuff from around the web. {{ if isset $ctas "mc-subscribers" }}{{ index $ctas "mc-subscribers" | safeHTML }}{{ end }}
{{- if $.Site.Params.stream -}} Click here to get daily developer tips sent straight to your inbox. {{- else -}} Click here to get Daily Developer Tips {{- end -}}


ag
The Silver Searcher. Like ack, but aims to be faster.
More information: home page
- Find files containing "foo", and print the line matches in context:
ag foo
- Find files containing "foo" in a specific directory:
ag foo path/to/directory
- Find files containing "foo", but only list the filenames:
ag -l foo
- Find files containing "FOO" case-insensitively, and print only the match, rather than the whole line:
ag -i -o FOO
- Find "foo" in files with a name matching "bar":
ag foo -G bar
- Find files whose contents match a regular expression:
ag '^ba(r|z)$'
- Find files with a name matching "foo":
ag -g foo


pgAdmin uses code from the OpenSSL project to provide support for SSL encrypted connections. The OpenSSL licence is included below:
Copyright (c) 1998-2011 The OpenSSL Project. All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ‘’AS IS’’ AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
This product includes cryptographic software written by Eric Young (eay@cryptsoft.com). This product includes software written by Tim Hudson (tjh@cryptsoft.com).


A confirmation email has been sent to {{emailAddress}}, the user will need to click on the confirmation link in order to activate their account.
{{accountError}}


Hi, i'm Mohamad Akbar, a family man who have interested of all about technology. Currently based on Jakarta.
April 2022 - Present
October 2019 - April 2022
Wekonnek.id
Chatbot
June 2018 - October 2019
June 2017 - Mei 2018
Information Technology
July 2012 - June 2017
<EMAIL_ADDRESS>Mobile: (+62) 896 800 90 856


Actually it's crashing on playerinfo.
After:
./komodo-cli -ac_name=ROGUE cclib playerinfo 17 \"[%228431bbc5c53a22da74bf8bf955440c960795dca59f8b1e8dd2b5516f48362edc%22]\"
Daemon crashing with:
Thread 10 "zcash-httpworke" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fffd8e7a700 (LWP 12519)]
0x00007ffff6552fac in ?? () from /lib/x86_64-linux-gnu/libc.so.6


|
||||||||||
| PREV NEXT | FRAMES NO FRAMES |
| Packages that use gate.gui.annedit | |
|---|---|
| gate.gui.annedit | |
| gate.gui.docview |
| Classes in gate.gui.annedit used by gate.gui.docview | |
|---|---|
| AnnotationData
A structure for storing the information describing an annotation (i.e. the Annotation object and its enclosing AnnotationSet . |
|
| AnnotationDataImpl
A simple reusable implementation of AnnotationData . |
|
| AnnotationEditorOwner
Objects of this type control the interaction with an OwnedAnnotationEditor . |
|
| OwnedAnnotationEditor
Interface for all annotation editor components |
|
||||||||||
| PREV NEXT | FRAMES NO FRAMES |


--- layout: post status: publish published: true title: Cubs call up Welington Castillo and Doug Davis author: display_name: Corey Fineran login: Corey email<EMAIL_ADDRESS>url: '' author_login: Corey author_email<EMAIL_ADDRESS>wordpress_id: 5234 wordpress_url: http://ivyenvy.com/?p=5234 date: '2011-05-11 20:41:06 +0000' date_gmt: '2011-05-12 01:41:06 +0000' categories: - Catchers - Starting Pitching - Wrigley Field - injuries tags: - Brewers - Cardinals - DL - Geovany Soto - Kosuke Fukudome - Koyie Hill - Ryan Theriot - Iowa - Ivy Envy Bus Trip - Daytona - Tyler Colvin - D'agostino's - Welington Castillo - Doug Davis - Nick Punto - Impaled comments: - id: 3487 author: Ryan author_email<EMAIL_ADDRESS>author_url: '' date: '2011-05-12 11:24:31 +0000' date_gmt: '2011-05-12 16:24:31 +0000' content: "That's really funny because when I fantasize about John Grabow mopping he's definitely not wearing a baseball uniform\r\n\r\nMeehan" ---
Today, the Cubs placed Geovany Soto on the DL after injuring his groin last night against the Cardinals. Koyie Hill came in to replace Soto and kicked all Cubs fans in the groin. I can't express how much I dislike Koyie Hill. Forget the fact that Hill was completely useless at the plate, going 0-4 and stranding 6 baserunners, but Hill's defense is touted as the reason he is even on this roster. In the 7th inning, with runners on 2nd and 3rd, Ryan Theriot lined out to Fukudome, who threw the ball home and the throw probably beat Nick Punto by 5-7 feet and Hill promptly just drops the throw and the Cardinals score. I would love to hear one person defend Koyie Hill. I'm sure he's a nice guy and he's done pretty well since going to battle with that band saw, but why he's on the team, and why the Cubs gave him a hefty raise this season, I'll never know.
To fill Soto's roster spot and, at least at first, act as Koyie Hill's backup (there's an embarrassing title, the Cubs called up Welington Castillo from Iowa. Castillo started the season in high-A Daytona and was called up to Iowa on 4/21.
This will not be Castillo's first stint with the big league team. He came up late in the year last year, playing in seven games with six hits in 21 plate appearances. He is probably most well-known for his bat breaking and "impaling" Tyler Colvin.
Castillo will probably start on Friday or Saturday. In his 26 games this season with Daytona and Iowa, he's batting .242 with 3 HR and 11 RBIs. So don't look for Castillo to come in and be as productive as Soto, but he's not Koyie Hill, so I'll take whatever he can give us.
The Cubs also brought up Doug Davis. His is a name Cubs fans should be familiar with. Davis has been in the majors since 1999 and spent 2003-2006 and 2010 with the Brewers. Davis is 35 years old and signed with the Cubs about a month ago.
Davis went 1-4 with a 7.51 ERA in 2010 and then had elbow surgery in October. The worst news about Doug Davis being called up to the Cubs is that he'll be getting his first start since July 9, 2010 on Saturday, which happens to be the game for the Ivy Envy Bus Trip. It's bad enough the temperature will be in the mid 50's and they are forecasting rain, but now we'll have to sit through the start of a pitcher that 5 years from now, we'll say "Wait, when did he ever play for the Cubs?" The way this thing is shaping up, I fully expect John Grabow to be called in to mop up. On the bright side, I'm looking forward to the D'agostino's Pizza at Wrigley. As a vegetarian, usually my only option for ballpark fare is nachos, so I'm looking forward to being able to consume some good pizza.


--- layout: archive title: Zulip Chat Archive permalink: /stream/144837-PR-reviews/topic/.231346.20remove.20simp.20lemmas.20for.20eq_to_hom.html ---
@Scott Morrison I'm curious what the problem was with the lemmas that had their simp
attribute removed in #1346.
Especially the first and third look to my eye like eq_to_hom
versions of the simp lemmas functor.map_id
and nat_trans.id_app'
.
Last updated: Apr 24 2020 at 19:02 UTC


SearchUnit - Basic Examples : Templates To Customize Appearance
In this example the control's appearance is customized using templates.
Try keywords like: soup, cheese, chicken, salt
Error
Page: ${PageNumber}
Number of results: ${NumberOfResults}
Query: “${Query}”
Stop words: ${IgnoredWords}
Number of results: ${NumberOfResults}
Query: “${Query}”
Stop words: ${IgnoredWords}
Did you mean: ${SuggestedSearchExpression}


Feature Flags
Chef Workstation flagged features are experimental and may contain bugs.
Proceed with caution when turning these features on.
The warranties and indemnities in your license agreement do not apply to experimental features. Experimental features are provided "as is" with no warranties of any kind, express or implied. Chef disclaims any and all liability related in any way to the experimental features or any related documentation.
There are no feature flags available at this time.


The Phantasma mainnet block explorer can be found here.
The Phantasma testnet block explorer can be found here.


Overview
Providing a Shipping Options API gives iQmetrix the ability to request your shipping options for a specific zip/postal code and set of products. The shipping options provided from your API will be displayed to the customer. Once the customer has selected their shipping option, the shipping option ID will be returned in the order during processing.
For this call, you will need to create an endpoint based on the specification provided by iQmetrix (see below). You will also need to provide an endpoint URL for iQmetrix and credentials for authentication.
Endpoints
You will provide the endpoint for iQmetrix. We recommend keeping the endpoint simple.
Example
https://api.supplier.com/ShippingOptions
Authentication
iQmetrix supports two methods for authentication:
HTTP Basic Authentication
Basic authentication. HTTPS is required.
Example
Username: test_user
Password: password123
API Key
API key - based authentication. HTTPS is required.
API key must be provided in header and is configurable.
Example
Api-Key: 9c269e40-92f3-4c21-9ff3-c4a00c985021
Resources
ShippingQuery
{
"CompanyId": "123",
"Items": "undefined",
"PostalCode": "A1A1A1"
}
| Name | Description |
|---|---|
CompanyId (Integer ) |
Company identifier |
Items (Array[[shipping-options](/api/item/#Item)] ) |
List of Products to be added to shipping query |
PostalCode (String ) |
Postal or zip code of shipping address |
Item
{
"ProductName": "Galaxy S6 Defender Case - Glacier",
"Quantity": "11",
"Sku": "87932OTS45S6"
}
| Name | Description |
|---|---|
ProductName (String ) |
Product name |
Quantity (Integer ) |
Amount of products |
Sku (String ) |
Product sku |
ShippingOptions
{
"Id": "350",
"Cost": "7.94",
"Currency": "CAD",
"EstimatedTransitTime": "1 week",
"Name": "PurolatorExpress"
}
| Name | Description |
|---|---|
Id (String ) |
Identifier for the shipping option |
Cost (Decimal ) |
Cost for shipping option |
Currency (String(3) ) |
Cost currency (USD or CAD) |
EstimatedTransitTime (String ) |
Total time to be in transit, where units are provided by supplier |
Name (String ) |
Shipping option name |
Requests
Get Shipping Options
Request
The specification for the request must be in the format:
POST /ShippingOptions
Headers
Authorization: Basic
Accept: application/json
Content-Type: application/json
Host: supplier.azure-api.net
Request Parameters
CompanyId
(Required)PostalCode
(Required)Items
(Optional)ProductName
(Required)Quantity
(Required)Sku
(Required)
Example
POST /ShippingOptions
Authorization: Basic
Accept: application/json
Content-Type: application/json
Host: supplier.azure-api.net
{
"CompanyId": 123,
"Items": [
{
"ProductName": "Galaxy S6 Defender Case - Glacier",
"Quantity": 11,
"Sku": "87932OTS45S6"
}
],
"PostalCode": "A1A1A1"
}
Response
The specification of the response must be in the format below:
Id
(Required) - Corresponds to the identifier of your shipping option method. For example, Id: 350 always corresponds to PurolatorExpress with charge 7.94 CAD.Cost
(Required) Currency
(Required) EstimatedTransitTime
(Optional) Name
(Optional) Example
HTTP 200 Content-Type: application/json
[
{
"Id": "350",
"Cost": 7.94,
"Currency": "CAD",
"EstimatedTransitTime": "1 week",
"Name": "PurolatorExpress"
}
]


new Easyrtc_Rates()
Provides methods for building SDP filters. SDP filters can be used
to control bit rates.
- Source:
Methods
(static) easyrtc.buildLocalSdpFilter(options) → {function}
This function returns an sdp filter function.
Parameters:
| Name | Type | Description |
|---|---|---|
options |
A map that optionally includes values for the following keys: audioRecvCodec, audioRecvBitrate, videoRecvBitrate, videoRecvCodec |
- Source:
Returns:
which takes an SDP string and returns a modified SDP string.
- Type
- function
(static) easyrtc.buildRemoteSdpFilter(options) → {function}
This function returns an sdp filter function.
Parameters:
| Name | Type | Description |
|---|---|---|
options |
A map that optionally includes values for the following keys: stereo, audioSendCodec, audioSendBitrate, videoSendBitrate, videoSendInitialBitRate, videoRecvCodec |
- Source:
Returns:
which takes an SDP string and returns a modified SDP string.
- Type
- function